
int search_object(uint *param_1,undefined *param_2)

{
  undefined *puVar1;
  undefined4 uVar2;
  byte bVar4;
  int iVar3;
  code *pcVar5;
  uint uVar6;
  int iVar7;
  int *piVar8;
  code *pcVar9;
  uint uVar10;
  uint *puVar11;
  code *pcVar12;
  uint uVar13;
  uint uVar14;
  uint uVar15;
  uint *puVar16;
  int *piVar17;
  uint *puVar18;
  uint *puVar19;
  uint *local_58;
  int *local_54;
  undefined *local_50 [2];
  code *local_48;
  uint *local_44;
  uint *local_40;
  code *local_3c;
  code *local_38;
  uint *local_34;
  uint *local_30;
  
  uVar13 = param_1[4];
  if ((int)uVar13 < 0) goto LAB_003ed920;
  uVar10 = uVar13 & 0x1fffff;
  if (uVar10 == 0) {
    piVar8 = (int *)param_1[3];
    if ((int)(uVar13 << 1) < 0) {
      if (*piVar8 != 0) {
        uVar10 = 0;
        do {
          iVar7 = classify_object_over_fdes(param_1);
          if (iVar7 == -1) goto LAB_003eda10;
          piVar8 = piVar8 + 1;
          uVar10 = uVar10 + iVar7;
        } while (*piVar8 != 0);
LAB_003edb08:
        if ((uVar10 & 0x1fffff) == uVar10) {
          param_1[4] = param_1[4] & 0xffe00000 | uVar10 & 0x1fffff;
        }
        else {
          param_1[4] = param_1[4] & 0xffe00000;
        }
        if (uVar10 != 0) goto LAB_003edce8;
      }
    }
    else {
      uVar10 = classify_object_over_fdes(param_1,piVar8);
      if (uVar10 != 0xffffffff) goto LAB_003edb08;
LAB_003eda10:
      param_1[4] = 0x1fe00000;
      param_1[3] = (uint)(PTR_UINT_004c12dc + 0xaa4);
    }
  }
  else {
LAB_003edce8:
    iVar7 = (uVar10 + 2) * 4;
    local_58 = (uint *)(*(code *)PTR_malloc_004c5b38)(iVar7);
    puVar1 = PTR_malloc_004c5b38;
    if (local_58 != (uint *)0x0) {
      local_58[1] = 0;
      local_54 = (int *)(*(code *)puVar1)(iVar7);
      if (local_54 != (int *)0x0) {
        local_54[1] = 0;
      }
      piVar8 = (int *)param_1[3];
      if ((int)(param_1[4] << 1) < 0) {
        if (*piVar8 == 0) goto LAB_003ee148;
        do {
          piVar8 = piVar8 + 1;
          add_fdes(param_1,&local_58);
        } while (*piVar8 != 0);
      }
      else {
        add_fdes(param_1,&local_58,piVar8);
      }
      piVar8 = local_54;
      local_3c = (code *)local_58;
      local_30 = local_58;
      if ((local_58 != (uint *)0x0) && (local_58[1] != uVar10)) {
LAB_003ee148:
        iVar7 = (*(code *)PTR_abort_004c5d24)();
        return iVar7;
      }
      if ((int)(param_1[4] << 2) < 0) {
        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3240);
      }
      else if ((param_1[4] & 0x1fe00000) == 0) {
        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628);
      }
      else {
        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558);
      }
      if (local_54 == (int *)0x0) {
        frame_heapsort(param_1,pcVar9,local_58);
      }
      else {
        local_38 = (code *)local_58[1];
        if (local_38 == (code *)0x0) {
          iVar7 = 0;
          uVar13 = 0;
        }
        else {
          piVar17 = local_54 + 2;
          local_34 = local_58 + (int)local_38 + 1;
          puVar11 = (uint *)(PTR_DAT_004c256c + -0x15d0);
          local_48 = (code *)(local_58 + 2);
          *piVar17 = (int)puVar11;
          local_44 = (uint *)local_48;
          local_40 = (uint *)piVar17;
          puVar18 = (uint *)local_48;
          puVar16 = (uint *)local_48;
          if (local_48 != (code *)local_34) {
            do {
              while ((puVar19 = puVar11, puVar11 != puVar18 &&
                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))
                    ) {
                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));
                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;
                puVar18 = puVar19;
              }
              local_40 = (uint *)((int *)local_40 + 1);
              puVar18 = puVar16 + 1;
              *local_40 = (uint)puVar19;
              puVar16 = puVar18;
            } while (puVar18 != local_34);
          }
          iVar7 = 0;
          uVar13 = 0;
          uVar15 = 0;
          puVar18 = local_44;
          do {
            while (local_44 = puVar18, *piVar17 == 0) {
              iVar3 = iVar7 + 2;
              uVar15 = uVar15 + 1;
              iVar7 = iVar7 + 1;
              piVar8[iVar3] = *local_44;
              piVar17 = piVar17 + 1;
              puVar18 = local_44 + 1;
              if (local_38 == (code *)uVar15) goto LAB_003edef4;
            }
            iVar3 = uVar13 + 2;
            uVar15 = uVar15 + 1;
            uVar13 = uVar13 + 1;
            *(uint *)((int)local_3c + iVar3 * 4) = *local_44;
            piVar17 = piVar17 + 1;
            puVar18 = local_44 + 1;
          } while (local_38 != (code *)uVar15);
LAB_003edef4:
          local_44 = local_44 + 1;
        }
        local_30[1] = uVar13;
        piVar8[1] = iVar7;
        local_3c = (code *)local_58;
        if (local_58[1] + local_54[1] != uVar10) goto LAB_003ee148;
        frame_heapsort(param_1,pcVar9);
        local_40 = (uint *)local_54;
        if ((uint *)local_54[1] != (uint *)0x0) {
          local_44 = local_58;
          uVar13 = local_58[1];
          pcVar12 = (code *)local_54[1];
          do {
            local_48 = (code *)((int)pcVar12 + -1);
            uVar10 = (local_40 + (int)pcVar12)[1];
            if (uVar13 == 0) {
              local_44[(int)pcVar12 + 1] = uVar10;
              if (pcVar12 == (code *)0x1) break;
              local_48 = (code *)((int)pcVar12 + -2);
              uVar10 = local_40[(int)pcVar12];
              pcVar5 = local_48;
            }
            else {
              puVar18 = local_44 + uVar13;
              do {
                uVar15 = uVar13 - 1;
                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);
                pcVar5 = (code *)((int)pcVar12 + uVar15);
                if (iVar7 < 1) break;
                puVar18[(int)pcVar12 + 1] = puVar18[1];
                pcVar5 = local_48;
                puVar18 = puVar18 + -1;
                uVar13 = uVar15;
              } while (uVar15 != 0);
            }
            local_44[(int)pcVar5 + 2] = uVar10;
            pcVar12 = local_48;
          } while (local_48 != (code *)0x0);
          local_44[1] = local_44[1] + local_40[1];
        }
        local_40 = (uint *)local_54;
        (*(code *)PTR_free_004c5c18)(local_54);
      }
      *local_58 = param_1[3];
      param_1[3] = (uint)local_58;
      param_1[4] = param_1[4] & 0x7fffffff | 0x80000000;
    }
  }
  if (param_2 < (undefined *)*param_1) {
    return 0;
  }
  uVar13 = param_1[4];
  piVar8 = (int *)param_1[3];
  if (-1 < (int)uVar13) {
    if (-1 < (int)(uVar13 << 1)) {
      iVar7 = linear_search_fdes(param_1,piVar8,param_2);
      return iVar7;
    }
    iVar7 = *piVar8;
    while( true ) {
      if (iVar7 == 0) {
        return 0;
      }
      iVar7 = linear_search_fdes(param_1,iVar7,param_2);
      if (iVar7 != 0) break;
      piVar8 = piVar8 + 1;
      iVar7 = *piVar8;
    }
    return iVar7;
  }
LAB_003ed920:
  uVar15 = param_1[3];
  uVar10 = *(uint *)(uVar15 + 4);
  if ((uVar13 & 0x20000000) == 0) {
    if ((uVar13 & 0x1fe00000) == 0) {
      if (uVar10 != 0) {
        uVar13 = 0;
        uVar14 = uVar10;
        while( true ) {
          uVar6 = uVar10 >> 1;
          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);
          if ((*(undefined **)(iVar7 + 8) <= param_2) &&
             (uVar13 = uVar6 + 1, uVar6 = uVar14,
             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc))) break;
          if (uVar6 <= uVar13) {
            return 0;
          }
          uVar10 = uVar6 + uVar13;
          uVar14 = uVar6;
        }
        return iVar7;
      }
    }
    else {
      uVar13 = (uVar13 << 3) >> 0x18;
      local_44 = (uint *)base_from_cb_data_isra_4(uVar13,param_1 + 1,param_1 + 2);
      if (uVar10 != 0) {
        local_40 = (uint *)(uVar13 & 0xf);
        local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);
        uVar14 = 0;
        do {
          uVar6 = uVar10 + uVar14 >> 1;
          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);
          uVar2 = (*local_48)(uVar13,local_44,iVar7 + 8,local_50);
          (*local_48)(local_40,0,uVar2,&local_58);
          if ((local_50[0] <= param_2) &&
             (uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58)) {
            return iVar7;
          }
          uVar10 = uVar6;
        } while (uVar14 < uVar6);
      }
    }
  }
  else {
    local_40 = param_1 + 1;
    if (uVar10 != 0) {
      uVar13 = 0;
      local_44 = param_1 + 2;
      local_3c = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x37e0);
      local_38 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x35e8);
      local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);
      do {
        uVar14 = uVar13 + uVar10 >> 1;
        iVar7 = *(int *)(uVar15 + (uVar14 + 2) * 4);
        bVar4 = (*local_3c)((iVar7 + 4) - *(int *)(iVar7 + 4));
        uVar2 = (*local_38)(bVar4,local_40,local_44);
        uVar2 = (*local_48)(bVar4,uVar2,iVar7 + 8,local_50);
        (*local_48)(bVar4 & 0xf,0,uVar2,&local_58);
        if ((local_50[0] <= param_2) &&
           (uVar13 = uVar14 + 1, uVar14 = uVar10, param_2 < local_50[0] + (int)local_58)) {
          return iVar7;
        }
        uVar10 = uVar14;
      } while (uVar13 < uVar14);
    }
  }
  return 0;
}



int FUN_003ed8d4(uint *param_1,undefined *param_2)

{
  undefined *puVar1;
  undefined4 uVar2;
  byte bVar4;
  int iVar3;
  code *pcVar5;
  uint uVar6;
  int iVar7;
  int *piVar8;
  code *pcVar9;
  uint uVar10;
  uint *puVar11;
  code *pcVar12;
  uint uVar13;
  uint uVar14;
  uint uVar15;
  uint *puVar16;
  int *piVar17;
  uint *puVar18;
  uint *puVar19;
  uint *local_58;
  int *local_54;
  undefined *local_50 [2];
  code *local_48;
  uint *local_44;
  uint *local_40;
  code *local_3c;
  code *local_38;
  uint *local_34;
  uint *local_30;
  
  uVar13 = param_1[4];
  if ((int)uVar13 < 0) goto LAB_003ed920;
  uVar10 = uVar13 & 0x1fffff;
  if (uVar10 == 0) {
    piVar8 = (int *)param_1[3];
    if ((int)(uVar13 << 1) < 0) {
      if (*piVar8 != 0) {
        uVar10 = 0;
        do {
          iVar7 = FUN_003ecf18(param_1);
          if (iVar7 == -1) goto LAB_003eda10;
          piVar8 = piVar8 + 1;
          uVar10 = uVar10 + iVar7;
        } while (*piVar8 != 0);
LAB_003edb08:
        if ((uVar10 & 0x1fffff) == uVar10) {
          param_1[4] = param_1[4] & 0xffe00000 | uVar10 & 0x1fffff;
        }
        else {
          param_1[4] = param_1[4] & 0xffe00000;
        }
        if (uVar10 != 0) goto LAB_003edce8;
      }
    }
    else {
      uVar10 = FUN_003ecf18(param_1,piVar8);
      if (uVar10 != 0xffffffff) goto LAB_003edb08;
LAB_003eda10:
      param_1[4] = 0x1fe00000;
      param_1[3] = (uint)(PTR_UINT_004c12dc + 0xaa4);
    }
  }
  else {
LAB_003edce8:
    iVar7 = (uVar10 + 2) * 4;
    local_58 = (uint *)(*(code *)PTR_malloc_004c5b38)(iVar7);
    puVar1 = PTR_malloc_004c5b38;
    if (local_58 != (uint *)0x0) {
      local_58[1] = 0;
      local_54 = (int *)(*(code *)puVar1)(iVar7);
      if (local_54 != (int *)0x0) {
        local_54[1] = 0;
      }
      piVar8 = (int *)param_1[3];
      if ((int)(param_1[4] << 1) < 0) {
        if (*piVar8 == 0) goto LAB_003ee148;
        do {
          piVar8 = piVar8 + 1;
          FUN_003ed114(param_1,&local_58);
        } while (*piVar8 != 0);
      }
      else {
        FUN_003ed114(param_1,&local_58,piVar8);
      }
      piVar8 = local_54;
      local_3c = (code *)local_58;
      local_30 = local_58;
      if ((local_58 != (uint *)0x0) && (local_58[1] != uVar10)) {
LAB_003ee148:
        iVar7 = (*(code *)PTR_abort_004c5d24)();
        return iVar7;
      }
      if ((int)(param_1[4] << 2) < 0) {
        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3240);
      }
      else if ((param_1[4] & 0x1fe00000) == 0) {
        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628);
      }
      else {
        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558);
      }
      if (local_54 == (int *)0x0) {
        FUN_003ec50c(param_1,pcVar9,local_58);
      }
      else {
        local_38 = (code *)local_58[1];
        if (local_38 == (code *)0x0) {
          iVar7 = 0;
          uVar13 = 0;
        }
        else {
          piVar17 = local_54 + 2;
          local_34 = local_58 + (int)local_38 + 1;
          puVar11 = (uint *)(PTR_DAT_004c256c + -0x15d0);
          local_48 = (code *)(local_58 + 2);
          *piVar17 = (int)puVar11;
          local_44 = (uint *)local_48;
          local_40 = (uint *)piVar17;
          puVar18 = (uint *)local_48;
          puVar16 = (uint *)local_48;
          if (local_48 != (code *)local_34) {
            do {
              while ((puVar19 = puVar11, puVar11 != puVar18 &&
                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))
                    ) {
                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));
                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;
                puVar18 = puVar19;
              }
              local_40 = (uint *)((int *)local_40 + 1);
              puVar18 = puVar16 + 1;
              *local_40 = (uint)puVar19;
              puVar16 = puVar18;
            } while (puVar18 != local_34);
          }
          iVar7 = 0;
          uVar13 = 0;
          uVar15 = 0;
          puVar18 = local_44;
          do {
            while (local_44 = puVar18, *piVar17 == 0) {
              iVar3 = iVar7 + 2;
              uVar15 = uVar15 + 1;
              iVar7 = iVar7 + 1;
              piVar8[iVar3] = *local_44;
              piVar17 = piVar17 + 1;
              puVar18 = local_44 + 1;
              if (local_38 == (code *)uVar15) goto LAB_003edef4;
            }
            iVar3 = uVar13 + 2;
            uVar15 = uVar15 + 1;
            uVar13 = uVar13 + 1;
            *(uint *)((int)local_3c + iVar3 * 4) = *local_44;
            piVar17 = piVar17 + 1;
            puVar18 = local_44 + 1;
          } while (local_38 != (code *)uVar15);
LAB_003edef4:
          local_44 = local_44 + 1;
        }
        local_30[1] = uVar13;
        piVar8[1] = iVar7;
        local_3c = (code *)local_58;
        if (local_58[1] + local_54[1] != uVar10) goto LAB_003ee148;
        FUN_003ec50c(param_1,pcVar9);
        local_40 = (uint *)local_54;
        if ((uint *)local_54[1] != (uint *)0x0) {
          local_44 = local_58;
          uVar13 = local_58[1];
          pcVar12 = (code *)local_54[1];
          do {
            local_48 = (code *)((int)pcVar12 + -1);
            uVar10 = (local_40 + (int)pcVar12)[1];
            if (uVar13 == 0) {
              local_44[(int)pcVar12 + 1] = uVar10;
              if (pcVar12 == (code *)0x1) break;
              local_48 = (code *)((int)pcVar12 + -2);
              uVar10 = local_40[(int)pcVar12];
              pcVar5 = local_48;
            }
            else {
              puVar18 = local_44 + uVar13;
              do {
                uVar15 = uVar13 - 1;
                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);
                pcVar5 = (code *)((int)pcVar12 + uVar15);
                if (iVar7 < 1) break;
                puVar18[(int)pcVar12 + 1] = puVar18[1];
                pcVar5 = local_48;
                puVar18 = puVar18 + -1;
                uVar13 = uVar15;
              } while (uVar15 != 0);
            }
            local_44[(int)pcVar5 + 2] = uVar10;
            pcVar12 = local_48;
          } while (local_48 != (code *)0x0);
          local_44[1] = local_44[1] + local_40[1];
        }
        local_40 = (uint *)local_54;
        (*(code *)PTR_free_004c5c18)(local_54);
      }
      *local_58 = param_1[3];
      param_1[3] = (uint)local_58;
      param_1[4] = param_1[4] & 0x7fffffff | 0x80000000;
    }
  }
  if (param_2 < (undefined *)*param_1) {
    return 0;
  }
  uVar13 = param_1[4];
  piVar8 = (int *)param_1[3];
  if (-1 < (int)uVar13) {
    if (-1 < (int)(uVar13 << 1)) {
      iVar7 = FUN_003ecb9c(param_1,piVar8,param_2);
      return iVar7;
    }
    iVar7 = *piVar8;
    while( true ) {
      if (iVar7 == 0) {
        return 0;
      }
      iVar7 = FUN_003ecb9c(param_1,iVar7,param_2);
      if (iVar7 != 0) break;
      piVar8 = piVar8 + 1;
      iVar7 = *piVar8;
    }
    return iVar7;
  }
LAB_003ed920:
  uVar15 = param_1[3];
  uVar10 = *(uint *)(uVar15 + 4);
  if ((uVar13 & 0x20000000) == 0) {
    if ((uVar13 & 0x1fe00000) == 0) {
      if (uVar10 != 0) {
        uVar13 = 0;
        uVar14 = uVar10;
        while( true ) {
          uVar6 = uVar10 >> 1;
          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);
          if ((*(undefined **)(iVar7 + 8) <= param_2) &&
             (uVar13 = uVar6 + 1, uVar6 = uVar14,
             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc))) break;
          if (uVar6 <= uVar13) {
            return 0;
          }
          uVar10 = uVar6 + uVar13;
          uVar14 = uVar6;
        }
        return iVar7;
      }
    }
    else {
      uVar13 = (uVar13 << 3) >> 0x18;
      local_44 = (uint *)FUN_003eca18(uVar13,param_1 + 1,param_1 + 2);
      if (uVar10 != 0) {
        local_40 = (uint *)(uVar13 & 0xf);
        local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);
        uVar14 = 0;
        do {
          uVar6 = uVar10 + uVar14 >> 1;
          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);
          uVar2 = (*local_48)(uVar13,local_44,iVar7 + 8,local_50);
          (*local_48)(local_40,0,uVar2,&local_58);
          if ((local_50[0] <= param_2) &&
             (uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58)) {
            return iVar7;
          }
          uVar10 = uVar6;
        } while (uVar14 < uVar6);
      }
    }
  }
  else {
    local_40 = param_1 + 1;
    if (uVar10 != 0) {
      uVar13 = 0;
      local_44 = param_1 + 2;
      local_3c = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x37e0);
      local_38 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x35e8);
      local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);
      do {
        uVar14 = uVar13 + uVar10 >> 1;
        iVar7 = *(int *)(uVar15 + (uVar14 + 2) * 4);
        bVar4 = (*local_3c)((iVar7 + 4) - *(int *)(iVar7 + 4));
        uVar2 = (*local_38)(bVar4,local_40,local_44);
        uVar2 = (*local_48)(bVar4,uVar2,iVar7 + 8,local_50);
        (*local_48)(bVar4 & 0xf,0,uVar2,&local_58);
        if ((local_50[0] <= param_2) &&
           (uVar13 = uVar14 + 1, uVar14 = uVar10, param_2 < local_50[0] + (int)local_58)) {
          return iVar7;
        }
        uVar10 = uVar14;
      } while (uVar13 < uVar14);
    }
  }
  return 0;
}


lui gp,0xe
addiu gp,gp,-0x4694
addu gp,gp,t9
addiu sp,sp,-0x70
sw s4,0x58(sp)
sw gp,0x10(sp)
sw s1,0x4c(sp)
or s1,a1,zero
sw s0,0x48(sp)
sw ra,0x6c(sp)
sw s8,0x68(sp)
sw s7,0x64(sp)
sw s6,0x60(sp)
sw s5,0x5c(sp)
sw s3,0x54(sp)
sw s2,0x50(sp)
lw s4,0x10(a0)
bgez s4,0x003ed9c0
_or s0,a0,zero
lw s6,0xc(s0)
lui t1,0x2000
and s5,s4,t1
bne s5,zero,0x003edbc0
_lw s3,0x4(s6)
lui a3,0x1fe0
and a3,s4,a3
bne a3,zero,0x003eda28
_lw t9,-0x7fc4(gp)
beq s3,zero,0x003edcb0
_addiu s7,sp,0x20
b 0x003ed974
_addu a1,s3,a3
addu v0,a2,v0
sltu v0,s1,v0
bne v0,zero,0x003edb8c
_addiu a3,a1,0x1
sltu v0,a3,s3
beq v0,zero,0x003edcb4
_lw ra,0x6c(sp)
addu a1,s3,a3
srl a1,a1,0x1
addiu v0,a1,0x2
sll v0,v0,0x2
addu v0,s6,v0
lw s2,0x0(v0)
addiu a0,s2,0x8
addiu v0,s2,0xc
lwl a2,0x0(a0)
lwr a2,0x3(a0)
sw a2,0x0(s7)
lwl a0,0x0(v0)
lw a2,0x20(sp)
lwr a0,0x3(v0)
or v0,a0,zero
sltu a0,s1,a2
beq a0,zero,0x003ed954
_sw v0,0x18(sp)
b 0x003ed964
_or s3,a1,zero
ext s5,s4,0x0,0x15
bne s5,zero,0x003edce8
_ext s4,s4,0x1e,0x1
beq s4,zero,0x003edae8
_lw s2,0xc(a0)
lw a1,0x0(s2)
beq a1,zero,0x003edb28
_lw s3,-0x7fc4(gp)
li s4,-0x1
b 0x003ed9fc
_addiu s3,s3,-0x30e8
addiu s2,s2,0x4
lw a1,0x0(s2)
beq a1,zero,0x003edb08
_addu s5,s5,v0
or t9,s3,zero
bal 0x003ecf18
_or a0,s0,zero
bne v0,s4,0x003ed9ec
_lw gp,0x10(sp)
lui v0,0x1fe0
sw v0,0x10(s0)
lw v0,-0x7f64(gp)
addiu v0,v0,0xaa4
b 0x003edb28
_sw v0,0xc(s0)
ext s4,s4,0x15,0x8
addiu a2,s0,0x8
addiu a1,s0,0x4
addiu t9,t9,-0x35e8
bal 0x003eca18
_or a0,s4,zero
lw gp,0x10(sp)
beq s3,zero,0x003edcb0
_sw v0,0x2c(sp)
lw v1,-0x7fc4(gp)
andi v0,s4,0xf
sw v0,0x30(sp)
addiu s8,sp,0x18
addiu s7,sp,0x20
addiu v0,v1,-0x3968
b 0x003eda88
_sw v0,0x28(sp)
addu v0,v0,a0
sltu v0,s1,v0
bne v0,zero,0x003edb8c
_addiu s5,s0,0x1
sltu v0,s5,s3
beq v0,zero,0x003edcb4
_lw ra,0x6c(sp)
addu s0,s3,s5
lw a1,0x2c(sp)
lw t9,0x28(sp)
or a3,s7,zero
srl s0,s0,0x1
or a0,s4,zero
addiu v0,s0,0x2
sll v0,v0,0x2
addu v0,s6,v0
lw s2,0x0(v0)
jalr t9
_addiu a2,s2,0x8
or a1,zero,zero
lw a0,0x30(sp)
or a3,s8,zero
lw t9,0x28(sp)
jalr t9
_or a2,v0,zero
lw v0,0x20(sp)
sltu a0,s1,v0
beq a0,zero,0x003eda6c
_lw a0,0x18(sp)
b 0x003eda7c
_or s3,s0,zero
lw t9,-0x7fc4(gp)
addiu t9,t9,-0x30e8
bal 0x003ecf18
_or a1,s2,zero
li v1,-0x1
lw gp,0x10(sp)
beq v0,v1,0x003eda10
_or s5,v0,zero
ext v0,s5,0x0,0x15
beq v0,s5,0x003ee0f4
_nop
lw v0,0x10(s0)
ins v0,zero,0x0,0x15
sw v0,0x10(s0)
bne s5,zero,0x003edce8
_nop
lw v0,0x0(s0)
sltu v0,s1,v0
bne v0,zero,0x003edcb4
_lw ra,0x6c(sp)
lw s4,0x10(s0)
bltz s4,0x003ed920
_lw s3,0xc(s0)
ext s4,s4,0x1e,0x1
beq s4,zero,0x003ee058
_lw t9,-0x7fc4(gp)
lw a1,0x0(s3)
beq a1,zero,0x003edcb4
_lw s4,-0x7fc4(gp)
b 0x003edb74
_addiu s4,s4,-0x3464
addiu s3,s3,0x4
lw a1,0x0(s3)
beq a1,zero,0x003edcb4
_lw ra,0x6c(sp)
or a2,s1,zero
or t9,s4,zero
bal 0x003ecb9c
_or a0,s0,zero
beq v0,zero,0x003edb64
_or s2,v0,zero
lw ra,0x6c(sp)
or v0,s2,zero
lw s8,0x68(sp)
lw s7,0x64(sp)
lw s6,0x60(sp)
lw s5,0x5c(sp)
lw s4,0x58(sp)
lw s3,0x54(sp)
lw s2,0x50(sp)
lw s1,0x4c(sp)
lw s0,0x48(sp)
jr ra
_addiu sp,sp,0x70
beq s3,zero,0x003edcb0
_addiu v0,s0,0x4
lw s7,-0x7fc4(gp)
lw v1,-0x7fc4(gp)
or s5,zero,zero
sw v0,0x30(sp)
addiu v0,s0,0x8
addiu s8,sp,0x18
sw v0,0x2c(sp)
addiu v0,s7,-0x37e0
addiu s7,sp,0x20
sw v0,0x34(sp)
lw v0,-0x7fc4(gp)
addiu v0,v0,-0x35e8
sw v0,0x38(sp)
addiu v0,v1,-0x3968
b 0x003edc24
_sw v0,0x28(sp)
addu v0,v0,a0
sltu v0,s1,v0
bne v0,zero,0x003edb8c
_addiu s5,s4,0x1
sltu v0,s5,s3
beq v0,zero,0x003edcb4
_lw ra,0x6c(sp)
addu t1,s5,s3
lw t9,0x34(sp)
srl s4,t1,0x1
addiu v0,s4,0x2
sll v0,v0,0x2
addu v0,s6,v0
lw s2,0x0(v0)
addiu a0,s2,0x4
lw v0,0x4(s2)
jalr t9
_subu a0,a0,v0
lw a2,0x2c(sp)
andi s0,v0,0xff
lw a1,0x30(sp)
lw t9,0x38(sp)
jalr t9
_or a0,s0,zero
addiu a2,s2,0x8
lw t9,0x28(sp)
or a3,s7,zero
or a0,s0,zero
jalr t9
_or a1,v0,zero
or a1,zero,zero
lw t9,0x28(sp)
andi a0,s0,0xf
or a3,s8,zero
jalr t9
_or a2,v0,zero
lw v0,0x20(sp)
sltu a0,s1,v0
beq a0,zero,0x003edc08
_lw a0,0x18(sp)
b 0x003edc18
_or s3,s4,zero
lw ra,0x6c(sp)
or s2,zero,zero
lw s8,0x68(sp)
or v0,s2,zero
lw s7,0x64(sp)
lw s6,0x60(sp)
lw s5,0x5c(sp)
lw s4,0x58(sp)
lw s3,0x54(sp)
lw s2,0x50(sp)
lw s1,0x4c(sp)
lw s0,0x48(sp)
jr ra
_addiu sp,sp,0x70
addiu s2,s5,0x2
lw t9,-0x3708(gp)
sll s2,s2,0x2
jalr t9
_or a0,s2,zero
lw gp,0x10(sp)
beq v0,zero,0x003edb28
_sw v0,0x18(sp)
lw t9,-0x3708(gp)
or a0,s2,zero
jalr t9
_sw zero,0x4(v0)
lw gp,0x10(sp)
beq v0,zero,0x003edd28
_sw v0,0x1c(sp)
sw zero,0x4(v0)
lw v0,0x10(s0)
ext v0,v0,0x1e,0x1
beq v0,zero,0x003ee0b0
_lw s2,0xc(s0)
lw a2,0x0(s2)
beq a2,zero,0x003ee144
_lw s3,-0x7fc4(gp)
addiu s8,sp,0x18
addiu s3,s3,-0x2eec
addiu s2,s2,0x4
or a1,s8,zero
or t9,s3,zero
bal 0x003ed114
_or a0,s0,zero
lw a2,0x0(s2)
bne a2,zero,0x003edd4c
_lw gp,0x10(sp)
lw v0,0x18(sp)
sw v0,0x34(sp)
beq v0,zero,0x003edd88
_sw v0,0x40(sp)
lw v0,0x4(v0)
bne v0,s5,0x003ee148
_lw t9,-0x351c(gp)
lw v0,0x10(s0)
ext v1,v0,0x1d,0x1
bne v1,zero,0x003ee0a4
_lui v1,0x1fe0
and v0,v0,v1
beq v0,zero,0x003ee0ec
_lw s2,-0x7fc4(gp)
lw s2,-0x7fc4(gp)
addiu s2,s2,-0x3558
lw s4,0x1c(sp)
beq s4,zero,0x003ee0d0
_lw t9,-0x7fc4(gp)
lw a0,0x34(sp)
lw v0,0x4(a0)
beq v0,zero,0x003ee134
_sw v0,0x38(sp)
sll v1,v0,0x2
lw s3,-0x6cd4(gp)
addiu v0,a0,0x4
addiu s7,s4,0x8
addu v0,v1,v0
sw s7,0x30(sp)
addiu s3,s3,-0x15d0
sw v0,0x3c(sp)
addiu s6,a0,0x8
lw v0,0x30(sp)
or s8,s3,zero
sw s6,0x28(sp)
sw s6,0x2c(sp)
sw s8,0x0(v0)
lw v0,0x3c(sp)
beq s6,v0,0x003ede74
_or a3,zero,zero
bne s3,s6,0x003ede34
_or s8,s6,zero
b 0x003edfe8
_lw v0,0x30(sp)
lw v0,0x28(sp)
subu v1,s8,v0
addu v0,s4,v1
lw s8,0x8(v0)
beq s8,s3,0x003edfe4
_sw zero,0x8(v0)
lw a2,0x0(s8)
or a0,s0,zero
or t9,s2,zero
jalr t9
_lw a1,0x4(s6)
bltz v0,0x003ede1c
_lw gp,0x10(sp)
lw v0,0x30(sp)
addiu s6,s6,0x4
addiu v0,v0,0x4
sw v0,0x30(sp)
lw v0,0x30(sp)
sw s8,0x0(v0)
lw v0,0x3c(sp)
bne s6,v0,0x003ede0c
_or a3,zero,zero
or a0,zero,zero
b 0x003edeb4
_or v1,zero,zero
addiu v0,a0,0x2
lw a2,0x34(sp)
addiu v1,v1,0x1
sll v0,v0,0x2
addiu a0,a0,0x1
addu v0,a2,v0
sw a1,0x0(v0)
lw v0,0x2c(sp)
addiu v0,v0,0x4
sw v0,0x2c(sp)
lw v0,0x38(sp)
beq v0,v1,0x003edef4
_addiu s7,s7,0x4
lw a1,0x2c(sp)
lw v0,0x0(s7)
bne v0,zero,0x003ede80
_lw a1,0x0(a1)
addiu v0,a3,0x2
addiu v1,v1,0x1
sll v0,v0,0x2
addiu a3,a3,0x1
addu v0,s4,v0
sw a1,0x0(v0)
lw v0,0x2c(sp)
addiu v0,v0,0x4
sw v0,0x2c(sp)
lw v0,0x38(sp)
bne v0,v1,0x003edeb4
_addiu s7,s7,0x4
lw v0,0x18(sp)
lw a2,0x1c(sp)
sw v0,0x34(sp)
lw v0,0x40(sp)
sw a0,0x4(v0)
sw a3,0x4(s4)
lw v0,0x34(sp)
lw v1,0x4(a2)
lw v0,0x4(v0)
addu v0,v0,v1
bne v0,s5,0x003ee144
_lw t9,-0x7fc4(gp)
or a1,s2,zero
addiu t9,t9,-0x3af4
bal 0x003ec50c
_or a0,s0,zero
lw v0,0x1c(sp)
lw gp,0x10(sp)
sw v0,0x30(sp)
lw s3,0x4(v0)
beq s3,zero,0x003ee028
_lw t9,-0x3628(gp)
lw v0,0x18(sp)
sw v0,0x2c(sp)
lw s8,0x4(v0)
addiu v0,s3,-0x1
sll s5,s3,0x2
sw v0,0x28(sp)
lw v0,0x30(sp)
addu v0,v0,s5
beq s8,zero,0x003ee104
_lw s4,0x4(v0)
lw v0,0x2c(sp)
sll v1,s8,0x2
b 0x003edf9c
_addu s7,v0,v1
lw a0,0x4(s7)
addu v0,s7,s5
or s8,s6,zero
addiu s7,s7,-0x4
beq s6,zero,0x003edffc
_sw a0,0x4(v0)
lw a1,0x4(s7)
or a0,s0,zero
addiu s6,s8,-0x1
or t9,s2,zero
jalr t9
_or a2,s4,zero
addu a0,s3,s6
bgtz v0,0x003edf84
_lw gp,0x10(sp)
addiu a0,a0,0x2
lw v0,0x2c(sp)
sll a0,a0,0x2
addu a0,v0,a0
lw v0,0x28(sp)
beq v0,zero,0x003ee004
_sw s4,0x0(a0)
b 0x003edf58
_lw s3,0x28(sp)
lw v0,0x30(sp)
or s8,s3,zero
addiu s6,s6,0x4
addiu v0,v0,0x4
b 0x003ede60
_sw v0,0x30(sp)
b 0x003edfc0
_lw a0,0x28(sp)
lw v0,0x30(sp)
lw a0,0x2c(sp)
lw a1,0x1c(sp)
lw v1,0x4(v0)
lw v0,0x4(a0)
sw a1,0x30(sp)
addu v0,v0,v1
sw v0,0x4(a0)
lw t9,-0x3628(gp)
jalr t9
_lw a0,0x30(sp)
lw gp,0x10(sp)
lw v1,0x18(sp)
lw v0,0xc(s0)
sw v0,0x0(v1)
sw v1,0xc(s0)
li v1,0x1
lw v0,0x10(s0)
ins v0,v1,0x1f,0x1
b 0x003edb28
_sw v0,0x10(s0)
or a2,s1,zero
or a1,s3,zero
addiu t9,t9,-0x3464
bal 0x003ecb9c
_or a0,s0,zero
lw ra,0x6c(sp)
or s2,v0,zero
or v0,s2,zero
lw s8,0x68(sp)
lw s7,0x64(sp)
lw s6,0x60(sp)
lw s5,0x5c(sp)
lw s4,0x58(sp)
lw s3,0x54(sp)
lw s2,0x50(sp)
lw s1,0x4c(sp)
lw s0,0x48(sp)
jr ra
_addiu sp,sp,0x70
lw s2,-0x7fc4(gp)
b 0x003eddac
_addiu s2,s2,-0x3240
lw t9,-0x7fc4(gp)
addiu a1,sp,0x18
or a2,s2,zero
addiu t9,t9,-0x2eec
bal 0x003ed114
_or a0,s0,zero
b 0x003edd6c
_lw gp,0x10(sp)
or a1,s2,zero
lw a2,0x34(sp)
addiu t9,t9,-0x3af4
bal 0x003ec50c
_or a0,s0,zero
b 0x003ee034
_lw gp,0x10(sp)
b 0x003eddac
_addiu s2,s2,-0x3628
lw v0,0x10(s0)
ins v0,s5,0x0,0x15
b 0x003edb20
_sw v0,0x10(s0)
addiu v1,s3,0x1
lw a0,0x2c(sp)
sll v1,v1,0x2
addu v1,a0,v1
sw s4,0x0(v1)
addiu v1,s3,-0x1
beq v1,zero,0x003ee004
_nop
addiu a0,s3,-0x2
lw s4,0x0(v0)
b 0x003edfc0
_sw a0,0x28(sp)
or a3,zero,zero
or a0,zero,zero
b 0x003edf00
_or a2,s4,zero
lw t9,-0x351c(gp)
jalr t9
_nop
(translation_unit "int FUN_003ed8d4(uint *param_1,undefined *param_2)\n\n{\n  undefined *puVar1;\n  undefined4 uVar2;\n  byte bVar4;\n  int iVar3;\n  code *pcVar5;\n  uint uVar6;\n  int iVar7;\n  int *piVar8;\n  code *pcVar9;\n  uint uVar10;\n  uint *puVar11;\n  code *pcVar12;\n  uint uVar13;\n  uint uVar14;\n  uint uVar15;\n  uint *puVar16;\n  int *piVar17;\n  uint *puVar18;\n  uint *puVar19;\n  uint *local_58;\n  int *local_54;\n  undefined *local_50 [2];\n  code *local_48;\n  uint *local_44;\n  uint *local_40;\n  code *local_3c;\n  code *local_38;\n  uint *local_34;\n  uint *local_30;\n  \n  uVar13 = param_1[4];\n  if ((int)uVar13 < 0) goto LAB_003ed920;\n  uVar10 = uVar13 & 0x1fffff;\n  if (uVar10 == 0) {\n    piVar8 = (int *)param_1[3];\n    if ((int)(uVar13 << 1) < 0) {\n      if (*piVar8 != 0) {\n        uVar10 = 0;\n        do {\n          iVar7 = FUN_003ecf18(param_1);\n          if (iVar7 == -1) goto LAB_003eda10;\n          piVar8 = piVar8 + 1;\n          uVar10 = uVar10 + iVar7;\n        } while (*piVar8 != 0);\nLAB_003edb08:\n        if ((uVar10 & 0x1fffff) == uVar10) {\n          param_1[4] = param_1[4] & 0xffe00000 | uVar10 & 0x1fffff;\n        }\n        else {\n          param_1[4] = param_1[4] & 0xffe00000;\n        }\n        if (uVar10 != 0) goto LAB_003edce8;\n      }\n    }\n    else {\n      uVar10 = FUN_003ecf18(param_1,piVar8);\n      if (uVar10 != 0xffffffff) goto LAB_003edb08;\nLAB_003eda10:\n      param_1[4] = 0x1fe00000;\n      param_1[3] = (uint)(PTR_UINT_004c12dc + 0xaa4);\n    }\n  }\n  else {\nLAB_003edce8:\n    iVar7 = (uVar10 + 2) * 4;\n    local_58 = (uint *)(*(code *)PTR_malloc_004c5b38)(iVar7);\n    puVar1 = PTR_malloc_004c5b38;\n    if (local_58 != (uint *)0x0) {\n      local_58[1] = 0;\n      local_54 = (int *)(*(code *)puVar1)(iVar7);\n      if (local_54 != (int *)0x0) {\n        local_54[1] = 0;\n      }\n      piVar8 = (int *)param_1[3];\n      if ((int)(param_1[4] << 1) < 0) {\n        if (*piVar8 == 0) goto LAB_003ee148;\n        do {\n          piVar8 = piVar8 + 1;\n          FUN_003ed114(param_1,&local_58);\n        } while (*piVar8 != 0);\n      }\n      else {\n        FUN_003ed114(param_1,&local_58,piVar8);\n      }\n      piVar8 = local_54;\n      local_3c = (code *)local_58;\n      local_30 = local_58;\n      if ((local_58 != (uint *)0x0) && (local_58[1] != uVar10)) {\nLAB_003ee148:\n        iVar7 = (*(code *)PTR_abort_004c5d24)();\n        return iVar7;\n      }\n      if ((int)(param_1[4] << 2) < 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3240);\n      }\n      else if ((param_1[4] & 0x1fe00000) == 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628);\n      }\n      else {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558);\n      }\n      if (local_54 == (int *)0x0) {\n        FUN_003ec50c(param_1,pcVar9,local_58);\n      }\n      else {\n        local_38 = (code *)local_58[1];\n        if (local_38 == (code *)0x0) {\n          iVar7 = 0;\n          uVar13 = 0;\n        }\n        else {\n          piVar17 = local_54 + 2;\n          local_34 = local_58 + (int)local_38 + 1;\n          puVar11 = (uint *)(PTR_DAT_004c256c + -0x15d0);\n          local_48 = (code *)(local_58 + 2);\n          *piVar17 = (int)puVar11;\n          local_44 = (uint *)local_48;\n          local_40 = (uint *)piVar17;\n          puVar18 = (uint *)local_48;\n          puVar16 = (uint *)local_48;\n          if (local_48 != (code *)local_34) {\n            do {\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            } while (puVar18 != local_34);\n          }\n          iVar7 = 0;\n          uVar13 = 0;\n          uVar15 = 0;\n          puVar18 = local_44;\n          do {\n            while (local_44 = puVar18, *piVar17 == 0) {\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }\n            iVar3 = uVar13 + 2;\n            uVar15 = uVar15 + 1;\n            uVar13 = uVar13 + 1;\n            *(uint *)((int)local_3c + iVar3 * 4) = *local_44;\n            piVar17 = piVar17 + 1;\n            puVar18 = local_44 + 1;\n          } while (local_38 != (code *)uVar15);\nLAB_003edef4:\n          local_44 = local_44 + 1;\n        }\n        local_30[1] = uVar13;\n        piVar8[1] = iVar7;\n        local_3c = (code *)local_58;\n        if (local_58[1] + local_54[1] != uVar10) goto LAB_003ee148;\n        FUN_003ec50c(param_1,pcVar9);\n        local_40 = (uint *)local_54;\n        if ((uint *)local_54[1] != (uint *)0x0) {\n          local_44 = local_58;\n          uVar13 = local_58[1];\n          pcVar12 = (code *)local_54[1];\n          do {\n            local_48 = (code *)((int)pcVar12 + -1);\n            uVar10 = (local_40 + (int)pcVar12)[1];\n            if (uVar13 == 0) {\n              local_44[(int)pcVar12 + 1] = uVar10;\n              if (pcVar12 == (code *)0x1) break;\n              local_48 = (code *)((int)pcVar12 + -2);\n              uVar10 = local_40[(int)pcVar12];\n              pcVar5 = local_48;\n            }\n            else {\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }\n            local_44[(int)pcVar5 + 2] = uVar10;\n            pcVar12 = local_48;\n          } while (local_48 != (code *)0x0);\n          local_44[1] = local_44[1] + local_40[1];\n        }\n        local_40 = (uint *)local_54;\n        (*(code *)PTR_free_004c5c18)(local_54);\n      }\n      *local_58 = param_1[3];\n      param_1[3] = (uint)local_58;\n      param_1[4] = param_1[4] & 0x7fffffff | 0x80000000;\n    }\n  }\n  if (param_2 < (undefined *)*param_1) {\n    return 0;\n  }\n  uVar13 = param_1[4];\n  piVar8 = (int *)param_1[3];\n  if (-1 < (int)uVar13) {\n    if (-1 < (int)(uVar13 << 1)) {\n      iVar7 = FUN_003ecb9c(param_1,piVar8,param_2);\n      return iVar7;\n    }\n    iVar7 = *piVar8;\n    while( true ) {\n      if (iVar7 == 0) {\n        return 0;\n      }\n      iVar7 = FUN_003ecb9c(param_1,iVar7,param_2);\n      if (iVar7 != 0) break;\n      piVar8 = piVar8 + 1;\n      iVar7 = *piVar8;\n    }\n    return iVar7;\n  }\nLAB_003ed920:\n  uVar15 = param_1[3];\n  uVar10 = *(uint *)(uVar15 + 4);\n  if ((uVar13 & 0x20000000) == 0) {\n    if ((uVar13 & 0x1fe00000) == 0) {\n      if (uVar10 != 0) {\n        uVar13 = 0;\n        uVar14 = uVar10;\n        while( true ) {\n          uVar6 = uVar10 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          if ((*(undefined **)(iVar7 + 8) <= param_2) &&\n             (uVar13 = uVar6 + 1, uVar6 = uVar14,\n             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc))) break;\n          if (uVar6 <= uVar13) {\n            return 0;\n          }\n          uVar10 = uVar6 + uVar13;\n          uVar14 = uVar6;\n        }\n        return iVar7;\n      }\n    }\n    else {\n      uVar13 = (uVar13 << 3) >> 0x18;\n      local_44 = (uint *)FUN_003eca18(uVar13,param_1 + 1,param_1 + 2);\n      if (uVar10 != 0) {\n        local_40 = (uint *)(uVar13 & 0xf);\n        local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n        uVar14 = 0;\n        do {\n          uVar6 = uVar10 + uVar14 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          uVar2 = (*local_48)(uVar13,local_44,iVar7 + 8,local_50);\n          (*local_48)(local_40,0,uVar2,&local_58);\n          if ((local_50[0] <= param_2) &&\n             (uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n            return iVar7;\n          }\n          uVar10 = uVar6;\n        } while (uVar14 < uVar6);\n      }\n    }\n  }\n  else {\n    local_40 = param_1 + 1;\n    if (uVar10 != 0) {\n      uVar13 = 0;\n      local_44 = param_1 + 2;\n      local_3c = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x37e0);\n      local_38 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x35e8);\n      local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n      do {\n        uVar14 = uVar13 + uVar10 >> 1;\n        iVar7 = *(int *)(uVar15 + (uVar14 + 2) * 4);\n        bVar4 = (*local_3c)((iVar7 + 4) - *(int *)(iVar7 + 4));\n        uVar2 = (*local_38)(bVar4,local_40,local_44);\n        uVar2 = (*local_48)(bVar4,uVar2,iVar7 + 8,local_50);\n        (*local_48)(bVar4 & 0xf,0,uVar2,&local_58);\n        if ((local_50[0] <= param_2) &&\n           (uVar13 = uVar14 + 1, uVar14 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n          return iVar7;\n        }\n        uVar10 = uVar14;\n      } while (uVar13 < uVar14);\n    }\n  }\n  return 0;\n}\n\n" (function_definition "int FUN_003ed8d4(uint *param_1,undefined *param_2)\n\n{\n  undefined *puVar1;\n  undefined4 uVar2;\n  byte bVar4;\n  int iVar3;\n  code *pcVar5;\n  uint uVar6;\n  int iVar7;\n  int *piVar8;\n  code *pcVar9;\n  uint uVar10;\n  uint *puVar11;\n  code *pcVar12;\n  uint uVar13;\n  uint uVar14;\n  uint uVar15;\n  uint *puVar16;\n  int *piVar17;\n  uint *puVar18;\n  uint *puVar19;\n  uint *local_58;\n  int *local_54;\n  undefined *local_50 [2];\n  code *local_48;\n  uint *local_44;\n  uint *local_40;\n  code *local_3c;\n  code *local_38;\n  uint *local_34;\n  uint *local_30;\n  \n  uVar13 = param_1[4];\n  if ((int)uVar13 < 0) goto LAB_003ed920;\n  uVar10 = uVar13 & 0x1fffff;\n  if (uVar10 == 0) {\n    piVar8 = (int *)param_1[3];\n    if ((int)(uVar13 << 1) < 0) {\n      if (*piVar8 != 0) {\n        uVar10 = 0;\n        do {\n          iVar7 = FUN_003ecf18(param_1);\n          if (iVar7 == -1) goto LAB_003eda10;\n          piVar8 = piVar8 + 1;\n          uVar10 = uVar10 + iVar7;\n        } while (*piVar8 != 0);\nLAB_003edb08:\n        if ((uVar10 & 0x1fffff) == uVar10) {\n          param_1[4] = param_1[4] & 0xffe00000 | uVar10 & 0x1fffff;\n        }\n        else {\n          param_1[4] = param_1[4] & 0xffe00000;\n        }\n        if (uVar10 != 0) goto LAB_003edce8;\n      }\n    }\n    else {\n      uVar10 = FUN_003ecf18(param_1,piVar8);\n      if (uVar10 != 0xffffffff) goto LAB_003edb08;\nLAB_003eda10:\n      param_1[4] = 0x1fe00000;\n      param_1[3] = (uint)(PTR_UINT_004c12dc + 0xaa4);\n    }\n  }\n  else {\nLAB_003edce8:\n    iVar7 = (uVar10 + 2) * 4;\n    local_58 = (uint *)(*(code *)PTR_malloc_004c5b38)(iVar7);\n    puVar1 = PTR_malloc_004c5b38;\n    if (local_58 != (uint *)0x0) {\n      local_58[1] = 0;\n      local_54 = (int *)(*(code *)puVar1)(iVar7);\n      if (local_54 != (int *)0x0) {\n        local_54[1] = 0;\n      }\n      piVar8 = (int *)param_1[3];\n      if ((int)(param_1[4] << 1) < 0) {\n        if (*piVar8 == 0) goto LAB_003ee148;\n        do {\n          piVar8 = piVar8 + 1;\n          FUN_003ed114(param_1,&local_58);\n        } while (*piVar8 != 0);\n      }\n      else {\n        FUN_003ed114(param_1,&local_58,piVar8);\n      }\n      piVar8 = local_54;\n      local_3c = (code *)local_58;\n      local_30 = local_58;\n      if ((local_58 != (uint *)0x0) && (local_58[1] != uVar10)) {\nLAB_003ee148:\n        iVar7 = (*(code *)PTR_abort_004c5d24)();\n        return iVar7;\n      }\n      if ((int)(param_1[4] << 2) < 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3240);\n      }\n      else if ((param_1[4] & 0x1fe00000) == 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628);\n      }\n      else {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558);\n      }\n      if (local_54 == (int *)0x0) {\n        FUN_003ec50c(param_1,pcVar9,local_58);\n      }\n      else {\n        local_38 = (code *)local_58[1];\n        if (local_38 == (code *)0x0) {\n          iVar7 = 0;\n          uVar13 = 0;\n        }\n        else {\n          piVar17 = local_54 + 2;\n          local_34 = local_58 + (int)local_38 + 1;\n          puVar11 = (uint *)(PTR_DAT_004c256c + -0x15d0);\n          local_48 = (code *)(local_58 + 2);\n          *piVar17 = (int)puVar11;\n          local_44 = (uint *)local_48;\n          local_40 = (uint *)piVar17;\n          puVar18 = (uint *)local_48;\n          puVar16 = (uint *)local_48;\n          if (local_48 != (code *)local_34) {\n            do {\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            } while (puVar18 != local_34);\n          }\n          iVar7 = 0;\n          uVar13 = 0;\n          uVar15 = 0;\n          puVar18 = local_44;\n          do {\n            while (local_44 = puVar18, *piVar17 == 0) {\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }\n            iVar3 = uVar13 + 2;\n            uVar15 = uVar15 + 1;\n            uVar13 = uVar13 + 1;\n            *(uint *)((int)local_3c + iVar3 * 4) = *local_44;\n            piVar17 = piVar17 + 1;\n            puVar18 = local_44 + 1;\n          } while (local_38 != (code *)uVar15);\nLAB_003edef4:\n          local_44 = local_44 + 1;\n        }\n        local_30[1] = uVar13;\n        piVar8[1] = iVar7;\n        local_3c = (code *)local_58;\n        if (local_58[1] + local_54[1] != uVar10) goto LAB_003ee148;\n        FUN_003ec50c(param_1,pcVar9);\n        local_40 = (uint *)local_54;\n        if ((uint *)local_54[1] != (uint *)0x0) {\n          local_44 = local_58;\n          uVar13 = local_58[1];\n          pcVar12 = (code *)local_54[1];\n          do {\n            local_48 = (code *)((int)pcVar12 + -1);\n            uVar10 = (local_40 + (int)pcVar12)[1];\n            if (uVar13 == 0) {\n              local_44[(int)pcVar12 + 1] = uVar10;\n              if (pcVar12 == (code *)0x1) break;\n              local_48 = (code *)((int)pcVar12 + -2);\n              uVar10 = local_40[(int)pcVar12];\n              pcVar5 = local_48;\n            }\n            else {\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }\n            local_44[(int)pcVar5 + 2] = uVar10;\n            pcVar12 = local_48;\n          } while (local_48 != (code *)0x0);\n          local_44[1] = local_44[1] + local_40[1];\n        }\n        local_40 = (uint *)local_54;\n        (*(code *)PTR_free_004c5c18)(local_54);\n      }\n      *local_58 = param_1[3];\n      param_1[3] = (uint)local_58;\n      param_1[4] = param_1[4] & 0x7fffffff | 0x80000000;\n    }\n  }\n  if (param_2 < (undefined *)*param_1) {\n    return 0;\n  }\n  uVar13 = param_1[4];\n  piVar8 = (int *)param_1[3];\n  if (-1 < (int)uVar13) {\n    if (-1 < (int)(uVar13 << 1)) {\n      iVar7 = FUN_003ecb9c(param_1,piVar8,param_2);\n      return iVar7;\n    }\n    iVar7 = *piVar8;\n    while( true ) {\n      if (iVar7 == 0) {\n        return 0;\n      }\n      iVar7 = FUN_003ecb9c(param_1,iVar7,param_2);\n      if (iVar7 != 0) break;\n      piVar8 = piVar8 + 1;\n      iVar7 = *piVar8;\n    }\n    return iVar7;\n  }\nLAB_003ed920:\n  uVar15 = param_1[3];\n  uVar10 = *(uint *)(uVar15 + 4);\n  if ((uVar13 & 0x20000000) == 0) {\n    if ((uVar13 & 0x1fe00000) == 0) {\n      if (uVar10 != 0) {\n        uVar13 = 0;\n        uVar14 = uVar10;\n        while( true ) {\n          uVar6 = uVar10 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          if ((*(undefined **)(iVar7 + 8) <= param_2) &&\n             (uVar13 = uVar6 + 1, uVar6 = uVar14,\n             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc))) break;\n          if (uVar6 <= uVar13) {\n            return 0;\n          }\n          uVar10 = uVar6 + uVar13;\n          uVar14 = uVar6;\n        }\n        return iVar7;\n      }\n    }\n    else {\n      uVar13 = (uVar13 << 3) >> 0x18;\n      local_44 = (uint *)FUN_003eca18(uVar13,param_1 + 1,param_1 + 2);\n      if (uVar10 != 0) {\n        local_40 = (uint *)(uVar13 & 0xf);\n        local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n        uVar14 = 0;\n        do {\n          uVar6 = uVar10 + uVar14 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          uVar2 = (*local_48)(uVar13,local_44,iVar7 + 8,local_50);\n          (*local_48)(local_40,0,uVar2,&local_58);\n          if ((local_50[0] <= param_2) &&\n             (uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n            return iVar7;\n          }\n          uVar10 = uVar6;\n        } while (uVar14 < uVar6);\n      }\n    }\n  }\n  else {\n    local_40 = param_1 + 1;\n    if (uVar10 != 0) {\n      uVar13 = 0;\n      local_44 = param_1 + 2;\n      local_3c = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x37e0);\n      local_38 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x35e8);\n      local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n      do {\n        uVar14 = uVar13 + uVar10 >> 1;\n        iVar7 = *(int *)(uVar15 + (uVar14 + 2) * 4);\n        bVar4 = (*local_3c)((iVar7 + 4) - *(int *)(iVar7 + 4));\n        uVar2 = (*local_38)(bVar4,local_40,local_44);\n        uVar2 = (*local_48)(bVar4,uVar2,iVar7 + 8,local_50);\n        (*local_48)(bVar4 & 0xf,0,uVar2,&local_58);\n        if ((local_50[0] <= param_2) &&\n           (uVar13 = uVar14 + 1, uVar14 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n          return iVar7;\n        }\n        uVar10 = uVar14;\n      } while (uVar13 < uVar14);\n    }\n  }\n  return 0;\n}" primitive_type (function_declarator "FUN_003ed8d4(uint *param_1,undefined *param_2)" identifier (parameter_list "(uint *param_1,undefined *param_2)" ( (parameter_declaration "uint *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "undefined *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) ))) (compound_statement "{\n  undefined *puVar1;\n  undefined4 uVar2;\n  byte bVar4;\n  int iVar3;\n  code *pcVar5;\n  uint uVar6;\n  int iVar7;\n  int *piVar8;\n  code *pcVar9;\n  uint uVar10;\n  uint *puVar11;\n  code *pcVar12;\n  uint uVar13;\n  uint uVar14;\n  uint uVar15;\n  uint *puVar16;\n  int *piVar17;\n  uint *puVar18;\n  uint *puVar19;\n  uint *local_58;\n  int *local_54;\n  undefined *local_50 [2];\n  code *local_48;\n  uint *local_44;\n  uint *local_40;\n  code *local_3c;\n  code *local_38;\n  uint *local_34;\n  uint *local_30;\n  \n  uVar13 = param_1[4];\n  if ((int)uVar13 < 0) goto LAB_003ed920;\n  uVar10 = uVar13 & 0x1fffff;\n  if (uVar10 == 0) {\n    piVar8 = (int *)param_1[3];\n    if ((int)(uVar13 << 1) < 0) {\n      if (*piVar8 != 0) {\n        uVar10 = 0;\n        do {\n          iVar7 = FUN_003ecf18(param_1);\n          if (iVar7 == -1) goto LAB_003eda10;\n          piVar8 = piVar8 + 1;\n          uVar10 = uVar10 + iVar7;\n        } while (*piVar8 != 0);\nLAB_003edb08:\n        if ((uVar10 & 0x1fffff) == uVar10) {\n          param_1[4] = param_1[4] & 0xffe00000 | uVar10 & 0x1fffff;\n        }\n        else {\n          param_1[4] = param_1[4] & 0xffe00000;\n        }\n        if (uVar10 != 0) goto LAB_003edce8;\n      }\n    }\n    else {\n      uVar10 = FUN_003ecf18(param_1,piVar8);\n      if (uVar10 != 0xffffffff) goto LAB_003edb08;\nLAB_003eda10:\n      param_1[4] = 0x1fe00000;\n      param_1[3] = (uint)(PTR_UINT_004c12dc + 0xaa4);\n    }\n  }\n  else {\nLAB_003edce8:\n    iVar7 = (uVar10 + 2) * 4;\n    local_58 = (uint *)(*(code *)PTR_malloc_004c5b38)(iVar7);\n    puVar1 = PTR_malloc_004c5b38;\n    if (local_58 != (uint *)0x0) {\n      local_58[1] = 0;\n      local_54 = (int *)(*(code *)puVar1)(iVar7);\n      if (local_54 != (int *)0x0) {\n        local_54[1] = 0;\n      }\n      piVar8 = (int *)param_1[3];\n      if ((int)(param_1[4] << 1) < 0) {\n        if (*piVar8 == 0) goto LAB_003ee148;\n        do {\n          piVar8 = piVar8 + 1;\n          FUN_003ed114(param_1,&local_58);\n        } while (*piVar8 != 0);\n      }\n      else {\n        FUN_003ed114(param_1,&local_58,piVar8);\n      }\n      piVar8 = local_54;\n      local_3c = (code *)local_58;\n      local_30 = local_58;\n      if ((local_58 != (uint *)0x0) && (local_58[1] != uVar10)) {\nLAB_003ee148:\n        iVar7 = (*(code *)PTR_abort_004c5d24)();\n        return iVar7;\n      }\n      if ((int)(param_1[4] << 2) < 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3240);\n      }\n      else if ((param_1[4] & 0x1fe00000) == 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628);\n      }\n      else {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558);\n      }\n      if (local_54 == (int *)0x0) {\n        FUN_003ec50c(param_1,pcVar9,local_58);\n      }\n      else {\n        local_38 = (code *)local_58[1];\n        if (local_38 == (code *)0x0) {\n          iVar7 = 0;\n          uVar13 = 0;\n        }\n        else {\n          piVar17 = local_54 + 2;\n          local_34 = local_58 + (int)local_38 + 1;\n          puVar11 = (uint *)(PTR_DAT_004c256c + -0x15d0);\n          local_48 = (code *)(local_58 + 2);\n          *piVar17 = (int)puVar11;\n          local_44 = (uint *)local_48;\n          local_40 = (uint *)piVar17;\n          puVar18 = (uint *)local_48;\n          puVar16 = (uint *)local_48;\n          if (local_48 != (code *)local_34) {\n            do {\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            } while (puVar18 != local_34);\n          }\n          iVar7 = 0;\n          uVar13 = 0;\n          uVar15 = 0;\n          puVar18 = local_44;\n          do {\n            while (local_44 = puVar18, *piVar17 == 0) {\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }\n            iVar3 = uVar13 + 2;\n            uVar15 = uVar15 + 1;\n            uVar13 = uVar13 + 1;\n            *(uint *)((int)local_3c + iVar3 * 4) = *local_44;\n            piVar17 = piVar17 + 1;\n            puVar18 = local_44 + 1;\n          } while (local_38 != (code *)uVar15);\nLAB_003edef4:\n          local_44 = local_44 + 1;\n        }\n        local_30[1] = uVar13;\n        piVar8[1] = iVar7;\n        local_3c = (code *)local_58;\n        if (local_58[1] + local_54[1] != uVar10) goto LAB_003ee148;\n        FUN_003ec50c(param_1,pcVar9);\n        local_40 = (uint *)local_54;\n        if ((uint *)local_54[1] != (uint *)0x0) {\n          local_44 = local_58;\n          uVar13 = local_58[1];\n          pcVar12 = (code *)local_54[1];\n          do {\n            local_48 = (code *)((int)pcVar12 + -1);\n            uVar10 = (local_40 + (int)pcVar12)[1];\n            if (uVar13 == 0) {\n              local_44[(int)pcVar12 + 1] = uVar10;\n              if (pcVar12 == (code *)0x1) break;\n              local_48 = (code *)((int)pcVar12 + -2);\n              uVar10 = local_40[(int)pcVar12];\n              pcVar5 = local_48;\n            }\n            else {\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }\n            local_44[(int)pcVar5 + 2] = uVar10;\n            pcVar12 = local_48;\n          } while (local_48 != (code *)0x0);\n          local_44[1] = local_44[1] + local_40[1];\n        }\n        local_40 = (uint *)local_54;\n        (*(code *)PTR_free_004c5c18)(local_54);\n      }\n      *local_58 = param_1[3];\n      param_1[3] = (uint)local_58;\n      param_1[4] = param_1[4] & 0x7fffffff | 0x80000000;\n    }\n  }\n  if (param_2 < (undefined *)*param_1) {\n    return 0;\n  }\n  uVar13 = param_1[4];\n  piVar8 = (int *)param_1[3];\n  if (-1 < (int)uVar13) {\n    if (-1 < (int)(uVar13 << 1)) {\n      iVar7 = FUN_003ecb9c(param_1,piVar8,param_2);\n      return iVar7;\n    }\n    iVar7 = *piVar8;\n    while( true ) {\n      if (iVar7 == 0) {\n        return 0;\n      }\n      iVar7 = FUN_003ecb9c(param_1,iVar7,param_2);\n      if (iVar7 != 0) break;\n      piVar8 = piVar8 + 1;\n      iVar7 = *piVar8;\n    }\n    return iVar7;\n  }\nLAB_003ed920:\n  uVar15 = param_1[3];\n  uVar10 = *(uint *)(uVar15 + 4);\n  if ((uVar13 & 0x20000000) == 0) {\n    if ((uVar13 & 0x1fe00000) == 0) {\n      if (uVar10 != 0) {\n        uVar13 = 0;\n        uVar14 = uVar10;\n        while( true ) {\n          uVar6 = uVar10 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          if ((*(undefined **)(iVar7 + 8) <= param_2) &&\n             (uVar13 = uVar6 + 1, uVar6 = uVar14,\n             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc))) break;\n          if (uVar6 <= uVar13) {\n            return 0;\n          }\n          uVar10 = uVar6 + uVar13;\n          uVar14 = uVar6;\n        }\n        return iVar7;\n      }\n    }\n    else {\n      uVar13 = (uVar13 << 3) >> 0x18;\n      local_44 = (uint *)FUN_003eca18(uVar13,param_1 + 1,param_1 + 2);\n      if (uVar10 != 0) {\n        local_40 = (uint *)(uVar13 & 0xf);\n        local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n        uVar14 = 0;\n        do {\n          uVar6 = uVar10 + uVar14 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          uVar2 = (*local_48)(uVar13,local_44,iVar7 + 8,local_50);\n          (*local_48)(local_40,0,uVar2,&local_58);\n          if ((local_50[0] <= param_2) &&\n             (uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n            return iVar7;\n          }\n          uVar10 = uVar6;\n        } while (uVar14 < uVar6);\n      }\n    }\n  }\n  else {\n    local_40 = param_1 + 1;\n    if (uVar10 != 0) {\n      uVar13 = 0;\n      local_44 = param_1 + 2;\n      local_3c = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x37e0);\n      local_38 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x35e8);\n      local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n      do {\n        uVar14 = uVar13 + uVar10 >> 1;\n        iVar7 = *(int *)(uVar15 + (uVar14 + 2) * 4);\n        bVar4 = (*local_3c)((iVar7 + 4) - *(int *)(iVar7 + 4));\n        uVar2 = (*local_38)(bVar4,local_40,local_44);\n        uVar2 = (*local_48)(bVar4,uVar2,iVar7 + 8,local_50);\n        (*local_48)(bVar4 & 0xf,0,uVar2,&local_58);\n        if ((local_50[0] <= param_2) &&\n           (uVar13 = uVar14 + 1, uVar14 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n          return iVar7;\n        }\n        uVar10 = uVar14;\n      } while (uVar13 < uVar14);\n    }\n  }\n  return 0;\n}" { (declaration "undefined *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "undefined4 uVar2;" type_identifier identifier ;) (declaration "byte bVar4;" type_identifier identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "code *pcVar5;" type_identifier (pointer_declarator "*pcVar5" * identifier) ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "int *piVar8;" primitive_type (pointer_declarator "*piVar8" * identifier) ;) (declaration "code *pcVar9;" type_identifier (pointer_declarator "*pcVar9" * identifier) ;) (declaration "uint uVar10;" type_identifier identifier ;) (declaration "uint *puVar11;" type_identifier (pointer_declarator "*puVar11" * identifier) ;) (declaration "code *pcVar12;" type_identifier (pointer_declarator "*pcVar12" * identifier) ;) (declaration "uint uVar13;" type_identifier identifier ;) (declaration "uint uVar14;" type_identifier identifier ;) (declaration "uint uVar15;" type_identifier identifier ;) (declaration "uint *puVar16;" type_identifier (pointer_declarator "*puVar16" * identifier) ;) (declaration "int *piVar17;" primitive_type (pointer_declarator "*piVar17" * identifier) ;) (declaration "uint *puVar18;" type_identifier (pointer_declarator "*puVar18" * identifier) ;) (declaration "uint *puVar19;" type_identifier (pointer_declarator "*puVar19" * identifier) ;) (declaration "uint *local_58;" type_identifier (pointer_declarator "*local_58" * identifier) ;) (declaration "int *local_54;" primitive_type (pointer_declarator "*local_54" * identifier) ;) (declaration "undefined *local_50 [2];" type_identifier (pointer_declarator "*local_50 [2]" * (array_declarator "local_50 [2]" identifier [ number_literal ])) ;) (declaration "code *local_48;" type_identifier (pointer_declarator "*local_48" * identifier) ;) (declaration "uint *local_44;" type_identifier (pointer_declarator "*local_44" * identifier) ;) (declaration "uint *local_40;" type_identifier (pointer_declarator "*local_40" * identifier) ;) (declaration "code *local_3c;" type_identifier (pointer_declarator "*local_3c" * identifier) ;) (declaration "code *local_38;" type_identifier (pointer_declarator "*local_38" * identifier) ;) (declaration "uint *local_34;" type_identifier (pointer_declarator "*local_34" * identifier) ;) (declaration "uint *local_30;" type_identifier (pointer_declarator "*local_30" * identifier) ;) (expression_statement "uVar13 = param_1[4];" (assignment_expression "uVar13 = param_1[4]" identifier = (subscript_expression "param_1[4]" identifier [ number_literal ])) ;) (if_statement "if ((int)uVar13 < 0) goto LAB_003ed920;" if (parenthesized_expression "((int)uVar13 < 0)" ( (binary_expression "(int)uVar13 < 0" (cast_expression "(int)uVar13" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (goto_statement "goto LAB_003ed920;" goto statement_identifier ;)) (expression_statement "uVar10 = uVar13 & 0x1fffff;" (assignment_expression "uVar10 = uVar13 & 0x1fffff" identifier = (binary_expression "uVar13 & 0x1fffff" identifier & number_literal)) ;) (if_statement "if (uVar10 == 0) {\n    piVar8 = (int *)param_1[3];\n    if ((int)(uVar13 << 1) < 0) {\n      if (*piVar8 != 0) {\n        uVar10 = 0;\n        do {\n          iVar7 = FUN_003ecf18(param_1);\n          if (iVar7 == -1) goto LAB_003eda10;\n          piVar8 = piVar8 + 1;\n          uVar10 = uVar10 + iVar7;\n        } while (*piVar8 != 0);\nLAB_003edb08:\n        if ((uVar10 & 0x1fffff) == uVar10) {\n          param_1[4] = param_1[4] & 0xffe00000 | uVar10 & 0x1fffff;\n        }\n        else {\n          param_1[4] = param_1[4] & 0xffe00000;\n        }\n        if (uVar10 != 0) goto LAB_003edce8;\n      }\n    }\n    else {\n      uVar10 = FUN_003ecf18(param_1,piVar8);\n      if (uVar10 != 0xffffffff) goto LAB_003edb08;\nLAB_003eda10:\n      param_1[4] = 0x1fe00000;\n      param_1[3] = (uint)(PTR_UINT_004c12dc + 0xaa4);\n    }\n  }\n  else {\nLAB_003edce8:\n    iVar7 = (uVar10 + 2) * 4;\n    local_58 = (uint *)(*(code *)PTR_malloc_004c5b38)(iVar7);\n    puVar1 = PTR_malloc_004c5b38;\n    if (local_58 != (uint *)0x0) {\n      local_58[1] = 0;\n      local_54 = (int *)(*(code *)puVar1)(iVar7);\n      if (local_54 != (int *)0x0) {\n        local_54[1] = 0;\n      }\n      piVar8 = (int *)param_1[3];\n      if ((int)(param_1[4] << 1) < 0) {\n        if (*piVar8 == 0) goto LAB_003ee148;\n        do {\n          piVar8 = piVar8 + 1;\n          FUN_003ed114(param_1,&local_58);\n        } while (*piVar8 != 0);\n      }\n      else {\n        FUN_003ed114(param_1,&local_58,piVar8);\n      }\n      piVar8 = local_54;\n      local_3c = (code *)local_58;\n      local_30 = local_58;\n      if ((local_58 != (uint *)0x0) && (local_58[1] != uVar10)) {\nLAB_003ee148:\n        iVar7 = (*(code *)PTR_abort_004c5d24)();\n        return iVar7;\n      }\n      if ((int)(param_1[4] << 2) < 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3240);\n      }\n      else if ((param_1[4] & 0x1fe00000) == 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628);\n      }\n      else {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558);\n      }\n      if (local_54 == (int *)0x0) {\n        FUN_003ec50c(param_1,pcVar9,local_58);\n      }\n      else {\n        local_38 = (code *)local_58[1];\n        if (local_38 == (code *)0x0) {\n          iVar7 = 0;\n          uVar13 = 0;\n        }\n        else {\n          piVar17 = local_54 + 2;\n          local_34 = local_58 + (int)local_38 + 1;\n          puVar11 = (uint *)(PTR_DAT_004c256c + -0x15d0);\n          local_48 = (code *)(local_58 + 2);\n          *piVar17 = (int)puVar11;\n          local_44 = (uint *)local_48;\n          local_40 = (uint *)piVar17;\n          puVar18 = (uint *)local_48;\n          puVar16 = (uint *)local_48;\n          if (local_48 != (code *)local_34) {\n            do {\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            } while (puVar18 != local_34);\n          }\n          iVar7 = 0;\n          uVar13 = 0;\n          uVar15 = 0;\n          puVar18 = local_44;\n          do {\n            while (local_44 = puVar18, *piVar17 == 0) {\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }\n            iVar3 = uVar13 + 2;\n            uVar15 = uVar15 + 1;\n            uVar13 = uVar13 + 1;\n            *(uint *)((int)local_3c + iVar3 * 4) = *local_44;\n            piVar17 = piVar17 + 1;\n            puVar18 = local_44 + 1;\n          } while (local_38 != (code *)uVar15);\nLAB_003edef4:\n          local_44 = local_44 + 1;\n        }\n        local_30[1] = uVar13;\n        piVar8[1] = iVar7;\n        local_3c = (code *)local_58;\n        if (local_58[1] + local_54[1] != uVar10) goto LAB_003ee148;\n        FUN_003ec50c(param_1,pcVar9);\n        local_40 = (uint *)local_54;\n        if ((uint *)local_54[1] != (uint *)0x0) {\n          local_44 = local_58;\n          uVar13 = local_58[1];\n          pcVar12 = (code *)local_54[1];\n          do {\n            local_48 = (code *)((int)pcVar12 + -1);\n            uVar10 = (local_40 + (int)pcVar12)[1];\n            if (uVar13 == 0) {\n              local_44[(int)pcVar12 + 1] = uVar10;\n              if (pcVar12 == (code *)0x1) break;\n              local_48 = (code *)((int)pcVar12 + -2);\n              uVar10 = local_40[(int)pcVar12];\n              pcVar5 = local_48;\n            }\n            else {\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }\n            local_44[(int)pcVar5 + 2] = uVar10;\n            pcVar12 = local_48;\n          } while (local_48 != (code *)0x0);\n          local_44[1] = local_44[1] + local_40[1];\n        }\n        local_40 = (uint *)local_54;\n        (*(code *)PTR_free_004c5c18)(local_54);\n      }\n      *local_58 = param_1[3];\n      param_1[3] = (uint)local_58;\n      param_1[4] = param_1[4] & 0x7fffffff | 0x80000000;\n    }\n  }" if (parenthesized_expression "(uVar10 == 0)" ( (binary_expression "uVar10 == 0" identifier == number_literal) )) (compound_statement "{\n    piVar8 = (int *)param_1[3];\n    if ((int)(uVar13 << 1) < 0) {\n      if (*piVar8 != 0) {\n        uVar10 = 0;\n        do {\n          iVar7 = FUN_003ecf18(param_1);\n          if (iVar7 == -1) goto LAB_003eda10;\n          piVar8 = piVar8 + 1;\n          uVar10 = uVar10 + iVar7;\n        } while (*piVar8 != 0);\nLAB_003edb08:\n        if ((uVar10 & 0x1fffff) == uVar10) {\n          param_1[4] = param_1[4] & 0xffe00000 | uVar10 & 0x1fffff;\n        }\n        else {\n          param_1[4] = param_1[4] & 0xffe00000;\n        }\n        if (uVar10 != 0) goto LAB_003edce8;\n      }\n    }\n    else {\n      uVar10 = FUN_003ecf18(param_1,piVar8);\n      if (uVar10 != 0xffffffff) goto LAB_003edb08;\nLAB_003eda10:\n      param_1[4] = 0x1fe00000;\n      param_1[3] = (uint)(PTR_UINT_004c12dc + 0xaa4);\n    }\n  }" { (expression_statement "piVar8 = (int *)param_1[3];" (assignment_expression "piVar8 = (int *)param_1[3]" identifier = (cast_expression "(int *)param_1[3]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[3]" identifier [ number_literal ]))) ;) (if_statement "if ((int)(uVar13 << 1) < 0) {\n      if (*piVar8 != 0) {\n        uVar10 = 0;\n        do {\n          iVar7 = FUN_003ecf18(param_1);\n          if (iVar7 == -1) goto LAB_003eda10;\n          piVar8 = piVar8 + 1;\n          uVar10 = uVar10 + iVar7;\n        } while (*piVar8 != 0);\nLAB_003edb08:\n        if ((uVar10 & 0x1fffff) == uVar10) {\n          param_1[4] = param_1[4] & 0xffe00000 | uVar10 & 0x1fffff;\n        }\n        else {\n          param_1[4] = param_1[4] & 0xffe00000;\n        }\n        if (uVar10 != 0) goto LAB_003edce8;\n      }\n    }\n    else {\n      uVar10 = FUN_003ecf18(param_1,piVar8);\n      if (uVar10 != 0xffffffff) goto LAB_003edb08;\nLAB_003eda10:\n      param_1[4] = 0x1fe00000;\n      param_1[3] = (uint)(PTR_UINT_004c12dc + 0xaa4);\n    }" if (parenthesized_expression "((int)(uVar13 << 1) < 0)" ( (binary_expression "(int)(uVar13 << 1) < 0" (cast_expression "(int)(uVar13 << 1)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar13 << 1)" ( (binary_expression "uVar13 << 1" identifier << number_literal) ))) < number_literal) )) (compound_statement "{\n      if (*piVar8 != 0) {\n        uVar10 = 0;\n        do {\n          iVar7 = FUN_003ecf18(param_1);\n          if (iVar7 == -1) goto LAB_003eda10;\n          piVar8 = piVar8 + 1;\n          uVar10 = uVar10 + iVar7;\n        } while (*piVar8 != 0);\nLAB_003edb08:\n        if ((uVar10 & 0x1fffff) == uVar10) {\n          param_1[4] = param_1[4] & 0xffe00000 | uVar10 & 0x1fffff;\n        }\n        else {\n          param_1[4] = param_1[4] & 0xffe00000;\n        }\n        if (uVar10 != 0) goto LAB_003edce8;\n      }\n    }" { (if_statement "if (*piVar8 != 0) {\n        uVar10 = 0;\n        do {\n          iVar7 = FUN_003ecf18(param_1);\n          if (iVar7 == -1) goto LAB_003eda10;\n          piVar8 = piVar8 + 1;\n          uVar10 = uVar10 + iVar7;\n        } while (*piVar8 != 0);\nLAB_003edb08:\n        if ((uVar10 & 0x1fffff) == uVar10) {\n          param_1[4] = param_1[4] & 0xffe00000 | uVar10 & 0x1fffff;\n        }\n        else {\n          param_1[4] = param_1[4] & 0xffe00000;\n        }\n        if (uVar10 != 0) goto LAB_003edce8;\n      }" if (parenthesized_expression "(*piVar8 != 0)" ( (binary_expression "*piVar8 != 0" (pointer_expression "*piVar8" * identifier) != number_literal) )) (compound_statement "{\n        uVar10 = 0;\n        do {\n          iVar7 = FUN_003ecf18(param_1);\n          if (iVar7 == -1) goto LAB_003eda10;\n          piVar8 = piVar8 + 1;\n          uVar10 = uVar10 + iVar7;\n        } while (*piVar8 != 0);\nLAB_003edb08:\n        if ((uVar10 & 0x1fffff) == uVar10) {\n          param_1[4] = param_1[4] & 0xffe00000 | uVar10 & 0x1fffff;\n        }\n        else {\n          param_1[4] = param_1[4] & 0xffe00000;\n        }\n        if (uVar10 != 0) goto LAB_003edce8;\n      }" { (expression_statement "uVar10 = 0;" (assignment_expression "uVar10 = 0" identifier = number_literal) ;) (do_statement "do {\n          iVar7 = FUN_003ecf18(param_1);\n          if (iVar7 == -1) goto LAB_003eda10;\n          piVar8 = piVar8 + 1;\n          uVar10 = uVar10 + iVar7;\n        } while (*piVar8 != 0);" do (compound_statement "{\n          iVar7 = FUN_003ecf18(param_1);\n          if (iVar7 == -1) goto LAB_003eda10;\n          piVar8 = piVar8 + 1;\n          uVar10 = uVar10 + iVar7;\n        }" { (expression_statement "iVar7 = FUN_003ecf18(param_1);" (assignment_expression "iVar7 = FUN_003ecf18(param_1)" identifier = (call_expression "FUN_003ecf18(param_1)" identifier (argument_list "(param_1)" ( identifier )))) ;) (if_statement "if (iVar7 == -1) goto LAB_003eda10;" if (parenthesized_expression "(iVar7 == -1)" ( (binary_expression "iVar7 == -1" identifier == number_literal) )) (goto_statement "goto LAB_003eda10;" goto statement_identifier ;)) (expression_statement "piVar8 = piVar8 + 1;" (assignment_expression "piVar8 = piVar8 + 1" identifier = (binary_expression "piVar8 + 1" identifier + number_literal)) ;) (expression_statement "uVar10 = uVar10 + iVar7;" (assignment_expression "uVar10 = uVar10 + iVar7" identifier = (binary_expression "uVar10 + iVar7" identifier + identifier)) ;) }) while (parenthesized_expression "(*piVar8 != 0)" ( (binary_expression "*piVar8 != 0" (pointer_expression "*piVar8" * identifier) != number_literal) )) ;) (labeled_statement "LAB_003edb08:\n        if ((uVar10 & 0x1fffff) == uVar10) {\n          param_1[4] = param_1[4] & 0xffe00000 | uVar10 & 0x1fffff;\n        }\n        else {\n          param_1[4] = param_1[4] & 0xffe00000;\n        }" statement_identifier : (if_statement "if ((uVar10 & 0x1fffff) == uVar10) {\n          param_1[4] = param_1[4] & 0xffe00000 | uVar10 & 0x1fffff;\n        }\n        else {\n          param_1[4] = param_1[4] & 0xffe00000;\n        }" if (parenthesized_expression "((uVar10 & 0x1fffff) == uVar10)" ( (binary_expression "(uVar10 & 0x1fffff) == uVar10" (parenthesized_expression "(uVar10 & 0x1fffff)" ( (binary_expression "uVar10 & 0x1fffff" identifier & number_literal) )) == identifier) )) (compound_statement "{\n          param_1[4] = param_1[4] & 0xffe00000 | uVar10 & 0x1fffff;\n        }" { (expression_statement "param_1[4] = param_1[4] & 0xffe00000 | uVar10 & 0x1fffff;" (assignment_expression "param_1[4] = param_1[4] & 0xffe00000 | uVar10 & 0x1fffff" (subscript_expression "param_1[4]" identifier [ number_literal ]) = (binary_expression "param_1[4] & 0xffe00000 | uVar10 & 0x1fffff" (binary_expression "param_1[4] & 0xffe00000" (subscript_expression "param_1[4]" identifier [ number_literal ]) & number_literal) | (binary_expression "uVar10 & 0x1fffff" identifier & number_literal))) ;) }) (else_clause "else {\n          param_1[4] = param_1[4] & 0xffe00000;\n        }" else (compound_statement "{\n          param_1[4] = param_1[4] & 0xffe00000;\n        }" { (expression_statement "param_1[4] = param_1[4] & 0xffe00000;" (assignment_expression "param_1[4] = param_1[4] & 0xffe00000" (subscript_expression "param_1[4]" identifier [ number_literal ]) = (binary_expression "param_1[4] & 0xffe00000" (subscript_expression "param_1[4]" identifier [ number_literal ]) & number_literal)) ;) })))) (if_statement "if (uVar10 != 0) goto LAB_003edce8;" if (parenthesized_expression "(uVar10 != 0)" ( (binary_expression "uVar10 != 0" identifier != number_literal) )) (goto_statement "goto LAB_003edce8;" goto statement_identifier ;)) })) }) (else_clause "else {\n      uVar10 = FUN_003ecf18(param_1,piVar8);\n      if (uVar10 != 0xffffffff) goto LAB_003edb08;\nLAB_003eda10:\n      param_1[4] = 0x1fe00000;\n      param_1[3] = (uint)(PTR_UINT_004c12dc + 0xaa4);\n    }" else (compound_statement "{\n      uVar10 = FUN_003ecf18(param_1,piVar8);\n      if (uVar10 != 0xffffffff) goto LAB_003edb08;\nLAB_003eda10:\n      param_1[4] = 0x1fe00000;\n      param_1[3] = (uint)(PTR_UINT_004c12dc + 0xaa4);\n    }" { (expression_statement "uVar10 = FUN_003ecf18(param_1,piVar8);" (assignment_expression "uVar10 = FUN_003ecf18(param_1,piVar8)" identifier = (call_expression "FUN_003ecf18(param_1,piVar8)" identifier (argument_list "(param_1,piVar8)" ( identifier , identifier )))) ;) (if_statement "if (uVar10 != 0xffffffff) goto LAB_003edb08;" if (parenthesized_expression "(uVar10 != 0xffffffff)" ( (binary_expression "uVar10 != 0xffffffff" identifier != number_literal) )) (goto_statement "goto LAB_003edb08;" goto statement_identifier ;)) (labeled_statement "LAB_003eda10:\n      param_1[4] = 0x1fe00000;" statement_identifier : (expression_statement "param_1[4] = 0x1fe00000;" (assignment_expression "param_1[4] = 0x1fe00000" (subscript_expression "param_1[4]" identifier [ number_literal ]) = number_literal) ;)) (expression_statement "param_1[3] = (uint)(PTR_UINT_004c12dc + 0xaa4);" (assignment_expression "param_1[3] = (uint)(PTR_UINT_004c12dc + 0xaa4)" (subscript_expression "param_1[3]" identifier [ number_literal ]) = (call_expression "(uint)(PTR_UINT_004c12dc + 0xaa4)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(PTR_UINT_004c12dc + 0xaa4)" ( (binary_expression "PTR_UINT_004c12dc + 0xaa4" identifier + number_literal) )))) ;) }))) }) (else_clause "else {\nLAB_003edce8:\n    iVar7 = (uVar10 + 2) * 4;\n    local_58 = (uint *)(*(code *)PTR_malloc_004c5b38)(iVar7);\n    puVar1 = PTR_malloc_004c5b38;\n    if (local_58 != (uint *)0x0) {\n      local_58[1] = 0;\n      local_54 = (int *)(*(code *)puVar1)(iVar7);\n      if (local_54 != (int *)0x0) {\n        local_54[1] = 0;\n      }\n      piVar8 = (int *)param_1[3];\n      if ((int)(param_1[4] << 1) < 0) {\n        if (*piVar8 == 0) goto LAB_003ee148;\n        do {\n          piVar8 = piVar8 + 1;\n          FUN_003ed114(param_1,&local_58);\n        } while (*piVar8 != 0);\n      }\n      else {\n        FUN_003ed114(param_1,&local_58,piVar8);\n      }\n      piVar8 = local_54;\n      local_3c = (code *)local_58;\n      local_30 = local_58;\n      if ((local_58 != (uint *)0x0) && (local_58[1] != uVar10)) {\nLAB_003ee148:\n        iVar7 = (*(code *)PTR_abort_004c5d24)();\n        return iVar7;\n      }\n      if ((int)(param_1[4] << 2) < 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3240);\n      }\n      else if ((param_1[4] & 0x1fe00000) == 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628);\n      }\n      else {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558);\n      }\n      if (local_54 == (int *)0x0) {\n        FUN_003ec50c(param_1,pcVar9,local_58);\n      }\n      else {\n        local_38 = (code *)local_58[1];\n        if (local_38 == (code *)0x0) {\n          iVar7 = 0;\n          uVar13 = 0;\n        }\n        else {\n          piVar17 = local_54 + 2;\n          local_34 = local_58 + (int)local_38 + 1;\n          puVar11 = (uint *)(PTR_DAT_004c256c + -0x15d0);\n          local_48 = (code *)(local_58 + 2);\n          *piVar17 = (int)puVar11;\n          local_44 = (uint *)local_48;\n          local_40 = (uint *)piVar17;\n          puVar18 = (uint *)local_48;\n          puVar16 = (uint *)local_48;\n          if (local_48 != (code *)local_34) {\n            do {\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            } while (puVar18 != local_34);\n          }\n          iVar7 = 0;\n          uVar13 = 0;\n          uVar15 = 0;\n          puVar18 = local_44;\n          do {\n            while (local_44 = puVar18, *piVar17 == 0) {\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }\n            iVar3 = uVar13 + 2;\n            uVar15 = uVar15 + 1;\n            uVar13 = uVar13 + 1;\n            *(uint *)((int)local_3c + iVar3 * 4) = *local_44;\n            piVar17 = piVar17 + 1;\n            puVar18 = local_44 + 1;\n          } while (local_38 != (code *)uVar15);\nLAB_003edef4:\n          local_44 = local_44 + 1;\n        }\n        local_30[1] = uVar13;\n        piVar8[1] = iVar7;\n        local_3c = (code *)local_58;\n        if (local_58[1] + local_54[1] != uVar10) goto LAB_003ee148;\n        FUN_003ec50c(param_1,pcVar9);\n        local_40 = (uint *)local_54;\n        if ((uint *)local_54[1] != (uint *)0x0) {\n          local_44 = local_58;\n          uVar13 = local_58[1];\n          pcVar12 = (code *)local_54[1];\n          do {\n            local_48 = (code *)((int)pcVar12 + -1);\n            uVar10 = (local_40 + (int)pcVar12)[1];\n            if (uVar13 == 0) {\n              local_44[(int)pcVar12 + 1] = uVar10;\n              if (pcVar12 == (code *)0x1) break;\n              local_48 = (code *)((int)pcVar12 + -2);\n              uVar10 = local_40[(int)pcVar12];\n              pcVar5 = local_48;\n            }\n            else {\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }\n            local_44[(int)pcVar5 + 2] = uVar10;\n            pcVar12 = local_48;\n          } while (local_48 != (code *)0x0);\n          local_44[1] = local_44[1] + local_40[1];\n        }\n        local_40 = (uint *)local_54;\n        (*(code *)PTR_free_004c5c18)(local_54);\n      }\n      *local_58 = param_1[3];\n      param_1[3] = (uint)local_58;\n      param_1[4] = param_1[4] & 0x7fffffff | 0x80000000;\n    }\n  }" else (compound_statement "{\nLAB_003edce8:\n    iVar7 = (uVar10 + 2) * 4;\n    local_58 = (uint *)(*(code *)PTR_malloc_004c5b38)(iVar7);\n    puVar1 = PTR_malloc_004c5b38;\n    if (local_58 != (uint *)0x0) {\n      local_58[1] = 0;\n      local_54 = (int *)(*(code *)puVar1)(iVar7);\n      if (local_54 != (int *)0x0) {\n        local_54[1] = 0;\n      }\n      piVar8 = (int *)param_1[3];\n      if ((int)(param_1[4] << 1) < 0) {\n        if (*piVar8 == 0) goto LAB_003ee148;\n        do {\n          piVar8 = piVar8 + 1;\n          FUN_003ed114(param_1,&local_58);\n        } while (*piVar8 != 0);\n      }\n      else {\n        FUN_003ed114(param_1,&local_58,piVar8);\n      }\n      piVar8 = local_54;\n      local_3c = (code *)local_58;\n      local_30 = local_58;\n      if ((local_58 != (uint *)0x0) && (local_58[1] != uVar10)) {\nLAB_003ee148:\n        iVar7 = (*(code *)PTR_abort_004c5d24)();\n        return iVar7;\n      }\n      if ((int)(param_1[4] << 2) < 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3240);\n      }\n      else if ((param_1[4] & 0x1fe00000) == 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628);\n      }\n      else {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558);\n      }\n      if (local_54 == (int *)0x0) {\n        FUN_003ec50c(param_1,pcVar9,local_58);\n      }\n      else {\n        local_38 = (code *)local_58[1];\n        if (local_38 == (code *)0x0) {\n          iVar7 = 0;\n          uVar13 = 0;\n        }\n        else {\n          piVar17 = local_54 + 2;\n          local_34 = local_58 + (int)local_38 + 1;\n          puVar11 = (uint *)(PTR_DAT_004c256c + -0x15d0);\n          local_48 = (code *)(local_58 + 2);\n          *piVar17 = (int)puVar11;\n          local_44 = (uint *)local_48;\n          local_40 = (uint *)piVar17;\n          puVar18 = (uint *)local_48;\n          puVar16 = (uint *)local_48;\n          if (local_48 != (code *)local_34) {\n            do {\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            } while (puVar18 != local_34);\n          }\n          iVar7 = 0;\n          uVar13 = 0;\n          uVar15 = 0;\n          puVar18 = local_44;\n          do {\n            while (local_44 = puVar18, *piVar17 == 0) {\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }\n            iVar3 = uVar13 + 2;\n            uVar15 = uVar15 + 1;\n            uVar13 = uVar13 + 1;\n            *(uint *)((int)local_3c + iVar3 * 4) = *local_44;\n            piVar17 = piVar17 + 1;\n            puVar18 = local_44 + 1;\n          } while (local_38 != (code *)uVar15);\nLAB_003edef4:\n          local_44 = local_44 + 1;\n        }\n        local_30[1] = uVar13;\n        piVar8[1] = iVar7;\n        local_3c = (code *)local_58;\n        if (local_58[1] + local_54[1] != uVar10) goto LAB_003ee148;\n        FUN_003ec50c(param_1,pcVar9);\n        local_40 = (uint *)local_54;\n        if ((uint *)local_54[1] != (uint *)0x0) {\n          local_44 = local_58;\n          uVar13 = local_58[1];\n          pcVar12 = (code *)local_54[1];\n          do {\n            local_48 = (code *)((int)pcVar12 + -1);\n            uVar10 = (local_40 + (int)pcVar12)[1];\n            if (uVar13 == 0) {\n              local_44[(int)pcVar12 + 1] = uVar10;\n              if (pcVar12 == (code *)0x1) break;\n              local_48 = (code *)((int)pcVar12 + -2);\n              uVar10 = local_40[(int)pcVar12];\n              pcVar5 = local_48;\n            }\n            else {\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }\n            local_44[(int)pcVar5 + 2] = uVar10;\n            pcVar12 = local_48;\n          } while (local_48 != (code *)0x0);\n          local_44[1] = local_44[1] + local_40[1];\n        }\n        local_40 = (uint *)local_54;\n        (*(code *)PTR_free_004c5c18)(local_54);\n      }\n      *local_58 = param_1[3];\n      param_1[3] = (uint)local_58;\n      param_1[4] = param_1[4] & 0x7fffffff | 0x80000000;\n    }\n  }" { (labeled_statement "LAB_003edce8:\n    iVar7 = (uVar10 + 2) * 4;" statement_identifier : (expression_statement "iVar7 = (uVar10 + 2) * 4;" (assignment_expression "iVar7 = (uVar10 + 2) * 4" identifier = (binary_expression "(uVar10 + 2) * 4" (parenthesized_expression "(uVar10 + 2)" ( (binary_expression "uVar10 + 2" identifier + number_literal) )) * number_literal)) ;)) (expression_statement "local_58 = (uint *)(*(code *)PTR_malloc_004c5b38)(iVar7);" (assignment_expression "local_58 = (uint *)(*(code *)PTR_malloc_004c5b38)(iVar7)" identifier = (cast_expression "(uint *)(*(code *)PTR_malloc_004c5b38)(iVar7)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR_malloc_004c5b38)(iVar7)" (parenthesized_expression "(*(code *)PTR_malloc_004c5b38)" ( (pointer_expression "*(code *)PTR_malloc_004c5b38" * (cast_expression "(code *)PTR_malloc_004c5b38" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(iVar7)" ( identifier ))))) ;) (expression_statement "puVar1 = PTR_malloc_004c5b38;" (assignment_expression "puVar1 = PTR_malloc_004c5b38" identifier = identifier) ;) (if_statement "if (local_58 != (uint *)0x0) {\n      local_58[1] = 0;\n      local_54 = (int *)(*(code *)puVar1)(iVar7);\n      if (local_54 != (int *)0x0) {\n        local_54[1] = 0;\n      }\n      piVar8 = (int *)param_1[3];\n      if ((int)(param_1[4] << 1) < 0) {\n        if (*piVar8 == 0) goto LAB_003ee148;\n        do {\n          piVar8 = piVar8 + 1;\n          FUN_003ed114(param_1,&local_58);\n        } while (*piVar8 != 0);\n      }\n      else {\n        FUN_003ed114(param_1,&local_58,piVar8);\n      }\n      piVar8 = local_54;\n      local_3c = (code *)local_58;\n      local_30 = local_58;\n      if ((local_58 != (uint *)0x0) && (local_58[1] != uVar10)) {\nLAB_003ee148:\n        iVar7 = (*(code *)PTR_abort_004c5d24)();\n        return iVar7;\n      }\n      if ((int)(param_1[4] << 2) < 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3240);\n      }\n      else if ((param_1[4] & 0x1fe00000) == 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628);\n      }\n      else {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558);\n      }\n      if (local_54 == (int *)0x0) {\n        FUN_003ec50c(param_1,pcVar9,local_58);\n      }\n      else {\n        local_38 = (code *)local_58[1];\n        if (local_38 == (code *)0x0) {\n          iVar7 = 0;\n          uVar13 = 0;\n        }\n        else {\n          piVar17 = local_54 + 2;\n          local_34 = local_58 + (int)local_38 + 1;\n          puVar11 = (uint *)(PTR_DAT_004c256c + -0x15d0);\n          local_48 = (code *)(local_58 + 2);\n          *piVar17 = (int)puVar11;\n          local_44 = (uint *)local_48;\n          local_40 = (uint *)piVar17;\n          puVar18 = (uint *)local_48;\n          puVar16 = (uint *)local_48;\n          if (local_48 != (code *)local_34) {\n            do {\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            } while (puVar18 != local_34);\n          }\n          iVar7 = 0;\n          uVar13 = 0;\n          uVar15 = 0;\n          puVar18 = local_44;\n          do {\n            while (local_44 = puVar18, *piVar17 == 0) {\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }\n            iVar3 = uVar13 + 2;\n            uVar15 = uVar15 + 1;\n            uVar13 = uVar13 + 1;\n            *(uint *)((int)local_3c + iVar3 * 4) = *local_44;\n            piVar17 = piVar17 + 1;\n            puVar18 = local_44 + 1;\n          } while (local_38 != (code *)uVar15);\nLAB_003edef4:\n          local_44 = local_44 + 1;\n        }\n        local_30[1] = uVar13;\n        piVar8[1] = iVar7;\n        local_3c = (code *)local_58;\n        if (local_58[1] + local_54[1] != uVar10) goto LAB_003ee148;\n        FUN_003ec50c(param_1,pcVar9);\n        local_40 = (uint *)local_54;\n        if ((uint *)local_54[1] != (uint *)0x0) {\n          local_44 = local_58;\n          uVar13 = local_58[1];\n          pcVar12 = (code *)local_54[1];\n          do {\n            local_48 = (code *)((int)pcVar12 + -1);\n            uVar10 = (local_40 + (int)pcVar12)[1];\n            if (uVar13 == 0) {\n              local_44[(int)pcVar12 + 1] = uVar10;\n              if (pcVar12 == (code *)0x1) break;\n              local_48 = (code *)((int)pcVar12 + -2);\n              uVar10 = local_40[(int)pcVar12];\n              pcVar5 = local_48;\n            }\n            else {\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }\n            local_44[(int)pcVar5 + 2] = uVar10;\n            pcVar12 = local_48;\n          } while (local_48 != (code *)0x0);\n          local_44[1] = local_44[1] + local_40[1];\n        }\n        local_40 = (uint *)local_54;\n        (*(code *)PTR_free_004c5c18)(local_54);\n      }\n      *local_58 = param_1[3];\n      param_1[3] = (uint)local_58;\n      param_1[4] = param_1[4] & 0x7fffffff | 0x80000000;\n    }" if (parenthesized_expression "(local_58 != (uint *)0x0)" ( (binary_expression "local_58 != (uint *)0x0" identifier != (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      local_58[1] = 0;\n      local_54 = (int *)(*(code *)puVar1)(iVar7);\n      if (local_54 != (int *)0x0) {\n        local_54[1] = 0;\n      }\n      piVar8 = (int *)param_1[3];\n      if ((int)(param_1[4] << 1) < 0) {\n        if (*piVar8 == 0) goto LAB_003ee148;\n        do {\n          piVar8 = piVar8 + 1;\n          FUN_003ed114(param_1,&local_58);\n        } while (*piVar8 != 0);\n      }\n      else {\n        FUN_003ed114(param_1,&local_58,piVar8);\n      }\n      piVar8 = local_54;\n      local_3c = (code *)local_58;\n      local_30 = local_58;\n      if ((local_58 != (uint *)0x0) && (local_58[1] != uVar10)) {\nLAB_003ee148:\n        iVar7 = (*(code *)PTR_abort_004c5d24)();\n        return iVar7;\n      }\n      if ((int)(param_1[4] << 2) < 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3240);\n      }\n      else if ((param_1[4] & 0x1fe00000) == 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628);\n      }\n      else {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558);\n      }\n      if (local_54 == (int *)0x0) {\n        FUN_003ec50c(param_1,pcVar9,local_58);\n      }\n      else {\n        local_38 = (code *)local_58[1];\n        if (local_38 == (code *)0x0) {\n          iVar7 = 0;\n          uVar13 = 0;\n        }\n        else {\n          piVar17 = local_54 + 2;\n          local_34 = local_58 + (int)local_38 + 1;\n          puVar11 = (uint *)(PTR_DAT_004c256c + -0x15d0);\n          local_48 = (code *)(local_58 + 2);\n          *piVar17 = (int)puVar11;\n          local_44 = (uint *)local_48;\n          local_40 = (uint *)piVar17;\n          puVar18 = (uint *)local_48;\n          puVar16 = (uint *)local_48;\n          if (local_48 != (code *)local_34) {\n            do {\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            } while (puVar18 != local_34);\n          }\n          iVar7 = 0;\n          uVar13 = 0;\n          uVar15 = 0;\n          puVar18 = local_44;\n          do {\n            while (local_44 = puVar18, *piVar17 == 0) {\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }\n            iVar3 = uVar13 + 2;\n            uVar15 = uVar15 + 1;\n            uVar13 = uVar13 + 1;\n            *(uint *)((int)local_3c + iVar3 * 4) = *local_44;\n            piVar17 = piVar17 + 1;\n            puVar18 = local_44 + 1;\n          } while (local_38 != (code *)uVar15);\nLAB_003edef4:\n          local_44 = local_44 + 1;\n        }\n        local_30[1] = uVar13;\n        piVar8[1] = iVar7;\n        local_3c = (code *)local_58;\n        if (local_58[1] + local_54[1] != uVar10) goto LAB_003ee148;\n        FUN_003ec50c(param_1,pcVar9);\n        local_40 = (uint *)local_54;\n        if ((uint *)local_54[1] != (uint *)0x0) {\n          local_44 = local_58;\n          uVar13 = local_58[1];\n          pcVar12 = (code *)local_54[1];\n          do {\n            local_48 = (code *)((int)pcVar12 + -1);\n            uVar10 = (local_40 + (int)pcVar12)[1];\n            if (uVar13 == 0) {\n              local_44[(int)pcVar12 + 1] = uVar10;\n              if (pcVar12 == (code *)0x1) break;\n              local_48 = (code *)((int)pcVar12 + -2);\n              uVar10 = local_40[(int)pcVar12];\n              pcVar5 = local_48;\n            }\n            else {\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }\n            local_44[(int)pcVar5 + 2] = uVar10;\n            pcVar12 = local_48;\n          } while (local_48 != (code *)0x0);\n          local_44[1] = local_44[1] + local_40[1];\n        }\n        local_40 = (uint *)local_54;\n        (*(code *)PTR_free_004c5c18)(local_54);\n      }\n      *local_58 = param_1[3];\n      param_1[3] = (uint)local_58;\n      param_1[4] = param_1[4] & 0x7fffffff | 0x80000000;\n    }" { (expression_statement "local_58[1] = 0;" (assignment_expression "local_58[1] = 0" (subscript_expression "local_58[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "local_54 = (int *)(*(code *)puVar1)(iVar7);" (assignment_expression "local_54 = (int *)(*(code *)puVar1)(iVar7)" identifier = (cast_expression "(int *)(*(code *)puVar1)(iVar7)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)puVar1)(iVar7)" (parenthesized_expression "(*(code *)puVar1)" ( (pointer_expression "*(code *)puVar1" * (cast_expression "(code *)puVar1" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(iVar7)" ( identifier ))))) ;) (if_statement "if (local_54 != (int *)0x0) {\n        local_54[1] = 0;\n      }" if (parenthesized_expression "(local_54 != (int *)0x0)" ( (binary_expression "local_54 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        local_54[1] = 0;\n      }" { (expression_statement "local_54[1] = 0;" (assignment_expression "local_54[1] = 0" (subscript_expression "local_54[1]" identifier [ number_literal ]) = number_literal) ;) })) (expression_statement "piVar8 = (int *)param_1[3];" (assignment_expression "piVar8 = (int *)param_1[3]" identifier = (cast_expression "(int *)param_1[3]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[3]" identifier [ number_literal ]))) ;) (if_statement "if ((int)(param_1[4] << 1) < 0) {\n        if (*piVar8 == 0) goto LAB_003ee148;\n        do {\n          piVar8 = piVar8 + 1;\n          FUN_003ed114(param_1,&local_58);\n        } while (*piVar8 != 0);\n      }\n      else {\n        FUN_003ed114(param_1,&local_58,piVar8);\n      }" if (parenthesized_expression "((int)(param_1[4] << 1) < 0)" ( (binary_expression "(int)(param_1[4] << 1) < 0" (cast_expression "(int)(param_1[4] << 1)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(param_1[4] << 1)" ( (binary_expression "param_1[4] << 1" (subscript_expression "param_1[4]" identifier [ number_literal ]) << number_literal) ))) < number_literal) )) (compound_statement "{\n        if (*piVar8 == 0) goto LAB_003ee148;\n        do {\n          piVar8 = piVar8 + 1;\n          FUN_003ed114(param_1,&local_58);\n        } while (*piVar8 != 0);\n      }" { (if_statement "if (*piVar8 == 0) goto LAB_003ee148;" if (parenthesized_expression "(*piVar8 == 0)" ( (binary_expression "*piVar8 == 0" (pointer_expression "*piVar8" * identifier) == number_literal) )) (goto_statement "goto LAB_003ee148;" goto statement_identifier ;)) (do_statement "do {\n          piVar8 = piVar8 + 1;\n          FUN_003ed114(param_1,&local_58);\n        } while (*piVar8 != 0);" do (compound_statement "{\n          piVar8 = piVar8 + 1;\n          FUN_003ed114(param_1,&local_58);\n        }" { (expression_statement "piVar8 = piVar8 + 1;" (assignment_expression "piVar8 = piVar8 + 1" identifier = (binary_expression "piVar8 + 1" identifier + number_literal)) ;) (expression_statement "FUN_003ed114(param_1,&local_58);" (call_expression "FUN_003ed114(param_1,&local_58)" identifier (argument_list "(param_1,&local_58)" ( identifier , (pointer_expression "&local_58" & identifier) ))) ;) }) while (parenthesized_expression "(*piVar8 != 0)" ( (binary_expression "*piVar8 != 0" (pointer_expression "*piVar8" * identifier) != number_literal) )) ;) }) (else_clause "else {\n        FUN_003ed114(param_1,&local_58,piVar8);\n      }" else (compound_statement "{\n        FUN_003ed114(param_1,&local_58,piVar8);\n      }" { (expression_statement "FUN_003ed114(param_1,&local_58,piVar8);" (call_expression "FUN_003ed114(param_1,&local_58,piVar8)" identifier (argument_list "(param_1,&local_58,piVar8)" ( identifier , (pointer_expression "&local_58" & identifier) , identifier ))) ;) }))) (expression_statement "piVar8 = local_54;" (assignment_expression "piVar8 = local_54" identifier = identifier) ;) (expression_statement "local_3c = (code *)local_58;" (assignment_expression "local_3c = (code *)local_58" identifier = (cast_expression "(code *)local_58" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "local_30 = local_58;" (assignment_expression "local_30 = local_58" identifier = identifier) ;) (if_statement "if ((local_58 != (uint *)0x0) && (local_58[1] != uVar10)) {\nLAB_003ee148:\n        iVar7 = (*(code *)PTR_abort_004c5d24)();\n        return iVar7;\n      }" if (parenthesized_expression "((local_58 != (uint *)0x0) && (local_58[1] != uVar10))" ( (binary_expression "(local_58 != (uint *)0x0) && (local_58[1] != uVar10)" (parenthesized_expression "(local_58 != (uint *)0x0)" ( (binary_expression "local_58 != (uint *)0x0" identifier != (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(local_58[1] != uVar10)" ( (binary_expression "local_58[1] != uVar10" (subscript_expression "local_58[1]" identifier [ number_literal ]) != identifier) ))) )) (compound_statement "{\nLAB_003ee148:\n        iVar7 = (*(code *)PTR_abort_004c5d24)();\n        return iVar7;\n      }" { (labeled_statement "LAB_003ee148:\n        iVar7 = (*(code *)PTR_abort_004c5d24)();" statement_identifier : (expression_statement "iVar7 = (*(code *)PTR_abort_004c5d24)();" (assignment_expression "iVar7 = (*(code *)PTR_abort_004c5d24)()" identifier = (call_expression "(*(code *)PTR_abort_004c5d24)()" (parenthesized_expression "(*(code *)PTR_abort_004c5d24)" ( (pointer_expression "*(code *)PTR_abort_004c5d24" * (cast_expression "(code *)PTR_abort_004c5d24" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "()" ( )))) ;)) (return_statement "return iVar7;" return identifier ;) })) (if_statement "if ((int)(param_1[4] << 2) < 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3240);\n      }\n      else if ((param_1[4] & 0x1fe00000) == 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628);\n      }\n      else {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558);\n      }" if (parenthesized_expression "((int)(param_1[4] << 2) < 0)" ( (binary_expression "(int)(param_1[4] << 2) < 0" (cast_expression "(int)(param_1[4] << 2)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(param_1[4] << 2)" ( (binary_expression "param_1[4] << 2" (subscript_expression "param_1[4]" identifier [ number_literal ]) << number_literal) ))) < number_literal) )) (compound_statement "{\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3240);\n      }" { (expression_statement "pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3240);" (assignment_expression "pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3240)" identifier = (cast_expression "(code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3240)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3240)" ( (binary_expression "PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3240" identifier + number_literal) )))) ;) }) (else_clause "else if ((param_1[4] & 0x1fe00000) == 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628);\n      }\n      else {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558);\n      }" else (if_statement "if ((param_1[4] & 0x1fe00000) == 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628);\n      }\n      else {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558);\n      }" if (parenthesized_expression "((param_1[4] & 0x1fe00000) == 0)" ( (binary_expression "(param_1[4] & 0x1fe00000) == 0" (parenthesized_expression "(param_1[4] & 0x1fe00000)" ( (binary_expression "param_1[4] & 0x1fe00000" (subscript_expression "param_1[4]" identifier [ number_literal ]) & number_literal) )) == number_literal) )) (compound_statement "{\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628);\n      }" { (expression_statement "pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628);" (assignment_expression "pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628)" identifier = (cast_expression "(code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628)" ( (binary_expression "PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628" identifier + number_literal) )))) ;) }) (else_clause "else {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558);\n      }" else (compound_statement "{\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558);\n      }" { (expression_statement "pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558);" (assignment_expression "pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558)" identifier = (cast_expression "(code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558)" ( (binary_expression "PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558" identifier + number_literal) )))) ;) }))))) (if_statement "if (local_54 == (int *)0x0) {\n        FUN_003ec50c(param_1,pcVar9,local_58);\n      }\n      else {\n        local_38 = (code *)local_58[1];\n        if (local_38 == (code *)0x0) {\n          iVar7 = 0;\n          uVar13 = 0;\n        }\n        else {\n          piVar17 = local_54 + 2;\n          local_34 = local_58 + (int)local_38 + 1;\n          puVar11 = (uint *)(PTR_DAT_004c256c + -0x15d0);\n          local_48 = (code *)(local_58 + 2);\n          *piVar17 = (int)puVar11;\n          local_44 = (uint *)local_48;\n          local_40 = (uint *)piVar17;\n          puVar18 = (uint *)local_48;\n          puVar16 = (uint *)local_48;\n          if (local_48 != (code *)local_34) {\n            do {\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            } while (puVar18 != local_34);\n          }\n          iVar7 = 0;\n          uVar13 = 0;\n          uVar15 = 0;\n          puVar18 = local_44;\n          do {\n            while (local_44 = puVar18, *piVar17 == 0) {\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }\n            iVar3 = uVar13 + 2;\n            uVar15 = uVar15 + 1;\n            uVar13 = uVar13 + 1;\n            *(uint *)((int)local_3c + iVar3 * 4) = *local_44;\n            piVar17 = piVar17 + 1;\n            puVar18 = local_44 + 1;\n          } while (local_38 != (code *)uVar15);\nLAB_003edef4:\n          local_44 = local_44 + 1;\n        }\n        local_30[1] = uVar13;\n        piVar8[1] = iVar7;\n        local_3c = (code *)local_58;\n        if (local_58[1] + local_54[1] != uVar10) goto LAB_003ee148;\n        FUN_003ec50c(param_1,pcVar9);\n        local_40 = (uint *)local_54;\n        if ((uint *)local_54[1] != (uint *)0x0) {\n          local_44 = local_58;\n          uVar13 = local_58[1];\n          pcVar12 = (code *)local_54[1];\n          do {\n            local_48 = (code *)((int)pcVar12 + -1);\n            uVar10 = (local_40 + (int)pcVar12)[1];\n            if (uVar13 == 0) {\n              local_44[(int)pcVar12 + 1] = uVar10;\n              if (pcVar12 == (code *)0x1) break;\n              local_48 = (code *)((int)pcVar12 + -2);\n              uVar10 = local_40[(int)pcVar12];\n              pcVar5 = local_48;\n            }\n            else {\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }\n            local_44[(int)pcVar5 + 2] = uVar10;\n            pcVar12 = local_48;\n          } while (local_48 != (code *)0x0);\n          local_44[1] = local_44[1] + local_40[1];\n        }\n        local_40 = (uint *)local_54;\n        (*(code *)PTR_free_004c5c18)(local_54);\n      }" if (parenthesized_expression "(local_54 == (int *)0x0)" ( (binary_expression "local_54 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        FUN_003ec50c(param_1,pcVar9,local_58);\n      }" { (expression_statement "FUN_003ec50c(param_1,pcVar9,local_58);" (call_expression "FUN_003ec50c(param_1,pcVar9,local_58)" identifier (argument_list "(param_1,pcVar9,local_58)" ( identifier , identifier , identifier ))) ;) }) (else_clause "else {\n        local_38 = (code *)local_58[1];\n        if (local_38 == (code *)0x0) {\n          iVar7 = 0;\n          uVar13 = 0;\n        }\n        else {\n          piVar17 = local_54 + 2;\n          local_34 = local_58 + (int)local_38 + 1;\n          puVar11 = (uint *)(PTR_DAT_004c256c + -0x15d0);\n          local_48 = (code *)(local_58 + 2);\n          *piVar17 = (int)puVar11;\n          local_44 = (uint *)local_48;\n          local_40 = (uint *)piVar17;\n          puVar18 = (uint *)local_48;\n          puVar16 = (uint *)local_48;\n          if (local_48 != (code *)local_34) {\n            do {\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            } while (puVar18 != local_34);\n          }\n          iVar7 = 0;\n          uVar13 = 0;\n          uVar15 = 0;\n          puVar18 = local_44;\n          do {\n            while (local_44 = puVar18, *piVar17 == 0) {\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }\n            iVar3 = uVar13 + 2;\n            uVar15 = uVar15 + 1;\n            uVar13 = uVar13 + 1;\n            *(uint *)((int)local_3c + iVar3 * 4) = *local_44;\n            piVar17 = piVar17 + 1;\n            puVar18 = local_44 + 1;\n          } while (local_38 != (code *)uVar15);\nLAB_003edef4:\n          local_44 = local_44 + 1;\n        }\n        local_30[1] = uVar13;\n        piVar8[1] = iVar7;\n        local_3c = (code *)local_58;\n        if (local_58[1] + local_54[1] != uVar10) goto LAB_003ee148;\n        FUN_003ec50c(param_1,pcVar9);\n        local_40 = (uint *)local_54;\n        if ((uint *)local_54[1] != (uint *)0x0) {\n          local_44 = local_58;\n          uVar13 = local_58[1];\n          pcVar12 = (code *)local_54[1];\n          do {\n            local_48 = (code *)((int)pcVar12 + -1);\n            uVar10 = (local_40 + (int)pcVar12)[1];\n            if (uVar13 == 0) {\n              local_44[(int)pcVar12 + 1] = uVar10;\n              if (pcVar12 == (code *)0x1) break;\n              local_48 = (code *)((int)pcVar12 + -2);\n              uVar10 = local_40[(int)pcVar12];\n              pcVar5 = local_48;\n            }\n            else {\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }\n            local_44[(int)pcVar5 + 2] = uVar10;\n            pcVar12 = local_48;\n          } while (local_48 != (code *)0x0);\n          local_44[1] = local_44[1] + local_40[1];\n        }\n        local_40 = (uint *)local_54;\n        (*(code *)PTR_free_004c5c18)(local_54);\n      }" else (compound_statement "{\n        local_38 = (code *)local_58[1];\n        if (local_38 == (code *)0x0) {\n          iVar7 = 0;\n          uVar13 = 0;\n        }\n        else {\n          piVar17 = local_54 + 2;\n          local_34 = local_58 + (int)local_38 + 1;\n          puVar11 = (uint *)(PTR_DAT_004c256c + -0x15d0);\n          local_48 = (code *)(local_58 + 2);\n          *piVar17 = (int)puVar11;\n          local_44 = (uint *)local_48;\n          local_40 = (uint *)piVar17;\n          puVar18 = (uint *)local_48;\n          puVar16 = (uint *)local_48;\n          if (local_48 != (code *)local_34) {\n            do {\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            } while (puVar18 != local_34);\n          }\n          iVar7 = 0;\n          uVar13 = 0;\n          uVar15 = 0;\n          puVar18 = local_44;\n          do {\n            while (local_44 = puVar18, *piVar17 == 0) {\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }\n            iVar3 = uVar13 + 2;\n            uVar15 = uVar15 + 1;\n            uVar13 = uVar13 + 1;\n            *(uint *)((int)local_3c + iVar3 * 4) = *local_44;\n            piVar17 = piVar17 + 1;\n            puVar18 = local_44 + 1;\n          } while (local_38 != (code *)uVar15);\nLAB_003edef4:\n          local_44 = local_44 + 1;\n        }\n        local_30[1] = uVar13;\n        piVar8[1] = iVar7;\n        local_3c = (code *)local_58;\n        if (local_58[1] + local_54[1] != uVar10) goto LAB_003ee148;\n        FUN_003ec50c(param_1,pcVar9);\n        local_40 = (uint *)local_54;\n        if ((uint *)local_54[1] != (uint *)0x0) {\n          local_44 = local_58;\n          uVar13 = local_58[1];\n          pcVar12 = (code *)local_54[1];\n          do {\n            local_48 = (code *)((int)pcVar12 + -1);\n            uVar10 = (local_40 + (int)pcVar12)[1];\n            if (uVar13 == 0) {\n              local_44[(int)pcVar12 + 1] = uVar10;\n              if (pcVar12 == (code *)0x1) break;\n              local_48 = (code *)((int)pcVar12 + -2);\n              uVar10 = local_40[(int)pcVar12];\n              pcVar5 = local_48;\n            }\n            else {\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }\n            local_44[(int)pcVar5 + 2] = uVar10;\n            pcVar12 = local_48;\n          } while (local_48 != (code *)0x0);\n          local_44[1] = local_44[1] + local_40[1];\n        }\n        local_40 = (uint *)local_54;\n        (*(code *)PTR_free_004c5c18)(local_54);\n      }" { (expression_statement "local_38 = (code *)local_58[1];" (assignment_expression "local_38 = (code *)local_58[1]" identifier = (cast_expression "(code *)local_58[1]" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "local_58[1]" identifier [ number_literal ]))) ;) (if_statement "if (local_38 == (code *)0x0) {\n          iVar7 = 0;\n          uVar13 = 0;\n        }\n        else {\n          piVar17 = local_54 + 2;\n          local_34 = local_58 + (int)local_38 + 1;\n          puVar11 = (uint *)(PTR_DAT_004c256c + -0x15d0);\n          local_48 = (code *)(local_58 + 2);\n          *piVar17 = (int)puVar11;\n          local_44 = (uint *)local_48;\n          local_40 = (uint *)piVar17;\n          puVar18 = (uint *)local_48;\n          puVar16 = (uint *)local_48;\n          if (local_48 != (code *)local_34) {\n            do {\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            } while (puVar18 != local_34);\n          }\n          iVar7 = 0;\n          uVar13 = 0;\n          uVar15 = 0;\n          puVar18 = local_44;\n          do {\n            while (local_44 = puVar18, *piVar17 == 0) {\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }\n            iVar3 = uVar13 + 2;\n            uVar15 = uVar15 + 1;\n            uVar13 = uVar13 + 1;\n            *(uint *)((int)local_3c + iVar3 * 4) = *local_44;\n            piVar17 = piVar17 + 1;\n            puVar18 = local_44 + 1;\n          } while (local_38 != (code *)uVar15);\nLAB_003edef4:\n          local_44 = local_44 + 1;\n        }" if (parenthesized_expression "(local_38 == (code *)0x0)" ( (binary_expression "local_38 == (code *)0x0" identifier == (cast_expression "(code *)0x0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          iVar7 = 0;\n          uVar13 = 0;\n        }" { (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" identifier = number_literal) ;) (expression_statement "uVar13 = 0;" (assignment_expression "uVar13 = 0" identifier = number_literal) ;) }) (else_clause "else {\n          piVar17 = local_54 + 2;\n          local_34 = local_58 + (int)local_38 + 1;\n          puVar11 = (uint *)(PTR_DAT_004c256c + -0x15d0);\n          local_48 = (code *)(local_58 + 2);\n          *piVar17 = (int)puVar11;\n          local_44 = (uint *)local_48;\n          local_40 = (uint *)piVar17;\n          puVar18 = (uint *)local_48;\n          puVar16 = (uint *)local_48;\n          if (local_48 != (code *)local_34) {\n            do {\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            } while (puVar18 != local_34);\n          }\n          iVar7 = 0;\n          uVar13 = 0;\n          uVar15 = 0;\n          puVar18 = local_44;\n          do {\n            while (local_44 = puVar18, *piVar17 == 0) {\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }\n            iVar3 = uVar13 + 2;\n            uVar15 = uVar15 + 1;\n            uVar13 = uVar13 + 1;\n            *(uint *)((int)local_3c + iVar3 * 4) = *local_44;\n            piVar17 = piVar17 + 1;\n            puVar18 = local_44 + 1;\n          } while (local_38 != (code *)uVar15);\nLAB_003edef4:\n          local_44 = local_44 + 1;\n        }" else (compound_statement "{\n          piVar17 = local_54 + 2;\n          local_34 = local_58 + (int)local_38 + 1;\n          puVar11 = (uint *)(PTR_DAT_004c256c + -0x15d0);\n          local_48 = (code *)(local_58 + 2);\n          *piVar17 = (int)puVar11;\n          local_44 = (uint *)local_48;\n          local_40 = (uint *)piVar17;\n          puVar18 = (uint *)local_48;\n          puVar16 = (uint *)local_48;\n          if (local_48 != (code *)local_34) {\n            do {\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            } while (puVar18 != local_34);\n          }\n          iVar7 = 0;\n          uVar13 = 0;\n          uVar15 = 0;\n          puVar18 = local_44;\n          do {\n            while (local_44 = puVar18, *piVar17 == 0) {\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }\n            iVar3 = uVar13 + 2;\n            uVar15 = uVar15 + 1;\n            uVar13 = uVar13 + 1;\n            *(uint *)((int)local_3c + iVar3 * 4) = *local_44;\n            piVar17 = piVar17 + 1;\n            puVar18 = local_44 + 1;\n          } while (local_38 != (code *)uVar15);\nLAB_003edef4:\n          local_44 = local_44 + 1;\n        }" { (expression_statement "piVar17 = local_54 + 2;" (assignment_expression "piVar17 = local_54 + 2" identifier = (binary_expression "local_54 + 2" identifier + number_literal)) ;) (expression_statement "local_34 = local_58 + (int)local_38 + 1;" (assignment_expression "local_34 = local_58 + (int)local_38 + 1" identifier = (binary_expression "local_58 + (int)local_38 + 1" (binary_expression "local_58 + (int)local_38" identifier + (cast_expression "(int)local_38" ( (type_descriptor "int" primitive_type) ) identifier)) + number_literal)) ;) (expression_statement "puVar11 = (uint *)(PTR_DAT_004c256c + -0x15d0);" (assignment_expression "puVar11 = (uint *)(PTR_DAT_004c256c + -0x15d0)" identifier = (cast_expression "(uint *)(PTR_DAT_004c256c + -0x15d0)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_004c256c + -0x15d0)" ( (binary_expression "PTR_DAT_004c256c + -0x15d0" identifier + number_literal) )))) ;) (expression_statement "local_48 = (code *)(local_58 + 2);" (assignment_expression "local_48 = (code *)(local_58 + 2)" identifier = (cast_expression "(code *)(local_58 + 2)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_58 + 2)" ( (binary_expression "local_58 + 2" identifier + number_literal) )))) ;) (expression_statement "*piVar17 = (int)puVar11;" (assignment_expression "*piVar17 = (int)puVar11" (pointer_expression "*piVar17" * identifier) = (cast_expression "(int)puVar11" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "local_44 = (uint *)local_48;" (assignment_expression "local_44 = (uint *)local_48" identifier = (cast_expression "(uint *)local_48" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "local_40 = (uint *)piVar17;" (assignment_expression "local_40 = (uint *)piVar17" identifier = (cast_expression "(uint *)piVar17" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "puVar18 = (uint *)local_48;" (assignment_expression "puVar18 = (uint *)local_48" identifier = (cast_expression "(uint *)local_48" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "puVar16 = (uint *)local_48;" (assignment_expression "puVar16 = (uint *)local_48" identifier = (cast_expression "(uint *)local_48" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (if_statement "if (local_48 != (code *)local_34) {\n            do {\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            } while (puVar18 != local_34);\n          }" if (parenthesized_expression "(local_48 != (code *)local_34)" ( (binary_expression "local_48 != (code *)local_34" identifier != (cast_expression "(code *)local_34" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (compound_statement "{\n            do {\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            } while (puVar18 != local_34);\n          }" { (do_statement "do {\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            } while (puVar18 != local_34);" do (compound_statement "{\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            }" { (while_statement "while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }" while (parenthesized_expression "((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    )" ( (parenthesized_expression "(puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))" ( (comma_expression "puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0)" (assignment_expression "puVar19 = puVar11" identifier = identifier) , (binary_expression "puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0)" (binary_expression "puVar11 != puVar18" identifier != identifier) && (parenthesized_expression "(iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0)" ( (comma_expression "iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0" (assignment_expression "iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18)" identifier = (call_expression "(*pcVar9)(param_1,puVar16[1],*puVar18)" (parenthesized_expression "(*pcVar9)" ( (pointer_expression "*pcVar9" * identifier) )) (argument_list "(param_1,puVar16[1],*puVar18)" ( identifier , (subscript_expression "puVar16[1]" identifier [ number_literal ]) , (pointer_expression "*puVar18" * identifier) )))) , (comma_expression "puVar19 = puVar18, iVar7 < 0" (assignment_expression "puVar19 = puVar18" identifier = identifier) , (binary_expression "iVar7 < 0" identifier < number_literal))) )))) )) )) (compound_statement "{\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }" { (expression_statement "puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));" (assignment_expression "puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48))" identifier = (pointer_expression "*(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48))" * (cast_expression "(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48))" ( (type_descriptor "uint **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "((int)piVar8 + (int)puVar18 + (8 - (int)local_48))" ( (binary_expression "(int)piVar8 + (int)puVar18 + (8 - (int)local_48)" (binary_expression "(int)piVar8 + (int)puVar18" (cast_expression "(int)piVar8" ( (type_descriptor "int" primitive_type) ) identifier) + (cast_expression "(int)puVar18" ( (type_descriptor "int" primitive_type) ) identifier)) + (parenthesized_expression "(8 - (int)local_48)" ( (binary_expression "8 - (int)local_48" number_literal - (cast_expression "(int)local_48" ( (type_descriptor "int" primitive_type) ) identifier)) ))) ))))) ;) (expression_statement "*(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;" (assignment_expression "*(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0" (pointer_expression "*(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48))" * (cast_expression "(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48))" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)piVar8 + (int)puVar18 + (8 - (int)local_48))" ( (binary_expression "(int)piVar8 + (int)puVar18 + (8 - (int)local_48)" (binary_expression "(int)piVar8 + (int)puVar18" (cast_expression "(int)piVar8" ( (type_descriptor "int" primitive_type) ) identifier) + (cast_expression "(int)puVar18" ( (type_descriptor "int" primitive_type) ) identifier)) + (parenthesized_expression "(8 - (int)local_48)" ( (binary_expression "8 - (int)local_48" number_literal - (cast_expression "(int)local_48" ( (type_descriptor "int" primitive_type) ) identifier)) ))) )))) = number_literal) ;) (expression_statement "puVar18 = puVar19;" (assignment_expression "puVar18 = puVar19" identifier = identifier) ;) })) (expression_statement "local_40 = (uint *)((int *)local_40 + 1);" (assignment_expression "local_40 = (uint *)((int *)local_40 + 1)" identifier = (cast_expression "(uint *)((int *)local_40 + 1)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int *)local_40 + 1)" ( (binary_expression "(int *)local_40 + 1" (cast_expression "(int *)local_40" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) + number_literal) )))) ;) (expression_statement "puVar18 = puVar16 + 1;" (assignment_expression "puVar18 = puVar16 + 1" identifier = (binary_expression "puVar16 + 1" identifier + number_literal)) ;) (expression_statement "*local_40 = (uint)puVar19;" (assignment_expression "*local_40 = (uint)puVar19" (pointer_expression "*local_40" * identifier) = (cast_expression "(uint)puVar19" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "puVar16 = puVar18;" (assignment_expression "puVar16 = puVar18" identifier = identifier) ;) }) while (parenthesized_expression "(puVar18 != local_34)" ( (binary_expression "puVar18 != local_34" identifier != identifier) )) ;) })) (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" identifier = number_literal) ;) (expression_statement "uVar13 = 0;" (assignment_expression "uVar13 = 0" identifier = number_literal) ;) (expression_statement "uVar15 = 0;" (assignment_expression "uVar15 = 0" identifier = number_literal) ;) (expression_statement "puVar18 = local_44;" (assignment_expression "puVar18 = local_44" identifier = identifier) ;) (do_statement "do {\n            while (local_44 = puVar18, *piVar17 == 0) {\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }\n            iVar3 = uVar13 + 2;\n            uVar15 = uVar15 + 1;\n            uVar13 = uVar13 + 1;\n            *(uint *)((int)local_3c + iVar3 * 4) = *local_44;\n            piVar17 = piVar17 + 1;\n            puVar18 = local_44 + 1;\n          } while (local_38 != (code *)uVar15);" do (compound_statement "{\n            while (local_44 = puVar18, *piVar17 == 0) {\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }\n            iVar3 = uVar13 + 2;\n            uVar15 = uVar15 + 1;\n            uVar13 = uVar13 + 1;\n            *(uint *)((int)local_3c + iVar3 * 4) = *local_44;\n            piVar17 = piVar17 + 1;\n            puVar18 = local_44 + 1;\n          }" { (while_statement "while (local_44 = puVar18, *piVar17 == 0) {\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }" while (parenthesized_expression "(local_44 = puVar18, *piVar17 == 0)" ( (comma_expression "local_44 = puVar18, *piVar17 == 0" (assignment_expression "local_44 = puVar18" identifier = identifier) , (binary_expression "*piVar17 == 0" (pointer_expression "*piVar17" * identifier) == number_literal)) )) (compound_statement "{\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }" { (expression_statement "iVar3 = iVar7 + 2;" (assignment_expression "iVar3 = iVar7 + 2" identifier = (binary_expression "iVar7 + 2" identifier + number_literal)) ;) (expression_statement "uVar15 = uVar15 + 1;" (assignment_expression "uVar15 = uVar15 + 1" identifier = (binary_expression "uVar15 + 1" identifier + number_literal)) ;) (expression_statement "iVar7 = iVar7 + 1;" (assignment_expression "iVar7 = iVar7 + 1" identifier = (binary_expression "iVar7 + 1" identifier + number_literal)) ;) (expression_statement "piVar8[iVar3] = *local_44;" (assignment_expression "piVar8[iVar3] = *local_44" (subscript_expression "piVar8[iVar3]" identifier [ identifier ]) = (pointer_expression "*local_44" * identifier)) ;) (expression_statement "piVar17 = piVar17 + 1;" (assignment_expression "piVar17 = piVar17 + 1" identifier = (binary_expression "piVar17 + 1" identifier + number_literal)) ;) (expression_statement "puVar18 = local_44 + 1;" (assignment_expression "puVar18 = local_44 + 1" identifier = (binary_expression "local_44 + 1" identifier + number_literal)) ;) (if_statement "if (local_38 == (code *)uVar15) goto LAB_003edef4;" if (parenthesized_expression "(local_38 == (code *)uVar15)" ( (binary_expression "local_38 == (code *)uVar15" identifier == (cast_expression "(code *)uVar15" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (goto_statement "goto LAB_003edef4;" goto statement_identifier ;)) })) (expression_statement "iVar3 = uVar13 + 2;" (assignment_expression "iVar3 = uVar13 + 2" identifier = (binary_expression "uVar13 + 2" identifier + number_literal)) ;) (expression_statement "uVar15 = uVar15 + 1;" (assignment_expression "uVar15 = uVar15 + 1" identifier = (binary_expression "uVar15 + 1" identifier + number_literal)) ;) (expression_statement "uVar13 = uVar13 + 1;" (assignment_expression "uVar13 = uVar13 + 1" identifier = (binary_expression "uVar13 + 1" identifier + number_literal)) ;) (expression_statement "*(uint *)((int)local_3c + iVar3 * 4) = *local_44;" (assignment_expression "*(uint *)((int)local_3c + iVar3 * 4) = *local_44" (pointer_expression "*(uint *)((int)local_3c + iVar3 * 4)" * (cast_expression "(uint *)((int)local_3c + iVar3 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)local_3c + iVar3 * 4)" ( (binary_expression "(int)local_3c + iVar3 * 4" (cast_expression "(int)local_3c" ( (type_descriptor "int" primitive_type) ) identifier) + (binary_expression "iVar3 * 4" identifier * number_literal)) )))) = (pointer_expression "*local_44" * identifier)) ;) (expression_statement "piVar17 = piVar17 + 1;" (assignment_expression "piVar17 = piVar17 + 1" identifier = (binary_expression "piVar17 + 1" identifier + number_literal)) ;) (expression_statement "puVar18 = local_44 + 1;" (assignment_expression "puVar18 = local_44 + 1" identifier = (binary_expression "local_44 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(local_38 != (code *)uVar15)" ( (binary_expression "local_38 != (code *)uVar15" identifier != (cast_expression "(code *)uVar15" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) ;) (labeled_statement "LAB_003edef4:\n          local_44 = local_44 + 1;" statement_identifier : (expression_statement "local_44 = local_44 + 1;" (assignment_expression "local_44 = local_44 + 1" identifier = (binary_expression "local_44 + 1" identifier + number_literal)) ;)) }))) (expression_statement "local_30[1] = uVar13;" (assignment_expression "local_30[1] = uVar13" (subscript_expression "local_30[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "piVar8[1] = iVar7;" (assignment_expression "piVar8[1] = iVar7" (subscript_expression "piVar8[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "local_3c = (code *)local_58;" (assignment_expression "local_3c = (code *)local_58" identifier = (cast_expression "(code *)local_58" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (if_statement "if (local_58[1] + local_54[1] != uVar10) goto LAB_003ee148;" if (parenthesized_expression "(local_58[1] + local_54[1] != uVar10)" ( (binary_expression "local_58[1] + local_54[1] != uVar10" (binary_expression "local_58[1] + local_54[1]" (subscript_expression "local_58[1]" identifier [ number_literal ]) + (subscript_expression "local_54[1]" identifier [ number_literal ])) != identifier) )) (goto_statement "goto LAB_003ee148;" goto statement_identifier ;)) (expression_statement "FUN_003ec50c(param_1,pcVar9);" (call_expression "FUN_003ec50c(param_1,pcVar9)" identifier (argument_list "(param_1,pcVar9)" ( identifier , identifier ))) ;) (expression_statement "local_40 = (uint *)local_54;" (assignment_expression "local_40 = (uint *)local_54" identifier = (cast_expression "(uint *)local_54" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (if_statement "if ((uint *)local_54[1] != (uint *)0x0) {\n          local_44 = local_58;\n          uVar13 = local_58[1];\n          pcVar12 = (code *)local_54[1];\n          do {\n            local_48 = (code *)((int)pcVar12 + -1);\n            uVar10 = (local_40 + (int)pcVar12)[1];\n            if (uVar13 == 0) {\n              local_44[(int)pcVar12 + 1] = uVar10;\n              if (pcVar12 == (code *)0x1) break;\n              local_48 = (code *)((int)pcVar12 + -2);\n              uVar10 = local_40[(int)pcVar12];\n              pcVar5 = local_48;\n            }\n            else {\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }\n            local_44[(int)pcVar5 + 2] = uVar10;\n            pcVar12 = local_48;\n          } while (local_48 != (code *)0x0);\n          local_44[1] = local_44[1] + local_40[1];\n        }" if (parenthesized_expression "((uint *)local_54[1] != (uint *)0x0)" ( (binary_expression "(uint *)local_54[1] != (uint *)0x0" (cast_expression "(uint *)local_54[1]" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "local_54[1]" identifier [ number_literal ])) != (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          local_44 = local_58;\n          uVar13 = local_58[1];\n          pcVar12 = (code *)local_54[1];\n          do {\n            local_48 = (code *)((int)pcVar12 + -1);\n            uVar10 = (local_40 + (int)pcVar12)[1];\n            if (uVar13 == 0) {\n              local_44[(int)pcVar12 + 1] = uVar10;\n              if (pcVar12 == (code *)0x1) break;\n              local_48 = (code *)((int)pcVar12 + -2);\n              uVar10 = local_40[(int)pcVar12];\n              pcVar5 = local_48;\n            }\n            else {\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }\n            local_44[(int)pcVar5 + 2] = uVar10;\n            pcVar12 = local_48;\n          } while (local_48 != (code *)0x0);\n          local_44[1] = local_44[1] + local_40[1];\n        }" { (expression_statement "local_44 = local_58;" (assignment_expression "local_44 = local_58" identifier = identifier) ;) (expression_statement "uVar13 = local_58[1];" (assignment_expression "uVar13 = local_58[1]" identifier = (subscript_expression "local_58[1]" identifier [ number_literal ])) ;) (expression_statement "pcVar12 = (code *)local_54[1];" (assignment_expression "pcVar12 = (code *)local_54[1]" identifier = (cast_expression "(code *)local_54[1]" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "local_54[1]" identifier [ number_literal ]))) ;) (do_statement "do {\n            local_48 = (code *)((int)pcVar12 + -1);\n            uVar10 = (local_40 + (int)pcVar12)[1];\n            if (uVar13 == 0) {\n              local_44[(int)pcVar12 + 1] = uVar10;\n              if (pcVar12 == (code *)0x1) break;\n              local_48 = (code *)((int)pcVar12 + -2);\n              uVar10 = local_40[(int)pcVar12];\n              pcVar5 = local_48;\n            }\n            else {\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }\n            local_44[(int)pcVar5 + 2] = uVar10;\n            pcVar12 = local_48;\n          } while (local_48 != (code *)0x0);" do (compound_statement "{\n            local_48 = (code *)((int)pcVar12 + -1);\n            uVar10 = (local_40 + (int)pcVar12)[1];\n            if (uVar13 == 0) {\n              local_44[(int)pcVar12 + 1] = uVar10;\n              if (pcVar12 == (code *)0x1) break;\n              local_48 = (code *)((int)pcVar12 + -2);\n              uVar10 = local_40[(int)pcVar12];\n              pcVar5 = local_48;\n            }\n            else {\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }\n            local_44[(int)pcVar5 + 2] = uVar10;\n            pcVar12 = local_48;\n          }" { (expression_statement "local_48 = (code *)((int)pcVar12 + -1);" (assignment_expression "local_48 = (code *)((int)pcVar12 + -1)" identifier = (cast_expression "(code *)((int)pcVar12 + -1)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pcVar12 + -1)" ( (binary_expression "(int)pcVar12 + -1" (cast_expression "(int)pcVar12" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) ;) (expression_statement "uVar10 = (local_40 + (int)pcVar12)[1];" (assignment_expression "uVar10 = (local_40 + (int)pcVar12)[1]" identifier = (subscript_expression "(local_40 + (int)pcVar12)[1]" (parenthesized_expression "(local_40 + (int)pcVar12)" ( (binary_expression "local_40 + (int)pcVar12" identifier + (cast_expression "(int)pcVar12" ( (type_descriptor "int" primitive_type) ) identifier)) )) [ number_literal ])) ;) (if_statement "if (uVar13 == 0) {\n              local_44[(int)pcVar12 + 1] = uVar10;\n              if (pcVar12 == (code *)0x1) break;\n              local_48 = (code *)((int)pcVar12 + -2);\n              uVar10 = local_40[(int)pcVar12];\n              pcVar5 = local_48;\n            }\n            else {\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }" if (parenthesized_expression "(uVar13 == 0)" ( (binary_expression "uVar13 == 0" identifier == number_literal) )) (compound_statement "{\n              local_44[(int)pcVar12 + 1] = uVar10;\n              if (pcVar12 == (code *)0x1) break;\n              local_48 = (code *)((int)pcVar12 + -2);\n              uVar10 = local_40[(int)pcVar12];\n              pcVar5 = local_48;\n            }" { (expression_statement "local_44[(int)pcVar12 + 1] = uVar10;" (assignment_expression "local_44[(int)pcVar12 + 1] = uVar10" (subscript_expression "local_44[(int)pcVar12 + 1]" identifier [ (binary_expression "(int)pcVar12 + 1" (cast_expression "(int)pcVar12" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) ]) = identifier) ;) (if_statement "if (pcVar12 == (code *)0x1) break;" if (parenthesized_expression "(pcVar12 == (code *)0x1)" ( (binary_expression "pcVar12 == (code *)0x1" identifier == (cast_expression "(code *)0x1" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (break_statement "break;" break ;)) (expression_statement "local_48 = (code *)((int)pcVar12 + -2);" (assignment_expression "local_48 = (code *)((int)pcVar12 + -2)" identifier = (cast_expression "(code *)((int)pcVar12 + -2)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pcVar12 + -2)" ( (binary_expression "(int)pcVar12 + -2" (cast_expression "(int)pcVar12" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) ;) (expression_statement "uVar10 = local_40[(int)pcVar12];" (assignment_expression "uVar10 = local_40[(int)pcVar12]" identifier = (subscript_expression "local_40[(int)pcVar12]" identifier [ (cast_expression "(int)pcVar12" ( (type_descriptor "int" primitive_type) ) identifier) ])) ;) (expression_statement "pcVar5 = local_48;" (assignment_expression "pcVar5 = local_48" identifier = identifier) ;) }) (else_clause "else {\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }" else (compound_statement "{\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }" { (expression_statement "puVar18 = local_44 + uVar13;" (assignment_expression "puVar18 = local_44 + uVar13" identifier = (binary_expression "local_44 + uVar13" identifier + identifier)) ;) (do_statement "do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);" do (compound_statement "{\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              }" { (expression_statement "uVar15 = uVar13 - 1;" (assignment_expression "uVar15 = uVar13 - 1" identifier = (binary_expression "uVar13 - 1" identifier - number_literal)) ;) (expression_statement "iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);" (assignment_expression "iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10)" identifier = (call_expression "(*pcVar9)(param_1,puVar18[1],uVar10)" (parenthesized_expression "(*pcVar9)" ( (pointer_expression "*pcVar9" * identifier) )) (argument_list "(param_1,puVar18[1],uVar10)" ( identifier , (subscript_expression "puVar18[1]" identifier [ number_literal ]) , identifier )))) ;) (expression_statement "pcVar5 = (code *)((int)pcVar12 + uVar15);" (assignment_expression "pcVar5 = (code *)((int)pcVar12 + uVar15)" identifier = (cast_expression "(code *)((int)pcVar12 + uVar15)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pcVar12 + uVar15)" ( (binary_expression "(int)pcVar12 + uVar15" (cast_expression "(int)pcVar12" ( (type_descriptor "int" primitive_type) ) identifier) + identifier) )))) ;) (if_statement "if (iVar7 < 1) break;" if (parenthesized_expression "(iVar7 < 1)" ( (binary_expression "iVar7 < 1" identifier < number_literal) )) (break_statement "break;" break ;)) (expression_statement "puVar18[(int)pcVar12 + 1] = puVar18[1];" (assignment_expression "puVar18[(int)pcVar12 + 1] = puVar18[1]" (subscript_expression "puVar18[(int)pcVar12 + 1]" identifier [ (binary_expression "(int)pcVar12 + 1" (cast_expression "(int)pcVar12" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) ]) = (subscript_expression "puVar18[1]" identifier [ number_literal ])) ;) (expression_statement "pcVar5 = local_48;" (assignment_expression "pcVar5 = local_48" identifier = identifier) ;) (expression_statement "puVar18 = puVar18 + -1;" (assignment_expression "puVar18 = puVar18 + -1" identifier = (binary_expression "puVar18 + -1" identifier + number_literal)) ;) (expression_statement "uVar13 = uVar15;" (assignment_expression "uVar13 = uVar15" identifier = identifier) ;) }) while (parenthesized_expression "(uVar15 != 0)" ( (binary_expression "uVar15 != 0" identifier != number_literal) )) ;) }))) (expression_statement "local_44[(int)pcVar5 + 2] = uVar10;" (assignment_expression "local_44[(int)pcVar5 + 2] = uVar10" (subscript_expression "local_44[(int)pcVar5 + 2]" identifier [ (binary_expression "(int)pcVar5 + 2" (cast_expression "(int)pcVar5" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) ]) = identifier) ;) (expression_statement "pcVar12 = local_48;" (assignment_expression "pcVar12 = local_48" identifier = identifier) ;) }) while (parenthesized_expression "(local_48 != (code *)0x0)" ( (binary_expression "local_48 != (code *)0x0" identifier != (cast_expression "(code *)0x0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) ;) (expression_statement "local_44[1] = local_44[1] + local_40[1];" (assignment_expression "local_44[1] = local_44[1] + local_40[1]" (subscript_expression "local_44[1]" identifier [ number_literal ]) = (binary_expression "local_44[1] + local_40[1]" (subscript_expression "local_44[1]" identifier [ number_literal ]) + (subscript_expression "local_40[1]" identifier [ number_literal ]))) ;) })) (expression_statement "local_40 = (uint *)local_54;" (assignment_expression "local_40 = (uint *)local_54" identifier = (cast_expression "(uint *)local_54" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "(*(code *)PTR_free_004c5c18)(local_54);" (call_expression "(*(code *)PTR_free_004c5c18)(local_54)" (parenthesized_expression "(*(code *)PTR_free_004c5c18)" ( (pointer_expression "*(code *)PTR_free_004c5c18" * (cast_expression "(code *)PTR_free_004c5c18" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(local_54)" ( identifier ))) ;) }))) (expression_statement "*local_58 = param_1[3];" (assignment_expression "*local_58 = param_1[3]" (pointer_expression "*local_58" * identifier) = (subscript_expression "param_1[3]" identifier [ number_literal ])) ;) (expression_statement "param_1[3] = (uint)local_58;" (assignment_expression "param_1[3] = (uint)local_58" (subscript_expression "param_1[3]" identifier [ number_literal ]) = (cast_expression "(uint)local_58" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "param_1[4] = param_1[4] & 0x7fffffff | 0x80000000;" (assignment_expression "param_1[4] = param_1[4] & 0x7fffffff | 0x80000000" (subscript_expression "param_1[4]" identifier [ number_literal ]) = (binary_expression "param_1[4] & 0x7fffffff | 0x80000000" (binary_expression "param_1[4] & 0x7fffffff" (subscript_expression "param_1[4]" identifier [ number_literal ]) & number_literal) | number_literal)) ;) })) }))) (if_statement "if (param_2 < (undefined *)*param_1) {\n    return 0;\n  }" if (parenthesized_expression "(param_2 < (undefined *)*param_1)" ( (binary_expression "param_2 < (undefined *)*param_1" identifier < (cast_expression "(undefined *)*param_1" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "uVar13 = param_1[4];" (assignment_expression "uVar13 = param_1[4]" identifier = (subscript_expression "param_1[4]" identifier [ number_literal ])) ;) (expression_statement "piVar8 = (int *)param_1[3];" (assignment_expression "piVar8 = (int *)param_1[3]" identifier = (cast_expression "(int *)param_1[3]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[3]" identifier [ number_literal ]))) ;) (if_statement "if (-1 < (int)uVar13) {\n    if (-1 < (int)(uVar13 << 1)) {\n      iVar7 = FUN_003ecb9c(param_1,piVar8,param_2);\n      return iVar7;\n    }\n    iVar7 = *piVar8;\n    while( true ) {\n      if (iVar7 == 0) {\n        return 0;\n      }\n      iVar7 = FUN_003ecb9c(param_1,iVar7,param_2);\n      if (iVar7 != 0) break;\n      piVar8 = piVar8 + 1;\n      iVar7 = *piVar8;\n    }\n    return iVar7;\n  }" if (parenthesized_expression "(-1 < (int)uVar13)" ( (binary_expression "-1 < (int)uVar13" number_literal < (cast_expression "(int)uVar13" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n    if (-1 < (int)(uVar13 << 1)) {\n      iVar7 = FUN_003ecb9c(param_1,piVar8,param_2);\n      return iVar7;\n    }\n    iVar7 = *piVar8;\n    while( true ) {\n      if (iVar7 == 0) {\n        return 0;\n      }\n      iVar7 = FUN_003ecb9c(param_1,iVar7,param_2);\n      if (iVar7 != 0) break;\n      piVar8 = piVar8 + 1;\n      iVar7 = *piVar8;\n    }\n    return iVar7;\n  }" { (if_statement "if (-1 < (int)(uVar13 << 1)) {\n      iVar7 = FUN_003ecb9c(param_1,piVar8,param_2);\n      return iVar7;\n    }" if (parenthesized_expression "(-1 < (int)(uVar13 << 1))" ( (binary_expression "-1 < (int)(uVar13 << 1)" number_literal < (cast_expression "(int)(uVar13 << 1)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar13 << 1)" ( (binary_expression "uVar13 << 1" identifier << number_literal) )))) )) (compound_statement "{\n      iVar7 = FUN_003ecb9c(param_1,piVar8,param_2);\n      return iVar7;\n    }" { (expression_statement "iVar7 = FUN_003ecb9c(param_1,piVar8,param_2);" (assignment_expression "iVar7 = FUN_003ecb9c(param_1,piVar8,param_2)" identifier = (call_expression "FUN_003ecb9c(param_1,piVar8,param_2)" identifier (argument_list "(param_1,piVar8,param_2)" ( identifier , identifier , identifier )))) ;) (return_statement "return iVar7;" return identifier ;) })) (expression_statement "iVar7 = *piVar8;" (assignment_expression "iVar7 = *piVar8" identifier = (pointer_expression "*piVar8" * identifier)) ;) (while_statement "while( true ) {\n      if (iVar7 == 0) {\n        return 0;\n      }\n      iVar7 = FUN_003ecb9c(param_1,iVar7,param_2);\n      if (iVar7 != 0) break;\n      piVar8 = piVar8 + 1;\n      iVar7 = *piVar8;\n    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n      if (iVar7 == 0) {\n        return 0;\n      }\n      iVar7 = FUN_003ecb9c(param_1,iVar7,param_2);\n      if (iVar7 != 0) break;\n      piVar8 = piVar8 + 1;\n      iVar7 = *piVar8;\n    }" { (if_statement "if (iVar7 == 0) {\n        return 0;\n      }" if (parenthesized_expression "(iVar7 == 0)" ( (binary_expression "iVar7 == 0" identifier == number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "iVar7 = FUN_003ecb9c(param_1,iVar7,param_2);" (assignment_expression "iVar7 = FUN_003ecb9c(param_1,iVar7,param_2)" identifier = (call_expression "FUN_003ecb9c(param_1,iVar7,param_2)" identifier (argument_list "(param_1,iVar7,param_2)" ( identifier , identifier , identifier )))) ;) (if_statement "if (iVar7 != 0) break;" if (parenthesized_expression "(iVar7 != 0)" ( (binary_expression "iVar7 != 0" identifier != number_literal) )) (break_statement "break;" break ;)) (expression_statement "piVar8 = piVar8 + 1;" (assignment_expression "piVar8 = piVar8 + 1" identifier = (binary_expression "piVar8 + 1" identifier + number_literal)) ;) (expression_statement "iVar7 = *piVar8;" (assignment_expression "iVar7 = *piVar8" identifier = (pointer_expression "*piVar8" * identifier)) ;) })) (return_statement "return iVar7;" return identifier ;) })) (labeled_statement "LAB_003ed920:\n  uVar15 = param_1[3];" statement_identifier : (expression_statement "uVar15 = param_1[3];" (assignment_expression "uVar15 = param_1[3]" identifier = (subscript_expression "param_1[3]" identifier [ number_literal ])) ;)) (expression_statement "uVar10 = *(uint *)(uVar15 + 4);" (assignment_expression "uVar10 = *(uint *)(uVar15 + 4)" identifier = (pointer_expression "*(uint *)(uVar15 + 4)" * (cast_expression "(uint *)(uVar15 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar15 + 4)" ( (binary_expression "uVar15 + 4" identifier + number_literal) ))))) ;) (if_statement "if ((uVar13 & 0x20000000) == 0) {\n    if ((uVar13 & 0x1fe00000) == 0) {\n      if (uVar10 != 0) {\n        uVar13 = 0;\n        uVar14 = uVar10;\n        while( true ) {\n          uVar6 = uVar10 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          if ((*(undefined **)(iVar7 + 8) <= param_2) &&\n             (uVar13 = uVar6 + 1, uVar6 = uVar14,\n             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc))) break;\n          if (uVar6 <= uVar13) {\n            return 0;\n          }\n          uVar10 = uVar6 + uVar13;\n          uVar14 = uVar6;\n        }\n        return iVar7;\n      }\n    }\n    else {\n      uVar13 = (uVar13 << 3) >> 0x18;\n      local_44 = (uint *)FUN_003eca18(uVar13,param_1 + 1,param_1 + 2);\n      if (uVar10 != 0) {\n        local_40 = (uint *)(uVar13 & 0xf);\n        local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n        uVar14 = 0;\n        do {\n          uVar6 = uVar10 + uVar14 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          uVar2 = (*local_48)(uVar13,local_44,iVar7 + 8,local_50);\n          (*local_48)(local_40,0,uVar2,&local_58);\n          if ((local_50[0] <= param_2) &&\n             (uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n            return iVar7;\n          }\n          uVar10 = uVar6;\n        } while (uVar14 < uVar6);\n      }\n    }\n  }\n  else {\n    local_40 = param_1 + 1;\n    if (uVar10 != 0) {\n      uVar13 = 0;\n      local_44 = param_1 + 2;\n      local_3c = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x37e0);\n      local_38 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x35e8);\n      local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n      do {\n        uVar14 = uVar13 + uVar10 >> 1;\n        iVar7 = *(int *)(uVar15 + (uVar14 + 2) * 4);\n        bVar4 = (*local_3c)((iVar7 + 4) - *(int *)(iVar7 + 4));\n        uVar2 = (*local_38)(bVar4,local_40,local_44);\n        uVar2 = (*local_48)(bVar4,uVar2,iVar7 + 8,local_50);\n        (*local_48)(bVar4 & 0xf,0,uVar2,&local_58);\n        if ((local_50[0] <= param_2) &&\n           (uVar13 = uVar14 + 1, uVar14 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n          return iVar7;\n        }\n        uVar10 = uVar14;\n      } while (uVar13 < uVar14);\n    }\n  }" if (parenthesized_expression "((uVar13 & 0x20000000) == 0)" ( (binary_expression "(uVar13 & 0x20000000) == 0" (parenthesized_expression "(uVar13 & 0x20000000)" ( (binary_expression "uVar13 & 0x20000000" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n    if ((uVar13 & 0x1fe00000) == 0) {\n      if (uVar10 != 0) {\n        uVar13 = 0;\n        uVar14 = uVar10;\n        while( true ) {\n          uVar6 = uVar10 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          if ((*(undefined **)(iVar7 + 8) <= param_2) &&\n             (uVar13 = uVar6 + 1, uVar6 = uVar14,\n             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc))) break;\n          if (uVar6 <= uVar13) {\n            return 0;\n          }\n          uVar10 = uVar6 + uVar13;\n          uVar14 = uVar6;\n        }\n        return iVar7;\n      }\n    }\n    else {\n      uVar13 = (uVar13 << 3) >> 0x18;\n      local_44 = (uint *)FUN_003eca18(uVar13,param_1 + 1,param_1 + 2);\n      if (uVar10 != 0) {\n        local_40 = (uint *)(uVar13 & 0xf);\n        local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n        uVar14 = 0;\n        do {\n          uVar6 = uVar10 + uVar14 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          uVar2 = (*local_48)(uVar13,local_44,iVar7 + 8,local_50);\n          (*local_48)(local_40,0,uVar2,&local_58);\n          if ((local_50[0] <= param_2) &&\n             (uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n            return iVar7;\n          }\n          uVar10 = uVar6;\n        } while (uVar14 < uVar6);\n      }\n    }\n  }" { (if_statement "if ((uVar13 & 0x1fe00000) == 0) {\n      if (uVar10 != 0) {\n        uVar13 = 0;\n        uVar14 = uVar10;\n        while( true ) {\n          uVar6 = uVar10 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          if ((*(undefined **)(iVar7 + 8) <= param_2) &&\n             (uVar13 = uVar6 + 1, uVar6 = uVar14,\n             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc))) break;\n          if (uVar6 <= uVar13) {\n            return 0;\n          }\n          uVar10 = uVar6 + uVar13;\n          uVar14 = uVar6;\n        }\n        return iVar7;\n      }\n    }\n    else {\n      uVar13 = (uVar13 << 3) >> 0x18;\n      local_44 = (uint *)FUN_003eca18(uVar13,param_1 + 1,param_1 + 2);\n      if (uVar10 != 0) {\n        local_40 = (uint *)(uVar13 & 0xf);\n        local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n        uVar14 = 0;\n        do {\n          uVar6 = uVar10 + uVar14 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          uVar2 = (*local_48)(uVar13,local_44,iVar7 + 8,local_50);\n          (*local_48)(local_40,0,uVar2,&local_58);\n          if ((local_50[0] <= param_2) &&\n             (uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n            return iVar7;\n          }\n          uVar10 = uVar6;\n        } while (uVar14 < uVar6);\n      }\n    }" if (parenthesized_expression "((uVar13 & 0x1fe00000) == 0)" ( (binary_expression "(uVar13 & 0x1fe00000) == 0" (parenthesized_expression "(uVar13 & 0x1fe00000)" ( (binary_expression "uVar13 & 0x1fe00000" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n      if (uVar10 != 0) {\n        uVar13 = 0;\n        uVar14 = uVar10;\n        while( true ) {\n          uVar6 = uVar10 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          if ((*(undefined **)(iVar7 + 8) <= param_2) &&\n             (uVar13 = uVar6 + 1, uVar6 = uVar14,\n             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc))) break;\n          if (uVar6 <= uVar13) {\n            return 0;\n          }\n          uVar10 = uVar6 + uVar13;\n          uVar14 = uVar6;\n        }\n        return iVar7;\n      }\n    }" { (if_statement "if (uVar10 != 0) {\n        uVar13 = 0;\n        uVar14 = uVar10;\n        while( true ) {\n          uVar6 = uVar10 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          if ((*(undefined **)(iVar7 + 8) <= param_2) &&\n             (uVar13 = uVar6 + 1, uVar6 = uVar14,\n             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc))) break;\n          if (uVar6 <= uVar13) {\n            return 0;\n          }\n          uVar10 = uVar6 + uVar13;\n          uVar14 = uVar6;\n        }\n        return iVar7;\n      }" if (parenthesized_expression "(uVar10 != 0)" ( (binary_expression "uVar10 != 0" identifier != number_literal) )) (compound_statement "{\n        uVar13 = 0;\n        uVar14 = uVar10;\n        while( true ) {\n          uVar6 = uVar10 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          if ((*(undefined **)(iVar7 + 8) <= param_2) &&\n             (uVar13 = uVar6 + 1, uVar6 = uVar14,\n             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc))) break;\n          if (uVar6 <= uVar13) {\n            return 0;\n          }\n          uVar10 = uVar6 + uVar13;\n          uVar14 = uVar6;\n        }\n        return iVar7;\n      }" { (expression_statement "uVar13 = 0;" (assignment_expression "uVar13 = 0" identifier = number_literal) ;) (expression_statement "uVar14 = uVar10;" (assignment_expression "uVar14 = uVar10" identifier = identifier) ;) (while_statement "while( true ) {\n          uVar6 = uVar10 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          if ((*(undefined **)(iVar7 + 8) <= param_2) &&\n             (uVar13 = uVar6 + 1, uVar6 = uVar14,\n             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc))) break;\n          if (uVar6 <= uVar13) {\n            return 0;\n          }\n          uVar10 = uVar6 + uVar13;\n          uVar14 = uVar6;\n        }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n          uVar6 = uVar10 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          if ((*(undefined **)(iVar7 + 8) <= param_2) &&\n             (uVar13 = uVar6 + 1, uVar6 = uVar14,\n             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc))) break;\n          if (uVar6 <= uVar13) {\n            return 0;\n          }\n          uVar10 = uVar6 + uVar13;\n          uVar14 = uVar6;\n        }" { (expression_statement "uVar6 = uVar10 >> 1;" (assignment_expression "uVar6 = uVar10 >> 1" identifier = (binary_expression "uVar10 >> 1" identifier >> number_literal)) ;) (expression_statement "iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);" (assignment_expression "iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4)" identifier = (pointer_expression "*(int *)(uVar15 + (uVar6 + 2) * 4)" * (cast_expression "(int *)(uVar15 + (uVar6 + 2) * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar15 + (uVar6 + 2) * 4)" ( (binary_expression "uVar15 + (uVar6 + 2) * 4" identifier + (binary_expression "(uVar6 + 2) * 4" (parenthesized_expression "(uVar6 + 2)" ( (binary_expression "uVar6 + 2" identifier + number_literal) )) * number_literal)) ))))) ;) (if_statement "if ((*(undefined **)(iVar7 + 8) <= param_2) &&\n             (uVar13 = uVar6 + 1, uVar6 = uVar14,\n             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc))) break;" if (parenthesized_expression "((*(undefined **)(iVar7 + 8) <= param_2) &&\n             (uVar13 = uVar6 + 1, uVar6 = uVar14,\n             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc)))" ( (binary_expression "(*(undefined **)(iVar7 + 8) <= param_2) &&\n             (uVar13 = uVar6 + 1, uVar6 = uVar14,\n             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc))" (parenthesized_expression "(*(undefined **)(iVar7 + 8) <= param_2)" ( (binary_expression "*(undefined **)(iVar7 + 8) <= param_2" (pointer_expression "*(undefined **)(iVar7 + 8)" * (cast_expression "(undefined **)(iVar7 + 8)" ( (type_descriptor "undefined **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar7 + 8)" ( (binary_expression "iVar7 + 8" identifier + number_literal) )))) <= identifier) )) && (parenthesized_expression "(uVar13 = uVar6 + 1, uVar6 = uVar14,\n             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc))" ( (comma_expression "uVar13 = uVar6 + 1, uVar6 = uVar14,\n             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc)" (assignment_expression "uVar13 = uVar6 + 1" identifier = (binary_expression "uVar6 + 1" identifier + number_literal)) , (comma_expression "uVar6 = uVar14,\n             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc)" (assignment_expression "uVar6 = uVar14" identifier = identifier) , (binary_expression "param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc)" identifier < (binary_expression "*(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc)" (pointer_expression "*(undefined **)(iVar7 + 8)" * (cast_expression "(undefined **)(iVar7 + 8)" ( (type_descriptor "undefined **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar7 + 8)" ( (binary_expression "iVar7 + 8" identifier + number_literal) )))) + (pointer_expression "*(int *)(iVar7 + 0xc)" * (cast_expression "(int *)(iVar7 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 0xc)" ( (binary_expression "iVar7 + 0xc" identifier + number_literal) )))))))) ))) )) (break_statement "break;" break ;)) (if_statement "if (uVar6 <= uVar13) {\n            return 0;\n          }" if (parenthesized_expression "(uVar6 <= uVar13)" ( (binary_expression "uVar6 <= uVar13" identifier <= identifier) )) (compound_statement "{\n            return 0;\n          }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "uVar10 = uVar6 + uVar13;" (assignment_expression "uVar10 = uVar6 + uVar13" identifier = (binary_expression "uVar6 + uVar13" identifier + identifier)) ;) (expression_statement "uVar14 = uVar6;" (assignment_expression "uVar14 = uVar6" identifier = identifier) ;) })) (return_statement "return iVar7;" return identifier ;) })) }) (else_clause "else {\n      uVar13 = (uVar13 << 3) >> 0x18;\n      local_44 = (uint *)FUN_003eca18(uVar13,param_1 + 1,param_1 + 2);\n      if (uVar10 != 0) {\n        local_40 = (uint *)(uVar13 & 0xf);\n        local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n        uVar14 = 0;\n        do {\n          uVar6 = uVar10 + uVar14 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          uVar2 = (*local_48)(uVar13,local_44,iVar7 + 8,local_50);\n          (*local_48)(local_40,0,uVar2,&local_58);\n          if ((local_50[0] <= param_2) &&\n             (uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n            return iVar7;\n          }\n          uVar10 = uVar6;\n        } while (uVar14 < uVar6);\n      }\n    }" else (compound_statement "{\n      uVar13 = (uVar13 << 3) >> 0x18;\n      local_44 = (uint *)FUN_003eca18(uVar13,param_1 + 1,param_1 + 2);\n      if (uVar10 != 0) {\n        local_40 = (uint *)(uVar13 & 0xf);\n        local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n        uVar14 = 0;\n        do {\n          uVar6 = uVar10 + uVar14 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          uVar2 = (*local_48)(uVar13,local_44,iVar7 + 8,local_50);\n          (*local_48)(local_40,0,uVar2,&local_58);\n          if ((local_50[0] <= param_2) &&\n             (uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n            return iVar7;\n          }\n          uVar10 = uVar6;\n        } while (uVar14 < uVar6);\n      }\n    }" { (expression_statement "uVar13 = (uVar13 << 3) >> 0x18;" (assignment_expression "uVar13 = (uVar13 << 3) >> 0x18" identifier = (binary_expression "(uVar13 << 3) >> 0x18" (parenthesized_expression "(uVar13 << 3)" ( (binary_expression "uVar13 << 3" identifier << number_literal) )) >> number_literal)) ;) (expression_statement "local_44 = (uint *)FUN_003eca18(uVar13,param_1 + 1,param_1 + 2);" (assignment_expression "local_44 = (uint *)FUN_003eca18(uVar13,param_1 + 1,param_1 + 2)" identifier = (cast_expression "(uint *)FUN_003eca18(uVar13,param_1 + 1,param_1 + 2)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_003eca18(uVar13,param_1 + 1,param_1 + 2)" identifier (argument_list "(uVar13,param_1 + 1,param_1 + 2)" ( identifier , (binary_expression "param_1 + 1" identifier + number_literal) , (binary_expression "param_1 + 2" identifier + number_literal) ))))) ;) (if_statement "if (uVar10 != 0) {\n        local_40 = (uint *)(uVar13 & 0xf);\n        local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n        uVar14 = 0;\n        do {\n          uVar6 = uVar10 + uVar14 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          uVar2 = (*local_48)(uVar13,local_44,iVar7 + 8,local_50);\n          (*local_48)(local_40,0,uVar2,&local_58);\n          if ((local_50[0] <= param_2) &&\n             (uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n            return iVar7;\n          }\n          uVar10 = uVar6;\n        } while (uVar14 < uVar6);\n      }" if (parenthesized_expression "(uVar10 != 0)" ( (binary_expression "uVar10 != 0" identifier != number_literal) )) (compound_statement "{\n        local_40 = (uint *)(uVar13 & 0xf);\n        local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n        uVar14 = 0;\n        do {\n          uVar6 = uVar10 + uVar14 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          uVar2 = (*local_48)(uVar13,local_44,iVar7 + 8,local_50);\n          (*local_48)(local_40,0,uVar2,&local_58);\n          if ((local_50[0] <= param_2) &&\n             (uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n            return iVar7;\n          }\n          uVar10 = uVar6;\n        } while (uVar14 < uVar6);\n      }" { (expression_statement "local_40 = (uint *)(uVar13 & 0xf);" (assignment_expression "local_40 = (uint *)(uVar13 & 0xf)" identifier = (cast_expression "(uint *)(uVar13 & 0xf)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar13 & 0xf)" ( (binary_expression "uVar13 & 0xf" identifier & number_literal) )))) ;) (expression_statement "local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);" (assignment_expression "local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968)" identifier = (cast_expression "(code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968)" ( (binary_expression "PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968" identifier + number_literal) )))) ;) (expression_statement "uVar14 = 0;" (assignment_expression "uVar14 = 0" identifier = number_literal) ;) (do_statement "do {\n          uVar6 = uVar10 + uVar14 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          uVar2 = (*local_48)(uVar13,local_44,iVar7 + 8,local_50);\n          (*local_48)(local_40,0,uVar2,&local_58);\n          if ((local_50[0] <= param_2) &&\n             (uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n            return iVar7;\n          }\n          uVar10 = uVar6;\n        } while (uVar14 < uVar6);" do (compound_statement "{\n          uVar6 = uVar10 + uVar14 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          uVar2 = (*local_48)(uVar13,local_44,iVar7 + 8,local_50);\n          (*local_48)(local_40,0,uVar2,&local_58);\n          if ((local_50[0] <= param_2) &&\n             (uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n            return iVar7;\n          }\n          uVar10 = uVar6;\n        }" { (expression_statement "uVar6 = uVar10 + uVar14 >> 1;" (assignment_expression "uVar6 = uVar10 + uVar14 >> 1" identifier = (binary_expression "uVar10 + uVar14 >> 1" (binary_expression "uVar10 + uVar14" identifier + identifier) >> number_literal)) ;) (expression_statement "iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);" (assignment_expression "iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4)" identifier = (pointer_expression "*(int *)(uVar15 + (uVar6 + 2) * 4)" * (cast_expression "(int *)(uVar15 + (uVar6 + 2) * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar15 + (uVar6 + 2) * 4)" ( (binary_expression "uVar15 + (uVar6 + 2) * 4" identifier + (binary_expression "(uVar6 + 2) * 4" (parenthesized_expression "(uVar6 + 2)" ( (binary_expression "uVar6 + 2" identifier + number_literal) )) * number_literal)) ))))) ;) (expression_statement "uVar2 = (*local_48)(uVar13,local_44,iVar7 + 8,local_50);" (assignment_expression "uVar2 = (*local_48)(uVar13,local_44,iVar7 + 8,local_50)" identifier = (call_expression "(*local_48)(uVar13,local_44,iVar7 + 8,local_50)" (parenthesized_expression "(*local_48)" ( (pointer_expression "*local_48" * identifier) )) (argument_list "(uVar13,local_44,iVar7 + 8,local_50)" ( identifier , identifier , (binary_expression "iVar7 + 8" identifier + number_literal) , identifier )))) ;) (expression_statement "(*local_48)(local_40,0,uVar2,&local_58);" (call_expression "(*local_48)(local_40,0,uVar2,&local_58)" (parenthesized_expression "(*local_48)" ( (pointer_expression "*local_48" * identifier) )) (argument_list "(local_40,0,uVar2,&local_58)" ( identifier , number_literal , identifier , (pointer_expression "&local_58" & identifier) ))) ;) (if_statement "if ((local_50[0] <= param_2) &&\n             (uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n            return iVar7;\n          }" if (parenthesized_expression "((local_50[0] <= param_2) &&\n             (uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58))" ( (binary_expression "(local_50[0] <= param_2) &&\n             (uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58)" (parenthesized_expression "(local_50[0] <= param_2)" ( (binary_expression "local_50[0] <= param_2" (subscript_expression "local_50[0]" identifier [ number_literal ]) <= identifier) )) && (parenthesized_expression "(uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58)" ( (comma_expression "uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58" (assignment_expression "uVar14 = uVar6 + 1" identifier = (binary_expression "uVar6 + 1" identifier + number_literal)) , (comma_expression "uVar6 = uVar10, param_2 < local_50[0] + (int)local_58" (assignment_expression "uVar6 = uVar10" identifier = identifier) , (binary_expression "param_2 < local_50[0] + (int)local_58" identifier < (binary_expression "local_50[0] + (int)local_58" (subscript_expression "local_50[0]" identifier [ number_literal ]) + (cast_expression "(int)local_58" ( (type_descriptor "int" primitive_type) ) identifier))))) ))) )) (compound_statement "{\n            return iVar7;\n          }" { (return_statement "return iVar7;" return identifier ;) })) (expression_statement "uVar10 = uVar6;" (assignment_expression "uVar10 = uVar6" identifier = identifier) ;) }) while (parenthesized_expression "(uVar14 < uVar6)" ( (binary_expression "uVar14 < uVar6" identifier < identifier) )) ;) })) }))) }) (else_clause "else {\n    local_40 = param_1 + 1;\n    if (uVar10 != 0) {\n      uVar13 = 0;\n      local_44 = param_1 + 2;\n      local_3c = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x37e0);\n      local_38 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x35e8);\n      local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n      do {\n        uVar14 = uVar13 + uVar10 >> 1;\n        iVar7 = *(int *)(uVar15 + (uVar14 + 2) * 4);\n        bVar4 = (*local_3c)((iVar7 + 4) - *(int *)(iVar7 + 4));\n        uVar2 = (*local_38)(bVar4,local_40,local_44);\n        uVar2 = (*local_48)(bVar4,uVar2,iVar7 + 8,local_50);\n        (*local_48)(bVar4 & 0xf,0,uVar2,&local_58);\n        if ((local_50[0] <= param_2) &&\n           (uVar13 = uVar14 + 1, uVar14 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n          return iVar7;\n        }\n        uVar10 = uVar14;\n      } while (uVar13 < uVar14);\n    }\n  }" else (compound_statement "{\n    local_40 = param_1 + 1;\n    if (uVar10 != 0) {\n      uVar13 = 0;\n      local_44 = param_1 + 2;\n      local_3c = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x37e0);\n      local_38 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x35e8);\n      local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n      do {\n        uVar14 = uVar13 + uVar10 >> 1;\n        iVar7 = *(int *)(uVar15 + (uVar14 + 2) * 4);\n        bVar4 = (*local_3c)((iVar7 + 4) - *(int *)(iVar7 + 4));\n        uVar2 = (*local_38)(bVar4,local_40,local_44);\n        uVar2 = (*local_48)(bVar4,uVar2,iVar7 + 8,local_50);\n        (*local_48)(bVar4 & 0xf,0,uVar2,&local_58);\n        if ((local_50[0] <= param_2) &&\n           (uVar13 = uVar14 + 1, uVar14 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n          return iVar7;\n        }\n        uVar10 = uVar14;\n      } while (uVar13 < uVar14);\n    }\n  }" { (expression_statement "local_40 = param_1 + 1;" (assignment_expression "local_40 = param_1 + 1" identifier = (binary_expression "param_1 + 1" identifier + number_literal)) ;) (if_statement "if (uVar10 != 0) {\n      uVar13 = 0;\n      local_44 = param_1 + 2;\n      local_3c = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x37e0);\n      local_38 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x35e8);\n      local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n      do {\n        uVar14 = uVar13 + uVar10 >> 1;\n        iVar7 = *(int *)(uVar15 + (uVar14 + 2) * 4);\n        bVar4 = (*local_3c)((iVar7 + 4) - *(int *)(iVar7 + 4));\n        uVar2 = (*local_38)(bVar4,local_40,local_44);\n        uVar2 = (*local_48)(bVar4,uVar2,iVar7 + 8,local_50);\n        (*local_48)(bVar4 & 0xf,0,uVar2,&local_58);\n        if ((local_50[0] <= param_2) &&\n           (uVar13 = uVar14 + 1, uVar14 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n          return iVar7;\n        }\n        uVar10 = uVar14;\n      } while (uVar13 < uVar14);\n    }" if (parenthesized_expression "(uVar10 != 0)" ( (binary_expression "uVar10 != 0" identifier != number_literal) )) (compound_statement "{\n      uVar13 = 0;\n      local_44 = param_1 + 2;\n      local_3c = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x37e0);\n      local_38 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x35e8);\n      local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n      do {\n        uVar14 = uVar13 + uVar10 >> 1;\n        iVar7 = *(int *)(uVar15 + (uVar14 + 2) * 4);\n        bVar4 = (*local_3c)((iVar7 + 4) - *(int *)(iVar7 + 4));\n        uVar2 = (*local_38)(bVar4,local_40,local_44);\n        uVar2 = (*local_48)(bVar4,uVar2,iVar7 + 8,local_50);\n        (*local_48)(bVar4 & 0xf,0,uVar2,&local_58);\n        if ((local_50[0] <= param_2) &&\n           (uVar13 = uVar14 + 1, uVar14 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n          return iVar7;\n        }\n        uVar10 = uVar14;\n      } while (uVar13 < uVar14);\n    }" { (expression_statement "uVar13 = 0;" (assignment_expression "uVar13 = 0" identifier = number_literal) ;) (expression_statement "local_44 = param_1 + 2;" (assignment_expression "local_44 = param_1 + 2" identifier = (binary_expression "param_1 + 2" identifier + number_literal)) ;) (expression_statement "local_3c = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x37e0);" (assignment_expression "local_3c = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x37e0)" identifier = (cast_expression "(code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x37e0)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x37e0)" ( (binary_expression "PTR_s_ral_options14Struct_no_crefE_004c127c + -0x37e0" identifier + number_literal) )))) ;) (expression_statement "local_38 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x35e8);" (assignment_expression "local_38 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x35e8)" identifier = (cast_expression "(code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x35e8)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x35e8)" ( (binary_expression "PTR_s_ral_options14Struct_no_crefE_004c127c + -0x35e8" identifier + number_literal) )))) ;) (expression_statement "local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);" (assignment_expression "local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968)" identifier = (cast_expression "(code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968)" ( (binary_expression "PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968" identifier + number_literal) )))) ;) (do_statement "do {\n        uVar14 = uVar13 + uVar10 >> 1;\n        iVar7 = *(int *)(uVar15 + (uVar14 + 2) * 4);\n        bVar4 = (*local_3c)((iVar7 + 4) - *(int *)(iVar7 + 4));\n        uVar2 = (*local_38)(bVar4,local_40,local_44);\n        uVar2 = (*local_48)(bVar4,uVar2,iVar7 + 8,local_50);\n        (*local_48)(bVar4 & 0xf,0,uVar2,&local_58);\n        if ((local_50[0] <= param_2) &&\n           (uVar13 = uVar14 + 1, uVar14 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n          return iVar7;\n        }\n        uVar10 = uVar14;\n      } while (uVar13 < uVar14);" do (compound_statement "{\n        uVar14 = uVar13 + uVar10 >> 1;\n        iVar7 = *(int *)(uVar15 + (uVar14 + 2) * 4);\n        bVar4 = (*local_3c)((iVar7 + 4) - *(int *)(iVar7 + 4));\n        uVar2 = (*local_38)(bVar4,local_40,local_44);\n        uVar2 = (*local_48)(bVar4,uVar2,iVar7 + 8,local_50);\n        (*local_48)(bVar4 & 0xf,0,uVar2,&local_58);\n        if ((local_50[0] <= param_2) &&\n           (uVar13 = uVar14 + 1, uVar14 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n          return iVar7;\n        }\n        uVar10 = uVar14;\n      }" { (expression_statement "uVar14 = uVar13 + uVar10 >> 1;" (assignment_expression "uVar14 = uVar13 + uVar10 >> 1" identifier = (binary_expression "uVar13 + uVar10 >> 1" (binary_expression "uVar13 + uVar10" identifier + identifier) >> number_literal)) ;) (expression_statement "iVar7 = *(int *)(uVar15 + (uVar14 + 2) * 4);" (assignment_expression "iVar7 = *(int *)(uVar15 + (uVar14 + 2) * 4)" identifier = (pointer_expression "*(int *)(uVar15 + (uVar14 + 2) * 4)" * (cast_expression "(int *)(uVar15 + (uVar14 + 2) * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar15 + (uVar14 + 2) * 4)" ( (binary_expression "uVar15 + (uVar14 + 2) * 4" identifier + (binary_expression "(uVar14 + 2) * 4" (parenthesized_expression "(uVar14 + 2)" ( (binary_expression "uVar14 + 2" identifier + number_literal) )) * number_literal)) ))))) ;) (expression_statement "bVar4 = (*local_3c)((iVar7 + 4) - *(int *)(iVar7 + 4));" (assignment_expression "bVar4 = (*local_3c)((iVar7 + 4) - *(int *)(iVar7 + 4))" identifier = (call_expression "(*local_3c)((iVar7 + 4) - *(int *)(iVar7 + 4))" (parenthesized_expression "(*local_3c)" ( (pointer_expression "*local_3c" * identifier) )) (argument_list "((iVar7 + 4) - *(int *)(iVar7 + 4))" ( (binary_expression "(iVar7 + 4) - *(int *)(iVar7 + 4)" (parenthesized_expression "(iVar7 + 4)" ( (binary_expression "iVar7 + 4" identifier + number_literal) )) - (pointer_expression "*(int *)(iVar7 + 4)" * (cast_expression "(int *)(iVar7 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 4)" ( (binary_expression "iVar7 + 4" identifier + number_literal) ))))) )))) ;) (expression_statement "uVar2 = (*local_38)(bVar4,local_40,local_44);" (assignment_expression "uVar2 = (*local_38)(bVar4,local_40,local_44)" identifier = (call_expression "(*local_38)(bVar4,local_40,local_44)" (parenthesized_expression "(*local_38)" ( (pointer_expression "*local_38" * identifier) )) (argument_list "(bVar4,local_40,local_44)" ( identifier , identifier , identifier )))) ;) (expression_statement "uVar2 = (*local_48)(bVar4,uVar2,iVar7 + 8,local_50);" (assignment_expression "uVar2 = (*local_48)(bVar4,uVar2,iVar7 + 8,local_50)" identifier = (call_expression "(*local_48)(bVar4,uVar2,iVar7 + 8,local_50)" (parenthesized_expression "(*local_48)" ( (pointer_expression "*local_48" * identifier) )) (argument_list "(bVar4,uVar2,iVar7 + 8,local_50)" ( identifier , identifier , (binary_expression "iVar7 + 8" identifier + number_literal) , identifier )))) ;) (expression_statement "(*local_48)(bVar4 & 0xf,0,uVar2,&local_58);" (call_expression "(*local_48)(bVar4 & 0xf,0,uVar2,&local_58)" (parenthesized_expression "(*local_48)" ( (pointer_expression "*local_48" * identifier) )) (argument_list "(bVar4 & 0xf,0,uVar2,&local_58)" ( (binary_expression "bVar4 & 0xf" identifier & number_literal) , number_literal , identifier , (pointer_expression "&local_58" & identifier) ))) ;) (if_statement "if ((local_50[0] <= param_2) &&\n           (uVar13 = uVar14 + 1, uVar14 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n          return iVar7;\n        }" if (parenthesized_expression "((local_50[0] <= param_2) &&\n           (uVar13 = uVar14 + 1, uVar14 = uVar10, param_2 < local_50[0] + (int)local_58))" ( (binary_expression "(local_50[0] <= param_2) &&\n           (uVar13 = uVar14 + 1, uVar14 = uVar10, param_2 < local_50[0] + (int)local_58)" (parenthesized_expression "(local_50[0] <= param_2)" ( (binary_expression "local_50[0] <= param_2" (subscript_expression "local_50[0]" identifier [ number_literal ]) <= identifier) )) && (parenthesized_expression "(uVar13 = uVar14 + 1, uVar14 = uVar10, param_2 < local_50[0] + (int)local_58)" ( (comma_expression "uVar13 = uVar14 + 1, uVar14 = uVar10, param_2 < local_50[0] + (int)local_58" (assignment_expression "uVar13 = uVar14 + 1" identifier = (binary_expression "uVar14 + 1" identifier + number_literal)) , (comma_expression "uVar14 = uVar10, param_2 < local_50[0] + (int)local_58" (assignment_expression "uVar14 = uVar10" identifier = identifier) , (binary_expression "param_2 < local_50[0] + (int)local_58" identifier < (binary_expression "local_50[0] + (int)local_58" (subscript_expression "local_50[0]" identifier [ number_literal ]) + (cast_expression "(int)local_58" ( (type_descriptor "int" primitive_type) ) identifier))))) ))) )) (compound_statement "{\n          return iVar7;\n        }" { (return_statement "return iVar7;" return identifier ;) })) (expression_statement "uVar10 = uVar14;" (assignment_expression "uVar10 = uVar14" identifier = identifier) ;) }) while (parenthesized_expression "(uVar13 < uVar14)" ( (binary_expression "uVar13 < uVar14" identifier < identifier) )) ;) })) }))) (return_statement "return 0;" return number_literal ;) })))
(translation_unit "int search_object(uint *param_1,undefined *param_2)\n\n{\n  undefined *puVar1;\n  undefined4 uVar2;\n  byte bVar4;\n  int iVar3;\n  code *pcVar5;\n  uint uVar6;\n  int iVar7;\n  int *piVar8;\n  code *pcVar9;\n  uint uVar10;\n  uint *puVar11;\n  code *pcVar12;\n  uint uVar13;\n  uint uVar14;\n  uint uVar15;\n  uint *puVar16;\n  int *piVar17;\n  uint *puVar18;\n  uint *puVar19;\n  uint *local_58;\n  int *local_54;\n  undefined *local_50 [2];\n  code *local_48;\n  uint *local_44;\n  uint *local_40;\n  code *local_3c;\n  code *local_38;\n  uint *local_34;\n  uint *local_30;\n  \n  uVar13 = param_1[4];\n  if ((int)uVar13 < 0) goto LAB_003ed920;\n  uVar10 = uVar13 & 0x1fffff;\n  if (uVar10 == 0) {\n    piVar8 = (int *)param_1[3];\n    if ((int)(uVar13 << 1) < 0) {\n      if (*piVar8 != 0) {\n        uVar10 = 0;\n        do {\n          iVar7 = classify_object_over_fdes(param_1);\n          if (iVar7 == -1) goto LAB_003eda10;\n          piVar8 = piVar8 + 1;\n          uVar10 = uVar10 + iVar7;\n        } while (*piVar8 != 0);\nLAB_003edb08:\n        if ((uVar10 & 0x1fffff) == uVar10) {\n          param_1[4] = param_1[4] & 0xffe00000 | uVar10 & 0x1fffff;\n        }\n        else {\n          param_1[4] = param_1[4] & 0xffe00000;\n        }\n        if (uVar10 != 0) goto LAB_003edce8;\n      }\n    }\n    else {\n      uVar10 = classify_object_over_fdes(param_1,piVar8);\n      if (uVar10 != 0xffffffff) goto LAB_003edb08;\nLAB_003eda10:\n      param_1[4] = 0x1fe00000;\n      param_1[3] = (uint)(PTR_UINT_004c12dc + 0xaa4);\n    }\n  }\n  else {\nLAB_003edce8:\n    iVar7 = (uVar10 + 2) * 4;\n    local_58 = (uint *)(*(code *)PTR_malloc_004c5b38)(iVar7);\n    puVar1 = PTR_malloc_004c5b38;\n    if (local_58 != (uint *)0x0) {\n      local_58[1] = 0;\n      local_54 = (int *)(*(code *)puVar1)(iVar7);\n      if (local_54 != (int *)0x0) {\n        local_54[1] = 0;\n      }\n      piVar8 = (int *)param_1[3];\n      if ((int)(param_1[4] << 1) < 0) {\n        if (*piVar8 == 0) goto LAB_003ee148;\n        do {\n          piVar8 = piVar8 + 1;\n          add_fdes(param_1,&local_58);\n        } while (*piVar8 != 0);\n      }\n      else {\n        add_fdes(param_1,&local_58,piVar8);\n      }\n      piVar8 = local_54;\n      local_3c = (code *)local_58;\n      local_30 = local_58;\n      if ((local_58 != (uint *)0x0) && (local_58[1] != uVar10)) {\nLAB_003ee148:\n        iVar7 = (*(code *)PTR_abort_004c5d24)();\n        return iVar7;\n      }\n      if ((int)(param_1[4] << 2) < 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3240);\n      }\n      else if ((param_1[4] & 0x1fe00000) == 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628);\n      }\n      else {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558);\n      }\n      if (local_54 == (int *)0x0) {\n        frame_heapsort(param_1,pcVar9,local_58);\n      }\n      else {\n        local_38 = (code *)local_58[1];\n        if (local_38 == (code *)0x0) {\n          iVar7 = 0;\n          uVar13 = 0;\n        }\n        else {\n          piVar17 = local_54 + 2;\n          local_34 = local_58 + (int)local_38 + 1;\n          puVar11 = (uint *)(PTR_DAT_004c256c + -0x15d0);\n          local_48 = (code *)(local_58 + 2);\n          *piVar17 = (int)puVar11;\n          local_44 = (uint *)local_48;\n          local_40 = (uint *)piVar17;\n          puVar18 = (uint *)local_48;\n          puVar16 = (uint *)local_48;\n          if (local_48 != (code *)local_34) {\n            do {\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            } while (puVar18 != local_34);\n          }\n          iVar7 = 0;\n          uVar13 = 0;\n          uVar15 = 0;\n          puVar18 = local_44;\n          do {\n            while (local_44 = puVar18, *piVar17 == 0) {\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }\n            iVar3 = uVar13 + 2;\n            uVar15 = uVar15 + 1;\n            uVar13 = uVar13 + 1;\n            *(uint *)((int)local_3c + iVar3 * 4) = *local_44;\n            piVar17 = piVar17 + 1;\n            puVar18 = local_44 + 1;\n          } while (local_38 != (code *)uVar15);\nLAB_003edef4:\n          local_44 = local_44 + 1;\n        }\n        local_30[1] = uVar13;\n        piVar8[1] = iVar7;\n        local_3c = (code *)local_58;\n        if (local_58[1] + local_54[1] != uVar10) goto LAB_003ee148;\n        frame_heapsort(param_1,pcVar9);\n        local_40 = (uint *)local_54;\n        if ((uint *)local_54[1] != (uint *)0x0) {\n          local_44 = local_58;\n          uVar13 = local_58[1];\n          pcVar12 = (code *)local_54[1];\n          do {\n            local_48 = (code *)((int)pcVar12 + -1);\n            uVar10 = (local_40 + (int)pcVar12)[1];\n            if (uVar13 == 0) {\n              local_44[(int)pcVar12 + 1] = uVar10;\n              if (pcVar12 == (code *)0x1) break;\n              local_48 = (code *)((int)pcVar12 + -2);\n              uVar10 = local_40[(int)pcVar12];\n              pcVar5 = local_48;\n            }\n            else {\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }\n            local_44[(int)pcVar5 + 2] = uVar10;\n            pcVar12 = local_48;\n          } while (local_48 != (code *)0x0);\n          local_44[1] = local_44[1] + local_40[1];\n        }\n        local_40 = (uint *)local_54;\n        (*(code *)PTR_free_004c5c18)(local_54);\n      }\n      *local_58 = param_1[3];\n      param_1[3] = (uint)local_58;\n      param_1[4] = param_1[4] & 0x7fffffff | 0x80000000;\n    }\n  }\n  if (param_2 < (undefined *)*param_1) {\n    return 0;\n  }\n  uVar13 = param_1[4];\n  piVar8 = (int *)param_1[3];\n  if (-1 < (int)uVar13) {\n    if (-1 < (int)(uVar13 << 1)) {\n      iVar7 = linear_search_fdes(param_1,piVar8,param_2);\n      return iVar7;\n    }\n    iVar7 = *piVar8;\n    while( true ) {\n      if (iVar7 == 0) {\n        return 0;\n      }\n      iVar7 = linear_search_fdes(param_1,iVar7,param_2);\n      if (iVar7 != 0) break;\n      piVar8 = piVar8 + 1;\n      iVar7 = *piVar8;\n    }\n    return iVar7;\n  }\nLAB_003ed920:\n  uVar15 = param_1[3];\n  uVar10 = *(uint *)(uVar15 + 4);\n  if ((uVar13 & 0x20000000) == 0) {\n    if ((uVar13 & 0x1fe00000) == 0) {\n      if (uVar10 != 0) {\n        uVar13 = 0;\n        uVar14 = uVar10;\n        while( true ) {\n          uVar6 = uVar10 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          if ((*(undefined **)(iVar7 + 8) <= param_2) &&\n             (uVar13 = uVar6 + 1, uVar6 = uVar14,\n             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc))) break;\n          if (uVar6 <= uVar13) {\n            return 0;\n          }\n          uVar10 = uVar6 + uVar13;\n          uVar14 = uVar6;\n        }\n        return iVar7;\n      }\n    }\n    else {\n      uVar13 = (uVar13 << 3) >> 0x18;\n      local_44 = (uint *)base_from_cb_data_isra_4(uVar13,param_1 + 1,param_1 + 2);\n      if (uVar10 != 0) {\n        local_40 = (uint *)(uVar13 & 0xf);\n        local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n        uVar14 = 0;\n        do {\n          uVar6 = uVar10 + uVar14 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          uVar2 = (*local_48)(uVar13,local_44,iVar7 + 8,local_50);\n          (*local_48)(local_40,0,uVar2,&local_58);\n          if ((local_50[0] <= param_2) &&\n             (uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n            return iVar7;\n          }\n          uVar10 = uVar6;\n        } while (uVar14 < uVar6);\n      }\n    }\n  }\n  else {\n    local_40 = param_1 + 1;\n    if (uVar10 != 0) {\n      uVar13 = 0;\n      local_44 = param_1 + 2;\n      local_3c = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x37e0);\n      local_38 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x35e8);\n      local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n      do {\n        uVar14 = uVar13 + uVar10 >> 1;\n        iVar7 = *(int *)(uVar15 + (uVar14 + 2) * 4);\n        bVar4 = (*local_3c)((iVar7 + 4) - *(int *)(iVar7 + 4));\n        uVar2 = (*local_38)(bVar4,local_40,local_44);\n        uVar2 = (*local_48)(bVar4,uVar2,iVar7 + 8,local_50);\n        (*local_48)(bVar4 & 0xf,0,uVar2,&local_58);\n        if ((local_50[0] <= param_2) &&\n           (uVar13 = uVar14 + 1, uVar14 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n          return iVar7;\n        }\n        uVar10 = uVar14;\n      } while (uVar13 < uVar14);\n    }\n  }\n  return 0;\n}\n\n" (function_definition "int search_object(uint *param_1,undefined *param_2)\n\n{\n  undefined *puVar1;\n  undefined4 uVar2;\n  byte bVar4;\n  int iVar3;\n  code *pcVar5;\n  uint uVar6;\n  int iVar7;\n  int *piVar8;\n  code *pcVar9;\n  uint uVar10;\n  uint *puVar11;\n  code *pcVar12;\n  uint uVar13;\n  uint uVar14;\n  uint uVar15;\n  uint *puVar16;\n  int *piVar17;\n  uint *puVar18;\n  uint *puVar19;\n  uint *local_58;\n  int *local_54;\n  undefined *local_50 [2];\n  code *local_48;\n  uint *local_44;\n  uint *local_40;\n  code *local_3c;\n  code *local_38;\n  uint *local_34;\n  uint *local_30;\n  \n  uVar13 = param_1[4];\n  if ((int)uVar13 < 0) goto LAB_003ed920;\n  uVar10 = uVar13 & 0x1fffff;\n  if (uVar10 == 0) {\n    piVar8 = (int *)param_1[3];\n    if ((int)(uVar13 << 1) < 0) {\n      if (*piVar8 != 0) {\n        uVar10 = 0;\n        do {\n          iVar7 = classify_object_over_fdes(param_1);\n          if (iVar7 == -1) goto LAB_003eda10;\n          piVar8 = piVar8 + 1;\n          uVar10 = uVar10 + iVar7;\n        } while (*piVar8 != 0);\nLAB_003edb08:\n        if ((uVar10 & 0x1fffff) == uVar10) {\n          param_1[4] = param_1[4] & 0xffe00000 | uVar10 & 0x1fffff;\n        }\n        else {\n          param_1[4] = param_1[4] & 0xffe00000;\n        }\n        if (uVar10 != 0) goto LAB_003edce8;\n      }\n    }\n    else {\n      uVar10 = classify_object_over_fdes(param_1,piVar8);\n      if (uVar10 != 0xffffffff) goto LAB_003edb08;\nLAB_003eda10:\n      param_1[4] = 0x1fe00000;\n      param_1[3] = (uint)(PTR_UINT_004c12dc + 0xaa4);\n    }\n  }\n  else {\nLAB_003edce8:\n    iVar7 = (uVar10 + 2) * 4;\n    local_58 = (uint *)(*(code *)PTR_malloc_004c5b38)(iVar7);\n    puVar1 = PTR_malloc_004c5b38;\n    if (local_58 != (uint *)0x0) {\n      local_58[1] = 0;\n      local_54 = (int *)(*(code *)puVar1)(iVar7);\n      if (local_54 != (int *)0x0) {\n        local_54[1] = 0;\n      }\n      piVar8 = (int *)param_1[3];\n      if ((int)(param_1[4] << 1) < 0) {\n        if (*piVar8 == 0) goto LAB_003ee148;\n        do {\n          piVar8 = piVar8 + 1;\n          add_fdes(param_1,&local_58);\n        } while (*piVar8 != 0);\n      }\n      else {\n        add_fdes(param_1,&local_58,piVar8);\n      }\n      piVar8 = local_54;\n      local_3c = (code *)local_58;\n      local_30 = local_58;\n      if ((local_58 != (uint *)0x0) && (local_58[1] != uVar10)) {\nLAB_003ee148:\n        iVar7 = (*(code *)PTR_abort_004c5d24)();\n        return iVar7;\n      }\n      if ((int)(param_1[4] << 2) < 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3240);\n      }\n      else if ((param_1[4] & 0x1fe00000) == 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628);\n      }\n      else {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558);\n      }\n      if (local_54 == (int *)0x0) {\n        frame_heapsort(param_1,pcVar9,local_58);\n      }\n      else {\n        local_38 = (code *)local_58[1];\n        if (local_38 == (code *)0x0) {\n          iVar7 = 0;\n          uVar13 = 0;\n        }\n        else {\n          piVar17 = local_54 + 2;\n          local_34 = local_58 + (int)local_38 + 1;\n          puVar11 = (uint *)(PTR_DAT_004c256c + -0x15d0);\n          local_48 = (code *)(local_58 + 2);\n          *piVar17 = (int)puVar11;\n          local_44 = (uint *)local_48;\n          local_40 = (uint *)piVar17;\n          puVar18 = (uint *)local_48;\n          puVar16 = (uint *)local_48;\n          if (local_48 != (code *)local_34) {\n            do {\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            } while (puVar18 != local_34);\n          }\n          iVar7 = 0;\n          uVar13 = 0;\n          uVar15 = 0;\n          puVar18 = local_44;\n          do {\n            while (local_44 = puVar18, *piVar17 == 0) {\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }\n            iVar3 = uVar13 + 2;\n            uVar15 = uVar15 + 1;\n            uVar13 = uVar13 + 1;\n            *(uint *)((int)local_3c + iVar3 * 4) = *local_44;\n            piVar17 = piVar17 + 1;\n            puVar18 = local_44 + 1;\n          } while (local_38 != (code *)uVar15);\nLAB_003edef4:\n          local_44 = local_44 + 1;\n        }\n        local_30[1] = uVar13;\n        piVar8[1] = iVar7;\n        local_3c = (code *)local_58;\n        if (local_58[1] + local_54[1] != uVar10) goto LAB_003ee148;\n        frame_heapsort(param_1,pcVar9);\n        local_40 = (uint *)local_54;\n        if ((uint *)local_54[1] != (uint *)0x0) {\n          local_44 = local_58;\n          uVar13 = local_58[1];\n          pcVar12 = (code *)local_54[1];\n          do {\n            local_48 = (code *)((int)pcVar12 + -1);\n            uVar10 = (local_40 + (int)pcVar12)[1];\n            if (uVar13 == 0) {\n              local_44[(int)pcVar12 + 1] = uVar10;\n              if (pcVar12 == (code *)0x1) break;\n              local_48 = (code *)((int)pcVar12 + -2);\n              uVar10 = local_40[(int)pcVar12];\n              pcVar5 = local_48;\n            }\n            else {\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }\n            local_44[(int)pcVar5 + 2] = uVar10;\n            pcVar12 = local_48;\n          } while (local_48 != (code *)0x0);\n          local_44[1] = local_44[1] + local_40[1];\n        }\n        local_40 = (uint *)local_54;\n        (*(code *)PTR_free_004c5c18)(local_54);\n      }\n      *local_58 = param_1[3];\n      param_1[3] = (uint)local_58;\n      param_1[4] = param_1[4] & 0x7fffffff | 0x80000000;\n    }\n  }\n  if (param_2 < (undefined *)*param_1) {\n    return 0;\n  }\n  uVar13 = param_1[4];\n  piVar8 = (int *)param_1[3];\n  if (-1 < (int)uVar13) {\n    if (-1 < (int)(uVar13 << 1)) {\n      iVar7 = linear_search_fdes(param_1,piVar8,param_2);\n      return iVar7;\n    }\n    iVar7 = *piVar8;\n    while( true ) {\n      if (iVar7 == 0) {\n        return 0;\n      }\n      iVar7 = linear_search_fdes(param_1,iVar7,param_2);\n      if (iVar7 != 0) break;\n      piVar8 = piVar8 + 1;\n      iVar7 = *piVar8;\n    }\n    return iVar7;\n  }\nLAB_003ed920:\n  uVar15 = param_1[3];\n  uVar10 = *(uint *)(uVar15 + 4);\n  if ((uVar13 & 0x20000000) == 0) {\n    if ((uVar13 & 0x1fe00000) == 0) {\n      if (uVar10 != 0) {\n        uVar13 = 0;\n        uVar14 = uVar10;\n        while( true ) {\n          uVar6 = uVar10 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          if ((*(undefined **)(iVar7 + 8) <= param_2) &&\n             (uVar13 = uVar6 + 1, uVar6 = uVar14,\n             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc))) break;\n          if (uVar6 <= uVar13) {\n            return 0;\n          }\n          uVar10 = uVar6 + uVar13;\n          uVar14 = uVar6;\n        }\n        return iVar7;\n      }\n    }\n    else {\n      uVar13 = (uVar13 << 3) >> 0x18;\n      local_44 = (uint *)base_from_cb_data_isra_4(uVar13,param_1 + 1,param_1 + 2);\n      if (uVar10 != 0) {\n        local_40 = (uint *)(uVar13 & 0xf);\n        local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n        uVar14 = 0;\n        do {\n          uVar6 = uVar10 + uVar14 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          uVar2 = (*local_48)(uVar13,local_44,iVar7 + 8,local_50);\n          (*local_48)(local_40,0,uVar2,&local_58);\n          if ((local_50[0] <= param_2) &&\n             (uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n            return iVar7;\n          }\n          uVar10 = uVar6;\n        } while (uVar14 < uVar6);\n      }\n    }\n  }\n  else {\n    local_40 = param_1 + 1;\n    if (uVar10 != 0) {\n      uVar13 = 0;\n      local_44 = param_1 + 2;\n      local_3c = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x37e0);\n      local_38 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x35e8);\n      local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n      do {\n        uVar14 = uVar13 + uVar10 >> 1;\n        iVar7 = *(int *)(uVar15 + (uVar14 + 2) * 4);\n        bVar4 = (*local_3c)((iVar7 + 4) - *(int *)(iVar7 + 4));\n        uVar2 = (*local_38)(bVar4,local_40,local_44);\n        uVar2 = (*local_48)(bVar4,uVar2,iVar7 + 8,local_50);\n        (*local_48)(bVar4 & 0xf,0,uVar2,&local_58);\n        if ((local_50[0] <= param_2) &&\n           (uVar13 = uVar14 + 1, uVar14 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n          return iVar7;\n        }\n        uVar10 = uVar14;\n      } while (uVar13 < uVar14);\n    }\n  }\n  return 0;\n}" primitive_type (function_declarator "search_object(uint *param_1,undefined *param_2)" identifier (parameter_list "(uint *param_1,undefined *param_2)" ( (parameter_declaration "uint *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "undefined *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) ))) (compound_statement "{\n  undefined *puVar1;\n  undefined4 uVar2;\n  byte bVar4;\n  int iVar3;\n  code *pcVar5;\n  uint uVar6;\n  int iVar7;\n  int *piVar8;\n  code *pcVar9;\n  uint uVar10;\n  uint *puVar11;\n  code *pcVar12;\n  uint uVar13;\n  uint uVar14;\n  uint uVar15;\n  uint *puVar16;\n  int *piVar17;\n  uint *puVar18;\n  uint *puVar19;\n  uint *local_58;\n  int *local_54;\n  undefined *local_50 [2];\n  code *local_48;\n  uint *local_44;\n  uint *local_40;\n  code *local_3c;\n  code *local_38;\n  uint *local_34;\n  uint *local_30;\n  \n  uVar13 = param_1[4];\n  if ((int)uVar13 < 0) goto LAB_003ed920;\n  uVar10 = uVar13 & 0x1fffff;\n  if (uVar10 == 0) {\n    piVar8 = (int *)param_1[3];\n    if ((int)(uVar13 << 1) < 0) {\n      if (*piVar8 != 0) {\n        uVar10 = 0;\n        do {\n          iVar7 = classify_object_over_fdes(param_1);\n          if (iVar7 == -1) goto LAB_003eda10;\n          piVar8 = piVar8 + 1;\n          uVar10 = uVar10 + iVar7;\n        } while (*piVar8 != 0);\nLAB_003edb08:\n        if ((uVar10 & 0x1fffff) == uVar10) {\n          param_1[4] = param_1[4] & 0xffe00000 | uVar10 & 0x1fffff;\n        }\n        else {\n          param_1[4] = param_1[4] & 0xffe00000;\n        }\n        if (uVar10 != 0) goto LAB_003edce8;\n      }\n    }\n    else {\n      uVar10 = classify_object_over_fdes(param_1,piVar8);\n      if (uVar10 != 0xffffffff) goto LAB_003edb08;\nLAB_003eda10:\n      param_1[4] = 0x1fe00000;\n      param_1[3] = (uint)(PTR_UINT_004c12dc + 0xaa4);\n    }\n  }\n  else {\nLAB_003edce8:\n    iVar7 = (uVar10 + 2) * 4;\n    local_58 = (uint *)(*(code *)PTR_malloc_004c5b38)(iVar7);\n    puVar1 = PTR_malloc_004c5b38;\n    if (local_58 != (uint *)0x0) {\n      local_58[1] = 0;\n      local_54 = (int *)(*(code *)puVar1)(iVar7);\n      if (local_54 != (int *)0x0) {\n        local_54[1] = 0;\n      }\n      piVar8 = (int *)param_1[3];\n      if ((int)(param_1[4] << 1) < 0) {\n        if (*piVar8 == 0) goto LAB_003ee148;\n        do {\n          piVar8 = piVar8 + 1;\n          add_fdes(param_1,&local_58);\n        } while (*piVar8 != 0);\n      }\n      else {\n        add_fdes(param_1,&local_58,piVar8);\n      }\n      piVar8 = local_54;\n      local_3c = (code *)local_58;\n      local_30 = local_58;\n      if ((local_58 != (uint *)0x0) && (local_58[1] != uVar10)) {\nLAB_003ee148:\n        iVar7 = (*(code *)PTR_abort_004c5d24)();\n        return iVar7;\n      }\n      if ((int)(param_1[4] << 2) < 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3240);\n      }\n      else if ((param_1[4] & 0x1fe00000) == 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628);\n      }\n      else {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558);\n      }\n      if (local_54 == (int *)0x0) {\n        frame_heapsort(param_1,pcVar9,local_58);\n      }\n      else {\n        local_38 = (code *)local_58[1];\n        if (local_38 == (code *)0x0) {\n          iVar7 = 0;\n          uVar13 = 0;\n        }\n        else {\n          piVar17 = local_54 + 2;\n          local_34 = local_58 + (int)local_38 + 1;\n          puVar11 = (uint *)(PTR_DAT_004c256c + -0x15d0);\n          local_48 = (code *)(local_58 + 2);\n          *piVar17 = (int)puVar11;\n          local_44 = (uint *)local_48;\n          local_40 = (uint *)piVar17;\n          puVar18 = (uint *)local_48;\n          puVar16 = (uint *)local_48;\n          if (local_48 != (code *)local_34) {\n            do {\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            } while (puVar18 != local_34);\n          }\n          iVar7 = 0;\n          uVar13 = 0;\n          uVar15 = 0;\n          puVar18 = local_44;\n          do {\n            while (local_44 = puVar18, *piVar17 == 0) {\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }\n            iVar3 = uVar13 + 2;\n            uVar15 = uVar15 + 1;\n            uVar13 = uVar13 + 1;\n            *(uint *)((int)local_3c + iVar3 * 4) = *local_44;\n            piVar17 = piVar17 + 1;\n            puVar18 = local_44 + 1;\n          } while (local_38 != (code *)uVar15);\nLAB_003edef4:\n          local_44 = local_44 + 1;\n        }\n        local_30[1] = uVar13;\n        piVar8[1] = iVar7;\n        local_3c = (code *)local_58;\n        if (local_58[1] + local_54[1] != uVar10) goto LAB_003ee148;\n        frame_heapsort(param_1,pcVar9);\n        local_40 = (uint *)local_54;\n        if ((uint *)local_54[1] != (uint *)0x0) {\n          local_44 = local_58;\n          uVar13 = local_58[1];\n          pcVar12 = (code *)local_54[1];\n          do {\n            local_48 = (code *)((int)pcVar12 + -1);\n            uVar10 = (local_40 + (int)pcVar12)[1];\n            if (uVar13 == 0) {\n              local_44[(int)pcVar12 + 1] = uVar10;\n              if (pcVar12 == (code *)0x1) break;\n              local_48 = (code *)((int)pcVar12 + -2);\n              uVar10 = local_40[(int)pcVar12];\n              pcVar5 = local_48;\n            }\n            else {\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }\n            local_44[(int)pcVar5 + 2] = uVar10;\n            pcVar12 = local_48;\n          } while (local_48 != (code *)0x0);\n          local_44[1] = local_44[1] + local_40[1];\n        }\n        local_40 = (uint *)local_54;\n        (*(code *)PTR_free_004c5c18)(local_54);\n      }\n      *local_58 = param_1[3];\n      param_1[3] = (uint)local_58;\n      param_1[4] = param_1[4] & 0x7fffffff | 0x80000000;\n    }\n  }\n  if (param_2 < (undefined *)*param_1) {\n    return 0;\n  }\n  uVar13 = param_1[4];\n  piVar8 = (int *)param_1[3];\n  if (-1 < (int)uVar13) {\n    if (-1 < (int)(uVar13 << 1)) {\n      iVar7 = linear_search_fdes(param_1,piVar8,param_2);\n      return iVar7;\n    }\n    iVar7 = *piVar8;\n    while( true ) {\n      if (iVar7 == 0) {\n        return 0;\n      }\n      iVar7 = linear_search_fdes(param_1,iVar7,param_2);\n      if (iVar7 != 0) break;\n      piVar8 = piVar8 + 1;\n      iVar7 = *piVar8;\n    }\n    return iVar7;\n  }\nLAB_003ed920:\n  uVar15 = param_1[3];\n  uVar10 = *(uint *)(uVar15 + 4);\n  if ((uVar13 & 0x20000000) == 0) {\n    if ((uVar13 & 0x1fe00000) == 0) {\n      if (uVar10 != 0) {\n        uVar13 = 0;\n        uVar14 = uVar10;\n        while( true ) {\n          uVar6 = uVar10 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          if ((*(undefined **)(iVar7 + 8) <= param_2) &&\n             (uVar13 = uVar6 + 1, uVar6 = uVar14,\n             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc))) break;\n          if (uVar6 <= uVar13) {\n            return 0;\n          }\n          uVar10 = uVar6 + uVar13;\n          uVar14 = uVar6;\n        }\n        return iVar7;\n      }\n    }\n    else {\n      uVar13 = (uVar13 << 3) >> 0x18;\n      local_44 = (uint *)base_from_cb_data_isra_4(uVar13,param_1 + 1,param_1 + 2);\n      if (uVar10 != 0) {\n        local_40 = (uint *)(uVar13 & 0xf);\n        local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n        uVar14 = 0;\n        do {\n          uVar6 = uVar10 + uVar14 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          uVar2 = (*local_48)(uVar13,local_44,iVar7 + 8,local_50);\n          (*local_48)(local_40,0,uVar2,&local_58);\n          if ((local_50[0] <= param_2) &&\n             (uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n            return iVar7;\n          }\n          uVar10 = uVar6;\n        } while (uVar14 < uVar6);\n      }\n    }\n  }\n  else {\n    local_40 = param_1 + 1;\n    if (uVar10 != 0) {\n      uVar13 = 0;\n      local_44 = param_1 + 2;\n      local_3c = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x37e0);\n      local_38 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x35e8);\n      local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n      do {\n        uVar14 = uVar13 + uVar10 >> 1;\n        iVar7 = *(int *)(uVar15 + (uVar14 + 2) * 4);\n        bVar4 = (*local_3c)((iVar7 + 4) - *(int *)(iVar7 + 4));\n        uVar2 = (*local_38)(bVar4,local_40,local_44);\n        uVar2 = (*local_48)(bVar4,uVar2,iVar7 + 8,local_50);\n        (*local_48)(bVar4 & 0xf,0,uVar2,&local_58);\n        if ((local_50[0] <= param_2) &&\n           (uVar13 = uVar14 + 1, uVar14 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n          return iVar7;\n        }\n        uVar10 = uVar14;\n      } while (uVar13 < uVar14);\n    }\n  }\n  return 0;\n}" { (declaration "undefined *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "undefined4 uVar2;" type_identifier identifier ;) (declaration "byte bVar4;" type_identifier identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "code *pcVar5;" type_identifier (pointer_declarator "*pcVar5" * identifier) ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "int *piVar8;" primitive_type (pointer_declarator "*piVar8" * identifier) ;) (declaration "code *pcVar9;" type_identifier (pointer_declarator "*pcVar9" * identifier) ;) (declaration "uint uVar10;" type_identifier identifier ;) (declaration "uint *puVar11;" type_identifier (pointer_declarator "*puVar11" * identifier) ;) (declaration "code *pcVar12;" type_identifier (pointer_declarator "*pcVar12" * identifier) ;) (declaration "uint uVar13;" type_identifier identifier ;) (declaration "uint uVar14;" type_identifier identifier ;) (declaration "uint uVar15;" type_identifier identifier ;) (declaration "uint *puVar16;" type_identifier (pointer_declarator "*puVar16" * identifier) ;) (declaration "int *piVar17;" primitive_type (pointer_declarator "*piVar17" * identifier) ;) (declaration "uint *puVar18;" type_identifier (pointer_declarator "*puVar18" * identifier) ;) (declaration "uint *puVar19;" type_identifier (pointer_declarator "*puVar19" * identifier) ;) (declaration "uint *local_58;" type_identifier (pointer_declarator "*local_58" * identifier) ;) (declaration "int *local_54;" primitive_type (pointer_declarator "*local_54" * identifier) ;) (declaration "undefined *local_50 [2];" type_identifier (pointer_declarator "*local_50 [2]" * (array_declarator "local_50 [2]" identifier [ number_literal ])) ;) (declaration "code *local_48;" type_identifier (pointer_declarator "*local_48" * identifier) ;) (declaration "uint *local_44;" type_identifier (pointer_declarator "*local_44" * identifier) ;) (declaration "uint *local_40;" type_identifier (pointer_declarator "*local_40" * identifier) ;) (declaration "code *local_3c;" type_identifier (pointer_declarator "*local_3c" * identifier) ;) (declaration "code *local_38;" type_identifier (pointer_declarator "*local_38" * identifier) ;) (declaration "uint *local_34;" type_identifier (pointer_declarator "*local_34" * identifier) ;) (declaration "uint *local_30;" type_identifier (pointer_declarator "*local_30" * identifier) ;) (expression_statement "uVar13 = param_1[4];" (assignment_expression "uVar13 = param_1[4]" identifier = (subscript_expression "param_1[4]" identifier [ number_literal ])) ;) (if_statement "if ((int)uVar13 < 0) goto LAB_003ed920;" if (parenthesized_expression "((int)uVar13 < 0)" ( (binary_expression "(int)uVar13 < 0" (cast_expression "(int)uVar13" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (goto_statement "goto LAB_003ed920;" goto statement_identifier ;)) (expression_statement "uVar10 = uVar13 & 0x1fffff;" (assignment_expression "uVar10 = uVar13 & 0x1fffff" identifier = (binary_expression "uVar13 & 0x1fffff" identifier & number_literal)) ;) (if_statement "if (uVar10 == 0) {\n    piVar8 = (int *)param_1[3];\n    if ((int)(uVar13 << 1) < 0) {\n      if (*piVar8 != 0) {\n        uVar10 = 0;\n        do {\n          iVar7 = classify_object_over_fdes(param_1);\n          if (iVar7 == -1) goto LAB_003eda10;\n          piVar8 = piVar8 + 1;\n          uVar10 = uVar10 + iVar7;\n        } while (*piVar8 != 0);\nLAB_003edb08:\n        if ((uVar10 & 0x1fffff) == uVar10) {\n          param_1[4] = param_1[4] & 0xffe00000 | uVar10 & 0x1fffff;\n        }\n        else {\n          param_1[4] = param_1[4] & 0xffe00000;\n        }\n        if (uVar10 != 0) goto LAB_003edce8;\n      }\n    }\n    else {\n      uVar10 = classify_object_over_fdes(param_1,piVar8);\n      if (uVar10 != 0xffffffff) goto LAB_003edb08;\nLAB_003eda10:\n      param_1[4] = 0x1fe00000;\n      param_1[3] = (uint)(PTR_UINT_004c12dc + 0xaa4);\n    }\n  }\n  else {\nLAB_003edce8:\n    iVar7 = (uVar10 + 2) * 4;\n    local_58 = (uint *)(*(code *)PTR_malloc_004c5b38)(iVar7);\n    puVar1 = PTR_malloc_004c5b38;\n    if (local_58 != (uint *)0x0) {\n      local_58[1] = 0;\n      local_54 = (int *)(*(code *)puVar1)(iVar7);\n      if (local_54 != (int *)0x0) {\n        local_54[1] = 0;\n      }\n      piVar8 = (int *)param_1[3];\n      if ((int)(param_1[4] << 1) < 0) {\n        if (*piVar8 == 0) goto LAB_003ee148;\n        do {\n          piVar8 = piVar8 + 1;\n          add_fdes(param_1,&local_58);\n        } while (*piVar8 != 0);\n      }\n      else {\n        add_fdes(param_1,&local_58,piVar8);\n      }\n      piVar8 = local_54;\n      local_3c = (code *)local_58;\n      local_30 = local_58;\n      if ((local_58 != (uint *)0x0) && (local_58[1] != uVar10)) {\nLAB_003ee148:\n        iVar7 = (*(code *)PTR_abort_004c5d24)();\n        return iVar7;\n      }\n      if ((int)(param_1[4] << 2) < 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3240);\n      }\n      else if ((param_1[4] & 0x1fe00000) == 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628);\n      }\n      else {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558);\n      }\n      if (local_54 == (int *)0x0) {\n        frame_heapsort(param_1,pcVar9,local_58);\n      }\n      else {\n        local_38 = (code *)local_58[1];\n        if (local_38 == (code *)0x0) {\n          iVar7 = 0;\n          uVar13 = 0;\n        }\n        else {\n          piVar17 = local_54 + 2;\n          local_34 = local_58 + (int)local_38 + 1;\n          puVar11 = (uint *)(PTR_DAT_004c256c + -0x15d0);\n          local_48 = (code *)(local_58 + 2);\n          *piVar17 = (int)puVar11;\n          local_44 = (uint *)local_48;\n          local_40 = (uint *)piVar17;\n          puVar18 = (uint *)local_48;\n          puVar16 = (uint *)local_48;\n          if (local_48 != (code *)local_34) {\n            do {\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            } while (puVar18 != local_34);\n          }\n          iVar7 = 0;\n          uVar13 = 0;\n          uVar15 = 0;\n          puVar18 = local_44;\n          do {\n            while (local_44 = puVar18, *piVar17 == 0) {\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }\n            iVar3 = uVar13 + 2;\n            uVar15 = uVar15 + 1;\n            uVar13 = uVar13 + 1;\n            *(uint *)((int)local_3c + iVar3 * 4) = *local_44;\n            piVar17 = piVar17 + 1;\n            puVar18 = local_44 + 1;\n          } while (local_38 != (code *)uVar15);\nLAB_003edef4:\n          local_44 = local_44 + 1;\n        }\n        local_30[1] = uVar13;\n        piVar8[1] = iVar7;\n        local_3c = (code *)local_58;\n        if (local_58[1] + local_54[1] != uVar10) goto LAB_003ee148;\n        frame_heapsort(param_1,pcVar9);\n        local_40 = (uint *)local_54;\n        if ((uint *)local_54[1] != (uint *)0x0) {\n          local_44 = local_58;\n          uVar13 = local_58[1];\n          pcVar12 = (code *)local_54[1];\n          do {\n            local_48 = (code *)((int)pcVar12 + -1);\n            uVar10 = (local_40 + (int)pcVar12)[1];\n            if (uVar13 == 0) {\n              local_44[(int)pcVar12 + 1] = uVar10;\n              if (pcVar12 == (code *)0x1) break;\n              local_48 = (code *)((int)pcVar12 + -2);\n              uVar10 = local_40[(int)pcVar12];\n              pcVar5 = local_48;\n            }\n            else {\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }\n            local_44[(int)pcVar5 + 2] = uVar10;\n            pcVar12 = local_48;\n          } while (local_48 != (code *)0x0);\n          local_44[1] = local_44[1] + local_40[1];\n        }\n        local_40 = (uint *)local_54;\n        (*(code *)PTR_free_004c5c18)(local_54);\n      }\n      *local_58 = param_1[3];\n      param_1[3] = (uint)local_58;\n      param_1[4] = param_1[4] & 0x7fffffff | 0x80000000;\n    }\n  }" if (parenthesized_expression "(uVar10 == 0)" ( (binary_expression "uVar10 == 0" identifier == number_literal) )) (compound_statement "{\n    piVar8 = (int *)param_1[3];\n    if ((int)(uVar13 << 1) < 0) {\n      if (*piVar8 != 0) {\n        uVar10 = 0;\n        do {\n          iVar7 = classify_object_over_fdes(param_1);\n          if (iVar7 == -1) goto LAB_003eda10;\n          piVar8 = piVar8 + 1;\n          uVar10 = uVar10 + iVar7;\n        } while (*piVar8 != 0);\nLAB_003edb08:\n        if ((uVar10 & 0x1fffff) == uVar10) {\n          param_1[4] = param_1[4] & 0xffe00000 | uVar10 & 0x1fffff;\n        }\n        else {\n          param_1[4] = param_1[4] & 0xffe00000;\n        }\n        if (uVar10 != 0) goto LAB_003edce8;\n      }\n    }\n    else {\n      uVar10 = classify_object_over_fdes(param_1,piVar8);\n      if (uVar10 != 0xffffffff) goto LAB_003edb08;\nLAB_003eda10:\n      param_1[4] = 0x1fe00000;\n      param_1[3] = (uint)(PTR_UINT_004c12dc + 0xaa4);\n    }\n  }" { (expression_statement "piVar8 = (int *)param_1[3];" (assignment_expression "piVar8 = (int *)param_1[3]" identifier = (cast_expression "(int *)param_1[3]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[3]" identifier [ number_literal ]))) ;) (if_statement "if ((int)(uVar13 << 1) < 0) {\n      if (*piVar8 != 0) {\n        uVar10 = 0;\n        do {\n          iVar7 = classify_object_over_fdes(param_1);\n          if (iVar7 == -1) goto LAB_003eda10;\n          piVar8 = piVar8 + 1;\n          uVar10 = uVar10 + iVar7;\n        } while (*piVar8 != 0);\nLAB_003edb08:\n        if ((uVar10 & 0x1fffff) == uVar10) {\n          param_1[4] = param_1[4] & 0xffe00000 | uVar10 & 0x1fffff;\n        }\n        else {\n          param_1[4] = param_1[4] & 0xffe00000;\n        }\n        if (uVar10 != 0) goto LAB_003edce8;\n      }\n    }\n    else {\n      uVar10 = classify_object_over_fdes(param_1,piVar8);\n      if (uVar10 != 0xffffffff) goto LAB_003edb08;\nLAB_003eda10:\n      param_1[4] = 0x1fe00000;\n      param_1[3] = (uint)(PTR_UINT_004c12dc + 0xaa4);\n    }" if (parenthesized_expression "((int)(uVar13 << 1) < 0)" ( (binary_expression "(int)(uVar13 << 1) < 0" (cast_expression "(int)(uVar13 << 1)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar13 << 1)" ( (binary_expression "uVar13 << 1" identifier << number_literal) ))) < number_literal) )) (compound_statement "{\n      if (*piVar8 != 0) {\n        uVar10 = 0;\n        do {\n          iVar7 = classify_object_over_fdes(param_1);\n          if (iVar7 == -1) goto LAB_003eda10;\n          piVar8 = piVar8 + 1;\n          uVar10 = uVar10 + iVar7;\n        } while (*piVar8 != 0);\nLAB_003edb08:\n        if ((uVar10 & 0x1fffff) == uVar10) {\n          param_1[4] = param_1[4] & 0xffe00000 | uVar10 & 0x1fffff;\n        }\n        else {\n          param_1[4] = param_1[4] & 0xffe00000;\n        }\n        if (uVar10 != 0) goto LAB_003edce8;\n      }\n    }" { (if_statement "if (*piVar8 != 0) {\n        uVar10 = 0;\n        do {\n          iVar7 = classify_object_over_fdes(param_1);\n          if (iVar7 == -1) goto LAB_003eda10;\n          piVar8 = piVar8 + 1;\n          uVar10 = uVar10 + iVar7;\n        } while (*piVar8 != 0);\nLAB_003edb08:\n        if ((uVar10 & 0x1fffff) == uVar10) {\n          param_1[4] = param_1[4] & 0xffe00000 | uVar10 & 0x1fffff;\n        }\n        else {\n          param_1[4] = param_1[4] & 0xffe00000;\n        }\n        if (uVar10 != 0) goto LAB_003edce8;\n      }" if (parenthesized_expression "(*piVar8 != 0)" ( (binary_expression "*piVar8 != 0" (pointer_expression "*piVar8" * identifier) != number_literal) )) (compound_statement "{\n        uVar10 = 0;\n        do {\n          iVar7 = classify_object_over_fdes(param_1);\n          if (iVar7 == -1) goto LAB_003eda10;\n          piVar8 = piVar8 + 1;\n          uVar10 = uVar10 + iVar7;\n        } while (*piVar8 != 0);\nLAB_003edb08:\n        if ((uVar10 & 0x1fffff) == uVar10) {\n          param_1[4] = param_1[4] & 0xffe00000 | uVar10 & 0x1fffff;\n        }\n        else {\n          param_1[4] = param_1[4] & 0xffe00000;\n        }\n        if (uVar10 != 0) goto LAB_003edce8;\n      }" { (expression_statement "uVar10 = 0;" (assignment_expression "uVar10 = 0" identifier = number_literal) ;) (do_statement "do {\n          iVar7 = classify_object_over_fdes(param_1);\n          if (iVar7 == -1) goto LAB_003eda10;\n          piVar8 = piVar8 + 1;\n          uVar10 = uVar10 + iVar7;\n        } while (*piVar8 != 0);" do (compound_statement "{\n          iVar7 = classify_object_over_fdes(param_1);\n          if (iVar7 == -1) goto LAB_003eda10;\n          piVar8 = piVar8 + 1;\n          uVar10 = uVar10 + iVar7;\n        }" { (expression_statement "iVar7 = classify_object_over_fdes(param_1);" (assignment_expression "iVar7 = classify_object_over_fdes(param_1)" identifier = (call_expression "classify_object_over_fdes(param_1)" identifier (argument_list "(param_1)" ( identifier )))) ;) (if_statement "if (iVar7 == -1) goto LAB_003eda10;" if (parenthesized_expression "(iVar7 == -1)" ( (binary_expression "iVar7 == -1" identifier == number_literal) )) (goto_statement "goto LAB_003eda10;" goto statement_identifier ;)) (expression_statement "piVar8 = piVar8 + 1;" (assignment_expression "piVar8 = piVar8 + 1" identifier = (binary_expression "piVar8 + 1" identifier + number_literal)) ;) (expression_statement "uVar10 = uVar10 + iVar7;" (assignment_expression "uVar10 = uVar10 + iVar7" identifier = (binary_expression "uVar10 + iVar7" identifier + identifier)) ;) }) while (parenthesized_expression "(*piVar8 != 0)" ( (binary_expression "*piVar8 != 0" (pointer_expression "*piVar8" * identifier) != number_literal) )) ;) (labeled_statement "LAB_003edb08:\n        if ((uVar10 & 0x1fffff) == uVar10) {\n          param_1[4] = param_1[4] & 0xffe00000 | uVar10 & 0x1fffff;\n        }\n        else {\n          param_1[4] = param_1[4] & 0xffe00000;\n        }" statement_identifier : (if_statement "if ((uVar10 & 0x1fffff) == uVar10) {\n          param_1[4] = param_1[4] & 0xffe00000 | uVar10 & 0x1fffff;\n        }\n        else {\n          param_1[4] = param_1[4] & 0xffe00000;\n        }" if (parenthesized_expression "((uVar10 & 0x1fffff) == uVar10)" ( (binary_expression "(uVar10 & 0x1fffff) == uVar10" (parenthesized_expression "(uVar10 & 0x1fffff)" ( (binary_expression "uVar10 & 0x1fffff" identifier & number_literal) )) == identifier) )) (compound_statement "{\n          param_1[4] = param_1[4] & 0xffe00000 | uVar10 & 0x1fffff;\n        }" { (expression_statement "param_1[4] = param_1[4] & 0xffe00000 | uVar10 & 0x1fffff;" (assignment_expression "param_1[4] = param_1[4] & 0xffe00000 | uVar10 & 0x1fffff" (subscript_expression "param_1[4]" identifier [ number_literal ]) = (binary_expression "param_1[4] & 0xffe00000 | uVar10 & 0x1fffff" (binary_expression "param_1[4] & 0xffe00000" (subscript_expression "param_1[4]" identifier [ number_literal ]) & number_literal) | (binary_expression "uVar10 & 0x1fffff" identifier & number_literal))) ;) }) (else_clause "else {\n          param_1[4] = param_1[4] & 0xffe00000;\n        }" else (compound_statement "{\n          param_1[4] = param_1[4] & 0xffe00000;\n        }" { (expression_statement "param_1[4] = param_1[4] & 0xffe00000;" (assignment_expression "param_1[4] = param_1[4] & 0xffe00000" (subscript_expression "param_1[4]" identifier [ number_literal ]) = (binary_expression "param_1[4] & 0xffe00000" (subscript_expression "param_1[4]" identifier [ number_literal ]) & number_literal)) ;) })))) (if_statement "if (uVar10 != 0) goto LAB_003edce8;" if (parenthesized_expression "(uVar10 != 0)" ( (binary_expression "uVar10 != 0" identifier != number_literal) )) (goto_statement "goto LAB_003edce8;" goto statement_identifier ;)) })) }) (else_clause "else {\n      uVar10 = classify_object_over_fdes(param_1,piVar8);\n      if (uVar10 != 0xffffffff) goto LAB_003edb08;\nLAB_003eda10:\n      param_1[4] = 0x1fe00000;\n      param_1[3] = (uint)(PTR_UINT_004c12dc + 0xaa4);\n    }" else (compound_statement "{\n      uVar10 = classify_object_over_fdes(param_1,piVar8);\n      if (uVar10 != 0xffffffff) goto LAB_003edb08;\nLAB_003eda10:\n      param_1[4] = 0x1fe00000;\n      param_1[3] = (uint)(PTR_UINT_004c12dc + 0xaa4);\n    }" { (expression_statement "uVar10 = classify_object_over_fdes(param_1,piVar8);" (assignment_expression "uVar10 = classify_object_over_fdes(param_1,piVar8)" identifier = (call_expression "classify_object_over_fdes(param_1,piVar8)" identifier (argument_list "(param_1,piVar8)" ( identifier , identifier )))) ;) (if_statement "if (uVar10 != 0xffffffff) goto LAB_003edb08;" if (parenthesized_expression "(uVar10 != 0xffffffff)" ( (binary_expression "uVar10 != 0xffffffff" identifier != number_literal) )) (goto_statement "goto LAB_003edb08;" goto statement_identifier ;)) (labeled_statement "LAB_003eda10:\n      param_1[4] = 0x1fe00000;" statement_identifier : (expression_statement "param_1[4] = 0x1fe00000;" (assignment_expression "param_1[4] = 0x1fe00000" (subscript_expression "param_1[4]" identifier [ number_literal ]) = number_literal) ;)) (expression_statement "param_1[3] = (uint)(PTR_UINT_004c12dc + 0xaa4);" (assignment_expression "param_1[3] = (uint)(PTR_UINT_004c12dc + 0xaa4)" (subscript_expression "param_1[3]" identifier [ number_literal ]) = (call_expression "(uint)(PTR_UINT_004c12dc + 0xaa4)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(PTR_UINT_004c12dc + 0xaa4)" ( (binary_expression "PTR_UINT_004c12dc + 0xaa4" identifier + number_literal) )))) ;) }))) }) (else_clause "else {\nLAB_003edce8:\n    iVar7 = (uVar10 + 2) * 4;\n    local_58 = (uint *)(*(code *)PTR_malloc_004c5b38)(iVar7);\n    puVar1 = PTR_malloc_004c5b38;\n    if (local_58 != (uint *)0x0) {\n      local_58[1] = 0;\n      local_54 = (int *)(*(code *)puVar1)(iVar7);\n      if (local_54 != (int *)0x0) {\n        local_54[1] = 0;\n      }\n      piVar8 = (int *)param_1[3];\n      if ((int)(param_1[4] << 1) < 0) {\n        if (*piVar8 == 0) goto LAB_003ee148;\n        do {\n          piVar8 = piVar8 + 1;\n          add_fdes(param_1,&local_58);\n        } while (*piVar8 != 0);\n      }\n      else {\n        add_fdes(param_1,&local_58,piVar8);\n      }\n      piVar8 = local_54;\n      local_3c = (code *)local_58;\n      local_30 = local_58;\n      if ((local_58 != (uint *)0x0) && (local_58[1] != uVar10)) {\nLAB_003ee148:\n        iVar7 = (*(code *)PTR_abort_004c5d24)();\n        return iVar7;\n      }\n      if ((int)(param_1[4] << 2) < 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3240);\n      }\n      else if ((param_1[4] & 0x1fe00000) == 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628);\n      }\n      else {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558);\n      }\n      if (local_54 == (int *)0x0) {\n        frame_heapsort(param_1,pcVar9,local_58);\n      }\n      else {\n        local_38 = (code *)local_58[1];\n        if (local_38 == (code *)0x0) {\n          iVar7 = 0;\n          uVar13 = 0;\n        }\n        else {\n          piVar17 = local_54 + 2;\n          local_34 = local_58 + (int)local_38 + 1;\n          puVar11 = (uint *)(PTR_DAT_004c256c + -0x15d0);\n          local_48 = (code *)(local_58 + 2);\n          *piVar17 = (int)puVar11;\n          local_44 = (uint *)local_48;\n          local_40 = (uint *)piVar17;\n          puVar18 = (uint *)local_48;\n          puVar16 = (uint *)local_48;\n          if (local_48 != (code *)local_34) {\n            do {\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            } while (puVar18 != local_34);\n          }\n          iVar7 = 0;\n          uVar13 = 0;\n          uVar15 = 0;\n          puVar18 = local_44;\n          do {\n            while (local_44 = puVar18, *piVar17 == 0) {\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }\n            iVar3 = uVar13 + 2;\n            uVar15 = uVar15 + 1;\n            uVar13 = uVar13 + 1;\n            *(uint *)((int)local_3c + iVar3 * 4) = *local_44;\n            piVar17 = piVar17 + 1;\n            puVar18 = local_44 + 1;\n          } while (local_38 != (code *)uVar15);\nLAB_003edef4:\n          local_44 = local_44 + 1;\n        }\n        local_30[1] = uVar13;\n        piVar8[1] = iVar7;\n        local_3c = (code *)local_58;\n        if (local_58[1] + local_54[1] != uVar10) goto LAB_003ee148;\n        frame_heapsort(param_1,pcVar9);\n        local_40 = (uint *)local_54;\n        if ((uint *)local_54[1] != (uint *)0x0) {\n          local_44 = local_58;\n          uVar13 = local_58[1];\n          pcVar12 = (code *)local_54[1];\n          do {\n            local_48 = (code *)((int)pcVar12 + -1);\n            uVar10 = (local_40 + (int)pcVar12)[1];\n            if (uVar13 == 0) {\n              local_44[(int)pcVar12 + 1] = uVar10;\n              if (pcVar12 == (code *)0x1) break;\n              local_48 = (code *)((int)pcVar12 + -2);\n              uVar10 = local_40[(int)pcVar12];\n              pcVar5 = local_48;\n            }\n            else {\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }\n            local_44[(int)pcVar5 + 2] = uVar10;\n            pcVar12 = local_48;\n          } while (local_48 != (code *)0x0);\n          local_44[1] = local_44[1] + local_40[1];\n        }\n        local_40 = (uint *)local_54;\n        (*(code *)PTR_free_004c5c18)(local_54);\n      }\n      *local_58 = param_1[3];\n      param_1[3] = (uint)local_58;\n      param_1[4] = param_1[4] & 0x7fffffff | 0x80000000;\n    }\n  }" else (compound_statement "{\nLAB_003edce8:\n    iVar7 = (uVar10 + 2) * 4;\n    local_58 = (uint *)(*(code *)PTR_malloc_004c5b38)(iVar7);\n    puVar1 = PTR_malloc_004c5b38;\n    if (local_58 != (uint *)0x0) {\n      local_58[1] = 0;\n      local_54 = (int *)(*(code *)puVar1)(iVar7);\n      if (local_54 != (int *)0x0) {\n        local_54[1] = 0;\n      }\n      piVar8 = (int *)param_1[3];\n      if ((int)(param_1[4] << 1) < 0) {\n        if (*piVar8 == 0) goto LAB_003ee148;\n        do {\n          piVar8 = piVar8 + 1;\n          add_fdes(param_1,&local_58);\n        } while (*piVar8 != 0);\n      }\n      else {\n        add_fdes(param_1,&local_58,piVar8);\n      }\n      piVar8 = local_54;\n      local_3c = (code *)local_58;\n      local_30 = local_58;\n      if ((local_58 != (uint *)0x0) && (local_58[1] != uVar10)) {\nLAB_003ee148:\n        iVar7 = (*(code *)PTR_abort_004c5d24)();\n        return iVar7;\n      }\n      if ((int)(param_1[4] << 2) < 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3240);\n      }\n      else if ((param_1[4] & 0x1fe00000) == 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628);\n      }\n      else {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558);\n      }\n      if (local_54 == (int *)0x0) {\n        frame_heapsort(param_1,pcVar9,local_58);\n      }\n      else {\n        local_38 = (code *)local_58[1];\n        if (local_38 == (code *)0x0) {\n          iVar7 = 0;\n          uVar13 = 0;\n        }\n        else {\n          piVar17 = local_54 + 2;\n          local_34 = local_58 + (int)local_38 + 1;\n          puVar11 = (uint *)(PTR_DAT_004c256c + -0x15d0);\n          local_48 = (code *)(local_58 + 2);\n          *piVar17 = (int)puVar11;\n          local_44 = (uint *)local_48;\n          local_40 = (uint *)piVar17;\n          puVar18 = (uint *)local_48;\n          puVar16 = (uint *)local_48;\n          if (local_48 != (code *)local_34) {\n            do {\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            } while (puVar18 != local_34);\n          }\n          iVar7 = 0;\n          uVar13 = 0;\n          uVar15 = 0;\n          puVar18 = local_44;\n          do {\n            while (local_44 = puVar18, *piVar17 == 0) {\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }\n            iVar3 = uVar13 + 2;\n            uVar15 = uVar15 + 1;\n            uVar13 = uVar13 + 1;\n            *(uint *)((int)local_3c + iVar3 * 4) = *local_44;\n            piVar17 = piVar17 + 1;\n            puVar18 = local_44 + 1;\n          } while (local_38 != (code *)uVar15);\nLAB_003edef4:\n          local_44 = local_44 + 1;\n        }\n        local_30[1] = uVar13;\n        piVar8[1] = iVar7;\n        local_3c = (code *)local_58;\n        if (local_58[1] + local_54[1] != uVar10) goto LAB_003ee148;\n        frame_heapsort(param_1,pcVar9);\n        local_40 = (uint *)local_54;\n        if ((uint *)local_54[1] != (uint *)0x0) {\n          local_44 = local_58;\n          uVar13 = local_58[1];\n          pcVar12 = (code *)local_54[1];\n          do {\n            local_48 = (code *)((int)pcVar12 + -1);\n            uVar10 = (local_40 + (int)pcVar12)[1];\n            if (uVar13 == 0) {\n              local_44[(int)pcVar12 + 1] = uVar10;\n              if (pcVar12 == (code *)0x1) break;\n              local_48 = (code *)((int)pcVar12 + -2);\n              uVar10 = local_40[(int)pcVar12];\n              pcVar5 = local_48;\n            }\n            else {\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }\n            local_44[(int)pcVar5 + 2] = uVar10;\n            pcVar12 = local_48;\n          } while (local_48 != (code *)0x0);\n          local_44[1] = local_44[1] + local_40[1];\n        }\n        local_40 = (uint *)local_54;\n        (*(code *)PTR_free_004c5c18)(local_54);\n      }\n      *local_58 = param_1[3];\n      param_1[3] = (uint)local_58;\n      param_1[4] = param_1[4] & 0x7fffffff | 0x80000000;\n    }\n  }" { (labeled_statement "LAB_003edce8:\n    iVar7 = (uVar10 + 2) * 4;" statement_identifier : (expression_statement "iVar7 = (uVar10 + 2) * 4;" (assignment_expression "iVar7 = (uVar10 + 2) * 4" identifier = (binary_expression "(uVar10 + 2) * 4" (parenthesized_expression "(uVar10 + 2)" ( (binary_expression "uVar10 + 2" identifier + number_literal) )) * number_literal)) ;)) (expression_statement "local_58 = (uint *)(*(code *)PTR_malloc_004c5b38)(iVar7);" (assignment_expression "local_58 = (uint *)(*(code *)PTR_malloc_004c5b38)(iVar7)" identifier = (cast_expression "(uint *)(*(code *)PTR_malloc_004c5b38)(iVar7)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR_malloc_004c5b38)(iVar7)" (parenthesized_expression "(*(code *)PTR_malloc_004c5b38)" ( (pointer_expression "*(code *)PTR_malloc_004c5b38" * (cast_expression "(code *)PTR_malloc_004c5b38" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(iVar7)" ( identifier ))))) ;) (expression_statement "puVar1 = PTR_malloc_004c5b38;" (assignment_expression "puVar1 = PTR_malloc_004c5b38" identifier = identifier) ;) (if_statement "if (local_58 != (uint *)0x0) {\n      local_58[1] = 0;\n      local_54 = (int *)(*(code *)puVar1)(iVar7);\n      if (local_54 != (int *)0x0) {\n        local_54[1] = 0;\n      }\n      piVar8 = (int *)param_1[3];\n      if ((int)(param_1[4] << 1) < 0) {\n        if (*piVar8 == 0) goto LAB_003ee148;\n        do {\n          piVar8 = piVar8 + 1;\n          add_fdes(param_1,&local_58);\n        } while (*piVar8 != 0);\n      }\n      else {\n        add_fdes(param_1,&local_58,piVar8);\n      }\n      piVar8 = local_54;\n      local_3c = (code *)local_58;\n      local_30 = local_58;\n      if ((local_58 != (uint *)0x0) && (local_58[1] != uVar10)) {\nLAB_003ee148:\n        iVar7 = (*(code *)PTR_abort_004c5d24)();\n        return iVar7;\n      }\n      if ((int)(param_1[4] << 2) < 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3240);\n      }\n      else if ((param_1[4] & 0x1fe00000) == 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628);\n      }\n      else {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558);\n      }\n      if (local_54 == (int *)0x0) {\n        frame_heapsort(param_1,pcVar9,local_58);\n      }\n      else {\n        local_38 = (code *)local_58[1];\n        if (local_38 == (code *)0x0) {\n          iVar7 = 0;\n          uVar13 = 0;\n        }\n        else {\n          piVar17 = local_54 + 2;\n          local_34 = local_58 + (int)local_38 + 1;\n          puVar11 = (uint *)(PTR_DAT_004c256c + -0x15d0);\n          local_48 = (code *)(local_58 + 2);\n          *piVar17 = (int)puVar11;\n          local_44 = (uint *)local_48;\n          local_40 = (uint *)piVar17;\n          puVar18 = (uint *)local_48;\n          puVar16 = (uint *)local_48;\n          if (local_48 != (code *)local_34) {\n            do {\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            } while (puVar18 != local_34);\n          }\n          iVar7 = 0;\n          uVar13 = 0;\n          uVar15 = 0;\n          puVar18 = local_44;\n          do {\n            while (local_44 = puVar18, *piVar17 == 0) {\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }\n            iVar3 = uVar13 + 2;\n            uVar15 = uVar15 + 1;\n            uVar13 = uVar13 + 1;\n            *(uint *)((int)local_3c + iVar3 * 4) = *local_44;\n            piVar17 = piVar17 + 1;\n            puVar18 = local_44 + 1;\n          } while (local_38 != (code *)uVar15);\nLAB_003edef4:\n          local_44 = local_44 + 1;\n        }\n        local_30[1] = uVar13;\n        piVar8[1] = iVar7;\n        local_3c = (code *)local_58;\n        if (local_58[1] + local_54[1] != uVar10) goto LAB_003ee148;\n        frame_heapsort(param_1,pcVar9);\n        local_40 = (uint *)local_54;\n        if ((uint *)local_54[1] != (uint *)0x0) {\n          local_44 = local_58;\n          uVar13 = local_58[1];\n          pcVar12 = (code *)local_54[1];\n          do {\n            local_48 = (code *)((int)pcVar12 + -1);\n            uVar10 = (local_40 + (int)pcVar12)[1];\n            if (uVar13 == 0) {\n              local_44[(int)pcVar12 + 1] = uVar10;\n              if (pcVar12 == (code *)0x1) break;\n              local_48 = (code *)((int)pcVar12 + -2);\n              uVar10 = local_40[(int)pcVar12];\n              pcVar5 = local_48;\n            }\n            else {\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }\n            local_44[(int)pcVar5 + 2] = uVar10;\n            pcVar12 = local_48;\n          } while (local_48 != (code *)0x0);\n          local_44[1] = local_44[1] + local_40[1];\n        }\n        local_40 = (uint *)local_54;\n        (*(code *)PTR_free_004c5c18)(local_54);\n      }\n      *local_58 = param_1[3];\n      param_1[3] = (uint)local_58;\n      param_1[4] = param_1[4] & 0x7fffffff | 0x80000000;\n    }" if (parenthesized_expression "(local_58 != (uint *)0x0)" ( (binary_expression "local_58 != (uint *)0x0" identifier != (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      local_58[1] = 0;\n      local_54 = (int *)(*(code *)puVar1)(iVar7);\n      if (local_54 != (int *)0x0) {\n        local_54[1] = 0;\n      }\n      piVar8 = (int *)param_1[3];\n      if ((int)(param_1[4] << 1) < 0) {\n        if (*piVar8 == 0) goto LAB_003ee148;\n        do {\n          piVar8 = piVar8 + 1;\n          add_fdes(param_1,&local_58);\n        } while (*piVar8 != 0);\n      }\n      else {\n        add_fdes(param_1,&local_58,piVar8);\n      }\n      piVar8 = local_54;\n      local_3c = (code *)local_58;\n      local_30 = local_58;\n      if ((local_58 != (uint *)0x0) && (local_58[1] != uVar10)) {\nLAB_003ee148:\n        iVar7 = (*(code *)PTR_abort_004c5d24)();\n        return iVar7;\n      }\n      if ((int)(param_1[4] << 2) < 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3240);\n      }\n      else if ((param_1[4] & 0x1fe00000) == 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628);\n      }\n      else {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558);\n      }\n      if (local_54 == (int *)0x0) {\n        frame_heapsort(param_1,pcVar9,local_58);\n      }\n      else {\n        local_38 = (code *)local_58[1];\n        if (local_38 == (code *)0x0) {\n          iVar7 = 0;\n          uVar13 = 0;\n        }\n        else {\n          piVar17 = local_54 + 2;\n          local_34 = local_58 + (int)local_38 + 1;\n          puVar11 = (uint *)(PTR_DAT_004c256c + -0x15d0);\n          local_48 = (code *)(local_58 + 2);\n          *piVar17 = (int)puVar11;\n          local_44 = (uint *)local_48;\n          local_40 = (uint *)piVar17;\n          puVar18 = (uint *)local_48;\n          puVar16 = (uint *)local_48;\n          if (local_48 != (code *)local_34) {\n            do {\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            } while (puVar18 != local_34);\n          }\n          iVar7 = 0;\n          uVar13 = 0;\n          uVar15 = 0;\n          puVar18 = local_44;\n          do {\n            while (local_44 = puVar18, *piVar17 == 0) {\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }\n            iVar3 = uVar13 + 2;\n            uVar15 = uVar15 + 1;\n            uVar13 = uVar13 + 1;\n            *(uint *)((int)local_3c + iVar3 * 4) = *local_44;\n            piVar17 = piVar17 + 1;\n            puVar18 = local_44 + 1;\n          } while (local_38 != (code *)uVar15);\nLAB_003edef4:\n          local_44 = local_44 + 1;\n        }\n        local_30[1] = uVar13;\n        piVar8[1] = iVar7;\n        local_3c = (code *)local_58;\n        if (local_58[1] + local_54[1] != uVar10) goto LAB_003ee148;\n        frame_heapsort(param_1,pcVar9);\n        local_40 = (uint *)local_54;\n        if ((uint *)local_54[1] != (uint *)0x0) {\n          local_44 = local_58;\n          uVar13 = local_58[1];\n          pcVar12 = (code *)local_54[1];\n          do {\n            local_48 = (code *)((int)pcVar12 + -1);\n            uVar10 = (local_40 + (int)pcVar12)[1];\n            if (uVar13 == 0) {\n              local_44[(int)pcVar12 + 1] = uVar10;\n              if (pcVar12 == (code *)0x1) break;\n              local_48 = (code *)((int)pcVar12 + -2);\n              uVar10 = local_40[(int)pcVar12];\n              pcVar5 = local_48;\n            }\n            else {\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }\n            local_44[(int)pcVar5 + 2] = uVar10;\n            pcVar12 = local_48;\n          } while (local_48 != (code *)0x0);\n          local_44[1] = local_44[1] + local_40[1];\n        }\n        local_40 = (uint *)local_54;\n        (*(code *)PTR_free_004c5c18)(local_54);\n      }\n      *local_58 = param_1[3];\n      param_1[3] = (uint)local_58;\n      param_1[4] = param_1[4] & 0x7fffffff | 0x80000000;\n    }" { (expression_statement "local_58[1] = 0;" (assignment_expression "local_58[1] = 0" (subscript_expression "local_58[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "local_54 = (int *)(*(code *)puVar1)(iVar7);" (assignment_expression "local_54 = (int *)(*(code *)puVar1)(iVar7)" identifier = (cast_expression "(int *)(*(code *)puVar1)(iVar7)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)puVar1)(iVar7)" (parenthesized_expression "(*(code *)puVar1)" ( (pointer_expression "*(code *)puVar1" * (cast_expression "(code *)puVar1" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(iVar7)" ( identifier ))))) ;) (if_statement "if (local_54 != (int *)0x0) {\n        local_54[1] = 0;\n      }" if (parenthesized_expression "(local_54 != (int *)0x0)" ( (binary_expression "local_54 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        local_54[1] = 0;\n      }" { (expression_statement "local_54[1] = 0;" (assignment_expression "local_54[1] = 0" (subscript_expression "local_54[1]" identifier [ number_literal ]) = number_literal) ;) })) (expression_statement "piVar8 = (int *)param_1[3];" (assignment_expression "piVar8 = (int *)param_1[3]" identifier = (cast_expression "(int *)param_1[3]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[3]" identifier [ number_literal ]))) ;) (if_statement "if ((int)(param_1[4] << 1) < 0) {\n        if (*piVar8 == 0) goto LAB_003ee148;\n        do {\n          piVar8 = piVar8 + 1;\n          add_fdes(param_1,&local_58);\n        } while (*piVar8 != 0);\n      }\n      else {\n        add_fdes(param_1,&local_58,piVar8);\n      }" if (parenthesized_expression "((int)(param_1[4] << 1) < 0)" ( (binary_expression "(int)(param_1[4] << 1) < 0" (cast_expression "(int)(param_1[4] << 1)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(param_1[4] << 1)" ( (binary_expression "param_1[4] << 1" (subscript_expression "param_1[4]" identifier [ number_literal ]) << number_literal) ))) < number_literal) )) (compound_statement "{\n        if (*piVar8 == 0) goto LAB_003ee148;\n        do {\n          piVar8 = piVar8 + 1;\n          add_fdes(param_1,&local_58);\n        } while (*piVar8 != 0);\n      }" { (if_statement "if (*piVar8 == 0) goto LAB_003ee148;" if (parenthesized_expression "(*piVar8 == 0)" ( (binary_expression "*piVar8 == 0" (pointer_expression "*piVar8" * identifier) == number_literal) )) (goto_statement "goto LAB_003ee148;" goto statement_identifier ;)) (do_statement "do {\n          piVar8 = piVar8 + 1;\n          add_fdes(param_1,&local_58);\n        } while (*piVar8 != 0);" do (compound_statement "{\n          piVar8 = piVar8 + 1;\n          add_fdes(param_1,&local_58);\n        }" { (expression_statement "piVar8 = piVar8 + 1;" (assignment_expression "piVar8 = piVar8 + 1" identifier = (binary_expression "piVar8 + 1" identifier + number_literal)) ;) (expression_statement "add_fdes(param_1,&local_58);" (call_expression "add_fdes(param_1,&local_58)" identifier (argument_list "(param_1,&local_58)" ( identifier , (pointer_expression "&local_58" & identifier) ))) ;) }) while (parenthesized_expression "(*piVar8 != 0)" ( (binary_expression "*piVar8 != 0" (pointer_expression "*piVar8" * identifier) != number_literal) )) ;) }) (else_clause "else {\n        add_fdes(param_1,&local_58,piVar8);\n      }" else (compound_statement "{\n        add_fdes(param_1,&local_58,piVar8);\n      }" { (expression_statement "add_fdes(param_1,&local_58,piVar8);" (call_expression "add_fdes(param_1,&local_58,piVar8)" identifier (argument_list "(param_1,&local_58,piVar8)" ( identifier , (pointer_expression "&local_58" & identifier) , identifier ))) ;) }))) (expression_statement "piVar8 = local_54;" (assignment_expression "piVar8 = local_54" identifier = identifier) ;) (expression_statement "local_3c = (code *)local_58;" (assignment_expression "local_3c = (code *)local_58" identifier = (cast_expression "(code *)local_58" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "local_30 = local_58;" (assignment_expression "local_30 = local_58" identifier = identifier) ;) (if_statement "if ((local_58 != (uint *)0x0) && (local_58[1] != uVar10)) {\nLAB_003ee148:\n        iVar7 = (*(code *)PTR_abort_004c5d24)();\n        return iVar7;\n      }" if (parenthesized_expression "((local_58 != (uint *)0x0) && (local_58[1] != uVar10))" ( (binary_expression "(local_58 != (uint *)0x0) && (local_58[1] != uVar10)" (parenthesized_expression "(local_58 != (uint *)0x0)" ( (binary_expression "local_58 != (uint *)0x0" identifier != (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(local_58[1] != uVar10)" ( (binary_expression "local_58[1] != uVar10" (subscript_expression "local_58[1]" identifier [ number_literal ]) != identifier) ))) )) (compound_statement "{\nLAB_003ee148:\n        iVar7 = (*(code *)PTR_abort_004c5d24)();\n        return iVar7;\n      }" { (labeled_statement "LAB_003ee148:\n        iVar7 = (*(code *)PTR_abort_004c5d24)();" statement_identifier : (expression_statement "iVar7 = (*(code *)PTR_abort_004c5d24)();" (assignment_expression "iVar7 = (*(code *)PTR_abort_004c5d24)()" identifier = (call_expression "(*(code *)PTR_abort_004c5d24)()" (parenthesized_expression "(*(code *)PTR_abort_004c5d24)" ( (pointer_expression "*(code *)PTR_abort_004c5d24" * (cast_expression "(code *)PTR_abort_004c5d24" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "()" ( )))) ;)) (return_statement "return iVar7;" return identifier ;) })) (if_statement "if ((int)(param_1[4] << 2) < 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3240);\n      }\n      else if ((param_1[4] & 0x1fe00000) == 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628);\n      }\n      else {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558);\n      }" if (parenthesized_expression "((int)(param_1[4] << 2) < 0)" ( (binary_expression "(int)(param_1[4] << 2) < 0" (cast_expression "(int)(param_1[4] << 2)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(param_1[4] << 2)" ( (binary_expression "param_1[4] << 2" (subscript_expression "param_1[4]" identifier [ number_literal ]) << number_literal) ))) < number_literal) )) (compound_statement "{\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3240);\n      }" { (expression_statement "pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3240);" (assignment_expression "pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3240)" identifier = (cast_expression "(code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3240)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3240)" ( (binary_expression "PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3240" identifier + number_literal) )))) ;) }) (else_clause "else if ((param_1[4] & 0x1fe00000) == 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628);\n      }\n      else {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558);\n      }" else (if_statement "if ((param_1[4] & 0x1fe00000) == 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628);\n      }\n      else {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558);\n      }" if (parenthesized_expression "((param_1[4] & 0x1fe00000) == 0)" ( (binary_expression "(param_1[4] & 0x1fe00000) == 0" (parenthesized_expression "(param_1[4] & 0x1fe00000)" ( (binary_expression "param_1[4] & 0x1fe00000" (subscript_expression "param_1[4]" identifier [ number_literal ]) & number_literal) )) == number_literal) )) (compound_statement "{\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628);\n      }" { (expression_statement "pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628);" (assignment_expression "pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628)" identifier = (cast_expression "(code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628)" ( (binary_expression "PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628" identifier + number_literal) )))) ;) }) (else_clause "else {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558);\n      }" else (compound_statement "{\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558);\n      }" { (expression_statement "pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558);" (assignment_expression "pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558)" identifier = (cast_expression "(code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558)" ( (binary_expression "PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558" identifier + number_literal) )))) ;) }))))) (if_statement "if (local_54 == (int *)0x0) {\n        frame_heapsort(param_1,pcVar9,local_58);\n      }\n      else {\n        local_38 = (code *)local_58[1];\n        if (local_38 == (code *)0x0) {\n          iVar7 = 0;\n          uVar13 = 0;\n        }\n        else {\n          piVar17 = local_54 + 2;\n          local_34 = local_58 + (int)local_38 + 1;\n          puVar11 = (uint *)(PTR_DAT_004c256c + -0x15d0);\n          local_48 = (code *)(local_58 + 2);\n          *piVar17 = (int)puVar11;\n          local_44 = (uint *)local_48;\n          local_40 = (uint *)piVar17;\n          puVar18 = (uint *)local_48;\n          puVar16 = (uint *)local_48;\n          if (local_48 != (code *)local_34) {\n            do {\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            } while (puVar18 != local_34);\n          }\n          iVar7 = 0;\n          uVar13 = 0;\n          uVar15 = 0;\n          puVar18 = local_44;\n          do {\n            while (local_44 = puVar18, *piVar17 == 0) {\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }\n            iVar3 = uVar13 + 2;\n            uVar15 = uVar15 + 1;\n            uVar13 = uVar13 + 1;\n            *(uint *)((int)local_3c + iVar3 * 4) = *local_44;\n            piVar17 = piVar17 + 1;\n            puVar18 = local_44 + 1;\n          } while (local_38 != (code *)uVar15);\nLAB_003edef4:\n          local_44 = local_44 + 1;\n        }\n        local_30[1] = uVar13;\n        piVar8[1] = iVar7;\n        local_3c = (code *)local_58;\n        if (local_58[1] + local_54[1] != uVar10) goto LAB_003ee148;\n        frame_heapsort(param_1,pcVar9);\n        local_40 = (uint *)local_54;\n        if ((uint *)local_54[1] != (uint *)0x0) {\n          local_44 = local_58;\n          uVar13 = local_58[1];\n          pcVar12 = (code *)local_54[1];\n          do {\n            local_48 = (code *)((int)pcVar12 + -1);\n            uVar10 = (local_40 + (int)pcVar12)[1];\n            if (uVar13 == 0) {\n              local_44[(int)pcVar12 + 1] = uVar10;\n              if (pcVar12 == (code *)0x1) break;\n              local_48 = (code *)((int)pcVar12 + -2);\n              uVar10 = local_40[(int)pcVar12];\n              pcVar5 = local_48;\n            }\n            else {\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }\n            local_44[(int)pcVar5 + 2] = uVar10;\n            pcVar12 = local_48;\n          } while (local_48 != (code *)0x0);\n          local_44[1] = local_44[1] + local_40[1];\n        }\n        local_40 = (uint *)local_54;\n        (*(code *)PTR_free_004c5c18)(local_54);\n      }" if (parenthesized_expression "(local_54 == (int *)0x0)" ( (binary_expression "local_54 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        frame_heapsort(param_1,pcVar9,local_58);\n      }" { (expression_statement "frame_heapsort(param_1,pcVar9,local_58);" (call_expression "frame_heapsort(param_1,pcVar9,local_58)" identifier (argument_list "(param_1,pcVar9,local_58)" ( identifier , identifier , identifier ))) ;) }) (else_clause "else {\n        local_38 = (code *)local_58[1];\n        if (local_38 == (code *)0x0) {\n          iVar7 = 0;\n          uVar13 = 0;\n        }\n        else {\n          piVar17 = local_54 + 2;\n          local_34 = local_58 + (int)local_38 + 1;\n          puVar11 = (uint *)(PTR_DAT_004c256c + -0x15d0);\n          local_48 = (code *)(local_58 + 2);\n          *piVar17 = (int)puVar11;\n          local_44 = (uint *)local_48;\n          local_40 = (uint *)piVar17;\n          puVar18 = (uint *)local_48;\n          puVar16 = (uint *)local_48;\n          if (local_48 != (code *)local_34) {\n            do {\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            } while (puVar18 != local_34);\n          }\n          iVar7 = 0;\n          uVar13 = 0;\n          uVar15 = 0;\n          puVar18 = local_44;\n          do {\n            while (local_44 = puVar18, *piVar17 == 0) {\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }\n            iVar3 = uVar13 + 2;\n            uVar15 = uVar15 + 1;\n            uVar13 = uVar13 + 1;\n            *(uint *)((int)local_3c + iVar3 * 4) = *local_44;\n            piVar17 = piVar17 + 1;\n            puVar18 = local_44 + 1;\n          } while (local_38 != (code *)uVar15);\nLAB_003edef4:\n          local_44 = local_44 + 1;\n        }\n        local_30[1] = uVar13;\n        piVar8[1] = iVar7;\n        local_3c = (code *)local_58;\n        if (local_58[1] + local_54[1] != uVar10) goto LAB_003ee148;\n        frame_heapsort(param_1,pcVar9);\n        local_40 = (uint *)local_54;\n        if ((uint *)local_54[1] != (uint *)0x0) {\n          local_44 = local_58;\n          uVar13 = local_58[1];\n          pcVar12 = (code *)local_54[1];\n          do {\n            local_48 = (code *)((int)pcVar12 + -1);\n            uVar10 = (local_40 + (int)pcVar12)[1];\n            if (uVar13 == 0) {\n              local_44[(int)pcVar12 + 1] = uVar10;\n              if (pcVar12 == (code *)0x1) break;\n              local_48 = (code *)((int)pcVar12 + -2);\n              uVar10 = local_40[(int)pcVar12];\n              pcVar5 = local_48;\n            }\n            else {\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }\n            local_44[(int)pcVar5 + 2] = uVar10;\n            pcVar12 = local_48;\n          } while (local_48 != (code *)0x0);\n          local_44[1] = local_44[1] + local_40[1];\n        }\n        local_40 = (uint *)local_54;\n        (*(code *)PTR_free_004c5c18)(local_54);\n      }" else (compound_statement "{\n        local_38 = (code *)local_58[1];\n        if (local_38 == (code *)0x0) {\n          iVar7 = 0;\n          uVar13 = 0;\n        }\n        else {\n          piVar17 = local_54 + 2;\n          local_34 = local_58 + (int)local_38 + 1;\n          puVar11 = (uint *)(PTR_DAT_004c256c + -0x15d0);\n          local_48 = (code *)(local_58 + 2);\n          *piVar17 = (int)puVar11;\n          local_44 = (uint *)local_48;\n          local_40 = (uint *)piVar17;\n          puVar18 = (uint *)local_48;\n          puVar16 = (uint *)local_48;\n          if (local_48 != (code *)local_34) {\n            do {\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            } while (puVar18 != local_34);\n          }\n          iVar7 = 0;\n          uVar13 = 0;\n          uVar15 = 0;\n          puVar18 = local_44;\n          do {\n            while (local_44 = puVar18, *piVar17 == 0) {\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }\n            iVar3 = uVar13 + 2;\n            uVar15 = uVar15 + 1;\n            uVar13 = uVar13 + 1;\n            *(uint *)((int)local_3c + iVar3 * 4) = *local_44;\n            piVar17 = piVar17 + 1;\n            puVar18 = local_44 + 1;\n          } while (local_38 != (code *)uVar15);\nLAB_003edef4:\n          local_44 = local_44 + 1;\n        }\n        local_30[1] = uVar13;\n        piVar8[1] = iVar7;\n        local_3c = (code *)local_58;\n        if (local_58[1] + local_54[1] != uVar10) goto LAB_003ee148;\n        frame_heapsort(param_1,pcVar9);\n        local_40 = (uint *)local_54;\n        if ((uint *)local_54[1] != (uint *)0x0) {\n          local_44 = local_58;\n          uVar13 = local_58[1];\n          pcVar12 = (code *)local_54[1];\n          do {\n            local_48 = (code *)((int)pcVar12 + -1);\n            uVar10 = (local_40 + (int)pcVar12)[1];\n            if (uVar13 == 0) {\n              local_44[(int)pcVar12 + 1] = uVar10;\n              if (pcVar12 == (code *)0x1) break;\n              local_48 = (code *)((int)pcVar12 + -2);\n              uVar10 = local_40[(int)pcVar12];\n              pcVar5 = local_48;\n            }\n            else {\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }\n            local_44[(int)pcVar5 + 2] = uVar10;\n            pcVar12 = local_48;\n          } while (local_48 != (code *)0x0);\n          local_44[1] = local_44[1] + local_40[1];\n        }\n        local_40 = (uint *)local_54;\n        (*(code *)PTR_free_004c5c18)(local_54);\n      }" { (expression_statement "local_38 = (code *)local_58[1];" (assignment_expression "local_38 = (code *)local_58[1]" identifier = (cast_expression "(code *)local_58[1]" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "local_58[1]" identifier [ number_literal ]))) ;) (if_statement "if (local_38 == (code *)0x0) {\n          iVar7 = 0;\n          uVar13 = 0;\n        }\n        else {\n          piVar17 = local_54 + 2;\n          local_34 = local_58 + (int)local_38 + 1;\n          puVar11 = (uint *)(PTR_DAT_004c256c + -0x15d0);\n          local_48 = (code *)(local_58 + 2);\n          *piVar17 = (int)puVar11;\n          local_44 = (uint *)local_48;\n          local_40 = (uint *)piVar17;\n          puVar18 = (uint *)local_48;\n          puVar16 = (uint *)local_48;\n          if (local_48 != (code *)local_34) {\n            do {\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            } while (puVar18 != local_34);\n          }\n          iVar7 = 0;\n          uVar13 = 0;\n          uVar15 = 0;\n          puVar18 = local_44;\n          do {\n            while (local_44 = puVar18, *piVar17 == 0) {\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }\n            iVar3 = uVar13 + 2;\n            uVar15 = uVar15 + 1;\n            uVar13 = uVar13 + 1;\n            *(uint *)((int)local_3c + iVar3 * 4) = *local_44;\n            piVar17 = piVar17 + 1;\n            puVar18 = local_44 + 1;\n          } while (local_38 != (code *)uVar15);\nLAB_003edef4:\n          local_44 = local_44 + 1;\n        }" if (parenthesized_expression "(local_38 == (code *)0x0)" ( (binary_expression "local_38 == (code *)0x0" identifier == (cast_expression "(code *)0x0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          iVar7 = 0;\n          uVar13 = 0;\n        }" { (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" identifier = number_literal) ;) (expression_statement "uVar13 = 0;" (assignment_expression "uVar13 = 0" identifier = number_literal) ;) }) (else_clause "else {\n          piVar17 = local_54 + 2;\n          local_34 = local_58 + (int)local_38 + 1;\n          puVar11 = (uint *)(PTR_DAT_004c256c + -0x15d0);\n          local_48 = (code *)(local_58 + 2);\n          *piVar17 = (int)puVar11;\n          local_44 = (uint *)local_48;\n          local_40 = (uint *)piVar17;\n          puVar18 = (uint *)local_48;\n          puVar16 = (uint *)local_48;\n          if (local_48 != (code *)local_34) {\n            do {\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            } while (puVar18 != local_34);\n          }\n          iVar7 = 0;\n          uVar13 = 0;\n          uVar15 = 0;\n          puVar18 = local_44;\n          do {\n            while (local_44 = puVar18, *piVar17 == 0) {\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }\n            iVar3 = uVar13 + 2;\n            uVar15 = uVar15 + 1;\n            uVar13 = uVar13 + 1;\n            *(uint *)((int)local_3c + iVar3 * 4) = *local_44;\n            piVar17 = piVar17 + 1;\n            puVar18 = local_44 + 1;\n          } while (local_38 != (code *)uVar15);\nLAB_003edef4:\n          local_44 = local_44 + 1;\n        }" else (compound_statement "{\n          piVar17 = local_54 + 2;\n          local_34 = local_58 + (int)local_38 + 1;\n          puVar11 = (uint *)(PTR_DAT_004c256c + -0x15d0);\n          local_48 = (code *)(local_58 + 2);\n          *piVar17 = (int)puVar11;\n          local_44 = (uint *)local_48;\n          local_40 = (uint *)piVar17;\n          puVar18 = (uint *)local_48;\n          puVar16 = (uint *)local_48;\n          if (local_48 != (code *)local_34) {\n            do {\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            } while (puVar18 != local_34);\n          }\n          iVar7 = 0;\n          uVar13 = 0;\n          uVar15 = 0;\n          puVar18 = local_44;\n          do {\n            while (local_44 = puVar18, *piVar17 == 0) {\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }\n            iVar3 = uVar13 + 2;\n            uVar15 = uVar15 + 1;\n            uVar13 = uVar13 + 1;\n            *(uint *)((int)local_3c + iVar3 * 4) = *local_44;\n            piVar17 = piVar17 + 1;\n            puVar18 = local_44 + 1;\n          } while (local_38 != (code *)uVar15);\nLAB_003edef4:\n          local_44 = local_44 + 1;\n        }" { (expression_statement "piVar17 = local_54 + 2;" (assignment_expression "piVar17 = local_54 + 2" identifier = (binary_expression "local_54 + 2" identifier + number_literal)) ;) (expression_statement "local_34 = local_58 + (int)local_38 + 1;" (assignment_expression "local_34 = local_58 + (int)local_38 + 1" identifier = (binary_expression "local_58 + (int)local_38 + 1" (binary_expression "local_58 + (int)local_38" identifier + (cast_expression "(int)local_38" ( (type_descriptor "int" primitive_type) ) identifier)) + number_literal)) ;) (expression_statement "puVar11 = (uint *)(PTR_DAT_004c256c + -0x15d0);" (assignment_expression "puVar11 = (uint *)(PTR_DAT_004c256c + -0x15d0)" identifier = (cast_expression "(uint *)(PTR_DAT_004c256c + -0x15d0)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_004c256c + -0x15d0)" ( (binary_expression "PTR_DAT_004c256c + -0x15d0" identifier + number_literal) )))) ;) (expression_statement "local_48 = (code *)(local_58 + 2);" (assignment_expression "local_48 = (code *)(local_58 + 2)" identifier = (cast_expression "(code *)(local_58 + 2)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_58 + 2)" ( (binary_expression "local_58 + 2" identifier + number_literal) )))) ;) (expression_statement "*piVar17 = (int)puVar11;" (assignment_expression "*piVar17 = (int)puVar11" (pointer_expression "*piVar17" * identifier) = (cast_expression "(int)puVar11" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "local_44 = (uint *)local_48;" (assignment_expression "local_44 = (uint *)local_48" identifier = (cast_expression "(uint *)local_48" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "local_40 = (uint *)piVar17;" (assignment_expression "local_40 = (uint *)piVar17" identifier = (cast_expression "(uint *)piVar17" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "puVar18 = (uint *)local_48;" (assignment_expression "puVar18 = (uint *)local_48" identifier = (cast_expression "(uint *)local_48" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "puVar16 = (uint *)local_48;" (assignment_expression "puVar16 = (uint *)local_48" identifier = (cast_expression "(uint *)local_48" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (if_statement "if (local_48 != (code *)local_34) {\n            do {\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            } while (puVar18 != local_34);\n          }" if (parenthesized_expression "(local_48 != (code *)local_34)" ( (binary_expression "local_48 != (code *)local_34" identifier != (cast_expression "(code *)local_34" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (compound_statement "{\n            do {\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            } while (puVar18 != local_34);\n          }" { (do_statement "do {\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            } while (puVar18 != local_34);" do (compound_statement "{\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            }" { (while_statement "while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }" while (parenthesized_expression "((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    )" ( (parenthesized_expression "(puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))" ( (comma_expression "puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0)" (assignment_expression "puVar19 = puVar11" identifier = identifier) , (binary_expression "puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0)" (binary_expression "puVar11 != puVar18" identifier != identifier) && (parenthesized_expression "(iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0)" ( (comma_expression "iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0" (assignment_expression "iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18)" identifier = (call_expression "(*pcVar9)(param_1,puVar16[1],*puVar18)" (parenthesized_expression "(*pcVar9)" ( (pointer_expression "*pcVar9" * identifier) )) (argument_list "(param_1,puVar16[1],*puVar18)" ( identifier , (subscript_expression "puVar16[1]" identifier [ number_literal ]) , (pointer_expression "*puVar18" * identifier) )))) , (comma_expression "puVar19 = puVar18, iVar7 < 0" (assignment_expression "puVar19 = puVar18" identifier = identifier) , (binary_expression "iVar7 < 0" identifier < number_literal))) )))) )) )) (compound_statement "{\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }" { (expression_statement "puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));" (assignment_expression "puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48))" identifier = (pointer_expression "*(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48))" * (cast_expression "(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48))" ( (type_descriptor "uint **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "((int)piVar8 + (int)puVar18 + (8 - (int)local_48))" ( (binary_expression "(int)piVar8 + (int)puVar18 + (8 - (int)local_48)" (binary_expression "(int)piVar8 + (int)puVar18" (cast_expression "(int)piVar8" ( (type_descriptor "int" primitive_type) ) identifier) + (cast_expression "(int)puVar18" ( (type_descriptor "int" primitive_type) ) identifier)) + (parenthesized_expression "(8 - (int)local_48)" ( (binary_expression "8 - (int)local_48" number_literal - (cast_expression "(int)local_48" ( (type_descriptor "int" primitive_type) ) identifier)) ))) ))))) ;) (expression_statement "*(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;" (assignment_expression "*(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0" (pointer_expression "*(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48))" * (cast_expression "(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48))" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)piVar8 + (int)puVar18 + (8 - (int)local_48))" ( (binary_expression "(int)piVar8 + (int)puVar18 + (8 - (int)local_48)" (binary_expression "(int)piVar8 + (int)puVar18" (cast_expression "(int)piVar8" ( (type_descriptor "int" primitive_type) ) identifier) + (cast_expression "(int)puVar18" ( (type_descriptor "int" primitive_type) ) identifier)) + (parenthesized_expression "(8 - (int)local_48)" ( (binary_expression "8 - (int)local_48" number_literal - (cast_expression "(int)local_48" ( (type_descriptor "int" primitive_type) ) identifier)) ))) )))) = number_literal) ;) (expression_statement "puVar18 = puVar19;" (assignment_expression "puVar18 = puVar19" identifier = identifier) ;) })) (expression_statement "local_40 = (uint *)((int *)local_40 + 1);" (assignment_expression "local_40 = (uint *)((int *)local_40 + 1)" identifier = (cast_expression "(uint *)((int *)local_40 + 1)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int *)local_40 + 1)" ( (binary_expression "(int *)local_40 + 1" (cast_expression "(int *)local_40" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) + number_literal) )))) ;) (expression_statement "puVar18 = puVar16 + 1;" (assignment_expression "puVar18 = puVar16 + 1" identifier = (binary_expression "puVar16 + 1" identifier + number_literal)) ;) (expression_statement "*local_40 = (uint)puVar19;" (assignment_expression "*local_40 = (uint)puVar19" (pointer_expression "*local_40" * identifier) = (cast_expression "(uint)puVar19" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "puVar16 = puVar18;" (assignment_expression "puVar16 = puVar18" identifier = identifier) ;) }) while (parenthesized_expression "(puVar18 != local_34)" ( (binary_expression "puVar18 != local_34" identifier != identifier) )) ;) })) (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" identifier = number_literal) ;) (expression_statement "uVar13 = 0;" (assignment_expression "uVar13 = 0" identifier = number_literal) ;) (expression_statement "uVar15 = 0;" (assignment_expression "uVar15 = 0" identifier = number_literal) ;) (expression_statement "puVar18 = local_44;" (assignment_expression "puVar18 = local_44" identifier = identifier) ;) (do_statement "do {\n            while (local_44 = puVar18, *piVar17 == 0) {\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }\n            iVar3 = uVar13 + 2;\n            uVar15 = uVar15 + 1;\n            uVar13 = uVar13 + 1;\n            *(uint *)((int)local_3c + iVar3 * 4) = *local_44;\n            piVar17 = piVar17 + 1;\n            puVar18 = local_44 + 1;\n          } while (local_38 != (code *)uVar15);" do (compound_statement "{\n            while (local_44 = puVar18, *piVar17 == 0) {\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }\n            iVar3 = uVar13 + 2;\n            uVar15 = uVar15 + 1;\n            uVar13 = uVar13 + 1;\n            *(uint *)((int)local_3c + iVar3 * 4) = *local_44;\n            piVar17 = piVar17 + 1;\n            puVar18 = local_44 + 1;\n          }" { (while_statement "while (local_44 = puVar18, *piVar17 == 0) {\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }" while (parenthesized_expression "(local_44 = puVar18, *piVar17 == 0)" ( (comma_expression "local_44 = puVar18, *piVar17 == 0" (assignment_expression "local_44 = puVar18" identifier = identifier) , (binary_expression "*piVar17 == 0" (pointer_expression "*piVar17" * identifier) == number_literal)) )) (compound_statement "{\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }" { (expression_statement "iVar3 = iVar7 + 2;" (assignment_expression "iVar3 = iVar7 + 2" identifier = (binary_expression "iVar7 + 2" identifier + number_literal)) ;) (expression_statement "uVar15 = uVar15 + 1;" (assignment_expression "uVar15 = uVar15 + 1" identifier = (binary_expression "uVar15 + 1" identifier + number_literal)) ;) (expression_statement "iVar7 = iVar7 + 1;" (assignment_expression "iVar7 = iVar7 + 1" identifier = (binary_expression "iVar7 + 1" identifier + number_literal)) ;) (expression_statement "piVar8[iVar3] = *local_44;" (assignment_expression "piVar8[iVar3] = *local_44" (subscript_expression "piVar8[iVar3]" identifier [ identifier ]) = (pointer_expression "*local_44" * identifier)) ;) (expression_statement "piVar17 = piVar17 + 1;" (assignment_expression "piVar17 = piVar17 + 1" identifier = (binary_expression "piVar17 + 1" identifier + number_literal)) ;) (expression_statement "puVar18 = local_44 + 1;" (assignment_expression "puVar18 = local_44 + 1" identifier = (binary_expression "local_44 + 1" identifier + number_literal)) ;) (if_statement "if (local_38 == (code *)uVar15) goto LAB_003edef4;" if (parenthesized_expression "(local_38 == (code *)uVar15)" ( (binary_expression "local_38 == (code *)uVar15" identifier == (cast_expression "(code *)uVar15" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (goto_statement "goto LAB_003edef4;" goto statement_identifier ;)) })) (expression_statement "iVar3 = uVar13 + 2;" (assignment_expression "iVar3 = uVar13 + 2" identifier = (binary_expression "uVar13 + 2" identifier + number_literal)) ;) (expression_statement "uVar15 = uVar15 + 1;" (assignment_expression "uVar15 = uVar15 + 1" identifier = (binary_expression "uVar15 + 1" identifier + number_literal)) ;) (expression_statement "uVar13 = uVar13 + 1;" (assignment_expression "uVar13 = uVar13 + 1" identifier = (binary_expression "uVar13 + 1" identifier + number_literal)) ;) (expression_statement "*(uint *)((int)local_3c + iVar3 * 4) = *local_44;" (assignment_expression "*(uint *)((int)local_3c + iVar3 * 4) = *local_44" (pointer_expression "*(uint *)((int)local_3c + iVar3 * 4)" * (cast_expression "(uint *)((int)local_3c + iVar3 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)local_3c + iVar3 * 4)" ( (binary_expression "(int)local_3c + iVar3 * 4" (cast_expression "(int)local_3c" ( (type_descriptor "int" primitive_type) ) identifier) + (binary_expression "iVar3 * 4" identifier * number_literal)) )))) = (pointer_expression "*local_44" * identifier)) ;) (expression_statement "piVar17 = piVar17 + 1;" (assignment_expression "piVar17 = piVar17 + 1" identifier = (binary_expression "piVar17 + 1" identifier + number_literal)) ;) (expression_statement "puVar18 = local_44 + 1;" (assignment_expression "puVar18 = local_44 + 1" identifier = (binary_expression "local_44 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(local_38 != (code *)uVar15)" ( (binary_expression "local_38 != (code *)uVar15" identifier != (cast_expression "(code *)uVar15" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) ;) (labeled_statement "LAB_003edef4:\n          local_44 = local_44 + 1;" statement_identifier : (expression_statement "local_44 = local_44 + 1;" (assignment_expression "local_44 = local_44 + 1" identifier = (binary_expression "local_44 + 1" identifier + number_literal)) ;)) }))) (expression_statement "local_30[1] = uVar13;" (assignment_expression "local_30[1] = uVar13" (subscript_expression "local_30[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "piVar8[1] = iVar7;" (assignment_expression "piVar8[1] = iVar7" (subscript_expression "piVar8[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "local_3c = (code *)local_58;" (assignment_expression "local_3c = (code *)local_58" identifier = (cast_expression "(code *)local_58" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (if_statement "if (local_58[1] + local_54[1] != uVar10) goto LAB_003ee148;" if (parenthesized_expression "(local_58[1] + local_54[1] != uVar10)" ( (binary_expression "local_58[1] + local_54[1] != uVar10" (binary_expression "local_58[1] + local_54[1]" (subscript_expression "local_58[1]" identifier [ number_literal ]) + (subscript_expression "local_54[1]" identifier [ number_literal ])) != identifier) )) (goto_statement "goto LAB_003ee148;" goto statement_identifier ;)) (expression_statement "frame_heapsort(param_1,pcVar9);" (call_expression "frame_heapsort(param_1,pcVar9)" identifier (argument_list "(param_1,pcVar9)" ( identifier , identifier ))) ;) (expression_statement "local_40 = (uint *)local_54;" (assignment_expression "local_40 = (uint *)local_54" identifier = (cast_expression "(uint *)local_54" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (if_statement "if ((uint *)local_54[1] != (uint *)0x0) {\n          local_44 = local_58;\n          uVar13 = local_58[1];\n          pcVar12 = (code *)local_54[1];\n          do {\n            local_48 = (code *)((int)pcVar12 + -1);\n            uVar10 = (local_40 + (int)pcVar12)[1];\n            if (uVar13 == 0) {\n              local_44[(int)pcVar12 + 1] = uVar10;\n              if (pcVar12 == (code *)0x1) break;\n              local_48 = (code *)((int)pcVar12 + -2);\n              uVar10 = local_40[(int)pcVar12];\n              pcVar5 = local_48;\n            }\n            else {\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }\n            local_44[(int)pcVar5 + 2] = uVar10;\n            pcVar12 = local_48;\n          } while (local_48 != (code *)0x0);\n          local_44[1] = local_44[1] + local_40[1];\n        }" if (parenthesized_expression "((uint *)local_54[1] != (uint *)0x0)" ( (binary_expression "(uint *)local_54[1] != (uint *)0x0" (cast_expression "(uint *)local_54[1]" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "local_54[1]" identifier [ number_literal ])) != (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          local_44 = local_58;\n          uVar13 = local_58[1];\n          pcVar12 = (code *)local_54[1];\n          do {\n            local_48 = (code *)((int)pcVar12 + -1);\n            uVar10 = (local_40 + (int)pcVar12)[1];\n            if (uVar13 == 0) {\n              local_44[(int)pcVar12 + 1] = uVar10;\n              if (pcVar12 == (code *)0x1) break;\n              local_48 = (code *)((int)pcVar12 + -2);\n              uVar10 = local_40[(int)pcVar12];\n              pcVar5 = local_48;\n            }\n            else {\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }\n            local_44[(int)pcVar5 + 2] = uVar10;\n            pcVar12 = local_48;\n          } while (local_48 != (code *)0x0);\n          local_44[1] = local_44[1] + local_40[1];\n        }" { (expression_statement "local_44 = local_58;" (assignment_expression "local_44 = local_58" identifier = identifier) ;) (expression_statement "uVar13 = local_58[1];" (assignment_expression "uVar13 = local_58[1]" identifier = (subscript_expression "local_58[1]" identifier [ number_literal ])) ;) (expression_statement "pcVar12 = (code *)local_54[1];" (assignment_expression "pcVar12 = (code *)local_54[1]" identifier = (cast_expression "(code *)local_54[1]" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "local_54[1]" identifier [ number_literal ]))) ;) (do_statement "do {\n            local_48 = (code *)((int)pcVar12 + -1);\n            uVar10 = (local_40 + (int)pcVar12)[1];\n            if (uVar13 == 0) {\n              local_44[(int)pcVar12 + 1] = uVar10;\n              if (pcVar12 == (code *)0x1) break;\n              local_48 = (code *)((int)pcVar12 + -2);\n              uVar10 = local_40[(int)pcVar12];\n              pcVar5 = local_48;\n            }\n            else {\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }\n            local_44[(int)pcVar5 + 2] = uVar10;\n            pcVar12 = local_48;\n          } while (local_48 != (code *)0x0);" do (compound_statement "{\n            local_48 = (code *)((int)pcVar12 + -1);\n            uVar10 = (local_40 + (int)pcVar12)[1];\n            if (uVar13 == 0) {\n              local_44[(int)pcVar12 + 1] = uVar10;\n              if (pcVar12 == (code *)0x1) break;\n              local_48 = (code *)((int)pcVar12 + -2);\n              uVar10 = local_40[(int)pcVar12];\n              pcVar5 = local_48;\n            }\n            else {\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }\n            local_44[(int)pcVar5 + 2] = uVar10;\n            pcVar12 = local_48;\n          }" { (expression_statement "local_48 = (code *)((int)pcVar12 + -1);" (assignment_expression "local_48 = (code *)((int)pcVar12 + -1)" identifier = (cast_expression "(code *)((int)pcVar12 + -1)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pcVar12 + -1)" ( (binary_expression "(int)pcVar12 + -1" (cast_expression "(int)pcVar12" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) ;) (expression_statement "uVar10 = (local_40 + (int)pcVar12)[1];" (assignment_expression "uVar10 = (local_40 + (int)pcVar12)[1]" identifier = (subscript_expression "(local_40 + (int)pcVar12)[1]" (parenthesized_expression "(local_40 + (int)pcVar12)" ( (binary_expression "local_40 + (int)pcVar12" identifier + (cast_expression "(int)pcVar12" ( (type_descriptor "int" primitive_type) ) identifier)) )) [ number_literal ])) ;) (if_statement "if (uVar13 == 0) {\n              local_44[(int)pcVar12 + 1] = uVar10;\n              if (pcVar12 == (code *)0x1) break;\n              local_48 = (code *)((int)pcVar12 + -2);\n              uVar10 = local_40[(int)pcVar12];\n              pcVar5 = local_48;\n            }\n            else {\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }" if (parenthesized_expression "(uVar13 == 0)" ( (binary_expression "uVar13 == 0" identifier == number_literal) )) (compound_statement "{\n              local_44[(int)pcVar12 + 1] = uVar10;\n              if (pcVar12 == (code *)0x1) break;\n              local_48 = (code *)((int)pcVar12 + -2);\n              uVar10 = local_40[(int)pcVar12];\n              pcVar5 = local_48;\n            }" { (expression_statement "local_44[(int)pcVar12 + 1] = uVar10;" (assignment_expression "local_44[(int)pcVar12 + 1] = uVar10" (subscript_expression "local_44[(int)pcVar12 + 1]" identifier [ (binary_expression "(int)pcVar12 + 1" (cast_expression "(int)pcVar12" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) ]) = identifier) ;) (if_statement "if (pcVar12 == (code *)0x1) break;" if (parenthesized_expression "(pcVar12 == (code *)0x1)" ( (binary_expression "pcVar12 == (code *)0x1" identifier == (cast_expression "(code *)0x1" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (break_statement "break;" break ;)) (expression_statement "local_48 = (code *)((int)pcVar12 + -2);" (assignment_expression "local_48 = (code *)((int)pcVar12 + -2)" identifier = (cast_expression "(code *)((int)pcVar12 + -2)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pcVar12 + -2)" ( (binary_expression "(int)pcVar12 + -2" (cast_expression "(int)pcVar12" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) ;) (expression_statement "uVar10 = local_40[(int)pcVar12];" (assignment_expression "uVar10 = local_40[(int)pcVar12]" identifier = (subscript_expression "local_40[(int)pcVar12]" identifier [ (cast_expression "(int)pcVar12" ( (type_descriptor "int" primitive_type) ) identifier) ])) ;) (expression_statement "pcVar5 = local_48;" (assignment_expression "pcVar5 = local_48" identifier = identifier) ;) }) (else_clause "else {\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }" else (compound_statement "{\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }" { (expression_statement "puVar18 = local_44 + uVar13;" (assignment_expression "puVar18 = local_44 + uVar13" identifier = (binary_expression "local_44 + uVar13" identifier + identifier)) ;) (do_statement "do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);" do (compound_statement "{\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              }" { (expression_statement "uVar15 = uVar13 - 1;" (assignment_expression "uVar15 = uVar13 - 1" identifier = (binary_expression "uVar13 - 1" identifier - number_literal)) ;) (expression_statement "iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);" (assignment_expression "iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10)" identifier = (call_expression "(*pcVar9)(param_1,puVar18[1],uVar10)" (parenthesized_expression "(*pcVar9)" ( (pointer_expression "*pcVar9" * identifier) )) (argument_list "(param_1,puVar18[1],uVar10)" ( identifier , (subscript_expression "puVar18[1]" identifier [ number_literal ]) , identifier )))) ;) (expression_statement "pcVar5 = (code *)((int)pcVar12 + uVar15);" (assignment_expression "pcVar5 = (code *)((int)pcVar12 + uVar15)" identifier = (cast_expression "(code *)((int)pcVar12 + uVar15)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pcVar12 + uVar15)" ( (binary_expression "(int)pcVar12 + uVar15" (cast_expression "(int)pcVar12" ( (type_descriptor "int" primitive_type) ) identifier) + identifier) )))) ;) (if_statement "if (iVar7 < 1) break;" if (parenthesized_expression "(iVar7 < 1)" ( (binary_expression "iVar7 < 1" identifier < number_literal) )) (break_statement "break;" break ;)) (expression_statement "puVar18[(int)pcVar12 + 1] = puVar18[1];" (assignment_expression "puVar18[(int)pcVar12 + 1] = puVar18[1]" (subscript_expression "puVar18[(int)pcVar12 + 1]" identifier [ (binary_expression "(int)pcVar12 + 1" (cast_expression "(int)pcVar12" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) ]) = (subscript_expression "puVar18[1]" identifier [ number_literal ])) ;) (expression_statement "pcVar5 = local_48;" (assignment_expression "pcVar5 = local_48" identifier = identifier) ;) (expression_statement "puVar18 = puVar18 + -1;" (assignment_expression "puVar18 = puVar18 + -1" identifier = (binary_expression "puVar18 + -1" identifier + number_literal)) ;) (expression_statement "uVar13 = uVar15;" (assignment_expression "uVar13 = uVar15" identifier = identifier) ;) }) while (parenthesized_expression "(uVar15 != 0)" ( (binary_expression "uVar15 != 0" identifier != number_literal) )) ;) }))) (expression_statement "local_44[(int)pcVar5 + 2] = uVar10;" (assignment_expression "local_44[(int)pcVar5 + 2] = uVar10" (subscript_expression "local_44[(int)pcVar5 + 2]" identifier [ (binary_expression "(int)pcVar5 + 2" (cast_expression "(int)pcVar5" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) ]) = identifier) ;) (expression_statement "pcVar12 = local_48;" (assignment_expression "pcVar12 = local_48" identifier = identifier) ;) }) while (parenthesized_expression "(local_48 != (code *)0x0)" ( (binary_expression "local_48 != (code *)0x0" identifier != (cast_expression "(code *)0x0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) ;) (expression_statement "local_44[1] = local_44[1] + local_40[1];" (assignment_expression "local_44[1] = local_44[1] + local_40[1]" (subscript_expression "local_44[1]" identifier [ number_literal ]) = (binary_expression "local_44[1] + local_40[1]" (subscript_expression "local_44[1]" identifier [ number_literal ]) + (subscript_expression "local_40[1]" identifier [ number_literal ]))) ;) })) (expression_statement "local_40 = (uint *)local_54;" (assignment_expression "local_40 = (uint *)local_54" identifier = (cast_expression "(uint *)local_54" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "(*(code *)PTR_free_004c5c18)(local_54);" (call_expression "(*(code *)PTR_free_004c5c18)(local_54)" (parenthesized_expression "(*(code *)PTR_free_004c5c18)" ( (pointer_expression "*(code *)PTR_free_004c5c18" * (cast_expression "(code *)PTR_free_004c5c18" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(local_54)" ( identifier ))) ;) }))) (expression_statement "*local_58 = param_1[3];" (assignment_expression "*local_58 = param_1[3]" (pointer_expression "*local_58" * identifier) = (subscript_expression "param_1[3]" identifier [ number_literal ])) ;) (expression_statement "param_1[3] = (uint)local_58;" (assignment_expression "param_1[3] = (uint)local_58" (subscript_expression "param_1[3]" identifier [ number_literal ]) = (cast_expression "(uint)local_58" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "param_1[4] = param_1[4] & 0x7fffffff | 0x80000000;" (assignment_expression "param_1[4] = param_1[4] & 0x7fffffff | 0x80000000" (subscript_expression "param_1[4]" identifier [ number_literal ]) = (binary_expression "param_1[4] & 0x7fffffff | 0x80000000" (binary_expression "param_1[4] & 0x7fffffff" (subscript_expression "param_1[4]" identifier [ number_literal ]) & number_literal) | number_literal)) ;) })) }))) (if_statement "if (param_2 < (undefined *)*param_1) {\n    return 0;\n  }" if (parenthesized_expression "(param_2 < (undefined *)*param_1)" ( (binary_expression "param_2 < (undefined *)*param_1" identifier < (cast_expression "(undefined *)*param_1" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "uVar13 = param_1[4];" (assignment_expression "uVar13 = param_1[4]" identifier = (subscript_expression "param_1[4]" identifier [ number_literal ])) ;) (expression_statement "piVar8 = (int *)param_1[3];" (assignment_expression "piVar8 = (int *)param_1[3]" identifier = (cast_expression "(int *)param_1[3]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[3]" identifier [ number_literal ]))) ;) (if_statement "if (-1 < (int)uVar13) {\n    if (-1 < (int)(uVar13 << 1)) {\n      iVar7 = linear_search_fdes(param_1,piVar8,param_2);\n      return iVar7;\n    }\n    iVar7 = *piVar8;\n    while( true ) {\n      if (iVar7 == 0) {\n        return 0;\n      }\n      iVar7 = linear_search_fdes(param_1,iVar7,param_2);\n      if (iVar7 != 0) break;\n      piVar8 = piVar8 + 1;\n      iVar7 = *piVar8;\n    }\n    return iVar7;\n  }" if (parenthesized_expression "(-1 < (int)uVar13)" ( (binary_expression "-1 < (int)uVar13" number_literal < (cast_expression "(int)uVar13" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n    if (-1 < (int)(uVar13 << 1)) {\n      iVar7 = linear_search_fdes(param_1,piVar8,param_2);\n      return iVar7;\n    }\n    iVar7 = *piVar8;\n    while( true ) {\n      if (iVar7 == 0) {\n        return 0;\n      }\n      iVar7 = linear_search_fdes(param_1,iVar7,param_2);\n      if (iVar7 != 0) break;\n      piVar8 = piVar8 + 1;\n      iVar7 = *piVar8;\n    }\n    return iVar7;\n  }" { (if_statement "if (-1 < (int)(uVar13 << 1)) {\n      iVar7 = linear_search_fdes(param_1,piVar8,param_2);\n      return iVar7;\n    }" if (parenthesized_expression "(-1 < (int)(uVar13 << 1))" ( (binary_expression "-1 < (int)(uVar13 << 1)" number_literal < (cast_expression "(int)(uVar13 << 1)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar13 << 1)" ( (binary_expression "uVar13 << 1" identifier << number_literal) )))) )) (compound_statement "{\n      iVar7 = linear_search_fdes(param_1,piVar8,param_2);\n      return iVar7;\n    }" { (expression_statement "iVar7 = linear_search_fdes(param_1,piVar8,param_2);" (assignment_expression "iVar7 = linear_search_fdes(param_1,piVar8,param_2)" identifier = (call_expression "linear_search_fdes(param_1,piVar8,param_2)" identifier (argument_list "(param_1,piVar8,param_2)" ( identifier , identifier , identifier )))) ;) (return_statement "return iVar7;" return identifier ;) })) (expression_statement "iVar7 = *piVar8;" (assignment_expression "iVar7 = *piVar8" identifier = (pointer_expression "*piVar8" * identifier)) ;) (while_statement "while( true ) {\n      if (iVar7 == 0) {\n        return 0;\n      }\n      iVar7 = linear_search_fdes(param_1,iVar7,param_2);\n      if (iVar7 != 0) break;\n      piVar8 = piVar8 + 1;\n      iVar7 = *piVar8;\n    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n      if (iVar7 == 0) {\n        return 0;\n      }\n      iVar7 = linear_search_fdes(param_1,iVar7,param_2);\n      if (iVar7 != 0) break;\n      piVar8 = piVar8 + 1;\n      iVar7 = *piVar8;\n    }" { (if_statement "if (iVar7 == 0) {\n        return 0;\n      }" if (parenthesized_expression "(iVar7 == 0)" ( (binary_expression "iVar7 == 0" identifier == number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "iVar7 = linear_search_fdes(param_1,iVar7,param_2);" (assignment_expression "iVar7 = linear_search_fdes(param_1,iVar7,param_2)" identifier = (call_expression "linear_search_fdes(param_1,iVar7,param_2)" identifier (argument_list "(param_1,iVar7,param_2)" ( identifier , identifier , identifier )))) ;) (if_statement "if (iVar7 != 0) break;" if (parenthesized_expression "(iVar7 != 0)" ( (binary_expression "iVar7 != 0" identifier != number_literal) )) (break_statement "break;" break ;)) (expression_statement "piVar8 = piVar8 + 1;" (assignment_expression "piVar8 = piVar8 + 1" identifier = (binary_expression "piVar8 + 1" identifier + number_literal)) ;) (expression_statement "iVar7 = *piVar8;" (assignment_expression "iVar7 = *piVar8" identifier = (pointer_expression "*piVar8" * identifier)) ;) })) (return_statement "return iVar7;" return identifier ;) })) (labeled_statement "LAB_003ed920:\n  uVar15 = param_1[3];" statement_identifier : (expression_statement "uVar15 = param_1[3];" (assignment_expression "uVar15 = param_1[3]" identifier = (subscript_expression "param_1[3]" identifier [ number_literal ])) ;)) (expression_statement "uVar10 = *(uint *)(uVar15 + 4);" (assignment_expression "uVar10 = *(uint *)(uVar15 + 4)" identifier = (pointer_expression "*(uint *)(uVar15 + 4)" * (cast_expression "(uint *)(uVar15 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar15 + 4)" ( (binary_expression "uVar15 + 4" identifier + number_literal) ))))) ;) (if_statement "if ((uVar13 & 0x20000000) == 0) {\n    if ((uVar13 & 0x1fe00000) == 0) {\n      if (uVar10 != 0) {\n        uVar13 = 0;\n        uVar14 = uVar10;\n        while( true ) {\n          uVar6 = uVar10 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          if ((*(undefined **)(iVar7 + 8) <= param_2) &&\n             (uVar13 = uVar6 + 1, uVar6 = uVar14,\n             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc))) break;\n          if (uVar6 <= uVar13) {\n            return 0;\n          }\n          uVar10 = uVar6 + uVar13;\n          uVar14 = uVar6;\n        }\n        return iVar7;\n      }\n    }\n    else {\n      uVar13 = (uVar13 << 3) >> 0x18;\n      local_44 = (uint *)base_from_cb_data_isra_4(uVar13,param_1 + 1,param_1 + 2);\n      if (uVar10 != 0) {\n        local_40 = (uint *)(uVar13 & 0xf);\n        local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n        uVar14 = 0;\n        do {\n          uVar6 = uVar10 + uVar14 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          uVar2 = (*local_48)(uVar13,local_44,iVar7 + 8,local_50);\n          (*local_48)(local_40,0,uVar2,&local_58);\n          if ((local_50[0] <= param_2) &&\n             (uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n            return iVar7;\n          }\n          uVar10 = uVar6;\n        } while (uVar14 < uVar6);\n      }\n    }\n  }\n  else {\n    local_40 = param_1 + 1;\n    if (uVar10 != 0) {\n      uVar13 = 0;\n      local_44 = param_1 + 2;\n      local_3c = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x37e0);\n      local_38 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x35e8);\n      local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n      do {\n        uVar14 = uVar13 + uVar10 >> 1;\n        iVar7 = *(int *)(uVar15 + (uVar14 + 2) * 4);\n        bVar4 = (*local_3c)((iVar7 + 4) - *(int *)(iVar7 + 4));\n        uVar2 = (*local_38)(bVar4,local_40,local_44);\n        uVar2 = (*local_48)(bVar4,uVar2,iVar7 + 8,local_50);\n        (*local_48)(bVar4 & 0xf,0,uVar2,&local_58);\n        if ((local_50[0] <= param_2) &&\n           (uVar13 = uVar14 + 1, uVar14 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n          return iVar7;\n        }\n        uVar10 = uVar14;\n      } while (uVar13 < uVar14);\n    }\n  }" if (parenthesized_expression "((uVar13 & 0x20000000) == 0)" ( (binary_expression "(uVar13 & 0x20000000) == 0" (parenthesized_expression "(uVar13 & 0x20000000)" ( (binary_expression "uVar13 & 0x20000000" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n    if ((uVar13 & 0x1fe00000) == 0) {\n      if (uVar10 != 0) {\n        uVar13 = 0;\n        uVar14 = uVar10;\n        while( true ) {\n          uVar6 = uVar10 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          if ((*(undefined **)(iVar7 + 8) <= param_2) &&\n             (uVar13 = uVar6 + 1, uVar6 = uVar14,\n             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc))) break;\n          if (uVar6 <= uVar13) {\n            return 0;\n          }\n          uVar10 = uVar6 + uVar13;\n          uVar14 = uVar6;\n        }\n        return iVar7;\n      }\n    }\n    else {\n      uVar13 = (uVar13 << 3) >> 0x18;\n      local_44 = (uint *)base_from_cb_data_isra_4(uVar13,param_1 + 1,param_1 + 2);\n      if (uVar10 != 0) {\n        local_40 = (uint *)(uVar13 & 0xf);\n        local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n        uVar14 = 0;\n        do {\n          uVar6 = uVar10 + uVar14 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          uVar2 = (*local_48)(uVar13,local_44,iVar7 + 8,local_50);\n          (*local_48)(local_40,0,uVar2,&local_58);\n          if ((local_50[0] <= param_2) &&\n             (uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n            return iVar7;\n          }\n          uVar10 = uVar6;\n        } while (uVar14 < uVar6);\n      }\n    }\n  }" { (if_statement "if ((uVar13 & 0x1fe00000) == 0) {\n      if (uVar10 != 0) {\n        uVar13 = 0;\n        uVar14 = uVar10;\n        while( true ) {\n          uVar6 = uVar10 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          if ((*(undefined **)(iVar7 + 8) <= param_2) &&\n             (uVar13 = uVar6 + 1, uVar6 = uVar14,\n             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc))) break;\n          if (uVar6 <= uVar13) {\n            return 0;\n          }\n          uVar10 = uVar6 + uVar13;\n          uVar14 = uVar6;\n        }\n        return iVar7;\n      }\n    }\n    else {\n      uVar13 = (uVar13 << 3) >> 0x18;\n      local_44 = (uint *)base_from_cb_data_isra_4(uVar13,param_1 + 1,param_1 + 2);\n      if (uVar10 != 0) {\n        local_40 = (uint *)(uVar13 & 0xf);\n        local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n        uVar14 = 0;\n        do {\n          uVar6 = uVar10 + uVar14 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          uVar2 = (*local_48)(uVar13,local_44,iVar7 + 8,local_50);\n          (*local_48)(local_40,0,uVar2,&local_58);\n          if ((local_50[0] <= param_2) &&\n             (uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n            return iVar7;\n          }\n          uVar10 = uVar6;\n        } while (uVar14 < uVar6);\n      }\n    }" if (parenthesized_expression "((uVar13 & 0x1fe00000) == 0)" ( (binary_expression "(uVar13 & 0x1fe00000) == 0" (parenthesized_expression "(uVar13 & 0x1fe00000)" ( (binary_expression "uVar13 & 0x1fe00000" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n      if (uVar10 != 0) {\n        uVar13 = 0;\n        uVar14 = uVar10;\n        while( true ) {\n          uVar6 = uVar10 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          if ((*(undefined **)(iVar7 + 8) <= param_2) &&\n             (uVar13 = uVar6 + 1, uVar6 = uVar14,\n             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc))) break;\n          if (uVar6 <= uVar13) {\n            return 0;\n          }\n          uVar10 = uVar6 + uVar13;\n          uVar14 = uVar6;\n        }\n        return iVar7;\n      }\n    }" { (if_statement "if (uVar10 != 0) {\n        uVar13 = 0;\n        uVar14 = uVar10;\n        while( true ) {\n          uVar6 = uVar10 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          if ((*(undefined **)(iVar7 + 8) <= param_2) &&\n             (uVar13 = uVar6 + 1, uVar6 = uVar14,\n             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc))) break;\n          if (uVar6 <= uVar13) {\n            return 0;\n          }\n          uVar10 = uVar6 + uVar13;\n          uVar14 = uVar6;\n        }\n        return iVar7;\n      }" if (parenthesized_expression "(uVar10 != 0)" ( (binary_expression "uVar10 != 0" identifier != number_literal) )) (compound_statement "{\n        uVar13 = 0;\n        uVar14 = uVar10;\n        while( true ) {\n          uVar6 = uVar10 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          if ((*(undefined **)(iVar7 + 8) <= param_2) &&\n             (uVar13 = uVar6 + 1, uVar6 = uVar14,\n             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc))) break;\n          if (uVar6 <= uVar13) {\n            return 0;\n          }\n          uVar10 = uVar6 + uVar13;\n          uVar14 = uVar6;\n        }\n        return iVar7;\n      }" { (expression_statement "uVar13 = 0;" (assignment_expression "uVar13 = 0" identifier = number_literal) ;) (expression_statement "uVar14 = uVar10;" (assignment_expression "uVar14 = uVar10" identifier = identifier) ;) (while_statement "while( true ) {\n          uVar6 = uVar10 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          if ((*(undefined **)(iVar7 + 8) <= param_2) &&\n             (uVar13 = uVar6 + 1, uVar6 = uVar14,\n             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc))) break;\n          if (uVar6 <= uVar13) {\n            return 0;\n          }\n          uVar10 = uVar6 + uVar13;\n          uVar14 = uVar6;\n        }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n          uVar6 = uVar10 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          if ((*(undefined **)(iVar7 + 8) <= param_2) &&\n             (uVar13 = uVar6 + 1, uVar6 = uVar14,\n             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc))) break;\n          if (uVar6 <= uVar13) {\n            return 0;\n          }\n          uVar10 = uVar6 + uVar13;\n          uVar14 = uVar6;\n        }" { (expression_statement "uVar6 = uVar10 >> 1;" (assignment_expression "uVar6 = uVar10 >> 1" identifier = (binary_expression "uVar10 >> 1" identifier >> number_literal)) ;) (expression_statement "iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);" (assignment_expression "iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4)" identifier = (pointer_expression "*(int *)(uVar15 + (uVar6 + 2) * 4)" * (cast_expression "(int *)(uVar15 + (uVar6 + 2) * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar15 + (uVar6 + 2) * 4)" ( (binary_expression "uVar15 + (uVar6 + 2) * 4" identifier + (binary_expression "(uVar6 + 2) * 4" (parenthesized_expression "(uVar6 + 2)" ( (binary_expression "uVar6 + 2" identifier + number_literal) )) * number_literal)) ))))) ;) (if_statement "if ((*(undefined **)(iVar7 + 8) <= param_2) &&\n             (uVar13 = uVar6 + 1, uVar6 = uVar14,\n             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc))) break;" if (parenthesized_expression "((*(undefined **)(iVar7 + 8) <= param_2) &&\n             (uVar13 = uVar6 + 1, uVar6 = uVar14,\n             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc)))" ( (binary_expression "(*(undefined **)(iVar7 + 8) <= param_2) &&\n             (uVar13 = uVar6 + 1, uVar6 = uVar14,\n             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc))" (parenthesized_expression "(*(undefined **)(iVar7 + 8) <= param_2)" ( (binary_expression "*(undefined **)(iVar7 + 8) <= param_2" (pointer_expression "*(undefined **)(iVar7 + 8)" * (cast_expression "(undefined **)(iVar7 + 8)" ( (type_descriptor "undefined **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar7 + 8)" ( (binary_expression "iVar7 + 8" identifier + number_literal) )))) <= identifier) )) && (parenthesized_expression "(uVar13 = uVar6 + 1, uVar6 = uVar14,\n             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc))" ( (comma_expression "uVar13 = uVar6 + 1, uVar6 = uVar14,\n             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc)" (assignment_expression "uVar13 = uVar6 + 1" identifier = (binary_expression "uVar6 + 1" identifier + number_literal)) , (comma_expression "uVar6 = uVar14,\n             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc)" (assignment_expression "uVar6 = uVar14" identifier = identifier) , (binary_expression "param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc)" identifier < (binary_expression "*(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc)" (pointer_expression "*(undefined **)(iVar7 + 8)" * (cast_expression "(undefined **)(iVar7 + 8)" ( (type_descriptor "undefined **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar7 + 8)" ( (binary_expression "iVar7 + 8" identifier + number_literal) )))) + (pointer_expression "*(int *)(iVar7 + 0xc)" * (cast_expression "(int *)(iVar7 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 0xc)" ( (binary_expression "iVar7 + 0xc" identifier + number_literal) )))))))) ))) )) (break_statement "break;" break ;)) (if_statement "if (uVar6 <= uVar13) {\n            return 0;\n          }" if (parenthesized_expression "(uVar6 <= uVar13)" ( (binary_expression "uVar6 <= uVar13" identifier <= identifier) )) (compound_statement "{\n            return 0;\n          }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "uVar10 = uVar6 + uVar13;" (assignment_expression "uVar10 = uVar6 + uVar13" identifier = (binary_expression "uVar6 + uVar13" identifier + identifier)) ;) (expression_statement "uVar14 = uVar6;" (assignment_expression "uVar14 = uVar6" identifier = identifier) ;) })) (return_statement "return iVar7;" return identifier ;) })) }) (else_clause "else {\n      uVar13 = (uVar13 << 3) >> 0x18;\n      local_44 = (uint *)base_from_cb_data_isra_4(uVar13,param_1 + 1,param_1 + 2);\n      if (uVar10 != 0) {\n        local_40 = (uint *)(uVar13 & 0xf);\n        local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n        uVar14 = 0;\n        do {\n          uVar6 = uVar10 + uVar14 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          uVar2 = (*local_48)(uVar13,local_44,iVar7 + 8,local_50);\n          (*local_48)(local_40,0,uVar2,&local_58);\n          if ((local_50[0] <= param_2) &&\n             (uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n            return iVar7;\n          }\n          uVar10 = uVar6;\n        } while (uVar14 < uVar6);\n      }\n    }" else (compound_statement "{\n      uVar13 = (uVar13 << 3) >> 0x18;\n      local_44 = (uint *)base_from_cb_data_isra_4(uVar13,param_1 + 1,param_1 + 2);\n      if (uVar10 != 0) {\n        local_40 = (uint *)(uVar13 & 0xf);\n        local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n        uVar14 = 0;\n        do {\n          uVar6 = uVar10 + uVar14 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          uVar2 = (*local_48)(uVar13,local_44,iVar7 + 8,local_50);\n          (*local_48)(local_40,0,uVar2,&local_58);\n          if ((local_50[0] <= param_2) &&\n             (uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n            return iVar7;\n          }\n          uVar10 = uVar6;\n        } while (uVar14 < uVar6);\n      }\n    }" { (expression_statement "uVar13 = (uVar13 << 3) >> 0x18;" (assignment_expression "uVar13 = (uVar13 << 3) >> 0x18" identifier = (binary_expression "(uVar13 << 3) >> 0x18" (parenthesized_expression "(uVar13 << 3)" ( (binary_expression "uVar13 << 3" identifier << number_literal) )) >> number_literal)) ;) (expression_statement "local_44 = (uint *)base_from_cb_data_isra_4(uVar13,param_1 + 1,param_1 + 2);" (assignment_expression "local_44 = (uint *)base_from_cb_data_isra_4(uVar13,param_1 + 1,param_1 + 2)" identifier = (cast_expression "(uint *)base_from_cb_data_isra_4(uVar13,param_1 + 1,param_1 + 2)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "base_from_cb_data_isra_4(uVar13,param_1 + 1,param_1 + 2)" identifier (argument_list "(uVar13,param_1 + 1,param_1 + 2)" ( identifier , (binary_expression "param_1 + 1" identifier + number_literal) , (binary_expression "param_1 + 2" identifier + number_literal) ))))) ;) (if_statement "if (uVar10 != 0) {\n        local_40 = (uint *)(uVar13 & 0xf);\n        local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n        uVar14 = 0;\n        do {\n          uVar6 = uVar10 + uVar14 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          uVar2 = (*local_48)(uVar13,local_44,iVar7 + 8,local_50);\n          (*local_48)(local_40,0,uVar2,&local_58);\n          if ((local_50[0] <= param_2) &&\n             (uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n            return iVar7;\n          }\n          uVar10 = uVar6;\n        } while (uVar14 < uVar6);\n      }" if (parenthesized_expression "(uVar10 != 0)" ( (binary_expression "uVar10 != 0" identifier != number_literal) )) (compound_statement "{\n        local_40 = (uint *)(uVar13 & 0xf);\n        local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n        uVar14 = 0;\n        do {\n          uVar6 = uVar10 + uVar14 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          uVar2 = (*local_48)(uVar13,local_44,iVar7 + 8,local_50);\n          (*local_48)(local_40,0,uVar2,&local_58);\n          if ((local_50[0] <= param_2) &&\n             (uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n            return iVar7;\n          }\n          uVar10 = uVar6;\n        } while (uVar14 < uVar6);\n      }" { (expression_statement "local_40 = (uint *)(uVar13 & 0xf);" (assignment_expression "local_40 = (uint *)(uVar13 & 0xf)" identifier = (cast_expression "(uint *)(uVar13 & 0xf)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar13 & 0xf)" ( (binary_expression "uVar13 & 0xf" identifier & number_literal) )))) ;) (expression_statement "local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);" (assignment_expression "local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968)" identifier = (cast_expression "(code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968)" ( (binary_expression "PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968" identifier + number_literal) )))) ;) (expression_statement "uVar14 = 0;" (assignment_expression "uVar14 = 0" identifier = number_literal) ;) (do_statement "do {\n          uVar6 = uVar10 + uVar14 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          uVar2 = (*local_48)(uVar13,local_44,iVar7 + 8,local_50);\n          (*local_48)(local_40,0,uVar2,&local_58);\n          if ((local_50[0] <= param_2) &&\n             (uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n            return iVar7;\n          }\n          uVar10 = uVar6;\n        } while (uVar14 < uVar6);" do (compound_statement "{\n          uVar6 = uVar10 + uVar14 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          uVar2 = (*local_48)(uVar13,local_44,iVar7 + 8,local_50);\n          (*local_48)(local_40,0,uVar2,&local_58);\n          if ((local_50[0] <= param_2) &&\n             (uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n            return iVar7;\n          }\n          uVar10 = uVar6;\n        }" { (expression_statement "uVar6 = uVar10 + uVar14 >> 1;" (assignment_expression "uVar6 = uVar10 + uVar14 >> 1" identifier = (binary_expression "uVar10 + uVar14 >> 1" (binary_expression "uVar10 + uVar14" identifier + identifier) >> number_literal)) ;) (expression_statement "iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);" (assignment_expression "iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4)" identifier = (pointer_expression "*(int *)(uVar15 + (uVar6 + 2) * 4)" * (cast_expression "(int *)(uVar15 + (uVar6 + 2) * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar15 + (uVar6 + 2) * 4)" ( (binary_expression "uVar15 + (uVar6 + 2) * 4" identifier + (binary_expression "(uVar6 + 2) * 4" (parenthesized_expression "(uVar6 + 2)" ( (binary_expression "uVar6 + 2" identifier + number_literal) )) * number_literal)) ))))) ;) (expression_statement "uVar2 = (*local_48)(uVar13,local_44,iVar7 + 8,local_50);" (assignment_expression "uVar2 = (*local_48)(uVar13,local_44,iVar7 + 8,local_50)" identifier = (call_expression "(*local_48)(uVar13,local_44,iVar7 + 8,local_50)" (parenthesized_expression "(*local_48)" ( (pointer_expression "*local_48" * identifier) )) (argument_list "(uVar13,local_44,iVar7 + 8,local_50)" ( identifier , identifier , (binary_expression "iVar7 + 8" identifier + number_literal) , identifier )))) ;) (expression_statement "(*local_48)(local_40,0,uVar2,&local_58);" (call_expression "(*local_48)(local_40,0,uVar2,&local_58)" (parenthesized_expression "(*local_48)" ( (pointer_expression "*local_48" * identifier) )) (argument_list "(local_40,0,uVar2,&local_58)" ( identifier , number_literal , identifier , (pointer_expression "&local_58" & identifier) ))) ;) (if_statement "if ((local_50[0] <= param_2) &&\n             (uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n            return iVar7;\n          }" if (parenthesized_expression "((local_50[0] <= param_2) &&\n             (uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58))" ( (binary_expression "(local_50[0] <= param_2) &&\n             (uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58)" (parenthesized_expression "(local_50[0] <= param_2)" ( (binary_expression "local_50[0] <= param_2" (subscript_expression "local_50[0]" identifier [ number_literal ]) <= identifier) )) && (parenthesized_expression "(uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58)" ( (comma_expression "uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58" (assignment_expression "uVar14 = uVar6 + 1" identifier = (binary_expression "uVar6 + 1" identifier + number_literal)) , (comma_expression "uVar6 = uVar10, param_2 < local_50[0] + (int)local_58" (assignment_expression "uVar6 = uVar10" identifier = identifier) , (binary_expression "param_2 < local_50[0] + (int)local_58" identifier < (binary_expression "local_50[0] + (int)local_58" (subscript_expression "local_50[0]" identifier [ number_literal ]) + (cast_expression "(int)local_58" ( (type_descriptor "int" primitive_type) ) identifier))))) ))) )) (compound_statement "{\n            return iVar7;\n          }" { (return_statement "return iVar7;" return identifier ;) })) (expression_statement "uVar10 = uVar6;" (assignment_expression "uVar10 = uVar6" identifier = identifier) ;) }) while (parenthesized_expression "(uVar14 < uVar6)" ( (binary_expression "uVar14 < uVar6" identifier < identifier) )) ;) })) }))) }) (else_clause "else {\n    local_40 = param_1 + 1;\n    if (uVar10 != 0) {\n      uVar13 = 0;\n      local_44 = param_1 + 2;\n      local_3c = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x37e0);\n      local_38 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x35e8);\n      local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n      do {\n        uVar14 = uVar13 + uVar10 >> 1;\n        iVar7 = *(int *)(uVar15 + (uVar14 + 2) * 4);\n        bVar4 = (*local_3c)((iVar7 + 4) - *(int *)(iVar7 + 4));\n        uVar2 = (*local_38)(bVar4,local_40,local_44);\n        uVar2 = (*local_48)(bVar4,uVar2,iVar7 + 8,local_50);\n        (*local_48)(bVar4 & 0xf,0,uVar2,&local_58);\n        if ((local_50[0] <= param_2) &&\n           (uVar13 = uVar14 + 1, uVar14 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n          return iVar7;\n        }\n        uVar10 = uVar14;\n      } while (uVar13 < uVar14);\n    }\n  }" else (compound_statement "{\n    local_40 = param_1 + 1;\n    if (uVar10 != 0) {\n      uVar13 = 0;\n      local_44 = param_1 + 2;\n      local_3c = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x37e0);\n      local_38 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x35e8);\n      local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n      do {\n        uVar14 = uVar13 + uVar10 >> 1;\n        iVar7 = *(int *)(uVar15 + (uVar14 + 2) * 4);\n        bVar4 = (*local_3c)((iVar7 + 4) - *(int *)(iVar7 + 4));\n        uVar2 = (*local_38)(bVar4,local_40,local_44);\n        uVar2 = (*local_48)(bVar4,uVar2,iVar7 + 8,local_50);\n        (*local_48)(bVar4 & 0xf,0,uVar2,&local_58);\n        if ((local_50[0] <= param_2) &&\n           (uVar13 = uVar14 + 1, uVar14 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n          return iVar7;\n        }\n        uVar10 = uVar14;\n      } while (uVar13 < uVar14);\n    }\n  }" { (expression_statement "local_40 = param_1 + 1;" (assignment_expression "local_40 = param_1 + 1" identifier = (binary_expression "param_1 + 1" identifier + number_literal)) ;) (if_statement "if (uVar10 != 0) {\n      uVar13 = 0;\n      local_44 = param_1 + 2;\n      local_3c = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x37e0);\n      local_38 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x35e8);\n      local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n      do {\n        uVar14 = uVar13 + uVar10 >> 1;\n        iVar7 = *(int *)(uVar15 + (uVar14 + 2) * 4);\n        bVar4 = (*local_3c)((iVar7 + 4) - *(int *)(iVar7 + 4));\n        uVar2 = (*local_38)(bVar4,local_40,local_44);\n        uVar2 = (*local_48)(bVar4,uVar2,iVar7 + 8,local_50);\n        (*local_48)(bVar4 & 0xf,0,uVar2,&local_58);\n        if ((local_50[0] <= param_2) &&\n           (uVar13 = uVar14 + 1, uVar14 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n          return iVar7;\n        }\n        uVar10 = uVar14;\n      } while (uVar13 < uVar14);\n    }" if (parenthesized_expression "(uVar10 != 0)" ( (binary_expression "uVar10 != 0" identifier != number_literal) )) (compound_statement "{\n      uVar13 = 0;\n      local_44 = param_1 + 2;\n      local_3c = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x37e0);\n      local_38 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x35e8);\n      local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n      do {\n        uVar14 = uVar13 + uVar10 >> 1;\n        iVar7 = *(int *)(uVar15 + (uVar14 + 2) * 4);\n        bVar4 = (*local_3c)((iVar7 + 4) - *(int *)(iVar7 + 4));\n        uVar2 = (*local_38)(bVar4,local_40,local_44);\n        uVar2 = (*local_48)(bVar4,uVar2,iVar7 + 8,local_50);\n        (*local_48)(bVar4 & 0xf,0,uVar2,&local_58);\n        if ((local_50[0] <= param_2) &&\n           (uVar13 = uVar14 + 1, uVar14 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n          return iVar7;\n        }\n        uVar10 = uVar14;\n      } while (uVar13 < uVar14);\n    }" { (expression_statement "uVar13 = 0;" (assignment_expression "uVar13 = 0" identifier = number_literal) ;) (expression_statement "local_44 = param_1 + 2;" (assignment_expression "local_44 = param_1 + 2" identifier = (binary_expression "param_1 + 2" identifier + number_literal)) ;) (expression_statement "local_3c = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x37e0);" (assignment_expression "local_3c = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x37e0)" identifier = (cast_expression "(code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x37e0)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x37e0)" ( (binary_expression "PTR_s_ral_options14Struct_no_crefE_004c127c + -0x37e0" identifier + number_literal) )))) ;) (expression_statement "local_38 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x35e8);" (assignment_expression "local_38 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x35e8)" identifier = (cast_expression "(code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x35e8)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x35e8)" ( (binary_expression "PTR_s_ral_options14Struct_no_crefE_004c127c + -0x35e8" identifier + number_literal) )))) ;) (expression_statement "local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);" (assignment_expression "local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968)" identifier = (cast_expression "(code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968)" ( (binary_expression "PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968" identifier + number_literal) )))) ;) (do_statement "do {\n        uVar14 = uVar13 + uVar10 >> 1;\n        iVar7 = *(int *)(uVar15 + (uVar14 + 2) * 4);\n        bVar4 = (*local_3c)((iVar7 + 4) - *(int *)(iVar7 + 4));\n        uVar2 = (*local_38)(bVar4,local_40,local_44);\n        uVar2 = (*local_48)(bVar4,uVar2,iVar7 + 8,local_50);\n        (*local_48)(bVar4 & 0xf,0,uVar2,&local_58);\n        if ((local_50[0] <= param_2) &&\n           (uVar13 = uVar14 + 1, uVar14 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n          return iVar7;\n        }\n        uVar10 = uVar14;\n      } while (uVar13 < uVar14);" do (compound_statement "{\n        uVar14 = uVar13 + uVar10 >> 1;\n        iVar7 = *(int *)(uVar15 + (uVar14 + 2) * 4);\n        bVar4 = (*local_3c)((iVar7 + 4) - *(int *)(iVar7 + 4));\n        uVar2 = (*local_38)(bVar4,local_40,local_44);\n        uVar2 = (*local_48)(bVar4,uVar2,iVar7 + 8,local_50);\n        (*local_48)(bVar4 & 0xf,0,uVar2,&local_58);\n        if ((local_50[0] <= param_2) &&\n           (uVar13 = uVar14 + 1, uVar14 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n          return iVar7;\n        }\n        uVar10 = uVar14;\n      }" { (expression_statement "uVar14 = uVar13 + uVar10 >> 1;" (assignment_expression "uVar14 = uVar13 + uVar10 >> 1" identifier = (binary_expression "uVar13 + uVar10 >> 1" (binary_expression "uVar13 + uVar10" identifier + identifier) >> number_literal)) ;) (expression_statement "iVar7 = *(int *)(uVar15 + (uVar14 + 2) * 4);" (assignment_expression "iVar7 = *(int *)(uVar15 + (uVar14 + 2) * 4)" identifier = (pointer_expression "*(int *)(uVar15 + (uVar14 + 2) * 4)" * (cast_expression "(int *)(uVar15 + (uVar14 + 2) * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar15 + (uVar14 + 2) * 4)" ( (binary_expression "uVar15 + (uVar14 + 2) * 4" identifier + (binary_expression "(uVar14 + 2) * 4" (parenthesized_expression "(uVar14 + 2)" ( (binary_expression "uVar14 + 2" identifier + number_literal) )) * number_literal)) ))))) ;) (expression_statement "bVar4 = (*local_3c)((iVar7 + 4) - *(int *)(iVar7 + 4));" (assignment_expression "bVar4 = (*local_3c)((iVar7 + 4) - *(int *)(iVar7 + 4))" identifier = (call_expression "(*local_3c)((iVar7 + 4) - *(int *)(iVar7 + 4))" (parenthesized_expression "(*local_3c)" ( (pointer_expression "*local_3c" * identifier) )) (argument_list "((iVar7 + 4) - *(int *)(iVar7 + 4))" ( (binary_expression "(iVar7 + 4) - *(int *)(iVar7 + 4)" (parenthesized_expression "(iVar7 + 4)" ( (binary_expression "iVar7 + 4" identifier + number_literal) )) - (pointer_expression "*(int *)(iVar7 + 4)" * (cast_expression "(int *)(iVar7 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 4)" ( (binary_expression "iVar7 + 4" identifier + number_literal) ))))) )))) ;) (expression_statement "uVar2 = (*local_38)(bVar4,local_40,local_44);" (assignment_expression "uVar2 = (*local_38)(bVar4,local_40,local_44)" identifier = (call_expression "(*local_38)(bVar4,local_40,local_44)" (parenthesized_expression "(*local_38)" ( (pointer_expression "*local_38" * identifier) )) (argument_list "(bVar4,local_40,local_44)" ( identifier , identifier , identifier )))) ;) (expression_statement "uVar2 = (*local_48)(bVar4,uVar2,iVar7 + 8,local_50);" (assignment_expression "uVar2 = (*local_48)(bVar4,uVar2,iVar7 + 8,local_50)" identifier = (call_expression "(*local_48)(bVar4,uVar2,iVar7 + 8,local_50)" (parenthesized_expression "(*local_48)" ( (pointer_expression "*local_48" * identifier) )) (argument_list "(bVar4,uVar2,iVar7 + 8,local_50)" ( identifier , identifier , (binary_expression "iVar7 + 8" identifier + number_literal) , identifier )))) ;) (expression_statement "(*local_48)(bVar4 & 0xf,0,uVar2,&local_58);" (call_expression "(*local_48)(bVar4 & 0xf,0,uVar2,&local_58)" (parenthesized_expression "(*local_48)" ( (pointer_expression "*local_48" * identifier) )) (argument_list "(bVar4 & 0xf,0,uVar2,&local_58)" ( (binary_expression "bVar4 & 0xf" identifier & number_literal) , number_literal , identifier , (pointer_expression "&local_58" & identifier) ))) ;) (if_statement "if ((local_50[0] <= param_2) &&\n           (uVar13 = uVar14 + 1, uVar14 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n          return iVar7;\n        }" if (parenthesized_expression "((local_50[0] <= param_2) &&\n           (uVar13 = uVar14 + 1, uVar14 = uVar10, param_2 < local_50[0] + (int)local_58))" ( (binary_expression "(local_50[0] <= param_2) &&\n           (uVar13 = uVar14 + 1, uVar14 = uVar10, param_2 < local_50[0] + (int)local_58)" (parenthesized_expression "(local_50[0] <= param_2)" ( (binary_expression "local_50[0] <= param_2" (subscript_expression "local_50[0]" identifier [ number_literal ]) <= identifier) )) && (parenthesized_expression "(uVar13 = uVar14 + 1, uVar14 = uVar10, param_2 < local_50[0] + (int)local_58)" ( (comma_expression "uVar13 = uVar14 + 1, uVar14 = uVar10, param_2 < local_50[0] + (int)local_58" (assignment_expression "uVar13 = uVar14 + 1" identifier = (binary_expression "uVar14 + 1" identifier + number_literal)) , (comma_expression "uVar14 = uVar10, param_2 < local_50[0] + (int)local_58" (assignment_expression "uVar14 = uVar10" identifier = identifier) , (binary_expression "param_2 < local_50[0] + (int)local_58" identifier < (binary_expression "local_50[0] + (int)local_58" (subscript_expression "local_50[0]" identifier [ number_literal ]) + (cast_expression "(int)local_58" ( (type_descriptor "int" primitive_type) ) identifier))))) ))) )) (compound_statement "{\n          return iVar7;\n        }" { (return_statement "return iVar7;" return identifier ;) })) (expression_statement "uVar10 = uVar14;" (assignment_expression "uVar10 = uVar14" identifier = identifier) ;) }) while (parenthesized_expression "(uVar13 < uVar14)" ( (binary_expression "uVar13 < uVar14" identifier < identifier) )) ;) })) }))) (return_statement "return 0;" return number_literal ;) })))
(translation_unit "int FUN_003ed8d4(uint *param_1,undefined *param_2)\n\n{\n  undefined *puVar1;\n  undefined4 uVar2;\n  byte bVar4;\n  int iVar3;\n  code *pcVar5;\n  uint uVar6;\n  int iVar7;\n  int *piVar8;\n  code *pcVar9;\n  uint uVar10;\n  uint *puVar11;\n  code *pcVar12;\n  uint uVar13;\n  uint uVar14;\n  uint uVar15;\n  uint *puVar16;\n  int *piVar17;\n  uint *puVar18;\n  uint *puVar19;\n  uint *local_58;\n  int *local_54;\n  undefined *local_50 [2];\n  code *local_48;\n  uint *local_44;\n  uint *local_40;\n  code *local_3c;\n  code *local_38;\n  uint *local_34;\n  uint *local_30;\n  \n  uVar13 = param_1[4];\n  if ((int)uVar13 < 0) goto LAB_003ed920;\n  uVar10 = uVar13 & 0x1fffff;\n  if (uVar10 == 0) {\n    piVar8 = (int *)param_1[3];\n    if ((int)(uVar13 << 1) < 0) {\n      if (*piVar8 != 0) {\n        uVar10 = 0;\n        do {\n          iVar7 = FUN_003ecf18(param_1);\n          if (iVar7 == -1) goto LAB_003eda10;\n          piVar8 = piVar8 + 1;\n          uVar10 = uVar10 + iVar7;\n        } while (*piVar8 != 0);\nLAB_003edb08:\n        if ((uVar10 & 0x1fffff) == uVar10) {\n          param_1[4] = param_1[4] & 0xffe00000 | uVar10 & 0x1fffff;\n        }\n        else {\n          param_1[4] = param_1[4] & 0xffe00000;\n        }\n        if (uVar10 != 0) goto LAB_003edce8;\n      }\n    }\n    else {\n      uVar10 = FUN_003ecf18(param_1,piVar8);\n      if (uVar10 != 0xffffffff) goto LAB_003edb08;\nLAB_003eda10:\n      param_1[4] = 0x1fe00000;\n      param_1[3] = (uint)(PTR_UINT_004c12dc + 0xaa4);\n    }\n  }\n  else {\nLAB_003edce8:\n    iVar7 = (uVar10 + 2) * 4;\n    local_58 = (uint *)(*(code *)PTR_malloc_004c5b38)(iVar7);\n    puVar1 = PTR_malloc_004c5b38;\n    if (local_58 != (uint *)0x0) {\n      local_58[1] = 0;\n      local_54 = (int *)(*(code *)puVar1)(iVar7);\n      if (local_54 != (int *)0x0) {\n        local_54[1] = 0;\n      }\n      piVar8 = (int *)param_1[3];\n      if ((int)(param_1[4] << 1) < 0) {\n        if (*piVar8 == 0) goto LAB_003ee148;\n        do {\n          piVar8 = piVar8 + 1;\n          FUN_003ed114(param_1,&local_58);\n        } while (*piVar8 != 0);\n      }\n      else {\n        FUN_003ed114(param_1,&local_58,piVar8);\n      }\n      piVar8 = local_54;\n      local_3c = (code *)local_58;\n      local_30 = local_58;\n      if ((local_58 != (uint *)0x0) && (local_58[1] != uVar10)) {\nLAB_003ee148:\n        iVar7 = (*(code *)PTR_abort_004c5d24)();\n        return iVar7;\n      }\n      if ((int)(param_1[4] << 2) < 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3240);\n      }\n      else if ((param_1[4] & 0x1fe00000) == 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628);\n      }\n      else {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558);\n      }\n      if (local_54 == (int *)0x0) {\n        FUN_003ec50c(param_1,pcVar9,local_58);\n      }\n      else {\n        local_38 = (code *)local_58[1];\n        if (local_38 == (code *)0x0) {\n          iVar7 = 0;\n          uVar13 = 0;\n        }\n        else {\n          piVar17 = local_54 + 2;\n          local_34 = local_58 + (int)local_38 + 1;\n          puVar11 = (uint *)(PTR_DAT_004c256c + -0x15d0);\n          local_48 = (code *)(local_58 + 2);\n          *piVar17 = (int)puVar11;\n          local_44 = (uint *)local_48;\n          local_40 = (uint *)piVar17;\n          puVar18 = (uint *)local_48;\n          puVar16 = (uint *)local_48;\n          if (local_48 != (code *)local_34) {\n            do {\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            } while (puVar18 != local_34);\n          }\n          iVar7 = 0;\n          uVar13 = 0;\n          uVar15 = 0;\n          puVar18 = local_44;\n          do {\n            while (local_44 = puVar18, *piVar17 == 0) {\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }\n            iVar3 = uVar13 + 2;\n            uVar15 = uVar15 + 1;\n            uVar13 = uVar13 + 1;\n            *(uint *)((int)local_3c + iVar3 * 4) = *local_44;\n            piVar17 = piVar17 + 1;\n            puVar18 = local_44 + 1;\n          } while (local_38 != (code *)uVar15);\nLAB_003edef4:\n          local_44 = local_44 + 1;\n        }\n        local_30[1] = uVar13;\n        piVar8[1] = iVar7;\n        local_3c = (code *)local_58;\n        if (local_58[1] + local_54[1] != uVar10) goto LAB_003ee148;\n        FUN_003ec50c(param_1,pcVar9);\n        local_40 = (uint *)local_54;\n        if ((uint *)local_54[1] != (uint *)0x0) {\n          local_44 = local_58;\n          uVar13 = local_58[1];\n          pcVar12 = (code *)local_54[1];\n          do {\n            local_48 = (code *)((int)pcVar12 + -1);\n            uVar10 = (local_40 + (int)pcVar12)[1];\n            if (uVar13 == 0) {\n              local_44[(int)pcVar12 + 1] = uVar10;\n              if (pcVar12 == (code *)0x1) break;\n              local_48 = (code *)((int)pcVar12 + -2);\n              uVar10 = local_40[(int)pcVar12];\n              pcVar5 = local_48;\n            }\n            else {\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }\n            local_44[(int)pcVar5 + 2] = uVar10;\n            pcVar12 = local_48;\n          } while (local_48 != (code *)0x0);\n          local_44[1] = local_44[1] + local_40[1];\n        }\n        local_40 = (uint *)local_54;\n        (*(code *)PTR_free_004c5c18)(local_54);\n      }\n      *local_58 = param_1[3];\n      param_1[3] = (uint)local_58;\n      param_1[4] = param_1[4] & 0x7fffffff | 0x80000000;\n    }\n  }\n  if (param_2 < (undefined *)*param_1) {\n    return 0;\n  }\n  uVar13 = param_1[4];\n  piVar8 = (int *)param_1[3];\n  if (-1 < (int)uVar13) {\n    if (-1 < (int)(uVar13 << 1)) {\n      iVar7 = FUN_003ecb9c(param_1,piVar8,param_2);\n      return iVar7;\n    }\n    iVar7 = *piVar8;\n    while( true ) {\n      if (iVar7 == 0) {\n        return 0;\n      }\n      iVar7 = FUN_003ecb9c(param_1,iVar7,param_2);\n      if (iVar7 != 0) break;\n      piVar8 = piVar8 + 1;\n      iVar7 = *piVar8;\n    }\n    return iVar7;\n  }\nLAB_003ed920:\n  uVar15 = param_1[3];\n  uVar10 = *(uint *)(uVar15 + 4);\n  if ((uVar13 & 0x20000000) == 0) {\n    if ((uVar13 & 0x1fe00000) == 0) {\n      if (uVar10 != 0) {\n        uVar13 = 0;\n        uVar14 = uVar10;\n        while( true ) {\n          uVar6 = uVar10 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          if ((*(undefined **)(iVar7 + 8) <= param_2) &&\n             (uVar13 = uVar6 + 1, uVar6 = uVar14,\n             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc))) break;\n          if (uVar6 <= uVar13) {\n            return 0;\n          }\n          uVar10 = uVar6 + uVar13;\n          uVar14 = uVar6;\n        }\n        return iVar7;\n      }\n    }\n    else {\n      uVar13 = (uVar13 << 3) >> 0x18;\n      local_44 = (uint *)FUN_003eca18(uVar13,param_1 + 1,param_1 + 2);\n      if (uVar10 != 0) {\n        local_40 = (uint *)(uVar13 & 0xf);\n        local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n        uVar14 = 0;\n        do {\n          uVar6 = uVar10 + uVar14 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          uVar2 = (*local_48)(uVar13,local_44,iVar7 + 8,local_50);\n          (*local_48)(local_40,0,uVar2,&local_58);\n          if ((local_50[0] <= param_2) &&\n             (uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n            return iVar7;\n          }\n          uVar10 = uVar6;\n        } while (uVar14 < uVar6);\n      }\n    }\n  }\n  else {\n    local_40 = param_1 + 1;\n    if (uVar10 != 0) {\n      uVar13 = 0;\n      local_44 = param_1 + 2;\n      local_3c = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x37e0);\n      local_38 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x35e8);\n      local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n      do {\n        uVar14 = uVar13 + uVar10 >> 1;\n        iVar7 = *(int *)(uVar15 + (uVar14 + 2) * 4);\n        bVar4 = (*local_3c)((iVar7 + 4) - *(int *)(iVar7 + 4));\n        uVar2 = (*local_38)(bVar4,local_40,local_44);\n        uVar2 = (*local_48)(bVar4,uVar2,iVar7 + 8,local_50);\n        (*local_48)(bVar4 & 0xf,0,uVar2,&local_58);\n        if ((local_50[0] <= param_2) &&\n           (uVar13 = uVar14 + 1, uVar14 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n          return iVar7;\n        }\n        uVar10 = uVar14;\n      } while (uVar13 < uVar14);\n    }\n  }\n  return 0;\n}\n\n" (function_definition "int FUN_003ed8d4(uint *param_1,undefined *param_2)\n\n{\n  undefined *puVar1;\n  undefined4 uVar2;\n  byte bVar4;\n  int iVar3;\n  code *pcVar5;\n  uint uVar6;\n  int iVar7;\n  int *piVar8;\n  code *pcVar9;\n  uint uVar10;\n  uint *puVar11;\n  code *pcVar12;\n  uint uVar13;\n  uint uVar14;\n  uint uVar15;\n  uint *puVar16;\n  int *piVar17;\n  uint *puVar18;\n  uint *puVar19;\n  uint *local_58;\n  int *local_54;\n  undefined *local_50 [2];\n  code *local_48;\n  uint *local_44;\n  uint *local_40;\n  code *local_3c;\n  code *local_38;\n  uint *local_34;\n  uint *local_30;\n  \n  uVar13 = param_1[4];\n  if ((int)uVar13 < 0) goto LAB_003ed920;\n  uVar10 = uVar13 & 0x1fffff;\n  if (uVar10 == 0) {\n    piVar8 = (int *)param_1[3];\n    if ((int)(uVar13 << 1) < 0) {\n      if (*piVar8 != 0) {\n        uVar10 = 0;\n        do {\n          iVar7 = FUN_003ecf18(param_1);\n          if (iVar7 == -1) goto LAB_003eda10;\n          piVar8 = piVar8 + 1;\n          uVar10 = uVar10 + iVar7;\n        } while (*piVar8 != 0);\nLAB_003edb08:\n        if ((uVar10 & 0x1fffff) == uVar10) {\n          param_1[4] = param_1[4] & 0xffe00000 | uVar10 & 0x1fffff;\n        }\n        else {\n          param_1[4] = param_1[4] & 0xffe00000;\n        }\n        if (uVar10 != 0) goto LAB_003edce8;\n      }\n    }\n    else {\n      uVar10 = FUN_003ecf18(param_1,piVar8);\n      if (uVar10 != 0xffffffff) goto LAB_003edb08;\nLAB_003eda10:\n      param_1[4] = 0x1fe00000;\n      param_1[3] = (uint)(PTR_UINT_004c12dc + 0xaa4);\n    }\n  }\n  else {\nLAB_003edce8:\n    iVar7 = (uVar10 + 2) * 4;\n    local_58 = (uint *)(*(code *)PTR_malloc_004c5b38)(iVar7);\n    puVar1 = PTR_malloc_004c5b38;\n    if (local_58 != (uint *)0x0) {\n      local_58[1] = 0;\n      local_54 = (int *)(*(code *)puVar1)(iVar7);\n      if (local_54 != (int *)0x0) {\n        local_54[1] = 0;\n      }\n      piVar8 = (int *)param_1[3];\n      if ((int)(param_1[4] << 1) < 0) {\n        if (*piVar8 == 0) goto LAB_003ee148;\n        do {\n          piVar8 = piVar8 + 1;\n          FUN_003ed114(param_1,&local_58);\n        } while (*piVar8 != 0);\n      }\n      else {\n        FUN_003ed114(param_1,&local_58,piVar8);\n      }\n      piVar8 = local_54;\n      local_3c = (code *)local_58;\n      local_30 = local_58;\n      if ((local_58 != (uint *)0x0) && (local_58[1] != uVar10)) {\nLAB_003ee148:\n        iVar7 = (*(code *)PTR_abort_004c5d24)();\n        return iVar7;\n      }\n      if ((int)(param_1[4] << 2) < 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3240);\n      }\n      else if ((param_1[4] & 0x1fe00000) == 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628);\n      }\n      else {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558);\n      }\n      if (local_54 == (int *)0x0) {\n        FUN_003ec50c(param_1,pcVar9,local_58);\n      }\n      else {\n        local_38 = (code *)local_58[1];\n        if (local_38 == (code *)0x0) {\n          iVar7 = 0;\n          uVar13 = 0;\n        }\n        else {\n          piVar17 = local_54 + 2;\n          local_34 = local_58 + (int)local_38 + 1;\n          puVar11 = (uint *)(PTR_DAT_004c256c + -0x15d0);\n          local_48 = (code *)(local_58 + 2);\n          *piVar17 = (int)puVar11;\n          local_44 = (uint *)local_48;\n          local_40 = (uint *)piVar17;\n          puVar18 = (uint *)local_48;\n          puVar16 = (uint *)local_48;\n          if (local_48 != (code *)local_34) {\n            do {\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            } while (puVar18 != local_34);\n          }\n          iVar7 = 0;\n          uVar13 = 0;\n          uVar15 = 0;\n          puVar18 = local_44;\n          do {\n            while (local_44 = puVar18, *piVar17 == 0) {\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }\n            iVar3 = uVar13 + 2;\n            uVar15 = uVar15 + 1;\n            uVar13 = uVar13 + 1;\n            *(uint *)((int)local_3c + iVar3 * 4) = *local_44;\n            piVar17 = piVar17 + 1;\n            puVar18 = local_44 + 1;\n          } while (local_38 != (code *)uVar15);\nLAB_003edef4:\n          local_44 = local_44 + 1;\n        }\n        local_30[1] = uVar13;\n        piVar8[1] = iVar7;\n        local_3c = (code *)local_58;\n        if (local_58[1] + local_54[1] != uVar10) goto LAB_003ee148;\n        FUN_003ec50c(param_1,pcVar9);\n        local_40 = (uint *)local_54;\n        if ((uint *)local_54[1] != (uint *)0x0) {\n          local_44 = local_58;\n          uVar13 = local_58[1];\n          pcVar12 = (code *)local_54[1];\n          do {\n            local_48 = (code *)((int)pcVar12 + -1);\n            uVar10 = (local_40 + (int)pcVar12)[1];\n            if (uVar13 == 0) {\n              local_44[(int)pcVar12 + 1] = uVar10;\n              if (pcVar12 == (code *)0x1) break;\n              local_48 = (code *)((int)pcVar12 + -2);\n              uVar10 = local_40[(int)pcVar12];\n              pcVar5 = local_48;\n            }\n            else {\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }\n            local_44[(int)pcVar5 + 2] = uVar10;\n            pcVar12 = local_48;\n          } while (local_48 != (code *)0x0);\n          local_44[1] = local_44[1] + local_40[1];\n        }\n        local_40 = (uint *)local_54;\n        (*(code *)PTR_free_004c5c18)(local_54);\n      }\n      *local_58 = param_1[3];\n      param_1[3] = (uint)local_58;\n      param_1[4] = param_1[4] & 0x7fffffff | 0x80000000;\n    }\n  }\n  if (param_2 < (undefined *)*param_1) {\n    return 0;\n  }\n  uVar13 = param_1[4];\n  piVar8 = (int *)param_1[3];\n  if (-1 < (int)uVar13) {\n    if (-1 < (int)(uVar13 << 1)) {\n      iVar7 = FUN_003ecb9c(param_1,piVar8,param_2);\n      return iVar7;\n    }\n    iVar7 = *piVar8;\n    while( true ) {\n      if (iVar7 == 0) {\n        return 0;\n      }\n      iVar7 = FUN_003ecb9c(param_1,iVar7,param_2);\n      if (iVar7 != 0) break;\n      piVar8 = piVar8 + 1;\n      iVar7 = *piVar8;\n    }\n    return iVar7;\n  }\nLAB_003ed920:\n  uVar15 = param_1[3];\n  uVar10 = *(uint *)(uVar15 + 4);\n  if ((uVar13 & 0x20000000) == 0) {\n    if ((uVar13 & 0x1fe00000) == 0) {\n      if (uVar10 != 0) {\n        uVar13 = 0;\n        uVar14 = uVar10;\n        while( true ) {\n          uVar6 = uVar10 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          if ((*(undefined **)(iVar7 + 8) <= param_2) &&\n             (uVar13 = uVar6 + 1, uVar6 = uVar14,\n             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc))) break;\n          if (uVar6 <= uVar13) {\n            return 0;\n          }\n          uVar10 = uVar6 + uVar13;\n          uVar14 = uVar6;\n        }\n        return iVar7;\n      }\n    }\n    else {\n      uVar13 = (uVar13 << 3) >> 0x18;\n      local_44 = (uint *)FUN_003eca18(uVar13,param_1 + 1,param_1 + 2);\n      if (uVar10 != 0) {\n        local_40 = (uint *)(uVar13 & 0xf);\n        local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n        uVar14 = 0;\n        do {\n          uVar6 = uVar10 + uVar14 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          uVar2 = (*local_48)(uVar13,local_44,iVar7 + 8,local_50);\n          (*local_48)(local_40,0,uVar2,&local_58);\n          if ((local_50[0] <= param_2) &&\n             (uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n            return iVar7;\n          }\n          uVar10 = uVar6;\n        } while (uVar14 < uVar6);\n      }\n    }\n  }\n  else {\n    local_40 = param_1 + 1;\n    if (uVar10 != 0) {\n      uVar13 = 0;\n      local_44 = param_1 + 2;\n      local_3c = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x37e0);\n      local_38 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x35e8);\n      local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n      do {\n        uVar14 = uVar13 + uVar10 >> 1;\n        iVar7 = *(int *)(uVar15 + (uVar14 + 2) * 4);\n        bVar4 = (*local_3c)((iVar7 + 4) - *(int *)(iVar7 + 4));\n        uVar2 = (*local_38)(bVar4,local_40,local_44);\n        uVar2 = (*local_48)(bVar4,uVar2,iVar7 + 8,local_50);\n        (*local_48)(bVar4 & 0xf,0,uVar2,&local_58);\n        if ((local_50[0] <= param_2) &&\n           (uVar13 = uVar14 + 1, uVar14 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n          return iVar7;\n        }\n        uVar10 = uVar14;\n      } while (uVar13 < uVar14);\n    }\n  }\n  return 0;\n}" primitive_type (function_declarator "FUN_003ed8d4(uint *param_1,undefined *param_2)" identifier (parameter_list "(uint *param_1,undefined *param_2)" ( (parameter_declaration "uint *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "undefined *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) ))) (compound_statement "{\n  undefined *puVar1;\n  undefined4 uVar2;\n  byte bVar4;\n  int iVar3;\n  code *pcVar5;\n  uint uVar6;\n  int iVar7;\n  int *piVar8;\n  code *pcVar9;\n  uint uVar10;\n  uint *puVar11;\n  code *pcVar12;\n  uint uVar13;\n  uint uVar14;\n  uint uVar15;\n  uint *puVar16;\n  int *piVar17;\n  uint *puVar18;\n  uint *puVar19;\n  uint *local_58;\n  int *local_54;\n  undefined *local_50 [2];\n  code *local_48;\n  uint *local_44;\n  uint *local_40;\n  code *local_3c;\n  code *local_38;\n  uint *local_34;\n  uint *local_30;\n  \n  uVar13 = param_1[4];\n  if ((int)uVar13 < 0) goto LAB_003ed920;\n  uVar10 = uVar13 & 0x1fffff;\n  if (uVar10 == 0) {\n    piVar8 = (int *)param_1[3];\n    if ((int)(uVar13 << 1) < 0) {\n      if (*piVar8 != 0) {\n        uVar10 = 0;\n        do {\n          iVar7 = FUN_003ecf18(param_1);\n          if (iVar7 == -1) goto LAB_003eda10;\n          piVar8 = piVar8 + 1;\n          uVar10 = uVar10 + iVar7;\n        } while (*piVar8 != 0);\nLAB_003edb08:\n        if ((uVar10 & 0x1fffff) == uVar10) {\n          param_1[4] = param_1[4] & 0xffe00000 | uVar10 & 0x1fffff;\n        }\n        else {\n          param_1[4] = param_1[4] & 0xffe00000;\n        }\n        if (uVar10 != 0) goto LAB_003edce8;\n      }\n    }\n    else {\n      uVar10 = FUN_003ecf18(param_1,piVar8);\n      if (uVar10 != 0xffffffff) goto LAB_003edb08;\nLAB_003eda10:\n      param_1[4] = 0x1fe00000;\n      param_1[3] = (uint)(PTR_UINT_004c12dc + 0xaa4);\n    }\n  }\n  else {\nLAB_003edce8:\n    iVar7 = (uVar10 + 2) * 4;\n    local_58 = (uint *)(*(code *)PTR_malloc_004c5b38)(iVar7);\n    puVar1 = PTR_malloc_004c5b38;\n    if (local_58 != (uint *)0x0) {\n      local_58[1] = 0;\n      local_54 = (int *)(*(code *)puVar1)(iVar7);\n      if (local_54 != (int *)0x0) {\n        local_54[1] = 0;\n      }\n      piVar8 = (int *)param_1[3];\n      if ((int)(param_1[4] << 1) < 0) {\n        if (*piVar8 == 0) goto LAB_003ee148;\n        do {\n          piVar8 = piVar8 + 1;\n          FUN_003ed114(param_1,&local_58);\n        } while (*piVar8 != 0);\n      }\n      else {\n        FUN_003ed114(param_1,&local_58,piVar8);\n      }\n      piVar8 = local_54;\n      local_3c = (code *)local_58;\n      local_30 = local_58;\n      if ((local_58 != (uint *)0x0) && (local_58[1] != uVar10)) {\nLAB_003ee148:\n        iVar7 = (*(code *)PTR_abort_004c5d24)();\n        return iVar7;\n      }\n      if ((int)(param_1[4] << 2) < 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3240);\n      }\n      else if ((param_1[4] & 0x1fe00000) == 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628);\n      }\n      else {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558);\n      }\n      if (local_54 == (int *)0x0) {\n        FUN_003ec50c(param_1,pcVar9,local_58);\n      }\n      else {\n        local_38 = (code *)local_58[1];\n        if (local_38 == (code *)0x0) {\n          iVar7 = 0;\n          uVar13 = 0;\n        }\n        else {\n          piVar17 = local_54 + 2;\n          local_34 = local_58 + (int)local_38 + 1;\n          puVar11 = (uint *)(PTR_DAT_004c256c + -0x15d0);\n          local_48 = (code *)(local_58 + 2);\n          *piVar17 = (int)puVar11;\n          local_44 = (uint *)local_48;\n          local_40 = (uint *)piVar17;\n          puVar18 = (uint *)local_48;\n          puVar16 = (uint *)local_48;\n          if (local_48 != (code *)local_34) {\n            do {\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            } while (puVar18 != local_34);\n          }\n          iVar7 = 0;\n          uVar13 = 0;\n          uVar15 = 0;\n          puVar18 = local_44;\n          do {\n            while (local_44 = puVar18, *piVar17 == 0) {\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }\n            iVar3 = uVar13 + 2;\n            uVar15 = uVar15 + 1;\n            uVar13 = uVar13 + 1;\n            *(uint *)((int)local_3c + iVar3 * 4) = *local_44;\n            piVar17 = piVar17 + 1;\n            puVar18 = local_44 + 1;\n          } while (local_38 != (code *)uVar15);\nLAB_003edef4:\n          local_44 = local_44 + 1;\n        }\n        local_30[1] = uVar13;\n        piVar8[1] = iVar7;\n        local_3c = (code *)local_58;\n        if (local_58[1] + local_54[1] != uVar10) goto LAB_003ee148;\n        FUN_003ec50c(param_1,pcVar9);\n        local_40 = (uint *)local_54;\n        if ((uint *)local_54[1] != (uint *)0x0) {\n          local_44 = local_58;\n          uVar13 = local_58[1];\n          pcVar12 = (code *)local_54[1];\n          do {\n            local_48 = (code *)((int)pcVar12 + -1);\n            uVar10 = (local_40 + (int)pcVar12)[1];\n            if (uVar13 == 0) {\n              local_44[(int)pcVar12 + 1] = uVar10;\n              if (pcVar12 == (code *)0x1) break;\n              local_48 = (code *)((int)pcVar12 + -2);\n              uVar10 = local_40[(int)pcVar12];\n              pcVar5 = local_48;\n            }\n            else {\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }\n            local_44[(int)pcVar5 + 2] = uVar10;\n            pcVar12 = local_48;\n          } while (local_48 != (code *)0x0);\n          local_44[1] = local_44[1] + local_40[1];\n        }\n        local_40 = (uint *)local_54;\n        (*(code *)PTR_free_004c5c18)(local_54);\n      }\n      *local_58 = param_1[3];\n      param_1[3] = (uint)local_58;\n      param_1[4] = param_1[4] & 0x7fffffff | 0x80000000;\n    }\n  }\n  if (param_2 < (undefined *)*param_1) {\n    return 0;\n  }\n  uVar13 = param_1[4];\n  piVar8 = (int *)param_1[3];\n  if (-1 < (int)uVar13) {\n    if (-1 < (int)(uVar13 << 1)) {\n      iVar7 = FUN_003ecb9c(param_1,piVar8,param_2);\n      return iVar7;\n    }\n    iVar7 = *piVar8;\n    while( true ) {\n      if (iVar7 == 0) {\n        return 0;\n      }\n      iVar7 = FUN_003ecb9c(param_1,iVar7,param_2);\n      if (iVar7 != 0) break;\n      piVar8 = piVar8 + 1;\n      iVar7 = *piVar8;\n    }\n    return iVar7;\n  }\nLAB_003ed920:\n  uVar15 = param_1[3];\n  uVar10 = *(uint *)(uVar15 + 4);\n  if ((uVar13 & 0x20000000) == 0) {\n    if ((uVar13 & 0x1fe00000) == 0) {\n      if (uVar10 != 0) {\n        uVar13 = 0;\n        uVar14 = uVar10;\n        while( true ) {\n          uVar6 = uVar10 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          if ((*(undefined **)(iVar7 + 8) <= param_2) &&\n             (uVar13 = uVar6 + 1, uVar6 = uVar14,\n             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc))) break;\n          if (uVar6 <= uVar13) {\n            return 0;\n          }\n          uVar10 = uVar6 + uVar13;\n          uVar14 = uVar6;\n        }\n        return iVar7;\n      }\n    }\n    else {\n      uVar13 = (uVar13 << 3) >> 0x18;\n      local_44 = (uint *)FUN_003eca18(uVar13,param_1 + 1,param_1 + 2);\n      if (uVar10 != 0) {\n        local_40 = (uint *)(uVar13 & 0xf);\n        local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n        uVar14 = 0;\n        do {\n          uVar6 = uVar10 + uVar14 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          uVar2 = (*local_48)(uVar13,local_44,iVar7 + 8,local_50);\n          (*local_48)(local_40,0,uVar2,&local_58);\n          if ((local_50[0] <= param_2) &&\n             (uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n            return iVar7;\n          }\n          uVar10 = uVar6;\n        } while (uVar14 < uVar6);\n      }\n    }\n  }\n  else {\n    local_40 = param_1 + 1;\n    if (uVar10 != 0) {\n      uVar13 = 0;\n      local_44 = param_1 + 2;\n      local_3c = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x37e0);\n      local_38 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x35e8);\n      local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n      do {\n        uVar14 = uVar13 + uVar10 >> 1;\n        iVar7 = *(int *)(uVar15 + (uVar14 + 2) * 4);\n        bVar4 = (*local_3c)((iVar7 + 4) - *(int *)(iVar7 + 4));\n        uVar2 = (*local_38)(bVar4,local_40,local_44);\n        uVar2 = (*local_48)(bVar4,uVar2,iVar7 + 8,local_50);\n        (*local_48)(bVar4 & 0xf,0,uVar2,&local_58);\n        if ((local_50[0] <= param_2) &&\n           (uVar13 = uVar14 + 1, uVar14 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n          return iVar7;\n        }\n        uVar10 = uVar14;\n      } while (uVar13 < uVar14);\n    }\n  }\n  return 0;\n}" { (declaration "undefined *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "undefined4 uVar2;" type_identifier identifier ;) (declaration "byte bVar4;" type_identifier identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "code *pcVar5;" type_identifier (pointer_declarator "*pcVar5" * identifier) ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "int *piVar8;" primitive_type (pointer_declarator "*piVar8" * identifier) ;) (declaration "code *pcVar9;" type_identifier (pointer_declarator "*pcVar9" * identifier) ;) (declaration "uint uVar10;" type_identifier identifier ;) (declaration "uint *puVar11;" type_identifier (pointer_declarator "*puVar11" * identifier) ;) (declaration "code *pcVar12;" type_identifier (pointer_declarator "*pcVar12" * identifier) ;) (declaration "uint uVar13;" type_identifier identifier ;) (declaration "uint uVar14;" type_identifier identifier ;) (declaration "uint uVar15;" type_identifier identifier ;) (declaration "uint *puVar16;" type_identifier (pointer_declarator "*puVar16" * identifier) ;) (declaration "int *piVar17;" primitive_type (pointer_declarator "*piVar17" * identifier) ;) (declaration "uint *puVar18;" type_identifier (pointer_declarator "*puVar18" * identifier) ;) (declaration "uint *puVar19;" type_identifier (pointer_declarator "*puVar19" * identifier) ;) (declaration "uint *local_58;" type_identifier (pointer_declarator "*local_58" * identifier) ;) (declaration "int *local_54;" primitive_type (pointer_declarator "*local_54" * identifier) ;) (declaration "undefined *local_50 [2];" type_identifier (pointer_declarator "*local_50 [2]" * (array_declarator "local_50 [2]" identifier [ number_literal ])) ;) (declaration "code *local_48;" type_identifier (pointer_declarator "*local_48" * identifier) ;) (declaration "uint *local_44;" type_identifier (pointer_declarator "*local_44" * identifier) ;) (declaration "uint *local_40;" type_identifier (pointer_declarator "*local_40" * identifier) ;) (declaration "code *local_3c;" type_identifier (pointer_declarator "*local_3c" * identifier) ;) (declaration "code *local_38;" type_identifier (pointer_declarator "*local_38" * identifier) ;) (declaration "uint *local_34;" type_identifier (pointer_declarator "*local_34" * identifier) ;) (declaration "uint *local_30;" type_identifier (pointer_declarator "*local_30" * identifier) ;) (expression_statement "uVar13 = param_1[4];" (assignment_expression "uVar13 = param_1[4]" identifier = (subscript_expression "param_1[4]" identifier [ number_literal ])) ;) (if_statement "if ((int)uVar13 < 0) goto LAB_003ed920;" if (parenthesized_expression "((int)uVar13 < 0)" ( (binary_expression "(int)uVar13 < 0" (cast_expression "(int)uVar13" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (goto_statement "goto LAB_003ed920;" goto statement_identifier ;)) (expression_statement "uVar10 = uVar13 & 0x1fffff;" (assignment_expression "uVar10 = uVar13 & 0x1fffff" identifier = (binary_expression "uVar13 & 0x1fffff" identifier & number_literal)) ;) (if_statement "if (uVar10 == 0) {\n    piVar8 = (int *)param_1[3];\n    if ((int)(uVar13 << 1) < 0) {\n      if (*piVar8 != 0) {\n        uVar10 = 0;\n        do {\n          iVar7 = FUN_003ecf18(param_1);\n          if (iVar7 == -1) goto LAB_003eda10;\n          piVar8 = piVar8 + 1;\n          uVar10 = uVar10 + iVar7;\n        } while (*piVar8 != 0);\nLAB_003edb08:\n        if ((uVar10 & 0x1fffff) == uVar10) {\n          param_1[4] = param_1[4] & 0xffe00000 | uVar10 & 0x1fffff;\n        }\n        else {\n          param_1[4] = param_1[4] & 0xffe00000;\n        }\n        if (uVar10 != 0) goto LAB_003edce8;\n      }\n    }\n    else {\n      uVar10 = FUN_003ecf18(param_1,piVar8);\n      if (uVar10 != 0xffffffff) goto LAB_003edb08;\nLAB_003eda10:\n      param_1[4] = 0x1fe00000;\n      param_1[3] = (uint)(PTR_UINT_004c12dc + 0xaa4);\n    }\n  }\n  else {\nLAB_003edce8:\n    iVar7 = (uVar10 + 2) * 4;\n    local_58 = (uint *)(*(code *)PTR_malloc_004c5b38)(iVar7);\n    puVar1 = PTR_malloc_004c5b38;\n    if (local_58 != (uint *)0x0) {\n      local_58[1] = 0;\n      local_54 = (int *)(*(code *)puVar1)(iVar7);\n      if (local_54 != (int *)0x0) {\n        local_54[1] = 0;\n      }\n      piVar8 = (int *)param_1[3];\n      if ((int)(param_1[4] << 1) < 0) {\n        if (*piVar8 == 0) goto LAB_003ee148;\n        do {\n          piVar8 = piVar8 + 1;\n          FUN_003ed114(param_1,&local_58);\n        } while (*piVar8 != 0);\n      }\n      else {\n        FUN_003ed114(param_1,&local_58,piVar8);\n      }\n      piVar8 = local_54;\n      local_3c = (code *)local_58;\n      local_30 = local_58;\n      if ((local_58 != (uint *)0x0) && (local_58[1] != uVar10)) {\nLAB_003ee148:\n        iVar7 = (*(code *)PTR_abort_004c5d24)();\n        return iVar7;\n      }\n      if ((int)(param_1[4] << 2) < 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3240);\n      }\n      else if ((param_1[4] & 0x1fe00000) == 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628);\n      }\n      else {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558);\n      }\n      if (local_54 == (int *)0x0) {\n        FUN_003ec50c(param_1,pcVar9,local_58);\n      }\n      else {\n        local_38 = (code *)local_58[1];\n        if (local_38 == (code *)0x0) {\n          iVar7 = 0;\n          uVar13 = 0;\n        }\n        else {\n          piVar17 = local_54 + 2;\n          local_34 = local_58 + (int)local_38 + 1;\n          puVar11 = (uint *)(PTR_DAT_004c256c + -0x15d0);\n          local_48 = (code *)(local_58 + 2);\n          *piVar17 = (int)puVar11;\n          local_44 = (uint *)local_48;\n          local_40 = (uint *)piVar17;\n          puVar18 = (uint *)local_48;\n          puVar16 = (uint *)local_48;\n          if (local_48 != (code *)local_34) {\n            do {\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            } while (puVar18 != local_34);\n          }\n          iVar7 = 0;\n          uVar13 = 0;\n          uVar15 = 0;\n          puVar18 = local_44;\n          do {\n            while (local_44 = puVar18, *piVar17 == 0) {\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }\n            iVar3 = uVar13 + 2;\n            uVar15 = uVar15 + 1;\n            uVar13 = uVar13 + 1;\n            *(uint *)((int)local_3c + iVar3 * 4) = *local_44;\n            piVar17 = piVar17 + 1;\n            puVar18 = local_44 + 1;\n          } while (local_38 != (code *)uVar15);\nLAB_003edef4:\n          local_44 = local_44 + 1;\n        }\n        local_30[1] = uVar13;\n        piVar8[1] = iVar7;\n        local_3c = (code *)local_58;\n        if (local_58[1] + local_54[1] != uVar10) goto LAB_003ee148;\n        FUN_003ec50c(param_1,pcVar9);\n        local_40 = (uint *)local_54;\n        if ((uint *)local_54[1] != (uint *)0x0) {\n          local_44 = local_58;\n          uVar13 = local_58[1];\n          pcVar12 = (code *)local_54[1];\n          do {\n            local_48 = (code *)((int)pcVar12 + -1);\n            uVar10 = (local_40 + (int)pcVar12)[1];\n            if (uVar13 == 0) {\n              local_44[(int)pcVar12 + 1] = uVar10;\n              if (pcVar12 == (code *)0x1) break;\n              local_48 = (code *)((int)pcVar12 + -2);\n              uVar10 = local_40[(int)pcVar12];\n              pcVar5 = local_48;\n            }\n            else {\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }\n            local_44[(int)pcVar5 + 2] = uVar10;\n            pcVar12 = local_48;\n          } while (local_48 != (code *)0x0);\n          local_44[1] = local_44[1] + local_40[1];\n        }\n        local_40 = (uint *)local_54;\n        (*(code *)PTR_free_004c5c18)(local_54);\n      }\n      *local_58 = param_1[3];\n      param_1[3] = (uint)local_58;\n      param_1[4] = param_1[4] & 0x7fffffff | 0x80000000;\n    }\n  }" if (parenthesized_expression "(uVar10 == 0)" ( (binary_expression "uVar10 == 0" identifier == number_literal) )) (compound_statement "{\n    piVar8 = (int *)param_1[3];\n    if ((int)(uVar13 << 1) < 0) {\n      if (*piVar8 != 0) {\n        uVar10 = 0;\n        do {\n          iVar7 = FUN_003ecf18(param_1);\n          if (iVar7 == -1) goto LAB_003eda10;\n          piVar8 = piVar8 + 1;\n          uVar10 = uVar10 + iVar7;\n        } while (*piVar8 != 0);\nLAB_003edb08:\n        if ((uVar10 & 0x1fffff) == uVar10) {\n          param_1[4] = param_1[4] & 0xffe00000 | uVar10 & 0x1fffff;\n        }\n        else {\n          param_1[4] = param_1[4] & 0xffe00000;\n        }\n        if (uVar10 != 0) goto LAB_003edce8;\n      }\n    }\n    else {\n      uVar10 = FUN_003ecf18(param_1,piVar8);\n      if (uVar10 != 0xffffffff) goto LAB_003edb08;\nLAB_003eda10:\n      param_1[4] = 0x1fe00000;\n      param_1[3] = (uint)(PTR_UINT_004c12dc + 0xaa4);\n    }\n  }" { (expression_statement "piVar8 = (int *)param_1[3];" (assignment_expression "piVar8 = (int *)param_1[3]" identifier = (cast_expression "(int *)param_1[3]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[3]" identifier [ number_literal ]))) ;) (if_statement "if ((int)(uVar13 << 1) < 0) {\n      if (*piVar8 != 0) {\n        uVar10 = 0;\n        do {\n          iVar7 = FUN_003ecf18(param_1);\n          if (iVar7 == -1) goto LAB_003eda10;\n          piVar8 = piVar8 + 1;\n          uVar10 = uVar10 + iVar7;\n        } while (*piVar8 != 0);\nLAB_003edb08:\n        if ((uVar10 & 0x1fffff) == uVar10) {\n          param_1[4] = param_1[4] & 0xffe00000 | uVar10 & 0x1fffff;\n        }\n        else {\n          param_1[4] = param_1[4] & 0xffe00000;\n        }\n        if (uVar10 != 0) goto LAB_003edce8;\n      }\n    }\n    else {\n      uVar10 = FUN_003ecf18(param_1,piVar8);\n      if (uVar10 != 0xffffffff) goto LAB_003edb08;\nLAB_003eda10:\n      param_1[4] = 0x1fe00000;\n      param_1[3] = (uint)(PTR_UINT_004c12dc + 0xaa4);\n    }" if (parenthesized_expression "((int)(uVar13 << 1) < 0)" ( (binary_expression "(int)(uVar13 << 1) < 0" (cast_expression "(int)(uVar13 << 1)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar13 << 1)" ( (binary_expression "uVar13 << 1" identifier << number_literal) ))) < number_literal) )) (compound_statement "{\n      if (*piVar8 != 0) {\n        uVar10 = 0;\n        do {\n          iVar7 = FUN_003ecf18(param_1);\n          if (iVar7 == -1) goto LAB_003eda10;\n          piVar8 = piVar8 + 1;\n          uVar10 = uVar10 + iVar7;\n        } while (*piVar8 != 0);\nLAB_003edb08:\n        if ((uVar10 & 0x1fffff) == uVar10) {\n          param_1[4] = param_1[4] & 0xffe00000 | uVar10 & 0x1fffff;\n        }\n        else {\n          param_1[4] = param_1[4] & 0xffe00000;\n        }\n        if (uVar10 != 0) goto LAB_003edce8;\n      }\n    }" { (if_statement "if (*piVar8 != 0) {\n        uVar10 = 0;\n        do {\n          iVar7 = FUN_003ecf18(param_1);\n          if (iVar7 == -1) goto LAB_003eda10;\n          piVar8 = piVar8 + 1;\n          uVar10 = uVar10 + iVar7;\n        } while (*piVar8 != 0);\nLAB_003edb08:\n        if ((uVar10 & 0x1fffff) == uVar10) {\n          param_1[4] = param_1[4] & 0xffe00000 | uVar10 & 0x1fffff;\n        }\n        else {\n          param_1[4] = param_1[4] & 0xffe00000;\n        }\n        if (uVar10 != 0) goto LAB_003edce8;\n      }" if (parenthesized_expression "(*piVar8 != 0)" ( (binary_expression "*piVar8 != 0" (pointer_expression "*piVar8" * identifier) != number_literal) )) (compound_statement "{\n        uVar10 = 0;\n        do {\n          iVar7 = FUN_003ecf18(param_1);\n          if (iVar7 == -1) goto LAB_003eda10;\n          piVar8 = piVar8 + 1;\n          uVar10 = uVar10 + iVar7;\n        } while (*piVar8 != 0);\nLAB_003edb08:\n        if ((uVar10 & 0x1fffff) == uVar10) {\n          param_1[4] = param_1[4] & 0xffe00000 | uVar10 & 0x1fffff;\n        }\n        else {\n          param_1[4] = param_1[4] & 0xffe00000;\n        }\n        if (uVar10 != 0) goto LAB_003edce8;\n      }" { (expression_statement "uVar10 = 0;" (assignment_expression "uVar10 = 0" identifier = number_literal) ;) (do_statement "do {\n          iVar7 = FUN_003ecf18(param_1);\n          if (iVar7 == -1) goto LAB_003eda10;\n          piVar8 = piVar8 + 1;\n          uVar10 = uVar10 + iVar7;\n        } while (*piVar8 != 0);" do (compound_statement "{\n          iVar7 = FUN_003ecf18(param_1);\n          if (iVar7 == -1) goto LAB_003eda10;\n          piVar8 = piVar8 + 1;\n          uVar10 = uVar10 + iVar7;\n        }" { (expression_statement "iVar7 = FUN_003ecf18(param_1);" (assignment_expression "iVar7 = FUN_003ecf18(param_1)" identifier = (call_expression "FUN_003ecf18(param_1)" identifier (argument_list "(param_1)" ( identifier )))) ;) (if_statement "if (iVar7 == -1) goto LAB_003eda10;" if (parenthesized_expression "(iVar7 == -1)" ( (binary_expression "iVar7 == -1" identifier == number_literal) )) (goto_statement "goto LAB_003eda10;" goto statement_identifier ;)) (expression_statement "piVar8 = piVar8 + 1;" (assignment_expression "piVar8 = piVar8 + 1" identifier = (binary_expression "piVar8 + 1" identifier + number_literal)) ;) (expression_statement "uVar10 = uVar10 + iVar7;" (assignment_expression "uVar10 = uVar10 + iVar7" identifier = (binary_expression "uVar10 + iVar7" identifier + identifier)) ;) }) while (parenthesized_expression "(*piVar8 != 0)" ( (binary_expression "*piVar8 != 0" (pointer_expression "*piVar8" * identifier) != number_literal) )) ;) (labeled_statement "LAB_003edb08:\n        if ((uVar10 & 0x1fffff) == uVar10) {\n          param_1[4] = param_1[4] & 0xffe00000 | uVar10 & 0x1fffff;\n        }\n        else {\n          param_1[4] = param_1[4] & 0xffe00000;\n        }" statement_identifier : (if_statement "if ((uVar10 & 0x1fffff) == uVar10) {\n          param_1[4] = param_1[4] & 0xffe00000 | uVar10 & 0x1fffff;\n        }\n        else {\n          param_1[4] = param_1[4] & 0xffe00000;\n        }" if (parenthesized_expression "((uVar10 & 0x1fffff) == uVar10)" ( (binary_expression "(uVar10 & 0x1fffff) == uVar10" (parenthesized_expression "(uVar10 & 0x1fffff)" ( (binary_expression "uVar10 & 0x1fffff" identifier & number_literal) )) == identifier) )) (compound_statement "{\n          param_1[4] = param_1[4] & 0xffe00000 | uVar10 & 0x1fffff;\n        }" { (expression_statement "param_1[4] = param_1[4] & 0xffe00000 | uVar10 & 0x1fffff;" (assignment_expression "param_1[4] = param_1[4] & 0xffe00000 | uVar10 & 0x1fffff" (subscript_expression "param_1[4]" identifier [ number_literal ]) = (binary_expression "param_1[4] & 0xffe00000 | uVar10 & 0x1fffff" (binary_expression "param_1[4] & 0xffe00000" (subscript_expression "param_1[4]" identifier [ number_literal ]) & number_literal) | (binary_expression "uVar10 & 0x1fffff" identifier & number_literal))) ;) }) (else_clause "else {\n          param_1[4] = param_1[4] & 0xffe00000;\n        }" else (compound_statement "{\n          param_1[4] = param_1[4] & 0xffe00000;\n        }" { (expression_statement "param_1[4] = param_1[4] & 0xffe00000;" (assignment_expression "param_1[4] = param_1[4] & 0xffe00000" (subscript_expression "param_1[4]" identifier [ number_literal ]) = (binary_expression "param_1[4] & 0xffe00000" (subscript_expression "param_1[4]" identifier [ number_literal ]) & number_literal)) ;) })))) (if_statement "if (uVar10 != 0) goto LAB_003edce8;" if (parenthesized_expression "(uVar10 != 0)" ( (binary_expression "uVar10 != 0" identifier != number_literal) )) (goto_statement "goto LAB_003edce8;" goto statement_identifier ;)) })) }) (else_clause "else {\n      uVar10 = FUN_003ecf18(param_1,piVar8);\n      if (uVar10 != 0xffffffff) goto LAB_003edb08;\nLAB_003eda10:\n      param_1[4] = 0x1fe00000;\n      param_1[3] = (uint)(PTR_UINT_004c12dc + 0xaa4);\n    }" else (compound_statement "{\n      uVar10 = FUN_003ecf18(param_1,piVar8);\n      if (uVar10 != 0xffffffff) goto LAB_003edb08;\nLAB_003eda10:\n      param_1[4] = 0x1fe00000;\n      param_1[3] = (uint)(PTR_UINT_004c12dc + 0xaa4);\n    }" { (expression_statement "uVar10 = FUN_003ecf18(param_1,piVar8);" (assignment_expression "uVar10 = FUN_003ecf18(param_1,piVar8)" identifier = (call_expression "FUN_003ecf18(param_1,piVar8)" identifier (argument_list "(param_1,piVar8)" ( identifier , identifier )))) ;) (if_statement "if (uVar10 != 0xffffffff) goto LAB_003edb08;" if (parenthesized_expression "(uVar10 != 0xffffffff)" ( (binary_expression "uVar10 != 0xffffffff" identifier != number_literal) )) (goto_statement "goto LAB_003edb08;" goto statement_identifier ;)) (labeled_statement "LAB_003eda10:\n      param_1[4] = 0x1fe00000;" statement_identifier : (expression_statement "param_1[4] = 0x1fe00000;" (assignment_expression "param_1[4] = 0x1fe00000" (subscript_expression "param_1[4]" identifier [ number_literal ]) = number_literal) ;)) (expression_statement "param_1[3] = (uint)(PTR_UINT_004c12dc + 0xaa4);" (assignment_expression "param_1[3] = (uint)(PTR_UINT_004c12dc + 0xaa4)" (subscript_expression "param_1[3]" identifier [ number_literal ]) = (call_expression "(uint)(PTR_UINT_004c12dc + 0xaa4)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(PTR_UINT_004c12dc + 0xaa4)" ( (binary_expression "PTR_UINT_004c12dc + 0xaa4" identifier + number_literal) )))) ;) }))) }) (else_clause "else {\nLAB_003edce8:\n    iVar7 = (uVar10 + 2) * 4;\n    local_58 = (uint *)(*(code *)PTR_malloc_004c5b38)(iVar7);\n    puVar1 = PTR_malloc_004c5b38;\n    if (local_58 != (uint *)0x0) {\n      local_58[1] = 0;\n      local_54 = (int *)(*(code *)puVar1)(iVar7);\n      if (local_54 != (int *)0x0) {\n        local_54[1] = 0;\n      }\n      piVar8 = (int *)param_1[3];\n      if ((int)(param_1[4] << 1) < 0) {\n        if (*piVar8 == 0) goto LAB_003ee148;\n        do {\n          piVar8 = piVar8 + 1;\n          FUN_003ed114(param_1,&local_58);\n        } while (*piVar8 != 0);\n      }\n      else {\n        FUN_003ed114(param_1,&local_58,piVar8);\n      }\n      piVar8 = local_54;\n      local_3c = (code *)local_58;\n      local_30 = local_58;\n      if ((local_58 != (uint *)0x0) && (local_58[1] != uVar10)) {\nLAB_003ee148:\n        iVar7 = (*(code *)PTR_abort_004c5d24)();\n        return iVar7;\n      }\n      if ((int)(param_1[4] << 2) < 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3240);\n      }\n      else if ((param_1[4] & 0x1fe00000) == 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628);\n      }\n      else {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558);\n      }\n      if (local_54 == (int *)0x0) {\n        FUN_003ec50c(param_1,pcVar9,local_58);\n      }\n      else {\n        local_38 = (code *)local_58[1];\n        if (local_38 == (code *)0x0) {\n          iVar7 = 0;\n          uVar13 = 0;\n        }\n        else {\n          piVar17 = local_54 + 2;\n          local_34 = local_58 + (int)local_38 + 1;\n          puVar11 = (uint *)(PTR_DAT_004c256c + -0x15d0);\n          local_48 = (code *)(local_58 + 2);\n          *piVar17 = (int)puVar11;\n          local_44 = (uint *)local_48;\n          local_40 = (uint *)piVar17;\n          puVar18 = (uint *)local_48;\n          puVar16 = (uint *)local_48;\n          if (local_48 != (code *)local_34) {\n            do {\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            } while (puVar18 != local_34);\n          }\n          iVar7 = 0;\n          uVar13 = 0;\n          uVar15 = 0;\n          puVar18 = local_44;\n          do {\n            while (local_44 = puVar18, *piVar17 == 0) {\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }\n            iVar3 = uVar13 + 2;\n            uVar15 = uVar15 + 1;\n            uVar13 = uVar13 + 1;\n            *(uint *)((int)local_3c + iVar3 * 4) = *local_44;\n            piVar17 = piVar17 + 1;\n            puVar18 = local_44 + 1;\n          } while (local_38 != (code *)uVar15);\nLAB_003edef4:\n          local_44 = local_44 + 1;\n        }\n        local_30[1] = uVar13;\n        piVar8[1] = iVar7;\n        local_3c = (code *)local_58;\n        if (local_58[1] + local_54[1] != uVar10) goto LAB_003ee148;\n        FUN_003ec50c(param_1,pcVar9);\n        local_40 = (uint *)local_54;\n        if ((uint *)local_54[1] != (uint *)0x0) {\n          local_44 = local_58;\n          uVar13 = local_58[1];\n          pcVar12 = (code *)local_54[1];\n          do {\n            local_48 = (code *)((int)pcVar12 + -1);\n            uVar10 = (local_40 + (int)pcVar12)[1];\n            if (uVar13 == 0) {\n              local_44[(int)pcVar12 + 1] = uVar10;\n              if (pcVar12 == (code *)0x1) break;\n              local_48 = (code *)((int)pcVar12 + -2);\n              uVar10 = local_40[(int)pcVar12];\n              pcVar5 = local_48;\n            }\n            else {\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }\n            local_44[(int)pcVar5 + 2] = uVar10;\n            pcVar12 = local_48;\n          } while (local_48 != (code *)0x0);\n          local_44[1] = local_44[1] + local_40[1];\n        }\n        local_40 = (uint *)local_54;\n        (*(code *)PTR_free_004c5c18)(local_54);\n      }\n      *local_58 = param_1[3];\n      param_1[3] = (uint)local_58;\n      param_1[4] = param_1[4] & 0x7fffffff | 0x80000000;\n    }\n  }" else (compound_statement "{\nLAB_003edce8:\n    iVar7 = (uVar10 + 2) * 4;\n    local_58 = (uint *)(*(code *)PTR_malloc_004c5b38)(iVar7);\n    puVar1 = PTR_malloc_004c5b38;\n    if (local_58 != (uint *)0x0) {\n      local_58[1] = 0;\n      local_54 = (int *)(*(code *)puVar1)(iVar7);\n      if (local_54 != (int *)0x0) {\n        local_54[1] = 0;\n      }\n      piVar8 = (int *)param_1[3];\n      if ((int)(param_1[4] << 1) < 0) {\n        if (*piVar8 == 0) goto LAB_003ee148;\n        do {\n          piVar8 = piVar8 + 1;\n          FUN_003ed114(param_1,&local_58);\n        } while (*piVar8 != 0);\n      }\n      else {\n        FUN_003ed114(param_1,&local_58,piVar8);\n      }\n      piVar8 = local_54;\n      local_3c = (code *)local_58;\n      local_30 = local_58;\n      if ((local_58 != (uint *)0x0) && (local_58[1] != uVar10)) {\nLAB_003ee148:\n        iVar7 = (*(code *)PTR_abort_004c5d24)();\n        return iVar7;\n      }\n      if ((int)(param_1[4] << 2) < 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3240);\n      }\n      else if ((param_1[4] & 0x1fe00000) == 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628);\n      }\n      else {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558);\n      }\n      if (local_54 == (int *)0x0) {\n        FUN_003ec50c(param_1,pcVar9,local_58);\n      }\n      else {\n        local_38 = (code *)local_58[1];\n        if (local_38 == (code *)0x0) {\n          iVar7 = 0;\n          uVar13 = 0;\n        }\n        else {\n          piVar17 = local_54 + 2;\n          local_34 = local_58 + (int)local_38 + 1;\n          puVar11 = (uint *)(PTR_DAT_004c256c + -0x15d0);\n          local_48 = (code *)(local_58 + 2);\n          *piVar17 = (int)puVar11;\n          local_44 = (uint *)local_48;\n          local_40 = (uint *)piVar17;\n          puVar18 = (uint *)local_48;\n          puVar16 = (uint *)local_48;\n          if (local_48 != (code *)local_34) {\n            do {\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            } while (puVar18 != local_34);\n          }\n          iVar7 = 0;\n          uVar13 = 0;\n          uVar15 = 0;\n          puVar18 = local_44;\n          do {\n            while (local_44 = puVar18, *piVar17 == 0) {\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }\n            iVar3 = uVar13 + 2;\n            uVar15 = uVar15 + 1;\n            uVar13 = uVar13 + 1;\n            *(uint *)((int)local_3c + iVar3 * 4) = *local_44;\n            piVar17 = piVar17 + 1;\n            puVar18 = local_44 + 1;\n          } while (local_38 != (code *)uVar15);\nLAB_003edef4:\n          local_44 = local_44 + 1;\n        }\n        local_30[1] = uVar13;\n        piVar8[1] = iVar7;\n        local_3c = (code *)local_58;\n        if (local_58[1] + local_54[1] != uVar10) goto LAB_003ee148;\n        FUN_003ec50c(param_1,pcVar9);\n        local_40 = (uint *)local_54;\n        if ((uint *)local_54[1] != (uint *)0x0) {\n          local_44 = local_58;\n          uVar13 = local_58[1];\n          pcVar12 = (code *)local_54[1];\n          do {\n            local_48 = (code *)((int)pcVar12 + -1);\n            uVar10 = (local_40 + (int)pcVar12)[1];\n            if (uVar13 == 0) {\n              local_44[(int)pcVar12 + 1] = uVar10;\n              if (pcVar12 == (code *)0x1) break;\n              local_48 = (code *)((int)pcVar12 + -2);\n              uVar10 = local_40[(int)pcVar12];\n              pcVar5 = local_48;\n            }\n            else {\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }\n            local_44[(int)pcVar5 + 2] = uVar10;\n            pcVar12 = local_48;\n          } while (local_48 != (code *)0x0);\n          local_44[1] = local_44[1] + local_40[1];\n        }\n        local_40 = (uint *)local_54;\n        (*(code *)PTR_free_004c5c18)(local_54);\n      }\n      *local_58 = param_1[3];\n      param_1[3] = (uint)local_58;\n      param_1[4] = param_1[4] & 0x7fffffff | 0x80000000;\n    }\n  }" { (labeled_statement "LAB_003edce8:\n    iVar7 = (uVar10 + 2) * 4;" statement_identifier : (expression_statement "iVar7 = (uVar10 + 2) * 4;" (assignment_expression "iVar7 = (uVar10 + 2) * 4" identifier = (binary_expression "(uVar10 + 2) * 4" (parenthesized_expression "(uVar10 + 2)" ( (binary_expression "uVar10 + 2" identifier + number_literal) )) * number_literal)) ;)) (expression_statement "local_58 = (uint *)(*(code *)PTR_malloc_004c5b38)(iVar7);" (assignment_expression "local_58 = (uint *)(*(code *)PTR_malloc_004c5b38)(iVar7)" identifier = (cast_expression "(uint *)(*(code *)PTR_malloc_004c5b38)(iVar7)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR_malloc_004c5b38)(iVar7)" (parenthesized_expression "(*(code *)PTR_malloc_004c5b38)" ( (pointer_expression "*(code *)PTR_malloc_004c5b38" * (cast_expression "(code *)PTR_malloc_004c5b38" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(iVar7)" ( identifier ))))) ;) (expression_statement "puVar1 = PTR_malloc_004c5b38;" (assignment_expression "puVar1 = PTR_malloc_004c5b38" identifier = identifier) ;) (if_statement "if (local_58 != (uint *)0x0) {\n      local_58[1] = 0;\n      local_54 = (int *)(*(code *)puVar1)(iVar7);\n      if (local_54 != (int *)0x0) {\n        local_54[1] = 0;\n      }\n      piVar8 = (int *)param_1[3];\n      if ((int)(param_1[4] << 1) < 0) {\n        if (*piVar8 == 0) goto LAB_003ee148;\n        do {\n          piVar8 = piVar8 + 1;\n          FUN_003ed114(param_1,&local_58);\n        } while (*piVar8 != 0);\n      }\n      else {\n        FUN_003ed114(param_1,&local_58,piVar8);\n      }\n      piVar8 = local_54;\n      local_3c = (code *)local_58;\n      local_30 = local_58;\n      if ((local_58 != (uint *)0x0) && (local_58[1] != uVar10)) {\nLAB_003ee148:\n        iVar7 = (*(code *)PTR_abort_004c5d24)();\n        return iVar7;\n      }\n      if ((int)(param_1[4] << 2) < 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3240);\n      }\n      else if ((param_1[4] & 0x1fe00000) == 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628);\n      }\n      else {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558);\n      }\n      if (local_54 == (int *)0x0) {\n        FUN_003ec50c(param_1,pcVar9,local_58);\n      }\n      else {\n        local_38 = (code *)local_58[1];\n        if (local_38 == (code *)0x0) {\n          iVar7 = 0;\n          uVar13 = 0;\n        }\n        else {\n          piVar17 = local_54 + 2;\n          local_34 = local_58 + (int)local_38 + 1;\n          puVar11 = (uint *)(PTR_DAT_004c256c + -0x15d0);\n          local_48 = (code *)(local_58 + 2);\n          *piVar17 = (int)puVar11;\n          local_44 = (uint *)local_48;\n          local_40 = (uint *)piVar17;\n          puVar18 = (uint *)local_48;\n          puVar16 = (uint *)local_48;\n          if (local_48 != (code *)local_34) {\n            do {\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            } while (puVar18 != local_34);\n          }\n          iVar7 = 0;\n          uVar13 = 0;\n          uVar15 = 0;\n          puVar18 = local_44;\n          do {\n            while (local_44 = puVar18, *piVar17 == 0) {\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }\n            iVar3 = uVar13 + 2;\n            uVar15 = uVar15 + 1;\n            uVar13 = uVar13 + 1;\n            *(uint *)((int)local_3c + iVar3 * 4) = *local_44;\n            piVar17 = piVar17 + 1;\n            puVar18 = local_44 + 1;\n          } while (local_38 != (code *)uVar15);\nLAB_003edef4:\n          local_44 = local_44 + 1;\n        }\n        local_30[1] = uVar13;\n        piVar8[1] = iVar7;\n        local_3c = (code *)local_58;\n        if (local_58[1] + local_54[1] != uVar10) goto LAB_003ee148;\n        FUN_003ec50c(param_1,pcVar9);\n        local_40 = (uint *)local_54;\n        if ((uint *)local_54[1] != (uint *)0x0) {\n          local_44 = local_58;\n          uVar13 = local_58[1];\n          pcVar12 = (code *)local_54[1];\n          do {\n            local_48 = (code *)((int)pcVar12 + -1);\n            uVar10 = (local_40 + (int)pcVar12)[1];\n            if (uVar13 == 0) {\n              local_44[(int)pcVar12 + 1] = uVar10;\n              if (pcVar12 == (code *)0x1) break;\n              local_48 = (code *)((int)pcVar12 + -2);\n              uVar10 = local_40[(int)pcVar12];\n              pcVar5 = local_48;\n            }\n            else {\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }\n            local_44[(int)pcVar5 + 2] = uVar10;\n            pcVar12 = local_48;\n          } while (local_48 != (code *)0x0);\n          local_44[1] = local_44[1] + local_40[1];\n        }\n        local_40 = (uint *)local_54;\n        (*(code *)PTR_free_004c5c18)(local_54);\n      }\n      *local_58 = param_1[3];\n      param_1[3] = (uint)local_58;\n      param_1[4] = param_1[4] & 0x7fffffff | 0x80000000;\n    }" if (parenthesized_expression "(local_58 != (uint *)0x0)" ( (binary_expression "local_58 != (uint *)0x0" identifier != (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      local_58[1] = 0;\n      local_54 = (int *)(*(code *)puVar1)(iVar7);\n      if (local_54 != (int *)0x0) {\n        local_54[1] = 0;\n      }\n      piVar8 = (int *)param_1[3];\n      if ((int)(param_1[4] << 1) < 0) {\n        if (*piVar8 == 0) goto LAB_003ee148;\n        do {\n          piVar8 = piVar8 + 1;\n          FUN_003ed114(param_1,&local_58);\n        } while (*piVar8 != 0);\n      }\n      else {\n        FUN_003ed114(param_1,&local_58,piVar8);\n      }\n      piVar8 = local_54;\n      local_3c = (code *)local_58;\n      local_30 = local_58;\n      if ((local_58 != (uint *)0x0) && (local_58[1] != uVar10)) {\nLAB_003ee148:\n        iVar7 = (*(code *)PTR_abort_004c5d24)();\n        return iVar7;\n      }\n      if ((int)(param_1[4] << 2) < 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3240);\n      }\n      else if ((param_1[4] & 0x1fe00000) == 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628);\n      }\n      else {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558);\n      }\n      if (local_54 == (int *)0x0) {\n        FUN_003ec50c(param_1,pcVar9,local_58);\n      }\n      else {\n        local_38 = (code *)local_58[1];\n        if (local_38 == (code *)0x0) {\n          iVar7 = 0;\n          uVar13 = 0;\n        }\n        else {\n          piVar17 = local_54 + 2;\n          local_34 = local_58 + (int)local_38 + 1;\n          puVar11 = (uint *)(PTR_DAT_004c256c + -0x15d0);\n          local_48 = (code *)(local_58 + 2);\n          *piVar17 = (int)puVar11;\n          local_44 = (uint *)local_48;\n          local_40 = (uint *)piVar17;\n          puVar18 = (uint *)local_48;\n          puVar16 = (uint *)local_48;\n          if (local_48 != (code *)local_34) {\n            do {\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            } while (puVar18 != local_34);\n          }\n          iVar7 = 0;\n          uVar13 = 0;\n          uVar15 = 0;\n          puVar18 = local_44;\n          do {\n            while (local_44 = puVar18, *piVar17 == 0) {\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }\n            iVar3 = uVar13 + 2;\n            uVar15 = uVar15 + 1;\n            uVar13 = uVar13 + 1;\n            *(uint *)((int)local_3c + iVar3 * 4) = *local_44;\n            piVar17 = piVar17 + 1;\n            puVar18 = local_44 + 1;\n          } while (local_38 != (code *)uVar15);\nLAB_003edef4:\n          local_44 = local_44 + 1;\n        }\n        local_30[1] = uVar13;\n        piVar8[1] = iVar7;\n        local_3c = (code *)local_58;\n        if (local_58[1] + local_54[1] != uVar10) goto LAB_003ee148;\n        FUN_003ec50c(param_1,pcVar9);\n        local_40 = (uint *)local_54;\n        if ((uint *)local_54[1] != (uint *)0x0) {\n          local_44 = local_58;\n          uVar13 = local_58[1];\n          pcVar12 = (code *)local_54[1];\n          do {\n            local_48 = (code *)((int)pcVar12 + -1);\n            uVar10 = (local_40 + (int)pcVar12)[1];\n            if (uVar13 == 0) {\n              local_44[(int)pcVar12 + 1] = uVar10;\n              if (pcVar12 == (code *)0x1) break;\n              local_48 = (code *)((int)pcVar12 + -2);\n              uVar10 = local_40[(int)pcVar12];\n              pcVar5 = local_48;\n            }\n            else {\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }\n            local_44[(int)pcVar5 + 2] = uVar10;\n            pcVar12 = local_48;\n          } while (local_48 != (code *)0x0);\n          local_44[1] = local_44[1] + local_40[1];\n        }\n        local_40 = (uint *)local_54;\n        (*(code *)PTR_free_004c5c18)(local_54);\n      }\n      *local_58 = param_1[3];\n      param_1[3] = (uint)local_58;\n      param_1[4] = param_1[4] & 0x7fffffff | 0x80000000;\n    }" { (expression_statement "local_58[1] = 0;" (assignment_expression "local_58[1] = 0" (subscript_expression "local_58[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "local_54 = (int *)(*(code *)puVar1)(iVar7);" (assignment_expression "local_54 = (int *)(*(code *)puVar1)(iVar7)" identifier = (cast_expression "(int *)(*(code *)puVar1)(iVar7)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)puVar1)(iVar7)" (parenthesized_expression "(*(code *)puVar1)" ( (pointer_expression "*(code *)puVar1" * (cast_expression "(code *)puVar1" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(iVar7)" ( identifier ))))) ;) (if_statement "if (local_54 != (int *)0x0) {\n        local_54[1] = 0;\n      }" if (parenthesized_expression "(local_54 != (int *)0x0)" ( (binary_expression "local_54 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        local_54[1] = 0;\n      }" { (expression_statement "local_54[1] = 0;" (assignment_expression "local_54[1] = 0" (subscript_expression "local_54[1]" identifier [ number_literal ]) = number_literal) ;) })) (expression_statement "piVar8 = (int *)param_1[3];" (assignment_expression "piVar8 = (int *)param_1[3]" identifier = (cast_expression "(int *)param_1[3]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[3]" identifier [ number_literal ]))) ;) (if_statement "if ((int)(param_1[4] << 1) < 0) {\n        if (*piVar8 == 0) goto LAB_003ee148;\n        do {\n          piVar8 = piVar8 + 1;\n          FUN_003ed114(param_1,&local_58);\n        } while (*piVar8 != 0);\n      }\n      else {\n        FUN_003ed114(param_1,&local_58,piVar8);\n      }" if (parenthesized_expression "((int)(param_1[4] << 1) < 0)" ( (binary_expression "(int)(param_1[4] << 1) < 0" (cast_expression "(int)(param_1[4] << 1)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(param_1[4] << 1)" ( (binary_expression "param_1[4] << 1" (subscript_expression "param_1[4]" identifier [ number_literal ]) << number_literal) ))) < number_literal) )) (compound_statement "{\n        if (*piVar8 == 0) goto LAB_003ee148;\n        do {\n          piVar8 = piVar8 + 1;\n          FUN_003ed114(param_1,&local_58);\n        } while (*piVar8 != 0);\n      }" { (if_statement "if (*piVar8 == 0) goto LAB_003ee148;" if (parenthesized_expression "(*piVar8 == 0)" ( (binary_expression "*piVar8 == 0" (pointer_expression "*piVar8" * identifier) == number_literal) )) (goto_statement "goto LAB_003ee148;" goto statement_identifier ;)) (do_statement "do {\n          piVar8 = piVar8 + 1;\n          FUN_003ed114(param_1,&local_58);\n        } while (*piVar8 != 0);" do (compound_statement "{\n          piVar8 = piVar8 + 1;\n          FUN_003ed114(param_1,&local_58);\n        }" { (expression_statement "piVar8 = piVar8 + 1;" (assignment_expression "piVar8 = piVar8 + 1" identifier = (binary_expression "piVar8 + 1" identifier + number_literal)) ;) (expression_statement "FUN_003ed114(param_1,&local_58);" (call_expression "FUN_003ed114(param_1,&local_58)" identifier (argument_list "(param_1,&local_58)" ( identifier , (pointer_expression "&local_58" & identifier) ))) ;) }) while (parenthesized_expression "(*piVar8 != 0)" ( (binary_expression "*piVar8 != 0" (pointer_expression "*piVar8" * identifier) != number_literal) )) ;) }) (else_clause "else {\n        FUN_003ed114(param_1,&local_58,piVar8);\n      }" else (compound_statement "{\n        FUN_003ed114(param_1,&local_58,piVar8);\n      }" { (expression_statement "FUN_003ed114(param_1,&local_58,piVar8);" (call_expression "FUN_003ed114(param_1,&local_58,piVar8)" identifier (argument_list "(param_1,&local_58,piVar8)" ( identifier , (pointer_expression "&local_58" & identifier) , identifier ))) ;) }))) (expression_statement "piVar8 = local_54;" (assignment_expression "piVar8 = local_54" identifier = identifier) ;) (expression_statement "local_3c = (code *)local_58;" (assignment_expression "local_3c = (code *)local_58" identifier = (cast_expression "(code *)local_58" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "local_30 = local_58;" (assignment_expression "local_30 = local_58" identifier = identifier) ;) (if_statement "if ((local_58 != (uint *)0x0) && (local_58[1] != uVar10)) {\nLAB_003ee148:\n        iVar7 = (*(code *)PTR_abort_004c5d24)();\n        return iVar7;\n      }" if (parenthesized_expression "((local_58 != (uint *)0x0) && (local_58[1] != uVar10))" ( (binary_expression "(local_58 != (uint *)0x0) && (local_58[1] != uVar10)" (parenthesized_expression "(local_58 != (uint *)0x0)" ( (binary_expression "local_58 != (uint *)0x0" identifier != (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(local_58[1] != uVar10)" ( (binary_expression "local_58[1] != uVar10" (subscript_expression "local_58[1]" identifier [ number_literal ]) != identifier) ))) )) (compound_statement "{\nLAB_003ee148:\n        iVar7 = (*(code *)PTR_abort_004c5d24)();\n        return iVar7;\n      }" { (labeled_statement "LAB_003ee148:\n        iVar7 = (*(code *)PTR_abort_004c5d24)();" statement_identifier : (expression_statement "iVar7 = (*(code *)PTR_abort_004c5d24)();" (assignment_expression "iVar7 = (*(code *)PTR_abort_004c5d24)()" identifier = (call_expression "(*(code *)PTR_abort_004c5d24)()" (parenthesized_expression "(*(code *)PTR_abort_004c5d24)" ( (pointer_expression "*(code *)PTR_abort_004c5d24" * (cast_expression "(code *)PTR_abort_004c5d24" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "()" ( )))) ;)) (return_statement "return iVar7;" return identifier ;) })) (if_statement "if ((int)(param_1[4] << 2) < 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3240);\n      }\n      else if ((param_1[4] & 0x1fe00000) == 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628);\n      }\n      else {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558);\n      }" if (parenthesized_expression "((int)(param_1[4] << 2) < 0)" ( (binary_expression "(int)(param_1[4] << 2) < 0" (cast_expression "(int)(param_1[4] << 2)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(param_1[4] << 2)" ( (binary_expression "param_1[4] << 2" (subscript_expression "param_1[4]" identifier [ number_literal ]) << number_literal) ))) < number_literal) )) (compound_statement "{\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3240);\n      }" { (expression_statement "pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3240);" (assignment_expression "pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3240)" identifier = (cast_expression "(code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3240)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3240)" ( (binary_expression "PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3240" identifier + number_literal) )))) ;) }) (else_clause "else if ((param_1[4] & 0x1fe00000) == 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628);\n      }\n      else {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558);\n      }" else (if_statement "if ((param_1[4] & 0x1fe00000) == 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628);\n      }\n      else {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558);\n      }" if (parenthesized_expression "((param_1[4] & 0x1fe00000) == 0)" ( (binary_expression "(param_1[4] & 0x1fe00000) == 0" (parenthesized_expression "(param_1[4] & 0x1fe00000)" ( (binary_expression "param_1[4] & 0x1fe00000" (subscript_expression "param_1[4]" identifier [ number_literal ]) & number_literal) )) == number_literal) )) (compound_statement "{\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628);\n      }" { (expression_statement "pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628);" (assignment_expression "pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628)" identifier = (cast_expression "(code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628)" ( (binary_expression "PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628" identifier + number_literal) )))) ;) }) (else_clause "else {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558);\n      }" else (compound_statement "{\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558);\n      }" { (expression_statement "pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558);" (assignment_expression "pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558)" identifier = (cast_expression "(code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558)" ( (binary_expression "PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558" identifier + number_literal) )))) ;) }))))) (if_statement "if (local_54 == (int *)0x0) {\n        FUN_003ec50c(param_1,pcVar9,local_58);\n      }\n      else {\n        local_38 = (code *)local_58[1];\n        if (local_38 == (code *)0x0) {\n          iVar7 = 0;\n          uVar13 = 0;\n        }\n        else {\n          piVar17 = local_54 + 2;\n          local_34 = local_58 + (int)local_38 + 1;\n          puVar11 = (uint *)(PTR_DAT_004c256c + -0x15d0);\n          local_48 = (code *)(local_58 + 2);\n          *piVar17 = (int)puVar11;\n          local_44 = (uint *)local_48;\n          local_40 = (uint *)piVar17;\n          puVar18 = (uint *)local_48;\n          puVar16 = (uint *)local_48;\n          if (local_48 != (code *)local_34) {\n            do {\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            } while (puVar18 != local_34);\n          }\n          iVar7 = 0;\n          uVar13 = 0;\n          uVar15 = 0;\n          puVar18 = local_44;\n          do {\n            while (local_44 = puVar18, *piVar17 == 0) {\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }\n            iVar3 = uVar13 + 2;\n            uVar15 = uVar15 + 1;\n            uVar13 = uVar13 + 1;\n            *(uint *)((int)local_3c + iVar3 * 4) = *local_44;\n            piVar17 = piVar17 + 1;\n            puVar18 = local_44 + 1;\n          } while (local_38 != (code *)uVar15);\nLAB_003edef4:\n          local_44 = local_44 + 1;\n        }\n        local_30[1] = uVar13;\n        piVar8[1] = iVar7;\n        local_3c = (code *)local_58;\n        if (local_58[1] + local_54[1] != uVar10) goto LAB_003ee148;\n        FUN_003ec50c(param_1,pcVar9);\n        local_40 = (uint *)local_54;\n        if ((uint *)local_54[1] != (uint *)0x0) {\n          local_44 = local_58;\n          uVar13 = local_58[1];\n          pcVar12 = (code *)local_54[1];\n          do {\n            local_48 = (code *)((int)pcVar12 + -1);\n            uVar10 = (local_40 + (int)pcVar12)[1];\n            if (uVar13 == 0) {\n              local_44[(int)pcVar12 + 1] = uVar10;\n              if (pcVar12 == (code *)0x1) break;\n              local_48 = (code *)((int)pcVar12 + -2);\n              uVar10 = local_40[(int)pcVar12];\n              pcVar5 = local_48;\n            }\n            else {\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }\n            local_44[(int)pcVar5 + 2] = uVar10;\n            pcVar12 = local_48;\n          } while (local_48 != (code *)0x0);\n          local_44[1] = local_44[1] + local_40[1];\n        }\n        local_40 = (uint *)local_54;\n        (*(code *)PTR_free_004c5c18)(local_54);\n      }" if (parenthesized_expression "(local_54 == (int *)0x0)" ( (binary_expression "local_54 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        FUN_003ec50c(param_1,pcVar9,local_58);\n      }" { (expression_statement "FUN_003ec50c(param_1,pcVar9,local_58);" (call_expression "FUN_003ec50c(param_1,pcVar9,local_58)" identifier (argument_list "(param_1,pcVar9,local_58)" ( identifier , identifier , identifier ))) ;) }) (else_clause "else {\n        local_38 = (code *)local_58[1];\n        if (local_38 == (code *)0x0) {\n          iVar7 = 0;\n          uVar13 = 0;\n        }\n        else {\n          piVar17 = local_54 + 2;\n          local_34 = local_58 + (int)local_38 + 1;\n          puVar11 = (uint *)(PTR_DAT_004c256c + -0x15d0);\n          local_48 = (code *)(local_58 + 2);\n          *piVar17 = (int)puVar11;\n          local_44 = (uint *)local_48;\n          local_40 = (uint *)piVar17;\n          puVar18 = (uint *)local_48;\n          puVar16 = (uint *)local_48;\n          if (local_48 != (code *)local_34) {\n            do {\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            } while (puVar18 != local_34);\n          }\n          iVar7 = 0;\n          uVar13 = 0;\n          uVar15 = 0;\n          puVar18 = local_44;\n          do {\n            while (local_44 = puVar18, *piVar17 == 0) {\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }\n            iVar3 = uVar13 + 2;\n            uVar15 = uVar15 + 1;\n            uVar13 = uVar13 + 1;\n            *(uint *)((int)local_3c + iVar3 * 4) = *local_44;\n            piVar17 = piVar17 + 1;\n            puVar18 = local_44 + 1;\n          } while (local_38 != (code *)uVar15);\nLAB_003edef4:\n          local_44 = local_44 + 1;\n        }\n        local_30[1] = uVar13;\n        piVar8[1] = iVar7;\n        local_3c = (code *)local_58;\n        if (local_58[1] + local_54[1] != uVar10) goto LAB_003ee148;\n        FUN_003ec50c(param_1,pcVar9);\n        local_40 = (uint *)local_54;\n        if ((uint *)local_54[1] != (uint *)0x0) {\n          local_44 = local_58;\n          uVar13 = local_58[1];\n          pcVar12 = (code *)local_54[1];\n          do {\n            local_48 = (code *)((int)pcVar12 + -1);\n            uVar10 = (local_40 + (int)pcVar12)[1];\n            if (uVar13 == 0) {\n              local_44[(int)pcVar12 + 1] = uVar10;\n              if (pcVar12 == (code *)0x1) break;\n              local_48 = (code *)((int)pcVar12 + -2);\n              uVar10 = local_40[(int)pcVar12];\n              pcVar5 = local_48;\n            }\n            else {\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }\n            local_44[(int)pcVar5 + 2] = uVar10;\n            pcVar12 = local_48;\n          } while (local_48 != (code *)0x0);\n          local_44[1] = local_44[1] + local_40[1];\n        }\n        local_40 = (uint *)local_54;\n        (*(code *)PTR_free_004c5c18)(local_54);\n      }" else (compound_statement "{\n        local_38 = (code *)local_58[1];\n        if (local_38 == (code *)0x0) {\n          iVar7 = 0;\n          uVar13 = 0;\n        }\n        else {\n          piVar17 = local_54 + 2;\n          local_34 = local_58 + (int)local_38 + 1;\n          puVar11 = (uint *)(PTR_DAT_004c256c + -0x15d0);\n          local_48 = (code *)(local_58 + 2);\n          *piVar17 = (int)puVar11;\n          local_44 = (uint *)local_48;\n          local_40 = (uint *)piVar17;\n          puVar18 = (uint *)local_48;\n          puVar16 = (uint *)local_48;\n          if (local_48 != (code *)local_34) {\n            do {\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            } while (puVar18 != local_34);\n          }\n          iVar7 = 0;\n          uVar13 = 0;\n          uVar15 = 0;\n          puVar18 = local_44;\n          do {\n            while (local_44 = puVar18, *piVar17 == 0) {\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }\n            iVar3 = uVar13 + 2;\n            uVar15 = uVar15 + 1;\n            uVar13 = uVar13 + 1;\n            *(uint *)((int)local_3c + iVar3 * 4) = *local_44;\n            piVar17 = piVar17 + 1;\n            puVar18 = local_44 + 1;\n          } while (local_38 != (code *)uVar15);\nLAB_003edef4:\n          local_44 = local_44 + 1;\n        }\n        local_30[1] = uVar13;\n        piVar8[1] = iVar7;\n        local_3c = (code *)local_58;\n        if (local_58[1] + local_54[1] != uVar10) goto LAB_003ee148;\n        FUN_003ec50c(param_1,pcVar9);\n        local_40 = (uint *)local_54;\n        if ((uint *)local_54[1] != (uint *)0x0) {\n          local_44 = local_58;\n          uVar13 = local_58[1];\n          pcVar12 = (code *)local_54[1];\n          do {\n            local_48 = (code *)((int)pcVar12 + -1);\n            uVar10 = (local_40 + (int)pcVar12)[1];\n            if (uVar13 == 0) {\n              local_44[(int)pcVar12 + 1] = uVar10;\n              if (pcVar12 == (code *)0x1) break;\n              local_48 = (code *)((int)pcVar12 + -2);\n              uVar10 = local_40[(int)pcVar12];\n              pcVar5 = local_48;\n            }\n            else {\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }\n            local_44[(int)pcVar5 + 2] = uVar10;\n            pcVar12 = local_48;\n          } while (local_48 != (code *)0x0);\n          local_44[1] = local_44[1] + local_40[1];\n        }\n        local_40 = (uint *)local_54;\n        (*(code *)PTR_free_004c5c18)(local_54);\n      }" { (expression_statement "local_38 = (code *)local_58[1];" (assignment_expression "local_38 = (code *)local_58[1]" identifier = (cast_expression "(code *)local_58[1]" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "local_58[1]" identifier [ number_literal ]))) ;) (if_statement "if (local_38 == (code *)0x0) {\n          iVar7 = 0;\n          uVar13 = 0;\n        }\n        else {\n          piVar17 = local_54 + 2;\n          local_34 = local_58 + (int)local_38 + 1;\n          puVar11 = (uint *)(PTR_DAT_004c256c + -0x15d0);\n          local_48 = (code *)(local_58 + 2);\n          *piVar17 = (int)puVar11;\n          local_44 = (uint *)local_48;\n          local_40 = (uint *)piVar17;\n          puVar18 = (uint *)local_48;\n          puVar16 = (uint *)local_48;\n          if (local_48 != (code *)local_34) {\n            do {\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            } while (puVar18 != local_34);\n          }\n          iVar7 = 0;\n          uVar13 = 0;\n          uVar15 = 0;\n          puVar18 = local_44;\n          do {\n            while (local_44 = puVar18, *piVar17 == 0) {\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }\n            iVar3 = uVar13 + 2;\n            uVar15 = uVar15 + 1;\n            uVar13 = uVar13 + 1;\n            *(uint *)((int)local_3c + iVar3 * 4) = *local_44;\n            piVar17 = piVar17 + 1;\n            puVar18 = local_44 + 1;\n          } while (local_38 != (code *)uVar15);\nLAB_003edef4:\n          local_44 = local_44 + 1;\n        }" if (parenthesized_expression "(local_38 == (code *)0x0)" ( (binary_expression "local_38 == (code *)0x0" identifier == (cast_expression "(code *)0x0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          iVar7 = 0;\n          uVar13 = 0;\n        }" { (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" identifier = number_literal) ;) (expression_statement "uVar13 = 0;" (assignment_expression "uVar13 = 0" identifier = number_literal) ;) }) (else_clause "else {\n          piVar17 = local_54 + 2;\n          local_34 = local_58 + (int)local_38 + 1;\n          puVar11 = (uint *)(PTR_DAT_004c256c + -0x15d0);\n          local_48 = (code *)(local_58 + 2);\n          *piVar17 = (int)puVar11;\n          local_44 = (uint *)local_48;\n          local_40 = (uint *)piVar17;\n          puVar18 = (uint *)local_48;\n          puVar16 = (uint *)local_48;\n          if (local_48 != (code *)local_34) {\n            do {\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            } while (puVar18 != local_34);\n          }\n          iVar7 = 0;\n          uVar13 = 0;\n          uVar15 = 0;\n          puVar18 = local_44;\n          do {\n            while (local_44 = puVar18, *piVar17 == 0) {\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }\n            iVar3 = uVar13 + 2;\n            uVar15 = uVar15 + 1;\n            uVar13 = uVar13 + 1;\n            *(uint *)((int)local_3c + iVar3 * 4) = *local_44;\n            piVar17 = piVar17 + 1;\n            puVar18 = local_44 + 1;\n          } while (local_38 != (code *)uVar15);\nLAB_003edef4:\n          local_44 = local_44 + 1;\n        }" else (compound_statement "{\n          piVar17 = local_54 + 2;\n          local_34 = local_58 + (int)local_38 + 1;\n          puVar11 = (uint *)(PTR_DAT_004c256c + -0x15d0);\n          local_48 = (code *)(local_58 + 2);\n          *piVar17 = (int)puVar11;\n          local_44 = (uint *)local_48;\n          local_40 = (uint *)piVar17;\n          puVar18 = (uint *)local_48;\n          puVar16 = (uint *)local_48;\n          if (local_48 != (code *)local_34) {\n            do {\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            } while (puVar18 != local_34);\n          }\n          iVar7 = 0;\n          uVar13 = 0;\n          uVar15 = 0;\n          puVar18 = local_44;\n          do {\n            while (local_44 = puVar18, *piVar17 == 0) {\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }\n            iVar3 = uVar13 + 2;\n            uVar15 = uVar15 + 1;\n            uVar13 = uVar13 + 1;\n            *(uint *)((int)local_3c + iVar3 * 4) = *local_44;\n            piVar17 = piVar17 + 1;\n            puVar18 = local_44 + 1;\n          } while (local_38 != (code *)uVar15);\nLAB_003edef4:\n          local_44 = local_44 + 1;\n        }" { (expression_statement "piVar17 = local_54 + 2;" (assignment_expression "piVar17 = local_54 + 2" identifier = (binary_expression "local_54 + 2" identifier + number_literal)) ;) (expression_statement "local_34 = local_58 + (int)local_38 + 1;" (assignment_expression "local_34 = local_58 + (int)local_38 + 1" identifier = (binary_expression "local_58 + (int)local_38 + 1" (binary_expression "local_58 + (int)local_38" identifier + (cast_expression "(int)local_38" ( (type_descriptor "int" primitive_type) ) identifier)) + number_literal)) ;) (expression_statement "puVar11 = (uint *)(PTR_DAT_004c256c + -0x15d0);" (assignment_expression "puVar11 = (uint *)(PTR_DAT_004c256c + -0x15d0)" identifier = (cast_expression "(uint *)(PTR_DAT_004c256c + -0x15d0)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_004c256c + -0x15d0)" ( (binary_expression "PTR_DAT_004c256c + -0x15d0" identifier + number_literal) )))) ;) (expression_statement "local_48 = (code *)(local_58 + 2);" (assignment_expression "local_48 = (code *)(local_58 + 2)" identifier = (cast_expression "(code *)(local_58 + 2)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_58 + 2)" ( (binary_expression "local_58 + 2" identifier + number_literal) )))) ;) (expression_statement "*piVar17 = (int)puVar11;" (assignment_expression "*piVar17 = (int)puVar11" (pointer_expression "*piVar17" * identifier) = (cast_expression "(int)puVar11" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "local_44 = (uint *)local_48;" (assignment_expression "local_44 = (uint *)local_48" identifier = (cast_expression "(uint *)local_48" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "local_40 = (uint *)piVar17;" (assignment_expression "local_40 = (uint *)piVar17" identifier = (cast_expression "(uint *)piVar17" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "puVar18 = (uint *)local_48;" (assignment_expression "puVar18 = (uint *)local_48" identifier = (cast_expression "(uint *)local_48" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "puVar16 = (uint *)local_48;" (assignment_expression "puVar16 = (uint *)local_48" identifier = (cast_expression "(uint *)local_48" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (if_statement "if (local_48 != (code *)local_34) {\n            do {\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            } while (puVar18 != local_34);\n          }" if (parenthesized_expression "(local_48 != (code *)local_34)" ( (binary_expression "local_48 != (code *)local_34" identifier != (cast_expression "(code *)local_34" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (compound_statement "{\n            do {\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            } while (puVar18 != local_34);\n          }" { (do_statement "do {\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            } while (puVar18 != local_34);" do (compound_statement "{\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            }" { (while_statement "while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }" while (parenthesized_expression "((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    )" ( (parenthesized_expression "(puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))" ( (comma_expression "puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0)" (assignment_expression "puVar19 = puVar11" identifier = identifier) , (binary_expression "puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0)" (binary_expression "puVar11 != puVar18" identifier != identifier) && (parenthesized_expression "(iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0)" ( (comma_expression "iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0" (assignment_expression "iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18)" identifier = (call_expression "(*pcVar9)(param_1,puVar16[1],*puVar18)" (parenthesized_expression "(*pcVar9)" ( (pointer_expression "*pcVar9" * identifier) )) (argument_list "(param_1,puVar16[1],*puVar18)" ( identifier , (subscript_expression "puVar16[1]" identifier [ number_literal ]) , (pointer_expression "*puVar18" * identifier) )))) , (comma_expression "puVar19 = puVar18, iVar7 < 0" (assignment_expression "puVar19 = puVar18" identifier = identifier) , (binary_expression "iVar7 < 0" identifier < number_literal))) )))) )) )) (compound_statement "{\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }" { (expression_statement "puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));" (assignment_expression "puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48))" identifier = (pointer_expression "*(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48))" * (cast_expression "(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48))" ( (type_descriptor "uint **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "((int)piVar8 + (int)puVar18 + (8 - (int)local_48))" ( (binary_expression "(int)piVar8 + (int)puVar18 + (8 - (int)local_48)" (binary_expression "(int)piVar8 + (int)puVar18" (cast_expression "(int)piVar8" ( (type_descriptor "int" primitive_type) ) identifier) + (cast_expression "(int)puVar18" ( (type_descriptor "int" primitive_type) ) identifier)) + (parenthesized_expression "(8 - (int)local_48)" ( (binary_expression "8 - (int)local_48" number_literal - (cast_expression "(int)local_48" ( (type_descriptor "int" primitive_type) ) identifier)) ))) ))))) ;) (expression_statement "*(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;" (assignment_expression "*(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0" (pointer_expression "*(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48))" * (cast_expression "(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48))" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)piVar8 + (int)puVar18 + (8 - (int)local_48))" ( (binary_expression "(int)piVar8 + (int)puVar18 + (8 - (int)local_48)" (binary_expression "(int)piVar8 + (int)puVar18" (cast_expression "(int)piVar8" ( (type_descriptor "int" primitive_type) ) identifier) + (cast_expression "(int)puVar18" ( (type_descriptor "int" primitive_type) ) identifier)) + (parenthesized_expression "(8 - (int)local_48)" ( (binary_expression "8 - (int)local_48" number_literal - (cast_expression "(int)local_48" ( (type_descriptor "int" primitive_type) ) identifier)) ))) )))) = number_literal) ;) (expression_statement "puVar18 = puVar19;" (assignment_expression "puVar18 = puVar19" identifier = identifier) ;) })) (expression_statement "local_40 = (uint *)((int *)local_40 + 1);" (assignment_expression "local_40 = (uint *)((int *)local_40 + 1)" identifier = (cast_expression "(uint *)((int *)local_40 + 1)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int *)local_40 + 1)" ( (binary_expression "(int *)local_40 + 1" (cast_expression "(int *)local_40" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) + number_literal) )))) ;) (expression_statement "puVar18 = puVar16 + 1;" (assignment_expression "puVar18 = puVar16 + 1" identifier = (binary_expression "puVar16 + 1" identifier + number_literal)) ;) (expression_statement "*local_40 = (uint)puVar19;" (assignment_expression "*local_40 = (uint)puVar19" (pointer_expression "*local_40" * identifier) = (cast_expression "(uint)puVar19" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "puVar16 = puVar18;" (assignment_expression "puVar16 = puVar18" identifier = identifier) ;) }) while (parenthesized_expression "(puVar18 != local_34)" ( (binary_expression "puVar18 != local_34" identifier != identifier) )) ;) })) (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" identifier = number_literal) ;) (expression_statement "uVar13 = 0;" (assignment_expression "uVar13 = 0" identifier = number_literal) ;) (expression_statement "uVar15 = 0;" (assignment_expression "uVar15 = 0" identifier = number_literal) ;) (expression_statement "puVar18 = local_44;" (assignment_expression "puVar18 = local_44" identifier = identifier) ;) (do_statement "do {\n            while (local_44 = puVar18, *piVar17 == 0) {\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }\n            iVar3 = uVar13 + 2;\n            uVar15 = uVar15 + 1;\n            uVar13 = uVar13 + 1;\n            *(uint *)((int)local_3c + iVar3 * 4) = *local_44;\n            piVar17 = piVar17 + 1;\n            puVar18 = local_44 + 1;\n          } while (local_38 != (code *)uVar15);" do (compound_statement "{\n            while (local_44 = puVar18, *piVar17 == 0) {\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }\n            iVar3 = uVar13 + 2;\n            uVar15 = uVar15 + 1;\n            uVar13 = uVar13 + 1;\n            *(uint *)((int)local_3c + iVar3 * 4) = *local_44;\n            piVar17 = piVar17 + 1;\n            puVar18 = local_44 + 1;\n          }" { (while_statement "while (local_44 = puVar18, *piVar17 == 0) {\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }" while (parenthesized_expression "(local_44 = puVar18, *piVar17 == 0)" ( (comma_expression "local_44 = puVar18, *piVar17 == 0" (assignment_expression "local_44 = puVar18" identifier = identifier) , (binary_expression "*piVar17 == 0" (pointer_expression "*piVar17" * identifier) == number_literal)) )) (compound_statement "{\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }" { (expression_statement "iVar3 = iVar7 + 2;" (assignment_expression "iVar3 = iVar7 + 2" identifier = (binary_expression "iVar7 + 2" identifier + number_literal)) ;) (expression_statement "uVar15 = uVar15 + 1;" (assignment_expression "uVar15 = uVar15 + 1" identifier = (binary_expression "uVar15 + 1" identifier + number_literal)) ;) (expression_statement "iVar7 = iVar7 + 1;" (assignment_expression "iVar7 = iVar7 + 1" identifier = (binary_expression "iVar7 + 1" identifier + number_literal)) ;) (expression_statement "piVar8[iVar3] = *local_44;" (assignment_expression "piVar8[iVar3] = *local_44" (subscript_expression "piVar8[iVar3]" identifier [ identifier ]) = (pointer_expression "*local_44" * identifier)) ;) (expression_statement "piVar17 = piVar17 + 1;" (assignment_expression "piVar17 = piVar17 + 1" identifier = (binary_expression "piVar17 + 1" identifier + number_literal)) ;) (expression_statement "puVar18 = local_44 + 1;" (assignment_expression "puVar18 = local_44 + 1" identifier = (binary_expression "local_44 + 1" identifier + number_literal)) ;) (if_statement "if (local_38 == (code *)uVar15) goto LAB_003edef4;" if (parenthesized_expression "(local_38 == (code *)uVar15)" ( (binary_expression "local_38 == (code *)uVar15" identifier == (cast_expression "(code *)uVar15" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (goto_statement "goto LAB_003edef4;" goto statement_identifier ;)) })) (expression_statement "iVar3 = uVar13 + 2;" (assignment_expression "iVar3 = uVar13 + 2" identifier = (binary_expression "uVar13 + 2" identifier + number_literal)) ;) (expression_statement "uVar15 = uVar15 + 1;" (assignment_expression "uVar15 = uVar15 + 1" identifier = (binary_expression "uVar15 + 1" identifier + number_literal)) ;) (expression_statement "uVar13 = uVar13 + 1;" (assignment_expression "uVar13 = uVar13 + 1" identifier = (binary_expression "uVar13 + 1" identifier + number_literal)) ;) (expression_statement "*(uint *)((int)local_3c + iVar3 * 4) = *local_44;" (assignment_expression "*(uint *)((int)local_3c + iVar3 * 4) = *local_44" (pointer_expression "*(uint *)((int)local_3c + iVar3 * 4)" * (cast_expression "(uint *)((int)local_3c + iVar3 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)local_3c + iVar3 * 4)" ( (binary_expression "(int)local_3c + iVar3 * 4" (cast_expression "(int)local_3c" ( (type_descriptor "int" primitive_type) ) identifier) + (binary_expression "iVar3 * 4" identifier * number_literal)) )))) = (pointer_expression "*local_44" * identifier)) ;) (expression_statement "piVar17 = piVar17 + 1;" (assignment_expression "piVar17 = piVar17 + 1" identifier = (binary_expression "piVar17 + 1" identifier + number_literal)) ;) (expression_statement "puVar18 = local_44 + 1;" (assignment_expression "puVar18 = local_44 + 1" identifier = (binary_expression "local_44 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(local_38 != (code *)uVar15)" ( (binary_expression "local_38 != (code *)uVar15" identifier != (cast_expression "(code *)uVar15" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) ;) (labeled_statement "LAB_003edef4:\n          local_44 = local_44 + 1;" statement_identifier : (expression_statement "local_44 = local_44 + 1;" (assignment_expression "local_44 = local_44 + 1" identifier = (binary_expression "local_44 + 1" identifier + number_literal)) ;)) }))) (expression_statement "local_30[1] = uVar13;" (assignment_expression "local_30[1] = uVar13" (subscript_expression "local_30[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "piVar8[1] = iVar7;" (assignment_expression "piVar8[1] = iVar7" (subscript_expression "piVar8[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "local_3c = (code *)local_58;" (assignment_expression "local_3c = (code *)local_58" identifier = (cast_expression "(code *)local_58" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (if_statement "if (local_58[1] + local_54[1] != uVar10) goto LAB_003ee148;" if (parenthesized_expression "(local_58[1] + local_54[1] != uVar10)" ( (binary_expression "local_58[1] + local_54[1] != uVar10" (binary_expression "local_58[1] + local_54[1]" (subscript_expression "local_58[1]" identifier [ number_literal ]) + (subscript_expression "local_54[1]" identifier [ number_literal ])) != identifier) )) (goto_statement "goto LAB_003ee148;" goto statement_identifier ;)) (expression_statement "FUN_003ec50c(param_1,pcVar9);" (call_expression "FUN_003ec50c(param_1,pcVar9)" identifier (argument_list "(param_1,pcVar9)" ( identifier , identifier ))) ;) (expression_statement "local_40 = (uint *)local_54;" (assignment_expression "local_40 = (uint *)local_54" identifier = (cast_expression "(uint *)local_54" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (if_statement "if ((uint *)local_54[1] != (uint *)0x0) {\n          local_44 = local_58;\n          uVar13 = local_58[1];\n          pcVar12 = (code *)local_54[1];\n          do {\n            local_48 = (code *)((int)pcVar12 + -1);\n            uVar10 = (local_40 + (int)pcVar12)[1];\n            if (uVar13 == 0) {\n              local_44[(int)pcVar12 + 1] = uVar10;\n              if (pcVar12 == (code *)0x1) break;\n              local_48 = (code *)((int)pcVar12 + -2);\n              uVar10 = local_40[(int)pcVar12];\n              pcVar5 = local_48;\n            }\n            else {\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }\n            local_44[(int)pcVar5 + 2] = uVar10;\n            pcVar12 = local_48;\n          } while (local_48 != (code *)0x0);\n          local_44[1] = local_44[1] + local_40[1];\n        }" if (parenthesized_expression "((uint *)local_54[1] != (uint *)0x0)" ( (binary_expression "(uint *)local_54[1] != (uint *)0x0" (cast_expression "(uint *)local_54[1]" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "local_54[1]" identifier [ number_literal ])) != (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          local_44 = local_58;\n          uVar13 = local_58[1];\n          pcVar12 = (code *)local_54[1];\n          do {\n            local_48 = (code *)((int)pcVar12 + -1);\n            uVar10 = (local_40 + (int)pcVar12)[1];\n            if (uVar13 == 0) {\n              local_44[(int)pcVar12 + 1] = uVar10;\n              if (pcVar12 == (code *)0x1) break;\n              local_48 = (code *)((int)pcVar12 + -2);\n              uVar10 = local_40[(int)pcVar12];\n              pcVar5 = local_48;\n            }\n            else {\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }\n            local_44[(int)pcVar5 + 2] = uVar10;\n            pcVar12 = local_48;\n          } while (local_48 != (code *)0x0);\n          local_44[1] = local_44[1] + local_40[1];\n        }" { (expression_statement "local_44 = local_58;" (assignment_expression "local_44 = local_58" identifier = identifier) ;) (expression_statement "uVar13 = local_58[1];" (assignment_expression "uVar13 = local_58[1]" identifier = (subscript_expression "local_58[1]" identifier [ number_literal ])) ;) (expression_statement "pcVar12 = (code *)local_54[1];" (assignment_expression "pcVar12 = (code *)local_54[1]" identifier = (cast_expression "(code *)local_54[1]" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "local_54[1]" identifier [ number_literal ]))) ;) (do_statement "do {\n            local_48 = (code *)((int)pcVar12 + -1);\n            uVar10 = (local_40 + (int)pcVar12)[1];\n            if (uVar13 == 0) {\n              local_44[(int)pcVar12 + 1] = uVar10;\n              if (pcVar12 == (code *)0x1) break;\n              local_48 = (code *)((int)pcVar12 + -2);\n              uVar10 = local_40[(int)pcVar12];\n              pcVar5 = local_48;\n            }\n            else {\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }\n            local_44[(int)pcVar5 + 2] = uVar10;\n            pcVar12 = local_48;\n          } while (local_48 != (code *)0x0);" do (compound_statement "{\n            local_48 = (code *)((int)pcVar12 + -1);\n            uVar10 = (local_40 + (int)pcVar12)[1];\n            if (uVar13 == 0) {\n              local_44[(int)pcVar12 + 1] = uVar10;\n              if (pcVar12 == (code *)0x1) break;\n              local_48 = (code *)((int)pcVar12 + -2);\n              uVar10 = local_40[(int)pcVar12];\n              pcVar5 = local_48;\n            }\n            else {\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }\n            local_44[(int)pcVar5 + 2] = uVar10;\n            pcVar12 = local_48;\n          }" { (expression_statement "local_48 = (code *)((int)pcVar12 + -1);" (assignment_expression "local_48 = (code *)((int)pcVar12 + -1)" identifier = (cast_expression "(code *)((int)pcVar12 + -1)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pcVar12 + -1)" ( (binary_expression "(int)pcVar12 + -1" (cast_expression "(int)pcVar12" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) ;) (expression_statement "uVar10 = (local_40 + (int)pcVar12)[1];" (assignment_expression "uVar10 = (local_40 + (int)pcVar12)[1]" identifier = (subscript_expression "(local_40 + (int)pcVar12)[1]" (parenthesized_expression "(local_40 + (int)pcVar12)" ( (binary_expression "local_40 + (int)pcVar12" identifier + (cast_expression "(int)pcVar12" ( (type_descriptor "int" primitive_type) ) identifier)) )) [ number_literal ])) ;) (if_statement "if (uVar13 == 0) {\n              local_44[(int)pcVar12 + 1] = uVar10;\n              if (pcVar12 == (code *)0x1) break;\n              local_48 = (code *)((int)pcVar12 + -2);\n              uVar10 = local_40[(int)pcVar12];\n              pcVar5 = local_48;\n            }\n            else {\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }" if (parenthesized_expression "(uVar13 == 0)" ( (binary_expression "uVar13 == 0" identifier == number_literal) )) (compound_statement "{\n              local_44[(int)pcVar12 + 1] = uVar10;\n              if (pcVar12 == (code *)0x1) break;\n              local_48 = (code *)((int)pcVar12 + -2);\n              uVar10 = local_40[(int)pcVar12];\n              pcVar5 = local_48;\n            }" { (expression_statement "local_44[(int)pcVar12 + 1] = uVar10;" (assignment_expression "local_44[(int)pcVar12 + 1] = uVar10" (subscript_expression "local_44[(int)pcVar12 + 1]" identifier [ (binary_expression "(int)pcVar12 + 1" (cast_expression "(int)pcVar12" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) ]) = identifier) ;) (if_statement "if (pcVar12 == (code *)0x1) break;" if (parenthesized_expression "(pcVar12 == (code *)0x1)" ( (binary_expression "pcVar12 == (code *)0x1" identifier == (cast_expression "(code *)0x1" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (break_statement "break;" break ;)) (expression_statement "local_48 = (code *)((int)pcVar12 + -2);" (assignment_expression "local_48 = (code *)((int)pcVar12 + -2)" identifier = (cast_expression "(code *)((int)pcVar12 + -2)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pcVar12 + -2)" ( (binary_expression "(int)pcVar12 + -2" (cast_expression "(int)pcVar12" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) ;) (expression_statement "uVar10 = local_40[(int)pcVar12];" (assignment_expression "uVar10 = local_40[(int)pcVar12]" identifier = (subscript_expression "local_40[(int)pcVar12]" identifier [ (cast_expression "(int)pcVar12" ( (type_descriptor "int" primitive_type) ) identifier) ])) ;) (expression_statement "pcVar5 = local_48;" (assignment_expression "pcVar5 = local_48" identifier = identifier) ;) }) (else_clause "else {\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }" else (compound_statement "{\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }" { (expression_statement "puVar18 = local_44 + uVar13;" (assignment_expression "puVar18 = local_44 + uVar13" identifier = (binary_expression "local_44 + uVar13" identifier + identifier)) ;) (do_statement "do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);" do (compound_statement "{\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              }" { (expression_statement "uVar15 = uVar13 - 1;" (assignment_expression "uVar15 = uVar13 - 1" identifier = (binary_expression "uVar13 - 1" identifier - number_literal)) ;) (expression_statement "iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);" (assignment_expression "iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10)" identifier = (call_expression "(*pcVar9)(param_1,puVar18[1],uVar10)" (parenthesized_expression "(*pcVar9)" ( (pointer_expression "*pcVar9" * identifier) )) (argument_list "(param_1,puVar18[1],uVar10)" ( identifier , (subscript_expression "puVar18[1]" identifier [ number_literal ]) , identifier )))) ;) (expression_statement "pcVar5 = (code *)((int)pcVar12 + uVar15);" (assignment_expression "pcVar5 = (code *)((int)pcVar12 + uVar15)" identifier = (cast_expression "(code *)((int)pcVar12 + uVar15)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pcVar12 + uVar15)" ( (binary_expression "(int)pcVar12 + uVar15" (cast_expression "(int)pcVar12" ( (type_descriptor "int" primitive_type) ) identifier) + identifier) )))) ;) (if_statement "if (iVar7 < 1) break;" if (parenthesized_expression "(iVar7 < 1)" ( (binary_expression "iVar7 < 1" identifier < number_literal) )) (break_statement "break;" break ;)) (expression_statement "puVar18[(int)pcVar12 + 1] = puVar18[1];" (assignment_expression "puVar18[(int)pcVar12 + 1] = puVar18[1]" (subscript_expression "puVar18[(int)pcVar12 + 1]" identifier [ (binary_expression "(int)pcVar12 + 1" (cast_expression "(int)pcVar12" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) ]) = (subscript_expression "puVar18[1]" identifier [ number_literal ])) ;) (expression_statement "pcVar5 = local_48;" (assignment_expression "pcVar5 = local_48" identifier = identifier) ;) (expression_statement "puVar18 = puVar18 + -1;" (assignment_expression "puVar18 = puVar18 + -1" identifier = (binary_expression "puVar18 + -1" identifier + number_literal)) ;) (expression_statement "uVar13 = uVar15;" (assignment_expression "uVar13 = uVar15" identifier = identifier) ;) }) while (parenthesized_expression "(uVar15 != 0)" ( (binary_expression "uVar15 != 0" identifier != number_literal) )) ;) }))) (expression_statement "local_44[(int)pcVar5 + 2] = uVar10;" (assignment_expression "local_44[(int)pcVar5 + 2] = uVar10" (subscript_expression "local_44[(int)pcVar5 + 2]" identifier [ (binary_expression "(int)pcVar5 + 2" (cast_expression "(int)pcVar5" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) ]) = identifier) ;) (expression_statement "pcVar12 = local_48;" (assignment_expression "pcVar12 = local_48" identifier = identifier) ;) }) while (parenthesized_expression "(local_48 != (code *)0x0)" ( (binary_expression "local_48 != (code *)0x0" identifier != (cast_expression "(code *)0x0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) ;) (expression_statement "local_44[1] = local_44[1] + local_40[1];" (assignment_expression "local_44[1] = local_44[1] + local_40[1]" (subscript_expression "local_44[1]" identifier [ number_literal ]) = (binary_expression "local_44[1] + local_40[1]" (subscript_expression "local_44[1]" identifier [ number_literal ]) + (subscript_expression "local_40[1]" identifier [ number_literal ]))) ;) })) (expression_statement "local_40 = (uint *)local_54;" (assignment_expression "local_40 = (uint *)local_54" identifier = (cast_expression "(uint *)local_54" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "(*(code *)PTR_free_004c5c18)(local_54);" (call_expression "(*(code *)PTR_free_004c5c18)(local_54)" (parenthesized_expression "(*(code *)PTR_free_004c5c18)" ( (pointer_expression "*(code *)PTR_free_004c5c18" * (cast_expression "(code *)PTR_free_004c5c18" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(local_54)" ( identifier ))) ;) }))) (expression_statement "*local_58 = param_1[3];" (assignment_expression "*local_58 = param_1[3]" (pointer_expression "*local_58" * identifier) = (subscript_expression "param_1[3]" identifier [ number_literal ])) ;) (expression_statement "param_1[3] = (uint)local_58;" (assignment_expression "param_1[3] = (uint)local_58" (subscript_expression "param_1[3]" identifier [ number_literal ]) = (cast_expression "(uint)local_58" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "param_1[4] = param_1[4] & 0x7fffffff | 0x80000000;" (assignment_expression "param_1[4] = param_1[4] & 0x7fffffff | 0x80000000" (subscript_expression "param_1[4]" identifier [ number_literal ]) = (binary_expression "param_1[4] & 0x7fffffff | 0x80000000" (binary_expression "param_1[4] & 0x7fffffff" (subscript_expression "param_1[4]" identifier [ number_literal ]) & number_literal) | number_literal)) ;) })) }))) (if_statement "if (param_2 < (undefined *)*param_1) {\n    return 0;\n  }" if (parenthesized_expression "(param_2 < (undefined *)*param_1)" ( (binary_expression "param_2 < (undefined *)*param_1" identifier < (cast_expression "(undefined *)*param_1" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "uVar13 = param_1[4];" (assignment_expression "uVar13 = param_1[4]" identifier = (subscript_expression "param_1[4]" identifier [ number_literal ])) ;) (expression_statement "piVar8 = (int *)param_1[3];" (assignment_expression "piVar8 = (int *)param_1[3]" identifier = (cast_expression "(int *)param_1[3]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[3]" identifier [ number_literal ]))) ;) (if_statement "if (-1 < (int)uVar13) {\n    if (-1 < (int)(uVar13 << 1)) {\n      iVar7 = FUN_003ecb9c(param_1,piVar8,param_2);\n      return iVar7;\n    }\n    iVar7 = *piVar8;\n    while( true ) {\n      if (iVar7 == 0) {\n        return 0;\n      }\n      iVar7 = FUN_003ecb9c(param_1,iVar7,param_2);\n      if (iVar7 != 0) break;\n      piVar8 = piVar8 + 1;\n      iVar7 = *piVar8;\n    }\n    return iVar7;\n  }" if (parenthesized_expression "(-1 < (int)uVar13)" ( (binary_expression "-1 < (int)uVar13" number_literal < (cast_expression "(int)uVar13" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n    if (-1 < (int)(uVar13 << 1)) {\n      iVar7 = FUN_003ecb9c(param_1,piVar8,param_2);\n      return iVar7;\n    }\n    iVar7 = *piVar8;\n    while( true ) {\n      if (iVar7 == 0) {\n        return 0;\n      }\n      iVar7 = FUN_003ecb9c(param_1,iVar7,param_2);\n      if (iVar7 != 0) break;\n      piVar8 = piVar8 + 1;\n      iVar7 = *piVar8;\n    }\n    return iVar7;\n  }" { (if_statement "if (-1 < (int)(uVar13 << 1)) {\n      iVar7 = FUN_003ecb9c(param_1,piVar8,param_2);\n      return iVar7;\n    }" if (parenthesized_expression "(-1 < (int)(uVar13 << 1))" ( (binary_expression "-1 < (int)(uVar13 << 1)" number_literal < (cast_expression "(int)(uVar13 << 1)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar13 << 1)" ( (binary_expression "uVar13 << 1" identifier << number_literal) )))) )) (compound_statement "{\n      iVar7 = FUN_003ecb9c(param_1,piVar8,param_2);\n      return iVar7;\n    }" { (expression_statement "iVar7 = FUN_003ecb9c(param_1,piVar8,param_2);" (assignment_expression "iVar7 = FUN_003ecb9c(param_1,piVar8,param_2)" identifier = (call_expression "FUN_003ecb9c(param_1,piVar8,param_2)" identifier (argument_list "(param_1,piVar8,param_2)" ( identifier , identifier , identifier )))) ;) (return_statement "return iVar7;" return identifier ;) })) (expression_statement "iVar7 = *piVar8;" (assignment_expression "iVar7 = *piVar8" identifier = (pointer_expression "*piVar8" * identifier)) ;) (while_statement "while( true ) {\n      if (iVar7 == 0) {\n        return 0;\n      }\n      iVar7 = FUN_003ecb9c(param_1,iVar7,param_2);\n      if (iVar7 != 0) break;\n      piVar8 = piVar8 + 1;\n      iVar7 = *piVar8;\n    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n      if (iVar7 == 0) {\n        return 0;\n      }\n      iVar7 = FUN_003ecb9c(param_1,iVar7,param_2);\n      if (iVar7 != 0) break;\n      piVar8 = piVar8 + 1;\n      iVar7 = *piVar8;\n    }" { (if_statement "if (iVar7 == 0) {\n        return 0;\n      }" if (parenthesized_expression "(iVar7 == 0)" ( (binary_expression "iVar7 == 0" identifier == number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "iVar7 = FUN_003ecb9c(param_1,iVar7,param_2);" (assignment_expression "iVar7 = FUN_003ecb9c(param_1,iVar7,param_2)" identifier = (call_expression "FUN_003ecb9c(param_1,iVar7,param_2)" identifier (argument_list "(param_1,iVar7,param_2)" ( identifier , identifier , identifier )))) ;) (if_statement "if (iVar7 != 0) break;" if (parenthesized_expression "(iVar7 != 0)" ( (binary_expression "iVar7 != 0" identifier != number_literal) )) (break_statement "break;" break ;)) (expression_statement "piVar8 = piVar8 + 1;" (assignment_expression "piVar8 = piVar8 + 1" identifier = (binary_expression "piVar8 + 1" identifier + number_literal)) ;) (expression_statement "iVar7 = *piVar8;" (assignment_expression "iVar7 = *piVar8" identifier = (pointer_expression "*piVar8" * identifier)) ;) })) (return_statement "return iVar7;" return identifier ;) })) (labeled_statement "LAB_003ed920:\n  uVar15 = param_1[3];" statement_identifier : (expression_statement "uVar15 = param_1[3];" (assignment_expression "uVar15 = param_1[3]" identifier = (subscript_expression "param_1[3]" identifier [ number_literal ])) ;)) (expression_statement "uVar10 = *(uint *)(uVar15 + 4);" (assignment_expression "uVar10 = *(uint *)(uVar15 + 4)" identifier = (pointer_expression "*(uint *)(uVar15 + 4)" * (cast_expression "(uint *)(uVar15 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar15 + 4)" ( (binary_expression "uVar15 + 4" identifier + number_literal) ))))) ;) (if_statement "if ((uVar13 & 0x20000000) == 0) {\n    if ((uVar13 & 0x1fe00000) == 0) {\n      if (uVar10 != 0) {\n        uVar13 = 0;\n        uVar14 = uVar10;\n        while( true ) {\n          uVar6 = uVar10 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          if ((*(undefined **)(iVar7 + 8) <= param_2) &&\n             (uVar13 = uVar6 + 1, uVar6 = uVar14,\n             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc))) break;\n          if (uVar6 <= uVar13) {\n            return 0;\n          }\n          uVar10 = uVar6 + uVar13;\n          uVar14 = uVar6;\n        }\n        return iVar7;\n      }\n    }\n    else {\n      uVar13 = (uVar13 << 3) >> 0x18;\n      local_44 = (uint *)FUN_003eca18(uVar13,param_1 + 1,param_1 + 2);\n      if (uVar10 != 0) {\n        local_40 = (uint *)(uVar13 & 0xf);\n        local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n        uVar14 = 0;\n        do {\n          uVar6 = uVar10 + uVar14 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          uVar2 = (*local_48)(uVar13,local_44,iVar7 + 8,local_50);\n          (*local_48)(local_40,0,uVar2,&local_58);\n          if ((local_50[0] <= param_2) &&\n             (uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n            return iVar7;\n          }\n          uVar10 = uVar6;\n        } while (uVar14 < uVar6);\n      }\n    }\n  }\n  else {\n    local_40 = param_1 + 1;\n    if (uVar10 != 0) {\n      uVar13 = 0;\n      local_44 = param_1 + 2;\n      local_3c = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x37e0);\n      local_38 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x35e8);\n      local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n      do {\n        uVar14 = uVar13 + uVar10 >> 1;\n        iVar7 = *(int *)(uVar15 + (uVar14 + 2) * 4);\n        bVar4 = (*local_3c)((iVar7 + 4) - *(int *)(iVar7 + 4));\n        uVar2 = (*local_38)(bVar4,local_40,local_44);\n        uVar2 = (*local_48)(bVar4,uVar2,iVar7 + 8,local_50);\n        (*local_48)(bVar4 & 0xf,0,uVar2,&local_58);\n        if ((local_50[0] <= param_2) &&\n           (uVar13 = uVar14 + 1, uVar14 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n          return iVar7;\n        }\n        uVar10 = uVar14;\n      } while (uVar13 < uVar14);\n    }\n  }" if (parenthesized_expression "((uVar13 & 0x20000000) == 0)" ( (binary_expression "(uVar13 & 0x20000000) == 0" (parenthesized_expression "(uVar13 & 0x20000000)" ( (binary_expression "uVar13 & 0x20000000" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n    if ((uVar13 & 0x1fe00000) == 0) {\n      if (uVar10 != 0) {\n        uVar13 = 0;\n        uVar14 = uVar10;\n        while( true ) {\n          uVar6 = uVar10 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          if ((*(undefined **)(iVar7 + 8) <= param_2) &&\n             (uVar13 = uVar6 + 1, uVar6 = uVar14,\n             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc))) break;\n          if (uVar6 <= uVar13) {\n            return 0;\n          }\n          uVar10 = uVar6 + uVar13;\n          uVar14 = uVar6;\n        }\n        return iVar7;\n      }\n    }\n    else {\n      uVar13 = (uVar13 << 3) >> 0x18;\n      local_44 = (uint *)FUN_003eca18(uVar13,param_1 + 1,param_1 + 2);\n      if (uVar10 != 0) {\n        local_40 = (uint *)(uVar13 & 0xf);\n        local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n        uVar14 = 0;\n        do {\n          uVar6 = uVar10 + uVar14 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          uVar2 = (*local_48)(uVar13,local_44,iVar7 + 8,local_50);\n          (*local_48)(local_40,0,uVar2,&local_58);\n          if ((local_50[0] <= param_2) &&\n             (uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n            return iVar7;\n          }\n          uVar10 = uVar6;\n        } while (uVar14 < uVar6);\n      }\n    }\n  }" { (if_statement "if ((uVar13 & 0x1fe00000) == 0) {\n      if (uVar10 != 0) {\n        uVar13 = 0;\n        uVar14 = uVar10;\n        while( true ) {\n          uVar6 = uVar10 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          if ((*(undefined **)(iVar7 + 8) <= param_2) &&\n             (uVar13 = uVar6 + 1, uVar6 = uVar14,\n             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc))) break;\n          if (uVar6 <= uVar13) {\n            return 0;\n          }\n          uVar10 = uVar6 + uVar13;\n          uVar14 = uVar6;\n        }\n        return iVar7;\n      }\n    }\n    else {\n      uVar13 = (uVar13 << 3) >> 0x18;\n      local_44 = (uint *)FUN_003eca18(uVar13,param_1 + 1,param_1 + 2);\n      if (uVar10 != 0) {\n        local_40 = (uint *)(uVar13 & 0xf);\n        local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n        uVar14 = 0;\n        do {\n          uVar6 = uVar10 + uVar14 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          uVar2 = (*local_48)(uVar13,local_44,iVar7 + 8,local_50);\n          (*local_48)(local_40,0,uVar2,&local_58);\n          if ((local_50[0] <= param_2) &&\n             (uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n            return iVar7;\n          }\n          uVar10 = uVar6;\n        } while (uVar14 < uVar6);\n      }\n    }" if (parenthesized_expression "((uVar13 & 0x1fe00000) == 0)" ( (binary_expression "(uVar13 & 0x1fe00000) == 0" (parenthesized_expression "(uVar13 & 0x1fe00000)" ( (binary_expression "uVar13 & 0x1fe00000" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n      if (uVar10 != 0) {\n        uVar13 = 0;\n        uVar14 = uVar10;\n        while( true ) {\n          uVar6 = uVar10 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          if ((*(undefined **)(iVar7 + 8) <= param_2) &&\n             (uVar13 = uVar6 + 1, uVar6 = uVar14,\n             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc))) break;\n          if (uVar6 <= uVar13) {\n            return 0;\n          }\n          uVar10 = uVar6 + uVar13;\n          uVar14 = uVar6;\n        }\n        return iVar7;\n      }\n    }" { (if_statement "if (uVar10 != 0) {\n        uVar13 = 0;\n        uVar14 = uVar10;\n        while( true ) {\n          uVar6 = uVar10 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          if ((*(undefined **)(iVar7 + 8) <= param_2) &&\n             (uVar13 = uVar6 + 1, uVar6 = uVar14,\n             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc))) break;\n          if (uVar6 <= uVar13) {\n            return 0;\n          }\n          uVar10 = uVar6 + uVar13;\n          uVar14 = uVar6;\n        }\n        return iVar7;\n      }" if (parenthesized_expression "(uVar10 != 0)" ( (binary_expression "uVar10 != 0" identifier != number_literal) )) (compound_statement "{\n        uVar13 = 0;\n        uVar14 = uVar10;\n        while( true ) {\n          uVar6 = uVar10 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          if ((*(undefined **)(iVar7 + 8) <= param_2) &&\n             (uVar13 = uVar6 + 1, uVar6 = uVar14,\n             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc))) break;\n          if (uVar6 <= uVar13) {\n            return 0;\n          }\n          uVar10 = uVar6 + uVar13;\n          uVar14 = uVar6;\n        }\n        return iVar7;\n      }" { (expression_statement "uVar13 = 0;" (assignment_expression "uVar13 = 0" identifier = number_literal) ;) (expression_statement "uVar14 = uVar10;" (assignment_expression "uVar14 = uVar10" identifier = identifier) ;) (while_statement "while( true ) {\n          uVar6 = uVar10 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          if ((*(undefined **)(iVar7 + 8) <= param_2) &&\n             (uVar13 = uVar6 + 1, uVar6 = uVar14,\n             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc))) break;\n          if (uVar6 <= uVar13) {\n            return 0;\n          }\n          uVar10 = uVar6 + uVar13;\n          uVar14 = uVar6;\n        }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n          uVar6 = uVar10 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          if ((*(undefined **)(iVar7 + 8) <= param_2) &&\n             (uVar13 = uVar6 + 1, uVar6 = uVar14,\n             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc))) break;\n          if (uVar6 <= uVar13) {\n            return 0;\n          }\n          uVar10 = uVar6 + uVar13;\n          uVar14 = uVar6;\n        }" { (expression_statement "uVar6 = uVar10 >> 1;" (assignment_expression "uVar6 = uVar10 >> 1" identifier = (binary_expression "uVar10 >> 1" identifier >> number_literal)) ;) (expression_statement "iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);" (assignment_expression "iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4)" identifier = (pointer_expression "*(int *)(uVar15 + (uVar6 + 2) * 4)" * (cast_expression "(int *)(uVar15 + (uVar6 + 2) * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar15 + (uVar6 + 2) * 4)" ( (binary_expression "uVar15 + (uVar6 + 2) * 4" identifier + (binary_expression "(uVar6 + 2) * 4" (parenthesized_expression "(uVar6 + 2)" ( (binary_expression "uVar6 + 2" identifier + number_literal) )) * number_literal)) ))))) ;) (if_statement "if ((*(undefined **)(iVar7 + 8) <= param_2) &&\n             (uVar13 = uVar6 + 1, uVar6 = uVar14,\n             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc))) break;" if (parenthesized_expression "((*(undefined **)(iVar7 + 8) <= param_2) &&\n             (uVar13 = uVar6 + 1, uVar6 = uVar14,\n             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc)))" ( (binary_expression "(*(undefined **)(iVar7 + 8) <= param_2) &&\n             (uVar13 = uVar6 + 1, uVar6 = uVar14,\n             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc))" (parenthesized_expression "(*(undefined **)(iVar7 + 8) <= param_2)" ( (binary_expression "*(undefined **)(iVar7 + 8) <= param_2" (pointer_expression "*(undefined **)(iVar7 + 8)" * (cast_expression "(undefined **)(iVar7 + 8)" ( (type_descriptor "undefined **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar7 + 8)" ( (binary_expression "iVar7 + 8" identifier + number_literal) )))) <= identifier) )) && (parenthesized_expression "(uVar13 = uVar6 + 1, uVar6 = uVar14,\n             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc))" ( (comma_expression "uVar13 = uVar6 + 1, uVar6 = uVar14,\n             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc)" (assignment_expression "uVar13 = uVar6 + 1" identifier = (binary_expression "uVar6 + 1" identifier + number_literal)) , (comma_expression "uVar6 = uVar14,\n             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc)" (assignment_expression "uVar6 = uVar14" identifier = identifier) , (binary_expression "param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc)" identifier < (binary_expression "*(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc)" (pointer_expression "*(undefined **)(iVar7 + 8)" * (cast_expression "(undefined **)(iVar7 + 8)" ( (type_descriptor "undefined **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar7 + 8)" ( (binary_expression "iVar7 + 8" identifier + number_literal) )))) + (pointer_expression "*(int *)(iVar7 + 0xc)" * (cast_expression "(int *)(iVar7 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 0xc)" ( (binary_expression "iVar7 + 0xc" identifier + number_literal) )))))))) ))) )) (break_statement "break;" break ;)) (if_statement "if (uVar6 <= uVar13) {\n            return 0;\n          }" if (parenthesized_expression "(uVar6 <= uVar13)" ( (binary_expression "uVar6 <= uVar13" identifier <= identifier) )) (compound_statement "{\n            return 0;\n          }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "uVar10 = uVar6 + uVar13;" (assignment_expression "uVar10 = uVar6 + uVar13" identifier = (binary_expression "uVar6 + uVar13" identifier + identifier)) ;) (expression_statement "uVar14 = uVar6;" (assignment_expression "uVar14 = uVar6" identifier = identifier) ;) })) (return_statement "return iVar7;" return identifier ;) })) }) (else_clause "else {\n      uVar13 = (uVar13 << 3) >> 0x18;\n      local_44 = (uint *)FUN_003eca18(uVar13,param_1 + 1,param_1 + 2);\n      if (uVar10 != 0) {\n        local_40 = (uint *)(uVar13 & 0xf);\n        local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n        uVar14 = 0;\n        do {\n          uVar6 = uVar10 + uVar14 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          uVar2 = (*local_48)(uVar13,local_44,iVar7 + 8,local_50);\n          (*local_48)(local_40,0,uVar2,&local_58);\n          if ((local_50[0] <= param_2) &&\n             (uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n            return iVar7;\n          }\n          uVar10 = uVar6;\n        } while (uVar14 < uVar6);\n      }\n    }" else (compound_statement "{\n      uVar13 = (uVar13 << 3) >> 0x18;\n      local_44 = (uint *)FUN_003eca18(uVar13,param_1 + 1,param_1 + 2);\n      if (uVar10 != 0) {\n        local_40 = (uint *)(uVar13 & 0xf);\n        local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n        uVar14 = 0;\n        do {\n          uVar6 = uVar10 + uVar14 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          uVar2 = (*local_48)(uVar13,local_44,iVar7 + 8,local_50);\n          (*local_48)(local_40,0,uVar2,&local_58);\n          if ((local_50[0] <= param_2) &&\n             (uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n            return iVar7;\n          }\n          uVar10 = uVar6;\n        } while (uVar14 < uVar6);\n      }\n    }" { (expression_statement "uVar13 = (uVar13 << 3) >> 0x18;" (assignment_expression "uVar13 = (uVar13 << 3) >> 0x18" identifier = (binary_expression "(uVar13 << 3) >> 0x18" (parenthesized_expression "(uVar13 << 3)" ( (binary_expression "uVar13 << 3" identifier << number_literal) )) >> number_literal)) ;) (expression_statement "local_44 = (uint *)FUN_003eca18(uVar13,param_1 + 1,param_1 + 2);" (assignment_expression "local_44 = (uint *)FUN_003eca18(uVar13,param_1 + 1,param_1 + 2)" identifier = (cast_expression "(uint *)FUN_003eca18(uVar13,param_1 + 1,param_1 + 2)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_003eca18(uVar13,param_1 + 1,param_1 + 2)" identifier (argument_list "(uVar13,param_1 + 1,param_1 + 2)" ( identifier , (binary_expression "param_1 + 1" identifier + number_literal) , (binary_expression "param_1 + 2" identifier + number_literal) ))))) ;) (if_statement "if (uVar10 != 0) {\n        local_40 = (uint *)(uVar13 & 0xf);\n        local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n        uVar14 = 0;\n        do {\n          uVar6 = uVar10 + uVar14 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          uVar2 = (*local_48)(uVar13,local_44,iVar7 + 8,local_50);\n          (*local_48)(local_40,0,uVar2,&local_58);\n          if ((local_50[0] <= param_2) &&\n             (uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n            return iVar7;\n          }\n          uVar10 = uVar6;\n        } while (uVar14 < uVar6);\n      }" if (parenthesized_expression "(uVar10 != 0)" ( (binary_expression "uVar10 != 0" identifier != number_literal) )) (compound_statement "{\n        local_40 = (uint *)(uVar13 & 0xf);\n        local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n        uVar14 = 0;\n        do {\n          uVar6 = uVar10 + uVar14 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          uVar2 = (*local_48)(uVar13,local_44,iVar7 + 8,local_50);\n          (*local_48)(local_40,0,uVar2,&local_58);\n          if ((local_50[0] <= param_2) &&\n             (uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n            return iVar7;\n          }\n          uVar10 = uVar6;\n        } while (uVar14 < uVar6);\n      }" { (expression_statement "local_40 = (uint *)(uVar13 & 0xf);" (assignment_expression "local_40 = (uint *)(uVar13 & 0xf)" identifier = (cast_expression "(uint *)(uVar13 & 0xf)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar13 & 0xf)" ( (binary_expression "uVar13 & 0xf" identifier & number_literal) )))) ;) (expression_statement "local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);" (assignment_expression "local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968)" identifier = (cast_expression "(code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968)" ( (binary_expression "PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968" identifier + number_literal) )))) ;) (expression_statement "uVar14 = 0;" (assignment_expression "uVar14 = 0" identifier = number_literal) ;) (do_statement "do {\n          uVar6 = uVar10 + uVar14 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          uVar2 = (*local_48)(uVar13,local_44,iVar7 + 8,local_50);\n          (*local_48)(local_40,0,uVar2,&local_58);\n          if ((local_50[0] <= param_2) &&\n             (uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n            return iVar7;\n          }\n          uVar10 = uVar6;\n        } while (uVar14 < uVar6);" do (compound_statement "{\n          uVar6 = uVar10 + uVar14 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          uVar2 = (*local_48)(uVar13,local_44,iVar7 + 8,local_50);\n          (*local_48)(local_40,0,uVar2,&local_58);\n          if ((local_50[0] <= param_2) &&\n             (uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n            return iVar7;\n          }\n          uVar10 = uVar6;\n        }" { (expression_statement "uVar6 = uVar10 + uVar14 >> 1;" (assignment_expression "uVar6 = uVar10 + uVar14 >> 1" identifier = (binary_expression "uVar10 + uVar14 >> 1" (binary_expression "uVar10 + uVar14" identifier + identifier) >> number_literal)) ;) (expression_statement "iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);" (assignment_expression "iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4)" identifier = (pointer_expression "*(int *)(uVar15 + (uVar6 + 2) * 4)" * (cast_expression "(int *)(uVar15 + (uVar6 + 2) * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar15 + (uVar6 + 2) * 4)" ( (binary_expression "uVar15 + (uVar6 + 2) * 4" identifier + (binary_expression "(uVar6 + 2) * 4" (parenthesized_expression "(uVar6 + 2)" ( (binary_expression "uVar6 + 2" identifier + number_literal) )) * number_literal)) ))))) ;) (expression_statement "uVar2 = (*local_48)(uVar13,local_44,iVar7 + 8,local_50);" (assignment_expression "uVar2 = (*local_48)(uVar13,local_44,iVar7 + 8,local_50)" identifier = (call_expression "(*local_48)(uVar13,local_44,iVar7 + 8,local_50)" (parenthesized_expression "(*local_48)" ( (pointer_expression "*local_48" * identifier) )) (argument_list "(uVar13,local_44,iVar7 + 8,local_50)" ( identifier , identifier , (binary_expression "iVar7 + 8" identifier + number_literal) , identifier )))) ;) (expression_statement "(*local_48)(local_40,0,uVar2,&local_58);" (call_expression "(*local_48)(local_40,0,uVar2,&local_58)" (parenthesized_expression "(*local_48)" ( (pointer_expression "*local_48" * identifier) )) (argument_list "(local_40,0,uVar2,&local_58)" ( identifier , number_literal , identifier , (pointer_expression "&local_58" & identifier) ))) ;) (if_statement "if ((local_50[0] <= param_2) &&\n             (uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n            return iVar7;\n          }" if (parenthesized_expression "((local_50[0] <= param_2) &&\n             (uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58))" ( (binary_expression "(local_50[0] <= param_2) &&\n             (uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58)" (parenthesized_expression "(local_50[0] <= param_2)" ( (binary_expression "local_50[0] <= param_2" (subscript_expression "local_50[0]" identifier [ number_literal ]) <= identifier) )) && (parenthesized_expression "(uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58)" ( (comma_expression "uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58" (assignment_expression "uVar14 = uVar6 + 1" identifier = (binary_expression "uVar6 + 1" identifier + number_literal)) , (comma_expression "uVar6 = uVar10, param_2 < local_50[0] + (int)local_58" (assignment_expression "uVar6 = uVar10" identifier = identifier) , (binary_expression "param_2 < local_50[0] + (int)local_58" identifier < (binary_expression "local_50[0] + (int)local_58" (subscript_expression "local_50[0]" identifier [ number_literal ]) + (cast_expression "(int)local_58" ( (type_descriptor "int" primitive_type) ) identifier))))) ))) )) (compound_statement "{\n            return iVar7;\n          }" { (return_statement "return iVar7;" return identifier ;) })) (expression_statement "uVar10 = uVar6;" (assignment_expression "uVar10 = uVar6" identifier = identifier) ;) }) while (parenthesized_expression "(uVar14 < uVar6)" ( (binary_expression "uVar14 < uVar6" identifier < identifier) )) ;) })) }))) }) (else_clause "else {\n    local_40 = param_1 + 1;\n    if (uVar10 != 0) {\n      uVar13 = 0;\n      local_44 = param_1 + 2;\n      local_3c = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x37e0);\n      local_38 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x35e8);\n      local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n      do {\n        uVar14 = uVar13 + uVar10 >> 1;\n        iVar7 = *(int *)(uVar15 + (uVar14 + 2) * 4);\n        bVar4 = (*local_3c)((iVar7 + 4) - *(int *)(iVar7 + 4));\n        uVar2 = (*local_38)(bVar4,local_40,local_44);\n        uVar2 = (*local_48)(bVar4,uVar2,iVar7 + 8,local_50);\n        (*local_48)(bVar4 & 0xf,0,uVar2,&local_58);\n        if ((local_50[0] <= param_2) &&\n           (uVar13 = uVar14 + 1, uVar14 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n          return iVar7;\n        }\n        uVar10 = uVar14;\n      } while (uVar13 < uVar14);\n    }\n  }" else (compound_statement "{\n    local_40 = param_1 + 1;\n    if (uVar10 != 0) {\n      uVar13 = 0;\n      local_44 = param_1 + 2;\n      local_3c = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x37e0);\n      local_38 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x35e8);\n      local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n      do {\n        uVar14 = uVar13 + uVar10 >> 1;\n        iVar7 = *(int *)(uVar15 + (uVar14 + 2) * 4);\n        bVar4 = (*local_3c)((iVar7 + 4) - *(int *)(iVar7 + 4));\n        uVar2 = (*local_38)(bVar4,local_40,local_44);\n        uVar2 = (*local_48)(bVar4,uVar2,iVar7 + 8,local_50);\n        (*local_48)(bVar4 & 0xf,0,uVar2,&local_58);\n        if ((local_50[0] <= param_2) &&\n           (uVar13 = uVar14 + 1, uVar14 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n          return iVar7;\n        }\n        uVar10 = uVar14;\n      } while (uVar13 < uVar14);\n    }\n  }" { (expression_statement "local_40 = param_1 + 1;" (assignment_expression "local_40 = param_1 + 1" identifier = (binary_expression "param_1 + 1" identifier + number_literal)) ;) (if_statement "if (uVar10 != 0) {\n      uVar13 = 0;\n      local_44 = param_1 + 2;\n      local_3c = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x37e0);\n      local_38 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x35e8);\n      local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n      do {\n        uVar14 = uVar13 + uVar10 >> 1;\n        iVar7 = *(int *)(uVar15 + (uVar14 + 2) * 4);\n        bVar4 = (*local_3c)((iVar7 + 4) - *(int *)(iVar7 + 4));\n        uVar2 = (*local_38)(bVar4,local_40,local_44);\n        uVar2 = (*local_48)(bVar4,uVar2,iVar7 + 8,local_50);\n        (*local_48)(bVar4 & 0xf,0,uVar2,&local_58);\n        if ((local_50[0] <= param_2) &&\n           (uVar13 = uVar14 + 1, uVar14 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n          return iVar7;\n        }\n        uVar10 = uVar14;\n      } while (uVar13 < uVar14);\n    }" if (parenthesized_expression "(uVar10 != 0)" ( (binary_expression "uVar10 != 0" identifier != number_literal) )) (compound_statement "{\n      uVar13 = 0;\n      local_44 = param_1 + 2;\n      local_3c = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x37e0);\n      local_38 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x35e8);\n      local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n      do {\n        uVar14 = uVar13 + uVar10 >> 1;\n        iVar7 = *(int *)(uVar15 + (uVar14 + 2) * 4);\n        bVar4 = (*local_3c)((iVar7 + 4) - *(int *)(iVar7 + 4));\n        uVar2 = (*local_38)(bVar4,local_40,local_44);\n        uVar2 = (*local_48)(bVar4,uVar2,iVar7 + 8,local_50);\n        (*local_48)(bVar4 & 0xf,0,uVar2,&local_58);\n        if ((local_50[0] <= param_2) &&\n           (uVar13 = uVar14 + 1, uVar14 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n          return iVar7;\n        }\n        uVar10 = uVar14;\n      } while (uVar13 < uVar14);\n    }" { (expression_statement "uVar13 = 0;" (assignment_expression "uVar13 = 0" identifier = number_literal) ;) (expression_statement "local_44 = param_1 + 2;" (assignment_expression "local_44 = param_1 + 2" identifier = (binary_expression "param_1 + 2" identifier + number_literal)) ;) (expression_statement "local_3c = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x37e0);" (assignment_expression "local_3c = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x37e0)" identifier = (cast_expression "(code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x37e0)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x37e0)" ( (binary_expression "PTR_s_ral_options14Struct_no_crefE_004c127c + -0x37e0" identifier + number_literal) )))) ;) (expression_statement "local_38 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x35e8);" (assignment_expression "local_38 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x35e8)" identifier = (cast_expression "(code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x35e8)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x35e8)" ( (binary_expression "PTR_s_ral_options14Struct_no_crefE_004c127c + -0x35e8" identifier + number_literal) )))) ;) (expression_statement "local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);" (assignment_expression "local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968)" identifier = (cast_expression "(code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968)" ( (binary_expression "PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968" identifier + number_literal) )))) ;) (do_statement "do {\n        uVar14 = uVar13 + uVar10 >> 1;\n        iVar7 = *(int *)(uVar15 + (uVar14 + 2) * 4);\n        bVar4 = (*local_3c)((iVar7 + 4) - *(int *)(iVar7 + 4));\n        uVar2 = (*local_38)(bVar4,local_40,local_44);\n        uVar2 = (*local_48)(bVar4,uVar2,iVar7 + 8,local_50);\n        (*local_48)(bVar4 & 0xf,0,uVar2,&local_58);\n        if ((local_50[0] <= param_2) &&\n           (uVar13 = uVar14 + 1, uVar14 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n          return iVar7;\n        }\n        uVar10 = uVar14;\n      } while (uVar13 < uVar14);" do (compound_statement "{\n        uVar14 = uVar13 + uVar10 >> 1;\n        iVar7 = *(int *)(uVar15 + (uVar14 + 2) * 4);\n        bVar4 = (*local_3c)((iVar7 + 4) - *(int *)(iVar7 + 4));\n        uVar2 = (*local_38)(bVar4,local_40,local_44);\n        uVar2 = (*local_48)(bVar4,uVar2,iVar7 + 8,local_50);\n        (*local_48)(bVar4 & 0xf,0,uVar2,&local_58);\n        if ((local_50[0] <= param_2) &&\n           (uVar13 = uVar14 + 1, uVar14 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n          return iVar7;\n        }\n        uVar10 = uVar14;\n      }" { (expression_statement "uVar14 = uVar13 + uVar10 >> 1;" (assignment_expression "uVar14 = uVar13 + uVar10 >> 1" identifier = (binary_expression "uVar13 + uVar10 >> 1" (binary_expression "uVar13 + uVar10" identifier + identifier) >> number_literal)) ;) (expression_statement "iVar7 = *(int *)(uVar15 + (uVar14 + 2) * 4);" (assignment_expression "iVar7 = *(int *)(uVar15 + (uVar14 + 2) * 4)" identifier = (pointer_expression "*(int *)(uVar15 + (uVar14 + 2) * 4)" * (cast_expression "(int *)(uVar15 + (uVar14 + 2) * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar15 + (uVar14 + 2) * 4)" ( (binary_expression "uVar15 + (uVar14 + 2) * 4" identifier + (binary_expression "(uVar14 + 2) * 4" (parenthesized_expression "(uVar14 + 2)" ( (binary_expression "uVar14 + 2" identifier + number_literal) )) * number_literal)) ))))) ;) (expression_statement "bVar4 = (*local_3c)((iVar7 + 4) - *(int *)(iVar7 + 4));" (assignment_expression "bVar4 = (*local_3c)((iVar7 + 4) - *(int *)(iVar7 + 4))" identifier = (call_expression "(*local_3c)((iVar7 + 4) - *(int *)(iVar7 + 4))" (parenthesized_expression "(*local_3c)" ( (pointer_expression "*local_3c" * identifier) )) (argument_list "((iVar7 + 4) - *(int *)(iVar7 + 4))" ( (binary_expression "(iVar7 + 4) - *(int *)(iVar7 + 4)" (parenthesized_expression "(iVar7 + 4)" ( (binary_expression "iVar7 + 4" identifier + number_literal) )) - (pointer_expression "*(int *)(iVar7 + 4)" * (cast_expression "(int *)(iVar7 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 4)" ( (binary_expression "iVar7 + 4" identifier + number_literal) ))))) )))) ;) (expression_statement "uVar2 = (*local_38)(bVar4,local_40,local_44);" (assignment_expression "uVar2 = (*local_38)(bVar4,local_40,local_44)" identifier = (call_expression "(*local_38)(bVar4,local_40,local_44)" (parenthesized_expression "(*local_38)" ( (pointer_expression "*local_38" * identifier) )) (argument_list "(bVar4,local_40,local_44)" ( identifier , identifier , identifier )))) ;) (expression_statement "uVar2 = (*local_48)(bVar4,uVar2,iVar7 + 8,local_50);" (assignment_expression "uVar2 = (*local_48)(bVar4,uVar2,iVar7 + 8,local_50)" identifier = (call_expression "(*local_48)(bVar4,uVar2,iVar7 + 8,local_50)" (parenthesized_expression "(*local_48)" ( (pointer_expression "*local_48" * identifier) )) (argument_list "(bVar4,uVar2,iVar7 + 8,local_50)" ( identifier , identifier , (binary_expression "iVar7 + 8" identifier + number_literal) , identifier )))) ;) (expression_statement "(*local_48)(bVar4 & 0xf,0,uVar2,&local_58);" (call_expression "(*local_48)(bVar4 & 0xf,0,uVar2,&local_58)" (parenthesized_expression "(*local_48)" ( (pointer_expression "*local_48" * identifier) )) (argument_list "(bVar4 & 0xf,0,uVar2,&local_58)" ( (binary_expression "bVar4 & 0xf" identifier & number_literal) , number_literal , identifier , (pointer_expression "&local_58" & identifier) ))) ;) (if_statement "if ((local_50[0] <= param_2) &&\n           (uVar13 = uVar14 + 1, uVar14 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n          return iVar7;\n        }" if (parenthesized_expression "((local_50[0] <= param_2) &&\n           (uVar13 = uVar14 + 1, uVar14 = uVar10, param_2 < local_50[0] + (int)local_58))" ( (binary_expression "(local_50[0] <= param_2) &&\n           (uVar13 = uVar14 + 1, uVar14 = uVar10, param_2 < local_50[0] + (int)local_58)" (parenthesized_expression "(local_50[0] <= param_2)" ( (binary_expression "local_50[0] <= param_2" (subscript_expression "local_50[0]" identifier [ number_literal ]) <= identifier) )) && (parenthesized_expression "(uVar13 = uVar14 + 1, uVar14 = uVar10, param_2 < local_50[0] + (int)local_58)" ( (comma_expression "uVar13 = uVar14 + 1, uVar14 = uVar10, param_2 < local_50[0] + (int)local_58" (assignment_expression "uVar13 = uVar14 + 1" identifier = (binary_expression "uVar14 + 1" identifier + number_literal)) , (comma_expression "uVar14 = uVar10, param_2 < local_50[0] + (int)local_58" (assignment_expression "uVar14 = uVar10" identifier = identifier) , (binary_expression "param_2 < local_50[0] + (int)local_58" identifier < (binary_expression "local_50[0] + (int)local_58" (subscript_expression "local_50[0]" identifier [ number_literal ]) + (cast_expression "(int)local_58" ( (type_descriptor "int" primitive_type) ) identifier))))) ))) )) (compound_statement "{\n          return iVar7;\n        }" { (return_statement "return iVar7;" return identifier ;) })) (expression_statement "uVar10 = uVar14;" (assignment_expression "uVar10 = uVar14" identifier = identifier) ;) }) while (parenthesized_expression "(uVar13 < uVar14)" ( (binary_expression "uVar13 < uVar14" identifier < identifier) )) ;) })) }))) (return_statement "return 0;" return number_literal ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * (array_declarator IDENT [ LIT ])) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < LIT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT & LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression IDENT << LIT) ))) < LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) }) while (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) != LIT) )) ;) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == IDENT) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (binary_expression (subscript_expression IDENT [ LIT ]) & LIT) | (binary_expression IDENT & LIT))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (subscript_expression IDENT [ LIT ]) & LIT)) ;) })))) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (goto_statement goto statement_identifier ;)) })) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (goto_statement goto statement_identifier ;)) (labeled_statement statement_identifier : (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;)) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT + LIT) )))) ;) }))) }) (else_clause else (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT + LIT) )) * LIT)) ;)) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( IDENT ))))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( IDENT ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) << LIT) ))) < LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) == LIT) )) (goto_statement goto statement_identifier ;)) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , (pointer_expression & IDENT) ))) ;) }) while (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) != LIT) )) ;) }) (else_clause else (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , (pointer_expression & IDENT) , IDENT ))) ;) }))) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) && (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) != IDENT) ))) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( )))) ;)) (return_statement return IDENT ;) })) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) << LIT) ))) < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) }) (else_clause else (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) & LIT) )) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) }))))) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT ))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + (cast_expression ( (type_descriptor TYPE) ) IDENT)) + LIT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (compound_statement { (do_statement do (compound_statement { (while_statement while (parenthesized_expression ( (parenthesized_expression ( (comma_expression (assignment_expression IDENT = IDENT) , (binary_expression (binary_expression IDENT != IDENT) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( IDENT , (subscript_expression IDENT [ LIT ]) , (pointer_expression * IDENT) )))) , (comma_expression (assignment_expression IDENT = IDENT) , (binary_expression IDENT < LIT))) )))) )) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + (cast_expression ( (type_descriptor TYPE) ) IDENT)) + (parenthesized_expression ( (binary_expression LIT - (cast_expression ( (type_descriptor TYPE) ) IDENT)) ))) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + (cast_expression ( (type_descriptor TYPE) ) IDENT)) + (parenthesized_expression ( (binary_expression LIT - (cast_expression ( (type_descriptor TYPE) ) IDENT)) ))) )))) = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT) + LIT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) while (parenthesized_expression ( (binary_expression IDENT != IDENT) )) ;) })) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (do_statement do (compound_statement { (while_statement while (parenthesized_expression ( (comma_expression (assignment_expression IDENT = IDENT) , (binary_expression (pointer_expression * IDENT) == LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ IDENT ]) = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (goto_statement goto statement_identifier ;)) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + (binary_expression IDENT * LIT)) )))) = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;)) }))) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression (subscript_expression IDENT [ LIT ]) + (subscript_expression IDENT [ LIT ])) != IDENT) )) (goto_statement goto statement_identifier ;)) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])) != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) )))) ;) (expression_statement (assignment_expression IDENT = (subscript_expression (parenthesized_expression ( (binary_expression IDENT + (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) [ LIT ])) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) ]) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) )))) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ (cast_expression ( (type_descriptor TYPE) ) IDENT) ])) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( IDENT , (subscript_expression IDENT [ LIT ]) , IDENT )))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + IDENT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (break_statement break ;)) (expression_statement (assignment_expression (subscript_expression IDENT [ (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) ]) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) while (parenthesized_expression ( (binary_expression IDENT != LIT) )) ;) }))) (expression_statement (assignment_expression (subscript_expression IDENT [ (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) while (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (subscript_expression IDENT [ LIT ]) + (subscript_expression IDENT [ LIT ]))) ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( IDENT ))) ;) }))) (expression_statement (assignment_expression (pointer_expression * IDENT) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (binary_expression (subscript_expression IDENT [ LIT ]) & LIT) | LIT)) ;) })) }))) (if_statement if (parenthesized_expression ( (binary_expression IDENT < (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression LIT < (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression IDENT << LIT) )))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT )))) ;) (return_statement return IDENT ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) })) (return_statement return IDENT ;) })) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;)) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT >> LIT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression (parenthesized_expression ( (binary_expression IDENT + LIT) )) * LIT)) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) <= IDENT) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (binary_expression IDENT + LIT)) , (comma_expression (assignment_expression IDENT = IDENT) , (binary_expression IDENT < (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))))) ))) )) (break_statement break ;)) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) })) (return_statement return IDENT ;) })) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT << LIT) )) >> LIT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( IDENT , (binary_expression IDENT + LIT) , (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT & LIT) )))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + IDENT) >> LIT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression (parenthesized_expression ( (binary_expression IDENT + LIT) )) * LIT)) ))))) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( IDENT , IDENT , (binary_expression IDENT + LIT) , IDENT )))) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( IDENT , LIT , IDENT , (pointer_expression & IDENT) ))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) <= IDENT) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (binary_expression IDENT + LIT)) , (comma_expression (assignment_expression IDENT = IDENT) , (binary_expression IDENT < (binary_expression (subscript_expression IDENT [ LIT ]) + (cast_expression ( (type_descriptor TYPE) ) IDENT))))) ))) )) (compound_statement { (return_statement return IDENT ;) })) (expression_statement (assignment_expression IDENT = IDENT) ;) }) while (parenthesized_expression ( (binary_expression IDENT < IDENT) )) ;) })) }))) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + IDENT) >> LIT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression (parenthesized_expression ( (binary_expression IDENT + LIT) )) * LIT)) ))))) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( (binary_expression (parenthesized_expression ( (binary_expression IDENT + LIT) )) - (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )))) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( IDENT , IDENT , IDENT )))) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( IDENT , IDENT , (binary_expression IDENT + LIT) , IDENT )))) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( (binary_expression IDENT & LIT) , LIT , IDENT , (pointer_expression & IDENT) ))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) <= IDENT) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (binary_expression IDENT + LIT)) , (comma_expression (assignment_expression IDENT = IDENT) , (binary_expression IDENT < (binary_expression (subscript_expression IDENT [ LIT ]) + (cast_expression ( (type_descriptor TYPE) ) IDENT))))) ))) )) (compound_statement { (return_statement return IDENT ;) })) (expression_statement (assignment_expression IDENT = IDENT) ;) }) while (parenthesized_expression ( (binary_expression IDENT < IDENT) )) ;) })) }))) (return_statement return LIT ;) })))
(function_definition "int FUN_003ed8d4(uint *param_1,undefined *param_2)\n\n{\n  undefined *puVar1;\n  undefined4 uVar2;\n  byte bVar4;\n  int iVar3;\n  code *pcVar5;\n  uint uVar6;\n  int iVar7;\n  int *piVar8;\n  code *pcVar9;\n  uint uVar10;\n  uint *puVar11;\n  code *pcVar12;\n  uint uVar13;\n  uint uVar14;\n  uint uVar15;\n  uint *puVar16;\n  int *piVar17;\n  uint *puVar18;\n  uint *puVar19;\n  uint *local_58;\n  int *local_54;\n  undefined *local_50 [2];\n  code *local_48;\n  uint *local_44;\n  uint *local_40;\n  code *local_3c;\n  code *local_38;\n  uint *local_34;\n  uint *local_30;\n  \n  uVar13 = param_1[4];\n  if ((int)uVar13 < 0) goto LAB_003ed920;\n  uVar10 = uVar13 & 0x1fffff;\n  if (uVar10 == 0) {\n    piVar8 = (int *)param_1[3];\n    if ((int)(uVar13 << 1) < 0) {\n      if (*piVar8 != 0) {\n        uVar10 = 0;\n        do {\n          iVar7 = FUN_003ecf18(param_1);\n          if (iVar7 == -1) goto LAB_003eda10;\n          piVar8 = piVar8 + 1;\n          uVar10 = uVar10 + iVar7;\n        } while (*piVar8 != 0);\nLAB_003edb08:\n        if ((uVar10 & 0x1fffff) == uVar10) {\n          param_1[4] = param_1[4] & 0xffe00000 | uVar10 & 0x1fffff;\n        }\n        else {\n          param_1[4] = param_1[4] & 0xffe00000;\n        }\n        if (uVar10 != 0) goto LAB_003edce8;\n      }\n    }\n    else {\n      uVar10 = FUN_003ecf18(param_1,piVar8);\n      if (uVar10 != 0xffffffff) goto LAB_003edb08;\nLAB_003eda10:\n      param_1[4] = 0x1fe00000;\n      param_1[3] = (uint)(PTR_UINT_004c12dc + 0xaa4);\n    }\n  }\n  else {\nLAB_003edce8:\n    iVar7 = (uVar10 + 2) * 4;\n    local_58 = (uint *)(*(code *)PTR_malloc_004c5b38)(iVar7);\n    puVar1 = PTR_malloc_004c5b38;\n    if (local_58 != (uint *)0x0) {\n      local_58[1] = 0;\n      local_54 = (int *)(*(code *)puVar1)(iVar7);\n      if (local_54 != (int *)0x0) {\n        local_54[1] = 0;\n      }\n      piVar8 = (int *)param_1[3];\n      if ((int)(param_1[4] << 1) < 0) {\n        if (*piVar8 == 0) goto LAB_003ee148;\n        do {\n          piVar8 = piVar8 + 1;\n          FUN_003ed114(param_1,&local_58);\n        } while (*piVar8 != 0);\n      }\n      else {\n        FUN_003ed114(param_1,&local_58,piVar8);\n      }\n      piVar8 = local_54;\n      local_3c = (code *)local_58;\n      local_30 = local_58;\n      if ((local_58 != (uint *)0x0) && (local_58[1] != uVar10)) {\nLAB_003ee148:\n        iVar7 = (*(code *)PTR_abort_004c5d24)();\n        return iVar7;\n      }\n      if ((int)(param_1[4] << 2) < 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3240);\n      }\n      else if ((param_1[4] & 0x1fe00000) == 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628);\n      }\n      else {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558);\n      }\n      if (local_54 == (int *)0x0) {\n        FUN_003ec50c(param_1,pcVar9,local_58);\n      }\n      else {\n        local_38 = (code *)local_58[1];\n        if (local_38 == (code *)0x0) {\n          iVar7 = 0;\n          uVar13 = 0;\n        }\n        else {\n          piVar17 = local_54 + 2;\n          local_34 = local_58 + (int)local_38 + 1;\n          puVar11 = (uint *)(PTR_DAT_004c256c + -0x15d0);\n          local_48 = (code *)(local_58 + 2);\n          *piVar17 = (int)puVar11;\n          local_44 = (uint *)local_48;\n          local_40 = (uint *)piVar17;\n          puVar18 = (uint *)local_48;\n          puVar16 = (uint *)local_48;\n          if (local_48 != (code *)local_34) {\n            do {\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            } while (puVar18 != local_34);\n          }\n          iVar7 = 0;\n          uVar13 = 0;\n          uVar15 = 0;\n          puVar18 = local_44;\n          do {\n            while (local_44 = puVar18, *piVar17 == 0) {\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }\n            iVar3 = uVar13 + 2;\n            uVar15 = uVar15 + 1;\n            uVar13 = uVar13 + 1;\n            *(uint *)((int)local_3c + iVar3 * 4) = *local_44;\n            piVar17 = piVar17 + 1;\n            puVar18 = local_44 + 1;\n          } while (local_38 != (code *)uVar15);\nLAB_003edef4:\n          local_44 = local_44 + 1;\n        }\n        local_30[1] = uVar13;\n        piVar8[1] = iVar7;\n        local_3c = (code *)local_58;\n        if (local_58[1] + local_54[1] != uVar10) goto LAB_003ee148;\n        FUN_003ec50c(param_1,pcVar9);\n        local_40 = (uint *)local_54;\n        if ((uint *)local_54[1] != (uint *)0x0) {\n          local_44 = local_58;\n          uVar13 = local_58[1];\n          pcVar12 = (code *)local_54[1];\n          do {\n            local_48 = (code *)((int)pcVar12 + -1);\n            uVar10 = (local_40 + (int)pcVar12)[1];\n            if (uVar13 == 0) {\n              local_44[(int)pcVar12 + 1] = uVar10;\n              if (pcVar12 == (code *)0x1) break;\n              local_48 = (code *)((int)pcVar12 + -2);\n              uVar10 = local_40[(int)pcVar12];\n              pcVar5 = local_48;\n            }\n            else {\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }\n            local_44[(int)pcVar5 + 2] = uVar10;\n            pcVar12 = local_48;\n          } while (local_48 != (code *)0x0);\n          local_44[1] = local_44[1] + local_40[1];\n        }\n        local_40 = (uint *)local_54;\n        (*(code *)PTR_free_004c5c18)(local_54);\n      }\n      *local_58 = param_1[3];\n      param_1[3] = (uint)local_58;\n      param_1[4] = param_1[4] & 0x7fffffff | 0x80000000;\n    }\n  }\n  if (param_2 < (undefined *)*param_1) {\n    return 0;\n  }\n  uVar13 = param_1[4];\n  piVar8 = (int *)param_1[3];\n  if (-1 < (int)uVar13) {\n    if (-1 < (int)(uVar13 << 1)) {\n      iVar7 = FUN_003ecb9c(param_1,piVar8,param_2);\n      return iVar7;\n    }\n    iVar7 = *piVar8;\n    while( true ) {\n      if (iVar7 == 0) {\n        return 0;\n      }\n      iVar7 = FUN_003ecb9c(param_1,iVar7,param_2);\n      if (iVar7 != 0) break;\n      piVar8 = piVar8 + 1;\n      iVar7 = *piVar8;\n    }\n    return iVar7;\n  }\nLAB_003ed920:\n  uVar15 = param_1[3];\n  uVar10 = *(uint *)(uVar15 + 4);\n  if ((uVar13 & 0x20000000) == 0) {\n    if ((uVar13 & 0x1fe00000) == 0) {\n      if (uVar10 != 0) {\n        uVar13 = 0;\n        uVar14 = uVar10;\n        while( true ) {\n          uVar6 = uVar10 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          if ((*(undefined **)(iVar7 + 8) <= param_2) &&\n             (uVar13 = uVar6 + 1, uVar6 = uVar14,\n             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc))) break;\n          if (uVar6 <= uVar13) {\n            return 0;\n          }\n          uVar10 = uVar6 + uVar13;\n          uVar14 = uVar6;\n        }\n        return iVar7;\n      }\n    }\n    else {\n      uVar13 = (uVar13 << 3) >> 0x18;\n      local_44 = (uint *)FUN_003eca18(uVar13,param_1 + 1,param_1 + 2);\n      if (uVar10 != 0) {\n        local_40 = (uint *)(uVar13 & 0xf);\n        local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n        uVar14 = 0;\n        do {\n          uVar6 = uVar10 + uVar14 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          uVar2 = (*local_48)(uVar13,local_44,iVar7 + 8,local_50);\n          (*local_48)(local_40,0,uVar2,&local_58);\n          if ((local_50[0] <= param_2) &&\n             (uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n            return iVar7;\n          }\n          uVar10 = uVar6;\n        } while (uVar14 < uVar6);\n      }\n    }\n  }\n  else {\n    local_40 = param_1 + 1;\n    if (uVar10 != 0) {\n      uVar13 = 0;\n      local_44 = param_1 + 2;\n      local_3c = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x37e0);\n      local_38 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x35e8);\n      local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n      do {\n        uVar14 = uVar13 + uVar10 >> 1;\n        iVar7 = *(int *)(uVar15 + (uVar14 + 2) * 4);\n        bVar4 = (*local_3c)((iVar7 + 4) - *(int *)(iVar7 + 4));\n        uVar2 = (*local_38)(bVar4,local_40,local_44);\n        uVar2 = (*local_48)(bVar4,uVar2,iVar7 + 8,local_50);\n        (*local_48)(bVar4 & 0xf,0,uVar2,&local_58);\n        if ((local_50[0] <= param_2) &&\n           (uVar13 = uVar14 + 1, uVar14 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n          return iVar7;\n        }\n        uVar10 = uVar14;\n      } while (uVar13 < uVar14);\n    }\n  }\n  return 0;\n}" (primitive_type "int") (function_declarator "FUN_003ed8d4(uint *param_1,undefined *param_2)" (identifier "FUN_003ed8d4") (parameter_list "(uint *param_1,undefined *param_2)" (( "(") (parameter_declaration "uint *param_1" (type_identifier "uint") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "undefined *param_2" (type_identifier "undefined") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) () ")"))) (compound_statement "{\n  undefined *puVar1;\n  undefined4 uVar2;\n  byte bVar4;\n  int iVar3;\n  code *pcVar5;\n  uint uVar6;\n  int iVar7;\n  int *piVar8;\n  code *pcVar9;\n  uint uVar10;\n  uint *puVar11;\n  code *pcVar12;\n  uint uVar13;\n  uint uVar14;\n  uint uVar15;\n  uint *puVar16;\n  int *piVar17;\n  uint *puVar18;\n  uint *puVar19;\n  uint *local_58;\n  int *local_54;\n  undefined *local_50 [2];\n  code *local_48;\n  uint *local_44;\n  uint *local_40;\n  code *local_3c;\n  code *local_38;\n  uint *local_34;\n  uint *local_30;\n  \n  uVar13 = param_1[4];\n  if ((int)uVar13 < 0) goto LAB_003ed920;\n  uVar10 = uVar13 & 0x1fffff;\n  if (uVar10 == 0) {\n    piVar8 = (int *)param_1[3];\n    if ((int)(uVar13 << 1) < 0) {\n      if (*piVar8 != 0) {\n        uVar10 = 0;\n        do {\n          iVar7 = FUN_003ecf18(param_1);\n          if (iVar7 == -1) goto LAB_003eda10;\n          piVar8 = piVar8 + 1;\n          uVar10 = uVar10 + iVar7;\n        } while (*piVar8 != 0);\nLAB_003edb08:\n        if ((uVar10 & 0x1fffff) == uVar10) {\n          param_1[4] = param_1[4] & 0xffe00000 | uVar10 & 0x1fffff;\n        }\n        else {\n          param_1[4] = param_1[4] & 0xffe00000;\n        }\n        if (uVar10 != 0) goto LAB_003edce8;\n      }\n    }\n    else {\n      uVar10 = FUN_003ecf18(param_1,piVar8);\n      if (uVar10 != 0xffffffff) goto LAB_003edb08;\nLAB_003eda10:\n      param_1[4] = 0x1fe00000;\n      param_1[3] = (uint)(PTR_UINT_004c12dc + 0xaa4);\n    }\n  }\n  else {\nLAB_003edce8:\n    iVar7 = (uVar10 + 2) * 4;\n    local_58 = (uint *)(*(code *)PTR_malloc_004c5b38)(iVar7);\n    puVar1 = PTR_malloc_004c5b38;\n    if (local_58 != (uint *)0x0) {\n      local_58[1] = 0;\n      local_54 = (int *)(*(code *)puVar1)(iVar7);\n      if (local_54 != (int *)0x0) {\n        local_54[1] = 0;\n      }\n      piVar8 = (int *)param_1[3];\n      if ((int)(param_1[4] << 1) < 0) {\n        if (*piVar8 == 0) goto LAB_003ee148;\n        do {\n          piVar8 = piVar8 + 1;\n          FUN_003ed114(param_1,&local_58);\n        } while (*piVar8 != 0);\n      }\n      else {\n        FUN_003ed114(param_1,&local_58,piVar8);\n      }\n      piVar8 = local_54;\n      local_3c = (code *)local_58;\n      local_30 = local_58;\n      if ((local_58 != (uint *)0x0) && (local_58[1] != uVar10)) {\nLAB_003ee148:\n        iVar7 = (*(code *)PTR_abort_004c5d24)();\n        return iVar7;\n      }\n      if ((int)(param_1[4] << 2) < 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3240);\n      }\n      else if ((param_1[4] & 0x1fe00000) == 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628);\n      }\n      else {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558);\n      }\n      if (local_54 == (int *)0x0) {\n        FUN_003ec50c(param_1,pcVar9,local_58);\n      }\n      else {\n        local_38 = (code *)local_58[1];\n        if (local_38 == (code *)0x0) {\n          iVar7 = 0;\n          uVar13 = 0;\n        }\n        else {\n          piVar17 = local_54 + 2;\n          local_34 = local_58 + (int)local_38 + 1;\n          puVar11 = (uint *)(PTR_DAT_004c256c + -0x15d0);\n          local_48 = (code *)(local_58 + 2);\n          *piVar17 = (int)puVar11;\n          local_44 = (uint *)local_48;\n          local_40 = (uint *)piVar17;\n          puVar18 = (uint *)local_48;\n          puVar16 = (uint *)local_48;\n          if (local_48 != (code *)local_34) {\n            do {\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            } while (puVar18 != local_34);\n          }\n          iVar7 = 0;\n          uVar13 = 0;\n          uVar15 = 0;\n          puVar18 = local_44;\n          do {\n            while (local_44 = puVar18, *piVar17 == 0) {\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }\n            iVar3 = uVar13 + 2;\n            uVar15 = uVar15 + 1;\n            uVar13 = uVar13 + 1;\n            *(uint *)((int)local_3c + iVar3 * 4) = *local_44;\n            piVar17 = piVar17 + 1;\n            puVar18 = local_44 + 1;\n          } while (local_38 != (code *)uVar15);\nLAB_003edef4:\n          local_44 = local_44 + 1;\n        }\n        local_30[1] = uVar13;\n        piVar8[1] = iVar7;\n        local_3c = (code *)local_58;\n        if (local_58[1] + local_54[1] != uVar10) goto LAB_003ee148;\n        FUN_003ec50c(param_1,pcVar9);\n        local_40 = (uint *)local_54;\n        if ((uint *)local_54[1] != (uint *)0x0) {\n          local_44 = local_58;\n          uVar13 = local_58[1];\n          pcVar12 = (code *)local_54[1];\n          do {\n            local_48 = (code *)((int)pcVar12 + -1);\n            uVar10 = (local_40 + (int)pcVar12)[1];\n            if (uVar13 == 0) {\n              local_44[(int)pcVar12 + 1] = uVar10;\n              if (pcVar12 == (code *)0x1) break;\n              local_48 = (code *)((int)pcVar12 + -2);\n              uVar10 = local_40[(int)pcVar12];\n              pcVar5 = local_48;\n            }\n            else {\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }\n            local_44[(int)pcVar5 + 2] = uVar10;\n            pcVar12 = local_48;\n          } while (local_48 != (code *)0x0);\n          local_44[1] = local_44[1] + local_40[1];\n        }\n        local_40 = (uint *)local_54;\n        (*(code *)PTR_free_004c5c18)(local_54);\n      }\n      *local_58 = param_1[3];\n      param_1[3] = (uint)local_58;\n      param_1[4] = param_1[4] & 0x7fffffff | 0x80000000;\n    }\n  }\n  if (param_2 < (undefined *)*param_1) {\n    return 0;\n  }\n  uVar13 = param_1[4];\n  piVar8 = (int *)param_1[3];\n  if (-1 < (int)uVar13) {\n    if (-1 < (int)(uVar13 << 1)) {\n      iVar7 = FUN_003ecb9c(param_1,piVar8,param_2);\n      return iVar7;\n    }\n    iVar7 = *piVar8;\n    while( true ) {\n      if (iVar7 == 0) {\n        return 0;\n      }\n      iVar7 = FUN_003ecb9c(param_1,iVar7,param_2);\n      if (iVar7 != 0) break;\n      piVar8 = piVar8 + 1;\n      iVar7 = *piVar8;\n    }\n    return iVar7;\n  }\nLAB_003ed920:\n  uVar15 = param_1[3];\n  uVar10 = *(uint *)(uVar15 + 4);\n  if ((uVar13 & 0x20000000) == 0) {\n    if ((uVar13 & 0x1fe00000) == 0) {\n      if (uVar10 != 0) {\n        uVar13 = 0;\n        uVar14 = uVar10;\n        while( true ) {\n          uVar6 = uVar10 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          if ((*(undefined **)(iVar7 + 8) <= param_2) &&\n             (uVar13 = uVar6 + 1, uVar6 = uVar14,\n             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc))) break;\n          if (uVar6 <= uVar13) {\n            return 0;\n          }\n          uVar10 = uVar6 + uVar13;\n          uVar14 = uVar6;\n        }\n        return iVar7;\n      }\n    }\n    else {\n      uVar13 = (uVar13 << 3) >> 0x18;\n      local_44 = (uint *)FUN_003eca18(uVar13,param_1 + 1,param_1 + 2);\n      if (uVar10 != 0) {\n        local_40 = (uint *)(uVar13 & 0xf);\n        local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n        uVar14 = 0;\n        do {\n          uVar6 = uVar10 + uVar14 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          uVar2 = (*local_48)(uVar13,local_44,iVar7 + 8,local_50);\n          (*local_48)(local_40,0,uVar2,&local_58);\n          if ((local_50[0] <= param_2) &&\n             (uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n            return iVar7;\n          }\n          uVar10 = uVar6;\n        } while (uVar14 < uVar6);\n      }\n    }\n  }\n  else {\n    local_40 = param_1 + 1;\n    if (uVar10 != 0) {\n      uVar13 = 0;\n      local_44 = param_1 + 2;\n      local_3c = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x37e0);\n      local_38 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x35e8);\n      local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n      do {\n        uVar14 = uVar13 + uVar10 >> 1;\n        iVar7 = *(int *)(uVar15 + (uVar14 + 2) * 4);\n        bVar4 = (*local_3c)((iVar7 + 4) - *(int *)(iVar7 + 4));\n        uVar2 = (*local_38)(bVar4,local_40,local_44);\n        uVar2 = (*local_48)(bVar4,uVar2,iVar7 + 8,local_50);\n        (*local_48)(bVar4 & 0xf,0,uVar2,&local_58);\n        if ((local_50[0] <= param_2) &&\n           (uVar13 = uVar14 + 1, uVar14 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n          return iVar7;\n        }\n        uVar10 = uVar14;\n      } while (uVar13 < uVar14);\n    }\n  }\n  return 0;\n}" ({ "{") (declaration "undefined *puVar1;" (type_identifier "undefined") (pointer_declarator "*puVar1" (* "*") (identifier "puVar1")) (; ";")) (declaration "undefined4 uVar2;" (type_identifier "undefined4") (identifier "uVar2") (; ";")) (declaration "byte bVar4;" (type_identifier "byte") (identifier "bVar4") (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (declaration "code *pcVar5;" (type_identifier "code") (pointer_declarator "*pcVar5" (* "*") (identifier "pcVar5")) (; ";")) (declaration "uint uVar6;" (type_identifier "uint") (identifier "uVar6") (; ";")) (declaration "int iVar7;" (primitive_type "int") (identifier "iVar7") (; ";")) (declaration "int *piVar8;" (primitive_type "int") (pointer_declarator "*piVar8" (* "*") (identifier "piVar8")) (; ";")) (declaration "code *pcVar9;" (type_identifier "code") (pointer_declarator "*pcVar9" (* "*") (identifier "pcVar9")) (; ";")) (declaration "uint uVar10;" (type_identifier "uint") (identifier "uVar10") (; ";")) (declaration "uint *puVar11;" (type_identifier "uint") (pointer_declarator "*puVar11" (* "*") (identifier "puVar11")) (; ";")) (declaration "code *pcVar12;" (type_identifier "code") (pointer_declarator "*pcVar12" (* "*") (identifier "pcVar12")) (; ";")) (declaration "uint uVar13;" (type_identifier "uint") (identifier "uVar13") (; ";")) (declaration "uint uVar14;" (type_identifier "uint") (identifier "uVar14") (; ";")) (declaration "uint uVar15;" (type_identifier "uint") (identifier "uVar15") (; ";")) (declaration "uint *puVar16;" (type_identifier "uint") (pointer_declarator "*puVar16" (* "*") (identifier "puVar16")) (; ";")) (declaration "int *piVar17;" (primitive_type "int") (pointer_declarator "*piVar17" (* "*") (identifier "piVar17")) (; ";")) (declaration "uint *puVar18;" (type_identifier "uint") (pointer_declarator "*puVar18" (* "*") (identifier "puVar18")) (; ";")) (declaration "uint *puVar19;" (type_identifier "uint") (pointer_declarator "*puVar19" (* "*") (identifier "puVar19")) (; ";")) (declaration "uint *local_58;" (type_identifier "uint") (pointer_declarator "*local_58" (* "*") (identifier "local_58")) (; ";")) (declaration "int *local_54;" (primitive_type "int") (pointer_declarator "*local_54" (* "*") (identifier "local_54")) (; ";")) (declaration "undefined *local_50 [2];" (type_identifier "undefined") (pointer_declarator "*local_50 [2]" (* "*") (array_declarator "local_50 [2]" (identifier "local_50") ([ "[") (number_literal "2") (] "]"))) (; ";")) (declaration "code *local_48;" (type_identifier "code") (pointer_declarator "*local_48" (* "*") (identifier "local_48")) (; ";")) (declaration "uint *local_44;" (type_identifier "uint") (pointer_declarator "*local_44" (* "*") (identifier "local_44")) (; ";")) (declaration "uint *local_40;" (type_identifier "uint") (pointer_declarator "*local_40" (* "*") (identifier "local_40")) (; ";")) (declaration "code *local_3c;" (type_identifier "code") (pointer_declarator "*local_3c" (* "*") (identifier "local_3c")) (; ";")) (declaration "code *local_38;" (type_identifier "code") (pointer_declarator "*local_38" (* "*") (identifier "local_38")) (; ";")) (declaration "uint *local_34;" (type_identifier "uint") (pointer_declarator "*local_34" (* "*") (identifier "local_34")) (; ";")) (declaration "uint *local_30;" (type_identifier "uint") (pointer_declarator "*local_30" (* "*") (identifier "local_30")) (; ";")) (expression_statement "uVar13 = param_1[4];" (assignment_expression "uVar13 = param_1[4]" (identifier "uVar13") (= "=") (subscript_expression "param_1[4]" (identifier "param_1") ([ "[") (number_literal "4") (] "]"))) (; ";")) (if_statement "if ((int)uVar13 < 0) goto LAB_003ed920;" (if "if") (parenthesized_expression "((int)uVar13 < 0)" (( "(") (binary_expression "(int)uVar13 < 0" (cast_expression "(int)uVar13" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar13")) (< "<") (number_literal "0")) () ")")) (goto_statement "goto LAB_003ed920;" (goto "goto") (statement_identifier "LAB_003ed920") (; ";"))) (expression_statement "uVar10 = uVar13 & 0x1fffff;" (assignment_expression "uVar10 = uVar13 & 0x1fffff" (identifier "uVar10") (= "=") (binary_expression "uVar13 & 0x1fffff" (identifier "uVar13") (& "&") (number_literal "0x1fffff"))) (; ";")) (if_statement "if (uVar10 == 0) {\n    piVar8 = (int *)param_1[3];\n    if ((int)(uVar13 << 1) < 0) {\n      if (*piVar8 != 0) {\n        uVar10 = 0;\n        do {\n          iVar7 = FUN_003ecf18(param_1);\n          if (iVar7 == -1) goto LAB_003eda10;\n          piVar8 = piVar8 + 1;\n          uVar10 = uVar10 + iVar7;\n        } while (*piVar8 != 0);\nLAB_003edb08:\n        if ((uVar10 & 0x1fffff) == uVar10) {\n          param_1[4] = param_1[4] & 0xffe00000 | uVar10 & 0x1fffff;\n        }\n        else {\n          param_1[4] = param_1[4] & 0xffe00000;\n        }\n        if (uVar10 != 0) goto LAB_003edce8;\n      }\n    }\n    else {\n      uVar10 = FUN_003ecf18(param_1,piVar8);\n      if (uVar10 != 0xffffffff) goto LAB_003edb08;\nLAB_003eda10:\n      param_1[4] = 0x1fe00000;\n      param_1[3] = (uint)(PTR_UINT_004c12dc + 0xaa4);\n    }\n  }\n  else {\nLAB_003edce8:\n    iVar7 = (uVar10 + 2) * 4;\n    local_58 = (uint *)(*(code *)PTR_malloc_004c5b38)(iVar7);\n    puVar1 = PTR_malloc_004c5b38;\n    if (local_58 != (uint *)0x0) {\n      local_58[1] = 0;\n      local_54 = (int *)(*(code *)puVar1)(iVar7);\n      if (local_54 != (int *)0x0) {\n        local_54[1] = 0;\n      }\n      piVar8 = (int *)param_1[3];\n      if ((int)(param_1[4] << 1) < 0) {\n        if (*piVar8 == 0) goto LAB_003ee148;\n        do {\n          piVar8 = piVar8 + 1;\n          FUN_003ed114(param_1,&local_58);\n        } while (*piVar8 != 0);\n      }\n      else {\n        FUN_003ed114(param_1,&local_58,piVar8);\n      }\n      piVar8 = local_54;\n      local_3c = (code *)local_58;\n      local_30 = local_58;\n      if ((local_58 != (uint *)0x0) && (local_58[1] != uVar10)) {\nLAB_003ee148:\n        iVar7 = (*(code *)PTR_abort_004c5d24)();\n        return iVar7;\n      }\n      if ((int)(param_1[4] << 2) < 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3240);\n      }\n      else if ((param_1[4] & 0x1fe00000) == 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628);\n      }\n      else {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558);\n      }\n      if (local_54 == (int *)0x0) {\n        FUN_003ec50c(param_1,pcVar9,local_58);\n      }\n      else {\n        local_38 = (code *)local_58[1];\n        if (local_38 == (code *)0x0) {\n          iVar7 = 0;\n          uVar13 = 0;\n        }\n        else {\n          piVar17 = local_54 + 2;\n          local_34 = local_58 + (int)local_38 + 1;\n          puVar11 = (uint *)(PTR_DAT_004c256c + -0x15d0);\n          local_48 = (code *)(local_58 + 2);\n          *piVar17 = (int)puVar11;\n          local_44 = (uint *)local_48;\n          local_40 = (uint *)piVar17;\n          puVar18 = (uint *)local_48;\n          puVar16 = (uint *)local_48;\n          if (local_48 != (code *)local_34) {\n            do {\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            } while (puVar18 != local_34);\n          }\n          iVar7 = 0;\n          uVar13 = 0;\n          uVar15 = 0;\n          puVar18 = local_44;\n          do {\n            while (local_44 = puVar18, *piVar17 == 0) {\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }\n            iVar3 = uVar13 + 2;\n            uVar15 = uVar15 + 1;\n            uVar13 = uVar13 + 1;\n            *(uint *)((int)local_3c + iVar3 * 4) = *local_44;\n            piVar17 = piVar17 + 1;\n            puVar18 = local_44 + 1;\n          } while (local_38 != (code *)uVar15);\nLAB_003edef4:\n          local_44 = local_44 + 1;\n        }\n        local_30[1] = uVar13;\n        piVar8[1] = iVar7;\n        local_3c = (code *)local_58;\n        if (local_58[1] + local_54[1] != uVar10) goto LAB_003ee148;\n        FUN_003ec50c(param_1,pcVar9);\n        local_40 = (uint *)local_54;\n        if ((uint *)local_54[1] != (uint *)0x0) {\n          local_44 = local_58;\n          uVar13 = local_58[1];\n          pcVar12 = (code *)local_54[1];\n          do {\n            local_48 = (code *)((int)pcVar12 + -1);\n            uVar10 = (local_40 + (int)pcVar12)[1];\n            if (uVar13 == 0) {\n              local_44[(int)pcVar12 + 1] = uVar10;\n              if (pcVar12 == (code *)0x1) break;\n              local_48 = (code *)((int)pcVar12 + -2);\n              uVar10 = local_40[(int)pcVar12];\n              pcVar5 = local_48;\n            }\n            else {\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }\n            local_44[(int)pcVar5 + 2] = uVar10;\n            pcVar12 = local_48;\n          } while (local_48 != (code *)0x0);\n          local_44[1] = local_44[1] + local_40[1];\n        }\n        local_40 = (uint *)local_54;\n        (*(code *)PTR_free_004c5c18)(local_54);\n      }\n      *local_58 = param_1[3];\n      param_1[3] = (uint)local_58;\n      param_1[4] = param_1[4] & 0x7fffffff | 0x80000000;\n    }\n  }" (if "if") (parenthesized_expression "(uVar10 == 0)" (( "(") (binary_expression "uVar10 == 0" (identifier "uVar10") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    piVar8 = (int *)param_1[3];\n    if ((int)(uVar13 << 1) < 0) {\n      if (*piVar8 != 0) {\n        uVar10 = 0;\n        do {\n          iVar7 = FUN_003ecf18(param_1);\n          if (iVar7 == -1) goto LAB_003eda10;\n          piVar8 = piVar8 + 1;\n          uVar10 = uVar10 + iVar7;\n        } while (*piVar8 != 0);\nLAB_003edb08:\n        if ((uVar10 & 0x1fffff) == uVar10) {\n          param_1[4] = param_1[4] & 0xffe00000 | uVar10 & 0x1fffff;\n        }\n        else {\n          param_1[4] = param_1[4] & 0xffe00000;\n        }\n        if (uVar10 != 0) goto LAB_003edce8;\n      }\n    }\n    else {\n      uVar10 = FUN_003ecf18(param_1,piVar8);\n      if (uVar10 != 0xffffffff) goto LAB_003edb08;\nLAB_003eda10:\n      param_1[4] = 0x1fe00000;\n      param_1[3] = (uint)(PTR_UINT_004c12dc + 0xaa4);\n    }\n  }" ({ "{") (expression_statement "piVar8 = (int *)param_1[3];" (assignment_expression "piVar8 = (int *)param_1[3]" (identifier "piVar8") (= "=") (cast_expression "(int *)param_1[3]" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]")))) (; ";")) (if_statement "if ((int)(uVar13 << 1) < 0) {\n      if (*piVar8 != 0) {\n        uVar10 = 0;\n        do {\n          iVar7 = FUN_003ecf18(param_1);\n          if (iVar7 == -1) goto LAB_003eda10;\n          piVar8 = piVar8 + 1;\n          uVar10 = uVar10 + iVar7;\n        } while (*piVar8 != 0);\nLAB_003edb08:\n        if ((uVar10 & 0x1fffff) == uVar10) {\n          param_1[4] = param_1[4] & 0xffe00000 | uVar10 & 0x1fffff;\n        }\n        else {\n          param_1[4] = param_1[4] & 0xffe00000;\n        }\n        if (uVar10 != 0) goto LAB_003edce8;\n      }\n    }\n    else {\n      uVar10 = FUN_003ecf18(param_1,piVar8);\n      if (uVar10 != 0xffffffff) goto LAB_003edb08;\nLAB_003eda10:\n      param_1[4] = 0x1fe00000;\n      param_1[3] = (uint)(PTR_UINT_004c12dc + 0xaa4);\n    }" (if "if") (parenthesized_expression "((int)(uVar13 << 1) < 0)" (( "(") (binary_expression "(int)(uVar13 << 1) < 0" (cast_expression "(int)(uVar13 << 1)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(uVar13 << 1)" (( "(") (binary_expression "uVar13 << 1" (identifier "uVar13") (<< "<<") (number_literal "1")) () ")"))) (< "<") (number_literal "0")) () ")")) (compound_statement "{\n      if (*piVar8 != 0) {\n        uVar10 = 0;\n        do {\n          iVar7 = FUN_003ecf18(param_1);\n          if (iVar7 == -1) goto LAB_003eda10;\n          piVar8 = piVar8 + 1;\n          uVar10 = uVar10 + iVar7;\n        } while (*piVar8 != 0);\nLAB_003edb08:\n        if ((uVar10 & 0x1fffff) == uVar10) {\n          param_1[4] = param_1[4] & 0xffe00000 | uVar10 & 0x1fffff;\n        }\n        else {\n          param_1[4] = param_1[4] & 0xffe00000;\n        }\n        if (uVar10 != 0) goto LAB_003edce8;\n      }\n    }" ({ "{") (if_statement "if (*piVar8 != 0) {\n        uVar10 = 0;\n        do {\n          iVar7 = FUN_003ecf18(param_1);\n          if (iVar7 == -1) goto LAB_003eda10;\n          piVar8 = piVar8 + 1;\n          uVar10 = uVar10 + iVar7;\n        } while (*piVar8 != 0);\nLAB_003edb08:\n        if ((uVar10 & 0x1fffff) == uVar10) {\n          param_1[4] = param_1[4] & 0xffe00000 | uVar10 & 0x1fffff;\n        }\n        else {\n          param_1[4] = param_1[4] & 0xffe00000;\n        }\n        if (uVar10 != 0) goto LAB_003edce8;\n      }" (if "if") (parenthesized_expression "(*piVar8 != 0)" (( "(") (binary_expression "*piVar8 != 0" (pointer_expression "*piVar8" (* "*") (identifier "piVar8")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        uVar10 = 0;\n        do {\n          iVar7 = FUN_003ecf18(param_1);\n          if (iVar7 == -1) goto LAB_003eda10;\n          piVar8 = piVar8 + 1;\n          uVar10 = uVar10 + iVar7;\n        } while (*piVar8 != 0);\nLAB_003edb08:\n        if ((uVar10 & 0x1fffff) == uVar10) {\n          param_1[4] = param_1[4] & 0xffe00000 | uVar10 & 0x1fffff;\n        }\n        else {\n          param_1[4] = param_1[4] & 0xffe00000;\n        }\n        if (uVar10 != 0) goto LAB_003edce8;\n      }" ({ "{") (expression_statement "uVar10 = 0;" (assignment_expression "uVar10 = 0" (identifier "uVar10") (= "=") (number_literal "0")) (; ";")) (do_statement "do {\n          iVar7 = FUN_003ecf18(param_1);\n          if (iVar7 == -1) goto LAB_003eda10;\n          piVar8 = piVar8 + 1;\n          uVar10 = uVar10 + iVar7;\n        } while (*piVar8 != 0);" (do "do") (compound_statement "{\n          iVar7 = FUN_003ecf18(param_1);\n          if (iVar7 == -1) goto LAB_003eda10;\n          piVar8 = piVar8 + 1;\n          uVar10 = uVar10 + iVar7;\n        }" ({ "{") (expression_statement "iVar7 = FUN_003ecf18(param_1);" (assignment_expression "iVar7 = FUN_003ecf18(param_1)" (identifier "iVar7") (= "=") (call_expression "FUN_003ecf18(param_1)" (identifier "FUN_003ecf18") (argument_list "(param_1)" (( "(") (identifier "param_1") () ")")))) (; ";")) (if_statement "if (iVar7 == -1) goto LAB_003eda10;" (if "if") (parenthesized_expression "(iVar7 == -1)" (( "(") (binary_expression "iVar7 == -1" (identifier "iVar7") (== "==") (number_literal "-1")) () ")")) (goto_statement "goto LAB_003eda10;" (goto "goto") (statement_identifier "LAB_003eda10") (; ";"))) (expression_statement "piVar8 = piVar8 + 1;" (assignment_expression "piVar8 = piVar8 + 1" (identifier "piVar8") (= "=") (binary_expression "piVar8 + 1" (identifier "piVar8") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "uVar10 = uVar10 + iVar7;" (assignment_expression "uVar10 = uVar10 + iVar7" (identifier "uVar10") (= "=") (binary_expression "uVar10 + iVar7" (identifier "uVar10") (+ "+") (identifier "iVar7"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(*piVar8 != 0)" (( "(") (binary_expression "*piVar8 != 0" (pointer_expression "*piVar8" (* "*") (identifier "piVar8")) (!= "!=") (number_literal "0")) () ")")) (; ";")) (labeled_statement "LAB_003edb08:\n        if ((uVar10 & 0x1fffff) == uVar10) {\n          param_1[4] = param_1[4] & 0xffe00000 | uVar10 & 0x1fffff;\n        }\n        else {\n          param_1[4] = param_1[4] & 0xffe00000;\n        }" (statement_identifier "LAB_003edb08") (: ":") (if_statement "if ((uVar10 & 0x1fffff) == uVar10) {\n          param_1[4] = param_1[4] & 0xffe00000 | uVar10 & 0x1fffff;\n        }\n        else {\n          param_1[4] = param_1[4] & 0xffe00000;\n        }" (if "if") (parenthesized_expression "((uVar10 & 0x1fffff) == uVar10)" (( "(") (binary_expression "(uVar10 & 0x1fffff) == uVar10" (parenthesized_expression "(uVar10 & 0x1fffff)" (( "(") (binary_expression "uVar10 & 0x1fffff" (identifier "uVar10") (& "&") (number_literal "0x1fffff")) () ")")) (== "==") (identifier "uVar10")) () ")")) (compound_statement "{\n          param_1[4] = param_1[4] & 0xffe00000 | uVar10 & 0x1fffff;\n        }" ({ "{") (expression_statement "param_1[4] = param_1[4] & 0xffe00000 | uVar10 & 0x1fffff;" (assignment_expression "param_1[4] = param_1[4] & 0xffe00000 | uVar10 & 0x1fffff" (subscript_expression "param_1[4]" (identifier "param_1") ([ "[") (number_literal "4") (] "]")) (= "=") (binary_expression "param_1[4] & 0xffe00000 | uVar10 & 0x1fffff" (binary_expression "param_1[4] & 0xffe00000" (subscript_expression "param_1[4]" (identifier "param_1") ([ "[") (number_literal "4") (] "]")) (& "&") (number_literal "0xffe00000")) (| "|") (binary_expression "uVar10 & 0x1fffff" (identifier "uVar10") (& "&") (number_literal "0x1fffff")))) (; ";")) (} "}")) (else_clause "else {\n          param_1[4] = param_1[4] & 0xffe00000;\n        }" (else "else") (compound_statement "{\n          param_1[4] = param_1[4] & 0xffe00000;\n        }" ({ "{") (expression_statement "param_1[4] = param_1[4] & 0xffe00000;" (assignment_expression "param_1[4] = param_1[4] & 0xffe00000" (subscript_expression "param_1[4]" (identifier "param_1") ([ "[") (number_literal "4") (] "]")) (= "=") (binary_expression "param_1[4] & 0xffe00000" (subscript_expression "param_1[4]" (identifier "param_1") ([ "[") (number_literal "4") (] "]")) (& "&") (number_literal "0xffe00000"))) (; ";")) (} "}"))))) (if_statement "if (uVar10 != 0) goto LAB_003edce8;" (if "if") (parenthesized_expression "(uVar10 != 0)" (( "(") (binary_expression "uVar10 != 0" (identifier "uVar10") (!= "!=") (number_literal "0")) () ")")) (goto_statement "goto LAB_003edce8;" (goto "goto") (statement_identifier "LAB_003edce8") (; ";"))) (} "}"))) (} "}")) (else_clause "else {\n      uVar10 = FUN_003ecf18(param_1,piVar8);\n      if (uVar10 != 0xffffffff) goto LAB_003edb08;\nLAB_003eda10:\n      param_1[4] = 0x1fe00000;\n      param_1[3] = (uint)(PTR_UINT_004c12dc + 0xaa4);\n    }" (else "else") (compound_statement "{\n      uVar10 = FUN_003ecf18(param_1,piVar8);\n      if (uVar10 != 0xffffffff) goto LAB_003edb08;\nLAB_003eda10:\n      param_1[4] = 0x1fe00000;\n      param_1[3] = (uint)(PTR_UINT_004c12dc + 0xaa4);\n    }" ({ "{") (expression_statement "uVar10 = FUN_003ecf18(param_1,piVar8);" (assignment_expression "uVar10 = FUN_003ecf18(param_1,piVar8)" (identifier "uVar10") (= "=") (call_expression "FUN_003ecf18(param_1,piVar8)" (identifier "FUN_003ecf18") (argument_list "(param_1,piVar8)" (( "(") (identifier "param_1") (, ",") (identifier "piVar8") () ")")))) (; ";")) (if_statement "if (uVar10 != 0xffffffff) goto LAB_003edb08;" (if "if") (parenthesized_expression "(uVar10 != 0xffffffff)" (( "(") (binary_expression "uVar10 != 0xffffffff" (identifier "uVar10") (!= "!=") (number_literal "0xffffffff")) () ")")) (goto_statement "goto LAB_003edb08;" (goto "goto") (statement_identifier "LAB_003edb08") (; ";"))) (labeled_statement "LAB_003eda10:\n      param_1[4] = 0x1fe00000;" (statement_identifier "LAB_003eda10") (: ":") (expression_statement "param_1[4] = 0x1fe00000;" (assignment_expression "param_1[4] = 0x1fe00000" (subscript_expression "param_1[4]" (identifier "param_1") ([ "[") (number_literal "4") (] "]")) (= "=") (number_literal "0x1fe00000")) (; ";"))) (expression_statement "param_1[3] = (uint)(PTR_UINT_004c12dc + 0xaa4);" (assignment_expression "param_1[3] = (uint)(PTR_UINT_004c12dc + 0xaa4)" (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]")) (= "=") (call_expression "(uint)(PTR_UINT_004c12dc + 0xaa4)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(PTR_UINT_004c12dc + 0xaa4)" (( "(") (binary_expression "PTR_UINT_004c12dc + 0xaa4" (identifier "PTR_UINT_004c12dc") (+ "+") (number_literal "0xaa4")) () ")")))) (; ";")) (} "}")))) (} "}")) (else_clause "else {\nLAB_003edce8:\n    iVar7 = (uVar10 + 2) * 4;\n    local_58 = (uint *)(*(code *)PTR_malloc_004c5b38)(iVar7);\n    puVar1 = PTR_malloc_004c5b38;\n    if (local_58 != (uint *)0x0) {\n      local_58[1] = 0;\n      local_54 = (int *)(*(code *)puVar1)(iVar7);\n      if (local_54 != (int *)0x0) {\n        local_54[1] = 0;\n      }\n      piVar8 = (int *)param_1[3];\n      if ((int)(param_1[4] << 1) < 0) {\n        if (*piVar8 == 0) goto LAB_003ee148;\n        do {\n          piVar8 = piVar8 + 1;\n          FUN_003ed114(param_1,&local_58);\n        } while (*piVar8 != 0);\n      }\n      else {\n        FUN_003ed114(param_1,&local_58,piVar8);\n      }\n      piVar8 = local_54;\n      local_3c = (code *)local_58;\n      local_30 = local_58;\n      if ((local_58 != (uint *)0x0) && (local_58[1] != uVar10)) {\nLAB_003ee148:\n        iVar7 = (*(code *)PTR_abort_004c5d24)();\n        return iVar7;\n      }\n      if ((int)(param_1[4] << 2) < 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3240);\n      }\n      else if ((param_1[4] & 0x1fe00000) == 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628);\n      }\n      else {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558);\n      }\n      if (local_54 == (int *)0x0) {\n        FUN_003ec50c(param_1,pcVar9,local_58);\n      }\n      else {\n        local_38 = (code *)local_58[1];\n        if (local_38 == (code *)0x0) {\n          iVar7 = 0;\n          uVar13 = 0;\n        }\n        else {\n          piVar17 = local_54 + 2;\n          local_34 = local_58 + (int)local_38 + 1;\n          puVar11 = (uint *)(PTR_DAT_004c256c + -0x15d0);\n          local_48 = (code *)(local_58 + 2);\n          *piVar17 = (int)puVar11;\n          local_44 = (uint *)local_48;\n          local_40 = (uint *)piVar17;\n          puVar18 = (uint *)local_48;\n          puVar16 = (uint *)local_48;\n          if (local_48 != (code *)local_34) {\n            do {\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            } while (puVar18 != local_34);\n          }\n          iVar7 = 0;\n          uVar13 = 0;\n          uVar15 = 0;\n          puVar18 = local_44;\n          do {\n            while (local_44 = puVar18, *piVar17 == 0) {\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }\n            iVar3 = uVar13 + 2;\n            uVar15 = uVar15 + 1;\n            uVar13 = uVar13 + 1;\n            *(uint *)((int)local_3c + iVar3 * 4) = *local_44;\n            piVar17 = piVar17 + 1;\n            puVar18 = local_44 + 1;\n          } while (local_38 != (code *)uVar15);\nLAB_003edef4:\n          local_44 = local_44 + 1;\n        }\n        local_30[1] = uVar13;\n        piVar8[1] = iVar7;\n        local_3c = (code *)local_58;\n        if (local_58[1] + local_54[1] != uVar10) goto LAB_003ee148;\n        FUN_003ec50c(param_1,pcVar9);\n        local_40 = (uint *)local_54;\n        if ((uint *)local_54[1] != (uint *)0x0) {\n          local_44 = local_58;\n          uVar13 = local_58[1];\n          pcVar12 = (code *)local_54[1];\n          do {\n            local_48 = (code *)((int)pcVar12 + -1);\n            uVar10 = (local_40 + (int)pcVar12)[1];\n            if (uVar13 == 0) {\n              local_44[(int)pcVar12 + 1] = uVar10;\n              if (pcVar12 == (code *)0x1) break;\n              local_48 = (code *)((int)pcVar12 + -2);\n              uVar10 = local_40[(int)pcVar12];\n              pcVar5 = local_48;\n            }\n            else {\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }\n            local_44[(int)pcVar5 + 2] = uVar10;\n            pcVar12 = local_48;\n          } while (local_48 != (code *)0x0);\n          local_44[1] = local_44[1] + local_40[1];\n        }\n        local_40 = (uint *)local_54;\n        (*(code *)PTR_free_004c5c18)(local_54);\n      }\n      *local_58 = param_1[3];\n      param_1[3] = (uint)local_58;\n      param_1[4] = param_1[4] & 0x7fffffff | 0x80000000;\n    }\n  }" (else "else") (compound_statement "{\nLAB_003edce8:\n    iVar7 = (uVar10 + 2) * 4;\n    local_58 = (uint *)(*(code *)PTR_malloc_004c5b38)(iVar7);\n    puVar1 = PTR_malloc_004c5b38;\n    if (local_58 != (uint *)0x0) {\n      local_58[1] = 0;\n      local_54 = (int *)(*(code *)puVar1)(iVar7);\n      if (local_54 != (int *)0x0) {\n        local_54[1] = 0;\n      }\n      piVar8 = (int *)param_1[3];\n      if ((int)(param_1[4] << 1) < 0) {\n        if (*piVar8 == 0) goto LAB_003ee148;\n        do {\n          piVar8 = piVar8 + 1;\n          FUN_003ed114(param_1,&local_58);\n        } while (*piVar8 != 0);\n      }\n      else {\n        FUN_003ed114(param_1,&local_58,piVar8);\n      }\n      piVar8 = local_54;\n      local_3c = (code *)local_58;\n      local_30 = local_58;\n      if ((local_58 != (uint *)0x0) && (local_58[1] != uVar10)) {\nLAB_003ee148:\n        iVar7 = (*(code *)PTR_abort_004c5d24)();\n        return iVar7;\n      }\n      if ((int)(param_1[4] << 2) < 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3240);\n      }\n      else if ((param_1[4] & 0x1fe00000) == 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628);\n      }\n      else {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558);\n      }\n      if (local_54 == (int *)0x0) {\n        FUN_003ec50c(param_1,pcVar9,local_58);\n      }\n      else {\n        local_38 = (code *)local_58[1];\n        if (local_38 == (code *)0x0) {\n          iVar7 = 0;\n          uVar13 = 0;\n        }\n        else {\n          piVar17 = local_54 + 2;\n          local_34 = local_58 + (int)local_38 + 1;\n          puVar11 = (uint *)(PTR_DAT_004c256c + -0x15d0);\n          local_48 = (code *)(local_58 + 2);\n          *piVar17 = (int)puVar11;\n          local_44 = (uint *)local_48;\n          local_40 = (uint *)piVar17;\n          puVar18 = (uint *)local_48;\n          puVar16 = (uint *)local_48;\n          if (local_48 != (code *)local_34) {\n            do {\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            } while (puVar18 != local_34);\n          }\n          iVar7 = 0;\n          uVar13 = 0;\n          uVar15 = 0;\n          puVar18 = local_44;\n          do {\n            while (local_44 = puVar18, *piVar17 == 0) {\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }\n            iVar3 = uVar13 + 2;\n            uVar15 = uVar15 + 1;\n            uVar13 = uVar13 + 1;\n            *(uint *)((int)local_3c + iVar3 * 4) = *local_44;\n            piVar17 = piVar17 + 1;\n            puVar18 = local_44 + 1;\n          } while (local_38 != (code *)uVar15);\nLAB_003edef4:\n          local_44 = local_44 + 1;\n        }\n        local_30[1] = uVar13;\n        piVar8[1] = iVar7;\n        local_3c = (code *)local_58;\n        if (local_58[1] + local_54[1] != uVar10) goto LAB_003ee148;\n        FUN_003ec50c(param_1,pcVar9);\n        local_40 = (uint *)local_54;\n        if ((uint *)local_54[1] != (uint *)0x0) {\n          local_44 = local_58;\n          uVar13 = local_58[1];\n          pcVar12 = (code *)local_54[1];\n          do {\n            local_48 = (code *)((int)pcVar12 + -1);\n            uVar10 = (local_40 + (int)pcVar12)[1];\n            if (uVar13 == 0) {\n              local_44[(int)pcVar12 + 1] = uVar10;\n              if (pcVar12 == (code *)0x1) break;\n              local_48 = (code *)((int)pcVar12 + -2);\n              uVar10 = local_40[(int)pcVar12];\n              pcVar5 = local_48;\n            }\n            else {\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }\n            local_44[(int)pcVar5 + 2] = uVar10;\n            pcVar12 = local_48;\n          } while (local_48 != (code *)0x0);\n          local_44[1] = local_44[1] + local_40[1];\n        }\n        local_40 = (uint *)local_54;\n        (*(code *)PTR_free_004c5c18)(local_54);\n      }\n      *local_58 = param_1[3];\n      param_1[3] = (uint)local_58;\n      param_1[4] = param_1[4] & 0x7fffffff | 0x80000000;\n    }\n  }" ({ "{") (labeled_statement "LAB_003edce8:\n    iVar7 = (uVar10 + 2) * 4;" (statement_identifier "LAB_003edce8") (: ":") (expression_statement "iVar7 = (uVar10 + 2) * 4;" (assignment_expression "iVar7 = (uVar10 + 2) * 4" (identifier "iVar7") (= "=") (binary_expression "(uVar10 + 2) * 4" (parenthesized_expression "(uVar10 + 2)" (( "(") (binary_expression "uVar10 + 2" (identifier "uVar10") (+ "+") (number_literal "2")) () ")")) (* "*") (number_literal "4"))) (; ";"))) (expression_statement "local_58 = (uint *)(*(code *)PTR_malloc_004c5b38)(iVar7);" (assignment_expression "local_58 = (uint *)(*(code *)PTR_malloc_004c5b38)(iVar7)" (identifier "local_58") (= "=") (cast_expression "(uint *)(*(code *)PTR_malloc_004c5b38)(iVar7)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "(*(code *)PTR_malloc_004c5b38)(iVar7)" (parenthesized_expression "(*(code *)PTR_malloc_004c5b38)" (( "(") (pointer_expression "*(code *)PTR_malloc_004c5b38" (* "*") (cast_expression "(code *)PTR_malloc_004c5b38" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_malloc_004c5b38"))) () ")")) (argument_list "(iVar7)" (( "(") (identifier "iVar7") () ")"))))) (; ";")) (expression_statement "puVar1 = PTR_malloc_004c5b38;" (assignment_expression "puVar1 = PTR_malloc_004c5b38" (identifier "puVar1") (= "=") (identifier "PTR_malloc_004c5b38")) (; ";")) (if_statement "if (local_58 != (uint *)0x0) {\n      local_58[1] = 0;\n      local_54 = (int *)(*(code *)puVar1)(iVar7);\n      if (local_54 != (int *)0x0) {\n        local_54[1] = 0;\n      }\n      piVar8 = (int *)param_1[3];\n      if ((int)(param_1[4] << 1) < 0) {\n        if (*piVar8 == 0) goto LAB_003ee148;\n        do {\n          piVar8 = piVar8 + 1;\n          FUN_003ed114(param_1,&local_58);\n        } while (*piVar8 != 0);\n      }\n      else {\n        FUN_003ed114(param_1,&local_58,piVar8);\n      }\n      piVar8 = local_54;\n      local_3c = (code *)local_58;\n      local_30 = local_58;\n      if ((local_58 != (uint *)0x0) && (local_58[1] != uVar10)) {\nLAB_003ee148:\n        iVar7 = (*(code *)PTR_abort_004c5d24)();\n        return iVar7;\n      }\n      if ((int)(param_1[4] << 2) < 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3240);\n      }\n      else if ((param_1[4] & 0x1fe00000) == 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628);\n      }\n      else {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558);\n      }\n      if (local_54 == (int *)0x0) {\n        FUN_003ec50c(param_1,pcVar9,local_58);\n      }\n      else {\n        local_38 = (code *)local_58[1];\n        if (local_38 == (code *)0x0) {\n          iVar7 = 0;\n          uVar13 = 0;\n        }\n        else {\n          piVar17 = local_54 + 2;\n          local_34 = local_58 + (int)local_38 + 1;\n          puVar11 = (uint *)(PTR_DAT_004c256c + -0x15d0);\n          local_48 = (code *)(local_58 + 2);\n          *piVar17 = (int)puVar11;\n          local_44 = (uint *)local_48;\n          local_40 = (uint *)piVar17;\n          puVar18 = (uint *)local_48;\n          puVar16 = (uint *)local_48;\n          if (local_48 != (code *)local_34) {\n            do {\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            } while (puVar18 != local_34);\n          }\n          iVar7 = 0;\n          uVar13 = 0;\n          uVar15 = 0;\n          puVar18 = local_44;\n          do {\n            while (local_44 = puVar18, *piVar17 == 0) {\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }\n            iVar3 = uVar13 + 2;\n            uVar15 = uVar15 + 1;\n            uVar13 = uVar13 + 1;\n            *(uint *)((int)local_3c + iVar3 * 4) = *local_44;\n            piVar17 = piVar17 + 1;\n            puVar18 = local_44 + 1;\n          } while (local_38 != (code *)uVar15);\nLAB_003edef4:\n          local_44 = local_44 + 1;\n        }\n        local_30[1] = uVar13;\n        piVar8[1] = iVar7;\n        local_3c = (code *)local_58;\n        if (local_58[1] + local_54[1] != uVar10) goto LAB_003ee148;\n        FUN_003ec50c(param_1,pcVar9);\n        local_40 = (uint *)local_54;\n        if ((uint *)local_54[1] != (uint *)0x0) {\n          local_44 = local_58;\n          uVar13 = local_58[1];\n          pcVar12 = (code *)local_54[1];\n          do {\n            local_48 = (code *)((int)pcVar12 + -1);\n            uVar10 = (local_40 + (int)pcVar12)[1];\n            if (uVar13 == 0) {\n              local_44[(int)pcVar12 + 1] = uVar10;\n              if (pcVar12 == (code *)0x1) break;\n              local_48 = (code *)((int)pcVar12 + -2);\n              uVar10 = local_40[(int)pcVar12];\n              pcVar5 = local_48;\n            }\n            else {\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }\n            local_44[(int)pcVar5 + 2] = uVar10;\n            pcVar12 = local_48;\n          } while (local_48 != (code *)0x0);\n          local_44[1] = local_44[1] + local_40[1];\n        }\n        local_40 = (uint *)local_54;\n        (*(code *)PTR_free_004c5c18)(local_54);\n      }\n      *local_58 = param_1[3];\n      param_1[3] = (uint)local_58;\n      param_1[4] = param_1[4] & 0x7fffffff | 0x80000000;\n    }" (if "if") (parenthesized_expression "(local_58 != (uint *)0x0)" (( "(") (binary_expression "local_58 != (uint *)0x0" (identifier "local_58") (!= "!=") (cast_expression "(uint *)0x0" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      local_58[1] = 0;\n      local_54 = (int *)(*(code *)puVar1)(iVar7);\n      if (local_54 != (int *)0x0) {\n        local_54[1] = 0;\n      }\n      piVar8 = (int *)param_1[3];\n      if ((int)(param_1[4] << 1) < 0) {\n        if (*piVar8 == 0) goto LAB_003ee148;\n        do {\n          piVar8 = piVar8 + 1;\n          FUN_003ed114(param_1,&local_58);\n        } while (*piVar8 != 0);\n      }\n      else {\n        FUN_003ed114(param_1,&local_58,piVar8);\n      }\n      piVar8 = local_54;\n      local_3c = (code *)local_58;\n      local_30 = local_58;\n      if ((local_58 != (uint *)0x0) && (local_58[1] != uVar10)) {\nLAB_003ee148:\n        iVar7 = (*(code *)PTR_abort_004c5d24)();\n        return iVar7;\n      }\n      if ((int)(param_1[4] << 2) < 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3240);\n      }\n      else if ((param_1[4] & 0x1fe00000) == 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628);\n      }\n      else {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558);\n      }\n      if (local_54 == (int *)0x0) {\n        FUN_003ec50c(param_1,pcVar9,local_58);\n      }\n      else {\n        local_38 = (code *)local_58[1];\n        if (local_38 == (code *)0x0) {\n          iVar7 = 0;\n          uVar13 = 0;\n        }\n        else {\n          piVar17 = local_54 + 2;\n          local_34 = local_58 + (int)local_38 + 1;\n          puVar11 = (uint *)(PTR_DAT_004c256c + -0x15d0);\n          local_48 = (code *)(local_58 + 2);\n          *piVar17 = (int)puVar11;\n          local_44 = (uint *)local_48;\n          local_40 = (uint *)piVar17;\n          puVar18 = (uint *)local_48;\n          puVar16 = (uint *)local_48;\n          if (local_48 != (code *)local_34) {\n            do {\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            } while (puVar18 != local_34);\n          }\n          iVar7 = 0;\n          uVar13 = 0;\n          uVar15 = 0;\n          puVar18 = local_44;\n          do {\n            while (local_44 = puVar18, *piVar17 == 0) {\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }\n            iVar3 = uVar13 + 2;\n            uVar15 = uVar15 + 1;\n            uVar13 = uVar13 + 1;\n            *(uint *)((int)local_3c + iVar3 * 4) = *local_44;\n            piVar17 = piVar17 + 1;\n            puVar18 = local_44 + 1;\n          } while (local_38 != (code *)uVar15);\nLAB_003edef4:\n          local_44 = local_44 + 1;\n        }\n        local_30[1] = uVar13;\n        piVar8[1] = iVar7;\n        local_3c = (code *)local_58;\n        if (local_58[1] + local_54[1] != uVar10) goto LAB_003ee148;\n        FUN_003ec50c(param_1,pcVar9);\n        local_40 = (uint *)local_54;\n        if ((uint *)local_54[1] != (uint *)0x0) {\n          local_44 = local_58;\n          uVar13 = local_58[1];\n          pcVar12 = (code *)local_54[1];\n          do {\n            local_48 = (code *)((int)pcVar12 + -1);\n            uVar10 = (local_40 + (int)pcVar12)[1];\n            if (uVar13 == 0) {\n              local_44[(int)pcVar12 + 1] = uVar10;\n              if (pcVar12 == (code *)0x1) break;\n              local_48 = (code *)((int)pcVar12 + -2);\n              uVar10 = local_40[(int)pcVar12];\n              pcVar5 = local_48;\n            }\n            else {\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }\n            local_44[(int)pcVar5 + 2] = uVar10;\n            pcVar12 = local_48;\n          } while (local_48 != (code *)0x0);\n          local_44[1] = local_44[1] + local_40[1];\n        }\n        local_40 = (uint *)local_54;\n        (*(code *)PTR_free_004c5c18)(local_54);\n      }\n      *local_58 = param_1[3];\n      param_1[3] = (uint)local_58;\n      param_1[4] = param_1[4] & 0x7fffffff | 0x80000000;\n    }" ({ "{") (expression_statement "local_58[1] = 0;" (assignment_expression "local_58[1] = 0" (subscript_expression "local_58[1]" (identifier "local_58") ([ "[") (number_literal "1") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "local_54 = (int *)(*(code *)puVar1)(iVar7);" (assignment_expression "local_54 = (int *)(*(code *)puVar1)(iVar7)" (identifier "local_54") (= "=") (cast_expression "(int *)(*(code *)puVar1)(iVar7)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "(*(code *)puVar1)(iVar7)" (parenthesized_expression "(*(code *)puVar1)" (( "(") (pointer_expression "*(code *)puVar1" (* "*") (cast_expression "(code *)puVar1" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "puVar1"))) () ")")) (argument_list "(iVar7)" (( "(") (identifier "iVar7") () ")"))))) (; ";")) (if_statement "if (local_54 != (int *)0x0) {\n        local_54[1] = 0;\n      }" (if "if") (parenthesized_expression "(local_54 != (int *)0x0)" (( "(") (binary_expression "local_54 != (int *)0x0" (identifier "local_54") (!= "!=") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n        local_54[1] = 0;\n      }" ({ "{") (expression_statement "local_54[1] = 0;" (assignment_expression "local_54[1] = 0" (subscript_expression "local_54[1]" (identifier "local_54") ([ "[") (number_literal "1") (] "]")) (= "=") (number_literal "0")) (; ";")) (} "}"))) (expression_statement "piVar8 = (int *)param_1[3];" (assignment_expression "piVar8 = (int *)param_1[3]" (identifier "piVar8") (= "=") (cast_expression "(int *)param_1[3]" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]")))) (; ";")) (if_statement "if ((int)(param_1[4] << 1) < 0) {\n        if (*piVar8 == 0) goto LAB_003ee148;\n        do {\n          piVar8 = piVar8 + 1;\n          FUN_003ed114(param_1,&local_58);\n        } while (*piVar8 != 0);\n      }\n      else {\n        FUN_003ed114(param_1,&local_58,piVar8);\n      }" (if "if") (parenthesized_expression "((int)(param_1[4] << 1) < 0)" (( "(") (binary_expression "(int)(param_1[4] << 1) < 0" (cast_expression "(int)(param_1[4] << 1)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(param_1[4] << 1)" (( "(") (binary_expression "param_1[4] << 1" (subscript_expression "param_1[4]" (identifier "param_1") ([ "[") (number_literal "4") (] "]")) (<< "<<") (number_literal "1")) () ")"))) (< "<") (number_literal "0")) () ")")) (compound_statement "{\n        if (*piVar8 == 0) goto LAB_003ee148;\n        do {\n          piVar8 = piVar8 + 1;\n          FUN_003ed114(param_1,&local_58);\n        } while (*piVar8 != 0);\n      }" ({ "{") (if_statement "if (*piVar8 == 0) goto LAB_003ee148;" (if "if") (parenthesized_expression "(*piVar8 == 0)" (( "(") (binary_expression "*piVar8 == 0" (pointer_expression "*piVar8" (* "*") (identifier "piVar8")) (== "==") (number_literal "0")) () ")")) (goto_statement "goto LAB_003ee148;" (goto "goto") (statement_identifier "LAB_003ee148") (; ";"))) (do_statement "do {\n          piVar8 = piVar8 + 1;\n          FUN_003ed114(param_1,&local_58);\n        } while (*piVar8 != 0);" (do "do") (compound_statement "{\n          piVar8 = piVar8 + 1;\n          FUN_003ed114(param_1,&local_58);\n        }" ({ "{") (expression_statement "piVar8 = piVar8 + 1;" (assignment_expression "piVar8 = piVar8 + 1" (identifier "piVar8") (= "=") (binary_expression "piVar8 + 1" (identifier "piVar8") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "FUN_003ed114(param_1,&local_58);" (call_expression "FUN_003ed114(param_1,&local_58)" (identifier "FUN_003ed114") (argument_list "(param_1,&local_58)" (( "(") (identifier "param_1") (, ",") (pointer_expression "&local_58" (& "&") (identifier "local_58")) () ")"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(*piVar8 != 0)" (( "(") (binary_expression "*piVar8 != 0" (pointer_expression "*piVar8" (* "*") (identifier "piVar8")) (!= "!=") (number_literal "0")) () ")")) (; ";")) (} "}")) (else_clause "else {\n        FUN_003ed114(param_1,&local_58,piVar8);\n      }" (else "else") (compound_statement "{\n        FUN_003ed114(param_1,&local_58,piVar8);\n      }" ({ "{") (expression_statement "FUN_003ed114(param_1,&local_58,piVar8);" (call_expression "FUN_003ed114(param_1,&local_58,piVar8)" (identifier "FUN_003ed114") (argument_list "(param_1,&local_58,piVar8)" (( "(") (identifier "param_1") (, ",") (pointer_expression "&local_58" (& "&") (identifier "local_58")) (, ",") (identifier "piVar8") () ")"))) (; ";")) (} "}")))) (expression_statement "piVar8 = local_54;" (assignment_expression "piVar8 = local_54" (identifier "piVar8") (= "=") (identifier "local_54")) (; ";")) (expression_statement "local_3c = (code *)local_58;" (assignment_expression "local_3c = (code *)local_58" (identifier "local_3c") (= "=") (cast_expression "(code *)local_58" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "local_58"))) (; ";")) (expression_statement "local_30 = local_58;" (assignment_expression "local_30 = local_58" (identifier "local_30") (= "=") (identifier "local_58")) (; ";")) (if_statement "if ((local_58 != (uint *)0x0) && (local_58[1] != uVar10)) {\nLAB_003ee148:\n        iVar7 = (*(code *)PTR_abort_004c5d24)();\n        return iVar7;\n      }" (if "if") (parenthesized_expression "((local_58 != (uint *)0x0) && (local_58[1] != uVar10))" (( "(") (binary_expression "(local_58 != (uint *)0x0) && (local_58[1] != uVar10)" (parenthesized_expression "(local_58 != (uint *)0x0)" (( "(") (binary_expression "local_58 != (uint *)0x0" (identifier "local_58") (!= "!=") (cast_expression "(uint *)0x0" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (&& "&&") (parenthesized_expression "(local_58[1] != uVar10)" (( "(") (binary_expression "local_58[1] != uVar10" (subscript_expression "local_58[1]" (identifier "local_58") ([ "[") (number_literal "1") (] "]")) (!= "!=") (identifier "uVar10")) () ")"))) () ")")) (compound_statement "{\nLAB_003ee148:\n        iVar7 = (*(code *)PTR_abort_004c5d24)();\n        return iVar7;\n      }" ({ "{") (labeled_statement "LAB_003ee148:\n        iVar7 = (*(code *)PTR_abort_004c5d24)();" (statement_identifier "LAB_003ee148") (: ":") (expression_statement "iVar7 = (*(code *)PTR_abort_004c5d24)();" (assignment_expression "iVar7 = (*(code *)PTR_abort_004c5d24)()" (identifier "iVar7") (= "=") (call_expression "(*(code *)PTR_abort_004c5d24)()" (parenthesized_expression "(*(code *)PTR_abort_004c5d24)" (( "(") (pointer_expression "*(code *)PTR_abort_004c5d24" (* "*") (cast_expression "(code *)PTR_abort_004c5d24" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_abort_004c5d24"))) () ")")) (argument_list "()" (( "(") () ")")))) (; ";"))) (return_statement "return iVar7;" (return "return") (identifier "iVar7") (; ";")) (} "}"))) (if_statement "if ((int)(param_1[4] << 2) < 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3240);\n      }\n      else if ((param_1[4] & 0x1fe00000) == 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628);\n      }\n      else {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558);\n      }" (if "if") (parenthesized_expression "((int)(param_1[4] << 2) < 0)" (( "(") (binary_expression "(int)(param_1[4] << 2) < 0" (cast_expression "(int)(param_1[4] << 2)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(param_1[4] << 2)" (( "(") (binary_expression "param_1[4] << 2" (subscript_expression "param_1[4]" (identifier "param_1") ([ "[") (number_literal "4") (] "]")) (<< "<<") (number_literal "2")) () ")"))) (< "<") (number_literal "0")) () ")")) (compound_statement "{\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3240);\n      }" ({ "{") (expression_statement "pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3240);" (assignment_expression "pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3240)" (identifier "pcVar9") (= "=") (cast_expression "(code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3240)" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3240)" (( "(") (binary_expression "PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3240" (identifier "PTR_s_ral_options14Struct_no_crefE_004c127c") (+ "+") (number_literal "-0x3240")) () ")")))) (; ";")) (} "}")) (else_clause "else if ((param_1[4] & 0x1fe00000) == 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628);\n      }\n      else {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558);\n      }" (else "else") (if_statement "if ((param_1[4] & 0x1fe00000) == 0) {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628);\n      }\n      else {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558);\n      }" (if "if") (parenthesized_expression "((param_1[4] & 0x1fe00000) == 0)" (( "(") (binary_expression "(param_1[4] & 0x1fe00000) == 0" (parenthesized_expression "(param_1[4] & 0x1fe00000)" (( "(") (binary_expression "param_1[4] & 0x1fe00000" (subscript_expression "param_1[4]" (identifier "param_1") ([ "[") (number_literal "4") (] "]")) (& "&") (number_literal "0x1fe00000")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628);\n      }" ({ "{") (expression_statement "pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628);" (assignment_expression "pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628)" (identifier "pcVar9") (= "=") (cast_expression "(code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628)" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628)" (( "(") (binary_expression "PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628" (identifier "PTR_s_ral_options14Struct_no_crefE_004c127c") (+ "+") (number_literal "-0x3628")) () ")")))) (; ";")) (} "}")) (else_clause "else {\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558);\n      }" (else "else") (compound_statement "{\n        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558);\n      }" ({ "{") (expression_statement "pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558);" (assignment_expression "pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558)" (identifier "pcVar9") (= "=") (cast_expression "(code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558)" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558)" (( "(") (binary_expression "PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558" (identifier "PTR_s_ral_options14Struct_no_crefE_004c127c") (+ "+") (number_literal "-0x3558")) () ")")))) (; ";")) (} "}")))))) (if_statement "if (local_54 == (int *)0x0) {\n        FUN_003ec50c(param_1,pcVar9,local_58);\n      }\n      else {\n        local_38 = (code *)local_58[1];\n        if (local_38 == (code *)0x0) {\n          iVar7 = 0;\n          uVar13 = 0;\n        }\n        else {\n          piVar17 = local_54 + 2;\n          local_34 = local_58 + (int)local_38 + 1;\n          puVar11 = (uint *)(PTR_DAT_004c256c + -0x15d0);\n          local_48 = (code *)(local_58 + 2);\n          *piVar17 = (int)puVar11;\n          local_44 = (uint *)local_48;\n          local_40 = (uint *)piVar17;\n          puVar18 = (uint *)local_48;\n          puVar16 = (uint *)local_48;\n          if (local_48 != (code *)local_34) {\n            do {\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            } while (puVar18 != local_34);\n          }\n          iVar7 = 0;\n          uVar13 = 0;\n          uVar15 = 0;\n          puVar18 = local_44;\n          do {\n            while (local_44 = puVar18, *piVar17 == 0) {\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }\n            iVar3 = uVar13 + 2;\n            uVar15 = uVar15 + 1;\n            uVar13 = uVar13 + 1;\n            *(uint *)((int)local_3c + iVar3 * 4) = *local_44;\n            piVar17 = piVar17 + 1;\n            puVar18 = local_44 + 1;\n          } while (local_38 != (code *)uVar15);\nLAB_003edef4:\n          local_44 = local_44 + 1;\n        }\n        local_30[1] = uVar13;\n        piVar8[1] = iVar7;\n        local_3c = (code *)local_58;\n        if (local_58[1] + local_54[1] != uVar10) goto LAB_003ee148;\n        FUN_003ec50c(param_1,pcVar9);\n        local_40 = (uint *)local_54;\n        if ((uint *)local_54[1] != (uint *)0x0) {\n          local_44 = local_58;\n          uVar13 = local_58[1];\n          pcVar12 = (code *)local_54[1];\n          do {\n            local_48 = (code *)((int)pcVar12 + -1);\n            uVar10 = (local_40 + (int)pcVar12)[1];\n            if (uVar13 == 0) {\n              local_44[(int)pcVar12 + 1] = uVar10;\n              if (pcVar12 == (code *)0x1) break;\n              local_48 = (code *)((int)pcVar12 + -2);\n              uVar10 = local_40[(int)pcVar12];\n              pcVar5 = local_48;\n            }\n            else {\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }\n            local_44[(int)pcVar5 + 2] = uVar10;\n            pcVar12 = local_48;\n          } while (local_48 != (code *)0x0);\n          local_44[1] = local_44[1] + local_40[1];\n        }\n        local_40 = (uint *)local_54;\n        (*(code *)PTR_free_004c5c18)(local_54);\n      }" (if "if") (parenthesized_expression "(local_54 == (int *)0x0)" (( "(") (binary_expression "local_54 == (int *)0x0" (identifier "local_54") (== "==") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n        FUN_003ec50c(param_1,pcVar9,local_58);\n      }" ({ "{") (expression_statement "FUN_003ec50c(param_1,pcVar9,local_58);" (call_expression "FUN_003ec50c(param_1,pcVar9,local_58)" (identifier "FUN_003ec50c") (argument_list "(param_1,pcVar9,local_58)" (( "(") (identifier "param_1") (, ",") (identifier "pcVar9") (, ",") (identifier "local_58") () ")"))) (; ";")) (} "}")) (else_clause "else {\n        local_38 = (code *)local_58[1];\n        if (local_38 == (code *)0x0) {\n          iVar7 = 0;\n          uVar13 = 0;\n        }\n        else {\n          piVar17 = local_54 + 2;\n          local_34 = local_58 + (int)local_38 + 1;\n          puVar11 = (uint *)(PTR_DAT_004c256c + -0x15d0);\n          local_48 = (code *)(local_58 + 2);\n          *piVar17 = (int)puVar11;\n          local_44 = (uint *)local_48;\n          local_40 = (uint *)piVar17;\n          puVar18 = (uint *)local_48;\n          puVar16 = (uint *)local_48;\n          if (local_48 != (code *)local_34) {\n            do {\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            } while (puVar18 != local_34);\n          }\n          iVar7 = 0;\n          uVar13 = 0;\n          uVar15 = 0;\n          puVar18 = local_44;\n          do {\n            while (local_44 = puVar18, *piVar17 == 0) {\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }\n            iVar3 = uVar13 + 2;\n            uVar15 = uVar15 + 1;\n            uVar13 = uVar13 + 1;\n            *(uint *)((int)local_3c + iVar3 * 4) = *local_44;\n            piVar17 = piVar17 + 1;\n            puVar18 = local_44 + 1;\n          } while (local_38 != (code *)uVar15);\nLAB_003edef4:\n          local_44 = local_44 + 1;\n        }\n        local_30[1] = uVar13;\n        piVar8[1] = iVar7;\n        local_3c = (code *)local_58;\n        if (local_58[1] + local_54[1] != uVar10) goto LAB_003ee148;\n        FUN_003ec50c(param_1,pcVar9);\n        local_40 = (uint *)local_54;\n        if ((uint *)local_54[1] != (uint *)0x0) {\n          local_44 = local_58;\n          uVar13 = local_58[1];\n          pcVar12 = (code *)local_54[1];\n          do {\n            local_48 = (code *)((int)pcVar12 + -1);\n            uVar10 = (local_40 + (int)pcVar12)[1];\n            if (uVar13 == 0) {\n              local_44[(int)pcVar12 + 1] = uVar10;\n              if (pcVar12 == (code *)0x1) break;\n              local_48 = (code *)((int)pcVar12 + -2);\n              uVar10 = local_40[(int)pcVar12];\n              pcVar5 = local_48;\n            }\n            else {\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }\n            local_44[(int)pcVar5 + 2] = uVar10;\n            pcVar12 = local_48;\n          } while (local_48 != (code *)0x0);\n          local_44[1] = local_44[1] + local_40[1];\n        }\n        local_40 = (uint *)local_54;\n        (*(code *)PTR_free_004c5c18)(local_54);\n      }" (else "else") (compound_statement "{\n        local_38 = (code *)local_58[1];\n        if (local_38 == (code *)0x0) {\n          iVar7 = 0;\n          uVar13 = 0;\n        }\n        else {\n          piVar17 = local_54 + 2;\n          local_34 = local_58 + (int)local_38 + 1;\n          puVar11 = (uint *)(PTR_DAT_004c256c + -0x15d0);\n          local_48 = (code *)(local_58 + 2);\n          *piVar17 = (int)puVar11;\n          local_44 = (uint *)local_48;\n          local_40 = (uint *)piVar17;\n          puVar18 = (uint *)local_48;\n          puVar16 = (uint *)local_48;\n          if (local_48 != (code *)local_34) {\n            do {\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            } while (puVar18 != local_34);\n          }\n          iVar7 = 0;\n          uVar13 = 0;\n          uVar15 = 0;\n          puVar18 = local_44;\n          do {\n            while (local_44 = puVar18, *piVar17 == 0) {\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }\n            iVar3 = uVar13 + 2;\n            uVar15 = uVar15 + 1;\n            uVar13 = uVar13 + 1;\n            *(uint *)((int)local_3c + iVar3 * 4) = *local_44;\n            piVar17 = piVar17 + 1;\n            puVar18 = local_44 + 1;\n          } while (local_38 != (code *)uVar15);\nLAB_003edef4:\n          local_44 = local_44 + 1;\n        }\n        local_30[1] = uVar13;\n        piVar8[1] = iVar7;\n        local_3c = (code *)local_58;\n        if (local_58[1] + local_54[1] != uVar10) goto LAB_003ee148;\n        FUN_003ec50c(param_1,pcVar9);\n        local_40 = (uint *)local_54;\n        if ((uint *)local_54[1] != (uint *)0x0) {\n          local_44 = local_58;\n          uVar13 = local_58[1];\n          pcVar12 = (code *)local_54[1];\n          do {\n            local_48 = (code *)((int)pcVar12 + -1);\n            uVar10 = (local_40 + (int)pcVar12)[1];\n            if (uVar13 == 0) {\n              local_44[(int)pcVar12 + 1] = uVar10;\n              if (pcVar12 == (code *)0x1) break;\n              local_48 = (code *)((int)pcVar12 + -2);\n              uVar10 = local_40[(int)pcVar12];\n              pcVar5 = local_48;\n            }\n            else {\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }\n            local_44[(int)pcVar5 + 2] = uVar10;\n            pcVar12 = local_48;\n          } while (local_48 != (code *)0x0);\n          local_44[1] = local_44[1] + local_40[1];\n        }\n        local_40 = (uint *)local_54;\n        (*(code *)PTR_free_004c5c18)(local_54);\n      }" ({ "{") (expression_statement "local_38 = (code *)local_58[1];" (assignment_expression "local_38 = (code *)local_58[1]" (identifier "local_38") (= "=") (cast_expression "(code *)local_58[1]" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "local_58[1]" (identifier "local_58") ([ "[") (number_literal "1") (] "]")))) (; ";")) (if_statement "if (local_38 == (code *)0x0) {\n          iVar7 = 0;\n          uVar13 = 0;\n        }\n        else {\n          piVar17 = local_54 + 2;\n          local_34 = local_58 + (int)local_38 + 1;\n          puVar11 = (uint *)(PTR_DAT_004c256c + -0x15d0);\n          local_48 = (code *)(local_58 + 2);\n          *piVar17 = (int)puVar11;\n          local_44 = (uint *)local_48;\n          local_40 = (uint *)piVar17;\n          puVar18 = (uint *)local_48;\n          puVar16 = (uint *)local_48;\n          if (local_48 != (code *)local_34) {\n            do {\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            } while (puVar18 != local_34);\n          }\n          iVar7 = 0;\n          uVar13 = 0;\n          uVar15 = 0;\n          puVar18 = local_44;\n          do {\n            while (local_44 = puVar18, *piVar17 == 0) {\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }\n            iVar3 = uVar13 + 2;\n            uVar15 = uVar15 + 1;\n            uVar13 = uVar13 + 1;\n            *(uint *)((int)local_3c + iVar3 * 4) = *local_44;\n            piVar17 = piVar17 + 1;\n            puVar18 = local_44 + 1;\n          } while (local_38 != (code *)uVar15);\nLAB_003edef4:\n          local_44 = local_44 + 1;\n        }" (if "if") (parenthesized_expression "(local_38 == (code *)0x0)" (( "(") (binary_expression "local_38 == (code *)0x0" (identifier "local_38") (== "==") (cast_expression "(code *)0x0" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n          iVar7 = 0;\n          uVar13 = 0;\n        }" ({ "{") (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" (identifier "iVar7") (= "=") (number_literal "0")) (; ";")) (expression_statement "uVar13 = 0;" (assignment_expression "uVar13 = 0" (identifier "uVar13") (= "=") (number_literal "0")) (; ";")) (} "}")) (else_clause "else {\n          piVar17 = local_54 + 2;\n          local_34 = local_58 + (int)local_38 + 1;\n          puVar11 = (uint *)(PTR_DAT_004c256c + -0x15d0);\n          local_48 = (code *)(local_58 + 2);\n          *piVar17 = (int)puVar11;\n          local_44 = (uint *)local_48;\n          local_40 = (uint *)piVar17;\n          puVar18 = (uint *)local_48;\n          puVar16 = (uint *)local_48;\n          if (local_48 != (code *)local_34) {\n            do {\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            } while (puVar18 != local_34);\n          }\n          iVar7 = 0;\n          uVar13 = 0;\n          uVar15 = 0;\n          puVar18 = local_44;\n          do {\n            while (local_44 = puVar18, *piVar17 == 0) {\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }\n            iVar3 = uVar13 + 2;\n            uVar15 = uVar15 + 1;\n            uVar13 = uVar13 + 1;\n            *(uint *)((int)local_3c + iVar3 * 4) = *local_44;\n            piVar17 = piVar17 + 1;\n            puVar18 = local_44 + 1;\n          } while (local_38 != (code *)uVar15);\nLAB_003edef4:\n          local_44 = local_44 + 1;\n        }" (else "else") (compound_statement "{\n          piVar17 = local_54 + 2;\n          local_34 = local_58 + (int)local_38 + 1;\n          puVar11 = (uint *)(PTR_DAT_004c256c + -0x15d0);\n          local_48 = (code *)(local_58 + 2);\n          *piVar17 = (int)puVar11;\n          local_44 = (uint *)local_48;\n          local_40 = (uint *)piVar17;\n          puVar18 = (uint *)local_48;\n          puVar16 = (uint *)local_48;\n          if (local_48 != (code *)local_34) {\n            do {\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            } while (puVar18 != local_34);\n          }\n          iVar7 = 0;\n          uVar13 = 0;\n          uVar15 = 0;\n          puVar18 = local_44;\n          do {\n            while (local_44 = puVar18, *piVar17 == 0) {\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }\n            iVar3 = uVar13 + 2;\n            uVar15 = uVar15 + 1;\n            uVar13 = uVar13 + 1;\n            *(uint *)((int)local_3c + iVar3 * 4) = *local_44;\n            piVar17 = piVar17 + 1;\n            puVar18 = local_44 + 1;\n          } while (local_38 != (code *)uVar15);\nLAB_003edef4:\n          local_44 = local_44 + 1;\n        }" ({ "{") (expression_statement "piVar17 = local_54 + 2;" (assignment_expression "piVar17 = local_54 + 2" (identifier "piVar17") (= "=") (binary_expression "local_54 + 2" (identifier "local_54") (+ "+") (number_literal "2"))) (; ";")) (expression_statement "local_34 = local_58 + (int)local_38 + 1;" (assignment_expression "local_34 = local_58 + (int)local_38 + 1" (identifier "local_34") (= "=") (binary_expression "local_58 + (int)local_38 + 1" (binary_expression "local_58 + (int)local_38" (identifier "local_58") (+ "+") (cast_expression "(int)local_38" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_38"))) (+ "+") (number_literal "1"))) (; ";")) (expression_statement "puVar11 = (uint *)(PTR_DAT_004c256c + -0x15d0);" (assignment_expression "puVar11 = (uint *)(PTR_DAT_004c256c + -0x15d0)" (identifier "puVar11") (= "=") (cast_expression "(uint *)(PTR_DAT_004c256c + -0x15d0)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_DAT_004c256c + -0x15d0)" (( "(") (binary_expression "PTR_DAT_004c256c + -0x15d0" (identifier "PTR_DAT_004c256c") (+ "+") (number_literal "-0x15d0")) () ")")))) (; ";")) (expression_statement "local_48 = (code *)(local_58 + 2);" (assignment_expression "local_48 = (code *)(local_58 + 2)" (identifier "local_48") (= "=") (cast_expression "(code *)(local_58 + 2)" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_58 + 2)" (( "(") (binary_expression "local_58 + 2" (identifier "local_58") (+ "+") (number_literal "2")) () ")")))) (; ";")) (expression_statement "*piVar17 = (int)puVar11;" (assignment_expression "*piVar17 = (int)puVar11" (pointer_expression "*piVar17" (* "*") (identifier "piVar17")) (= "=") (cast_expression "(int)puVar11" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar11"))) (; ";")) (expression_statement "local_44 = (uint *)local_48;" (assignment_expression "local_44 = (uint *)local_48" (identifier "local_44") (= "=") (cast_expression "(uint *)local_48" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "local_48"))) (; ";")) (expression_statement "local_40 = (uint *)piVar17;" (assignment_expression "local_40 = (uint *)piVar17" (identifier "local_40") (= "=") (cast_expression "(uint *)piVar17" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "piVar17"))) (; ";")) (expression_statement "puVar18 = (uint *)local_48;" (assignment_expression "puVar18 = (uint *)local_48" (identifier "puVar18") (= "=") (cast_expression "(uint *)local_48" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "local_48"))) (; ";")) (expression_statement "puVar16 = (uint *)local_48;" (assignment_expression "puVar16 = (uint *)local_48" (identifier "puVar16") (= "=") (cast_expression "(uint *)local_48" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "local_48"))) (; ";")) (if_statement "if (local_48 != (code *)local_34) {\n            do {\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            } while (puVar18 != local_34);\n          }" (if "if") (parenthesized_expression "(local_48 != (code *)local_34)" (( "(") (binary_expression "local_48 != (code *)local_34" (identifier "local_48") (!= "!=") (cast_expression "(code *)local_34" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "local_34"))) () ")")) (compound_statement "{\n            do {\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            } while (puVar18 != local_34);\n          }" ({ "{") (do_statement "do {\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            } while (puVar18 != local_34);" (do "do") (compound_statement "{\n              while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }\n              local_40 = (uint *)((int *)local_40 + 1);\n              puVar18 = puVar16 + 1;\n              *local_40 = (uint)puVar19;\n              puVar16 = puVar18;\n            }" ({ "{") (while_statement "while ((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    ) {\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }" (while "while") (parenthesized_expression "((puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))\n                    )" (( "(") (parenthesized_expression "(puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))" (( "(") (comma_expression "puVar19 = puVar11, puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0)" (assignment_expression "puVar19 = puVar11" (identifier "puVar19") (= "=") (identifier "puVar11")) (, ",") (binary_expression "puVar11 != puVar18 &&\n                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0)" (binary_expression "puVar11 != puVar18" (identifier "puVar11") (!= "!=") (identifier "puVar18")) (&& "&&") (parenthesized_expression "(iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0)" (( "(") (comma_expression "iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0" (assignment_expression "iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18)" (identifier "iVar7") (= "=") (call_expression "(*pcVar9)(param_1,puVar16[1],*puVar18)" (parenthesized_expression "(*pcVar9)" (( "(") (pointer_expression "*pcVar9" (* "*") (identifier "pcVar9")) () ")")) (argument_list "(param_1,puVar16[1],*puVar18)" (( "(") (identifier "param_1") (, ",") (subscript_expression "puVar16[1]" (identifier "puVar16") ([ "[") (number_literal "1") (] "]")) (, ",") (pointer_expression "*puVar18" (* "*") (identifier "puVar18")) () ")")))) (, ",") (comma_expression "puVar19 = puVar18, iVar7 < 0" (assignment_expression "puVar19 = puVar18" (identifier "puVar19") (= "=") (identifier "puVar18")) (, ",") (binary_expression "iVar7 < 0" (identifier "iVar7") (< "<") (number_literal "0")))) () ")")))) () ")")) () ")")) (compound_statement "{\n                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));\n                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;\n                puVar18 = puVar19;\n              }" ({ "{") (expression_statement "puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));" (assignment_expression "puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48))" (identifier "puVar19") (= "=") (pointer_expression "*(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48))" (* "*") (cast_expression "(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48))" (( "(") (type_descriptor "uint **" (type_identifier "uint") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "((int)piVar8 + (int)puVar18 + (8 - (int)local_48))" (( "(") (binary_expression "(int)piVar8 + (int)puVar18 + (8 - (int)local_48)" (binary_expression "(int)piVar8 + (int)puVar18" (cast_expression "(int)piVar8" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "piVar8")) (+ "+") (cast_expression "(int)puVar18" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar18"))) (+ "+") (parenthesized_expression "(8 - (int)local_48)" (( "(") (binary_expression "8 - (int)local_48" (number_literal "8") (- "-") (cast_expression "(int)local_48" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_48"))) () ")"))) () ")"))))) (; ";")) (expression_statement "*(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;" (assignment_expression "*(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0" (pointer_expression "*(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48))" (* "*") (cast_expression "(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48))" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)piVar8 + (int)puVar18 + (8 - (int)local_48))" (( "(") (binary_expression "(int)piVar8 + (int)puVar18 + (8 - (int)local_48)" (binary_expression "(int)piVar8 + (int)puVar18" (cast_expression "(int)piVar8" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "piVar8")) (+ "+") (cast_expression "(int)puVar18" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar18"))) (+ "+") (parenthesized_expression "(8 - (int)local_48)" (( "(") (binary_expression "8 - (int)local_48" (number_literal "8") (- "-") (cast_expression "(int)local_48" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_48"))) () ")"))) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar18 = puVar19;" (assignment_expression "puVar18 = puVar19" (identifier "puVar18") (= "=") (identifier "puVar19")) (; ";")) (} "}"))) (expression_statement "local_40 = (uint *)((int *)local_40 + 1);" (assignment_expression "local_40 = (uint *)((int *)local_40 + 1)" (identifier "local_40") (= "=") (cast_expression "(uint *)((int *)local_40 + 1)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int *)local_40 + 1)" (( "(") (binary_expression "(int *)local_40 + 1" (cast_expression "(int *)local_40" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "local_40")) (+ "+") (number_literal "1")) () ")")))) (; ";")) (expression_statement "puVar18 = puVar16 + 1;" (assignment_expression "puVar18 = puVar16 + 1" (identifier "puVar18") (= "=") (binary_expression "puVar16 + 1" (identifier "puVar16") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*local_40 = (uint)puVar19;" (assignment_expression "*local_40 = (uint)puVar19" (pointer_expression "*local_40" (* "*") (identifier "local_40")) (= "=") (cast_expression "(uint)puVar19" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "puVar19"))) (; ";")) (expression_statement "puVar16 = puVar18;" (assignment_expression "puVar16 = puVar18" (identifier "puVar16") (= "=") (identifier "puVar18")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(puVar18 != local_34)" (( "(") (binary_expression "puVar18 != local_34" (identifier "puVar18") (!= "!=") (identifier "local_34")) () ")")) (; ";")) (} "}"))) (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" (identifier "iVar7") (= "=") (number_literal "0")) (; ";")) (expression_statement "uVar13 = 0;" (assignment_expression "uVar13 = 0" (identifier "uVar13") (= "=") (number_literal "0")) (; ";")) (expression_statement "uVar15 = 0;" (assignment_expression "uVar15 = 0" (identifier "uVar15") (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar18 = local_44;" (assignment_expression "puVar18 = local_44" (identifier "puVar18") (= "=") (identifier "local_44")) (; ";")) (do_statement "do {\n            while (local_44 = puVar18, *piVar17 == 0) {\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }\n            iVar3 = uVar13 + 2;\n            uVar15 = uVar15 + 1;\n            uVar13 = uVar13 + 1;\n            *(uint *)((int)local_3c + iVar3 * 4) = *local_44;\n            piVar17 = piVar17 + 1;\n            puVar18 = local_44 + 1;\n          } while (local_38 != (code *)uVar15);" (do "do") (compound_statement "{\n            while (local_44 = puVar18, *piVar17 == 0) {\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }\n            iVar3 = uVar13 + 2;\n            uVar15 = uVar15 + 1;\n            uVar13 = uVar13 + 1;\n            *(uint *)((int)local_3c + iVar3 * 4) = *local_44;\n            piVar17 = piVar17 + 1;\n            puVar18 = local_44 + 1;\n          }" ({ "{") (while_statement "while (local_44 = puVar18, *piVar17 == 0) {\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }" (while "while") (parenthesized_expression "(local_44 = puVar18, *piVar17 == 0)" (( "(") (comma_expression "local_44 = puVar18, *piVar17 == 0" (assignment_expression "local_44 = puVar18" (identifier "local_44") (= "=") (identifier "puVar18")) (, ",") (binary_expression "*piVar17 == 0" (pointer_expression "*piVar17" (* "*") (identifier "piVar17")) (== "==") (number_literal "0"))) () ")")) (compound_statement "{\n              iVar3 = iVar7 + 2;\n              uVar15 = uVar15 + 1;\n              iVar7 = iVar7 + 1;\n              piVar8[iVar3] = *local_44;\n              piVar17 = piVar17 + 1;\n              puVar18 = local_44 + 1;\n              if (local_38 == (code *)uVar15) goto LAB_003edef4;\n            }" ({ "{") (expression_statement "iVar3 = iVar7 + 2;" (assignment_expression "iVar3 = iVar7 + 2" (identifier "iVar3") (= "=") (binary_expression "iVar7 + 2" (identifier "iVar7") (+ "+") (number_literal "2"))) (; ";")) (expression_statement "uVar15 = uVar15 + 1;" (assignment_expression "uVar15 = uVar15 + 1" (identifier "uVar15") (= "=") (binary_expression "uVar15 + 1" (identifier "uVar15") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "iVar7 = iVar7 + 1;" (assignment_expression "iVar7 = iVar7 + 1" (identifier "iVar7") (= "=") (binary_expression "iVar7 + 1" (identifier "iVar7") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "piVar8[iVar3] = *local_44;" (assignment_expression "piVar8[iVar3] = *local_44" (subscript_expression "piVar8[iVar3]" (identifier "piVar8") ([ "[") (identifier "iVar3") (] "]")) (= "=") (pointer_expression "*local_44" (* "*") (identifier "local_44"))) (; ";")) (expression_statement "piVar17 = piVar17 + 1;" (assignment_expression "piVar17 = piVar17 + 1" (identifier "piVar17") (= "=") (binary_expression "piVar17 + 1" (identifier "piVar17") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "puVar18 = local_44 + 1;" (assignment_expression "puVar18 = local_44 + 1" (identifier "puVar18") (= "=") (binary_expression "local_44 + 1" (identifier "local_44") (+ "+") (number_literal "1"))) (; ";")) (if_statement "if (local_38 == (code *)uVar15) goto LAB_003edef4;" (if "if") (parenthesized_expression "(local_38 == (code *)uVar15)" (( "(") (binary_expression "local_38 == (code *)uVar15" (identifier "local_38") (== "==") (cast_expression "(code *)uVar15" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "uVar15"))) () ")")) (goto_statement "goto LAB_003edef4;" (goto "goto") (statement_identifier "LAB_003edef4") (; ";"))) (} "}"))) (expression_statement "iVar3 = uVar13 + 2;" (assignment_expression "iVar3 = uVar13 + 2" (identifier "iVar3") (= "=") (binary_expression "uVar13 + 2" (identifier "uVar13") (+ "+") (number_literal "2"))) (; ";")) (expression_statement "uVar15 = uVar15 + 1;" (assignment_expression "uVar15 = uVar15 + 1" (identifier "uVar15") (= "=") (binary_expression "uVar15 + 1" (identifier "uVar15") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "uVar13 = uVar13 + 1;" (assignment_expression "uVar13 = uVar13 + 1" (identifier "uVar13") (= "=") (binary_expression "uVar13 + 1" (identifier "uVar13") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*(uint *)((int)local_3c + iVar3 * 4) = *local_44;" (assignment_expression "*(uint *)((int)local_3c + iVar3 * 4) = *local_44" (pointer_expression "*(uint *)((int)local_3c + iVar3 * 4)" (* "*") (cast_expression "(uint *)((int)local_3c + iVar3 * 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)local_3c + iVar3 * 4)" (( "(") (binary_expression "(int)local_3c + iVar3 * 4" (cast_expression "(int)local_3c" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_3c")) (+ "+") (binary_expression "iVar3 * 4" (identifier "iVar3") (* "*") (number_literal "4"))) () ")")))) (= "=") (pointer_expression "*local_44" (* "*") (identifier "local_44"))) (; ";")) (expression_statement "piVar17 = piVar17 + 1;" (assignment_expression "piVar17 = piVar17 + 1" (identifier "piVar17") (= "=") (binary_expression "piVar17 + 1" (identifier "piVar17") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "puVar18 = local_44 + 1;" (assignment_expression "puVar18 = local_44 + 1" (identifier "puVar18") (= "=") (binary_expression "local_44 + 1" (identifier "local_44") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(local_38 != (code *)uVar15)" (( "(") (binary_expression "local_38 != (code *)uVar15" (identifier "local_38") (!= "!=") (cast_expression "(code *)uVar15" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "uVar15"))) () ")")) (; ";")) (labeled_statement "LAB_003edef4:\n          local_44 = local_44 + 1;" (statement_identifier "LAB_003edef4") (: ":") (expression_statement "local_44 = local_44 + 1;" (assignment_expression "local_44 = local_44 + 1" (identifier "local_44") (= "=") (binary_expression "local_44 + 1" (identifier "local_44") (+ "+") (number_literal "1"))) (; ";"))) (} "}")))) (expression_statement "local_30[1] = uVar13;" (assignment_expression "local_30[1] = uVar13" (subscript_expression "local_30[1]" (identifier "local_30") ([ "[") (number_literal "1") (] "]")) (= "=") (identifier "uVar13")) (; ";")) (expression_statement "piVar8[1] = iVar7;" (assignment_expression "piVar8[1] = iVar7" (subscript_expression "piVar8[1]" (identifier "piVar8") ([ "[") (number_literal "1") (] "]")) (= "=") (identifier "iVar7")) (; ";")) (expression_statement "local_3c = (code *)local_58;" (assignment_expression "local_3c = (code *)local_58" (identifier "local_3c") (= "=") (cast_expression "(code *)local_58" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "local_58"))) (; ";")) (if_statement "if (local_58[1] + local_54[1] != uVar10) goto LAB_003ee148;" (if "if") (parenthesized_expression "(local_58[1] + local_54[1] != uVar10)" (( "(") (binary_expression "local_58[1] + local_54[1] != uVar10" (binary_expression "local_58[1] + local_54[1]" (subscript_expression "local_58[1]" (identifier "local_58") ([ "[") (number_literal "1") (] "]")) (+ "+") (subscript_expression "local_54[1]" (identifier "local_54") ([ "[") (number_literal "1") (] "]"))) (!= "!=") (identifier "uVar10")) () ")")) (goto_statement "goto LAB_003ee148;" (goto "goto") (statement_identifier "LAB_003ee148") (; ";"))) (expression_statement "FUN_003ec50c(param_1,pcVar9);" (call_expression "FUN_003ec50c(param_1,pcVar9)" (identifier "FUN_003ec50c") (argument_list "(param_1,pcVar9)" (( "(") (identifier "param_1") (, ",") (identifier "pcVar9") () ")"))) (; ";")) (expression_statement "local_40 = (uint *)local_54;" (assignment_expression "local_40 = (uint *)local_54" (identifier "local_40") (= "=") (cast_expression "(uint *)local_54" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "local_54"))) (; ";")) (if_statement "if ((uint *)local_54[1] != (uint *)0x0) {\n          local_44 = local_58;\n          uVar13 = local_58[1];\n          pcVar12 = (code *)local_54[1];\n          do {\n            local_48 = (code *)((int)pcVar12 + -1);\n            uVar10 = (local_40 + (int)pcVar12)[1];\n            if (uVar13 == 0) {\n              local_44[(int)pcVar12 + 1] = uVar10;\n              if (pcVar12 == (code *)0x1) break;\n              local_48 = (code *)((int)pcVar12 + -2);\n              uVar10 = local_40[(int)pcVar12];\n              pcVar5 = local_48;\n            }\n            else {\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }\n            local_44[(int)pcVar5 + 2] = uVar10;\n            pcVar12 = local_48;\n          } while (local_48 != (code *)0x0);\n          local_44[1] = local_44[1] + local_40[1];\n        }" (if "if") (parenthesized_expression "((uint *)local_54[1] != (uint *)0x0)" (( "(") (binary_expression "(uint *)local_54[1] != (uint *)0x0" (cast_expression "(uint *)local_54[1]" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "local_54[1]" (identifier "local_54") ([ "[") (number_literal "1") (] "]"))) (!= "!=") (cast_expression "(uint *)0x0" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n          local_44 = local_58;\n          uVar13 = local_58[1];\n          pcVar12 = (code *)local_54[1];\n          do {\n            local_48 = (code *)((int)pcVar12 + -1);\n            uVar10 = (local_40 + (int)pcVar12)[1];\n            if (uVar13 == 0) {\n              local_44[(int)pcVar12 + 1] = uVar10;\n              if (pcVar12 == (code *)0x1) break;\n              local_48 = (code *)((int)pcVar12 + -2);\n              uVar10 = local_40[(int)pcVar12];\n              pcVar5 = local_48;\n            }\n            else {\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }\n            local_44[(int)pcVar5 + 2] = uVar10;\n            pcVar12 = local_48;\n          } while (local_48 != (code *)0x0);\n          local_44[1] = local_44[1] + local_40[1];\n        }" ({ "{") (expression_statement "local_44 = local_58;" (assignment_expression "local_44 = local_58" (identifier "local_44") (= "=") (identifier "local_58")) (; ";")) (expression_statement "uVar13 = local_58[1];" (assignment_expression "uVar13 = local_58[1]" (identifier "uVar13") (= "=") (subscript_expression "local_58[1]" (identifier "local_58") ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "pcVar12 = (code *)local_54[1];" (assignment_expression "pcVar12 = (code *)local_54[1]" (identifier "pcVar12") (= "=") (cast_expression "(code *)local_54[1]" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "local_54[1]" (identifier "local_54") ([ "[") (number_literal "1") (] "]")))) (; ";")) (do_statement "do {\n            local_48 = (code *)((int)pcVar12 + -1);\n            uVar10 = (local_40 + (int)pcVar12)[1];\n            if (uVar13 == 0) {\n              local_44[(int)pcVar12 + 1] = uVar10;\n              if (pcVar12 == (code *)0x1) break;\n              local_48 = (code *)((int)pcVar12 + -2);\n              uVar10 = local_40[(int)pcVar12];\n              pcVar5 = local_48;\n            }\n            else {\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }\n            local_44[(int)pcVar5 + 2] = uVar10;\n            pcVar12 = local_48;\n          } while (local_48 != (code *)0x0);" (do "do") (compound_statement "{\n            local_48 = (code *)((int)pcVar12 + -1);\n            uVar10 = (local_40 + (int)pcVar12)[1];\n            if (uVar13 == 0) {\n              local_44[(int)pcVar12 + 1] = uVar10;\n              if (pcVar12 == (code *)0x1) break;\n              local_48 = (code *)((int)pcVar12 + -2);\n              uVar10 = local_40[(int)pcVar12];\n              pcVar5 = local_48;\n            }\n            else {\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }\n            local_44[(int)pcVar5 + 2] = uVar10;\n            pcVar12 = local_48;\n          }" ({ "{") (expression_statement "local_48 = (code *)((int)pcVar12 + -1);" (assignment_expression "local_48 = (code *)((int)pcVar12 + -1)" (identifier "local_48") (= "=") (cast_expression "(code *)((int)pcVar12 + -1)" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)pcVar12 + -1)" (( "(") (binary_expression "(int)pcVar12 + -1" (cast_expression "(int)pcVar12" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pcVar12")) (+ "+") (number_literal "-1")) () ")")))) (; ";")) (expression_statement "uVar10 = (local_40 + (int)pcVar12)[1];" (assignment_expression "uVar10 = (local_40 + (int)pcVar12)[1]" (identifier "uVar10") (= "=") (subscript_expression "(local_40 + (int)pcVar12)[1]" (parenthesized_expression "(local_40 + (int)pcVar12)" (( "(") (binary_expression "local_40 + (int)pcVar12" (identifier "local_40") (+ "+") (cast_expression "(int)pcVar12" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pcVar12"))) () ")")) ([ "[") (number_literal "1") (] "]"))) (; ";")) (if_statement "if (uVar13 == 0) {\n              local_44[(int)pcVar12 + 1] = uVar10;\n              if (pcVar12 == (code *)0x1) break;\n              local_48 = (code *)((int)pcVar12 + -2);\n              uVar10 = local_40[(int)pcVar12];\n              pcVar5 = local_48;\n            }\n            else {\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }" (if "if") (parenthesized_expression "(uVar13 == 0)" (( "(") (binary_expression "uVar13 == 0" (identifier "uVar13") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n              local_44[(int)pcVar12 + 1] = uVar10;\n              if (pcVar12 == (code *)0x1) break;\n              local_48 = (code *)((int)pcVar12 + -2);\n              uVar10 = local_40[(int)pcVar12];\n              pcVar5 = local_48;\n            }" ({ "{") (expression_statement "local_44[(int)pcVar12 + 1] = uVar10;" (assignment_expression "local_44[(int)pcVar12 + 1] = uVar10" (subscript_expression "local_44[(int)pcVar12 + 1]" (identifier "local_44") ([ "[") (binary_expression "(int)pcVar12 + 1" (cast_expression "(int)pcVar12" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pcVar12")) (+ "+") (number_literal "1")) (] "]")) (= "=") (identifier "uVar10")) (; ";")) (if_statement "if (pcVar12 == (code *)0x1) break;" (if "if") (parenthesized_expression "(pcVar12 == (code *)0x1)" (( "(") (binary_expression "pcVar12 == (code *)0x1" (identifier "pcVar12") (== "==") (cast_expression "(code *)0x1" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x1"))) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "local_48 = (code *)((int)pcVar12 + -2);" (assignment_expression "local_48 = (code *)((int)pcVar12 + -2)" (identifier "local_48") (= "=") (cast_expression "(code *)((int)pcVar12 + -2)" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)pcVar12 + -2)" (( "(") (binary_expression "(int)pcVar12 + -2" (cast_expression "(int)pcVar12" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pcVar12")) (+ "+") (number_literal "-2")) () ")")))) (; ";")) (expression_statement "uVar10 = local_40[(int)pcVar12];" (assignment_expression "uVar10 = local_40[(int)pcVar12]" (identifier "uVar10") (= "=") (subscript_expression "local_40[(int)pcVar12]" (identifier "local_40") ([ "[") (cast_expression "(int)pcVar12" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pcVar12")) (] "]"))) (; ";")) (expression_statement "pcVar5 = local_48;" (assignment_expression "pcVar5 = local_48" (identifier "pcVar5") (= "=") (identifier "local_48")) (; ";")) (} "}")) (else_clause "else {\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }" (else "else") (compound_statement "{\n              puVar18 = local_44 + uVar13;\n              do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);\n            }" ({ "{") (expression_statement "puVar18 = local_44 + uVar13;" (assignment_expression "puVar18 = local_44 + uVar13" (identifier "puVar18") (= "=") (binary_expression "local_44 + uVar13" (identifier "local_44") (+ "+") (identifier "uVar13"))) (; ";")) (do_statement "do {\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              } while (uVar15 != 0);" (do "do") (compound_statement "{\n                uVar15 = uVar13 - 1;\n                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);\n                pcVar5 = (code *)((int)pcVar12 + uVar15);\n                if (iVar7 < 1) break;\n                puVar18[(int)pcVar12 + 1] = puVar18[1];\n                pcVar5 = local_48;\n                puVar18 = puVar18 + -1;\n                uVar13 = uVar15;\n              }" ({ "{") (expression_statement "uVar15 = uVar13 - 1;" (assignment_expression "uVar15 = uVar13 - 1" (identifier "uVar15") (= "=") (binary_expression "uVar13 - 1" (identifier "uVar13") (- "-") (number_literal "1"))) (; ";")) (expression_statement "iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);" (assignment_expression "iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10)" (identifier "iVar7") (= "=") (call_expression "(*pcVar9)(param_1,puVar18[1],uVar10)" (parenthesized_expression "(*pcVar9)" (( "(") (pointer_expression "*pcVar9" (* "*") (identifier "pcVar9")) () ")")) (argument_list "(param_1,puVar18[1],uVar10)" (( "(") (identifier "param_1") (, ",") (subscript_expression "puVar18[1]" (identifier "puVar18") ([ "[") (number_literal "1") (] "]")) (, ",") (identifier "uVar10") () ")")))) (; ";")) (expression_statement "pcVar5 = (code *)((int)pcVar12 + uVar15);" (assignment_expression "pcVar5 = (code *)((int)pcVar12 + uVar15)" (identifier "pcVar5") (= "=") (cast_expression "(code *)((int)pcVar12 + uVar15)" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)pcVar12 + uVar15)" (( "(") (binary_expression "(int)pcVar12 + uVar15" (cast_expression "(int)pcVar12" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pcVar12")) (+ "+") (identifier "uVar15")) () ")")))) (; ";")) (if_statement "if (iVar7 < 1) break;" (if "if") (parenthesized_expression "(iVar7 < 1)" (( "(") (binary_expression "iVar7 < 1" (identifier "iVar7") (< "<") (number_literal "1")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "puVar18[(int)pcVar12 + 1] = puVar18[1];" (assignment_expression "puVar18[(int)pcVar12 + 1] = puVar18[1]" (subscript_expression "puVar18[(int)pcVar12 + 1]" (identifier "puVar18") ([ "[") (binary_expression "(int)pcVar12 + 1" (cast_expression "(int)pcVar12" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pcVar12")) (+ "+") (number_literal "1")) (] "]")) (= "=") (subscript_expression "puVar18[1]" (identifier "puVar18") ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "pcVar5 = local_48;" (assignment_expression "pcVar5 = local_48" (identifier "pcVar5") (= "=") (identifier "local_48")) (; ";")) (expression_statement "puVar18 = puVar18 + -1;" (assignment_expression "puVar18 = puVar18 + -1" (identifier "puVar18") (= "=") (binary_expression "puVar18 + -1" (identifier "puVar18") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "uVar13 = uVar15;" (assignment_expression "uVar13 = uVar15" (identifier "uVar13") (= "=") (identifier "uVar15")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(uVar15 != 0)" (( "(") (binary_expression "uVar15 != 0" (identifier "uVar15") (!= "!=") (number_literal "0")) () ")")) (; ";")) (} "}")))) (expression_statement "local_44[(int)pcVar5 + 2] = uVar10;" (assignment_expression "local_44[(int)pcVar5 + 2] = uVar10" (subscript_expression "local_44[(int)pcVar5 + 2]" (identifier "local_44") ([ "[") (binary_expression "(int)pcVar5 + 2" (cast_expression "(int)pcVar5" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pcVar5")) (+ "+") (number_literal "2")) (] "]")) (= "=") (identifier "uVar10")) (; ";")) (expression_statement "pcVar12 = local_48;" (assignment_expression "pcVar12 = local_48" (identifier "pcVar12") (= "=") (identifier "local_48")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(local_48 != (code *)0x0)" (( "(") (binary_expression "local_48 != (code *)0x0" (identifier "local_48") (!= "!=") (cast_expression "(code *)0x0" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (; ";")) (expression_statement "local_44[1] = local_44[1] + local_40[1];" (assignment_expression "local_44[1] = local_44[1] + local_40[1]" (subscript_expression "local_44[1]" (identifier "local_44") ([ "[") (number_literal "1") (] "]")) (= "=") (binary_expression "local_44[1] + local_40[1]" (subscript_expression "local_44[1]" (identifier "local_44") ([ "[") (number_literal "1") (] "]")) (+ "+") (subscript_expression "local_40[1]" (identifier "local_40") ([ "[") (number_literal "1") (] "]")))) (; ";")) (} "}"))) (expression_statement "local_40 = (uint *)local_54;" (assignment_expression "local_40 = (uint *)local_54" (identifier "local_40") (= "=") (cast_expression "(uint *)local_54" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "local_54"))) (; ";")) (expression_statement "(*(code *)PTR_free_004c5c18)(local_54);" (call_expression "(*(code *)PTR_free_004c5c18)(local_54)" (parenthesized_expression "(*(code *)PTR_free_004c5c18)" (( "(") (pointer_expression "*(code *)PTR_free_004c5c18" (* "*") (cast_expression "(code *)PTR_free_004c5c18" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_free_004c5c18"))) () ")")) (argument_list "(local_54)" (( "(") (identifier "local_54") () ")"))) (; ";")) (} "}")))) (expression_statement "*local_58 = param_1[3];" (assignment_expression "*local_58 = param_1[3]" (pointer_expression "*local_58" (* "*") (identifier "local_58")) (= "=") (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]"))) (; ";")) (expression_statement "param_1[3] = (uint)local_58;" (assignment_expression "param_1[3] = (uint)local_58" (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]")) (= "=") (cast_expression "(uint)local_58" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "local_58"))) (; ";")) (expression_statement "param_1[4] = param_1[4] & 0x7fffffff | 0x80000000;" (assignment_expression "param_1[4] = param_1[4] & 0x7fffffff | 0x80000000" (subscript_expression "param_1[4]" (identifier "param_1") ([ "[") (number_literal "4") (] "]")) (= "=") (binary_expression "param_1[4] & 0x7fffffff | 0x80000000" (binary_expression "param_1[4] & 0x7fffffff" (subscript_expression "param_1[4]" (identifier "param_1") ([ "[") (number_literal "4") (] "]")) (& "&") (number_literal "0x7fffffff")) (| "|") (number_literal "0x80000000"))) (; ";")) (} "}"))) (} "}")))) (if_statement "if (param_2 < (undefined *)*param_1) {\n    return 0;\n  }" (if "if") (parenthesized_expression "(param_2 < (undefined *)*param_1)" (( "(") (binary_expression "param_2 < (undefined *)*param_1" (identifier "param_2") (< "<") (cast_expression "(undefined *)*param_1" (( "(") (type_descriptor "undefined *" (type_identifier "undefined") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_1" (* "*") (identifier "param_1")))) () ")")) (compound_statement "{\n    return 0;\n  }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "uVar13 = param_1[4];" (assignment_expression "uVar13 = param_1[4]" (identifier "uVar13") (= "=") (subscript_expression "param_1[4]" (identifier "param_1") ([ "[") (number_literal "4") (] "]"))) (; ";")) (expression_statement "piVar8 = (int *)param_1[3];" (assignment_expression "piVar8 = (int *)param_1[3]" (identifier "piVar8") (= "=") (cast_expression "(int *)param_1[3]" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]")))) (; ";")) (if_statement "if (-1 < (int)uVar13) {\n    if (-1 < (int)(uVar13 << 1)) {\n      iVar7 = FUN_003ecb9c(param_1,piVar8,param_2);\n      return iVar7;\n    }\n    iVar7 = *piVar8;\n    while( true ) {\n      if (iVar7 == 0) {\n        return 0;\n      }\n      iVar7 = FUN_003ecb9c(param_1,iVar7,param_2);\n      if (iVar7 != 0) break;\n      piVar8 = piVar8 + 1;\n      iVar7 = *piVar8;\n    }\n    return iVar7;\n  }" (if "if") (parenthesized_expression "(-1 < (int)uVar13)" (( "(") (binary_expression "-1 < (int)uVar13" (number_literal "-1") (< "<") (cast_expression "(int)uVar13" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar13"))) () ")")) (compound_statement "{\n    if (-1 < (int)(uVar13 << 1)) {\n      iVar7 = FUN_003ecb9c(param_1,piVar8,param_2);\n      return iVar7;\n    }\n    iVar7 = *piVar8;\n    while( true ) {\n      if (iVar7 == 0) {\n        return 0;\n      }\n      iVar7 = FUN_003ecb9c(param_1,iVar7,param_2);\n      if (iVar7 != 0) break;\n      piVar8 = piVar8 + 1;\n      iVar7 = *piVar8;\n    }\n    return iVar7;\n  }" ({ "{") (if_statement "if (-1 < (int)(uVar13 << 1)) {\n      iVar7 = FUN_003ecb9c(param_1,piVar8,param_2);\n      return iVar7;\n    }" (if "if") (parenthesized_expression "(-1 < (int)(uVar13 << 1))" (( "(") (binary_expression "-1 < (int)(uVar13 << 1)" (number_literal "-1") (< "<") (cast_expression "(int)(uVar13 << 1)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(uVar13 << 1)" (( "(") (binary_expression "uVar13 << 1" (identifier "uVar13") (<< "<<") (number_literal "1")) () ")")))) () ")")) (compound_statement "{\n      iVar7 = FUN_003ecb9c(param_1,piVar8,param_2);\n      return iVar7;\n    }" ({ "{") (expression_statement "iVar7 = FUN_003ecb9c(param_1,piVar8,param_2);" (assignment_expression "iVar7 = FUN_003ecb9c(param_1,piVar8,param_2)" (identifier "iVar7") (= "=") (call_expression "FUN_003ecb9c(param_1,piVar8,param_2)" (identifier "FUN_003ecb9c") (argument_list "(param_1,piVar8,param_2)" (( "(") (identifier "param_1") (, ",") (identifier "piVar8") (, ",") (identifier "param_2") () ")")))) (; ";")) (return_statement "return iVar7;" (return "return") (identifier "iVar7") (; ";")) (} "}"))) (expression_statement "iVar7 = *piVar8;" (assignment_expression "iVar7 = *piVar8" (identifier "iVar7") (= "=") (pointer_expression "*piVar8" (* "*") (identifier "piVar8"))) (; ";")) (while_statement "while( true ) {\n      if (iVar7 == 0) {\n        return 0;\n      }\n      iVar7 = FUN_003ecb9c(param_1,iVar7,param_2);\n      if (iVar7 != 0) break;\n      piVar8 = piVar8 + 1;\n      iVar7 = *piVar8;\n    }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n      if (iVar7 == 0) {\n        return 0;\n      }\n      iVar7 = FUN_003ecb9c(param_1,iVar7,param_2);\n      if (iVar7 != 0) break;\n      piVar8 = piVar8 + 1;\n      iVar7 = *piVar8;\n    }" ({ "{") (if_statement "if (iVar7 == 0) {\n        return 0;\n      }" (if "if") (parenthesized_expression "(iVar7 == 0)" (( "(") (binary_expression "iVar7 == 0" (identifier "iVar7") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        return 0;\n      }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "iVar7 = FUN_003ecb9c(param_1,iVar7,param_2);" (assignment_expression "iVar7 = FUN_003ecb9c(param_1,iVar7,param_2)" (identifier "iVar7") (= "=") (call_expression "FUN_003ecb9c(param_1,iVar7,param_2)" (identifier "FUN_003ecb9c") (argument_list "(param_1,iVar7,param_2)" (( "(") (identifier "param_1") (, ",") (identifier "iVar7") (, ",") (identifier "param_2") () ")")))) (; ";")) (if_statement "if (iVar7 != 0) break;" (if "if") (parenthesized_expression "(iVar7 != 0)" (( "(") (binary_expression "iVar7 != 0" (identifier "iVar7") (!= "!=") (number_literal "0")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "piVar8 = piVar8 + 1;" (assignment_expression "piVar8 = piVar8 + 1" (identifier "piVar8") (= "=") (binary_expression "piVar8 + 1" (identifier "piVar8") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "iVar7 = *piVar8;" (assignment_expression "iVar7 = *piVar8" (identifier "iVar7") (= "=") (pointer_expression "*piVar8" (* "*") (identifier "piVar8"))) (; ";")) (} "}"))) (return_statement "return iVar7;" (return "return") (identifier "iVar7") (; ";")) (} "}"))) (labeled_statement "LAB_003ed920:\n  uVar15 = param_1[3];" (statement_identifier "LAB_003ed920") (: ":") (expression_statement "uVar15 = param_1[3];" (assignment_expression "uVar15 = param_1[3]" (identifier "uVar15") (= "=") (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]"))) (; ";"))) (expression_statement "uVar10 = *(uint *)(uVar15 + 4);" (assignment_expression "uVar10 = *(uint *)(uVar15 + 4)" (identifier "uVar10") (= "=") (pointer_expression "*(uint *)(uVar15 + 4)" (* "*") (cast_expression "(uint *)(uVar15 + 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(uVar15 + 4)" (( "(") (binary_expression "uVar15 + 4" (identifier "uVar15") (+ "+") (number_literal "4")) () ")"))))) (; ";")) (if_statement "if ((uVar13 & 0x20000000) == 0) {\n    if ((uVar13 & 0x1fe00000) == 0) {\n      if (uVar10 != 0) {\n        uVar13 = 0;\n        uVar14 = uVar10;\n        while( true ) {\n          uVar6 = uVar10 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          if ((*(undefined **)(iVar7 + 8) <= param_2) &&\n             (uVar13 = uVar6 + 1, uVar6 = uVar14,\n             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc))) break;\n          if (uVar6 <= uVar13) {\n            return 0;\n          }\n          uVar10 = uVar6 + uVar13;\n          uVar14 = uVar6;\n        }\n        return iVar7;\n      }\n    }\n    else {\n      uVar13 = (uVar13 << 3) >> 0x18;\n      local_44 = (uint *)FUN_003eca18(uVar13,param_1 + 1,param_1 + 2);\n      if (uVar10 != 0) {\n        local_40 = (uint *)(uVar13 & 0xf);\n        local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n        uVar14 = 0;\n        do {\n          uVar6 = uVar10 + uVar14 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          uVar2 = (*local_48)(uVar13,local_44,iVar7 + 8,local_50);\n          (*local_48)(local_40,0,uVar2,&local_58);\n          if ((local_50[0] <= param_2) &&\n             (uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n            return iVar7;\n          }\n          uVar10 = uVar6;\n        } while (uVar14 < uVar6);\n      }\n    }\n  }\n  else {\n    local_40 = param_1 + 1;\n    if (uVar10 != 0) {\n      uVar13 = 0;\n      local_44 = param_1 + 2;\n      local_3c = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x37e0);\n      local_38 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x35e8);\n      local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n      do {\n        uVar14 = uVar13 + uVar10 >> 1;\n        iVar7 = *(int *)(uVar15 + (uVar14 + 2) * 4);\n        bVar4 = (*local_3c)((iVar7 + 4) - *(int *)(iVar7 + 4));\n        uVar2 = (*local_38)(bVar4,local_40,local_44);\n        uVar2 = (*local_48)(bVar4,uVar2,iVar7 + 8,local_50);\n        (*local_48)(bVar4 & 0xf,0,uVar2,&local_58);\n        if ((local_50[0] <= param_2) &&\n           (uVar13 = uVar14 + 1, uVar14 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n          return iVar7;\n        }\n        uVar10 = uVar14;\n      } while (uVar13 < uVar14);\n    }\n  }" (if "if") (parenthesized_expression "((uVar13 & 0x20000000) == 0)" (( "(") (binary_expression "(uVar13 & 0x20000000) == 0" (parenthesized_expression "(uVar13 & 0x20000000)" (( "(") (binary_expression "uVar13 & 0x20000000" (identifier "uVar13") (& "&") (number_literal "0x20000000")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    if ((uVar13 & 0x1fe00000) == 0) {\n      if (uVar10 != 0) {\n        uVar13 = 0;\n        uVar14 = uVar10;\n        while( true ) {\n          uVar6 = uVar10 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          if ((*(undefined **)(iVar7 + 8) <= param_2) &&\n             (uVar13 = uVar6 + 1, uVar6 = uVar14,\n             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc))) break;\n          if (uVar6 <= uVar13) {\n            return 0;\n          }\n          uVar10 = uVar6 + uVar13;\n          uVar14 = uVar6;\n        }\n        return iVar7;\n      }\n    }\n    else {\n      uVar13 = (uVar13 << 3) >> 0x18;\n      local_44 = (uint *)FUN_003eca18(uVar13,param_1 + 1,param_1 + 2);\n      if (uVar10 != 0) {\n        local_40 = (uint *)(uVar13 & 0xf);\n        local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n        uVar14 = 0;\n        do {\n          uVar6 = uVar10 + uVar14 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          uVar2 = (*local_48)(uVar13,local_44,iVar7 + 8,local_50);\n          (*local_48)(local_40,0,uVar2,&local_58);\n          if ((local_50[0] <= param_2) &&\n             (uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n            return iVar7;\n          }\n          uVar10 = uVar6;\n        } while (uVar14 < uVar6);\n      }\n    }\n  }" ({ "{") (if_statement "if ((uVar13 & 0x1fe00000) == 0) {\n      if (uVar10 != 0) {\n        uVar13 = 0;\n        uVar14 = uVar10;\n        while( true ) {\n          uVar6 = uVar10 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          if ((*(undefined **)(iVar7 + 8) <= param_2) &&\n             (uVar13 = uVar6 + 1, uVar6 = uVar14,\n             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc))) break;\n          if (uVar6 <= uVar13) {\n            return 0;\n          }\n          uVar10 = uVar6 + uVar13;\n          uVar14 = uVar6;\n        }\n        return iVar7;\n      }\n    }\n    else {\n      uVar13 = (uVar13 << 3) >> 0x18;\n      local_44 = (uint *)FUN_003eca18(uVar13,param_1 + 1,param_1 + 2);\n      if (uVar10 != 0) {\n        local_40 = (uint *)(uVar13 & 0xf);\n        local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n        uVar14 = 0;\n        do {\n          uVar6 = uVar10 + uVar14 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          uVar2 = (*local_48)(uVar13,local_44,iVar7 + 8,local_50);\n          (*local_48)(local_40,0,uVar2,&local_58);\n          if ((local_50[0] <= param_2) &&\n             (uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n            return iVar7;\n          }\n          uVar10 = uVar6;\n        } while (uVar14 < uVar6);\n      }\n    }" (if "if") (parenthesized_expression "((uVar13 & 0x1fe00000) == 0)" (( "(") (binary_expression "(uVar13 & 0x1fe00000) == 0" (parenthesized_expression "(uVar13 & 0x1fe00000)" (( "(") (binary_expression "uVar13 & 0x1fe00000" (identifier "uVar13") (& "&") (number_literal "0x1fe00000")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      if (uVar10 != 0) {\n        uVar13 = 0;\n        uVar14 = uVar10;\n        while( true ) {\n          uVar6 = uVar10 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          if ((*(undefined **)(iVar7 + 8) <= param_2) &&\n             (uVar13 = uVar6 + 1, uVar6 = uVar14,\n             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc))) break;\n          if (uVar6 <= uVar13) {\n            return 0;\n          }\n          uVar10 = uVar6 + uVar13;\n          uVar14 = uVar6;\n        }\n        return iVar7;\n      }\n    }" ({ "{") (if_statement "if (uVar10 != 0) {\n        uVar13 = 0;\n        uVar14 = uVar10;\n        while( true ) {\n          uVar6 = uVar10 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          if ((*(undefined **)(iVar7 + 8) <= param_2) &&\n             (uVar13 = uVar6 + 1, uVar6 = uVar14,\n             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc))) break;\n          if (uVar6 <= uVar13) {\n            return 0;\n          }\n          uVar10 = uVar6 + uVar13;\n          uVar14 = uVar6;\n        }\n        return iVar7;\n      }" (if "if") (parenthesized_expression "(uVar10 != 0)" (( "(") (binary_expression "uVar10 != 0" (identifier "uVar10") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        uVar13 = 0;\n        uVar14 = uVar10;\n        while( true ) {\n          uVar6 = uVar10 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          if ((*(undefined **)(iVar7 + 8) <= param_2) &&\n             (uVar13 = uVar6 + 1, uVar6 = uVar14,\n             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc))) break;\n          if (uVar6 <= uVar13) {\n            return 0;\n          }\n          uVar10 = uVar6 + uVar13;\n          uVar14 = uVar6;\n        }\n        return iVar7;\n      }" ({ "{") (expression_statement "uVar13 = 0;" (assignment_expression "uVar13 = 0" (identifier "uVar13") (= "=") (number_literal "0")) (; ";")) (expression_statement "uVar14 = uVar10;" (assignment_expression "uVar14 = uVar10" (identifier "uVar14") (= "=") (identifier "uVar10")) (; ";")) (while_statement "while( true ) {\n          uVar6 = uVar10 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          if ((*(undefined **)(iVar7 + 8) <= param_2) &&\n             (uVar13 = uVar6 + 1, uVar6 = uVar14,\n             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc))) break;\n          if (uVar6 <= uVar13) {\n            return 0;\n          }\n          uVar10 = uVar6 + uVar13;\n          uVar14 = uVar6;\n        }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n          uVar6 = uVar10 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          if ((*(undefined **)(iVar7 + 8) <= param_2) &&\n             (uVar13 = uVar6 + 1, uVar6 = uVar14,\n             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc))) break;\n          if (uVar6 <= uVar13) {\n            return 0;\n          }\n          uVar10 = uVar6 + uVar13;\n          uVar14 = uVar6;\n        }" ({ "{") (expression_statement "uVar6 = uVar10 >> 1;" (assignment_expression "uVar6 = uVar10 >> 1" (identifier "uVar6") (= "=") (binary_expression "uVar10 >> 1" (identifier "uVar10") (>> ">>") (number_literal "1"))) (; ";")) (expression_statement "iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);" (assignment_expression "iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4)" (identifier "iVar7") (= "=") (pointer_expression "*(int *)(uVar15 + (uVar6 + 2) * 4)" (* "*") (cast_expression "(int *)(uVar15 + (uVar6 + 2) * 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(uVar15 + (uVar6 + 2) * 4)" (( "(") (binary_expression "uVar15 + (uVar6 + 2) * 4" (identifier "uVar15") (+ "+") (binary_expression "(uVar6 + 2) * 4" (parenthesized_expression "(uVar6 + 2)" (( "(") (binary_expression "uVar6 + 2" (identifier "uVar6") (+ "+") (number_literal "2")) () ")")) (* "*") (number_literal "4"))) () ")"))))) (; ";")) (if_statement "if ((*(undefined **)(iVar7 + 8) <= param_2) &&\n             (uVar13 = uVar6 + 1, uVar6 = uVar14,\n             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc))) break;" (if "if") (parenthesized_expression "((*(undefined **)(iVar7 + 8) <= param_2) &&\n             (uVar13 = uVar6 + 1, uVar6 = uVar14,\n             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc)))" (( "(") (binary_expression "(*(undefined **)(iVar7 + 8) <= param_2) &&\n             (uVar13 = uVar6 + 1, uVar6 = uVar14,\n             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc))" (parenthesized_expression "(*(undefined **)(iVar7 + 8) <= param_2)" (( "(") (binary_expression "*(undefined **)(iVar7 + 8) <= param_2" (pointer_expression "*(undefined **)(iVar7 + 8)" (* "*") (cast_expression "(undefined **)(iVar7 + 8)" (( "(") (type_descriptor "undefined **" (type_identifier "undefined") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(iVar7 + 8)" (( "(") (binary_expression "iVar7 + 8" (identifier "iVar7") (+ "+") (number_literal "8")) () ")")))) (<= "<=") (identifier "param_2")) () ")")) (&& "&&") (parenthesized_expression "(uVar13 = uVar6 + 1, uVar6 = uVar14,\n             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc))" (( "(") (comma_expression "uVar13 = uVar6 + 1, uVar6 = uVar14,\n             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc)" (assignment_expression "uVar13 = uVar6 + 1" (identifier "uVar13") (= "=") (binary_expression "uVar6 + 1" (identifier "uVar6") (+ "+") (number_literal "1"))) (, ",") (comma_expression "uVar6 = uVar14,\n             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc)" (assignment_expression "uVar6 = uVar14" (identifier "uVar6") (= "=") (identifier "uVar14")) (, ",") (binary_expression "param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc)" (identifier "param_2") (< "<") (binary_expression "*(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc)" (pointer_expression "*(undefined **)(iVar7 + 8)" (* "*") (cast_expression "(undefined **)(iVar7 + 8)" (( "(") (type_descriptor "undefined **" (type_identifier "undefined") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(iVar7 + 8)" (( "(") (binary_expression "iVar7 + 8" (identifier "iVar7") (+ "+") (number_literal "8")) () ")")))) (+ "+") (pointer_expression "*(int *)(iVar7 + 0xc)" (* "*") (cast_expression "(int *)(iVar7 + 0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar7 + 0xc)" (( "(") (binary_expression "iVar7 + 0xc" (identifier "iVar7") (+ "+") (number_literal "0xc")) () ")")))))))) () ")"))) () ")")) (break_statement "break;" (break "break") (; ";"))) (if_statement "if (uVar6 <= uVar13) {\n            return 0;\n          }" (if "if") (parenthesized_expression "(uVar6 <= uVar13)" (( "(") (binary_expression "uVar6 <= uVar13" (identifier "uVar6") (<= "<=") (identifier "uVar13")) () ")")) (compound_statement "{\n            return 0;\n          }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "uVar10 = uVar6 + uVar13;" (assignment_expression "uVar10 = uVar6 + uVar13" (identifier "uVar10") (= "=") (binary_expression "uVar6 + uVar13" (identifier "uVar6") (+ "+") (identifier "uVar13"))) (; ";")) (expression_statement "uVar14 = uVar6;" (assignment_expression "uVar14 = uVar6" (identifier "uVar14") (= "=") (identifier "uVar6")) (; ";")) (} "}"))) (return_statement "return iVar7;" (return "return") (identifier "iVar7") (; ";")) (} "}"))) (} "}")) (else_clause "else {\n      uVar13 = (uVar13 << 3) >> 0x18;\n      local_44 = (uint *)FUN_003eca18(uVar13,param_1 + 1,param_1 + 2);\n      if (uVar10 != 0) {\n        local_40 = (uint *)(uVar13 & 0xf);\n        local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n        uVar14 = 0;\n        do {\n          uVar6 = uVar10 + uVar14 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          uVar2 = (*local_48)(uVar13,local_44,iVar7 + 8,local_50);\n          (*local_48)(local_40,0,uVar2,&local_58);\n          if ((local_50[0] <= param_2) &&\n             (uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n            return iVar7;\n          }\n          uVar10 = uVar6;\n        } while (uVar14 < uVar6);\n      }\n    }" (else "else") (compound_statement "{\n      uVar13 = (uVar13 << 3) >> 0x18;\n      local_44 = (uint *)FUN_003eca18(uVar13,param_1 + 1,param_1 + 2);\n      if (uVar10 != 0) {\n        local_40 = (uint *)(uVar13 & 0xf);\n        local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n        uVar14 = 0;\n        do {\n          uVar6 = uVar10 + uVar14 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          uVar2 = (*local_48)(uVar13,local_44,iVar7 + 8,local_50);\n          (*local_48)(local_40,0,uVar2,&local_58);\n          if ((local_50[0] <= param_2) &&\n             (uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n            return iVar7;\n          }\n          uVar10 = uVar6;\n        } while (uVar14 < uVar6);\n      }\n    }" ({ "{") (expression_statement "uVar13 = (uVar13 << 3) >> 0x18;" (assignment_expression "uVar13 = (uVar13 << 3) >> 0x18" (identifier "uVar13") (= "=") (binary_expression "(uVar13 << 3) >> 0x18" (parenthesized_expression "(uVar13 << 3)" (( "(") (binary_expression "uVar13 << 3" (identifier "uVar13") (<< "<<") (number_literal "3")) () ")")) (>> ">>") (number_literal "0x18"))) (; ";")) (expression_statement "local_44 = (uint *)FUN_003eca18(uVar13,param_1 + 1,param_1 + 2);" (assignment_expression "local_44 = (uint *)FUN_003eca18(uVar13,param_1 + 1,param_1 + 2)" (identifier "local_44") (= "=") (cast_expression "(uint *)FUN_003eca18(uVar13,param_1 + 1,param_1 + 2)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_003eca18(uVar13,param_1 + 1,param_1 + 2)" (identifier "FUN_003eca18") (argument_list "(uVar13,param_1 + 1,param_1 + 2)" (( "(") (identifier "uVar13") (, ",") (binary_expression "param_1 + 1" (identifier "param_1") (+ "+") (number_literal "1")) (, ",") (binary_expression "param_1 + 2" (identifier "param_1") (+ "+") (number_literal "2")) () ")"))))) (; ";")) (if_statement "if (uVar10 != 0) {\n        local_40 = (uint *)(uVar13 & 0xf);\n        local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n        uVar14 = 0;\n        do {\n          uVar6 = uVar10 + uVar14 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          uVar2 = (*local_48)(uVar13,local_44,iVar7 + 8,local_50);\n          (*local_48)(local_40,0,uVar2,&local_58);\n          if ((local_50[0] <= param_2) &&\n             (uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n            return iVar7;\n          }\n          uVar10 = uVar6;\n        } while (uVar14 < uVar6);\n      }" (if "if") (parenthesized_expression "(uVar10 != 0)" (( "(") (binary_expression "uVar10 != 0" (identifier "uVar10") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        local_40 = (uint *)(uVar13 & 0xf);\n        local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n        uVar14 = 0;\n        do {\n          uVar6 = uVar10 + uVar14 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          uVar2 = (*local_48)(uVar13,local_44,iVar7 + 8,local_50);\n          (*local_48)(local_40,0,uVar2,&local_58);\n          if ((local_50[0] <= param_2) &&\n             (uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n            return iVar7;\n          }\n          uVar10 = uVar6;\n        } while (uVar14 < uVar6);\n      }" ({ "{") (expression_statement "local_40 = (uint *)(uVar13 & 0xf);" (assignment_expression "local_40 = (uint *)(uVar13 & 0xf)" (identifier "local_40") (= "=") (cast_expression "(uint *)(uVar13 & 0xf)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(uVar13 & 0xf)" (( "(") (binary_expression "uVar13 & 0xf" (identifier "uVar13") (& "&") (number_literal "0xf")) () ")")))) (; ";")) (expression_statement "local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);" (assignment_expression "local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968)" (identifier "local_48") (= "=") (cast_expression "(code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968)" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968)" (( "(") (binary_expression "PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968" (identifier "PTR_s_ral_options14Struct_no_crefE_004c127c") (+ "+") (number_literal "-0x3968")) () ")")))) (; ";")) (expression_statement "uVar14 = 0;" (assignment_expression "uVar14 = 0" (identifier "uVar14") (= "=") (number_literal "0")) (; ";")) (do_statement "do {\n          uVar6 = uVar10 + uVar14 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          uVar2 = (*local_48)(uVar13,local_44,iVar7 + 8,local_50);\n          (*local_48)(local_40,0,uVar2,&local_58);\n          if ((local_50[0] <= param_2) &&\n             (uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n            return iVar7;\n          }\n          uVar10 = uVar6;\n        } while (uVar14 < uVar6);" (do "do") (compound_statement "{\n          uVar6 = uVar10 + uVar14 >> 1;\n          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);\n          uVar2 = (*local_48)(uVar13,local_44,iVar7 + 8,local_50);\n          (*local_48)(local_40,0,uVar2,&local_58);\n          if ((local_50[0] <= param_2) &&\n             (uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n            return iVar7;\n          }\n          uVar10 = uVar6;\n        }" ({ "{") (expression_statement "uVar6 = uVar10 + uVar14 >> 1;" (assignment_expression "uVar6 = uVar10 + uVar14 >> 1" (identifier "uVar6") (= "=") (binary_expression "uVar10 + uVar14 >> 1" (binary_expression "uVar10 + uVar14" (identifier "uVar10") (+ "+") (identifier "uVar14")) (>> ">>") (number_literal "1"))) (; ";")) (expression_statement "iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);" (assignment_expression "iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4)" (identifier "iVar7") (= "=") (pointer_expression "*(int *)(uVar15 + (uVar6 + 2) * 4)" (* "*") (cast_expression "(int *)(uVar15 + (uVar6 + 2) * 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(uVar15 + (uVar6 + 2) * 4)" (( "(") (binary_expression "uVar15 + (uVar6 + 2) * 4" (identifier "uVar15") (+ "+") (binary_expression "(uVar6 + 2) * 4" (parenthesized_expression "(uVar6 + 2)" (( "(") (binary_expression "uVar6 + 2" (identifier "uVar6") (+ "+") (number_literal "2")) () ")")) (* "*") (number_literal "4"))) () ")"))))) (; ";")) (expression_statement "uVar2 = (*local_48)(uVar13,local_44,iVar7 + 8,local_50);" (assignment_expression "uVar2 = (*local_48)(uVar13,local_44,iVar7 + 8,local_50)" (identifier "uVar2") (= "=") (call_expression "(*local_48)(uVar13,local_44,iVar7 + 8,local_50)" (parenthesized_expression "(*local_48)" (( "(") (pointer_expression "*local_48" (* "*") (identifier "local_48")) () ")")) (argument_list "(uVar13,local_44,iVar7 + 8,local_50)" (( "(") (identifier "uVar13") (, ",") (identifier "local_44") (, ",") (binary_expression "iVar7 + 8" (identifier "iVar7") (+ "+") (number_literal "8")) (, ",") (identifier "local_50") () ")")))) (; ";")) (expression_statement "(*local_48)(local_40,0,uVar2,&local_58);" (call_expression "(*local_48)(local_40,0,uVar2,&local_58)" (parenthesized_expression "(*local_48)" (( "(") (pointer_expression "*local_48" (* "*") (identifier "local_48")) () ")")) (argument_list "(local_40,0,uVar2,&local_58)" (( "(") (identifier "local_40") (, ",") (number_literal "0") (, ",") (identifier "uVar2") (, ",") (pointer_expression "&local_58" (& "&") (identifier "local_58")) () ")"))) (; ";")) (if_statement "if ((local_50[0] <= param_2) &&\n             (uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n            return iVar7;\n          }" (if "if") (parenthesized_expression "((local_50[0] <= param_2) &&\n             (uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58))" (( "(") (binary_expression "(local_50[0] <= param_2) &&\n             (uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58)" (parenthesized_expression "(local_50[0] <= param_2)" (( "(") (binary_expression "local_50[0] <= param_2" (subscript_expression "local_50[0]" (identifier "local_50") ([ "[") (number_literal "0") (] "]")) (<= "<=") (identifier "param_2")) () ")")) (&& "&&") (parenthesized_expression "(uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58)" (( "(") (comma_expression "uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58" (assignment_expression "uVar14 = uVar6 + 1" (identifier "uVar14") (= "=") (binary_expression "uVar6 + 1" (identifier "uVar6") (+ "+") (number_literal "1"))) (, ",") (comma_expression "uVar6 = uVar10, param_2 < local_50[0] + (int)local_58" (assignment_expression "uVar6 = uVar10" (identifier "uVar6") (= "=") (identifier "uVar10")) (, ",") (binary_expression "param_2 < local_50[0] + (int)local_58" (identifier "param_2") (< "<") (binary_expression "local_50[0] + (int)local_58" (subscript_expression "local_50[0]" (identifier "local_50") ([ "[") (number_literal "0") (] "]")) (+ "+") (cast_expression "(int)local_58" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_58")))))) () ")"))) () ")")) (compound_statement "{\n            return iVar7;\n          }" ({ "{") (return_statement "return iVar7;" (return "return") (identifier "iVar7") (; ";")) (} "}"))) (expression_statement "uVar10 = uVar6;" (assignment_expression "uVar10 = uVar6" (identifier "uVar10") (= "=") (identifier "uVar6")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(uVar14 < uVar6)" (( "(") (binary_expression "uVar14 < uVar6" (identifier "uVar14") (< "<") (identifier "uVar6")) () ")")) (; ";")) (} "}"))) (} "}")))) (} "}")) (else_clause "else {\n    local_40 = param_1 + 1;\n    if (uVar10 != 0) {\n      uVar13 = 0;\n      local_44 = param_1 + 2;\n      local_3c = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x37e0);\n      local_38 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x35e8);\n      local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n      do {\n        uVar14 = uVar13 + uVar10 >> 1;\n        iVar7 = *(int *)(uVar15 + (uVar14 + 2) * 4);\n        bVar4 = (*local_3c)((iVar7 + 4) - *(int *)(iVar7 + 4));\n        uVar2 = (*local_38)(bVar4,local_40,local_44);\n        uVar2 = (*local_48)(bVar4,uVar2,iVar7 + 8,local_50);\n        (*local_48)(bVar4 & 0xf,0,uVar2,&local_58);\n        if ((local_50[0] <= param_2) &&\n           (uVar13 = uVar14 + 1, uVar14 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n          return iVar7;\n        }\n        uVar10 = uVar14;\n      } while (uVar13 < uVar14);\n    }\n  }" (else "else") (compound_statement "{\n    local_40 = param_1 + 1;\n    if (uVar10 != 0) {\n      uVar13 = 0;\n      local_44 = param_1 + 2;\n      local_3c = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x37e0);\n      local_38 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x35e8);\n      local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n      do {\n        uVar14 = uVar13 + uVar10 >> 1;\n        iVar7 = *(int *)(uVar15 + (uVar14 + 2) * 4);\n        bVar4 = (*local_3c)((iVar7 + 4) - *(int *)(iVar7 + 4));\n        uVar2 = (*local_38)(bVar4,local_40,local_44);\n        uVar2 = (*local_48)(bVar4,uVar2,iVar7 + 8,local_50);\n        (*local_48)(bVar4 & 0xf,0,uVar2,&local_58);\n        if ((local_50[0] <= param_2) &&\n           (uVar13 = uVar14 + 1, uVar14 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n          return iVar7;\n        }\n        uVar10 = uVar14;\n      } while (uVar13 < uVar14);\n    }\n  }" ({ "{") (expression_statement "local_40 = param_1 + 1;" (assignment_expression "local_40 = param_1 + 1" (identifier "local_40") (= "=") (binary_expression "param_1 + 1" (identifier "param_1") (+ "+") (number_literal "1"))) (; ";")) (if_statement "if (uVar10 != 0) {\n      uVar13 = 0;\n      local_44 = param_1 + 2;\n      local_3c = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x37e0);\n      local_38 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x35e8);\n      local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n      do {\n        uVar14 = uVar13 + uVar10 >> 1;\n        iVar7 = *(int *)(uVar15 + (uVar14 + 2) * 4);\n        bVar4 = (*local_3c)((iVar7 + 4) - *(int *)(iVar7 + 4));\n        uVar2 = (*local_38)(bVar4,local_40,local_44);\n        uVar2 = (*local_48)(bVar4,uVar2,iVar7 + 8,local_50);\n        (*local_48)(bVar4 & 0xf,0,uVar2,&local_58);\n        if ((local_50[0] <= param_2) &&\n           (uVar13 = uVar14 + 1, uVar14 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n          return iVar7;\n        }\n        uVar10 = uVar14;\n      } while (uVar13 < uVar14);\n    }" (if "if") (parenthesized_expression "(uVar10 != 0)" (( "(") (binary_expression "uVar10 != 0" (identifier "uVar10") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      uVar13 = 0;\n      local_44 = param_1 + 2;\n      local_3c = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x37e0);\n      local_38 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x35e8);\n      local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);\n      do {\n        uVar14 = uVar13 + uVar10 >> 1;\n        iVar7 = *(int *)(uVar15 + (uVar14 + 2) * 4);\n        bVar4 = (*local_3c)((iVar7 + 4) - *(int *)(iVar7 + 4));\n        uVar2 = (*local_38)(bVar4,local_40,local_44);\n        uVar2 = (*local_48)(bVar4,uVar2,iVar7 + 8,local_50);\n        (*local_48)(bVar4 & 0xf,0,uVar2,&local_58);\n        if ((local_50[0] <= param_2) &&\n           (uVar13 = uVar14 + 1, uVar14 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n          return iVar7;\n        }\n        uVar10 = uVar14;\n      } while (uVar13 < uVar14);\n    }" ({ "{") (expression_statement "uVar13 = 0;" (assignment_expression "uVar13 = 0" (identifier "uVar13") (= "=") (number_literal "0")) (; ";")) (expression_statement "local_44 = param_1 + 2;" (assignment_expression "local_44 = param_1 + 2" (identifier "local_44") (= "=") (binary_expression "param_1 + 2" (identifier "param_1") (+ "+") (number_literal "2"))) (; ";")) (expression_statement "local_3c = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x37e0);" (assignment_expression "local_3c = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x37e0)" (identifier "local_3c") (= "=") (cast_expression "(code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x37e0)" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x37e0)" (( "(") (binary_expression "PTR_s_ral_options14Struct_no_crefE_004c127c + -0x37e0" (identifier "PTR_s_ral_options14Struct_no_crefE_004c127c") (+ "+") (number_literal "-0x37e0")) () ")")))) (; ";")) (expression_statement "local_38 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x35e8);" (assignment_expression "local_38 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x35e8)" (identifier "local_38") (= "=") (cast_expression "(code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x35e8)" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x35e8)" (( "(") (binary_expression "PTR_s_ral_options14Struct_no_crefE_004c127c + -0x35e8" (identifier "PTR_s_ral_options14Struct_no_crefE_004c127c") (+ "+") (number_literal "-0x35e8")) () ")")))) (; ";")) (expression_statement "local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);" (assignment_expression "local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968)" (identifier "local_48") (= "=") (cast_expression "(code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968)" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968)" (( "(") (binary_expression "PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968" (identifier "PTR_s_ral_options14Struct_no_crefE_004c127c") (+ "+") (number_literal "-0x3968")) () ")")))) (; ";")) (do_statement "do {\n        uVar14 = uVar13 + uVar10 >> 1;\n        iVar7 = *(int *)(uVar15 + (uVar14 + 2) * 4);\n        bVar4 = (*local_3c)((iVar7 + 4) - *(int *)(iVar7 + 4));\n        uVar2 = (*local_38)(bVar4,local_40,local_44);\n        uVar2 = (*local_48)(bVar4,uVar2,iVar7 + 8,local_50);\n        (*local_48)(bVar4 & 0xf,0,uVar2,&local_58);\n        if ((local_50[0] <= param_2) &&\n           (uVar13 = uVar14 + 1, uVar14 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n          return iVar7;\n        }\n        uVar10 = uVar14;\n      } while (uVar13 < uVar14);" (do "do") (compound_statement "{\n        uVar14 = uVar13 + uVar10 >> 1;\n        iVar7 = *(int *)(uVar15 + (uVar14 + 2) * 4);\n        bVar4 = (*local_3c)((iVar7 + 4) - *(int *)(iVar7 + 4));\n        uVar2 = (*local_38)(bVar4,local_40,local_44);\n        uVar2 = (*local_48)(bVar4,uVar2,iVar7 + 8,local_50);\n        (*local_48)(bVar4 & 0xf,0,uVar2,&local_58);\n        if ((local_50[0] <= param_2) &&\n           (uVar13 = uVar14 + 1, uVar14 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n          return iVar7;\n        }\n        uVar10 = uVar14;\n      }" ({ "{") (expression_statement "uVar14 = uVar13 + uVar10 >> 1;" (assignment_expression "uVar14 = uVar13 + uVar10 >> 1" (identifier "uVar14") (= "=") (binary_expression "uVar13 + uVar10 >> 1" (binary_expression "uVar13 + uVar10" (identifier "uVar13") (+ "+") (identifier "uVar10")) (>> ">>") (number_literal "1"))) (; ";")) (expression_statement "iVar7 = *(int *)(uVar15 + (uVar14 + 2) * 4);" (assignment_expression "iVar7 = *(int *)(uVar15 + (uVar14 + 2) * 4)" (identifier "iVar7") (= "=") (pointer_expression "*(int *)(uVar15 + (uVar14 + 2) * 4)" (* "*") (cast_expression "(int *)(uVar15 + (uVar14 + 2) * 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(uVar15 + (uVar14 + 2) * 4)" (( "(") (binary_expression "uVar15 + (uVar14 + 2) * 4" (identifier "uVar15") (+ "+") (binary_expression "(uVar14 + 2) * 4" (parenthesized_expression "(uVar14 + 2)" (( "(") (binary_expression "uVar14 + 2" (identifier "uVar14") (+ "+") (number_literal "2")) () ")")) (* "*") (number_literal "4"))) () ")"))))) (; ";")) (expression_statement "bVar4 = (*local_3c)((iVar7 + 4) - *(int *)(iVar7 + 4));" (assignment_expression "bVar4 = (*local_3c)((iVar7 + 4) - *(int *)(iVar7 + 4))" (identifier "bVar4") (= "=") (call_expression "(*local_3c)((iVar7 + 4) - *(int *)(iVar7 + 4))" (parenthesized_expression "(*local_3c)" (( "(") (pointer_expression "*local_3c" (* "*") (identifier "local_3c")) () ")")) (argument_list "((iVar7 + 4) - *(int *)(iVar7 + 4))" (( "(") (binary_expression "(iVar7 + 4) - *(int *)(iVar7 + 4)" (parenthesized_expression "(iVar7 + 4)" (( "(") (binary_expression "iVar7 + 4" (identifier "iVar7") (+ "+") (number_literal "4")) () ")")) (- "-") (pointer_expression "*(int *)(iVar7 + 4)" (* "*") (cast_expression "(int *)(iVar7 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar7 + 4)" (( "(") (binary_expression "iVar7 + 4" (identifier "iVar7") (+ "+") (number_literal "4")) () ")"))))) () ")")))) (; ";")) (expression_statement "uVar2 = (*local_38)(bVar4,local_40,local_44);" (assignment_expression "uVar2 = (*local_38)(bVar4,local_40,local_44)" (identifier "uVar2") (= "=") (call_expression "(*local_38)(bVar4,local_40,local_44)" (parenthesized_expression "(*local_38)" (( "(") (pointer_expression "*local_38" (* "*") (identifier "local_38")) () ")")) (argument_list "(bVar4,local_40,local_44)" (( "(") (identifier "bVar4") (, ",") (identifier "local_40") (, ",") (identifier "local_44") () ")")))) (; ";")) (expression_statement "uVar2 = (*local_48)(bVar4,uVar2,iVar7 + 8,local_50);" (assignment_expression "uVar2 = (*local_48)(bVar4,uVar2,iVar7 + 8,local_50)" (identifier "uVar2") (= "=") (call_expression "(*local_48)(bVar4,uVar2,iVar7 + 8,local_50)" (parenthesized_expression "(*local_48)" (( "(") (pointer_expression "*local_48" (* "*") (identifier "local_48")) () ")")) (argument_list "(bVar4,uVar2,iVar7 + 8,local_50)" (( "(") (identifier "bVar4") (, ",") (identifier "uVar2") (, ",") (binary_expression "iVar7 + 8" (identifier "iVar7") (+ "+") (number_literal "8")) (, ",") (identifier "local_50") () ")")))) (; ";")) (expression_statement "(*local_48)(bVar4 & 0xf,0,uVar2,&local_58);" (call_expression "(*local_48)(bVar4 & 0xf,0,uVar2,&local_58)" (parenthesized_expression "(*local_48)" (( "(") (pointer_expression "*local_48" (* "*") (identifier "local_48")) () ")")) (argument_list "(bVar4 & 0xf,0,uVar2,&local_58)" (( "(") (binary_expression "bVar4 & 0xf" (identifier "bVar4") (& "&") (number_literal "0xf")) (, ",") (number_literal "0") (, ",") (identifier "uVar2") (, ",") (pointer_expression "&local_58" (& "&") (identifier "local_58")) () ")"))) (; ";")) (if_statement "if ((local_50[0] <= param_2) &&\n           (uVar13 = uVar14 + 1, uVar14 = uVar10, param_2 < local_50[0] + (int)local_58)) {\n          return iVar7;\n        }" (if "if") (parenthesized_expression "((local_50[0] <= param_2) &&\n           (uVar13 = uVar14 + 1, uVar14 = uVar10, param_2 < local_50[0] + (int)local_58))" (( "(") (binary_expression "(local_50[0] <= param_2) &&\n           (uVar13 = uVar14 + 1, uVar14 = uVar10, param_2 < local_50[0] + (int)local_58)" (parenthesized_expression "(local_50[0] <= param_2)" (( "(") (binary_expression "local_50[0] <= param_2" (subscript_expression "local_50[0]" (identifier "local_50") ([ "[") (number_literal "0") (] "]")) (<= "<=") (identifier "param_2")) () ")")) (&& "&&") (parenthesized_expression "(uVar13 = uVar14 + 1, uVar14 = uVar10, param_2 < local_50[0] + (int)local_58)" (( "(") (comma_expression "uVar13 = uVar14 + 1, uVar14 = uVar10, param_2 < local_50[0] + (int)local_58" (assignment_expression "uVar13 = uVar14 + 1" (identifier "uVar13") (= "=") (binary_expression "uVar14 + 1" (identifier "uVar14") (+ "+") (number_literal "1"))) (, ",") (comma_expression "uVar14 = uVar10, param_2 < local_50[0] + (int)local_58" (assignment_expression "uVar14 = uVar10" (identifier "uVar14") (= "=") (identifier "uVar10")) (, ",") (binary_expression "param_2 < local_50[0] + (int)local_58" (identifier "param_2") (< "<") (binary_expression "local_50[0] + (int)local_58" (subscript_expression "local_50[0]" (identifier "local_50") ([ "[") (number_literal "0") (] "]")) (+ "+") (cast_expression "(int)local_58" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_58")))))) () ")"))) () ")")) (compound_statement "{\n          return iVar7;\n        }" ({ "{") (return_statement "return iVar7;" (return "return") (identifier "iVar7") (; ";")) (} "}"))) (expression_statement "uVar10 = uVar14;" (assignment_expression "uVar10 = uVar14" (identifier "uVar10") (= "=") (identifier "uVar14")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(uVar13 < uVar14)" (( "(") (binary_expression "uVar13 < uVar14" (identifier "uVar13") (< "<") (identifier "uVar14")) () ")")) (; ";")) (} "}"))) (} "}")))) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}")))

int function_1(type_1 *var_29,type_2 *var_25)

{
  type_2 *puVar1;
  type_3 uVar2;
  type_4 var_31;
  int var_22;
  type_5 *pcVar5;
  type_1 var_27;
  int var_4;
  int *var_5;
  type_5 *pcVar9;
  type_1 var_2;
  type_1 *var_15;
  type_5 *var_24;
  type_1 var_1;
  type_1 var_30;
  type_1 var_19;
  type_1 *var_17;
  int *var_20;
  type_1 *var_16;
  type_1 *puVar19;
  type_1 *var_7;
  int *var_8;
  type_2 *local_50 [2];
  type_5 *var_14;
  type_1 *var_21;
  type_1 *var_23;
  type_5 *local_3c;
  type_5 *var_12;
  type_1 *var_18;
  type_1 *local_30;
  
  var_1 = var_29[4];
  if ((int)var_1 < 0) goto LAB_003ed920;
  var_2 = var_1 & 0x1fffff;
  if (var_2 == 0) {
    var_5 = (int *)var_29[3];
    if ((int)(var_1 << 1) < 0) {
      if (*var_5 != 0) {
        var_2 = 0;
        do {
          var_4 = var_3(var_29);
          if (var_4 == -1) goto LAB_003eda10;
          var_5 = var_5 + 1;
          var_2 = var_2 + var_4;
        } while (*var_5 != 0);
LAB_003edb08:
        if ((var_2 & 0x1fffff) == var_2) {
          var_29[4] = var_29[4] & 0xffe00000 | var_2 & 0x1fffff;
        }
        else {
          var_29[4] = var_29[4] & 0xffe00000;
        }
        if (var_2 != 0) goto LAB_003edce8;
      }
    }
    else {
      var_2 = var_3(var_29,var_5);
      if (var_2 != 0xffffffff) goto LAB_003edb08;
LAB_003eda10:
      var_29[4] = 0x1fe00000;
      var_29[3] = (type_1)(var_6 + 0xaa4);
    }
  }
  else {
LAB_003edce8:
    var_4 = (var_2 + 2) * 4;
    var_7 = (type_1 *)(*(type_5 *)PTR_malloc_004c5b38)(var_4);
    puVar1 = PTR_malloc_004c5b38;
    if (var_7 != (type_1 *)0x0) {
      var_7[1] = 0;
      var_8 = (int *)(*(type_5 *)puVar1)(var_4);
      if (var_8 != (int *)0x0) {
        var_8[1] = 0;
      }
      var_5 = (int *)var_29[3];
      if ((int)(var_29[4] << 1) < 0) {
        if (*var_5 == 0) goto LAB_003ee148;
        do {
          var_5 = var_5 + 1;
          var_9(var_29,&var_7);
        } while (*var_5 != 0);
      }
      else {
        var_9(var_29,&var_7,var_5);
      }
      var_5 = var_8;
      local_3c = (type_5 *)var_7;
      local_30 = var_7;
      if ((var_7 != (type_1 *)0x0) && (var_7[1] != var_2)) {
LAB_003ee148:
        var_4 = (*(type_5 *)PTR_abort_004c5d24)();
        return var_4;
      }
      if ((int)(var_29[4] << 2) < 0) {
        pcVar9 = (type_5 *)(var_10 + -0x3240);
      }
      else if ((var_29[4] & 0x1fe00000) == 0) {
        pcVar9 = (type_5 *)(var_10 + -0x3628);
      }
      else {
        pcVar9 = (type_5 *)(var_10 + -0x3558);
      }
      if (var_8 == (int *)0x0) {
        var_11(var_29,pcVar9,var_7);
      }
      else {
        var_12 = (type_5 *)var_7[1];
        if (var_12 == (type_5 *)0x0) {
          var_4 = 0;
          var_1 = 0;
        }
        else {
          var_20 = var_8 + 2;
          var_18 = var_7 + (int)var_12 + 1;
          var_15 = (type_1 *)(var_13 + -0x15d0);
          var_14 = (type_5 *)(var_7 + 2);
          *var_20 = (int)var_15;
          var_21 = (type_1 *)var_14;
          var_23 = (type_1 *)var_20;
          var_16 = (type_1 *)var_14;
          var_17 = (type_1 *)var_14;
          if (var_14 != (type_5 *)var_18) {
            do {
              while ((puVar19 = var_15, var_15 != var_16 &&
                     (var_4 = (*pcVar9)(var_29,var_17[1],*var_16), puVar19 = var_16, var_4 < 0))
                    ) {
                puVar19 = *(type_1 **)((int)var_5 + (int)var_16 + (8 - (int)var_14));
                *(type_3 *)((int)var_5 + (int)var_16 + (8 - (int)var_14)) = 0;
                var_16 = puVar19;
              }
              var_23 = (type_1 *)((int *)var_23 + 1);
              var_16 = var_17 + 1;
              *var_23 = (type_1)puVar19;
              var_17 = var_16;
            } while (var_16 != var_18);
          }
          var_4 = 0;
          var_1 = 0;
          var_19 = 0;
          var_16 = var_21;
          do {
            while (var_21 = var_16, *var_20 == 0) {
              var_22 = var_4 + 2;
              var_19 = var_19 + 1;
              var_4 = var_4 + 1;
              var_5[var_22] = *var_21;
              var_20 = var_20 + 1;
              var_16 = var_21 + 1;
              if (var_12 == (type_5 *)var_19) goto LAB_003edef4;
            }
            var_22 = var_1 + 2;
            var_19 = var_19 + 1;
            var_1 = var_1 + 1;
            *(type_1 *)((int)local_3c + var_22 * 4) = *var_21;
            var_20 = var_20 + 1;
            var_16 = var_21 + 1;
          } while (var_12 != (type_5 *)var_19);
LAB_003edef4:
          var_21 = var_21 + 1;
        }
        local_30[1] = var_1;
        var_5[1] = var_4;
        local_3c = (type_5 *)var_7;
        if (var_7[1] + var_8[1] != var_2) goto LAB_003ee148;
        var_11(var_29,pcVar9);
        var_23 = (type_1 *)var_8;
        if ((type_1 *)var_8[1] != (type_1 *)0x0) {
          var_21 = var_7;
          var_1 = var_7[1];
          var_24 = (type_5 *)var_8[1];
          do {
            var_14 = (type_5 *)((int)var_24 + -1);
            var_2 = (var_23 + (int)var_24)[1];
            if (var_1 == 0) {
              var_21[(int)var_24 + 1] = var_2;
              if (var_24 == (type_5 *)0x1) break;
              var_14 = (type_5 *)((int)var_24 + -2);
              var_2 = var_23[(int)var_24];
              pcVar5 = var_14;
            }
            else {
              var_16 = var_21 + var_1;
              do {
                var_19 = var_1 - 1;
                var_4 = (*pcVar9)(var_29,var_16[1],var_2);
                pcVar5 = (type_5 *)((int)var_24 + var_19);
                if (var_4 < 1) break;
                var_16[(int)var_24 + 1] = var_16[1];
                pcVar5 = var_14;
                var_16 = var_16 + -1;
                var_1 = var_19;
              } while (var_19 != 0);
            }
            var_21[(int)pcVar5 + 2] = var_2;
            var_24 = var_14;
          } while (var_14 != (type_5 *)0x0);
          var_21[1] = var_21[1] + var_23[1];
        }
        var_23 = (type_1 *)var_8;
        (*(type_5 *)PTR_free_004c5c18)(var_8);
      }
      *var_7 = var_29[3];
      var_29[3] = (type_1)var_7;
      var_29[4] = var_29[4] & 0x7fffffff | 0x80000000;
    }
  }
  if (var_25 < (type_2 *)*var_29) {
    return 0;
  }
  var_1 = var_29[4];
  var_5 = (int *)var_29[3];
  if (-1 < (int)var_1) {
    if (-1 < (int)(var_1 << 1)) {
      var_4 = var_26(var_29,var_5,var_25);
      return var_4;
    }
    var_4 = *var_5;
    while( true ) {
      if (var_4 == 0) {
        return 0;
      }
      var_4 = var_26(var_29,var_4,var_25);
      if (var_4 != 0) break;
      var_5 = var_5 + 1;
      var_4 = *var_5;
    }
    return var_4;
  }
LAB_003ed920:
  var_19 = var_29[3];
  var_2 = *(type_1 *)(var_19 + 4);
  if ((var_1 & 0x20000000) == 0) {
    if ((var_1 & 0x1fe00000) == 0) {
      if (var_2 != 0) {
        var_1 = 0;
        var_30 = var_2;
        while( true ) {
          var_27 = var_2 >> 1;
          var_4 = *(int *)(var_19 + (var_27 + 2) * 4);
          if ((*(type_2 **)(var_4 + 8) <= var_25) &&
             (var_1 = var_27 + 1, var_27 = var_30,
             var_25 < *(type_2 **)(var_4 + 8) + *(int *)(var_4 + 0xc))) break;
          if (var_27 <= var_1) {
            return 0;
          }
          var_2 = var_27 + var_1;
          var_30 = var_27;
        }
        return var_4;
      }
    }
    else {
      var_1 = (var_1 << 3) >> 0x18;
      var_21 = (type_1 *)var_28(var_1,var_29 + 1,var_29 + 2);
      if (var_2 != 0) {
        var_23 = (type_1 *)(var_1 & 0xf);
        var_14 = (type_5 *)(var_10 + -0x3968);
        var_30 = 0;
        do {
          var_27 = var_2 + var_30 >> 1;
          var_4 = *(int *)(var_19 + (var_27 + 2) * 4);
          uVar2 = (*var_14)(var_1,var_21,var_4 + 8,local_50);
          (*var_14)(var_23,0,uVar2,&var_7);
          if ((local_50[0] <= var_25) &&
             (var_30 = var_27 + 1, var_27 = var_2, var_25 < local_50[0] + (int)var_7)) {
            return var_4;
          }
          var_2 = var_27;
        } while (var_30 < var_27);
      }
    }
  }
  else {
    var_23 = var_29 + 1;
    if (var_2 != 0) {
      var_1 = 0;
      var_21 = var_29 + 2;
      local_3c = (type_5 *)(var_10 + -0x37e0);
      var_12 = (type_5 *)(var_10 + -0x35e8);
      var_14 = (type_5 *)(var_10 + -0x3968);
      do {
        var_30 = var_1 + var_2 >> 1;
        var_4 = *(int *)(var_19 + (var_30 + 2) * 4);
        var_31 = (*local_3c)((var_4 + 4) - *(int *)(var_4 + 4));
        uVar2 = (*var_12)(var_31,var_23,var_21);
        uVar2 = (*var_14)(var_31,uVar2,var_4 + 8,local_50);
        (*var_14)(var_31 & 0xf,0,uVar2,&var_7);
        if ((local_50[0] <= var_25) &&
           (var_1 = var_30 + 1, var_30 = var_2, var_25 < local_50[0] + (int)var_7)) {
          return var_4;
        }
        var_2 = var_30;
      } while (var_1 < var_30);
    }
  }
  return 0;
}


(translation_unit (function_definition type: (primitive_type) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))))) body: (compound_statement (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (array_declarator declarator: (identifier) size: (number_literal)))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal))))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier))))) condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal)))) (labeled_statement label: (statement_identifier) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (binary_expression left: (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal)) right: (binary_expression left: (identifier) right: (number_literal)))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal)))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (goto_statement label: (statement_identifier)))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (goto_statement label: (statement_identifier))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)))))))))) alternative: (else_clause (compound_statement (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) arguments: (argument_list (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) arguments: (argument_list (identifier)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal))))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal)))) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) consequence: (goto_statement label: (statement_identifier))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (pointer_expression argument: (identifier)))))) condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))) alternative: (else_clause (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (pointer_expression argument: (identifier)) (identifier))))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) right: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))))) consequence: (compound_statement (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) arguments: (argument_list))))) (return_statement (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal)))) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) alternative: (else_clause (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (number_literal)))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier))) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) consequence: (compound_statement (do_statement body: (compound_statement (while_statement condition: (parenthesized_expression (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (identifier)) right: (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (pointer_expression argument: (identifier))) arguments: (argument_list (identifier) (subscript_expression argument: (identifier) index: (number_literal)) (pointer_expression argument: (identifier))))) right: (comma_expression left: (assignment_expression left: (identifier) right: (identifier)) right: (binary_expression left: (identifier) right: (number_literal))))))))) body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier))) right: (parenthesized_expression (binary_expression left: (number_literal) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier))) right: (parenthesized_expression (binary_expression left: (number_literal) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))))))) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (identifier)) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (do_statement body: (compound_statement (while_statement condition: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (identifier)) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal)))) body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (identifier)) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) consequence: (goto_statement label: (statement_identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (binary_expression left: (identifier) right: (number_literal)))))) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier))))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (subscript_expression argument: (identifier) index: (number_literal))) right: (identifier))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal))) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal))))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) index: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal))) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (break_statement)) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (pointer_expression argument: (identifier))) arguments: (argument_list (identifier) (subscript_expression argument: (identifier) index: (number_literal)) (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (identifier)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (break_statement)) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal))) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal))) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (subscript_expression argument: (identifier) index: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) arguments: (argument_list (identifier))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (binary_expression left: (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal)) right: (number_literal))))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier))))) consequence: (compound_statement (return_statement (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal))))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier))))) (return_statement (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (while_statement condition: (parenthesized_expression (true)) body: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (return_statement (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (break_statement)) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))))) (return_statement (identifier)))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (while_statement condition: (parenthesized_expression (true)) body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal)))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) right: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) right: (comma_expression left: (assignment_expression left: (identifier) right: (identifier)) right: (binary_expression left: (identifier) right: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))))))) consequence: (break_statement)) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (return_statement (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))))) (return_statement (identifier))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (call_expression function: (identifier) arguments: (argument_list (identifier) (binary_expression left: (identifier) right: (number_literal)) (binary_expression left: (identifier) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal)))))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (pointer_expression argument: (identifier))) arguments: (argument_list (identifier) (identifier) (binary_expression left: (identifier) right: (number_literal)) (identifier))))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (identifier))) arguments: (argument_list (identifier) (number_literal) (identifier) (pointer_expression argument: (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) right: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) right: (comma_expression left: (assignment_expression left: (identifier) right: (identifier)) right: (binary_expression left: (identifier) right: (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier))))))))) consequence: (compound_statement (return_statement (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier)))))))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal)))))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (pointer_expression argument: (identifier))) arguments: (argument_list (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (pointer_expression argument: (identifier))) arguments: (argument_list (identifier) (identifier) (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (pointer_expression argument: (identifier))) arguments: (argument_list (identifier) (identifier) (binary_expression left: (identifier) right: (number_literal)) (identifier))))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (identifier))) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)) (number_literal) (identifier) (pointer_expression argument: (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) right: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) right: (comma_expression left: (assignment_expression left: (identifier) right: (identifier)) right: (binary_expression left: (identifier) right: (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier))))))))) consequence: (compound_statement (return_statement (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))))))))) (return_statement (number_literal)))))

int MASKED(uint *param_1,undefined *param_2)

{
  undefined *puVar1;
  undefined4 uVar2;
  byte bVar4;
  int iVar3;
  code *pcVar5;
  uint uVar6;
  int iVar7;
  int *piVar8;
  code *pcVar9;
  uint uVar10;
  uint *puVar11;
  code *pcVar12;
  uint uVar13;
  uint uVar14;
  uint uVar15;
  uint *puVar16;
  int *piVar17;
  uint *puVar18;
  uint *puVar19;
  uint *local_58;
  int *local_54;
  undefined *local_50 [2];
  code *local_48;
  uint *local_44;
  uint *local_40;
  code *local_3c;
  code *local_38;
  uint *local_34;
  uint *local_30;
  
  uVar13 = param_1[4];
  if ((int)uVar13 < 0) goto LAB_003ed920;
  uVar10 = uVar13 & 0x1fffff;
  if (uVar10 == 0) {
    piVar8 = (int *)param_1[3];
    if ((int)(uVar13 << 1) < 0) {
      if (*piVar8 != 0) {
        uVar10 = 0;
        do {
          iVar7 = FUN_003ecf18(param_1);
          if (iVar7 == -1) goto LAB_003eda10;
          piVar8 = piVar8 + 1;
          uVar10 = uVar10 + iVar7;
        } while (*piVar8 != 0);
LAB_003edb08:
        if ((uVar10 & 0x1fffff) == uVar10) {
          param_1[4] = param_1[4] & 0xffe00000 | uVar10 & 0x1fffff;
        }
        else {
          param_1[4] = param_1[4] & 0xffe00000;
        }
        if (uVar10 != 0) goto LAB_003edce8;
      }
    }
    else {
      uVar10 = FUN_003ecf18(param_1,piVar8);
      if (uVar10 != 0xffffffff) goto LAB_003edb08;
LAB_003eda10:
      param_1[4] = 0x1fe00000;
      param_1[3] = (uint)(PTR_UINT_004c12dc + 0xaa4);
    }
  }
  else {
LAB_003edce8:
    iVar7 = (uVar10 + 2) * 4;
    local_58 = (uint *)(*(code *)PTR_malloc_004c5b38)(iVar7);
    puVar1 = PTR_malloc_004c5b38;
    if (local_58 != (uint *)0x0) {
      local_58[1] = 0;
      local_54 = (int *)(*(code *)puVar1)(iVar7);
      if (local_54 != (int *)0x0) {
        local_54[1] = 0;
      }
      piVar8 = (int *)param_1[3];
      if ((int)(param_1[4] << 1) < 0) {
        if (*piVar8 == 0) goto LAB_003ee148;
        do {
          piVar8 = piVar8 + 1;
          FUN_003ed114(param_1,&local_58);
        } while (*piVar8 != 0);
      }
      else {
        FUN_003ed114(param_1,&local_58,piVar8);
      }
      piVar8 = local_54;
      local_3c = (code *)local_58;
      local_30 = local_58;
      if ((local_58 != (uint *)0x0) && (local_58[1] != uVar10)) {
LAB_003ee148:
        iVar7 = (*(code *)PTR_abort_004c5d24)();
        return iVar7;
      }
      if ((int)(param_1[4] << 2) < 0) {
        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3240);
      }
      else if ((param_1[4] & 0x1fe00000) == 0) {
        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3628);
      }
      else {
        pcVar9 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3558);
      }
      if (local_54 == (int *)0x0) {
        FUN_003ec50c(param_1,pcVar9,local_58);
      }
      else {
        local_38 = (code *)local_58[1];
        if (local_38 == (code *)0x0) {
          iVar7 = 0;
          uVar13 = 0;
        }
        else {
          piVar17 = local_54 + 2;
          local_34 = local_58 + (int)local_38 + 1;
          puVar11 = (uint *)(PTR_DAT_004c256c + -0x15d0);
          local_48 = (code *)(local_58 + 2);
          *piVar17 = (int)puVar11;
          local_44 = (uint *)local_48;
          local_40 = (uint *)piVar17;
          puVar18 = (uint *)local_48;
          puVar16 = (uint *)local_48;
          if (local_48 != (code *)local_34) {
            do {
              while ((puVar19 = puVar11, puVar11 != puVar18 &&
                     (iVar7 = (*pcVar9)(param_1,puVar16[1],*puVar18), puVar19 = puVar18, iVar7 < 0))
                    ) {
                puVar19 = *(uint **)((int)piVar8 + (int)puVar18 + (8 - (int)local_48));
                *(undefined4 *)((int)piVar8 + (int)puVar18 + (8 - (int)local_48)) = 0;
                puVar18 = puVar19;
              }
              local_40 = (uint *)((int *)local_40 + 1);
              puVar18 = puVar16 + 1;
              *local_40 = (uint)puVar19;
              puVar16 = puVar18;
            } while (puVar18 != local_34);
          }
          iVar7 = 0;
          uVar13 = 0;
          uVar15 = 0;
          puVar18 = local_44;
          do {
            while (local_44 = puVar18, *piVar17 == 0) {
              iVar3 = iVar7 + 2;
              uVar15 = uVar15 + 1;
              iVar7 = iVar7 + 1;
              piVar8[iVar3] = *local_44;
              piVar17 = piVar17 + 1;
              puVar18 = local_44 + 1;
              if (local_38 == (code *)uVar15) goto LAB_003edef4;
            }
            iVar3 = uVar13 + 2;
            uVar15 = uVar15 + 1;
            uVar13 = uVar13 + 1;
            *(uint *)((int)local_3c + iVar3 * 4) = *local_44;
            piVar17 = piVar17 + 1;
            puVar18 = local_44 + 1;
          } while (local_38 != (code *)uVar15);
LAB_003edef4:
          local_44 = local_44 + 1;
        }
        local_30[1] = uVar13;
        piVar8[1] = iVar7;
        local_3c = (code *)local_58;
        if (local_58[1] + local_54[1] != uVar10) goto LAB_003ee148;
        FUN_003ec50c(param_1,pcVar9);
        local_40 = (uint *)local_54;
        if ((uint *)local_54[1] != (uint *)0x0) {
          local_44 = local_58;
          uVar13 = local_58[1];
          pcVar12 = (code *)local_54[1];
          do {
            local_48 = (code *)((int)pcVar12 + -1);
            uVar10 = (local_40 + (int)pcVar12)[1];
            if (uVar13 == 0) {
              local_44[(int)pcVar12 + 1] = uVar10;
              if (pcVar12 == (code *)0x1) break;
              local_48 = (code *)((int)pcVar12 + -2);
              uVar10 = local_40[(int)pcVar12];
              pcVar5 = local_48;
            }
            else {
              puVar18 = local_44 + uVar13;
              do {
                uVar15 = uVar13 - 1;
                iVar7 = (*pcVar9)(param_1,puVar18[1],uVar10);
                pcVar5 = (code *)((int)pcVar12 + uVar15);
                if (iVar7 < 1) break;
                puVar18[(int)pcVar12 + 1] = puVar18[1];
                pcVar5 = local_48;
                puVar18 = puVar18 + -1;
                uVar13 = uVar15;
              } while (uVar15 != 0);
            }
            local_44[(int)pcVar5 + 2] = uVar10;
            pcVar12 = local_48;
          } while (local_48 != (code *)0x0);
          local_44[1] = local_44[1] + local_40[1];
        }
        local_40 = (uint *)local_54;
        (*(code *)PTR_free_004c5c18)(local_54);
      }
      *local_58 = param_1[3];
      param_1[3] = (uint)local_58;
      param_1[4] = param_1[4] & 0x7fffffff | 0x80000000;
    }
  }
  if (param_2 < (undefined *)*param_1) {
    return 0;
  }
  uVar13 = param_1[4];
  piVar8 = (int *)param_1[3];
  if (-1 < (int)uVar13) {
    if (-1 < (int)(uVar13 << 1)) {
      iVar7 = FUN_003ecb9c(param_1,piVar8,param_2);
      return iVar7;
    }
    iVar7 = *piVar8;
    while( true ) {
      if (iVar7 == 0) {
        return 0;
      }
      iVar7 = FUN_003ecb9c(param_1,iVar7,param_2);
      if (iVar7 != 0) break;
      piVar8 = piVar8 + 1;
      iVar7 = *piVar8;
    }
    return iVar7;
  }
LAB_003ed920:
  uVar15 = param_1[3];
  uVar10 = *(uint *)(uVar15 + 4);
  if ((uVar13 & 0x20000000) == 0) {
    if ((uVar13 & 0x1fe00000) == 0) {
      if (uVar10 != 0) {
        uVar13 = 0;
        uVar14 = uVar10;
        while( true ) {
          uVar6 = uVar10 >> 1;
          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);
          if ((*(undefined **)(iVar7 + 8) <= param_2) &&
             (uVar13 = uVar6 + 1, uVar6 = uVar14,
             param_2 < *(undefined **)(iVar7 + 8) + *(int *)(iVar7 + 0xc))) break;
          if (uVar6 <= uVar13) {
            return 0;
          }
          uVar10 = uVar6 + uVar13;
          uVar14 = uVar6;
        }
        return iVar7;
      }
    }
    else {
      uVar13 = (uVar13 << 3) >> 0x18;
      local_44 = (uint *)FUN_003eca18(uVar13,param_1 + 1,param_1 + 2);
      if (uVar10 != 0) {
        local_40 = (uint *)(uVar13 & 0xf);
        local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);
        uVar14 = 0;
        do {
          uVar6 = uVar10 + uVar14 >> 1;
          iVar7 = *(int *)(uVar15 + (uVar6 + 2) * 4);
          uVar2 = (*local_48)(uVar13,local_44,iVar7 + 8,local_50);
          (*local_48)(local_40,0,uVar2,&local_58);
          if ((local_50[0] <= param_2) &&
             (uVar14 = uVar6 + 1, uVar6 = uVar10, param_2 < local_50[0] + (int)local_58)) {
            return iVar7;
          }
          uVar10 = uVar6;
        } while (uVar14 < uVar6);
      }
    }
  }
  else {
    local_40 = param_1 + 1;
    if (uVar10 != 0) {
      uVar13 = 0;
      local_44 = param_1 + 2;
      local_3c = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x37e0);
      local_38 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x35e8);
      local_48 = (code *)(PTR_s_ral_options14Struct_no_crefE_004c127c + -0x3968);
      do {
        uVar14 = uVar13 + uVar10 >> 1;
        iVar7 = *(int *)(uVar15 + (uVar14 + 2) * 4);
        bVar4 = (*local_3c)((iVar7 + 4) - *(int *)(iVar7 + 4));
        uVar2 = (*local_38)(bVar4,local_40,local_44);
        uVar2 = (*local_48)(bVar4,uVar2,iVar7 + 8,local_50);
        (*local_48)(bVar4 & 0xf,0,uVar2,&local_58);
        if ((local_50[0] <= param_2) &&
           (uVar13 = uVar14 + 1, uVar14 = uVar10, param_2 < local_50[0] + (int)local_58)) {
          return iVar7;
        }
        uVar10 = uVar14;
      } while (uVar13 < uVar14);
    }
  }
  return 0;
}

