docs: @FFDCIgnore({ NumberFormatException.class, NamingException.class })
      private void supportRangeAttributes(Attributes attributes, String dn, TimedDirContext ctx) throws WIMException, NamingException {
  
          final String METHODNAME = "supportRangeAttributes";
  
          // Deal with range attributes
          for (NamingEnumeration<?> anu = attributes.getAll(); anu.hasMoreElements();) {
              Attribute attr = (Attribute) anu.nextElement();
              String attrName = attr.getID();
  
              int pos = attrName.indexOf(ATTR_RANGE_KEYWORD);
              if (pos > -1) {
                  String attrId = attrName.substring(0, pos);
                  Attribute newAttr = new BasicAttribute(attrId);
                  if (tc.isDebugEnabled()) {
                      Tr.debug(tc, METHODNAME + " Range attriute retrieved: " + attrName);
                  }
  
                  for (NamingEnumeration<?> neu2 = attr.getAll(); neu2.hasMoreElements();) {
                      newAttr.add(neu2.nextElement());
                  }
  
                  int rangeLow = iAttrRangeStep;
                  try {
                      rangeLow = Integer.parseInt(attrName.substring(attrName.indexOf('-') + 1)) + 1;
                  } catch (NumberFormatException e) {
                      // continue;
                  }
                  int rangeHigh = rangeLow + iAttrRangeStep - 1;
                  boolean quitLoop = false;
                  boolean lastQuery = false;
                  do {
                      String attributeWithRange = null;
                      if (!lastQuery) {
                          Object[] args = { Integer.valueOf(rangeLow).toString(),
                                            Integer.valueOf(rangeHigh).toString()
                          };
                          attributeWithRange = attrId + MessageFormat.format(ATTR_RANGE_QUERY, args);
                      } else {
                          Object[] args = {
                                            Integer.valueOf(rangeLow).toString()
                          };
                          attributeWithRange = attrId + MessageFormat.format(ATTR_RANGE_LAST_QUERY, args);
                      }
                      Attributes results = null;
                      String[] rAttrIds = {
                                            attributeWithRange
                      };
                      try {
                          results = ctx.getAttributes(new LdapName(dn), rAttrIds);
                      } catch (NamingException e) {
                          if (ContextManager.isConnectionException(e)) {
                              ctx = iContextManager.reCreateDirContext(ctx, e.toString());
                              results = ctx.getAttributes(new LdapName(dn), rAttrIds);
                          } else {
                              throw e;
                          }
                      }
                      Attribute result = results.get(attributeWithRange);
                      if (result == null) {
                          Object[] args = {
                                            Integer.valueOf(rangeLow).toString()
                          };
                          attributeWithRange = attrId + MessageFormat.format(ATTR_RANGE_LAST_QUERY, args);
                          result = results.get(attributeWithRange);
                          lastQuery = true;
                      }
                      if (result != null) {
                          for (NamingEnumeration<?> neu2 = result.getAll(); neu2.hasMoreElements();) {
                              newAttr.add(neu2.nextElement());
                          }
  
                          if (lastQuery) {
                              quitLoop = true;
                          } else {
                              rangeLow = rangeHigh + 1;
                              rangeHigh = rangeLow + iAttrRangeStep - 1;
                          }
                      } else {
                          lastQuery = true;
                      }
                  } while (!quitLoop);
                  attributes.put(newAttr);
                  attributes.remove(attrName);
              }
          }
      }