docs: private static List<String> loadGroups(Map<String, String[]> groups, boolean start, boolean restart) {
          final boolean bTrace = TraceComponent.isAnyTracingEnabled();
          final ChannelFramework cf = ChannelFrameworkFactory.getChannelFramework();
          List<String> createdGroups = new ArrayList<String>(groups.size());
  
          for (Entry<String, String[]> entry : groups.entrySet()) {
              String group = entry.getKey();
              List<String> chains = new ArrayList<String>(entry.getValue().length);
              List<String> delayed = new LinkedList<String>();
              // scan for missing chains
              for (String chain : entry.getValue()) {
                  if (null != cf.getChain(chain)) {
                      chains.add(chain);
                  } else {
                      delayed.add(chain);
                  }
              }
              // save off any delayed chains for this group definition
              if (!delayed.isEmpty()) {
                  if (bTrace && tc.isEventEnabled()) {
                      Tr.event(tc, "Delay; group missing chains; " + group);
                  }
                  if (start) {
                      delayedStarts.put(group, Boolean.valueOf(restart));
                  }
                  delayedConfig.put(GROUP_PREFIX + group, delayed.toArray(new String[delayed.size()]));
                  createdGroups.add(group);
              }
              // cannot use an empty list
              if (0 == chains.size()) {
                  if (bTrace && tc.isEventEnabled()) {
                      Tr.event(tc, "Group has no current chains; " + group);
                  }
                  continue;
              }
              try {
                  ChainGroupData cgd = cf.getChainGroup(group);
                  if (null == cgd) {
                      cgd = cf.addChainGroup(group, chains.toArray(new String[chains.size()]));
                  } else {
                      // adding more chains to the group
                      for (String newchain : chains) {
                          cf.addChainToGroup(group, newchain);
                      }
                  }
                  createdGroups.add(group);
              } catch (Exception e) {
                  FFDCFilter.processException(e, "ChannelUtils.loadGroups",
                                              "add", new Object[] { entry, cf });
                  if (bTrace && tc.isEventEnabled()) {
                      Tr.event(tc, "Unable to configure group " + group + "; " + e);
                  }
              }
          } // end-groups
  
          return createdGroups;
      }