undefined ** FUN_00407c68(char *param_1)

{
  int iVar1;
  char *pcVar2;
  int iVar3;
  undefined **ppuVar4;
  int iVar5;
  
  ppuVar4 = &bi_functions;
  iVar1 = 0;
  do {
    iVar5 = iVar1;
    pcVar2 = *ppuVar4;
    ppuVar4 = ppuVar4 + 3;
    if (pcVar2 == (char *)0x0) {
      ppuVar4 = &bi_ipv4func;
      iVar1 = 0;
      do {
        iVar5 = iVar1;
        pcVar2 = *ppuVar4;
        ppuVar4 = ppuVar4 + 3;
        if (pcVar2 == (char *)0x0) {
          ppuVar4 = &bi_ipv6func;
          iVar1 = 0;
          do {
            iVar5 = iVar1;
            pcVar2 = *ppuVar4;
            ppuVar4 = ppuVar4 + 3;
            if (pcVar2 == (char *)0x0) {
              ppuVar4 = &bi_strfunc;
              iVar1 = 0;
              do {
                iVar5 = iVar1;
                pcVar2 = *ppuVar4;
                ppuVar4 = ppuVar4 + 3;
                if (pcVar2 == (char *)0x0) {
                  return (undefined **)0x0;
                }
                iVar3 = strcmp(param_1,pcVar2);
                iVar1 = iVar5 + 1;
              } while (iVar3 != 0);
              return &bi_strfunc + iVar5 * 3;
            }
            iVar3 = strcmp(param_1,pcVar2);
            iVar1 = iVar5 + 1;
          } while (iVar3 != 0);
          return &bi_ipv6func + iVar5 * 3;
        }
        iVar3 = strcmp(param_1,pcVar2);
        iVar1 = iVar5 + 1;
      } while (iVar3 != 0);
      return &bi_ipv4func + iVar5 * 3;
    }
    iVar3 = strcmp(param_1,pcVar2);
    iVar1 = iVar5 + 1;
  } while (iVar3 != 0);
  return &bi_functions + iVar5 * 3;
}