
/* WARNING: Type propagation algorithm not settling */
/* DWARF original prototype: bool get_output_offset(Object_merge_map * this, uint shndx,
   section_offset_type input_offset, section_offset_type * output_offset) */

bool __thiscall
gold::Object_merge_map::get_output_offset
          (Object_merge_map *this,uint shndx,section_offset_type input_offset,
          section_offset_type *output_offset)

{
  uint uVar1;
  pointer ppVar2;
  Input_merge_map *pIVar3;
  pointer pIVar4;
  long lVar5;
  section_size_type sVar6;
  section_offset_type sVar7;
  long lVar8;
  section_offset_type sVar9;
  section_size_type sVar10;
  pointer ppVar11;
  ulong uVar12;
  ulong uVar13;
  pointer pIVar14;
  pointer pIVar15;
  
  if (shndx == 0xffffffff) {
                    /* WARNING: Subroutine does not return */
    get_input_merge_map(this,0xffffffff);
  }
  ppVar11 = (this->section_merge_maps_).
            super__Vector_base<std::pair<unsigned_int,_gold::Object_merge_map::Input_merge_map*>,_std::allocator<std::pair<unsigned_int,_gold::Object_merge_map::Input_merge_map*>_>_>
            ._M_impl._M_start;
  ppVar2 = (this->section_merge_maps_).
           super__Vector_base<std::pair<unsigned_int,_gold::Object_merge_map::Input_merge_map*>,_std::allocator<std::pair<unsigned_int,_gold::Object_merge_map::Input_merge_map*>_>_>
           ._M_impl._M_finish;
  if (ppVar2 != ppVar11) {
    uVar1 = ppVar11->first;
    while (uVar1 != shndx) {
      ppVar11 = ppVar11 + 1;
      if (ppVar2 == ppVar11) {
        return false;
      }
      uVar1 = ppVar11->first;
    }
    pIVar3 = ppVar11->second;
    if (pIVar3 != (Input_merge_map *)0x0) {
      pIVar4 = (pIVar3->entries).
               super__Vector_base<gold::Object_merge_map::Input_merge_entry,_std::allocator<gold::Object_merge_map::Input_merge_entry>_>
               ._M_impl._M_finish;
      pIVar14 = (pIVar3->entries).
                super__Vector_base<gold::Object_merge_map::Input_merge_entry,_std::allocator<gold::Object_merge_map::Input_merge_entry>_>
                ._M_impl._M_start;
      uVar12 = ((long)pIVar4 - (long)pIVar14 >> 3) * -0x5555555555555555;
      pIVar15 = pIVar14;
      if (pIVar3->sorted == false) {
        if (pIVar14 != pIVar4) {
          lVar5 = 0x3f;
          if (uVar12 != 0) {
            for (; uVar12 >> lVar5 == 0; lVar5 = lVar5 + -1) {
            }
          }
          std::
          __introsort_loop<__gnu_cxx::__normal_iterator<gold::Object_merge_map::Input_merge_entry*,_std::vector<gold::Object_merge_map::Input_merge_entry>_>,_long_int,___gnu_cxx::__ops::_Iter_comp_iter<gold::Object_merge_map::Input_merge_compare>_>
                    (pIVar14,pIVar4,(0x3f - (long)(int)((uint)lVar5 ^ 0x3f)) * 2);
          if ((long)pIVar4 - (long)pIVar14 < 0x181) {
            std::
            __insertion_sort<__gnu_cxx::__normal_iterator<gold::Object_merge_map::Input_merge_entry*,_std::vector<gold::Object_merge_map::Input_merge_entry>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Object_merge_map::Input_merge_compare>_>
                      (pIVar14,pIVar4);
          }
          else {
            pIVar15 = pIVar14 + 0x10;
            std::
            __insertion_sort<__gnu_cxx::__normal_iterator<gold::Object_merge_map::Input_merge_entry*,_std::vector<gold::Object_merge_map::Input_merge_entry>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Object_merge_map::Input_merge_compare>_>
                      (pIVar14,pIVar15);
            for (; pIVar15 != pIVar4; pIVar15 = pIVar15 + 1) {
              lVar5 = pIVar15->input_offset;
              sVar6 = pIVar15->length;
              sVar7 = pIVar15->output_offset;
              lVar8 = pIVar15[-1].input_offset;
              pIVar14 = pIVar15;
              while (lVar5 < lVar8) {
                sVar9 = pIVar14[-1].input_offset;
                sVar10 = pIVar14[-1].length;
                pIVar14->output_offset = pIVar14[-1].output_offset;
                pIVar14->input_offset = sVar9;
                pIVar14->length = sVar10;
                lVar8 = pIVar14[-2].input_offset;
                pIVar14 = pIVar14 + -1;
              }
              pIVar14->input_offset = lVar5;
              pIVar14->length = sVar6;
              pIVar14->output_offset = sVar7;
            }
          }
          pIVar14 = (pIVar3->entries).
                    super__Vector_base<gold::Object_merge_map::Input_merge_entry,_std::allocator<gold::Object_merge_map::Input_merge_entry>_>
                    ._M_impl._M_start;
          uVar12 = ((long)(pIVar3->entries).
                          super__Vector_base<gold::Object_merge_map::Input_merge_entry,_std::allocator<gold::Object_merge_map::Input_merge_entry>_>
                          ._M_impl._M_finish - (long)pIVar14 >> 3) * -0x5555555555555555;
        }
        pIVar3->sorted = true;
        pIVar15 = pIVar14;
      }
      for (; 0 < (long)uVar12; uVar12 = (uVar12 - uVar13) - 1) {
        while( true ) {
          uVar13 = (long)uVar12 >> 1;
          if (pIVar14[uVar13].input_offset <= input_offset) break;
          uVar12 = uVar13;
          if (uVar13 == 0) goto LAB_0031c4f3;
        }
        pIVar14 = pIVar14 + uVar13 + 1;
      }
LAB_0031c4f3:
      if (pIVar14 != pIVar15) {
        if (input_offset < pIVar14[-1].input_offset) {
                    /* WARNING: Subroutine does not return */
          do_gold_unreachable("../../gold/merge.cc",0xa1,"get_output_offset");
        }
        if (input_offset - pIVar14[-1].input_offset < (long)pIVar14[-1].length) {
          lVar5 = pIVar14[-1].output_offset;
          *output_offset = lVar5;
          if (lVar5 != -1) {
            *output_offset = (input_offset - pIVar14[-1].input_offset) + lVar5;
            return true;
          }
          return true;
        }
      }
    }
  }
  return false;
}



undefined8 FUN_0031c420(undefined8 *param_1,int param_2,long param_3,long *param_4)

{
  int iVar1;
  long lVar2;
  long *plVar3;
  long lVar4;
  long lVar5;
  long lVar6;
  long lVar7;
  int *piVar8;
  ulong uVar9;
  ulong uVar10;
  long *plVar11;
  long *plVar12;
  
  if (param_2 == -1) {
    FUN_0031bad0();
LAB_0031c632:
                    /* WARNING: Subroutine does not return */
    FUN_001e9890("../../gold/merge.cc",0xa1,"get_output_offset");
  }
  piVar8 = (int *)*param_1;
  if ((int *)param_1[1] != piVar8) {
    iVar1 = *piVar8;
    while (iVar1 != param_2) {
      piVar8 = piVar8 + 4;
      if ((int *)param_1[1] == piVar8) {
        return 0;
      }
      iVar1 = *piVar8;
    }
    lVar2 = *(long *)(piVar8 + 2);
    if (lVar2 != 0) {
      plVar3 = *(long **)(lVar2 + 0x10);
      plVar11 = *(long **)(lVar2 + 8);
      uVar9 = ((long)plVar3 - (long)plVar11 >> 3) * -0x5555555555555555;
      plVar12 = plVar11;
      if (*(char *)(lVar2 + 0x20) == '\0') {
        if (plVar11 != plVar3) {
          lVar7 = 0x3f;
          if (uVar9 != 0) {
            for (; uVar9 >> lVar7 == 0; lVar7 = lVar7 + -1) {
            }
          }
          FUN_00320150(plVar11,plVar3,(0x3f - (long)(int)((uint)lVar7 ^ 0x3f)) * 2);
          if ((long)plVar3 - (long)plVar11 < 0x181) {
            FUN_0031ddb0(plVar11,plVar3);
          }
          else {
            plVar12 = plVar11 + 0x30;
            FUN_0031ddb0(plVar11,plVar12);
            for (; plVar12 != plVar3; plVar12 = plVar12 + 3) {
              lVar7 = *plVar12;
              lVar4 = plVar12[1];
              lVar5 = plVar12[2];
              lVar6 = plVar12[-3];
              plVar11 = plVar12;
              while (lVar7 < lVar6) {
                plVar11[2] = plVar11[-1];
                *plVar11 = plVar11[-3];
                plVar11[1] = plVar11[-2];
                lVar6 = plVar11[-6];
                plVar11 = plVar11 + -3;
              }
              *plVar11 = lVar7;
              plVar11[1] = lVar4;
              plVar11[2] = lVar5;
            }
          }
          plVar11 = *(long **)(lVar2 + 8);
          uVar9 = (*(long *)(lVar2 + 0x10) - (long)plVar11 >> 3) * -0x5555555555555555;
        }
        *(undefined1 *)(lVar2 + 0x20) = 1;
        plVar12 = plVar11;
      }
      for (; 0 < (long)uVar9; uVar9 = (uVar9 - uVar10) - 1) {
        while( true ) {
          uVar10 = (long)uVar9 >> 1;
          if (plVar11[uVar10 * 3] <= param_3) break;
          uVar9 = uVar10;
          if (uVar10 == 0) goto LAB_0031c4f3;
        }
        plVar11 = plVar11 + uVar10 * 3 + 3;
      }
LAB_0031c4f3:
      if (plVar11 != plVar12) {
        if (param_3 < plVar11[-3]) goto LAB_0031c632;
        if (param_3 - plVar11[-3] < plVar11[-2]) {
          lVar2 = plVar11[-1];
          *param_4 = lVar2;
          if (lVar2 != -1) {
            *param_4 = (param_3 - plVar11[-3]) + lVar2;
            return 1;
          }
          return 1;
        }
      }
    }
  }
  return 0;
}


PUSH R15
PUSH R14
PUSH R13
PUSH R12
PUSH RBP
PUSH RBX
SUB RSP,0x8
CMP ESI,-0x1
JZ 0x0031c62d
MOV RBX,RDX
MOV RBP,RCX
MOV RDX,qword ptr [RDI]
MOV RCX,qword ptr [RDI + 0x8]
CMP RCX,RDX
JZ 0x0031c469
LEA RAX,[RDX + 0x10]
CMP dword ptr [RDX],ESI
JNZ 0x0031c461
JMP 0x0031c480
ADD RAX,0x10
CMP ESI,dword ptr [RAX + -0x10]
JZ 0x0031c480
MOV RDX,RAX
CMP RCX,RAX
JNZ 0x0031c458
XOR EAX,EAX
ADD RSP,0x8
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
MOV R12,qword ptr [RDX + 0x8]
TEST R12,R12
JZ 0x0031c469
MOV R15,qword ptr [R12 + 0x10]
MOV R13,qword ptr [R12 + 0x8]
MOV RAX,-0x5555555555555555
MOV R14,R15
SUB R14,R13
MOV RDX,R14
SAR RDX,0x3
IMUL RDX,RAX
CMP byte ptr [R12 + 0x20],0x0
MOV RAX,RDX
JZ 0x0031c550
MOV RDI,R13
JMP 0x0031c4d3
SUB RAX,RDX
LEA RDI,[RSI + 0x18]
SUB RAX,0x1
TEST RAX,RAX
JLE 0x0031c4f3
MOV RDX,RAX
SAR RDX,0x1
LEA RSI,[RDX + RDX*0x2]
LEA RSI,[RDI + RSI*0x8]
CMP RBX,qword ptr [RSI]
JGE 0x0031c4c8
MOV RAX,RDX
TEST RDX,RDX
JNZ 0x0031c4d8
CMP RDI,R13
JZ 0x0031c469
MOV RAX,qword ptr [RDI + -0x18]
CMP RAX,RBX
JG 0x0031c632
MOV RCX,RBX
SUB RCX,RAX
CMP RCX,qword ptr [RDI + -0x10]
JGE 0x0031c469
MOV RDX,qword ptr [RDI + -0x8]
MOV EAX,0x1
MOV qword ptr [RBP],RDX
CMP RDX,-0x1
JZ 0x0031c46b
SUB RBX,qword ptr [RDI + -0x18]
ADD RBX,RDX
MOV qword ptr [RBP],RBX
ADD RSP,0x8
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
CMP R13,R15
JZ 0x0031c610
BSR RDX,RDX
MOV EAX,0x3f
MOV RSI,R15
MOV RDI,R13
XOR RDX,0x3f
MOVSXD RDX,EDX
SUB RAX,RDX
MOV RDX,RAX
ADD RDX,RDX
CALL 0x00320150
CMP R14,0x180
JLE 0x0031c61b
LEA R14,[R13 + 0x180]
MOV RDI,R13
MOV RSI,R14
CALL 0x0031ddb0
MOV RSI,R14
CMP R14,R15
JZ 0x0031c5f1
NOP dword ptr [RAX]
MOV RCX,qword ptr [RSI]
MOV R8,qword ptr [RSI + 0x8]
LEA RAX,[RSI + -0x18]
MOV RDI,qword ptr [RSI + 0x10]
CMP qword ptr [RSI + -0x18],RCX
JG 0x0031c5c3
JMP 0x0031c628
MOV RAX,RDX
MOV RDX,qword ptr [RAX + 0x10]
MOVDQU XMM0,xmmword ptr [RAX]
MOV qword ptr [RAX + 0x28],RDX
LEA RDX,[RAX + -0x18]
MOVUPS xmmword ptr [RAX + 0x18],XMM0
CMP RCX,qword ptr [RAX + -0x18]
JL 0x0031c5c0
ADD RSI,0x18
MOV qword ptr [RAX],RCX
MOV qword ptr [RAX + 0x8],R8
MOV qword ptr [RAX + 0x10],RDI
CMP R15,RSI
JNZ 0x0031c5a8
MOV R13,qword ptr [R12 + 0x8]
MOV RAX,qword ptr [R12 + 0x10]
MOV RDX,-0x5555555555555555
SUB RAX,R13
SAR RAX,0x3
IMUL RAX,RDX
MOV byte ptr [R12 + 0x20],0x1
JMP 0x0031c4bd
MOV RSI,R15
MOV RDI,R13
CALL 0x0031ddb0
JMP 0x0031c5f1
MOV RAX,RSI
JMP 0x0031c5dd
CALL 0x0031bad0
LEA RDX,[0x3fc400]
MOV ESI,0xa1
LEA RDI,[0x3fbfd6]
CALL 0x001e9890
(translation_unit "undefined8 FUN_0031c420(undefined8 *param_1,int param_2,long param_3,long *param_4)\n\n{\n  int iVar1;\n  long lVar2;\n  long *plVar3;\n  long lVar4;\n  long lVar5;\n  long lVar6;\n  long lVar7;\n  int *piVar8;\n  ulong uVar9;\n  ulong uVar10;\n  long *plVar11;\n  long *plVar12;\n  \n  if (param_2 == -1) {\n    FUN_0031bad0();\nLAB_0031c632:\n                    /* WARNING: Subroutine does not return */\n    FUN_001e9890("../../gold/merge.cc",0xa1,"get_output_offset");\n  }\n  piVar8 = (int *)*param_1;\n  if ((int *)param_1[1] != piVar8) {\n    iVar1 = *piVar8;\n    while (iVar1 != param_2) {\n      piVar8 = piVar8 + 4;\n      if ((int *)param_1[1] == piVar8) {\n        return 0;\n      }\n      iVar1 = *piVar8;\n    }\n    lVar2 = *(long *)(piVar8 + 2);\n    if (lVar2 != 0) {\n      plVar3 = *(long **)(lVar2 + 0x10);\n      plVar11 = *(long **)(lVar2 + 8);\n      uVar9 = ((long)plVar3 - (long)plVar11 >> 3) * -0x5555555555555555;\n      plVar12 = plVar11;\n      if (*(char *)(lVar2 + 0x20) == '\0') {\n        if (plVar11 != plVar3) {\n          lVar7 = 0x3f;\n          if (uVar9 != 0) {\n            for (; uVar9 >> lVar7 == 0; lVar7 = lVar7 + -1) {\n            }\n          }\n          FUN_00320150(plVar11,plVar3,(0x3f - (long)(int)((uint)lVar7 ^ 0x3f)) * 2);\n          if ((long)plVar3 - (long)plVar11 < 0x181) {\n            FUN_0031ddb0(plVar11,plVar3);\n          }\n          else {\n            plVar12 = plVar11 + 0x30;\n            FUN_0031ddb0(plVar11,plVar12);\n            for (; plVar12 != plVar3; plVar12 = plVar12 + 3) {\n              lVar7 = *plVar12;\n              lVar4 = plVar12[1];\n              lVar5 = plVar12[2];\n              lVar6 = plVar12[-3];\n              plVar11 = plVar12;\n              while (lVar7 < lVar6) {\n                plVar11[2] = plVar11[-1];\n                *plVar11 = plVar11[-3];\n                plVar11[1] = plVar11[-2];\n                lVar6 = plVar11[-6];\n                plVar11 = plVar11 + -3;\n              }\n              *plVar11 = lVar7;\n              plVar11[1] = lVar4;\n              plVar11[2] = lVar5;\n            }\n          }\n          plVar11 = *(long **)(lVar2 + 8);\n          uVar9 = (*(long *)(lVar2 + 0x10) - (long)plVar11 >> 3) * -0x5555555555555555;\n        }\n        *(undefined1 *)(lVar2 + 0x20) = 1;\n        plVar12 = plVar11;\n      }\n      for (; 0 < (long)uVar9; uVar9 = (uVar9 - uVar10) - 1) {\n        while( true ) {\n          uVar10 = (long)uVar9 >> 1;\n          if (plVar11[uVar10 * 3] <= param_3) break;\n          uVar9 = uVar10;\n          if (uVar10 == 0) goto LAB_0031c4f3;\n        }\n        plVar11 = plVar11 + uVar10 * 3 + 3;\n      }\nLAB_0031c4f3:\n      if (plVar11 != plVar12) {\n        if (param_3 < plVar11[-3]) goto LAB_0031c632;\n        if (param_3 - plVar11[-3] < plVar11[-2]) {\n          lVar2 = plVar11[-1];\n          *param_4 = lVar2;\n          if (lVar2 != -1) {\n            *param_4 = (param_3 - plVar11[-3]) + lVar2;\n            return 1;\n          }\n          return 1;\n        }\n      }\n    }\n  }\n  return 0;\n}\n\n" (function_definition "undefined8 FUN_0031c420(undefined8 *param_1,int param_2,long param_3,long *param_4)\n\n{\n  int iVar1;\n  long lVar2;\n  long *plVar3;\n  long lVar4;\n  long lVar5;\n  long lVar6;\n  long lVar7;\n  int *piVar8;\n  ulong uVar9;\n  ulong uVar10;\n  long *plVar11;\n  long *plVar12;\n  \n  if (param_2 == -1) {\n    FUN_0031bad0();\nLAB_0031c632:\n                    /* WARNING: Subroutine does not return */\n    FUN_001e9890("../../gold/merge.cc",0xa1,"get_output_offset");\n  }\n  piVar8 = (int *)*param_1;\n  if ((int *)param_1[1] != piVar8) {\n    iVar1 = *piVar8;\n    while (iVar1 != param_2) {\n      piVar8 = piVar8 + 4;\n      if ((int *)param_1[1] == piVar8) {\n        return 0;\n      }\n      iVar1 = *piVar8;\n    }\n    lVar2 = *(long *)(piVar8 + 2);\n    if (lVar2 != 0) {\n      plVar3 = *(long **)(lVar2 + 0x10);\n      plVar11 = *(long **)(lVar2 + 8);\n      uVar9 = ((long)plVar3 - (long)plVar11 >> 3) * -0x5555555555555555;\n      plVar12 = plVar11;\n      if (*(char *)(lVar2 + 0x20) == '\0') {\n        if (plVar11 != plVar3) {\n          lVar7 = 0x3f;\n          if (uVar9 != 0) {\n            for (; uVar9 >> lVar7 == 0; lVar7 = lVar7 + -1) {\n            }\n          }\n          FUN_00320150(plVar11,plVar3,(0x3f - (long)(int)((uint)lVar7 ^ 0x3f)) * 2);\n          if ((long)plVar3 - (long)plVar11 < 0x181) {\n            FUN_0031ddb0(plVar11,plVar3);\n          }\n          else {\n            plVar12 = plVar11 + 0x30;\n            FUN_0031ddb0(plVar11,plVar12);\n            for (; plVar12 != plVar3; plVar12 = plVar12 + 3) {\n              lVar7 = *plVar12;\n              lVar4 = plVar12[1];\n              lVar5 = plVar12[2];\n              lVar6 = plVar12[-3];\n              plVar11 = plVar12;\n              while (lVar7 < lVar6) {\n                plVar11[2] = plVar11[-1];\n                *plVar11 = plVar11[-3];\n                plVar11[1] = plVar11[-2];\n                lVar6 = plVar11[-6];\n                plVar11 = plVar11 + -3;\n              }\n              *plVar11 = lVar7;\n              plVar11[1] = lVar4;\n              plVar11[2] = lVar5;\n            }\n          }\n          plVar11 = *(long **)(lVar2 + 8);\n          uVar9 = (*(long *)(lVar2 + 0x10) - (long)plVar11 >> 3) * -0x5555555555555555;\n        }\n        *(undefined1 *)(lVar2 + 0x20) = 1;\n        plVar12 = plVar11;\n      }\n      for (; 0 < (long)uVar9; uVar9 = (uVar9 - uVar10) - 1) {\n        while( true ) {\n          uVar10 = (long)uVar9 >> 1;\n          if (plVar11[uVar10 * 3] <= param_3) break;\n          uVar9 = uVar10;\n          if (uVar10 == 0) goto LAB_0031c4f3;\n        }\n        plVar11 = plVar11 + uVar10 * 3 + 3;\n      }\nLAB_0031c4f3:\n      if (plVar11 != plVar12) {\n        if (param_3 < plVar11[-3]) goto LAB_0031c632;\n        if (param_3 - plVar11[-3] < plVar11[-2]) {\n          lVar2 = plVar11[-1];\n          *param_4 = lVar2;\n          if (lVar2 != -1) {\n            *param_4 = (param_3 - plVar11[-3]) + lVar2;\n            return 1;\n          }\n          return 1;\n        }\n      }\n    }\n  }\n  return 0;\n}" type_identifier (function_declarator "FUN_0031c420(undefined8 *param_1,int param_2,long param_3,long *param_4)" identifier (parameter_list "(undefined8 *param_1,int param_2,long param_3,long *param_4)" ( (parameter_declaration "undefined8 *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "long param_3" (sized_type_specifier "long" long) identifier) , (parameter_declaration "long *param_4" (sized_type_specifier "long" long) (pointer_declarator "*param_4" * identifier)) ))) (compound_statement "{\n  int iVar1;\n  long lVar2;\n  long *plVar3;\n  long lVar4;\n  long lVar5;\n  long lVar6;\n  long lVar7;\n  int *piVar8;\n  ulong uVar9;\n  ulong uVar10;\n  long *plVar11;\n  long *plVar12;\n  \n  if (param_2 == -1) {\n    FUN_0031bad0();\nLAB_0031c632:\n                    /* WARNING: Subroutine does not return */\n    FUN_001e9890("../../gold/merge.cc",0xa1,"get_output_offset");\n  }\n  piVar8 = (int *)*param_1;\n  if ((int *)param_1[1] != piVar8) {\n    iVar1 = *piVar8;\n    while (iVar1 != param_2) {\n      piVar8 = piVar8 + 4;\n      if ((int *)param_1[1] == piVar8) {\n        return 0;\n      }\n      iVar1 = *piVar8;\n    }\n    lVar2 = *(long *)(piVar8 + 2);\n    if (lVar2 != 0) {\n      plVar3 = *(long **)(lVar2 + 0x10);\n      plVar11 = *(long **)(lVar2 + 8);\n      uVar9 = ((long)plVar3 - (long)plVar11 >> 3) * -0x5555555555555555;\n      plVar12 = plVar11;\n      if (*(char *)(lVar2 + 0x20) == '\0') {\n        if (plVar11 != plVar3) {\n          lVar7 = 0x3f;\n          if (uVar9 != 0) {\n            for (; uVar9 >> lVar7 == 0; lVar7 = lVar7 + -1) {\n            }\n          }\n          FUN_00320150(plVar11,plVar3,(0x3f - (long)(int)((uint)lVar7 ^ 0x3f)) * 2);\n          if ((long)plVar3 - (long)plVar11 < 0x181) {\n            FUN_0031ddb0(plVar11,plVar3);\n          }\n          else {\n            plVar12 = plVar11 + 0x30;\n            FUN_0031ddb0(plVar11,plVar12);\n            for (; plVar12 != plVar3; plVar12 = plVar12 + 3) {\n              lVar7 = *plVar12;\n              lVar4 = plVar12[1];\n              lVar5 = plVar12[2];\n              lVar6 = plVar12[-3];\n              plVar11 = plVar12;\n              while (lVar7 < lVar6) {\n                plVar11[2] = plVar11[-1];\n                *plVar11 = plVar11[-3];\n                plVar11[1] = plVar11[-2];\n                lVar6 = plVar11[-6];\n                plVar11 = plVar11 + -3;\n              }\n              *plVar11 = lVar7;\n              plVar11[1] = lVar4;\n              plVar11[2] = lVar5;\n            }\n          }\n          plVar11 = *(long **)(lVar2 + 8);\n          uVar9 = (*(long *)(lVar2 + 0x10) - (long)plVar11 >> 3) * -0x5555555555555555;\n        }\n        *(undefined1 *)(lVar2 + 0x20) = 1;\n        plVar12 = plVar11;\n      }\n      for (; 0 < (long)uVar9; uVar9 = (uVar9 - uVar10) - 1) {\n        while( true ) {\n          uVar10 = (long)uVar9 >> 1;\n          if (plVar11[uVar10 * 3] <= param_3) break;\n          uVar9 = uVar10;\n          if (uVar10 == 0) goto LAB_0031c4f3;\n        }\n        plVar11 = plVar11 + uVar10 * 3 + 3;\n      }\nLAB_0031c4f3:\n      if (plVar11 != plVar12) {\n        if (param_3 < plVar11[-3]) goto LAB_0031c632;\n        if (param_3 - plVar11[-3] < plVar11[-2]) {\n          lVar2 = plVar11[-1];\n          *param_4 = lVar2;\n          if (lVar2 != -1) {\n            *param_4 = (param_3 - plVar11[-3]) + lVar2;\n            return 1;\n          }\n          return 1;\n        }\n      }\n    }\n  }\n  return 0;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (declaration "long *plVar3;" (sized_type_specifier "long" long) (pointer_declarator "*plVar3" * identifier) ;) (declaration "long lVar4;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar5;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar6;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar7;" (sized_type_specifier "long" long) identifier ;) (declaration "int *piVar8;" primitive_type (pointer_declarator "*piVar8" * identifier) ;) (declaration "ulong uVar9;" type_identifier identifier ;) (declaration "ulong uVar10;" type_identifier identifier ;) (declaration "long *plVar11;" (sized_type_specifier "long" long) (pointer_declarator "*plVar11" * identifier) ;) (declaration "long *plVar12;" (sized_type_specifier "long" long) (pointer_declarator "*plVar12" * identifier) ;) (if_statement "if (param_2 == -1) {\n    FUN_0031bad0();\nLAB_0031c632:\n                    /* WARNING: Subroutine does not return */\n    FUN_001e9890("../../gold/merge.cc",0xa1,"get_output_offset");\n  }" if (parenthesized_expression "(param_2 == -1)" ( (binary_expression "param_2 == -1" identifier == number_literal) )) (compound_statement "{\n    FUN_0031bad0();\nLAB_0031c632:\n                    /* WARNING: Subroutine does not return */\n    FUN_001e9890("../../gold/merge.cc",0xa1,"get_output_offset");\n  }" { (expression_statement "FUN_0031bad0();" (call_expression "FUN_0031bad0()" identifier (argument_list "()" ( ))) ;) (labeled_statement "LAB_0031c632:\n                    /* WARNING: Subroutine does not return */\n    FUN_001e9890("../../gold/merge.cc",0xa1,"get_output_offset");" statement_identifier : comment (expression_statement "FUN_001e9890("../../gold/merge.cc",0xa1,"get_output_offset");" (call_expression "FUN_001e9890("../../gold/merge.cc",0xa1,"get_output_offset")" identifier (argument_list "("../../gold/merge.cc",0xa1,"get_output_offset")" ( (string_literal ""../../gold/merge.cc"" " string_content ") , number_literal , (string_literal ""get_output_offset"" " string_content ") ))) ;)) })) (expression_statement "piVar8 = (int *)*param_1;" (assignment_expression "piVar8 = (int *)*param_1" identifier = (cast_expression "(int *)*param_1" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) ;) (if_statement "if ((int *)param_1[1] != piVar8) {\n    iVar1 = *piVar8;\n    while (iVar1 != param_2) {\n      piVar8 = piVar8 + 4;\n      if ((int *)param_1[1] == piVar8) {\n        return 0;\n      }\n      iVar1 = *piVar8;\n    }\n    lVar2 = *(long *)(piVar8 + 2);\n    if (lVar2 != 0) {\n      plVar3 = *(long **)(lVar2 + 0x10);\n      plVar11 = *(long **)(lVar2 + 8);\n      uVar9 = ((long)plVar3 - (long)plVar11 >> 3) * -0x5555555555555555;\n      plVar12 = plVar11;\n      if (*(char *)(lVar2 + 0x20) == '\0') {\n        if (plVar11 != plVar3) {\n          lVar7 = 0x3f;\n          if (uVar9 != 0) {\n            for (; uVar9 >> lVar7 == 0; lVar7 = lVar7 + -1) {\n            }\n          }\n          FUN_00320150(plVar11,plVar3,(0x3f - (long)(int)((uint)lVar7 ^ 0x3f)) * 2);\n          if ((long)plVar3 - (long)plVar11 < 0x181) {\n            FUN_0031ddb0(plVar11,plVar3);\n          }\n          else {\n            plVar12 = plVar11 + 0x30;\n            FUN_0031ddb0(plVar11,plVar12);\n            for (; plVar12 != plVar3; plVar12 = plVar12 + 3) {\n              lVar7 = *plVar12;\n              lVar4 = plVar12[1];\n              lVar5 = plVar12[2];\n              lVar6 = plVar12[-3];\n              plVar11 = plVar12;\n              while (lVar7 < lVar6) {\n                plVar11[2] = plVar11[-1];\n                *plVar11 = plVar11[-3];\n                plVar11[1] = plVar11[-2];\n                lVar6 = plVar11[-6];\n                plVar11 = plVar11 + -3;\n              }\n              *plVar11 = lVar7;\n              plVar11[1] = lVar4;\n              plVar11[2] = lVar5;\n            }\n          }\n          plVar11 = *(long **)(lVar2 + 8);\n          uVar9 = (*(long *)(lVar2 + 0x10) - (long)plVar11 >> 3) * -0x5555555555555555;\n        }\n        *(undefined1 *)(lVar2 + 0x20) = 1;\n        plVar12 = plVar11;\n      }\n      for (; 0 < (long)uVar9; uVar9 = (uVar9 - uVar10) - 1) {\n        while( true ) {\n          uVar10 = (long)uVar9 >> 1;\n          if (plVar11[uVar10 * 3] <= param_3) break;\n          uVar9 = uVar10;\n          if (uVar10 == 0) goto LAB_0031c4f3;\n        }\n        plVar11 = plVar11 + uVar10 * 3 + 3;\n      }\nLAB_0031c4f3:\n      if (plVar11 != plVar12) {\n        if (param_3 < plVar11[-3]) goto LAB_0031c632;\n        if (param_3 - plVar11[-3] < plVar11[-2]) {\n          lVar2 = plVar11[-1];\n          *param_4 = lVar2;\n          if (lVar2 != -1) {\n            *param_4 = (param_3 - plVar11[-3]) + lVar2;\n            return 1;\n          }\n          return 1;\n        }\n      }\n    }\n  }" if (parenthesized_expression "((int *)param_1[1] != piVar8)" ( (binary_expression "(int *)param_1[1] != piVar8" (cast_expression "(int *)param_1[1]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[1]" identifier [ number_literal ])) != identifier) )) (compound_statement "{\n    iVar1 = *piVar8;\n    while (iVar1 != param_2) {\n      piVar8 = piVar8 + 4;\n      if ((int *)param_1[1] == piVar8) {\n        return 0;\n      }\n      iVar1 = *piVar8;\n    }\n    lVar2 = *(long *)(piVar8 + 2);\n    if (lVar2 != 0) {\n      plVar3 = *(long **)(lVar2 + 0x10);\n      plVar11 = *(long **)(lVar2 + 8);\n      uVar9 = ((long)plVar3 - (long)plVar11 >> 3) * -0x5555555555555555;\n      plVar12 = plVar11;\n      if (*(char *)(lVar2 + 0x20) == '\0') {\n        if (plVar11 != plVar3) {\n          lVar7 = 0x3f;\n          if (uVar9 != 0) {\n            for (; uVar9 >> lVar7 == 0; lVar7 = lVar7 + -1) {\n            }\n          }\n          FUN_00320150(plVar11,plVar3,(0x3f - (long)(int)((uint)lVar7 ^ 0x3f)) * 2);\n          if ((long)plVar3 - (long)plVar11 < 0x181) {\n            FUN_0031ddb0(plVar11,plVar3);\n          }\n          else {\n            plVar12 = plVar11 + 0x30;\n            FUN_0031ddb0(plVar11,plVar12);\n            for (; plVar12 != plVar3; plVar12 = plVar12 + 3) {\n              lVar7 = *plVar12;\n              lVar4 = plVar12[1];\n              lVar5 = plVar12[2];\n              lVar6 = plVar12[-3];\n              plVar11 = plVar12;\n              while (lVar7 < lVar6) {\n                plVar11[2] = plVar11[-1];\n                *plVar11 = plVar11[-3];\n                plVar11[1] = plVar11[-2];\n                lVar6 = plVar11[-6];\n                plVar11 = plVar11 + -3;\n              }\n              *plVar11 = lVar7;\n              plVar11[1] = lVar4;\n              plVar11[2] = lVar5;\n            }\n          }\n          plVar11 = *(long **)(lVar2 + 8);\n          uVar9 = (*(long *)(lVar2 + 0x10) - (long)plVar11 >> 3) * -0x5555555555555555;\n        }\n        *(undefined1 *)(lVar2 + 0x20) = 1;\n        plVar12 = plVar11;\n      }\n      for (; 0 < (long)uVar9; uVar9 = (uVar9 - uVar10) - 1) {\n        while( true ) {\n          uVar10 = (long)uVar9 >> 1;\n          if (plVar11[uVar10 * 3] <= param_3) break;\n          uVar9 = uVar10;\n          if (uVar10 == 0) goto LAB_0031c4f3;\n        }\n        plVar11 = plVar11 + uVar10 * 3 + 3;\n      }\nLAB_0031c4f3:\n      if (plVar11 != plVar12) {\n        if (param_3 < plVar11[-3]) goto LAB_0031c632;\n        if (param_3 - plVar11[-3] < plVar11[-2]) {\n          lVar2 = plVar11[-1];\n          *param_4 = lVar2;\n          if (lVar2 != -1) {\n            *param_4 = (param_3 - plVar11[-3]) + lVar2;\n            return 1;\n          }\n          return 1;\n        }\n      }\n    }\n  }" { (expression_statement "iVar1 = *piVar8;" (assignment_expression "iVar1 = *piVar8" identifier = (pointer_expression "*piVar8" * identifier)) ;) (while_statement "while (iVar1 != param_2) {\n      piVar8 = piVar8 + 4;\n      if ((int *)param_1[1] == piVar8) {\n        return 0;\n      }\n      iVar1 = *piVar8;\n    }" while (parenthesized_expression "(iVar1 != param_2)" ( (binary_expression "iVar1 != param_2" identifier != identifier) )) (compound_statement "{\n      piVar8 = piVar8 + 4;\n      if ((int *)param_1[1] == piVar8) {\n        return 0;\n      }\n      iVar1 = *piVar8;\n    }" { (expression_statement "piVar8 = piVar8 + 4;" (assignment_expression "piVar8 = piVar8 + 4" identifier = (binary_expression "piVar8 + 4" identifier + number_literal)) ;) (if_statement "if ((int *)param_1[1] == piVar8) {\n        return 0;\n      }" if (parenthesized_expression "((int *)param_1[1] == piVar8)" ( (binary_expression "(int *)param_1[1] == piVar8" (cast_expression "(int *)param_1[1]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[1]" identifier [ number_literal ])) == identifier) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "iVar1 = *piVar8;" (assignment_expression "iVar1 = *piVar8" identifier = (pointer_expression "*piVar8" * identifier)) ;) })) (expression_statement "lVar2 = *(long *)(piVar8 + 2);" (assignment_expression "lVar2 = *(long *)(piVar8 + 2)" identifier = (pointer_expression "*(long *)(piVar8 + 2)" * (cast_expression "(long *)(piVar8 + 2)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(piVar8 + 2)" ( (binary_expression "piVar8 + 2" identifier + number_literal) ))))) ;) (if_statement "if (lVar2 != 0) {\n      plVar3 = *(long **)(lVar2 + 0x10);\n      plVar11 = *(long **)(lVar2 + 8);\n      uVar9 = ((long)plVar3 - (long)plVar11 >> 3) * -0x5555555555555555;\n      plVar12 = plVar11;\n      if (*(char *)(lVar2 + 0x20) == '\0') {\n        if (plVar11 != plVar3) {\n          lVar7 = 0x3f;\n          if (uVar9 != 0) {\n            for (; uVar9 >> lVar7 == 0; lVar7 = lVar7 + -1) {\n            }\n          }\n          FUN_00320150(plVar11,plVar3,(0x3f - (long)(int)((uint)lVar7 ^ 0x3f)) * 2);\n          if ((long)plVar3 - (long)plVar11 < 0x181) {\n            FUN_0031ddb0(plVar11,plVar3);\n          }\n          else {\n            plVar12 = plVar11 + 0x30;\n            FUN_0031ddb0(plVar11,plVar12);\n            for (; plVar12 != plVar3; plVar12 = plVar12 + 3) {\n              lVar7 = *plVar12;\n              lVar4 = plVar12[1];\n              lVar5 = plVar12[2];\n              lVar6 = plVar12[-3];\n              plVar11 = plVar12;\n              while (lVar7 < lVar6) {\n                plVar11[2] = plVar11[-1];\n                *plVar11 = plVar11[-3];\n                plVar11[1] = plVar11[-2];\n                lVar6 = plVar11[-6];\n                plVar11 = plVar11 + -3;\n              }\n              *plVar11 = lVar7;\n              plVar11[1] = lVar4;\n              plVar11[2] = lVar5;\n            }\n          }\n          plVar11 = *(long **)(lVar2 + 8);\n          uVar9 = (*(long *)(lVar2 + 0x10) - (long)plVar11 >> 3) * -0x5555555555555555;\n        }\n        *(undefined1 *)(lVar2 + 0x20) = 1;\n        plVar12 = plVar11;\n      }\n      for (; 0 < (long)uVar9; uVar9 = (uVar9 - uVar10) - 1) {\n        while( true ) {\n          uVar10 = (long)uVar9 >> 1;\n          if (plVar11[uVar10 * 3] <= param_3) break;\n          uVar9 = uVar10;\n          if (uVar10 == 0) goto LAB_0031c4f3;\n        }\n        plVar11 = plVar11 + uVar10 * 3 + 3;\n      }\nLAB_0031c4f3:\n      if (plVar11 != plVar12) {\n        if (param_3 < plVar11[-3]) goto LAB_0031c632;\n        if (param_3 - plVar11[-3] < plVar11[-2]) {\n          lVar2 = plVar11[-1];\n          *param_4 = lVar2;\n          if (lVar2 != -1) {\n            *param_4 = (param_3 - plVar11[-3]) + lVar2;\n            return 1;\n          }\n          return 1;\n        }\n      }\n    }" if (parenthesized_expression "(lVar2 != 0)" ( (binary_expression "lVar2 != 0" identifier != number_literal) )) (compound_statement "{\n      plVar3 = *(long **)(lVar2 + 0x10);\n      plVar11 = *(long **)(lVar2 + 8);\n      uVar9 = ((long)plVar3 - (long)plVar11 >> 3) * -0x5555555555555555;\n      plVar12 = plVar11;\n      if (*(char *)(lVar2 + 0x20) == '\0') {\n        if (plVar11 != plVar3) {\n          lVar7 = 0x3f;\n          if (uVar9 != 0) {\n            for (; uVar9 >> lVar7 == 0; lVar7 = lVar7 + -1) {\n            }\n          }\n          FUN_00320150(plVar11,plVar3,(0x3f - (long)(int)((uint)lVar7 ^ 0x3f)) * 2);\n          if ((long)plVar3 - (long)plVar11 < 0x181) {\n            FUN_0031ddb0(plVar11,plVar3);\n          }\n          else {\n            plVar12 = plVar11 + 0x30;\n            FUN_0031ddb0(plVar11,plVar12);\n            for (; plVar12 != plVar3; plVar12 = plVar12 + 3) {\n              lVar7 = *plVar12;\n              lVar4 = plVar12[1];\n              lVar5 = plVar12[2];\n              lVar6 = plVar12[-3];\n              plVar11 = plVar12;\n              while (lVar7 < lVar6) {\n                plVar11[2] = plVar11[-1];\n                *plVar11 = plVar11[-3];\n                plVar11[1] = plVar11[-2];\n                lVar6 = plVar11[-6];\n                plVar11 = plVar11 + -3;\n              }\n              *plVar11 = lVar7;\n              plVar11[1] = lVar4;\n              plVar11[2] = lVar5;\n            }\n          }\n          plVar11 = *(long **)(lVar2 + 8);\n          uVar9 = (*(long *)(lVar2 + 0x10) - (long)plVar11 >> 3) * -0x5555555555555555;\n        }\n        *(undefined1 *)(lVar2 + 0x20) = 1;\n        plVar12 = plVar11;\n      }\n      for (; 0 < (long)uVar9; uVar9 = (uVar9 - uVar10) - 1) {\n        while( true ) {\n          uVar10 = (long)uVar9 >> 1;\n          if (plVar11[uVar10 * 3] <= param_3) break;\n          uVar9 = uVar10;\n          if (uVar10 == 0) goto LAB_0031c4f3;\n        }\n        plVar11 = plVar11 + uVar10 * 3 + 3;\n      }\nLAB_0031c4f3:\n      if (plVar11 != plVar12) {\n        if (param_3 < plVar11[-3]) goto LAB_0031c632;\n        if (param_3 - plVar11[-3] < plVar11[-2]) {\n          lVar2 = plVar11[-1];\n          *param_4 = lVar2;\n          if (lVar2 != -1) {\n            *param_4 = (param_3 - plVar11[-3]) + lVar2;\n            return 1;\n          }\n          return 1;\n        }\n      }\n    }" { (expression_statement "plVar3 = *(long **)(lVar2 + 0x10);" (assignment_expression "plVar3 = *(long **)(lVar2 + 0x10)" identifier = (pointer_expression "*(long **)(lVar2 + 0x10)" * (cast_expression "(long **)(lVar2 + 0x10)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar2 + 0x10)" ( (binary_expression "lVar2 + 0x10" identifier + number_literal) ))))) ;) (expression_statement "plVar11 = *(long **)(lVar2 + 8);" (assignment_expression "plVar11 = *(long **)(lVar2 + 8)" identifier = (pointer_expression "*(long **)(lVar2 + 8)" * (cast_expression "(long **)(lVar2 + 8)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar2 + 8)" ( (binary_expression "lVar2 + 8" identifier + number_literal) ))))) ;) (expression_statement "uVar9 = ((long)plVar3 - (long)plVar11 >> 3) * -0x5555555555555555;" (assignment_expression "uVar9 = ((long)plVar3 - (long)plVar11 >> 3) * -0x5555555555555555" identifier = (binary_expression "((long)plVar3 - (long)plVar11 >> 3) * -0x5555555555555555" (parenthesized_expression "((long)plVar3 - (long)plVar11 >> 3)" ( (binary_expression "(long)plVar3 - (long)plVar11 >> 3" (binary_expression "(long)plVar3 - (long)plVar11" (cast_expression "(long)plVar3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)plVar11" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) >> number_literal) )) * number_literal)) ;) (expression_statement "plVar12 = plVar11;" (assignment_expression "plVar12 = plVar11" identifier = identifier) ;) (if_statement "if (*(char *)(lVar2 + 0x20) == '\0') {\n        if (plVar11 != plVar3) {\n          lVar7 = 0x3f;\n          if (uVar9 != 0) {\n            for (; uVar9 >> lVar7 == 0; lVar7 = lVar7 + -1) {\n            }\n          }\n          FUN_00320150(plVar11,plVar3,(0x3f - (long)(int)((uint)lVar7 ^ 0x3f)) * 2);\n          if ((long)plVar3 - (long)plVar11 < 0x181) {\n            FUN_0031ddb0(plVar11,plVar3);\n          }\n          else {\n            plVar12 = plVar11 + 0x30;\n            FUN_0031ddb0(plVar11,plVar12);\n            for (; plVar12 != plVar3; plVar12 = plVar12 + 3) {\n              lVar7 = *plVar12;\n              lVar4 = plVar12[1];\n              lVar5 = plVar12[2];\n              lVar6 = plVar12[-3];\n              plVar11 = plVar12;\n              while (lVar7 < lVar6) {\n                plVar11[2] = plVar11[-1];\n                *plVar11 = plVar11[-3];\n                plVar11[1] = plVar11[-2];\n                lVar6 = plVar11[-6];\n                plVar11 = plVar11 + -3;\n              }\n              *plVar11 = lVar7;\n              plVar11[1] = lVar4;\n              plVar11[2] = lVar5;\n            }\n          }\n          plVar11 = *(long **)(lVar2 + 8);\n          uVar9 = (*(long *)(lVar2 + 0x10) - (long)plVar11 >> 3) * -0x5555555555555555;\n        }\n        *(undefined1 *)(lVar2 + 0x20) = 1;\n        plVar12 = plVar11;\n      }" if (parenthesized_expression "(*(char *)(lVar2 + 0x20) == '\0')" ( (binary_expression "*(char *)(lVar2 + 0x20) == '\0'" (pointer_expression "*(char *)(lVar2 + 0x20)" * (cast_expression "(char *)(lVar2 + 0x20)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar2 + 0x20)" ( (binary_expression "lVar2 + 0x20" identifier + number_literal) )))) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        if (plVar11 != plVar3) {\n          lVar7 = 0x3f;\n          if (uVar9 != 0) {\n            for (; uVar9 >> lVar7 == 0; lVar7 = lVar7 + -1) {\n            }\n          }\n          FUN_00320150(plVar11,plVar3,(0x3f - (long)(int)((uint)lVar7 ^ 0x3f)) * 2);\n          if ((long)plVar3 - (long)plVar11 < 0x181) {\n            FUN_0031ddb0(plVar11,plVar3);\n          }\n          else {\n            plVar12 = plVar11 + 0x30;\n            FUN_0031ddb0(plVar11,plVar12);\n            for (; plVar12 != plVar3; plVar12 = plVar12 + 3) {\n              lVar7 = *plVar12;\n              lVar4 = plVar12[1];\n              lVar5 = plVar12[2];\n              lVar6 = plVar12[-3];\n              plVar11 = plVar12;\n              while (lVar7 < lVar6) {\n                plVar11[2] = plVar11[-1];\n                *plVar11 = plVar11[-3];\n                plVar11[1] = plVar11[-2];\n                lVar6 = plVar11[-6];\n                plVar11 = plVar11 + -3;\n              }\n              *plVar11 = lVar7;\n              plVar11[1] = lVar4;\n              plVar11[2] = lVar5;\n            }\n          }\n          plVar11 = *(long **)(lVar2 + 8);\n          uVar9 = (*(long *)(lVar2 + 0x10) - (long)plVar11 >> 3) * -0x5555555555555555;\n        }\n        *(undefined1 *)(lVar2 + 0x20) = 1;\n        plVar12 = plVar11;\n      }" { (if_statement "if (plVar11 != plVar3) {\n          lVar7 = 0x3f;\n          if (uVar9 != 0) {\n            for (; uVar9 >> lVar7 == 0; lVar7 = lVar7 + -1) {\n            }\n          }\n          FUN_00320150(plVar11,plVar3,(0x3f - (long)(int)((uint)lVar7 ^ 0x3f)) * 2);\n          if ((long)plVar3 - (long)plVar11 < 0x181) {\n            FUN_0031ddb0(plVar11,plVar3);\n          }\n          else {\n            plVar12 = plVar11 + 0x30;\n            FUN_0031ddb0(plVar11,plVar12);\n            for (; plVar12 != plVar3; plVar12 = plVar12 + 3) {\n              lVar7 = *plVar12;\n              lVar4 = plVar12[1];\n              lVar5 = plVar12[2];\n              lVar6 = plVar12[-3];\n              plVar11 = plVar12;\n              while (lVar7 < lVar6) {\n                plVar11[2] = plVar11[-1];\n                *plVar11 = plVar11[-3];\n                plVar11[1] = plVar11[-2];\n                lVar6 = plVar11[-6];\n                plVar11 = plVar11 + -3;\n              }\n              *plVar11 = lVar7;\n              plVar11[1] = lVar4;\n              plVar11[2] = lVar5;\n            }\n          }\n          plVar11 = *(long **)(lVar2 + 8);\n          uVar9 = (*(long *)(lVar2 + 0x10) - (long)plVar11 >> 3) * -0x5555555555555555;\n        }" if (parenthesized_expression "(plVar11 != plVar3)" ( (binary_expression "plVar11 != plVar3" identifier != identifier) )) (compound_statement "{\n          lVar7 = 0x3f;\n          if (uVar9 != 0) {\n            for (; uVar9 >> lVar7 == 0; lVar7 = lVar7 + -1) {\n            }\n          }\n          FUN_00320150(plVar11,plVar3,(0x3f - (long)(int)((uint)lVar7 ^ 0x3f)) * 2);\n          if ((long)plVar3 - (long)plVar11 < 0x181) {\n            FUN_0031ddb0(plVar11,plVar3);\n          }\n          else {\n            plVar12 = plVar11 + 0x30;\n            FUN_0031ddb0(plVar11,plVar12);\n            for (; plVar12 != plVar3; plVar12 = plVar12 + 3) {\n              lVar7 = *plVar12;\n              lVar4 = plVar12[1];\n              lVar5 = plVar12[2];\n              lVar6 = plVar12[-3];\n              plVar11 = plVar12;\n              while (lVar7 < lVar6) {\n                plVar11[2] = plVar11[-1];\n                *plVar11 = plVar11[-3];\n                plVar11[1] = plVar11[-2];\n                lVar6 = plVar11[-6];\n                plVar11 = plVar11 + -3;\n              }\n              *plVar11 = lVar7;\n              plVar11[1] = lVar4;\n              plVar11[2] = lVar5;\n            }\n          }\n          plVar11 = *(long **)(lVar2 + 8);\n          uVar9 = (*(long *)(lVar2 + 0x10) - (long)plVar11 >> 3) * -0x5555555555555555;\n        }" { (expression_statement "lVar7 = 0x3f;" (assignment_expression "lVar7 = 0x3f" identifier = number_literal) ;) (if_statement "if (uVar9 != 0) {\n            for (; uVar9 >> lVar7 == 0; lVar7 = lVar7 + -1) {\n            }\n          }" if (parenthesized_expression "(uVar9 != 0)" ( (binary_expression "uVar9 != 0" identifier != number_literal) )) (compound_statement "{\n            for (; uVar9 >> lVar7 == 0; lVar7 = lVar7 + -1) {\n            }\n          }" { (for_statement "for (; uVar9 >> lVar7 == 0; lVar7 = lVar7 + -1) {\n            }" for ( ; (binary_expression "uVar9 >> lVar7 == 0" (binary_expression "uVar9 >> lVar7" identifier >> identifier) == number_literal) ; (assignment_expression "lVar7 = lVar7 + -1" identifier = (binary_expression "lVar7 + -1" identifier + number_literal)) ) (compound_statement "{\n            }" { })) })) (expression_statement "FUN_00320150(plVar11,plVar3,(0x3f - (long)(int)((uint)lVar7 ^ 0x3f)) * 2);" (call_expression "FUN_00320150(plVar11,plVar3,(0x3f - (long)(int)((uint)lVar7 ^ 0x3f)) * 2)" identifier (argument_list "(plVar11,plVar3,(0x3f - (long)(int)((uint)lVar7 ^ 0x3f)) * 2)" ( identifier , identifier , (binary_expression "(0x3f - (long)(int)((uint)lVar7 ^ 0x3f)) * 2" (parenthesized_expression "(0x3f - (long)(int)((uint)lVar7 ^ 0x3f))" ( (binary_expression "0x3f - (long)(int)((uint)lVar7 ^ 0x3f)" number_literal - (cast_expression "(long)(int)((uint)lVar7 ^ 0x3f)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (cast_expression "(int)((uint)lVar7 ^ 0x3f)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((uint)lVar7 ^ 0x3f)" ( (binary_expression "(uint)lVar7 ^ 0x3f" (cast_expression "(uint)lVar7" ( (type_descriptor "uint" type_identifier) ) identifier) ^ number_literal) ))))) )) * number_literal) ))) ;) (if_statement "if ((long)plVar3 - (long)plVar11 < 0x181) {\n            FUN_0031ddb0(plVar11,plVar3);\n          }\n          else {\n            plVar12 = plVar11 + 0x30;\n            FUN_0031ddb0(plVar11,plVar12);\n            for (; plVar12 != plVar3; plVar12 = plVar12 + 3) {\n              lVar7 = *plVar12;\n              lVar4 = plVar12[1];\n              lVar5 = plVar12[2];\n              lVar6 = plVar12[-3];\n              plVar11 = plVar12;\n              while (lVar7 < lVar6) {\n                plVar11[2] = plVar11[-1];\n                *plVar11 = plVar11[-3];\n                plVar11[1] = plVar11[-2];\n                lVar6 = plVar11[-6];\n                plVar11 = plVar11 + -3;\n              }\n              *plVar11 = lVar7;\n              plVar11[1] = lVar4;\n              plVar11[2] = lVar5;\n            }\n          }" if (parenthesized_expression "((long)plVar3 - (long)plVar11 < 0x181)" ( (binary_expression "(long)plVar3 - (long)plVar11 < 0x181" (binary_expression "(long)plVar3 - (long)plVar11" (cast_expression "(long)plVar3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)plVar11" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) < number_literal) )) (compound_statement "{\n            FUN_0031ddb0(plVar11,plVar3);\n          }" { (expression_statement "FUN_0031ddb0(plVar11,plVar3);" (call_expression "FUN_0031ddb0(plVar11,plVar3)" identifier (argument_list "(plVar11,plVar3)" ( identifier , identifier ))) ;) }) (else_clause "else {\n            plVar12 = plVar11 + 0x30;\n            FUN_0031ddb0(plVar11,plVar12);\n            for (; plVar12 != plVar3; plVar12 = plVar12 + 3) {\n              lVar7 = *plVar12;\n              lVar4 = plVar12[1];\n              lVar5 = plVar12[2];\n              lVar6 = plVar12[-3];\n              plVar11 = plVar12;\n              while (lVar7 < lVar6) {\n                plVar11[2] = plVar11[-1];\n                *plVar11 = plVar11[-3];\n                plVar11[1] = plVar11[-2];\n                lVar6 = plVar11[-6];\n                plVar11 = plVar11 + -3;\n              }\n              *plVar11 = lVar7;\n              plVar11[1] = lVar4;\n              plVar11[2] = lVar5;\n            }\n          }" else (compound_statement "{\n            plVar12 = plVar11 + 0x30;\n            FUN_0031ddb0(plVar11,plVar12);\n            for (; plVar12 != plVar3; plVar12 = plVar12 + 3) {\n              lVar7 = *plVar12;\n              lVar4 = plVar12[1];\n              lVar5 = plVar12[2];\n              lVar6 = plVar12[-3];\n              plVar11 = plVar12;\n              while (lVar7 < lVar6) {\n                plVar11[2] = plVar11[-1];\n                *plVar11 = plVar11[-3];\n                plVar11[1] = plVar11[-2];\n                lVar6 = plVar11[-6];\n                plVar11 = plVar11 + -3;\n              }\n              *plVar11 = lVar7;\n              plVar11[1] = lVar4;\n              plVar11[2] = lVar5;\n            }\n          }" { (expression_statement "plVar12 = plVar11 + 0x30;" (assignment_expression "plVar12 = plVar11 + 0x30" identifier = (binary_expression "plVar11 + 0x30" identifier + number_literal)) ;) (expression_statement "FUN_0031ddb0(plVar11,plVar12);" (call_expression "FUN_0031ddb0(plVar11,plVar12)" identifier (argument_list "(plVar11,plVar12)" ( identifier , identifier ))) ;) (for_statement "for (; plVar12 != plVar3; plVar12 = plVar12 + 3) {\n              lVar7 = *plVar12;\n              lVar4 = plVar12[1];\n              lVar5 = plVar12[2];\n              lVar6 = plVar12[-3];\n              plVar11 = plVar12;\n              while (lVar7 < lVar6) {\n                plVar11[2] = plVar11[-1];\n                *plVar11 = plVar11[-3];\n                plVar11[1] = plVar11[-2];\n                lVar6 = plVar11[-6];\n                plVar11 = plVar11 + -3;\n              }\n              *plVar11 = lVar7;\n              plVar11[1] = lVar4;\n              plVar11[2] = lVar5;\n            }" for ( ; (binary_expression "plVar12 != plVar3" identifier != identifier) ; (assignment_expression "plVar12 = plVar12 + 3" identifier = (binary_expression "plVar12 + 3" identifier + number_literal)) ) (compound_statement "{\n              lVar7 = *plVar12;\n              lVar4 = plVar12[1];\n              lVar5 = plVar12[2];\n              lVar6 = plVar12[-3];\n              plVar11 = plVar12;\n              while (lVar7 < lVar6) {\n                plVar11[2] = plVar11[-1];\n                *plVar11 = plVar11[-3];\n                plVar11[1] = plVar11[-2];\n                lVar6 = plVar11[-6];\n                plVar11 = plVar11 + -3;\n              }\n              *plVar11 = lVar7;\n              plVar11[1] = lVar4;\n              plVar11[2] = lVar5;\n            }" { (expression_statement "lVar7 = *plVar12;" (assignment_expression "lVar7 = *plVar12" identifier = (pointer_expression "*plVar12" * identifier)) ;) (expression_statement "lVar4 = plVar12[1];" (assignment_expression "lVar4 = plVar12[1]" identifier = (subscript_expression "plVar12[1]" identifier [ number_literal ])) ;) (expression_statement "lVar5 = plVar12[2];" (assignment_expression "lVar5 = plVar12[2]" identifier = (subscript_expression "plVar12[2]" identifier [ number_literal ])) ;) (expression_statement "lVar6 = plVar12[-3];" (assignment_expression "lVar6 = plVar12[-3]" identifier = (subscript_expression "plVar12[-3]" identifier [ number_literal ])) ;) (expression_statement "plVar11 = plVar12;" (assignment_expression "plVar11 = plVar12" identifier = identifier) ;) (while_statement "while (lVar7 < lVar6) {\n                plVar11[2] = plVar11[-1];\n                *plVar11 = plVar11[-3];\n                plVar11[1] = plVar11[-2];\n                lVar6 = plVar11[-6];\n                plVar11 = plVar11 + -3;\n              }" while (parenthesized_expression "(lVar7 < lVar6)" ( (binary_expression "lVar7 < lVar6" identifier < identifier) )) (compound_statement "{\n                plVar11[2] = plVar11[-1];\n                *plVar11 = plVar11[-3];\n                plVar11[1] = plVar11[-2];\n                lVar6 = plVar11[-6];\n                plVar11 = plVar11 + -3;\n              }" { (expression_statement "plVar11[2] = plVar11[-1];" (assignment_expression "plVar11[2] = plVar11[-1]" (subscript_expression "plVar11[2]" identifier [ number_literal ]) = (subscript_expression "plVar11[-1]" identifier [ number_literal ])) ;) (expression_statement "*plVar11 = plVar11[-3];" (assignment_expression "*plVar11 = plVar11[-3]" (pointer_expression "*plVar11" * identifier) = (subscript_expression "plVar11[-3]" identifier [ number_literal ])) ;) (expression_statement "plVar11[1] = plVar11[-2];" (assignment_expression "plVar11[1] = plVar11[-2]" (subscript_expression "plVar11[1]" identifier [ number_literal ]) = (subscript_expression "plVar11[-2]" identifier [ number_literal ])) ;) (expression_statement "lVar6 = plVar11[-6];" (assignment_expression "lVar6 = plVar11[-6]" identifier = (subscript_expression "plVar11[-6]" identifier [ number_literal ])) ;) (expression_statement "plVar11 = plVar11 + -3;" (assignment_expression "plVar11 = plVar11 + -3" identifier = (binary_expression "plVar11 + -3" identifier + number_literal)) ;) })) (expression_statement "*plVar11 = lVar7;" (assignment_expression "*plVar11 = lVar7" (pointer_expression "*plVar11" * identifier) = identifier) ;) (expression_statement "plVar11[1] = lVar4;" (assignment_expression "plVar11[1] = lVar4" (subscript_expression "plVar11[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "plVar11[2] = lVar5;" (assignment_expression "plVar11[2] = lVar5" (subscript_expression "plVar11[2]" identifier [ number_literal ]) = identifier) ;) })) }))) (expression_statement "plVar11 = *(long **)(lVar2 + 8);" (assignment_expression "plVar11 = *(long **)(lVar2 + 8)" identifier = (pointer_expression "*(long **)(lVar2 + 8)" * (cast_expression "(long **)(lVar2 + 8)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar2 + 8)" ( (binary_expression "lVar2 + 8" identifier + number_literal) ))))) ;) (expression_statement "uVar9 = (*(long *)(lVar2 + 0x10) - (long)plVar11 >> 3) * -0x5555555555555555;" (assignment_expression "uVar9 = (*(long *)(lVar2 + 0x10) - (long)plVar11 >> 3) * -0x5555555555555555" identifier = (binary_expression "(*(long *)(lVar2 + 0x10) - (long)plVar11 >> 3) * -0x5555555555555555" (parenthesized_expression "(*(long *)(lVar2 + 0x10) - (long)plVar11 >> 3)" ( (binary_expression "*(long *)(lVar2 + 0x10) - (long)plVar11 >> 3" (binary_expression "*(long *)(lVar2 + 0x10) - (long)plVar11" (pointer_expression "*(long *)(lVar2 + 0x10)" * (cast_expression "(long *)(lVar2 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar2 + 0x10)" ( (binary_expression "lVar2 + 0x10" identifier + number_literal) )))) - (cast_expression "(long)plVar11" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) >> number_literal) )) * number_literal)) ;) })) (expression_statement "*(undefined1 *)(lVar2 + 0x20) = 1;" (assignment_expression "*(undefined1 *)(lVar2 + 0x20) = 1" (pointer_expression "*(undefined1 *)(lVar2 + 0x20)" * (cast_expression "(undefined1 *)(lVar2 + 0x20)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar2 + 0x20)" ( (binary_expression "lVar2 + 0x20" identifier + number_literal) )))) = number_literal) ;) (expression_statement "plVar12 = plVar11;" (assignment_expression "plVar12 = plVar11" identifier = identifier) ;) })) (for_statement "for (; 0 < (long)uVar9; uVar9 = (uVar9 - uVar10) - 1) {\n        while( true ) {\n          uVar10 = (long)uVar9 >> 1;\n          if (plVar11[uVar10 * 3] <= param_3) break;\n          uVar9 = uVar10;\n          if (uVar10 == 0) goto LAB_0031c4f3;\n        }\n        plVar11 = plVar11 + uVar10 * 3 + 3;\n      }" for ( ; (binary_expression "0 < (long)uVar9" number_literal < (cast_expression "(long)uVar9" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ; (assignment_expression "uVar9 = (uVar9 - uVar10) - 1" identifier = (binary_expression "(uVar9 - uVar10) - 1" (parenthesized_expression "(uVar9 - uVar10)" ( (binary_expression "uVar9 - uVar10" identifier - identifier) )) - number_literal)) ) (compound_statement "{\n        while( true ) {\n          uVar10 = (long)uVar9 >> 1;\n          if (plVar11[uVar10 * 3] <= param_3) break;\n          uVar9 = uVar10;\n          if (uVar10 == 0) goto LAB_0031c4f3;\n        }\n        plVar11 = plVar11 + uVar10 * 3 + 3;\n      }" { (while_statement "while( true ) {\n          uVar10 = (long)uVar9 >> 1;\n          if (plVar11[uVar10 * 3] <= param_3) break;\n          uVar9 = uVar10;\n          if (uVar10 == 0) goto LAB_0031c4f3;\n        }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n          uVar10 = (long)uVar9 >> 1;\n          if (plVar11[uVar10 * 3] <= param_3) break;\n          uVar9 = uVar10;\n          if (uVar10 == 0) goto LAB_0031c4f3;\n        }" { (expression_statement "uVar10 = (long)uVar9 >> 1;" (assignment_expression "uVar10 = (long)uVar9 >> 1" identifier = (binary_expression "(long)uVar9 >> 1" (cast_expression "(long)uVar9" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) >> number_literal)) ;) (if_statement "if (plVar11[uVar10 * 3] <= param_3) break;" if (parenthesized_expression "(plVar11[uVar10 * 3] <= param_3)" ( (binary_expression "plVar11[uVar10 * 3] <= param_3" (subscript_expression "plVar11[uVar10 * 3]" identifier [ (binary_expression "uVar10 * 3" identifier * number_literal) ]) <= identifier) )) (break_statement "break;" break ;)) (expression_statement "uVar9 = uVar10;" (assignment_expression "uVar9 = uVar10" identifier = identifier) ;) (if_statement "if (uVar10 == 0) goto LAB_0031c4f3;" if (parenthesized_expression "(uVar10 == 0)" ( (binary_expression "uVar10 == 0" identifier == number_literal) )) (goto_statement "goto LAB_0031c4f3;" goto statement_identifier ;)) })) (expression_statement "plVar11 = plVar11 + uVar10 * 3 + 3;" (assignment_expression "plVar11 = plVar11 + uVar10 * 3 + 3" identifier = (binary_expression "plVar11 + uVar10 * 3 + 3" (binary_expression "plVar11 + uVar10 * 3" identifier + (binary_expression "uVar10 * 3" identifier * number_literal)) + number_literal)) ;) })) (labeled_statement "LAB_0031c4f3:\n      if (plVar11 != plVar12) {\n        if (param_3 < plVar11[-3]) goto LAB_0031c632;\n        if (param_3 - plVar11[-3] < plVar11[-2]) {\n          lVar2 = plVar11[-1];\n          *param_4 = lVar2;\n          if (lVar2 != -1) {\n            *param_4 = (param_3 - plVar11[-3]) + lVar2;\n            return 1;\n          }\n          return 1;\n        }\n      }" statement_identifier : (if_statement "if (plVar11 != plVar12) {\n        if (param_3 < plVar11[-3]) goto LAB_0031c632;\n        if (param_3 - plVar11[-3] < plVar11[-2]) {\n          lVar2 = plVar11[-1];\n          *param_4 = lVar2;\n          if (lVar2 != -1) {\n            *param_4 = (param_3 - plVar11[-3]) + lVar2;\n            return 1;\n          }\n          return 1;\n        }\n      }" if (parenthesized_expression "(plVar11 != plVar12)" ( (binary_expression "plVar11 != plVar12" identifier != identifier) )) (compound_statement "{\n        if (param_3 < plVar11[-3]) goto LAB_0031c632;\n        if (param_3 - plVar11[-3] < plVar11[-2]) {\n          lVar2 = plVar11[-1];\n          *param_4 = lVar2;\n          if (lVar2 != -1) {\n            *param_4 = (param_3 - plVar11[-3]) + lVar2;\n            return 1;\n          }\n          return 1;\n        }\n      }" { (if_statement "if (param_3 < plVar11[-3]) goto LAB_0031c632;" if (parenthesized_expression "(param_3 < plVar11[-3])" ( (binary_expression "param_3 < plVar11[-3]" identifier < (subscript_expression "plVar11[-3]" identifier [ number_literal ])) )) (goto_statement "goto LAB_0031c632;" goto statement_identifier ;)) (if_statement "if (param_3 - plVar11[-3] < plVar11[-2]) {\n          lVar2 = plVar11[-1];\n          *param_4 = lVar2;\n          if (lVar2 != -1) {\n            *param_4 = (param_3 - plVar11[-3]) + lVar2;\n            return 1;\n          }\n          return 1;\n        }" if (parenthesized_expression "(param_3 - plVar11[-3] < plVar11[-2])" ( (binary_expression "param_3 - plVar11[-3] < plVar11[-2]" (binary_expression "param_3 - plVar11[-3]" identifier - (subscript_expression "plVar11[-3]" identifier [ number_literal ])) < (subscript_expression "plVar11[-2]" identifier [ number_literal ])) )) (compound_statement "{\n          lVar2 = plVar11[-1];\n          *param_4 = lVar2;\n          if (lVar2 != -1) {\n            *param_4 = (param_3 - plVar11[-3]) + lVar2;\n            return 1;\n          }\n          return 1;\n        }" { (expression_statement "lVar2 = plVar11[-1];" (assignment_expression "lVar2 = plVar11[-1]" identifier = (subscript_expression "plVar11[-1]" identifier [ number_literal ])) ;) (expression_statement "*param_4 = lVar2;" (assignment_expression "*param_4 = lVar2" (pointer_expression "*param_4" * identifier) = identifier) ;) (if_statement "if (lVar2 != -1) {\n            *param_4 = (param_3 - plVar11[-3]) + lVar2;\n            return 1;\n          }" if (parenthesized_expression "(lVar2 != -1)" ( (binary_expression "lVar2 != -1" identifier != number_literal) )) (compound_statement "{\n            *param_4 = (param_3 - plVar11[-3]) + lVar2;\n            return 1;\n          }" { (expression_statement "*param_4 = (param_3 - plVar11[-3]) + lVar2;" (assignment_expression "*param_4 = (param_3 - plVar11[-3]) + lVar2" (pointer_expression "*param_4" * identifier) = (binary_expression "(param_3 - plVar11[-3]) + lVar2" (parenthesized_expression "(param_3 - plVar11[-3])" ( (binary_expression "param_3 - plVar11[-3]" identifier - (subscript_expression "plVar11[-3]" identifier [ number_literal ])) )) + identifier)) ;) (return_statement "return 1;" return number_literal ;) })) (return_statement "return 1;" return number_literal ;) })) }))) })) })) (return_statement "return 0;" return number_literal ;) })))
(translation_unit "/* WARNING: Type propagation algorithm not settling */\n/* DWARF original prototype: bool get_output_offset(Object_merge_map * this, uint shndx,\n   section_offset_type input_offset, section_offset_type * output_offset) */\n\nbool __thiscall\ngold::Object_merge_map::get_output_offset\n          (Object_merge_map *this,uint shndx,section_offset_type input_offset,\n          section_offset_type *output_offset)\n\n{\n  uint uVar1;\n  pointer ppVar2;\n  Input_merge_map *pIVar3;\n  pointer pIVar4;\n  long lVar5;\n  section_size_type sVar6;\n  section_offset_type sVar7;\n  long lVar8;\n  section_offset_type sVar9;\n  section_size_type sVar10;\n  pointer ppVar11;\n  ulong uVar12;\n  ulong uVar13;\n  pointer pIVar14;\n  pointer pIVar15;\n  \n  if (shndx == 0xffffffff) {\n                    /* WARNING: Subroutine does not return */\n    get_input_merge_map(this,0xffffffff);\n  }\n  ppVar11 = (this->section_merge_maps_).\n            super__Vector_base<std::pair<unsigned_int,_gold::Object_merge_map::Input_merge_map*>,_std::allocator<std::pair<unsigned_int,_gold::Object_merge_map::Input_merge_map*>_>_>\n            ._M_impl._M_start;\n  ppVar2 = (this->section_merge_maps_).\n           super__Vector_base<std::pair<unsigned_int,_gold::Object_merge_map::Input_merge_map*>,_std::allocator<std::pair<unsigned_int,_gold::Object_merge_map::Input_merge_map*>_>_>\n           ._M_impl._M_finish;\n  if (ppVar2 != ppVar11) {\n    uVar1 = ppVar11->first;\n    while (uVar1 != shndx) {\n      ppVar11 = ppVar11 + 1;\n      if (ppVar2 == ppVar11) {\n        return false;\n      }\n      uVar1 = ppVar11->first;\n    }\n    pIVar3 = ppVar11->second;\n    if (pIVar3 != (Input_merge_map *)0x0) {\n      pIVar4 = (pIVar3->entries).\n               super__Vector_base<gold::Object_merge_map::Input_merge_entry,_std::allocator<gold::Object_merge_map::Input_merge_entry>_>\n               ._M_impl._M_finish;\n      pIVar14 = (pIVar3->entries).\n                super__Vector_base<gold::Object_merge_map::Input_merge_entry,_std::allocator<gold::Object_merge_map::Input_merge_entry>_>\n                ._M_impl._M_start;\n      uVar12 = ((long)pIVar4 - (long)pIVar14 >> 3) * -0x5555555555555555;\n      pIVar15 = pIVar14;\n      if (pIVar3->sorted == false) {\n        if (pIVar14 != pIVar4) {\n          lVar5 = 0x3f;\n          if (uVar12 != 0) {\n            for (; uVar12 >> lVar5 == 0; lVar5 = lVar5 + -1) {\n            }\n          }\n          std::\n          __introsort_loop<__gnu_cxx::__normal_iterator<gold::Object_merge_map::Input_merge_entry*,_std::vector<gold::Object_merge_map::Input_merge_entry>_>,_long_int,___gnu_cxx::__ops::_Iter_comp_iter<gold::Object_merge_map::Input_merge_compare>_>\n                    (pIVar14,pIVar4,(0x3f - (long)(int)((uint)lVar5 ^ 0x3f)) * 2);\n          if ((long)pIVar4 - (long)pIVar14 < 0x181) {\n            std::\n            __insertion_sort<__gnu_cxx::__normal_iterator<gold::Object_merge_map::Input_merge_entry*,_std::vector<gold::Object_merge_map::Input_merge_entry>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Object_merge_map::Input_merge_compare>_>\n                      (pIVar14,pIVar4);\n          }\n          else {\n            pIVar15 = pIVar14 + 0x10;\n            std::\n            __insertion_sort<__gnu_cxx::__normal_iterator<gold::Object_merge_map::Input_merge_entry*,_std::vector<gold::Object_merge_map::Input_merge_entry>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Object_merge_map::Input_merge_compare>_>\n                      (pIVar14,pIVar15);\n            for (; pIVar15 != pIVar4; pIVar15 = pIVar15 + 1) {\n              lVar5 = pIVar15->input_offset;\n              sVar6 = pIVar15->length;\n              sVar7 = pIVar15->output_offset;\n              lVar8 = pIVar15[-1].input_offset;\n              pIVar14 = pIVar15;\n              while (lVar5 < lVar8) {\n                sVar9 = pIVar14[-1].input_offset;\n                sVar10 = pIVar14[-1].length;\n                pIVar14->output_offset = pIVar14[-1].output_offset;\n                pIVar14->input_offset = sVar9;\n                pIVar14->length = sVar10;\n                lVar8 = pIVar14[-2].input_offset;\n                pIVar14 = pIVar14 + -1;\n              }\n              pIVar14->input_offset = lVar5;\n              pIVar14->length = sVar6;\n              pIVar14->output_offset = sVar7;\n            }\n          }\n          pIVar14 = (pIVar3->entries).\n                    super__Vector_base<gold::Object_merge_map::Input_merge_entry,_std::allocator<gold::Object_merge_map::Input_merge_entry>_>\n                    ._M_impl._M_start;\n          uVar12 = ((long)(pIVar3->entries).\n                          super__Vector_base<gold::Object_merge_map::Input_merge_entry,_std::allocator<gold::Object_merge_map::Input_merge_entry>_>\n                          ._M_impl._M_finish - (long)pIVar14 >> 3) * -0x5555555555555555;\n        }\n        pIVar3->sorted = true;\n        pIVar15 = pIVar14;\n      }\n      for (; 0 < (long)uVar12; uVar12 = (uVar12 - uVar13) - 1) {\n        while( true ) {\n          uVar13 = (long)uVar12 >> 1;\n          if (pIVar14[uVar13].input_offset <= input_offset) break;\n          uVar12 = uVar13;\n          if (uVar13 == 0) goto LAB_0031c4f3;\n        }\n        pIVar14 = pIVar14 + uVar13 + 1;\n      }\nLAB_0031c4f3:\n      if (pIVar14 != pIVar15) {\n        if (input_offset < pIVar14[-1].input_offset) {\n                    /* WARNING: Subroutine does not return */\n          do_gold_unreachable("../../gold/merge.cc",0xa1,"get_output_offset");\n        }\n        if (input_offset - pIVar14[-1].input_offset < (long)pIVar14[-1].length) {\n          lVar5 = pIVar14[-1].output_offset;\n          *output_offset = lVar5;\n          if (lVar5 != -1) {\n            *output_offset = (input_offset - pIVar14[-1].input_offset) + lVar5;\n            return true;\n          }\n          return true;\n        }\n      }\n    }\n  }\n  return false;\n}\n\n" comment comment (function_definition "bool __thiscall\ngold::Object_merge_map::get_output_offset\n          (Object_merge_map *this,uint shndx,section_offset_type input_offset,\n          section_offset_type *output_offset)\n\n{\n  uint uVar1;\n  pointer ppVar2;\n  Input_merge_map *pIVar3;\n  pointer pIVar4;\n  long lVar5;\n  section_size_type sVar6;\n  section_offset_type sVar7;\n  long lVar8;\n  section_offset_type sVar9;\n  section_size_type sVar10;\n  pointer ppVar11;\n  ulong uVar12;\n  ulong uVar13;\n  pointer pIVar14;\n  pointer pIVar15;\n  \n  if (shndx == 0xffffffff) {\n                    /* WARNING: Subroutine does not return */\n    get_input_merge_map(this,0xffffffff);\n  }\n  ppVar11 = (this->section_merge_maps_).\n            super__Vector_base<std::pair<unsigned_int,_gold::Object_merge_map::Input_merge_map*>,_std::allocator<std::pair<unsigned_int,_gold::Object_merge_map::Input_merge_map*>_>_>\n            ._M_impl._M_start;\n  ppVar2 = (this->section_merge_maps_).\n           super__Vector_base<std::pair<unsigned_int,_gold::Object_merge_map::Input_merge_map*>,_std::allocator<std::pair<unsigned_int,_gold::Object_merge_map::Input_merge_map*>_>_>\n           ._M_impl._M_finish;\n  if (ppVar2 != ppVar11) {\n    uVar1 = ppVar11->first;\n    while (uVar1 != shndx) {\n      ppVar11 = ppVar11 + 1;\n      if (ppVar2 == ppVar11) {\n        return false;\n      }\n      uVar1 = ppVar11->first;\n    }\n    pIVar3 = ppVar11->second;\n    if (pIVar3 != (Input_merge_map *)0x0) {\n      pIVar4 = (pIVar3->entries).\n               super__Vector_base<gold::Object_merge_map::Input_merge_entry,_std::allocator<gold::Object_merge_map::Input_merge_entry>_>\n               ._M_impl._M_finish;\n      pIVar14 = (pIVar3->entries).\n                super__Vector_base<gold::Object_merge_map::Input_merge_entry,_std::allocator<gold::Object_merge_map::Input_merge_entry>_>\n                ._M_impl._M_start;\n      uVar12 = ((long)pIVar4 - (long)pIVar14 >> 3) * -0x5555555555555555;\n      pIVar15 = pIVar14;\n      if (pIVar3->sorted == false) {\n        if (pIVar14 != pIVar4) {\n          lVar5 = 0x3f;\n          if (uVar12 != 0) {\n            for (; uVar12 >> lVar5 == 0; lVar5 = lVar5 + -1) {\n            }\n          }\n          std::\n          __introsort_loop<__gnu_cxx::__normal_iterator<gold::Object_merge_map::Input_merge_entry*,_std::vector<gold::Object_merge_map::Input_merge_entry>_>,_long_int,___gnu_cxx::__ops::_Iter_comp_iter<gold::Object_merge_map::Input_merge_compare>_>\n                    (pIVar14,pIVar4,(0x3f - (long)(int)((uint)lVar5 ^ 0x3f)) * 2);\n          if ((long)pIVar4 - (long)pIVar14 < 0x181) {\n            std::\n            __insertion_sort<__gnu_cxx::__normal_iterator<gold::Object_merge_map::Input_merge_entry*,_std::vector<gold::Object_merge_map::Input_merge_entry>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Object_merge_map::Input_merge_compare>_>\n                      (pIVar14,pIVar4);\n          }\n          else {\n            pIVar15 = pIVar14 + 0x10;\n            std::\n            __insertion_sort<__gnu_cxx::__normal_iterator<gold::Object_merge_map::Input_merge_entry*,_std::vector<gold::Object_merge_map::Input_merge_entry>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Object_merge_map::Input_merge_compare>_>\n                      (pIVar14,pIVar15);\n            for (; pIVar15 != pIVar4; pIVar15 = pIVar15 + 1) {\n              lVar5 = pIVar15->input_offset;\n              sVar6 = pIVar15->length;\n              sVar7 = pIVar15->output_offset;\n              lVar8 = pIVar15[-1].input_offset;\n              pIVar14 = pIVar15;\n              while (lVar5 < lVar8) {\n                sVar9 = pIVar14[-1].input_offset;\n                sVar10 = pIVar14[-1].length;\n                pIVar14->output_offset = pIVar14[-1].output_offset;\n                pIVar14->input_offset = sVar9;\n                pIVar14->length = sVar10;\n                lVar8 = pIVar14[-2].input_offset;\n                pIVar14 = pIVar14 + -1;\n              }\n              pIVar14->input_offset = lVar5;\n              pIVar14->length = sVar6;\n              pIVar14->output_offset = sVar7;\n            }\n          }\n          pIVar14 = (pIVar3->entries).\n                    super__Vector_base<gold::Object_merge_map::Input_merge_entry,_std::allocator<gold::Object_merge_map::Input_merge_entry>_>\n                    ._M_impl._M_start;\n          uVar12 = ((long)(pIVar3->entries).\n                          super__Vector_base<gold::Object_merge_map::Input_merge_entry,_std::allocator<gold::Object_merge_map::Input_merge_entry>_>\n                          ._M_impl._M_finish - (long)pIVar14 >> 3) * -0x5555555555555555;\n        }\n        pIVar3->sorted = true;\n        pIVar15 = pIVar14;\n      }\n      for (; 0 < (long)uVar12; uVar12 = (uVar12 - uVar13) - 1) {\n        while( true ) {\n          uVar13 = (long)uVar12 >> 1;\n          if (pIVar14[uVar13].input_offset <= input_offset) break;\n          uVar12 = uVar13;\n          if (uVar13 == 0) goto LAB_0031c4f3;\n        }\n        pIVar14 = pIVar14 + uVar13 + 1;\n      }\nLAB_0031c4f3:\n      if (pIVar14 != pIVar15) {\n        if (input_offset < pIVar14[-1].input_offset) {\n                    /* WARNING: Subroutine does not return */\n          do_gold_unreachable("../../gold/merge.cc",0xa1,"get_output_offset");\n        }\n        if (input_offset - pIVar14[-1].input_offset < (long)pIVar14[-1].length) {\n          lVar5 = pIVar14[-1].output_offset;\n          *output_offset = lVar5;\n          if (lVar5 != -1) {\n            *output_offset = (input_offset - pIVar14[-1].input_offset) + lVar5;\n            return true;\n          }\n          return true;\n        }\n      }\n    }\n  }\n  return false;\n}" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::Object_merge_map::" identifier : : identifier : :) (function_declarator "get_output_offset\n          (Object_merge_map *this,uint shndx,section_offset_type input_offset,\n          section_offset_type *output_offset)" identifier (parameter_list "(Object_merge_map *this,uint shndx,section_offset_type input_offset,\n          section_offset_type *output_offset)" ( (parameter_declaration "Object_merge_map *this" type_identifier (pointer_declarator "*this" * identifier)) , (parameter_declaration "uint shndx" type_identifier identifier) , (parameter_declaration "section_offset_type input_offset" type_identifier identifier) , (parameter_declaration "section_offset_type *output_offset" type_identifier (pointer_declarator "*output_offset" * identifier)) ))) (compound_statement "{\n  uint uVar1;\n  pointer ppVar2;\n  Input_merge_map *pIVar3;\n  pointer pIVar4;\n  long lVar5;\n  section_size_type sVar6;\n  section_offset_type sVar7;\n  long lVar8;\n  section_offset_type sVar9;\n  section_size_type sVar10;\n  pointer ppVar11;\n  ulong uVar12;\n  ulong uVar13;\n  pointer pIVar14;\n  pointer pIVar15;\n  \n  if (shndx == 0xffffffff) {\n                    /* WARNING: Subroutine does not return */\n    get_input_merge_map(this,0xffffffff);\n  }\n  ppVar11 = (this->section_merge_maps_).\n            super__Vector_base<std::pair<unsigned_int,_gold::Object_merge_map::Input_merge_map*>,_std::allocator<std::pair<unsigned_int,_gold::Object_merge_map::Input_merge_map*>_>_>\n            ._M_impl._M_start;\n  ppVar2 = (this->section_merge_maps_).\n           super__Vector_base<std::pair<unsigned_int,_gold::Object_merge_map::Input_merge_map*>,_std::allocator<std::pair<unsigned_int,_gold::Object_merge_map::Input_merge_map*>_>_>\n           ._M_impl._M_finish;\n  if (ppVar2 != ppVar11) {\n    uVar1 = ppVar11->first;\n    while (uVar1 != shndx) {\n      ppVar11 = ppVar11 + 1;\n      if (ppVar2 == ppVar11) {\n        return false;\n      }\n      uVar1 = ppVar11->first;\n    }\n    pIVar3 = ppVar11->second;\n    if (pIVar3 != (Input_merge_map *)0x0) {\n      pIVar4 = (pIVar3->entries).\n               super__Vector_base<gold::Object_merge_map::Input_merge_entry,_std::allocator<gold::Object_merge_map::Input_merge_entry>_>\n               ._M_impl._M_finish;\n      pIVar14 = (pIVar3->entries).\n                super__Vector_base<gold::Object_merge_map::Input_merge_entry,_std::allocator<gold::Object_merge_map::Input_merge_entry>_>\n                ._M_impl._M_start;\n      uVar12 = ((long)pIVar4 - (long)pIVar14 >> 3) * -0x5555555555555555;\n      pIVar15 = pIVar14;\n      if (pIVar3->sorted == false) {\n        if (pIVar14 != pIVar4) {\n          lVar5 = 0x3f;\n          if (uVar12 != 0) {\n            for (; uVar12 >> lVar5 == 0; lVar5 = lVar5 + -1) {\n            }\n          }\n          std::\n          __introsort_loop<__gnu_cxx::__normal_iterator<gold::Object_merge_map::Input_merge_entry*,_std::vector<gold::Object_merge_map::Input_merge_entry>_>,_long_int,___gnu_cxx::__ops::_Iter_comp_iter<gold::Object_merge_map::Input_merge_compare>_>\n                    (pIVar14,pIVar4,(0x3f - (long)(int)((uint)lVar5 ^ 0x3f)) * 2);\n          if ((long)pIVar4 - (long)pIVar14 < 0x181) {\n            std::\n            __insertion_sort<__gnu_cxx::__normal_iterator<gold::Object_merge_map::Input_merge_entry*,_std::vector<gold::Object_merge_map::Input_merge_entry>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Object_merge_map::Input_merge_compare>_>\n                      (pIVar14,pIVar4);\n          }\n          else {\n            pIVar15 = pIVar14 + 0x10;\n            std::\n            __insertion_sort<__gnu_cxx::__normal_iterator<gold::Object_merge_map::Input_merge_entry*,_std::vector<gold::Object_merge_map::Input_merge_entry>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Object_merge_map::Input_merge_compare>_>\n                      (pIVar14,pIVar15);\n            for (; pIVar15 != pIVar4; pIVar15 = pIVar15 + 1) {\n              lVar5 = pIVar15->input_offset;\n              sVar6 = pIVar15->length;\n              sVar7 = pIVar15->output_offset;\n              lVar8 = pIVar15[-1].input_offset;\n              pIVar14 = pIVar15;\n              while (lVar5 < lVar8) {\n                sVar9 = pIVar14[-1].input_offset;\n                sVar10 = pIVar14[-1].length;\n                pIVar14->output_offset = pIVar14[-1].output_offset;\n                pIVar14->input_offset = sVar9;\n                pIVar14->length = sVar10;\n                lVar8 = pIVar14[-2].input_offset;\n                pIVar14 = pIVar14 + -1;\n              }\n              pIVar14->input_offset = lVar5;\n              pIVar14->length = sVar6;\n              pIVar14->output_offset = sVar7;\n            }\n          }\n          pIVar14 = (pIVar3->entries).\n                    super__Vector_base<gold::Object_merge_map::Input_merge_entry,_std::allocator<gold::Object_merge_map::Input_merge_entry>_>\n                    ._M_impl._M_start;\n          uVar12 = ((long)(pIVar3->entries).\n                          super__Vector_base<gold::Object_merge_map::Input_merge_entry,_std::allocator<gold::Object_merge_map::Input_merge_entry>_>\n                          ._M_impl._M_finish - (long)pIVar14 >> 3) * -0x5555555555555555;\n        }\n        pIVar3->sorted = true;\n        pIVar15 = pIVar14;\n      }\n      for (; 0 < (long)uVar12; uVar12 = (uVar12 - uVar13) - 1) {\n        while( true ) {\n          uVar13 = (long)uVar12 >> 1;\n          if (pIVar14[uVar13].input_offset <= input_offset) break;\n          uVar12 = uVar13;\n          if (uVar13 == 0) goto LAB_0031c4f3;\n        }\n        pIVar14 = pIVar14 + uVar13 + 1;\n      }\nLAB_0031c4f3:\n      if (pIVar14 != pIVar15) {\n        if (input_offset < pIVar14[-1].input_offset) {\n                    /* WARNING: Subroutine does not return */\n          do_gold_unreachable("../../gold/merge.cc",0xa1,"get_output_offset");\n        }\n        if (input_offset - pIVar14[-1].input_offset < (long)pIVar14[-1].length) {\n          lVar5 = pIVar14[-1].output_offset;\n          *output_offset = lVar5;\n          if (lVar5 != -1) {\n            *output_offset = (input_offset - pIVar14[-1].input_offset) + lVar5;\n            return true;\n          }\n          return true;\n        }\n      }\n    }\n  }\n  return false;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "pointer ppVar2;" type_identifier identifier ;) (declaration "Input_merge_map *pIVar3;" type_identifier (pointer_declarator "*pIVar3" * identifier) ;) (declaration "pointer pIVar4;" type_identifier identifier ;) (declaration "long lVar5;" (sized_type_specifier "long" long) identifier ;) (declaration "section_size_type sVar6;" type_identifier identifier ;) (declaration "section_offset_type sVar7;" type_identifier identifier ;) (declaration "long lVar8;" (sized_type_specifier "long" long) identifier ;) (declaration "section_offset_type sVar9;" type_identifier identifier ;) (declaration "section_size_type sVar10;" type_identifier identifier ;) (declaration "pointer ppVar11;" type_identifier identifier ;) (declaration "ulong uVar12;" type_identifier identifier ;) (declaration "ulong uVar13;" type_identifier identifier ;) (declaration "pointer pIVar14;" type_identifier identifier ;) (declaration "pointer pIVar15;" type_identifier identifier ;) (if_statement "if (shndx == 0xffffffff) {\n                    /* WARNING: Subroutine does not return */\n    get_input_merge_map(this,0xffffffff);\n  }" if (parenthesized_expression "(shndx == 0xffffffff)" ( (binary_expression "shndx == 0xffffffff" identifier == number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    get_input_merge_map(this,0xffffffff);\n  }" { comment (expression_statement "get_input_merge_map(this,0xffffffff);" (call_expression "get_input_merge_map(this,0xffffffff)" identifier (argument_list "(this,0xffffffff)" ( identifier , number_literal ))) ;) })) (ERROR "ppVar11 = (this->section_merge_maps_).\n            super__Vector_base<std::pair<unsigned_int,_gold::Object_merge_map::Input_merge_map*>,_std::allocator<std::pair<unsigned_int,_gold::" (comma_expression "ppVar11 = (this->section_merge_maps_).\n            super__Vector_base<std::pair<unsigned_int,_gold" (binary_expression "ppVar11 = (this->section_merge_maps_).\n            super__Vector_base<std::pair<unsigned_int" (assignment_expression "ppVar11 = (this->section_merge_maps_).\n            super__Vector_base<std" identifier = (binary_expression "(this->section_merge_maps_).\n            super__Vector_base<std" (field_expression "(this->section_merge_maps_).\n            super__Vector_base" (parenthesized_expression "(this->section_merge_maps_)" ( (field_expression "this->section_merge_maps_" identifier -> field_identifier) )) . field_identifier) < identifier)) (ERROR "::pair" : : identifier) < identifier) , identifier) : : identifier : : identifier * > , identifier : : (binary_expression "allocator<std" identifier < identifier) : : (comma_expression "pair<unsigned_int,_gold" (binary_expression "pair<unsigned_int" identifier < identifier) , identifier) : :) (expression_statement "Object_merge_map::Input_merge_map*>_>_>\n            ._M_impl._M_start;" (field_expression "Object_merge_map::Input_merge_map*>_>_>\n            ._M_impl._M_start" (field_expression "Object_merge_map::Input_merge_map*>_>_>\n            ._M_impl" (binary_expression "Object_merge_map::Input_merge_map*>_>_" (binary_expression "Object_merge_map::Input_merge_map*>_" identifier (ERROR "::Input_merge_map*" : : identifier *) > identifier) > identifier) (ERROR ">" >) . field_identifier) . field_identifier) ;) (ERROR "ppVar2 = (this->section_merge_maps_).\n           super__Vector_base<std::pair<unsigned_int,_gold::Object_merge_map::Input_merge_map*>,_std::allocator<std::pair<unsigned_int,_gold::" (comma_expression "ppVar2 = (this->section_merge_maps_).\n           super__Vector_base<std::pair<unsigned_int,_gold" (binary_expression "ppVar2 = (this->section_merge_maps_).\n           super__Vector_base<std::pair<unsigned_int" (assignment_expression "ppVar2 = (this->section_merge_maps_).\n           super__Vector_base<std" identifier = (binary_expression "(this->section_merge_maps_).\n           super__Vector_base<std" (field_expression "(this->section_merge_maps_).\n           super__Vector_base" (parenthesized_expression "(this->section_merge_maps_)" ( (field_expression "this->section_merge_maps_" identifier -> field_identifier) )) . field_identifier) < identifier)) (ERROR "::pair" : : identifier) < identifier) , identifier) : : identifier : : identifier * > , identifier : : (binary_expression "allocator<std" identifier < identifier) : : (comma_expression "pair<unsigned_int,_gold" (binary_expression "pair<unsigned_int" identifier < identifier) , identifier) : :) (expression_statement "Object_merge_map::Input_merge_map*>_>_>\n           ._M_impl._M_finish;" (field_expression "Object_merge_map::Input_merge_map*>_>_>\n           ._M_impl._M_finish" (field_expression "Object_merge_map::Input_merge_map*>_>_>\n           ._M_impl" (binary_expression "Object_merge_map::Input_merge_map*>_>_" (binary_expression "Object_merge_map::Input_merge_map*>_" identifier (ERROR "::Input_merge_map*" : : identifier *) > identifier) > identifier) (ERROR ">" >) . field_identifier) . field_identifier) ;) (if_statement "if (ppVar2 != ppVar11) {\n    uVar1 = ppVar11->first;\n    while (uVar1 != shndx) {\n      ppVar11 = ppVar11 + 1;\n      if (ppVar2 == ppVar11) {\n        return false;\n      }\n      uVar1 = ppVar11->first;\n    }\n    pIVar3 = ppVar11->second;\n    if (pIVar3 != (Input_merge_map *)0x0) {\n      pIVar4 = (pIVar3->entries).\n               super__Vector_base<gold::Object_merge_map::Input_merge_entry,_std::allocator<gold::Object_merge_map::Input_merge_entry>_>\n               ._M_impl._M_finish;\n      pIVar14 = (pIVar3->entries).\n                super__Vector_base<gold::Object_merge_map::Input_merge_entry,_std::allocator<gold::Object_merge_map::Input_merge_entry>_>\n                ._M_impl._M_start;\n      uVar12 = ((long)pIVar4 - (long)pIVar14 >> 3) * -0x5555555555555555;\n      pIVar15 = pIVar14;\n      if (pIVar3->sorted == false) {\n        if (pIVar14 != pIVar4) {\n          lVar5 = 0x3f;\n          if (uVar12 != 0) {\n            for (; uVar12 >> lVar5 == 0; lVar5 = lVar5 + -1) {\n            }\n          }\n          std::\n          __introsort_loop<__gnu_cxx::__normal_iterator<gold::Object_merge_map::Input_merge_entry*,_std::vector<gold::Object_merge_map::Input_merge_entry>_>,_long_int,___gnu_cxx::__ops::_Iter_comp_iter<gold::Object_merge_map::Input_merge_compare>_>\n                    (pIVar14,pIVar4,(0x3f - (long)(int)((uint)lVar5 ^ 0x3f)) * 2);\n          if ((long)pIVar4 - (long)pIVar14 < 0x181) {\n            std::\n            __insertion_sort<__gnu_cxx::__normal_iterator<gold::Object_merge_map::Input_merge_entry*,_std::vector<gold::Object_merge_map::Input_merge_entry>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Object_merge_map::Input_merge_compare>_>\n                      (pIVar14,pIVar4);\n          }\n          else {\n            pIVar15 = pIVar14 + 0x10;\n            std::\n            __insertion_sort<__gnu_cxx::__normal_iterator<gold::Object_merge_map::Input_merge_entry*,_std::vector<gold::Object_merge_map::Input_merge_entry>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Object_merge_map::Input_merge_compare>_>\n                      (pIVar14,pIVar15);\n            for (; pIVar15 != pIVar4; pIVar15 = pIVar15 + 1) {\n              lVar5 = pIVar15->input_offset;\n              sVar6 = pIVar15->length;\n              sVar7 = pIVar15->output_offset;\n              lVar8 = pIVar15[-1].input_offset;\n              pIVar14 = pIVar15;\n              while (lVar5 < lVar8) {\n                sVar9 = pIVar14[-1].input_offset;\n                sVar10 = pIVar14[-1].length;\n                pIVar14->output_offset = pIVar14[-1].output_offset;\n                pIVar14->input_offset = sVar9;\n                pIVar14->length = sVar10;\n                lVar8 = pIVar14[-2].input_offset;\n                pIVar14 = pIVar14 + -1;\n              }\n              pIVar14->input_offset = lVar5;\n              pIVar14->length = sVar6;\n              pIVar14->output_offset = sVar7;\n            }\n          }\n          pIVar14 = (pIVar3->entries).\n                    super__Vector_base<gold::Object_merge_map::Input_merge_entry,_std::allocator<gold::Object_merge_map::Input_merge_entry>_>\n                    ._M_impl._M_start;\n          uVar12 = ((long)(pIVar3->entries).\n                          super__Vector_base<gold::Object_merge_map::Input_merge_entry,_std::allocator<gold::Object_merge_map::Input_merge_entry>_>\n                          ._M_impl._M_finish - (long)pIVar14 >> 3) * -0x5555555555555555;\n        }\n        pIVar3->sorted = true;\n        pIVar15 = pIVar14;\n      }\n      for (; 0 < (long)uVar12; uVar12 = (uVar12 - uVar13) - 1) {\n        while( true ) {\n          uVar13 = (long)uVar12 >> 1;\n          if (pIVar14[uVar13].input_offset <= input_offset) break;\n          uVar12 = uVar13;\n          if (uVar13 == 0) goto LAB_0031c4f3;\n        }\n        pIVar14 = pIVar14 + uVar13 + 1;\n      }\nLAB_0031c4f3:\n      if (pIVar14 != pIVar15) {\n        if (input_offset < pIVar14[-1].input_offset) {\n                    /* WARNING: Subroutine does not return */\n          do_gold_unreachable("../../gold/merge.cc",0xa1,"get_output_offset");\n        }\n        if (input_offset - pIVar14[-1].input_offset < (long)pIVar14[-1].length) {\n          lVar5 = pIVar14[-1].output_offset;\n          *output_offset = lVar5;\n          if (lVar5 != -1) {\n            *output_offset = (input_offset - pIVar14[-1].input_offset) + lVar5;\n            return true;\n          }\n          return true;\n        }\n      }\n    }\n  }" if (parenthesized_expression "(ppVar2 != ppVar11)" ( (binary_expression "ppVar2 != ppVar11" identifier != identifier) )) (compound_statement "{\n    uVar1 = ppVar11->first;\n    while (uVar1 != shndx) {\n      ppVar11 = ppVar11 + 1;\n      if (ppVar2 == ppVar11) {\n        return false;\n      }\n      uVar1 = ppVar11->first;\n    }\n    pIVar3 = ppVar11->second;\n    if (pIVar3 != (Input_merge_map *)0x0) {\n      pIVar4 = (pIVar3->entries).\n               super__Vector_base<gold::Object_merge_map::Input_merge_entry,_std::allocator<gold::Object_merge_map::Input_merge_entry>_>\n               ._M_impl._M_finish;\n      pIVar14 = (pIVar3->entries).\n                super__Vector_base<gold::Object_merge_map::Input_merge_entry,_std::allocator<gold::Object_merge_map::Input_merge_entry>_>\n                ._M_impl._M_start;\n      uVar12 = ((long)pIVar4 - (long)pIVar14 >> 3) * -0x5555555555555555;\n      pIVar15 = pIVar14;\n      if (pIVar3->sorted == false) {\n        if (pIVar14 != pIVar4) {\n          lVar5 = 0x3f;\n          if (uVar12 != 0) {\n            for (; uVar12 >> lVar5 == 0; lVar5 = lVar5 + -1) {\n            }\n          }\n          std::\n          __introsort_loop<__gnu_cxx::__normal_iterator<gold::Object_merge_map::Input_merge_entry*,_std::vector<gold::Object_merge_map::Input_merge_entry>_>,_long_int,___gnu_cxx::__ops::_Iter_comp_iter<gold::Object_merge_map::Input_merge_compare>_>\n                    (pIVar14,pIVar4,(0x3f - (long)(int)((uint)lVar5 ^ 0x3f)) * 2);\n          if ((long)pIVar4 - (long)pIVar14 < 0x181) {\n            std::\n            __insertion_sort<__gnu_cxx::__normal_iterator<gold::Object_merge_map::Input_merge_entry*,_std::vector<gold::Object_merge_map::Input_merge_entry>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Object_merge_map::Input_merge_compare>_>\n                      (pIVar14,pIVar4);\n          }\n          else {\n            pIVar15 = pIVar14 + 0x10;\n            std::\n            __insertion_sort<__gnu_cxx::__normal_iterator<gold::Object_merge_map::Input_merge_entry*,_std::vector<gold::Object_merge_map::Input_merge_entry>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Object_merge_map::Input_merge_compare>_>\n                      (pIVar14,pIVar15);\n            for (; pIVar15 != pIVar4; pIVar15 = pIVar15 + 1) {\n              lVar5 = pIVar15->input_offset;\n              sVar6 = pIVar15->length;\n              sVar7 = pIVar15->output_offset;\n              lVar8 = pIVar15[-1].input_offset;\n              pIVar14 = pIVar15;\n              while (lVar5 < lVar8) {\n                sVar9 = pIVar14[-1].input_offset;\n                sVar10 = pIVar14[-1].length;\n                pIVar14->output_offset = pIVar14[-1].output_offset;\n                pIVar14->input_offset = sVar9;\n                pIVar14->length = sVar10;\n                lVar8 = pIVar14[-2].input_offset;\n                pIVar14 = pIVar14 + -1;\n              }\n              pIVar14->input_offset = lVar5;\n              pIVar14->length = sVar6;\n              pIVar14->output_offset = sVar7;\n            }\n          }\n          pIVar14 = (pIVar3->entries).\n                    super__Vector_base<gold::Object_merge_map::Input_merge_entry,_std::allocator<gold::Object_merge_map::Input_merge_entry>_>\n                    ._M_impl._M_start;\n          uVar12 = ((long)(pIVar3->entries).\n                          super__Vector_base<gold::Object_merge_map::Input_merge_entry,_std::allocator<gold::Object_merge_map::Input_merge_entry>_>\n                          ._M_impl._M_finish - (long)pIVar14 >> 3) * -0x5555555555555555;\n        }\n        pIVar3->sorted = true;\n        pIVar15 = pIVar14;\n      }\n      for (; 0 < (long)uVar12; uVar12 = (uVar12 - uVar13) - 1) {\n        while( true ) {\n          uVar13 = (long)uVar12 >> 1;\n          if (pIVar14[uVar13].input_offset <= input_offset) break;\n          uVar12 = uVar13;\n          if (uVar13 == 0) goto LAB_0031c4f3;\n        }\n        pIVar14 = pIVar14 + uVar13 + 1;\n      }\nLAB_0031c4f3:\n      if (pIVar14 != pIVar15) {\n        if (input_offset < pIVar14[-1].input_offset) {\n                    /* WARNING: Subroutine does not return */\n          do_gold_unreachable("../../gold/merge.cc",0xa1,"get_output_offset");\n        }\n        if (input_offset - pIVar14[-1].input_offset < (long)pIVar14[-1].length) {\n          lVar5 = pIVar14[-1].output_offset;\n          *output_offset = lVar5;\n          if (lVar5 != -1) {\n            *output_offset = (input_offset - pIVar14[-1].input_offset) + lVar5;\n            return true;\n          }\n          return true;\n        }\n      }\n    }\n  }" { (expression_statement "uVar1 = ppVar11->first;" (assignment_expression "uVar1 = ppVar11->first" identifier = (field_expression "ppVar11->first" identifier -> field_identifier)) ;) (while_statement "while (uVar1 != shndx) {\n      ppVar11 = ppVar11 + 1;\n      if (ppVar2 == ppVar11) {\n        return false;\n      }\n      uVar1 = ppVar11->first;\n    }" while (parenthesized_expression "(uVar1 != shndx)" ( (binary_expression "uVar1 != shndx" identifier != identifier) )) (compound_statement "{\n      ppVar11 = ppVar11 + 1;\n      if (ppVar2 == ppVar11) {\n        return false;\n      }\n      uVar1 = ppVar11->first;\n    }" { (expression_statement "ppVar11 = ppVar11 + 1;" (assignment_expression "ppVar11 = ppVar11 + 1" identifier = (binary_expression "ppVar11 + 1" identifier + number_literal)) ;) (if_statement "if (ppVar2 == ppVar11) {\n        return false;\n      }" if (parenthesized_expression "(ppVar2 == ppVar11)" ( (binary_expression "ppVar2 == ppVar11" identifier == identifier) )) (compound_statement "{\n        return false;\n      }" { (return_statement "return false;" return false ;) })) (expression_statement "uVar1 = ppVar11->first;" (assignment_expression "uVar1 = ppVar11->first" identifier = (field_expression "ppVar11->first" identifier -> field_identifier)) ;) })) (expression_statement "pIVar3 = ppVar11->second;" (assignment_expression "pIVar3 = ppVar11->second" identifier = (field_expression "ppVar11->second" identifier -> field_identifier)) ;) (if_statement "if (pIVar3 != (Input_merge_map *)0x0) {\n      pIVar4 = (pIVar3->entries).\n               super__Vector_base<gold::Object_merge_map::Input_merge_entry,_std::allocator<gold::Object_merge_map::Input_merge_entry>_>\n               ._M_impl._M_finish;\n      pIVar14 = (pIVar3->entries).\n                super__Vector_base<gold::Object_merge_map::Input_merge_entry,_std::allocator<gold::Object_merge_map::Input_merge_entry>_>\n                ._M_impl._M_start;\n      uVar12 = ((long)pIVar4 - (long)pIVar14 >> 3) * -0x5555555555555555;\n      pIVar15 = pIVar14;\n      if (pIVar3->sorted == false) {\n        if (pIVar14 != pIVar4) {\n          lVar5 = 0x3f;\n          if (uVar12 != 0) {\n            for (; uVar12 >> lVar5 == 0; lVar5 = lVar5 + -1) {\n            }\n          }\n          std::\n          __introsort_loop<__gnu_cxx::__normal_iterator<gold::Object_merge_map::Input_merge_entry*,_std::vector<gold::Object_merge_map::Input_merge_entry>_>,_long_int,___gnu_cxx::__ops::_Iter_comp_iter<gold::Object_merge_map::Input_merge_compare>_>\n                    (pIVar14,pIVar4,(0x3f - (long)(int)((uint)lVar5 ^ 0x3f)) * 2);\n          if ((long)pIVar4 - (long)pIVar14 < 0x181) {\n            std::\n            __insertion_sort<__gnu_cxx::__normal_iterator<gold::Object_merge_map::Input_merge_entry*,_std::vector<gold::Object_merge_map::Input_merge_entry>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Object_merge_map::Input_merge_compare>_>\n                      (pIVar14,pIVar4);\n          }\n          else {\n            pIVar15 = pIVar14 + 0x10;\n            std::\n            __insertion_sort<__gnu_cxx::__normal_iterator<gold::Object_merge_map::Input_merge_entry*,_std::vector<gold::Object_merge_map::Input_merge_entry>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Object_merge_map::Input_merge_compare>_>\n                      (pIVar14,pIVar15);\n            for (; pIVar15 != pIVar4; pIVar15 = pIVar15 + 1) {\n              lVar5 = pIVar15->input_offset;\n              sVar6 = pIVar15->length;\n              sVar7 = pIVar15->output_offset;\n              lVar8 = pIVar15[-1].input_offset;\n              pIVar14 = pIVar15;\n              while (lVar5 < lVar8) {\n                sVar9 = pIVar14[-1].input_offset;\n                sVar10 = pIVar14[-1].length;\n                pIVar14->output_offset = pIVar14[-1].output_offset;\n                pIVar14->input_offset = sVar9;\n                pIVar14->length = sVar10;\n                lVar8 = pIVar14[-2].input_offset;\n                pIVar14 = pIVar14 + -1;\n              }\n              pIVar14->input_offset = lVar5;\n              pIVar14->length = sVar6;\n              pIVar14->output_offset = sVar7;\n            }\n          }\n          pIVar14 = (pIVar3->entries).\n                    super__Vector_base<gold::Object_merge_map::Input_merge_entry,_std::allocator<gold::Object_merge_map::Input_merge_entry>_>\n                    ._M_impl._M_start;\n          uVar12 = ((long)(pIVar3->entries).\n                          super__Vector_base<gold::Object_merge_map::Input_merge_entry,_std::allocator<gold::Object_merge_map::Input_merge_entry>_>\n                          ._M_impl._M_finish - (long)pIVar14 >> 3) * -0x5555555555555555;\n        }\n        pIVar3->sorted = true;\n        pIVar15 = pIVar14;\n      }\n      for (; 0 < (long)uVar12; uVar12 = (uVar12 - uVar13) - 1) {\n        while( true ) {\n          uVar13 = (long)uVar12 >> 1;\n          if (pIVar14[uVar13].input_offset <= input_offset) break;\n          uVar12 = uVar13;\n          if (uVar13 == 0) goto LAB_0031c4f3;\n        }\n        pIVar14 = pIVar14 + uVar13 + 1;\n      }\nLAB_0031c4f3:\n      if (pIVar14 != pIVar15) {\n        if (input_offset < pIVar14[-1].input_offset) {\n                    /* WARNING: Subroutine does not return */\n          do_gold_unreachable("../../gold/merge.cc",0xa1,"get_output_offset");\n        }\n        if (input_offset - pIVar14[-1].input_offset < (long)pIVar14[-1].length) {\n          lVar5 = pIVar14[-1].output_offset;\n          *output_offset = lVar5;\n          if (lVar5 != -1) {\n            *output_offset = (input_offset - pIVar14[-1].input_offset) + lVar5;\n            return true;\n          }\n          return true;\n        }\n      }\n    }" if (parenthesized_expression "(pIVar3 != (Input_merge_map *)0x0)" ( (binary_expression "pIVar3 != (Input_merge_map *)0x0" identifier != (cast_expression "(Input_merge_map *)0x0" ( (type_descriptor "Input_merge_map *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      pIVar4 = (pIVar3->entries).\n               super__Vector_base<gold::Object_merge_map::Input_merge_entry,_std::allocator<gold::Object_merge_map::Input_merge_entry>_>\n               ._M_impl._M_finish;\n      pIVar14 = (pIVar3->entries).\n                super__Vector_base<gold::Object_merge_map::Input_merge_entry,_std::allocator<gold::Object_merge_map::Input_merge_entry>_>\n                ._M_impl._M_start;\n      uVar12 = ((long)pIVar4 - (long)pIVar14 >> 3) * -0x5555555555555555;\n      pIVar15 = pIVar14;\n      if (pIVar3->sorted == false) {\n        if (pIVar14 != pIVar4) {\n          lVar5 = 0x3f;\n          if (uVar12 != 0) {\n            for (; uVar12 >> lVar5 == 0; lVar5 = lVar5 + -1) {\n            }\n          }\n          std::\n          __introsort_loop<__gnu_cxx::__normal_iterator<gold::Object_merge_map::Input_merge_entry*,_std::vector<gold::Object_merge_map::Input_merge_entry>_>,_long_int,___gnu_cxx::__ops::_Iter_comp_iter<gold::Object_merge_map::Input_merge_compare>_>\n                    (pIVar14,pIVar4,(0x3f - (long)(int)((uint)lVar5 ^ 0x3f)) * 2);\n          if ((long)pIVar4 - (long)pIVar14 < 0x181) {\n            std::\n            __insertion_sort<__gnu_cxx::__normal_iterator<gold::Object_merge_map::Input_merge_entry*,_std::vector<gold::Object_merge_map::Input_merge_entry>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Object_merge_map::Input_merge_compare>_>\n                      (pIVar14,pIVar4);\n          }\n          else {\n            pIVar15 = pIVar14 + 0x10;\n            std::\n            __insertion_sort<__gnu_cxx::__normal_iterator<gold::Object_merge_map::Input_merge_entry*,_std::vector<gold::Object_merge_map::Input_merge_entry>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Object_merge_map::Input_merge_compare>_>\n                      (pIVar14,pIVar15);\n            for (; pIVar15 != pIVar4; pIVar15 = pIVar15 + 1) {\n              lVar5 = pIVar15->input_offset;\n              sVar6 = pIVar15->length;\n              sVar7 = pIVar15->output_offset;\n              lVar8 = pIVar15[-1].input_offset;\n              pIVar14 = pIVar15;\n              while (lVar5 < lVar8) {\n                sVar9 = pIVar14[-1].input_offset;\n                sVar10 = pIVar14[-1].length;\n                pIVar14->output_offset = pIVar14[-1].output_offset;\n                pIVar14->input_offset = sVar9;\n                pIVar14->length = sVar10;\n                lVar8 = pIVar14[-2].input_offset;\n                pIVar14 = pIVar14 + -1;\n              }\n              pIVar14->input_offset = lVar5;\n              pIVar14->length = sVar6;\n              pIVar14->output_offset = sVar7;\n            }\n          }\n          pIVar14 = (pIVar3->entries).\n                    super__Vector_base<gold::Object_merge_map::Input_merge_entry,_std::allocator<gold::Object_merge_map::Input_merge_entry>_>\n                    ._M_impl._M_start;\n          uVar12 = ((long)(pIVar3->entries).\n                          super__Vector_base<gold::Object_merge_map::Input_merge_entry,_std::allocator<gold::Object_merge_map::Input_merge_entry>_>\n                          ._M_impl._M_finish - (long)pIVar14 >> 3) * -0x5555555555555555;\n        }\n        pIVar3->sorted = true;\n        pIVar15 = pIVar14;\n      }\n      for (; 0 < (long)uVar12; uVar12 = (uVar12 - uVar13) - 1) {\n        while( true ) {\n          uVar13 = (long)uVar12 >> 1;\n          if (pIVar14[uVar13].input_offset <= input_offset) break;\n          uVar12 = uVar13;\n          if (uVar13 == 0) goto LAB_0031c4f3;\n        }\n        pIVar14 = pIVar14 + uVar13 + 1;\n      }\nLAB_0031c4f3:\n      if (pIVar14 != pIVar15) {\n        if (input_offset < pIVar14[-1].input_offset) {\n                    /* WARNING: Subroutine does not return */\n          do_gold_unreachable("../../gold/merge.cc",0xa1,"get_output_offset");\n        }\n        if (input_offset - pIVar14[-1].input_offset < (long)pIVar14[-1].length) {\n          lVar5 = pIVar14[-1].output_offset;\n          *output_offset = lVar5;\n          if (lVar5 != -1) {\n            *output_offset = (input_offset - pIVar14[-1].input_offset) + lVar5;\n            return true;\n          }\n          return true;\n        }\n      }\n    }" { (ERROR "pIVar4 = (pIVar3->entries).\n               super__Vector_base<gold::" (assignment_expression "pIVar4 = (pIVar3->entries).\n               super__Vector_base<gold" identifier = (binary_expression "(pIVar3->entries).\n               super__Vector_base<gold" (field_expression "(pIVar3->entries).\n               super__Vector_base" (parenthesized_expression "(pIVar3->entries)" ( (field_expression "pIVar3->entries" identifier -> field_identifier) )) . field_identifier) < identifier)) : :) (labeled_statement "Object_merge_map::Input_merge_entry,_std::allocator<gold::Object_merge_map::Input_merge_entry>_>\n               ._M_impl._M_finish;" statement_identifier (ERROR "::Input_merge_entry,_std::allocator<gold:" : : (comma_expression "Input_merge_entry,_std" identifier , identifier) : : (binary_expression "allocator<gold" identifier < identifier) :) : (labeled_statement "Object_merge_map::Input_merge_entry>_>\n               ._M_impl._M_finish;" statement_identifier : (ERROR ":" :) (expression_statement "Input_merge_entry>_>\n               ._M_impl._M_finish;" (field_expression "Input_merge_entry>_>\n               ._M_impl._M_finish" (field_expression "Input_merge_entry>_>\n               ._M_impl" (binary_expression "Input_merge_entry>_" identifier > identifier) (ERROR ">" >) . field_identifier) . field_identifier) ;))) (ERROR "pIVar14 = (pIVar3->entries).\n                super__Vector_base<gold::" (assignment_expression "pIVar14 = (pIVar3->entries).\n                super__Vector_base<gold" identifier = (binary_expression "(pIVar3->entries).\n                super__Vector_base<gold" (field_expression "(pIVar3->entries).\n                super__Vector_base" (parenthesized_expression "(pIVar3->entries)" ( (field_expression "pIVar3->entries" identifier -> field_identifier) )) . field_identifier) < identifier)) : :) (labeled_statement "Object_merge_map::Input_merge_entry,_std::allocator<gold::Object_merge_map::Input_merge_entry>_>\n                ._M_impl._M_start;" statement_identifier (ERROR "::Input_merge_entry,_std::allocator<gold:" : : (comma_expression "Input_merge_entry,_std" identifier , identifier) : : (binary_expression "allocator<gold" identifier < identifier) :) : (labeled_statement "Object_merge_map::Input_merge_entry>_>\n                ._M_impl._M_start;" statement_identifier : (ERROR ":" :) (expression_statement "Input_merge_entry>_>\n                ._M_impl._M_start;" (field_expression "Input_merge_entry>_>\n                ._M_impl._M_start" (field_expression "Input_merge_entry>_>\n                ._M_impl" (binary_expression "Input_merge_entry>_" identifier > identifier) (ERROR ">" >) . field_identifier) . field_identifier) ;))) (expression_statement "uVar12 = ((long)pIVar4 - (long)pIVar14 >> 3) * -0x5555555555555555;" (assignment_expression "uVar12 = ((long)pIVar4 - (long)pIVar14 >> 3) * -0x5555555555555555" identifier = (binary_expression "((long)pIVar4 - (long)pIVar14 >> 3) * -0x5555555555555555" (parenthesized_expression "((long)pIVar4 - (long)pIVar14 >> 3)" ( (binary_expression "(long)pIVar4 - (long)pIVar14 >> 3" (binary_expression "(long)pIVar4 - (long)pIVar14" (cast_expression "(long)pIVar4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)pIVar14" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) >> number_literal) )) * number_literal)) ;) (expression_statement "pIVar15 = pIVar14;" (assignment_expression "pIVar15 = pIVar14" identifier = identifier) ;) (if_statement "if (pIVar3->sorted == false) {\n        if (pIVar14 != pIVar4) {\n          lVar5 = 0x3f;\n          if (uVar12 != 0) {\n            for (; uVar12 >> lVar5 == 0; lVar5 = lVar5 + -1) {\n            }\n          }\n          std::\n          __introsort_loop<__gnu_cxx::__normal_iterator<gold::Object_merge_map::Input_merge_entry*,_std::vector<gold::Object_merge_map::Input_merge_entry>_>,_long_int,___gnu_cxx::__ops::_Iter_comp_iter<gold::Object_merge_map::Input_merge_compare>_>\n                    (pIVar14,pIVar4,(0x3f - (long)(int)((uint)lVar5 ^ 0x3f)) * 2);\n          if ((long)pIVar4 - (long)pIVar14 < 0x181) {\n            std::\n            __insertion_sort<__gnu_cxx::__normal_iterator<gold::Object_merge_map::Input_merge_entry*,_std::vector<gold::Object_merge_map::Input_merge_entry>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Object_merge_map::Input_merge_compare>_>\n                      (pIVar14,pIVar4);\n          }\n          else {\n            pIVar15 = pIVar14 + 0x10;\n            std::\n            __insertion_sort<__gnu_cxx::__normal_iterator<gold::Object_merge_map::Input_merge_entry*,_std::vector<gold::Object_merge_map::Input_merge_entry>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Object_merge_map::Input_merge_compare>_>\n                      (pIVar14,pIVar15);\n            for (; pIVar15 != pIVar4; pIVar15 = pIVar15 + 1) {\n              lVar5 = pIVar15->input_offset;\n              sVar6 = pIVar15->length;\n              sVar7 = pIVar15->output_offset;\n              lVar8 = pIVar15[-1].input_offset;\n              pIVar14 = pIVar15;\n              while (lVar5 < lVar8) {\n                sVar9 = pIVar14[-1].input_offset;\n                sVar10 = pIVar14[-1].length;\n                pIVar14->output_offset = pIVar14[-1].output_offset;\n                pIVar14->input_offset = sVar9;\n                pIVar14->length = sVar10;\n                lVar8 = pIVar14[-2].input_offset;\n                pIVar14 = pIVar14 + -1;\n              }\n              pIVar14->input_offset = lVar5;\n              pIVar14->length = sVar6;\n              pIVar14->output_offset = sVar7;\n            }\n          }\n          pIVar14 = (pIVar3->entries).\n                    super__Vector_base<gold::Object_merge_map::Input_merge_entry,_std::allocator<gold::Object_merge_map::Input_merge_entry>_>\n                    ._M_impl._M_start;\n          uVar12 = ((long)(pIVar3->entries).\n                          super__Vector_base<gold::Object_merge_map::Input_merge_entry,_std::allocator<gold::Object_merge_map::Input_merge_entry>_>\n                          ._M_impl._M_finish - (long)pIVar14 >> 3) * -0x5555555555555555;\n        }\n        pIVar3->sorted = true;\n        pIVar15 = pIVar14;\n      }" if (parenthesized_expression "(pIVar3->sorted == false)" ( (binary_expression "pIVar3->sorted == false" (field_expression "pIVar3->sorted" identifier -> field_identifier) == false) )) (compound_statement "{\n        if (pIVar14 != pIVar4) {\n          lVar5 = 0x3f;\n          if (uVar12 != 0) {\n            for (; uVar12 >> lVar5 == 0; lVar5 = lVar5 + -1) {\n            }\n          }\n          std::\n          __introsort_loop<__gnu_cxx::__normal_iterator<gold::Object_merge_map::Input_merge_entry*,_std::vector<gold::Object_merge_map::Input_merge_entry>_>,_long_int,___gnu_cxx::__ops::_Iter_comp_iter<gold::Object_merge_map::Input_merge_compare>_>\n                    (pIVar14,pIVar4,(0x3f - (long)(int)((uint)lVar5 ^ 0x3f)) * 2);\n          if ((long)pIVar4 - (long)pIVar14 < 0x181) {\n            std::\n            __insertion_sort<__gnu_cxx::__normal_iterator<gold::Object_merge_map::Input_merge_entry*,_std::vector<gold::Object_merge_map::Input_merge_entry>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Object_merge_map::Input_merge_compare>_>\n                      (pIVar14,pIVar4);\n          }\n          else {\n            pIVar15 = pIVar14 + 0x10;\n            std::\n            __insertion_sort<__gnu_cxx::__normal_iterator<gold::Object_merge_map::Input_merge_entry*,_std::vector<gold::Object_merge_map::Input_merge_entry>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Object_merge_map::Input_merge_compare>_>\n                      (pIVar14,pIVar15);\n            for (; pIVar15 != pIVar4; pIVar15 = pIVar15 + 1) {\n              lVar5 = pIVar15->input_offset;\n              sVar6 = pIVar15->length;\n              sVar7 = pIVar15->output_offset;\n              lVar8 = pIVar15[-1].input_offset;\n              pIVar14 = pIVar15;\n              while (lVar5 < lVar8) {\n                sVar9 = pIVar14[-1].input_offset;\n                sVar10 = pIVar14[-1].length;\n                pIVar14->output_offset = pIVar14[-1].output_offset;\n                pIVar14->input_offset = sVar9;\n                pIVar14->length = sVar10;\n                lVar8 = pIVar14[-2].input_offset;\n                pIVar14 = pIVar14 + -1;\n              }\n              pIVar14->input_offset = lVar5;\n              pIVar14->length = sVar6;\n              pIVar14->output_offset = sVar7;\n            }\n          }\n          pIVar14 = (pIVar3->entries).\n                    super__Vector_base<gold::Object_merge_map::Input_merge_entry,_std::allocator<gold::Object_merge_map::Input_merge_entry>_>\n                    ._M_impl._M_start;\n          uVar12 = ((long)(pIVar3->entries).\n                          super__Vector_base<gold::Object_merge_map::Input_merge_entry,_std::allocator<gold::Object_merge_map::Input_merge_entry>_>\n                          ._M_impl._M_finish - (long)pIVar14 >> 3) * -0x5555555555555555;\n        }\n        pIVar3->sorted = true;\n        pIVar15 = pIVar14;\n      }" { (if_statement "if (pIVar14 != pIVar4) {\n          lVar5 = 0x3f;\n          if (uVar12 != 0) {\n            for (; uVar12 >> lVar5 == 0; lVar5 = lVar5 + -1) {\n            }\n          }\n          std::\n          __introsort_loop<__gnu_cxx::__normal_iterator<gold::Object_merge_map::Input_merge_entry*,_std::vector<gold::Object_merge_map::Input_merge_entry>_>,_long_int,___gnu_cxx::__ops::_Iter_comp_iter<gold::Object_merge_map::Input_merge_compare>_>\n                    (pIVar14,pIVar4,(0x3f - (long)(int)((uint)lVar5 ^ 0x3f)) * 2);\n          if ((long)pIVar4 - (long)pIVar14 < 0x181) {\n            std::\n            __insertion_sort<__gnu_cxx::__normal_iterator<gold::Object_merge_map::Input_merge_entry*,_std::vector<gold::Object_merge_map::Input_merge_entry>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Object_merge_map::Input_merge_compare>_>\n                      (pIVar14,pIVar4);\n          }\n          else {\n            pIVar15 = pIVar14 + 0x10;\n            std::\n            __insertion_sort<__gnu_cxx::__normal_iterator<gold::Object_merge_map::Input_merge_entry*,_std::vector<gold::Object_merge_map::Input_merge_entry>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Object_merge_map::Input_merge_compare>_>\n                      (pIVar14,pIVar15);\n            for (; pIVar15 != pIVar4; pIVar15 = pIVar15 + 1) {\n              lVar5 = pIVar15->input_offset;\n              sVar6 = pIVar15->length;\n              sVar7 = pIVar15->output_offset;\n              lVar8 = pIVar15[-1].input_offset;\n              pIVar14 = pIVar15;\n              while (lVar5 < lVar8) {\n                sVar9 = pIVar14[-1].input_offset;\n                sVar10 = pIVar14[-1].length;\n                pIVar14->output_offset = pIVar14[-1].output_offset;\n                pIVar14->input_offset = sVar9;\n                pIVar14->length = sVar10;\n                lVar8 = pIVar14[-2].input_offset;\n                pIVar14 = pIVar14 + -1;\n              }\n              pIVar14->input_offset = lVar5;\n              pIVar14->length = sVar6;\n              pIVar14->output_offset = sVar7;\n            }\n          }\n          pIVar14 = (pIVar3->entries).\n                    super__Vector_base<gold::Object_merge_map::Input_merge_entry,_std::allocator<gold::Object_merge_map::Input_merge_entry>_>\n                    ._M_impl._M_start;\n          uVar12 = ((long)(pIVar3->entries).\n                          super__Vector_base<gold::Object_merge_map::Input_merge_entry,_std::allocator<gold::Object_merge_map::Input_merge_entry>_>\n                          ._M_impl._M_finish - (long)pIVar14 >> 3) * -0x5555555555555555;\n        }" if (parenthesized_expression "(pIVar14 != pIVar4)" ( (binary_expression "pIVar14 != pIVar4" identifier != identifier) )) (compound_statement "{\n          lVar5 = 0x3f;\n          if (uVar12 != 0) {\n            for (; uVar12 >> lVar5 == 0; lVar5 = lVar5 + -1) {\n            }\n          }\n          std::\n          __introsort_loop<__gnu_cxx::__normal_iterator<gold::Object_merge_map::Input_merge_entry*,_std::vector<gold::Object_merge_map::Input_merge_entry>_>,_long_int,___gnu_cxx::__ops::_Iter_comp_iter<gold::Object_merge_map::Input_merge_compare>_>\n                    (pIVar14,pIVar4,(0x3f - (long)(int)((uint)lVar5 ^ 0x3f)) * 2);\n          if ((long)pIVar4 - (long)pIVar14 < 0x181) {\n            std::\n            __insertion_sort<__gnu_cxx::__normal_iterator<gold::Object_merge_map::Input_merge_entry*,_std::vector<gold::Object_merge_map::Input_merge_entry>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Object_merge_map::Input_merge_compare>_>\n                      (pIVar14,pIVar4);\n          }\n          else {\n            pIVar15 = pIVar14 + 0x10;\n            std::\n            __insertion_sort<__gnu_cxx::__normal_iterator<gold::Object_merge_map::Input_merge_entry*,_std::vector<gold::Object_merge_map::Input_merge_entry>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Object_merge_map::Input_merge_compare>_>\n                      (pIVar14,pIVar15);\n            for (; pIVar15 != pIVar4; pIVar15 = pIVar15 + 1) {\n              lVar5 = pIVar15->input_offset;\n              sVar6 = pIVar15->length;\n              sVar7 = pIVar15->output_offset;\n              lVar8 = pIVar15[-1].input_offset;\n              pIVar14 = pIVar15;\n              while (lVar5 < lVar8) {\n                sVar9 = pIVar14[-1].input_offset;\n                sVar10 = pIVar14[-1].length;\n                pIVar14->output_offset = pIVar14[-1].output_offset;\n                pIVar14->input_offset = sVar9;\n                pIVar14->length = sVar10;\n                lVar8 = pIVar14[-2].input_offset;\n                pIVar14 = pIVar14 + -1;\n              }\n              pIVar14->input_offset = lVar5;\n              pIVar14->length = sVar6;\n              pIVar14->output_offset = sVar7;\n            }\n          }\n          pIVar14 = (pIVar3->entries).\n                    super__Vector_base<gold::Object_merge_map::Input_merge_entry,_std::allocator<gold::Object_merge_map::Input_merge_entry>_>\n                    ._M_impl._M_start;\n          uVar12 = ((long)(pIVar3->entries).\n                          super__Vector_base<gold::Object_merge_map::Input_merge_entry,_std::allocator<gold::Object_merge_map::Input_merge_entry>_>\n                          ._M_impl._M_finish - (long)pIVar14 >> 3) * -0x5555555555555555;\n        }" { (expression_statement "lVar5 = 0x3f;" (assignment_expression "lVar5 = 0x3f" identifier = number_literal) ;) (if_statement "if (uVar12 != 0) {\n            for (; uVar12 >> lVar5 == 0; lVar5 = lVar5 + -1) {\n            }\n          }" if (parenthesized_expression "(uVar12 != 0)" ( (binary_expression "uVar12 != 0" identifier != number_literal) )) (compound_statement "{\n            for (; uVar12 >> lVar5 == 0; lVar5 = lVar5 + -1) {\n            }\n          }" { (for_statement "for (; uVar12 >> lVar5 == 0; lVar5 = lVar5 + -1) {\n            }" for ( ; (binary_expression "uVar12 >> lVar5 == 0" (binary_expression "uVar12 >> lVar5" identifier >> identifier) == number_literal) ; (assignment_expression "lVar5 = lVar5 + -1" identifier = (binary_expression "lVar5 + -1" identifier + number_literal)) ) (compound_statement "{\n            }" { })) })) (labeled_statement "std::\n          __introsort_loop<__gnu_cxx::__normal_iterator<gold::Object_merge_map::Input_merge_entry*,_std::vector<gold::Object_merge_map::Input_merge_entry>_>,_long_int,___gnu_cxx::__ops::_Iter_comp_iter<gold::Object_merge_map::Input_merge_compare>_>\n                    (pIVar14,pIVar4,(0x3f - (long)(int)((uint)lVar5 ^ 0x3f)) * 2);" statement_identifier (ERROR "::\n          __introsort_loop<__gnu_cxx::__normal_iterator<gold::Object_merge_map::Input_merge_entry*,_std::vector<gold::Object_merge_map::Input_merge_entry>_>,_long_int,___gnu_cxx:" : : (binary_expression "__introsort_loop<__gnu_cxx" identifier < identifier) : : (binary_expression "__normal_iterator<gold" identifier < identifier) : : (comma_expression "Object_merge_map::Input_merge_entry*,_std" identifier (ERROR "::Input_merge_entry*" : : identifier *) , identifier) : : (binary_expression "vector<gold" identifier < identifier) : : (comma_expression "Object_merge_map::Input_merge_entry>_>,_long_int,___gnu_cxx" identifier (ERROR "::Input_merge_entry>_>" : : (binary_expression "Input_merge_entry>_" identifier > identifier) >) , (comma_expression "_long_int,___gnu_cxx" identifier , identifier)) :) : (labeled_statement "__ops::_Iter_comp_iter<gold::Object_merge_map::Input_merge_compare>_>\n                    (pIVar14,pIVar4,(0x3f - (long)(int)((uint)lVar5 ^ 0x3f)) * 2);" statement_identifier (ERROR "::_Iter_comp_iter<gold:" : : (binary_expression "_Iter_comp_iter<gold" identifier < identifier) :) : (labeled_statement "Object_merge_map::Input_merge_compare>_>\n                    (pIVar14,pIVar4,(0x3f - (long)(int)((uint)lVar5 ^ 0x3f)) * 2);" statement_identifier : (ERROR ":" :) (expression_statement "Input_merge_compare>_>\n                    (pIVar14,pIVar4,(0x3f - (long)(int)((uint)lVar5 ^ 0x3f)) * 2);" (binary_expression "Input_merge_compare>_>\n                    (pIVar14,pIVar4,(0x3f - (long)(int)((uint)lVar5 ^ 0x3f)) * 2)" (binary_expression "Input_merge_compare>_" identifier > identifier) > (parenthesized_expression "(pIVar14,pIVar4,(0x3f - (long)(int)((uint)lVar5 ^ 0x3f)) * 2)" ( (comma_expression "pIVar14,pIVar4,(0x3f - (long)(int)((uint)lVar5 ^ 0x3f)) * 2" identifier , (comma_expression "pIVar4,(0x3f - (long)(int)((uint)lVar5 ^ 0x3f)) * 2" identifier , (binary_expression "(0x3f - (long)(int)((uint)lVar5 ^ 0x3f)) * 2" (parenthesized_expression "(0x3f - (long)(int)((uint)lVar5 ^ 0x3f))" ( (binary_expression "0x3f - (long)(int)((uint)lVar5 ^ 0x3f)" number_literal - (cast_expression "(long)(int)((uint)lVar5 ^ 0x3f)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (cast_expression "(int)((uint)lVar5 ^ 0x3f)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((uint)lVar5 ^ 0x3f)" ( (binary_expression "(uint)lVar5 ^ 0x3f" (cast_expression "(uint)lVar5" ( (type_descriptor "uint" type_identifier) ) identifier) ^ number_literal) ))))) )) * number_literal))) ))) ;)))) (if_statement "if ((long)pIVar4 - (long)pIVar14 < 0x181) {\n            std::\n            __insertion_sort<__gnu_cxx::__normal_iterator<gold::Object_merge_map::Input_merge_entry*,_std::vector<gold::Object_merge_map::Input_merge_entry>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Object_merge_map::Input_merge_compare>_>\n                      (pIVar14,pIVar4);\n          }\n          else {\n            pIVar15 = pIVar14 + 0x10;\n            std::\n            __insertion_sort<__gnu_cxx::__normal_iterator<gold::Object_merge_map::Input_merge_entry*,_std::vector<gold::Object_merge_map::Input_merge_entry>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Object_merge_map::Input_merge_compare>_>\n                      (pIVar14,pIVar15);\n            for (; pIVar15 != pIVar4; pIVar15 = pIVar15 + 1) {\n              lVar5 = pIVar15->input_offset;\n              sVar6 = pIVar15->length;\n              sVar7 = pIVar15->output_offset;\n              lVar8 = pIVar15[-1].input_offset;\n              pIVar14 = pIVar15;\n              while (lVar5 < lVar8) {\n                sVar9 = pIVar14[-1].input_offset;\n                sVar10 = pIVar14[-1].length;\n                pIVar14->output_offset = pIVar14[-1].output_offset;\n                pIVar14->input_offset = sVar9;\n                pIVar14->length = sVar10;\n                lVar8 = pIVar14[-2].input_offset;\n                pIVar14 = pIVar14 + -1;\n              }\n              pIVar14->input_offset = lVar5;\n              pIVar14->length = sVar6;\n              pIVar14->output_offset = sVar7;\n            }\n          }" if (parenthesized_expression "((long)pIVar4 - (long)pIVar14 < 0x181)" ( (binary_expression "(long)pIVar4 - (long)pIVar14 < 0x181" (binary_expression "(long)pIVar4 - (long)pIVar14" (cast_expression "(long)pIVar4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)pIVar14" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) < number_literal) )) (compound_statement "{\n            std::\n            __insertion_sort<__gnu_cxx::__normal_iterator<gold::Object_merge_map::Input_merge_entry*,_std::vector<gold::Object_merge_map::Input_merge_entry>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Object_merge_map::Input_merge_compare>_>\n                      (pIVar14,pIVar4);\n          }" { (labeled_statement "std::\n            __insertion_sort<__gnu_cxx::__normal_iterator<gold::Object_merge_map::Input_merge_entry*,_std::vector<gold::Object_merge_map::Input_merge_entry>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Object_merge_map::Input_merge_compare>_>\n                      (pIVar14,pIVar4);" statement_identifier (ERROR "::\n            __insertion_sort<__gnu_cxx::__normal_iterator<gold::Object_merge_map::Input_merge_entry*,_std::vector<gold::Object_merge_map::Input_merge_entry>_>,___gnu_cxx:" : : (binary_expression "__insertion_sort<__gnu_cxx" identifier < identifier) : : (binary_expression "__normal_iterator<gold" identifier < identifier) : : (comma_expression "Object_merge_map::Input_merge_entry*,_std" identifier (ERROR "::Input_merge_entry*" : : identifier *) , identifier) : : (binary_expression "vector<gold" identifier < identifier) : : (comma_expression "Object_merge_map::Input_merge_entry>_>,___gnu_cxx" identifier (ERROR "::Input_merge_entry>_>" : : (binary_expression "Input_merge_entry>_" identifier > identifier) >) , identifier) :) : (labeled_statement "__ops::_Iter_comp_iter<gold::Object_merge_map::Input_merge_compare>_>\n                      (pIVar14,pIVar4);" statement_identifier (ERROR "::_Iter_comp_iter<gold:" : : (binary_expression "_Iter_comp_iter<gold" identifier < identifier) :) : (labeled_statement "Object_merge_map::Input_merge_compare>_>\n                      (pIVar14,pIVar4);" statement_identifier : (ERROR ":" :) (expression_statement "Input_merge_compare>_>\n                      (pIVar14,pIVar4);" (binary_expression "Input_merge_compare>_>\n                      (pIVar14,pIVar4)" (binary_expression "Input_merge_compare>_" identifier > identifier) > (parenthesized_expression "(pIVar14,pIVar4)" ( (comma_expression "pIVar14,pIVar4" identifier , identifier) ))) ;)))) }) (else_clause "else {\n            pIVar15 = pIVar14 + 0x10;\n            std::\n            __insertion_sort<__gnu_cxx::__normal_iterator<gold::Object_merge_map::Input_merge_entry*,_std::vector<gold::Object_merge_map::Input_merge_entry>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Object_merge_map::Input_merge_compare>_>\n                      (pIVar14,pIVar15);\n            for (; pIVar15 != pIVar4; pIVar15 = pIVar15 + 1) {\n              lVar5 = pIVar15->input_offset;\n              sVar6 = pIVar15->length;\n              sVar7 = pIVar15->output_offset;\n              lVar8 = pIVar15[-1].input_offset;\n              pIVar14 = pIVar15;\n              while (lVar5 < lVar8) {\n                sVar9 = pIVar14[-1].input_offset;\n                sVar10 = pIVar14[-1].length;\n                pIVar14->output_offset = pIVar14[-1].output_offset;\n                pIVar14->input_offset = sVar9;\n                pIVar14->length = sVar10;\n                lVar8 = pIVar14[-2].input_offset;\n                pIVar14 = pIVar14 + -1;\n              }\n              pIVar14->input_offset = lVar5;\n              pIVar14->length = sVar6;\n              pIVar14->output_offset = sVar7;\n            }\n          }" else (compound_statement "{\n            pIVar15 = pIVar14 + 0x10;\n            std::\n            __insertion_sort<__gnu_cxx::__normal_iterator<gold::Object_merge_map::Input_merge_entry*,_std::vector<gold::Object_merge_map::Input_merge_entry>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Object_merge_map::Input_merge_compare>_>\n                      (pIVar14,pIVar15);\n            for (; pIVar15 != pIVar4; pIVar15 = pIVar15 + 1) {\n              lVar5 = pIVar15->input_offset;\n              sVar6 = pIVar15->length;\n              sVar7 = pIVar15->output_offset;\n              lVar8 = pIVar15[-1].input_offset;\n              pIVar14 = pIVar15;\n              while (lVar5 < lVar8) {\n                sVar9 = pIVar14[-1].input_offset;\n                sVar10 = pIVar14[-1].length;\n                pIVar14->output_offset = pIVar14[-1].output_offset;\n                pIVar14->input_offset = sVar9;\n                pIVar14->length = sVar10;\n                lVar8 = pIVar14[-2].input_offset;\n                pIVar14 = pIVar14 + -1;\n              }\n              pIVar14->input_offset = lVar5;\n              pIVar14->length = sVar6;\n              pIVar14->output_offset = sVar7;\n            }\n          }" { (expression_statement "pIVar15 = pIVar14 + 0x10;" (assignment_expression "pIVar15 = pIVar14 + 0x10" identifier = (binary_expression "pIVar14 + 0x10" identifier + number_literal)) ;) (labeled_statement "std::\n            __insertion_sort<__gnu_cxx::__normal_iterator<gold::Object_merge_map::Input_merge_entry*,_std::vector<gold::Object_merge_map::Input_merge_entry>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Object_merge_map::Input_merge_compare>_>\n                      (pIVar14,pIVar15);" statement_identifier (ERROR "::\n            __insertion_sort<__gnu_cxx::__normal_iterator<gold::Object_merge_map::Input_merge_entry*,_std::vector<gold::Object_merge_map::Input_merge_entry>_>,___gnu_cxx:" : : (binary_expression "__insertion_sort<__gnu_cxx" identifier < identifier) : : (binary_expression "__normal_iterator<gold" identifier < identifier) : : (comma_expression "Object_merge_map::Input_merge_entry*,_std" identifier (ERROR "::Input_merge_entry*" : : identifier *) , identifier) : : (binary_expression "vector<gold" identifier < identifier) : : (comma_expression "Object_merge_map::Input_merge_entry>_>,___gnu_cxx" identifier (ERROR "::Input_merge_entry>_>" : : (binary_expression "Input_merge_entry>_" identifier > identifier) >) , identifier) :) : (labeled_statement "__ops::_Iter_comp_iter<gold::Object_merge_map::Input_merge_compare>_>\n                      (pIVar14,pIVar15);" statement_identifier (ERROR "::_Iter_comp_iter<gold:" : : (binary_expression "_Iter_comp_iter<gold" identifier < identifier) :) : (labeled_statement "Object_merge_map::Input_merge_compare>_>\n                      (pIVar14,pIVar15);" statement_identifier : (ERROR ":" :) (expression_statement "Input_merge_compare>_>\n                      (pIVar14,pIVar15);" (binary_expression "Input_merge_compare>_>\n                      (pIVar14,pIVar15)" (binary_expression "Input_merge_compare>_" identifier > identifier) > (parenthesized_expression "(pIVar14,pIVar15)" ( (comma_expression "pIVar14,pIVar15" identifier , identifier) ))) ;)))) (for_statement "for (; pIVar15 != pIVar4; pIVar15 = pIVar15 + 1) {\n              lVar5 = pIVar15->input_offset;\n              sVar6 = pIVar15->length;\n              sVar7 = pIVar15->output_offset;\n              lVar8 = pIVar15[-1].input_offset;\n              pIVar14 = pIVar15;\n              while (lVar5 < lVar8) {\n                sVar9 = pIVar14[-1].input_offset;\n                sVar10 = pIVar14[-1].length;\n                pIVar14->output_offset = pIVar14[-1].output_offset;\n                pIVar14->input_offset = sVar9;\n                pIVar14->length = sVar10;\n                lVar8 = pIVar14[-2].input_offset;\n                pIVar14 = pIVar14 + -1;\n              }\n              pIVar14->input_offset = lVar5;\n              pIVar14->length = sVar6;\n              pIVar14->output_offset = sVar7;\n            }" for ( ; (binary_expression "pIVar15 != pIVar4" identifier != identifier) ; (assignment_expression "pIVar15 = pIVar15 + 1" identifier = (binary_expression "pIVar15 + 1" identifier + number_literal)) ) (compound_statement "{\n              lVar5 = pIVar15->input_offset;\n              sVar6 = pIVar15->length;\n              sVar7 = pIVar15->output_offset;\n              lVar8 = pIVar15[-1].input_offset;\n              pIVar14 = pIVar15;\n              while (lVar5 < lVar8) {\n                sVar9 = pIVar14[-1].input_offset;\n                sVar10 = pIVar14[-1].length;\n                pIVar14->output_offset = pIVar14[-1].output_offset;\n                pIVar14->input_offset = sVar9;\n                pIVar14->length = sVar10;\n                lVar8 = pIVar14[-2].input_offset;\n                pIVar14 = pIVar14 + -1;\n              }\n              pIVar14->input_offset = lVar5;\n              pIVar14->length = sVar6;\n              pIVar14->output_offset = sVar7;\n            }" { (expression_statement "lVar5 = pIVar15->input_offset;" (assignment_expression "lVar5 = pIVar15->input_offset" identifier = (field_expression "pIVar15->input_offset" identifier -> field_identifier)) ;) (expression_statement "sVar6 = pIVar15->length;" (assignment_expression "sVar6 = pIVar15->length" identifier = (field_expression "pIVar15->length" identifier -> field_identifier)) ;) (expression_statement "sVar7 = pIVar15->output_offset;" (assignment_expression "sVar7 = pIVar15->output_offset" identifier = (field_expression "pIVar15->output_offset" identifier -> field_identifier)) ;) (expression_statement "lVar8 = pIVar15[-1].input_offset;" (assignment_expression "lVar8 = pIVar15[-1].input_offset" identifier = (field_expression "pIVar15[-1].input_offset" (subscript_expression "pIVar15[-1]" identifier [ number_literal ]) . field_identifier)) ;) (expression_statement "pIVar14 = pIVar15;" (assignment_expression "pIVar14 = pIVar15" identifier = identifier) ;) (while_statement "while (lVar5 < lVar8) {\n                sVar9 = pIVar14[-1].input_offset;\n                sVar10 = pIVar14[-1].length;\n                pIVar14->output_offset = pIVar14[-1].output_offset;\n                pIVar14->input_offset = sVar9;\n                pIVar14->length = sVar10;\n                lVar8 = pIVar14[-2].input_offset;\n                pIVar14 = pIVar14 + -1;\n              }" while (parenthesized_expression "(lVar5 < lVar8)" ( (binary_expression "lVar5 < lVar8" identifier < identifier) )) (compound_statement "{\n                sVar9 = pIVar14[-1].input_offset;\n                sVar10 = pIVar14[-1].length;\n                pIVar14->output_offset = pIVar14[-1].output_offset;\n                pIVar14->input_offset = sVar9;\n                pIVar14->length = sVar10;\n                lVar8 = pIVar14[-2].input_offset;\n                pIVar14 = pIVar14 + -1;\n              }" { (expression_statement "sVar9 = pIVar14[-1].input_offset;" (assignment_expression "sVar9 = pIVar14[-1].input_offset" identifier = (field_expression "pIVar14[-1].input_offset" (subscript_expression "pIVar14[-1]" identifier [ number_literal ]) . field_identifier)) ;) (expression_statement "sVar10 = pIVar14[-1].length;" (assignment_expression "sVar10 = pIVar14[-1].length" identifier = (field_expression "pIVar14[-1].length" (subscript_expression "pIVar14[-1]" identifier [ number_literal ]) . field_identifier)) ;) (expression_statement "pIVar14->output_offset = pIVar14[-1].output_offset;" (assignment_expression "pIVar14->output_offset = pIVar14[-1].output_offset" (field_expression "pIVar14->output_offset" identifier -> field_identifier) = (field_expression "pIVar14[-1].output_offset" (subscript_expression "pIVar14[-1]" identifier [ number_literal ]) . field_identifier)) ;) (expression_statement "pIVar14->input_offset = sVar9;" (assignment_expression "pIVar14->input_offset = sVar9" (field_expression "pIVar14->input_offset" identifier -> field_identifier) = identifier) ;) (expression_statement "pIVar14->length = sVar10;" (assignment_expression "pIVar14->length = sVar10" (field_expression "pIVar14->length" identifier -> field_identifier) = identifier) ;) (expression_statement "lVar8 = pIVar14[-2].input_offset;" (assignment_expression "lVar8 = pIVar14[-2].input_offset" identifier = (field_expression "pIVar14[-2].input_offset" (subscript_expression "pIVar14[-2]" identifier [ number_literal ]) . field_identifier)) ;) (expression_statement "pIVar14 = pIVar14 + -1;" (assignment_expression "pIVar14 = pIVar14 + -1" identifier = (binary_expression "pIVar14 + -1" identifier + number_literal)) ;) })) (expression_statement "pIVar14->input_offset = lVar5;" (assignment_expression "pIVar14->input_offset = lVar5" (field_expression "pIVar14->input_offset" identifier -> field_identifier) = identifier) ;) (expression_statement "pIVar14->length = sVar6;" (assignment_expression "pIVar14->length = sVar6" (field_expression "pIVar14->length" identifier -> field_identifier) = identifier) ;) (expression_statement "pIVar14->output_offset = sVar7;" (assignment_expression "pIVar14->output_offset = sVar7" (field_expression "pIVar14->output_offset" identifier -> field_identifier) = identifier) ;) })) }))) (ERROR "pIVar14 = (pIVar3->entries).\n                    super__Vector_base<gold::" (assignment_expression "pIVar14 = (pIVar3->entries).\n                    super__Vector_base<gold" identifier = (binary_expression "(pIVar3->entries).\n                    super__Vector_base<gold" (field_expression "(pIVar3->entries).\n                    super__Vector_base" (parenthesized_expression "(pIVar3->entries)" ( (field_expression "pIVar3->entries" identifier -> field_identifier) )) . field_identifier) < identifier)) : :) (labeled_statement "Object_merge_map::Input_merge_entry,_std::allocator<gold::Object_merge_map::Input_merge_entry>_>\n                    ._M_impl._M_start;" statement_identifier (ERROR "::Input_merge_entry,_std::allocator<gold:" : : (comma_expression "Input_merge_entry,_std" identifier , identifier) : : (binary_expression "allocator<gold" identifier < identifier) :) : (labeled_statement "Object_merge_map::Input_merge_entry>_>\n                    ._M_impl._M_start;" statement_identifier : (ERROR ":" :) (expression_statement "Input_merge_entry>_>\n                    ._M_impl._M_start;" (field_expression "Input_merge_entry>_>\n                    ._M_impl._M_start" (field_expression "Input_merge_entry>_>\n                    ._M_impl" (binary_expression "Input_merge_entry>_" identifier > identifier) (ERROR ">" >) . field_identifier) . field_identifier) ;))) (expression_statement "uVar12 = ((long)(pIVar3->entries).\n                          super__Vector_base<gold::Object_merge_map::Input_merge_entry,_std::allocator<gold::Object_merge_map::Input_merge_entry>_>\n                          ._M_impl._M_finish - (long)pIVar14 >> 3) * -0x5555555555555555;" (assignment_expression "uVar12 = ((long)(pIVar3->entries).\n                          super__Vector_base<gold::Object_merge_map::Input_merge_entry,_std::allocator<gold::Object_merge_map::Input_merge_entry>_>\n                          ._M_impl._M_finish - (long)pIVar14 >> 3) * -0x5555555555555555" identifier = (binary_expression "((long)(pIVar3->entries).\n                          super__Vector_base<gold::Object_merge_map::Input_merge_entry,_std::allocator<gold::Object_merge_map::Input_merge_entry>_>\n                          ._M_impl._M_finish - (long)pIVar14 >> 3) * -0x5555555555555555" (parenthesized_expression "((long)(pIVar3->entries).\n                          super__Vector_base<gold::Object_merge_map::Input_merge_entry,_std::allocator<gold::Object_merge_map::Input_merge_entry>_>\n                          ._M_impl._M_finish - (long)pIVar14 >> 3)" ( (ERROR "(long)(pIVar3->entries).\n                          super__Vector_base<gold::Object_merge_map::Input_merge_entry,_std::allocator<gold::Object_merge_map::" (comma_expression "(long)(pIVar3->entries).\n                          super__Vector_base<gold::Object_merge_map::Input_merge_entry,_std" (binary_expression "(long)(pIVar3->entries).\n                          super__Vector_base<gold" (cast_expression "(long)(pIVar3->entries).\n                          super__Vector_base" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (field_expression "(pIVar3->entries).\n                          super__Vector_base" (parenthesized_expression "(pIVar3->entries)" ( (field_expression "pIVar3->entries" identifier -> field_identifier) )) . field_identifier)) < identifier) (ERROR "::Object_merge_map::Input_merge_entry" : : identifier : : identifier) , identifier) : : (binary_expression "allocator<gold" identifier < identifier) : : identifier : :) (binary_expression "Input_merge_entry>_>\n                          ._M_impl._M_finish - (long)pIVar14 >> 3" (binary_expression "Input_merge_entry>_>\n                          ._M_impl._M_finish - (long)pIVar14" (field_expression "Input_merge_entry>_>\n                          ._M_impl._M_finish" (field_expression "Input_merge_entry>_>\n                          ._M_impl" (binary_expression "Input_merge_entry>_" identifier > identifier) (ERROR ">" >) . field_identifier) . field_identifier) - (cast_expression "(long)pIVar14" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) >> number_literal) )) * number_literal)) ;) })) (expression_statement "pIVar3->sorted = true;" (assignment_expression "pIVar3->sorted = true" (field_expression "pIVar3->sorted" identifier -> field_identifier) = true) ;) (expression_statement "pIVar15 = pIVar14;" (assignment_expression "pIVar15 = pIVar14" identifier = identifier) ;) })) (for_statement "for (; 0 < (long)uVar12; uVar12 = (uVar12 - uVar13) - 1) {\n        while( true ) {\n          uVar13 = (long)uVar12 >> 1;\n          if (pIVar14[uVar13].input_offset <= input_offset) break;\n          uVar12 = uVar13;\n          if (uVar13 == 0) goto LAB_0031c4f3;\n        }\n        pIVar14 = pIVar14 + uVar13 + 1;\n      }" for ( ; (binary_expression "0 < (long)uVar12" number_literal < (cast_expression "(long)uVar12" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ; (assignment_expression "uVar12 = (uVar12 - uVar13) - 1" identifier = (binary_expression "(uVar12 - uVar13) - 1" (parenthesized_expression "(uVar12 - uVar13)" ( (binary_expression "uVar12 - uVar13" identifier - identifier) )) - number_literal)) ) (compound_statement "{\n        while( true ) {\n          uVar13 = (long)uVar12 >> 1;\n          if (pIVar14[uVar13].input_offset <= input_offset) break;\n          uVar12 = uVar13;\n          if (uVar13 == 0) goto LAB_0031c4f3;\n        }\n        pIVar14 = pIVar14 + uVar13 + 1;\n      }" { (while_statement "while( true ) {\n          uVar13 = (long)uVar12 >> 1;\n          if (pIVar14[uVar13].input_offset <= input_offset) break;\n          uVar12 = uVar13;\n          if (uVar13 == 0) goto LAB_0031c4f3;\n        }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n          uVar13 = (long)uVar12 >> 1;\n          if (pIVar14[uVar13].input_offset <= input_offset) break;\n          uVar12 = uVar13;\n          if (uVar13 == 0) goto LAB_0031c4f3;\n        }" { (expression_statement "uVar13 = (long)uVar12 >> 1;" (assignment_expression "uVar13 = (long)uVar12 >> 1" identifier = (binary_expression "(long)uVar12 >> 1" (cast_expression "(long)uVar12" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) >> number_literal)) ;) (if_statement "if (pIVar14[uVar13].input_offset <= input_offset) break;" if (parenthesized_expression "(pIVar14[uVar13].input_offset <= input_offset)" ( (binary_expression "pIVar14[uVar13].input_offset <= input_offset" (field_expression "pIVar14[uVar13].input_offset" (subscript_expression "pIVar14[uVar13]" identifier [ identifier ]) . field_identifier) <= identifier) )) (break_statement "break;" break ;)) (expression_statement "uVar12 = uVar13;" (assignment_expression "uVar12 = uVar13" identifier = identifier) ;) (if_statement "if (uVar13 == 0) goto LAB_0031c4f3;" if (parenthesized_expression "(uVar13 == 0)" ( (binary_expression "uVar13 == 0" identifier == number_literal) )) (goto_statement "goto LAB_0031c4f3;" goto statement_identifier ;)) })) (expression_statement "pIVar14 = pIVar14 + uVar13 + 1;" (assignment_expression "pIVar14 = pIVar14 + uVar13 + 1" identifier = (binary_expression "pIVar14 + uVar13 + 1" (binary_expression "pIVar14 + uVar13" identifier + identifier) + number_literal)) ;) })) (labeled_statement "LAB_0031c4f3:\n      if (pIVar14 != pIVar15) {\n        if (input_offset < pIVar14[-1].input_offset) {\n                    /* WARNING: Subroutine does not return */\n          do_gold_unreachable("../../gold/merge.cc",0xa1,"get_output_offset");\n        }\n        if (input_offset - pIVar14[-1].input_offset < (long)pIVar14[-1].length) {\n          lVar5 = pIVar14[-1].output_offset;\n          *output_offset = lVar5;\n          if (lVar5 != -1) {\n            *output_offset = (input_offset - pIVar14[-1].input_offset) + lVar5;\n            return true;\n          }\n          return true;\n        }\n      }" statement_identifier : (if_statement "if (pIVar14 != pIVar15) {\n        if (input_offset < pIVar14[-1].input_offset) {\n                    /* WARNING: Subroutine does not return */\n          do_gold_unreachable("../../gold/merge.cc",0xa1,"get_output_offset");\n        }\n        if (input_offset - pIVar14[-1].input_offset < (long)pIVar14[-1].length) {\n          lVar5 = pIVar14[-1].output_offset;\n          *output_offset = lVar5;\n          if (lVar5 != -1) {\n            *output_offset = (input_offset - pIVar14[-1].input_offset) + lVar5;\n            return true;\n          }\n          return true;\n        }\n      }" if (parenthesized_expression "(pIVar14 != pIVar15)" ( (binary_expression "pIVar14 != pIVar15" identifier != identifier) )) (compound_statement "{\n        if (input_offset < pIVar14[-1].input_offset) {\n                    /* WARNING: Subroutine does not return */\n          do_gold_unreachable("../../gold/merge.cc",0xa1,"get_output_offset");\n        }\n        if (input_offset - pIVar14[-1].input_offset < (long)pIVar14[-1].length) {\n          lVar5 = pIVar14[-1].output_offset;\n          *output_offset = lVar5;\n          if (lVar5 != -1) {\n            *output_offset = (input_offset - pIVar14[-1].input_offset) + lVar5;\n            return true;\n          }\n          return true;\n        }\n      }" { (if_statement "if (input_offset < pIVar14[-1].input_offset) {\n                    /* WARNING: Subroutine does not return */\n          do_gold_unreachable("../../gold/merge.cc",0xa1,"get_output_offset");\n        }" if (parenthesized_expression "(input_offset < pIVar14[-1].input_offset)" ( (binary_expression "input_offset < pIVar14[-1].input_offset" identifier < (field_expression "pIVar14[-1].input_offset" (subscript_expression "pIVar14[-1]" identifier [ number_literal ]) . field_identifier)) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n          do_gold_unreachable("../../gold/merge.cc",0xa1,"get_output_offset");\n        }" { comment (expression_statement "do_gold_unreachable("../../gold/merge.cc",0xa1,"get_output_offset");" (call_expression "do_gold_unreachable("../../gold/merge.cc",0xa1,"get_output_offset")" identifier (argument_list "("../../gold/merge.cc",0xa1,"get_output_offset")" ( (string_literal ""../../gold/merge.cc"" " string_content ") , number_literal , (string_literal ""get_output_offset"" " string_content ") ))) ;) })) (if_statement "if (input_offset - pIVar14[-1].input_offset < (long)pIVar14[-1].length) {\n          lVar5 = pIVar14[-1].output_offset;\n          *output_offset = lVar5;\n          if (lVar5 != -1) {\n            *output_offset = (input_offset - pIVar14[-1].input_offset) + lVar5;\n            return true;\n          }\n          return true;\n        }" if (parenthesized_expression "(input_offset - pIVar14[-1].input_offset < (long)pIVar14[-1].length)" ( (binary_expression "input_offset - pIVar14[-1].input_offset < (long)pIVar14[-1].length" (binary_expression "input_offset - pIVar14[-1].input_offset" identifier - (field_expression "pIVar14[-1].input_offset" (subscript_expression "pIVar14[-1]" identifier [ number_literal ]) . field_identifier)) < (cast_expression "(long)pIVar14[-1].length" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (field_expression "pIVar14[-1].length" (subscript_expression "pIVar14[-1]" identifier [ number_literal ]) . field_identifier))) )) (compound_statement "{\n          lVar5 = pIVar14[-1].output_offset;\n          *output_offset = lVar5;\n          if (lVar5 != -1) {\n            *output_offset = (input_offset - pIVar14[-1].input_offset) + lVar5;\n            return true;\n          }\n          return true;\n        }" { (expression_statement "lVar5 = pIVar14[-1].output_offset;" (assignment_expression "lVar5 = pIVar14[-1].output_offset" identifier = (field_expression "pIVar14[-1].output_offset" (subscript_expression "pIVar14[-1]" identifier [ number_literal ]) . field_identifier)) ;) (expression_statement "*output_offset = lVar5;" (assignment_expression "*output_offset = lVar5" (pointer_expression "*output_offset" * identifier) = identifier) ;) (if_statement "if (lVar5 != -1) {\n            *output_offset = (input_offset - pIVar14[-1].input_offset) + lVar5;\n            return true;\n          }" if (parenthesized_expression "(lVar5 != -1)" ( (binary_expression "lVar5 != -1" identifier != number_literal) )) (compound_statement "{\n            *output_offset = (input_offset - pIVar14[-1].input_offset) + lVar5;\n            return true;\n          }" { (expression_statement "*output_offset = (input_offset - pIVar14[-1].input_offset) + lVar5;" (assignment_expression "*output_offset = (input_offset - pIVar14[-1].input_offset) + lVar5" (pointer_expression "*output_offset" * identifier) = (binary_expression "(input_offset - pIVar14[-1].input_offset) + lVar5" (parenthesized_expression "(input_offset - pIVar14[-1].input_offset)" ( (binary_expression "input_offset - pIVar14[-1].input_offset" identifier - (field_expression "pIVar14[-1].input_offset" (subscript_expression "pIVar14[-1]" identifier [ number_literal ]) . field_identifier)) )) + identifier)) ;) (return_statement "return true;" return true ;) })) (return_statement "return true;" return true ;) })) }))) })) })) (return_statement "return false;" return false ;) })))
(translation_unit "undefined8 FUN_0031c420(undefined8 *param_1,int param_2,long param_3,long *param_4)\n\n{\n  int iVar1;\n  long lVar2;\n  long *plVar3;\n  long lVar4;\n  long lVar5;\n  long lVar6;\n  long lVar7;\n  int *piVar8;\n  ulong uVar9;\n  ulong uVar10;\n  long *plVar11;\n  long *plVar12;\n  \n  if (param_2 == -1) {\n    FUN_0031bad0();\nLAB_0031c632:\n                    \n    FUN_001e9890("../../gold/merge.cc",0xa1,"get_output_offset");\n  }\n  piVar8 = (int *)*param_1;\n  if ((int *)param_1[1] != piVar8) {\n    iVar1 = *piVar8;\n    while (iVar1 != param_2) {\n      piVar8 = piVar8 + 4;\n      if ((int *)param_1[1] == piVar8) {\n        return 0;\n      }\n      iVar1 = *piVar8;\n    }\n    lVar2 = *(long *)(piVar8 + 2);\n    if (lVar2 != 0) {\n      plVar3 = *(long **)(lVar2 + 0x10);\n      plVar11 = *(long **)(lVar2 + 8);\n      uVar9 = ((long)plVar3 - (long)plVar11 >> 3) * -0x5555555555555555;\n      plVar12 = plVar11;\n      if (*(char *)(lVar2 + 0x20) == '\0') {\n        if (plVar11 != plVar3) {\n          lVar7 = 0x3f;\n          if (uVar9 != 0) {\n            for (; uVar9 >> lVar7 == 0; lVar7 = lVar7 + -1) {\n            }\n          }\n          FUN_00320150(plVar11,plVar3,(0x3f - (long)(int)((uint)lVar7 ^ 0x3f)) * 2);\n          if ((long)plVar3 - (long)plVar11 < 0x181) {\n            FUN_0031ddb0(plVar11,plVar3);\n          }\n          else {\n            plVar12 = plVar11 + 0x30;\n            FUN_0031ddb0(plVar11,plVar12);\n            for (; plVar12 != plVar3; plVar12 = plVar12 + 3) {\n              lVar7 = *plVar12;\n              lVar4 = plVar12[1];\n              lVar5 = plVar12[2];\n              lVar6 = plVar12[-3];\n              plVar11 = plVar12;\n              while (lVar7 < lVar6) {\n                plVar11[2] = plVar11[-1];\n                *plVar11 = plVar11[-3];\n                plVar11[1] = plVar11[-2];\n                lVar6 = plVar11[-6];\n                plVar11 = plVar11 + -3;\n              }\n              *plVar11 = lVar7;\n              plVar11[1] = lVar4;\n              plVar11[2] = lVar5;\n            }\n          }\n          plVar11 = *(long **)(lVar2 + 8);\n          uVar9 = (*(long *)(lVar2 + 0x10) - (long)plVar11 >> 3) * -0x5555555555555555;\n        }\n        *(undefined1 *)(lVar2 + 0x20) = 1;\n        plVar12 = plVar11;\n      }\n      for (; 0 < (long)uVar9; uVar9 = (uVar9 - uVar10) - 1) {\n        while( true ) {\n          uVar10 = (long)uVar9 >> 1;\n          if (plVar11[uVar10 * 3] <= param_3) break;\n          uVar9 = uVar10;\n          if (uVar10 == 0) goto LAB_0031c4f3;\n        }\n        plVar11 = plVar11 + uVar10 * 3 + 3;\n      }\nLAB_0031c4f3:\n      if (plVar11 != plVar12) {\n        if (param_3 < plVar11[-3]) goto LAB_0031c632;\n        if (param_3 - plVar11[-3] < plVar11[-2]) {\n          lVar2 = plVar11[-1];\n          *param_4 = lVar2;\n          if (lVar2 != -1) {\n            *param_4 = (param_3 - plVar11[-3]) + lVar2;\n            return 1;\n          }\n          return 1;\n        }\n      }\n    }\n  }\n  return 0;\n}\n\n" (function_definition "undefined8 FUN_0031c420(undefined8 *param_1,int param_2,long param_3,long *param_4)\n\n{\n  int iVar1;\n  long lVar2;\n  long *plVar3;\n  long lVar4;\n  long lVar5;\n  long lVar6;\n  long lVar7;\n  int *piVar8;\n  ulong uVar9;\n  ulong uVar10;\n  long *plVar11;\n  long *plVar12;\n  \n  if (param_2 == -1) {\n    FUN_0031bad0();\nLAB_0031c632:\n                    \n    FUN_001e9890("../../gold/merge.cc",0xa1,"get_output_offset");\n  }\n  piVar8 = (int *)*param_1;\n  if ((int *)param_1[1] != piVar8) {\n    iVar1 = *piVar8;\n    while (iVar1 != param_2) {\n      piVar8 = piVar8 + 4;\n      if ((int *)param_1[1] == piVar8) {\n        return 0;\n      }\n      iVar1 = *piVar8;\n    }\n    lVar2 = *(long *)(piVar8 + 2);\n    if (lVar2 != 0) {\n      plVar3 = *(long **)(lVar2 + 0x10);\n      plVar11 = *(long **)(lVar2 + 8);\n      uVar9 = ((long)plVar3 - (long)plVar11 >> 3) * -0x5555555555555555;\n      plVar12 = plVar11;\n      if (*(char *)(lVar2 + 0x20) == '\0') {\n        if (plVar11 != plVar3) {\n          lVar7 = 0x3f;\n          if (uVar9 != 0) {\n            for (; uVar9 >> lVar7 == 0; lVar7 = lVar7 + -1) {\n            }\n          }\n          FUN_00320150(plVar11,plVar3,(0x3f - (long)(int)((uint)lVar7 ^ 0x3f)) * 2);\n          if ((long)plVar3 - (long)plVar11 < 0x181) {\n            FUN_0031ddb0(plVar11,plVar3);\n          }\n          else {\n            plVar12 = plVar11 + 0x30;\n            FUN_0031ddb0(plVar11,plVar12);\n            for (; plVar12 != plVar3; plVar12 = plVar12 + 3) {\n              lVar7 = *plVar12;\n              lVar4 = plVar12[1];\n              lVar5 = plVar12[2];\n              lVar6 = plVar12[-3];\n              plVar11 = plVar12;\n              while (lVar7 < lVar6) {\n                plVar11[2] = plVar11[-1];\n                *plVar11 = plVar11[-3];\n                plVar11[1] = plVar11[-2];\n                lVar6 = plVar11[-6];\n                plVar11 = plVar11 + -3;\n              }\n              *plVar11 = lVar7;\n              plVar11[1] = lVar4;\n              plVar11[2] = lVar5;\n            }\n          }\n          plVar11 = *(long **)(lVar2 + 8);\n          uVar9 = (*(long *)(lVar2 + 0x10) - (long)plVar11 >> 3) * -0x5555555555555555;\n        }\n        *(undefined1 *)(lVar2 + 0x20) = 1;\n        plVar12 = plVar11;\n      }\n      for (; 0 < (long)uVar9; uVar9 = (uVar9 - uVar10) - 1) {\n        while( true ) {\n          uVar10 = (long)uVar9 >> 1;\n          if (plVar11[uVar10 * 3] <= param_3) break;\n          uVar9 = uVar10;\n          if (uVar10 == 0) goto LAB_0031c4f3;\n        }\n        plVar11 = plVar11 + uVar10 * 3 + 3;\n      }\nLAB_0031c4f3:\n      if (plVar11 != plVar12) {\n        if (param_3 < plVar11[-3]) goto LAB_0031c632;\n        if (param_3 - plVar11[-3] < plVar11[-2]) {\n          lVar2 = plVar11[-1];\n          *param_4 = lVar2;\n          if (lVar2 != -1) {\n            *param_4 = (param_3 - plVar11[-3]) + lVar2;\n            return 1;\n          }\n          return 1;\n        }\n      }\n    }\n  }\n  return 0;\n}" type_identifier (function_declarator "FUN_0031c420(undefined8 *param_1,int param_2,long param_3,long *param_4)" identifier (parameter_list "(undefined8 *param_1,int param_2,long param_3,long *param_4)" ( (parameter_declaration "undefined8 *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "long param_3" (sized_type_specifier "long" long) identifier) , (parameter_declaration "long *param_4" (sized_type_specifier "long" long) (pointer_declarator "*param_4" * identifier)) ))) (compound_statement "{\n  int iVar1;\n  long lVar2;\n  long *plVar3;\n  long lVar4;\n  long lVar5;\n  long lVar6;\n  long lVar7;\n  int *piVar8;\n  ulong uVar9;\n  ulong uVar10;\n  long *plVar11;\n  long *plVar12;\n  \n  if (param_2 == -1) {\n    FUN_0031bad0();\nLAB_0031c632:\n                    \n    FUN_001e9890("../../gold/merge.cc",0xa1,"get_output_offset");\n  }\n  piVar8 = (int *)*param_1;\n  if ((int *)param_1[1] != piVar8) {\n    iVar1 = *piVar8;\n    while (iVar1 != param_2) {\n      piVar8 = piVar8 + 4;\n      if ((int *)param_1[1] == piVar8) {\n        return 0;\n      }\n      iVar1 = *piVar8;\n    }\n    lVar2 = *(long *)(piVar8 + 2);\n    if (lVar2 != 0) {\n      plVar3 = *(long **)(lVar2 + 0x10);\n      plVar11 = *(long **)(lVar2 + 8);\n      uVar9 = ((long)plVar3 - (long)plVar11 >> 3) * -0x5555555555555555;\n      plVar12 = plVar11;\n      if (*(char *)(lVar2 + 0x20) == '\0') {\n        if (plVar11 != plVar3) {\n          lVar7 = 0x3f;\n          if (uVar9 != 0) {\n            for (; uVar9 >> lVar7 == 0; lVar7 = lVar7 + -1) {\n            }\n          }\n          FUN_00320150(plVar11,plVar3,(0x3f - (long)(int)((uint)lVar7 ^ 0x3f)) * 2);\n          if ((long)plVar3 - (long)plVar11 < 0x181) {\n            FUN_0031ddb0(plVar11,plVar3);\n          }\n          else {\n            plVar12 = plVar11 + 0x30;\n            FUN_0031ddb0(plVar11,plVar12);\n            for (; plVar12 != plVar3; plVar12 = plVar12 + 3) {\n              lVar7 = *plVar12;\n              lVar4 = plVar12[1];\n              lVar5 = plVar12[2];\n              lVar6 = plVar12[-3];\n              plVar11 = plVar12;\n              while (lVar7 < lVar6) {\n                plVar11[2] = plVar11[-1];\n                *plVar11 = plVar11[-3];\n                plVar11[1] = plVar11[-2];\n                lVar6 = plVar11[-6];\n                plVar11 = plVar11 + -3;\n              }\n              *plVar11 = lVar7;\n              plVar11[1] = lVar4;\n              plVar11[2] = lVar5;\n            }\n          }\n          plVar11 = *(long **)(lVar2 + 8);\n          uVar9 = (*(long *)(lVar2 + 0x10) - (long)plVar11 >> 3) * -0x5555555555555555;\n        }\n        *(undefined1 *)(lVar2 + 0x20) = 1;\n        plVar12 = plVar11;\n      }\n      for (; 0 < (long)uVar9; uVar9 = (uVar9 - uVar10) - 1) {\n        while( true ) {\n          uVar10 = (long)uVar9 >> 1;\n          if (plVar11[uVar10 * 3] <= param_3) break;\n          uVar9 = uVar10;\n          if (uVar10 == 0) goto LAB_0031c4f3;\n        }\n        plVar11 = plVar11 + uVar10 * 3 + 3;\n      }\nLAB_0031c4f3:\n      if (plVar11 != plVar12) {\n        if (param_3 < plVar11[-3]) goto LAB_0031c632;\n        if (param_3 - plVar11[-3] < plVar11[-2]) {\n          lVar2 = plVar11[-1];\n          *param_4 = lVar2;\n          if (lVar2 != -1) {\n            *param_4 = (param_3 - plVar11[-3]) + lVar2;\n            return 1;\n          }\n          return 1;\n        }\n      }\n    }\n  }\n  return 0;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (declaration "long *plVar3;" (sized_type_specifier "long" long) (pointer_declarator "*plVar3" * identifier) ;) (declaration "long lVar4;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar5;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar6;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar7;" (sized_type_specifier "long" long) identifier ;) (declaration "int *piVar8;" primitive_type (pointer_declarator "*piVar8" * identifier) ;) (declaration "ulong uVar9;" type_identifier identifier ;) (declaration "ulong uVar10;" type_identifier identifier ;) (declaration "long *plVar11;" (sized_type_specifier "long" long) (pointer_declarator "*plVar11" * identifier) ;) (declaration "long *plVar12;" (sized_type_specifier "long" long) (pointer_declarator "*plVar12" * identifier) ;) (if_statement "if (param_2 == -1) {\n    FUN_0031bad0();\nLAB_0031c632:\n                    \n    FUN_001e9890("../../gold/merge.cc",0xa1,"get_output_offset");\n  }" if (parenthesized_expression "(param_2 == -1)" ( (binary_expression "param_2 == -1" identifier == number_literal) )) (compound_statement "{\n    FUN_0031bad0();\nLAB_0031c632:\n                    \n    FUN_001e9890("../../gold/merge.cc",0xa1,"get_output_offset");\n  }" { (expression_statement "FUN_0031bad0();" (call_expression "FUN_0031bad0()" identifier (argument_list "()" ( ))) ;) (labeled_statement "LAB_0031c632:\n                    \n    FUN_001e9890("../../gold/merge.cc",0xa1,"get_output_offset");" statement_identifier : (expression_statement "FUN_001e9890("../../gold/merge.cc",0xa1,"get_output_offset");" (call_expression "FUN_001e9890("../../gold/merge.cc",0xa1,"get_output_offset")" identifier (argument_list "("../../gold/merge.cc",0xa1,"get_output_offset")" ( (string_literal ""../../gold/merge.cc"" " string_content ") , number_literal , (string_literal ""get_output_offset"" " string_content ") ))) ;)) })) (expression_statement "piVar8 = (int *)*param_1;" (assignment_expression "piVar8 = (int *)*param_1" identifier = (cast_expression "(int *)*param_1" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) ;) (if_statement "if ((int *)param_1[1] != piVar8) {\n    iVar1 = *piVar8;\n    while (iVar1 != param_2) {\n      piVar8 = piVar8 + 4;\n      if ((int *)param_1[1] == piVar8) {\n        return 0;\n      }\n      iVar1 = *piVar8;\n    }\n    lVar2 = *(long *)(piVar8 + 2);\n    if (lVar2 != 0) {\n      plVar3 = *(long **)(lVar2 + 0x10);\n      plVar11 = *(long **)(lVar2 + 8);\n      uVar9 = ((long)plVar3 - (long)plVar11 >> 3) * -0x5555555555555555;\n      plVar12 = plVar11;\n      if (*(char *)(lVar2 + 0x20) == '\0') {\n        if (plVar11 != plVar3) {\n          lVar7 = 0x3f;\n          if (uVar9 != 0) {\n            for (; uVar9 >> lVar7 == 0; lVar7 = lVar7 + -1) {\n            }\n          }\n          FUN_00320150(plVar11,plVar3,(0x3f - (long)(int)((uint)lVar7 ^ 0x3f)) * 2);\n          if ((long)plVar3 - (long)plVar11 < 0x181) {\n            FUN_0031ddb0(plVar11,plVar3);\n          }\n          else {\n            plVar12 = plVar11 + 0x30;\n            FUN_0031ddb0(plVar11,plVar12);\n            for (; plVar12 != plVar3; plVar12 = plVar12 + 3) {\n              lVar7 = *plVar12;\n              lVar4 = plVar12[1];\n              lVar5 = plVar12[2];\n              lVar6 = plVar12[-3];\n              plVar11 = plVar12;\n              while (lVar7 < lVar6) {\n                plVar11[2] = plVar11[-1];\n                *plVar11 = plVar11[-3];\n                plVar11[1] = plVar11[-2];\n                lVar6 = plVar11[-6];\n                plVar11 = plVar11 + -3;\n              }\n              *plVar11 = lVar7;\n              plVar11[1] = lVar4;\n              plVar11[2] = lVar5;\n            }\n          }\n          plVar11 = *(long **)(lVar2 + 8);\n          uVar9 = (*(long *)(lVar2 + 0x10) - (long)plVar11 >> 3) * -0x5555555555555555;\n        }\n        *(undefined1 *)(lVar2 + 0x20) = 1;\n        plVar12 = plVar11;\n      }\n      for (; 0 < (long)uVar9; uVar9 = (uVar9 - uVar10) - 1) {\n        while( true ) {\n          uVar10 = (long)uVar9 >> 1;\n          if (plVar11[uVar10 * 3] <= param_3) break;\n          uVar9 = uVar10;\n          if (uVar10 == 0) goto LAB_0031c4f3;\n        }\n        plVar11 = plVar11 + uVar10 * 3 + 3;\n      }\nLAB_0031c4f3:\n      if (plVar11 != plVar12) {\n        if (param_3 < plVar11[-3]) goto LAB_0031c632;\n        if (param_3 - plVar11[-3] < plVar11[-2]) {\n          lVar2 = plVar11[-1];\n          *param_4 = lVar2;\n          if (lVar2 != -1) {\n            *param_4 = (param_3 - plVar11[-3]) + lVar2;\n            return 1;\n          }\n          return 1;\n        }\n      }\n    }\n  }" if (parenthesized_expression "((int *)param_1[1] != piVar8)" ( (binary_expression "(int *)param_1[1] != piVar8" (cast_expression "(int *)param_1[1]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[1]" identifier [ number_literal ])) != identifier) )) (compound_statement "{\n    iVar1 = *piVar8;\n    while (iVar1 != param_2) {\n      piVar8 = piVar8 + 4;\n      if ((int *)param_1[1] == piVar8) {\n        return 0;\n      }\n      iVar1 = *piVar8;\n    }\n    lVar2 = *(long *)(piVar8 + 2);\n    if (lVar2 != 0) {\n      plVar3 = *(long **)(lVar2 + 0x10);\n      plVar11 = *(long **)(lVar2 + 8);\n      uVar9 = ((long)plVar3 - (long)plVar11 >> 3) * -0x5555555555555555;\n      plVar12 = plVar11;\n      if (*(char *)(lVar2 + 0x20) == '\0') {\n        if (plVar11 != plVar3) {\n          lVar7 = 0x3f;\n          if (uVar9 != 0) {\n            for (; uVar9 >> lVar7 == 0; lVar7 = lVar7 + -1) {\n            }\n          }\n          FUN_00320150(plVar11,plVar3,(0x3f - (long)(int)((uint)lVar7 ^ 0x3f)) * 2);\n          if ((long)plVar3 - (long)plVar11 < 0x181) {\n            FUN_0031ddb0(plVar11,plVar3);\n          }\n          else {\n            plVar12 = plVar11 + 0x30;\n            FUN_0031ddb0(plVar11,plVar12);\n            for (; plVar12 != plVar3; plVar12 = plVar12 + 3) {\n              lVar7 = *plVar12;\n              lVar4 = plVar12[1];\n              lVar5 = plVar12[2];\n              lVar6 = plVar12[-3];\n              plVar11 = plVar12;\n              while (lVar7 < lVar6) {\n                plVar11[2] = plVar11[-1];\n                *plVar11 = plVar11[-3];\n                plVar11[1] = plVar11[-2];\n                lVar6 = plVar11[-6];\n                plVar11 = plVar11 + -3;\n              }\n              *plVar11 = lVar7;\n              plVar11[1] = lVar4;\n              plVar11[2] = lVar5;\n            }\n          }\n          plVar11 = *(long **)(lVar2 + 8);\n          uVar9 = (*(long *)(lVar2 + 0x10) - (long)plVar11 >> 3) * -0x5555555555555555;\n        }\n        *(undefined1 *)(lVar2 + 0x20) = 1;\n        plVar12 = plVar11;\n      }\n      for (; 0 < (long)uVar9; uVar9 = (uVar9 - uVar10) - 1) {\n        while( true ) {\n          uVar10 = (long)uVar9 >> 1;\n          if (plVar11[uVar10 * 3] <= param_3) break;\n          uVar9 = uVar10;\n          if (uVar10 == 0) goto LAB_0031c4f3;\n        }\n        plVar11 = plVar11 + uVar10 * 3 + 3;\n      }\nLAB_0031c4f3:\n      if (plVar11 != plVar12) {\n        if (param_3 < plVar11[-3]) goto LAB_0031c632;\n        if (param_3 - plVar11[-3] < plVar11[-2]) {\n          lVar2 = plVar11[-1];\n          *param_4 = lVar2;\n          if (lVar2 != -1) {\n            *param_4 = (param_3 - plVar11[-3]) + lVar2;\n            return 1;\n          }\n          return 1;\n        }\n      }\n    }\n  }" { (expression_statement "iVar1 = *piVar8;" (assignment_expression "iVar1 = *piVar8" identifier = (pointer_expression "*piVar8" * identifier)) ;) (while_statement "while (iVar1 != param_2) {\n      piVar8 = piVar8 + 4;\n      if ((int *)param_1[1] == piVar8) {\n        return 0;\n      }\n      iVar1 = *piVar8;\n    }" while (parenthesized_expression "(iVar1 != param_2)" ( (binary_expression "iVar1 != param_2" identifier != identifier) )) (compound_statement "{\n      piVar8 = piVar8 + 4;\n      if ((int *)param_1[1] == piVar8) {\n        return 0;\n      }\n      iVar1 = *piVar8;\n    }" { (expression_statement "piVar8 = piVar8 + 4;" (assignment_expression "piVar8 = piVar8 + 4" identifier = (binary_expression "piVar8 + 4" identifier + number_literal)) ;) (if_statement "if ((int *)param_1[1] == piVar8) {\n        return 0;\n      }" if (parenthesized_expression "((int *)param_1[1] == piVar8)" ( (binary_expression "(int *)param_1[1] == piVar8" (cast_expression "(int *)param_1[1]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[1]" identifier [ number_literal ])) == identifier) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "iVar1 = *piVar8;" (assignment_expression "iVar1 = *piVar8" identifier = (pointer_expression "*piVar8" * identifier)) ;) })) (expression_statement "lVar2 = *(long *)(piVar8 + 2);" (assignment_expression "lVar2 = *(long *)(piVar8 + 2)" identifier = (pointer_expression "*(long *)(piVar8 + 2)" * (cast_expression "(long *)(piVar8 + 2)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(piVar8 + 2)" ( (binary_expression "piVar8 + 2" identifier + number_literal) ))))) ;) (if_statement "if (lVar2 != 0) {\n      plVar3 = *(long **)(lVar2 + 0x10);\n      plVar11 = *(long **)(lVar2 + 8);\n      uVar9 = ((long)plVar3 - (long)plVar11 >> 3) * -0x5555555555555555;\n      plVar12 = plVar11;\n      if (*(char *)(lVar2 + 0x20) == '\0') {\n        if (plVar11 != plVar3) {\n          lVar7 = 0x3f;\n          if (uVar9 != 0) {\n            for (; uVar9 >> lVar7 == 0; lVar7 = lVar7 + -1) {\n            }\n          }\n          FUN_00320150(plVar11,plVar3,(0x3f - (long)(int)((uint)lVar7 ^ 0x3f)) * 2);\n          if ((long)plVar3 - (long)plVar11 < 0x181) {\n            FUN_0031ddb0(plVar11,plVar3);\n          }\n          else {\n            plVar12 = plVar11 + 0x30;\n            FUN_0031ddb0(plVar11,plVar12);\n            for (; plVar12 != plVar3; plVar12 = plVar12 + 3) {\n              lVar7 = *plVar12;\n              lVar4 = plVar12[1];\n              lVar5 = plVar12[2];\n              lVar6 = plVar12[-3];\n              plVar11 = plVar12;\n              while (lVar7 < lVar6) {\n                plVar11[2] = plVar11[-1];\n                *plVar11 = plVar11[-3];\n                plVar11[1] = plVar11[-2];\n                lVar6 = plVar11[-6];\n                plVar11 = plVar11 + -3;\n              }\n              *plVar11 = lVar7;\n              plVar11[1] = lVar4;\n              plVar11[2] = lVar5;\n            }\n          }\n          plVar11 = *(long **)(lVar2 + 8);\n          uVar9 = (*(long *)(lVar2 + 0x10) - (long)plVar11 >> 3) * -0x5555555555555555;\n        }\n        *(undefined1 *)(lVar2 + 0x20) = 1;\n        plVar12 = plVar11;\n      }\n      for (; 0 < (long)uVar9; uVar9 = (uVar9 - uVar10) - 1) {\n        while( true ) {\n          uVar10 = (long)uVar9 >> 1;\n          if (plVar11[uVar10 * 3] <= param_3) break;\n          uVar9 = uVar10;\n          if (uVar10 == 0) goto LAB_0031c4f3;\n        }\n        plVar11 = plVar11 + uVar10 * 3 + 3;\n      }\nLAB_0031c4f3:\n      if (plVar11 != plVar12) {\n        if (param_3 < plVar11[-3]) goto LAB_0031c632;\n        if (param_3 - plVar11[-3] < plVar11[-2]) {\n          lVar2 = plVar11[-1];\n          *param_4 = lVar2;\n          if (lVar2 != -1) {\n            *param_4 = (param_3 - plVar11[-3]) + lVar2;\n            return 1;\n          }\n          return 1;\n        }\n      }\n    }" if (parenthesized_expression "(lVar2 != 0)" ( (binary_expression "lVar2 != 0" identifier != number_literal) )) (compound_statement "{\n      plVar3 = *(long **)(lVar2 + 0x10);\n      plVar11 = *(long **)(lVar2 + 8);\n      uVar9 = ((long)plVar3 - (long)plVar11 >> 3) * -0x5555555555555555;\n      plVar12 = plVar11;\n      if (*(char *)(lVar2 + 0x20) == '\0') {\n        if (plVar11 != plVar3) {\n          lVar7 = 0x3f;\n          if (uVar9 != 0) {\n            for (; uVar9 >> lVar7 == 0; lVar7 = lVar7 + -1) {\n            }\n          }\n          FUN_00320150(plVar11,plVar3,(0x3f - (long)(int)((uint)lVar7 ^ 0x3f)) * 2);\n          if ((long)plVar3 - (long)plVar11 < 0x181) {\n            FUN_0031ddb0(plVar11,plVar3);\n          }\n          else {\n            plVar12 = plVar11 + 0x30;\n            FUN_0031ddb0(plVar11,plVar12);\n            for (; plVar12 != plVar3; plVar12 = plVar12 + 3) {\n              lVar7 = *plVar12;\n              lVar4 = plVar12[1];\n              lVar5 = plVar12[2];\n              lVar6 = plVar12[-3];\n              plVar11 = plVar12;\n              while (lVar7 < lVar6) {\n                plVar11[2] = plVar11[-1];\n                *plVar11 = plVar11[-3];\n                plVar11[1] = plVar11[-2];\n                lVar6 = plVar11[-6];\n                plVar11 = plVar11 + -3;\n              }\n              *plVar11 = lVar7;\n              plVar11[1] = lVar4;\n              plVar11[2] = lVar5;\n            }\n          }\n          plVar11 = *(long **)(lVar2 + 8);\n          uVar9 = (*(long *)(lVar2 + 0x10) - (long)plVar11 >> 3) * -0x5555555555555555;\n        }\n        *(undefined1 *)(lVar2 + 0x20) = 1;\n        plVar12 = plVar11;\n      }\n      for (; 0 < (long)uVar9; uVar9 = (uVar9 - uVar10) - 1) {\n        while( true ) {\n          uVar10 = (long)uVar9 >> 1;\n          if (plVar11[uVar10 * 3] <= param_3) break;\n          uVar9 = uVar10;\n          if (uVar10 == 0) goto LAB_0031c4f3;\n        }\n        plVar11 = plVar11 + uVar10 * 3 + 3;\n      }\nLAB_0031c4f3:\n      if (plVar11 != plVar12) {\n        if (param_3 < plVar11[-3]) goto LAB_0031c632;\n        if (param_3 - plVar11[-3] < plVar11[-2]) {\n          lVar2 = plVar11[-1];\n          *param_4 = lVar2;\n          if (lVar2 != -1) {\n            *param_4 = (param_3 - plVar11[-3]) + lVar2;\n            return 1;\n          }\n          return 1;\n        }\n      }\n    }" { (expression_statement "plVar3 = *(long **)(lVar2 + 0x10);" (assignment_expression "plVar3 = *(long **)(lVar2 + 0x10)" identifier = (pointer_expression "*(long **)(lVar2 + 0x10)" * (cast_expression "(long **)(lVar2 + 0x10)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar2 + 0x10)" ( (binary_expression "lVar2 + 0x10" identifier + number_literal) ))))) ;) (expression_statement "plVar11 = *(long **)(lVar2 + 8);" (assignment_expression "plVar11 = *(long **)(lVar2 + 8)" identifier = (pointer_expression "*(long **)(lVar2 + 8)" * (cast_expression "(long **)(lVar2 + 8)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar2 + 8)" ( (binary_expression "lVar2 + 8" identifier + number_literal) ))))) ;) (expression_statement "uVar9 = ((long)plVar3 - (long)plVar11 >> 3) * -0x5555555555555555;" (assignment_expression "uVar9 = ((long)plVar3 - (long)plVar11 >> 3) * -0x5555555555555555" identifier = (binary_expression "((long)plVar3 - (long)plVar11 >> 3) * -0x5555555555555555" (parenthesized_expression "((long)plVar3 - (long)plVar11 >> 3)" ( (binary_expression "(long)plVar3 - (long)plVar11 >> 3" (binary_expression "(long)plVar3 - (long)plVar11" (cast_expression "(long)plVar3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)plVar11" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) >> number_literal) )) * number_literal)) ;) (expression_statement "plVar12 = plVar11;" (assignment_expression "plVar12 = plVar11" identifier = identifier) ;) (if_statement "if (*(char *)(lVar2 + 0x20) == '\0') {\n        if (plVar11 != plVar3) {\n          lVar7 = 0x3f;\n          if (uVar9 != 0) {\n            for (; uVar9 >> lVar7 == 0; lVar7 = lVar7 + -1) {\n            }\n          }\n          FUN_00320150(plVar11,plVar3,(0x3f - (long)(int)((uint)lVar7 ^ 0x3f)) * 2);\n          if ((long)plVar3 - (long)plVar11 < 0x181) {\n            FUN_0031ddb0(plVar11,plVar3);\n          }\n          else {\n            plVar12 = plVar11 + 0x30;\n            FUN_0031ddb0(plVar11,plVar12);\n            for (; plVar12 != plVar3; plVar12 = plVar12 + 3) {\n              lVar7 = *plVar12;\n              lVar4 = plVar12[1];\n              lVar5 = plVar12[2];\n              lVar6 = plVar12[-3];\n              plVar11 = plVar12;\n              while (lVar7 < lVar6) {\n                plVar11[2] = plVar11[-1];\n                *plVar11 = plVar11[-3];\n                plVar11[1] = plVar11[-2];\n                lVar6 = plVar11[-6];\n                plVar11 = plVar11 + -3;\n              }\n              *plVar11 = lVar7;\n              plVar11[1] = lVar4;\n              plVar11[2] = lVar5;\n            }\n          }\n          plVar11 = *(long **)(lVar2 + 8);\n          uVar9 = (*(long *)(lVar2 + 0x10) - (long)plVar11 >> 3) * -0x5555555555555555;\n        }\n        *(undefined1 *)(lVar2 + 0x20) = 1;\n        plVar12 = plVar11;\n      }" if (parenthesized_expression "(*(char *)(lVar2 + 0x20) == '\0')" ( (binary_expression "*(char *)(lVar2 + 0x20) == '\0'" (pointer_expression "*(char *)(lVar2 + 0x20)" * (cast_expression "(char *)(lVar2 + 0x20)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar2 + 0x20)" ( (binary_expression "lVar2 + 0x20" identifier + number_literal) )))) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        if (plVar11 != plVar3) {\n          lVar7 = 0x3f;\n          if (uVar9 != 0) {\n            for (; uVar9 >> lVar7 == 0; lVar7 = lVar7 + -1) {\n            }\n          }\n          FUN_00320150(plVar11,plVar3,(0x3f - (long)(int)((uint)lVar7 ^ 0x3f)) * 2);\n          if ((long)plVar3 - (long)plVar11 < 0x181) {\n            FUN_0031ddb0(plVar11,plVar3);\n          }\n          else {\n            plVar12 = plVar11 + 0x30;\n            FUN_0031ddb0(plVar11,plVar12);\n            for (; plVar12 != plVar3; plVar12 = plVar12 + 3) {\n              lVar7 = *plVar12;\n              lVar4 = plVar12[1];\n              lVar5 = plVar12[2];\n              lVar6 = plVar12[-3];\n              plVar11 = plVar12;\n              while (lVar7 < lVar6) {\n                plVar11[2] = plVar11[-1];\n                *plVar11 = plVar11[-3];\n                plVar11[1] = plVar11[-2];\n                lVar6 = plVar11[-6];\n                plVar11 = plVar11 + -3;\n              }\n              *plVar11 = lVar7;\n              plVar11[1] = lVar4;\n              plVar11[2] = lVar5;\n            }\n          }\n          plVar11 = *(long **)(lVar2 + 8);\n          uVar9 = (*(long *)(lVar2 + 0x10) - (long)plVar11 >> 3) * -0x5555555555555555;\n        }\n        *(undefined1 *)(lVar2 + 0x20) = 1;\n        plVar12 = plVar11;\n      }" { (if_statement "if (plVar11 != plVar3) {\n          lVar7 = 0x3f;\n          if (uVar9 != 0) {\n            for (; uVar9 >> lVar7 == 0; lVar7 = lVar7 + -1) {\n            }\n          }\n          FUN_00320150(plVar11,plVar3,(0x3f - (long)(int)((uint)lVar7 ^ 0x3f)) * 2);\n          if ((long)plVar3 - (long)plVar11 < 0x181) {\n            FUN_0031ddb0(plVar11,plVar3);\n          }\n          else {\n            plVar12 = plVar11 + 0x30;\n            FUN_0031ddb0(plVar11,plVar12);\n            for (; plVar12 != plVar3; plVar12 = plVar12 + 3) {\n              lVar7 = *plVar12;\n              lVar4 = plVar12[1];\n              lVar5 = plVar12[2];\n              lVar6 = plVar12[-3];\n              plVar11 = plVar12;\n              while (lVar7 < lVar6) {\n                plVar11[2] = plVar11[-1];\n                *plVar11 = plVar11[-3];\n                plVar11[1] = plVar11[-2];\n                lVar6 = plVar11[-6];\n                plVar11 = plVar11 + -3;\n              }\n              *plVar11 = lVar7;\n              plVar11[1] = lVar4;\n              plVar11[2] = lVar5;\n            }\n          }\n          plVar11 = *(long **)(lVar2 + 8);\n          uVar9 = (*(long *)(lVar2 + 0x10) - (long)plVar11 >> 3) * -0x5555555555555555;\n        }" if (parenthesized_expression "(plVar11 != plVar3)" ( (binary_expression "plVar11 != plVar3" identifier != identifier) )) (compound_statement "{\n          lVar7 = 0x3f;\n          if (uVar9 != 0) {\n            for (; uVar9 >> lVar7 == 0; lVar7 = lVar7 + -1) {\n            }\n          }\n          FUN_00320150(plVar11,plVar3,(0x3f - (long)(int)((uint)lVar7 ^ 0x3f)) * 2);\n          if ((long)plVar3 - (long)plVar11 < 0x181) {\n            FUN_0031ddb0(plVar11,plVar3);\n          }\n          else {\n            plVar12 = plVar11 + 0x30;\n            FUN_0031ddb0(plVar11,plVar12);\n            for (; plVar12 != plVar3; plVar12 = plVar12 + 3) {\n              lVar7 = *plVar12;\n              lVar4 = plVar12[1];\n              lVar5 = plVar12[2];\n              lVar6 = plVar12[-3];\n              plVar11 = plVar12;\n              while (lVar7 < lVar6) {\n                plVar11[2] = plVar11[-1];\n                *plVar11 = plVar11[-3];\n                plVar11[1] = plVar11[-2];\n                lVar6 = plVar11[-6];\n                plVar11 = plVar11 + -3;\n              }\n              *plVar11 = lVar7;\n              plVar11[1] = lVar4;\n              plVar11[2] = lVar5;\n            }\n          }\n          plVar11 = *(long **)(lVar2 + 8);\n          uVar9 = (*(long *)(lVar2 + 0x10) - (long)plVar11 >> 3) * -0x5555555555555555;\n        }" { (expression_statement "lVar7 = 0x3f;" (assignment_expression "lVar7 = 0x3f" identifier = number_literal) ;) (if_statement "if (uVar9 != 0) {\n            for (; uVar9 >> lVar7 == 0; lVar7 = lVar7 + -1) {\n            }\n          }" if (parenthesized_expression "(uVar9 != 0)" ( (binary_expression "uVar9 != 0" identifier != number_literal) )) (compound_statement "{\n            for (; uVar9 >> lVar7 == 0; lVar7 = lVar7 + -1) {\n            }\n          }" { (for_statement "for (; uVar9 >> lVar7 == 0; lVar7 = lVar7 + -1) {\n            }" for ( ; (binary_expression "uVar9 >> lVar7 == 0" (binary_expression "uVar9 >> lVar7" identifier >> identifier) == number_literal) ; (assignment_expression "lVar7 = lVar7 + -1" identifier = (binary_expression "lVar7 + -1" identifier + number_literal)) ) (compound_statement "{\n            }" { })) })) (expression_statement "FUN_00320150(plVar11,plVar3,(0x3f - (long)(int)((uint)lVar7 ^ 0x3f)) * 2);" (call_expression "FUN_00320150(plVar11,plVar3,(0x3f - (long)(int)((uint)lVar7 ^ 0x3f)) * 2)" identifier (argument_list "(plVar11,plVar3,(0x3f - (long)(int)((uint)lVar7 ^ 0x3f)) * 2)" ( identifier , identifier , (binary_expression "(0x3f - (long)(int)((uint)lVar7 ^ 0x3f)) * 2" (parenthesized_expression "(0x3f - (long)(int)((uint)lVar7 ^ 0x3f))" ( (binary_expression "0x3f - (long)(int)((uint)lVar7 ^ 0x3f)" number_literal - (cast_expression "(long)(int)((uint)lVar7 ^ 0x3f)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (cast_expression "(int)((uint)lVar7 ^ 0x3f)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((uint)lVar7 ^ 0x3f)" ( (binary_expression "(uint)lVar7 ^ 0x3f" (cast_expression "(uint)lVar7" ( (type_descriptor "uint" type_identifier) ) identifier) ^ number_literal) ))))) )) * number_literal) ))) ;) (if_statement "if ((long)plVar3 - (long)plVar11 < 0x181) {\n            FUN_0031ddb0(plVar11,plVar3);\n          }\n          else {\n            plVar12 = plVar11 + 0x30;\n            FUN_0031ddb0(plVar11,plVar12);\n            for (; plVar12 != plVar3; plVar12 = plVar12 + 3) {\n              lVar7 = *plVar12;\n              lVar4 = plVar12[1];\n              lVar5 = plVar12[2];\n              lVar6 = plVar12[-3];\n              plVar11 = plVar12;\n              while (lVar7 < lVar6) {\n                plVar11[2] = plVar11[-1];\n                *plVar11 = plVar11[-3];\n                plVar11[1] = plVar11[-2];\n                lVar6 = plVar11[-6];\n                plVar11 = plVar11 + -3;\n              }\n              *plVar11 = lVar7;\n              plVar11[1] = lVar4;\n              plVar11[2] = lVar5;\n            }\n          }" if (parenthesized_expression "((long)plVar3 - (long)plVar11 < 0x181)" ( (binary_expression "(long)plVar3 - (long)plVar11 < 0x181" (binary_expression "(long)plVar3 - (long)plVar11" (cast_expression "(long)plVar3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)plVar11" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) < number_literal) )) (compound_statement "{\n            FUN_0031ddb0(plVar11,plVar3);\n          }" { (expression_statement "FUN_0031ddb0(plVar11,plVar3);" (call_expression "FUN_0031ddb0(plVar11,plVar3)" identifier (argument_list "(plVar11,plVar3)" ( identifier , identifier ))) ;) }) (else_clause "else {\n            plVar12 = plVar11 + 0x30;\n            FUN_0031ddb0(plVar11,plVar12);\n            for (; plVar12 != plVar3; plVar12 = plVar12 + 3) {\n              lVar7 = *plVar12;\n              lVar4 = plVar12[1];\n              lVar5 = plVar12[2];\n              lVar6 = plVar12[-3];\n              plVar11 = plVar12;\n              while (lVar7 < lVar6) {\n                plVar11[2] = plVar11[-1];\n                *plVar11 = plVar11[-3];\n                plVar11[1] = plVar11[-2];\n                lVar6 = plVar11[-6];\n                plVar11 = plVar11 + -3;\n              }\n              *plVar11 = lVar7;\n              plVar11[1] = lVar4;\n              plVar11[2] = lVar5;\n            }\n          }" else (compound_statement "{\n            plVar12 = plVar11 + 0x30;\n            FUN_0031ddb0(plVar11,plVar12);\n            for (; plVar12 != plVar3; plVar12 = plVar12 + 3) {\n              lVar7 = *plVar12;\n              lVar4 = plVar12[1];\n              lVar5 = plVar12[2];\n              lVar6 = plVar12[-3];\n              plVar11 = plVar12;\n              while (lVar7 < lVar6) {\n                plVar11[2] = plVar11[-1];\n                *plVar11 = plVar11[-3];\n                plVar11[1] = plVar11[-2];\n                lVar6 = plVar11[-6];\n                plVar11 = plVar11 + -3;\n              }\n              *plVar11 = lVar7;\n              plVar11[1] = lVar4;\n              plVar11[2] = lVar5;\n            }\n          }" { (expression_statement "plVar12 = plVar11 + 0x30;" (assignment_expression "plVar12 = plVar11 + 0x30" identifier = (binary_expression "plVar11 + 0x30" identifier + number_literal)) ;) (expression_statement "FUN_0031ddb0(plVar11,plVar12);" (call_expression "FUN_0031ddb0(plVar11,plVar12)" identifier (argument_list "(plVar11,plVar12)" ( identifier , identifier ))) ;) (for_statement "for (; plVar12 != plVar3; plVar12 = plVar12 + 3) {\n              lVar7 = *plVar12;\n              lVar4 = plVar12[1];\n              lVar5 = plVar12[2];\n              lVar6 = plVar12[-3];\n              plVar11 = plVar12;\n              while (lVar7 < lVar6) {\n                plVar11[2] = plVar11[-1];\n                *plVar11 = plVar11[-3];\n                plVar11[1] = plVar11[-2];\n                lVar6 = plVar11[-6];\n                plVar11 = plVar11 + -3;\n              }\n              *plVar11 = lVar7;\n              plVar11[1] = lVar4;\n              plVar11[2] = lVar5;\n            }" for ( ; (binary_expression "plVar12 != plVar3" identifier != identifier) ; (assignment_expression "plVar12 = plVar12 + 3" identifier = (binary_expression "plVar12 + 3" identifier + number_literal)) ) (compound_statement "{\n              lVar7 = *plVar12;\n              lVar4 = plVar12[1];\n              lVar5 = plVar12[2];\n              lVar6 = plVar12[-3];\n              plVar11 = plVar12;\n              while (lVar7 < lVar6) {\n                plVar11[2] = plVar11[-1];\n                *plVar11 = plVar11[-3];\n                plVar11[1] = plVar11[-2];\n                lVar6 = plVar11[-6];\n                plVar11 = plVar11 + -3;\n              }\n              *plVar11 = lVar7;\n              plVar11[1] = lVar4;\n              plVar11[2] = lVar5;\n            }" { (expression_statement "lVar7 = *plVar12;" (assignment_expression "lVar7 = *plVar12" identifier = (pointer_expression "*plVar12" * identifier)) ;) (expression_statement "lVar4 = plVar12[1];" (assignment_expression "lVar4 = plVar12[1]" identifier = (subscript_expression "plVar12[1]" identifier [ number_literal ])) ;) (expression_statement "lVar5 = plVar12[2];" (assignment_expression "lVar5 = plVar12[2]" identifier = (subscript_expression "plVar12[2]" identifier [ number_literal ])) ;) (expression_statement "lVar6 = plVar12[-3];" (assignment_expression "lVar6 = plVar12[-3]" identifier = (subscript_expression "plVar12[-3]" identifier [ number_literal ])) ;) (expression_statement "plVar11 = plVar12;" (assignment_expression "plVar11 = plVar12" identifier = identifier) ;) (while_statement "while (lVar7 < lVar6) {\n                plVar11[2] = plVar11[-1];\n                *plVar11 = plVar11[-3];\n                plVar11[1] = plVar11[-2];\n                lVar6 = plVar11[-6];\n                plVar11 = plVar11 + -3;\n              }" while (parenthesized_expression "(lVar7 < lVar6)" ( (binary_expression "lVar7 < lVar6" identifier < identifier) )) (compound_statement "{\n                plVar11[2] = plVar11[-1];\n                *plVar11 = plVar11[-3];\n                plVar11[1] = plVar11[-2];\n                lVar6 = plVar11[-6];\n                plVar11 = plVar11 + -3;\n              }" { (expression_statement "plVar11[2] = plVar11[-1];" (assignment_expression "plVar11[2] = plVar11[-1]" (subscript_expression "plVar11[2]" identifier [ number_literal ]) = (subscript_expression "plVar11[-1]" identifier [ number_literal ])) ;) (expression_statement "*plVar11 = plVar11[-3];" (assignment_expression "*plVar11 = plVar11[-3]" (pointer_expression "*plVar11" * identifier) = (subscript_expression "plVar11[-3]" identifier [ number_literal ])) ;) (expression_statement "plVar11[1] = plVar11[-2];" (assignment_expression "plVar11[1] = plVar11[-2]" (subscript_expression "plVar11[1]" identifier [ number_literal ]) = (subscript_expression "plVar11[-2]" identifier [ number_literal ])) ;) (expression_statement "lVar6 = plVar11[-6];" (assignment_expression "lVar6 = plVar11[-6]" identifier = (subscript_expression "plVar11[-6]" identifier [ number_literal ])) ;) (expression_statement "plVar11 = plVar11 + -3;" (assignment_expression "plVar11 = plVar11 + -3" identifier = (binary_expression "plVar11 + -3" identifier + number_literal)) ;) })) (expression_statement "*plVar11 = lVar7;" (assignment_expression "*plVar11 = lVar7" (pointer_expression "*plVar11" * identifier) = identifier) ;) (expression_statement "plVar11[1] = lVar4;" (assignment_expression "plVar11[1] = lVar4" (subscript_expression "plVar11[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "plVar11[2] = lVar5;" (assignment_expression "plVar11[2] = lVar5" (subscript_expression "plVar11[2]" identifier [ number_literal ]) = identifier) ;) })) }))) (expression_statement "plVar11 = *(long **)(lVar2 + 8);" (assignment_expression "plVar11 = *(long **)(lVar2 + 8)" identifier = (pointer_expression "*(long **)(lVar2 + 8)" * (cast_expression "(long **)(lVar2 + 8)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar2 + 8)" ( (binary_expression "lVar2 + 8" identifier + number_literal) ))))) ;) (expression_statement "uVar9 = (*(long *)(lVar2 + 0x10) - (long)plVar11 >> 3) * -0x5555555555555555;" (assignment_expression "uVar9 = (*(long *)(lVar2 + 0x10) - (long)plVar11 >> 3) * -0x5555555555555555" identifier = (binary_expression "(*(long *)(lVar2 + 0x10) - (long)plVar11 >> 3) * -0x5555555555555555" (parenthesized_expression "(*(long *)(lVar2 + 0x10) - (long)plVar11 >> 3)" ( (binary_expression "*(long *)(lVar2 + 0x10) - (long)plVar11 >> 3" (binary_expression "*(long *)(lVar2 + 0x10) - (long)plVar11" (pointer_expression "*(long *)(lVar2 + 0x10)" * (cast_expression "(long *)(lVar2 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar2 + 0x10)" ( (binary_expression "lVar2 + 0x10" identifier + number_literal) )))) - (cast_expression "(long)plVar11" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) >> number_literal) )) * number_literal)) ;) })) (expression_statement "*(undefined1 *)(lVar2 + 0x20) = 1;" (assignment_expression "*(undefined1 *)(lVar2 + 0x20) = 1" (pointer_expression "*(undefined1 *)(lVar2 + 0x20)" * (cast_expression "(undefined1 *)(lVar2 + 0x20)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar2 + 0x20)" ( (binary_expression "lVar2 + 0x20" identifier + number_literal) )))) = number_literal) ;) (expression_statement "plVar12 = plVar11;" (assignment_expression "plVar12 = plVar11" identifier = identifier) ;) })) (for_statement "for (; 0 < (long)uVar9; uVar9 = (uVar9 - uVar10) - 1) {\n        while( true ) {\n          uVar10 = (long)uVar9 >> 1;\n          if (plVar11[uVar10 * 3] <= param_3) break;\n          uVar9 = uVar10;\n          if (uVar10 == 0) goto LAB_0031c4f3;\n        }\n        plVar11 = plVar11 + uVar10 * 3 + 3;\n      }" for ( ; (binary_expression "0 < (long)uVar9" number_literal < (cast_expression "(long)uVar9" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ; (assignment_expression "uVar9 = (uVar9 - uVar10) - 1" identifier = (binary_expression "(uVar9 - uVar10) - 1" (parenthesized_expression "(uVar9 - uVar10)" ( (binary_expression "uVar9 - uVar10" identifier - identifier) )) - number_literal)) ) (compound_statement "{\n        while( true ) {\n          uVar10 = (long)uVar9 >> 1;\n          if (plVar11[uVar10 * 3] <= param_3) break;\n          uVar9 = uVar10;\n          if (uVar10 == 0) goto LAB_0031c4f3;\n        }\n        plVar11 = plVar11 + uVar10 * 3 + 3;\n      }" { (while_statement "while( true ) {\n          uVar10 = (long)uVar9 >> 1;\n          if (plVar11[uVar10 * 3] <= param_3) break;\n          uVar9 = uVar10;\n          if (uVar10 == 0) goto LAB_0031c4f3;\n        }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n          uVar10 = (long)uVar9 >> 1;\n          if (plVar11[uVar10 * 3] <= param_3) break;\n          uVar9 = uVar10;\n          if (uVar10 == 0) goto LAB_0031c4f3;\n        }" { (expression_statement "uVar10 = (long)uVar9 >> 1;" (assignment_expression "uVar10 = (long)uVar9 >> 1" identifier = (binary_expression "(long)uVar9 >> 1" (cast_expression "(long)uVar9" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) >> number_literal)) ;) (if_statement "if (plVar11[uVar10 * 3] <= param_3) break;" if (parenthesized_expression "(plVar11[uVar10 * 3] <= param_3)" ( (binary_expression "plVar11[uVar10 * 3] <= param_3" (subscript_expression "plVar11[uVar10 * 3]" identifier [ (binary_expression "uVar10 * 3" identifier * number_literal) ]) <= identifier) )) (break_statement "break;" break ;)) (expression_statement "uVar9 = uVar10;" (assignment_expression "uVar9 = uVar10" identifier = identifier) ;) (if_statement "if (uVar10 == 0) goto LAB_0031c4f3;" if (parenthesized_expression "(uVar10 == 0)" ( (binary_expression "uVar10 == 0" identifier == number_literal) )) (goto_statement "goto LAB_0031c4f3;" goto statement_identifier ;)) })) (expression_statement "plVar11 = plVar11 + uVar10 * 3 + 3;" (assignment_expression "plVar11 = plVar11 + uVar10 * 3 + 3" identifier = (binary_expression "plVar11 + uVar10 * 3 + 3" (binary_expression "plVar11 + uVar10 * 3" identifier + (binary_expression "uVar10 * 3" identifier * number_literal)) + number_literal)) ;) })) (labeled_statement "LAB_0031c4f3:\n      if (plVar11 != plVar12) {\n        if (param_3 < plVar11[-3]) goto LAB_0031c632;\n        if (param_3 - plVar11[-3] < plVar11[-2]) {\n          lVar2 = plVar11[-1];\n          *param_4 = lVar2;\n          if (lVar2 != -1) {\n            *param_4 = (param_3 - plVar11[-3]) + lVar2;\n            return 1;\n          }\n          return 1;\n        }\n      }" statement_identifier : (if_statement "if (plVar11 != plVar12) {\n        if (param_3 < plVar11[-3]) goto LAB_0031c632;\n        if (param_3 - plVar11[-3] < plVar11[-2]) {\n          lVar2 = plVar11[-1];\n          *param_4 = lVar2;\n          if (lVar2 != -1) {\n            *param_4 = (param_3 - plVar11[-3]) + lVar2;\n            return 1;\n          }\n          return 1;\n        }\n      }" if (parenthesized_expression "(plVar11 != plVar12)" ( (binary_expression "plVar11 != plVar12" identifier != identifier) )) (compound_statement "{\n        if (param_3 < plVar11[-3]) goto LAB_0031c632;\n        if (param_3 - plVar11[-3] < plVar11[-2]) {\n          lVar2 = plVar11[-1];\n          *param_4 = lVar2;\n          if (lVar2 != -1) {\n            *param_4 = (param_3 - plVar11[-3]) + lVar2;\n            return 1;\n          }\n          return 1;\n        }\n      }" { (if_statement "if (param_3 < plVar11[-3]) goto LAB_0031c632;" if (parenthesized_expression "(param_3 < plVar11[-3])" ( (binary_expression "param_3 < plVar11[-3]" identifier < (subscript_expression "plVar11[-3]" identifier [ number_literal ])) )) (goto_statement "goto LAB_0031c632;" goto statement_identifier ;)) (if_statement "if (param_3 - plVar11[-3] < plVar11[-2]) {\n          lVar2 = plVar11[-1];\n          *param_4 = lVar2;\n          if (lVar2 != -1) {\n            *param_4 = (param_3 - plVar11[-3]) + lVar2;\n            return 1;\n          }\n          return 1;\n        }" if (parenthesized_expression "(param_3 - plVar11[-3] < plVar11[-2])" ( (binary_expression "param_3 - plVar11[-3] < plVar11[-2]" (binary_expression "param_3 - plVar11[-3]" identifier - (subscript_expression "plVar11[-3]" identifier [ number_literal ])) < (subscript_expression "plVar11[-2]" identifier [ number_literal ])) )) (compound_statement "{\n          lVar2 = plVar11[-1];\n          *param_4 = lVar2;\n          if (lVar2 != -1) {\n            *param_4 = (param_3 - plVar11[-3]) + lVar2;\n            return 1;\n          }\n          return 1;\n        }" { (expression_statement "lVar2 = plVar11[-1];" (assignment_expression "lVar2 = plVar11[-1]" identifier = (subscript_expression "plVar11[-1]" identifier [ number_literal ])) ;) (expression_statement "*param_4 = lVar2;" (assignment_expression "*param_4 = lVar2" (pointer_expression "*param_4" * identifier) = identifier) ;) (if_statement "if (lVar2 != -1) {\n            *param_4 = (param_3 - plVar11[-3]) + lVar2;\n            return 1;\n          }" if (parenthesized_expression "(lVar2 != -1)" ( (binary_expression "lVar2 != -1" identifier != number_literal) )) (compound_statement "{\n            *param_4 = (param_3 - plVar11[-3]) + lVar2;\n            return 1;\n          }" { (expression_statement "*param_4 = (param_3 - plVar11[-3]) + lVar2;" (assignment_expression "*param_4 = (param_3 - plVar11[-3]) + lVar2" (pointer_expression "*param_4" * identifier) = (binary_expression "(param_3 - plVar11[-3]) + lVar2" (parenthesized_expression "(param_3 - plVar11[-3])" ( (binary_expression "param_3 - plVar11[-3]" identifier - (subscript_expression "plVar11[-3]" identifier [ number_literal ])) )) + identifier)) ;) (return_statement "return 1;" return number_literal ;) })) (return_statement "return 1;" return number_literal ;) })) }))) })) })) (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 IDENT) , (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration (sized_type_specifier long) (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) (labeled_statement statement_identifier : (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT , (string_literal " string_content ") ))) ;)) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])) != IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (while_statement while (parenthesized_expression ( (binary_expression IDENT != IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])) == IDENT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) - (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) >> LIT) )) * LIT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == (char_literal ' escape_sequence ')) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT != IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (for_statement for ( ; (binary_expression (binary_expression IDENT >> IDENT) == LIT) ; (assignment_expression IDENT = (binary_expression IDENT + LIT)) ) (compound_statement { })) })) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , (binary_expression (parenthesized_expression ( (binary_expression LIT - (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) ^ LIT) ))))) )) * LIT) ))) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) - (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) < LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) (for_statement for ( ; (binary_expression IDENT != IDENT) ; (assignment_expression IDENT = (binary_expression IDENT + LIT)) ) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (while_statement while (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) })) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) })) }))) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) - (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) >> LIT) )) * LIT)) ;) })) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) })) (for_statement for ( ; (binary_expression LIT < (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) ; (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT - IDENT) )) - LIT)) ) (compound_statement { (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) >> LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ (binary_expression IDENT * LIT) ]) <= IDENT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (goto_statement goto statement_identifier ;)) })) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + (binary_expression IDENT * LIT)) + LIT)) ;) })) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression IDENT != IDENT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT < (subscript_expression IDENT [ LIT ])) )) (goto_statement goto statement_identifier ;)) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT - (subscript_expression IDENT [ LIT ])) < (subscript_expression IDENT [ LIT ])) )) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression (parenthesized_expression ( (binary_expression IDENT - (subscript_expression IDENT [ LIT ])) )) + IDENT)) ;) (return_statement return LIT ;) })) (return_statement return LIT ;) })) }))) })) })) (return_statement return LIT ;) })))
(function_definition "undefined8 FUN_0031c420(undefined8 *param_1,int param_2,long param_3,long *param_4)\n\n{\n  int iVar1;\n  long lVar2;\n  long *plVar3;\n  long lVar4;\n  long lVar5;\n  long lVar6;\n  long lVar7;\n  int *piVar8;\n  ulong uVar9;\n  ulong uVar10;\n  long *plVar11;\n  long *plVar12;\n  \n  if (param_2 == -1) {\n    FUN_0031bad0();\nLAB_0031c632:\n                    \n    FUN_001e9890("../../gold/merge.cc",0xa1,"get_output_offset");\n  }\n  piVar8 = (int *)*param_1;\n  if ((int *)param_1[1] != piVar8) {\n    iVar1 = *piVar8;\n    while (iVar1 != param_2) {\n      piVar8 = piVar8 + 4;\n      if ((int *)param_1[1] == piVar8) {\n        return 0;\n      }\n      iVar1 = *piVar8;\n    }\n    lVar2 = *(long *)(piVar8 + 2);\n    if (lVar2 != 0) {\n      plVar3 = *(long **)(lVar2 + 0x10);\n      plVar11 = *(long **)(lVar2 + 8);\n      uVar9 = ((long)plVar3 - (long)plVar11 >> 3) * -0x5555555555555555;\n      plVar12 = plVar11;\n      if (*(char *)(lVar2 + 0x20) == '\0') {\n        if (plVar11 != plVar3) {\n          lVar7 = 0x3f;\n          if (uVar9 != 0) {\n            for (; uVar9 >> lVar7 == 0; lVar7 = lVar7 + -1) {\n            }\n          }\n          FUN_00320150(plVar11,plVar3,(0x3f - (long)(int)((uint)lVar7 ^ 0x3f)) * 2);\n          if ((long)plVar3 - (long)plVar11 < 0x181) {\n            FUN_0031ddb0(plVar11,plVar3);\n          }\n          else {\n            plVar12 = plVar11 + 0x30;\n            FUN_0031ddb0(plVar11,plVar12);\n            for (; plVar12 != plVar3; plVar12 = plVar12 + 3) {\n              lVar7 = *plVar12;\n              lVar4 = plVar12[1];\n              lVar5 = plVar12[2];\n              lVar6 = plVar12[-3];\n              plVar11 = plVar12;\n              while (lVar7 < lVar6) {\n                plVar11[2] = plVar11[-1];\n                *plVar11 = plVar11[-3];\n                plVar11[1] = plVar11[-2];\n                lVar6 = plVar11[-6];\n                plVar11 = plVar11 + -3;\n              }\n              *plVar11 = lVar7;\n              plVar11[1] = lVar4;\n              plVar11[2] = lVar5;\n            }\n          }\n          plVar11 = *(long **)(lVar2 + 8);\n          uVar9 = (*(long *)(lVar2 + 0x10) - (long)plVar11 >> 3) * -0x5555555555555555;\n        }\n        *(undefined1 *)(lVar2 + 0x20) = 1;\n        plVar12 = plVar11;\n      }\n      for (; 0 < (long)uVar9; uVar9 = (uVar9 - uVar10) - 1) {\n        while( true ) {\n          uVar10 = (long)uVar9 >> 1;\n          if (plVar11[uVar10 * 3] <= param_3) break;\n          uVar9 = uVar10;\n          if (uVar10 == 0) goto LAB_0031c4f3;\n        }\n        plVar11 = plVar11 + uVar10 * 3 + 3;\n      }\nLAB_0031c4f3:\n      if (plVar11 != plVar12) {\n        if (param_3 < plVar11[-3]) goto LAB_0031c632;\n        if (param_3 - plVar11[-3] < plVar11[-2]) {\n          lVar2 = plVar11[-1];\n          *param_4 = lVar2;\n          if (lVar2 != -1) {\n            *param_4 = (param_3 - plVar11[-3]) + lVar2;\n            return 1;\n          }\n          return 1;\n        }\n      }\n    }\n  }\n  return 0;\n}" (type_identifier "undefined8") (function_declarator "FUN_0031c420(undefined8 *param_1,int param_2,long param_3,long *param_4)" (identifier "FUN_0031c420") (parameter_list "(undefined8 *param_1,int param_2,long param_3,long *param_4)" (( "(") (parameter_declaration "undefined8 *param_1" (type_identifier "undefined8") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "int param_2" (primitive_type "int") (identifier "param_2")) (, ",") (parameter_declaration "long param_3" (sized_type_specifier "long" (long "long")) (identifier "param_3")) (, ",") (parameter_declaration "long *param_4" (sized_type_specifier "long" (long "long")) (pointer_declarator "*param_4" (* "*") (identifier "param_4"))) () ")"))) (compound_statement "{\n  int iVar1;\n  long lVar2;\n  long *plVar3;\n  long lVar4;\n  long lVar5;\n  long lVar6;\n  long lVar7;\n  int *piVar8;\n  ulong uVar9;\n  ulong uVar10;\n  long *plVar11;\n  long *plVar12;\n  \n  if (param_2 == -1) {\n    FUN_0031bad0();\nLAB_0031c632:\n                    \n    FUN_001e9890("../../gold/merge.cc",0xa1,"get_output_offset");\n  }\n  piVar8 = (int *)*param_1;\n  if ((int *)param_1[1] != piVar8) {\n    iVar1 = *piVar8;\n    while (iVar1 != param_2) {\n      piVar8 = piVar8 + 4;\n      if ((int *)param_1[1] == piVar8) {\n        return 0;\n      }\n      iVar1 = *piVar8;\n    }\n    lVar2 = *(long *)(piVar8 + 2);\n    if (lVar2 != 0) {\n      plVar3 = *(long **)(lVar2 + 0x10);\n      plVar11 = *(long **)(lVar2 + 8);\n      uVar9 = ((long)plVar3 - (long)plVar11 >> 3) * -0x5555555555555555;\n      plVar12 = plVar11;\n      if (*(char *)(lVar2 + 0x20) == '\0') {\n        if (plVar11 != plVar3) {\n          lVar7 = 0x3f;\n          if (uVar9 != 0) {\n            for (; uVar9 >> lVar7 == 0; lVar7 = lVar7 + -1) {\n            }\n          }\n          FUN_00320150(plVar11,plVar3,(0x3f - (long)(int)((uint)lVar7 ^ 0x3f)) * 2);\n          if ((long)plVar3 - (long)plVar11 < 0x181) {\n            FUN_0031ddb0(plVar11,plVar3);\n          }\n          else {\n            plVar12 = plVar11 + 0x30;\n            FUN_0031ddb0(plVar11,plVar12);\n            for (; plVar12 != plVar3; plVar12 = plVar12 + 3) {\n              lVar7 = *plVar12;\n              lVar4 = plVar12[1];\n              lVar5 = plVar12[2];\n              lVar6 = plVar12[-3];\n              plVar11 = plVar12;\n              while (lVar7 < lVar6) {\n                plVar11[2] = plVar11[-1];\n                *plVar11 = plVar11[-3];\n                plVar11[1] = plVar11[-2];\n                lVar6 = plVar11[-6];\n                plVar11 = plVar11 + -3;\n              }\n              *plVar11 = lVar7;\n              plVar11[1] = lVar4;\n              plVar11[2] = lVar5;\n            }\n          }\n          plVar11 = *(long **)(lVar2 + 8);\n          uVar9 = (*(long *)(lVar2 + 0x10) - (long)plVar11 >> 3) * -0x5555555555555555;\n        }\n        *(undefined1 *)(lVar2 + 0x20) = 1;\n        plVar12 = plVar11;\n      }\n      for (; 0 < (long)uVar9; uVar9 = (uVar9 - uVar10) - 1) {\n        while( true ) {\n          uVar10 = (long)uVar9 >> 1;\n          if (plVar11[uVar10 * 3] <= param_3) break;\n          uVar9 = uVar10;\n          if (uVar10 == 0) goto LAB_0031c4f3;\n        }\n        plVar11 = plVar11 + uVar10 * 3 + 3;\n      }\nLAB_0031c4f3:\n      if (plVar11 != plVar12) {\n        if (param_3 < plVar11[-3]) goto LAB_0031c632;\n        if (param_3 - plVar11[-3] < plVar11[-2]) {\n          lVar2 = plVar11[-1];\n          *param_4 = lVar2;\n          if (lVar2 != -1) {\n            *param_4 = (param_3 - plVar11[-3]) + lVar2;\n            return 1;\n          }\n          return 1;\n        }\n      }\n    }\n  }\n  return 0;\n}" ({ "{") (declaration "int iVar1;" (primitive_type "int") (identifier "iVar1") (; ";")) (declaration "long lVar2;" (sized_type_specifier "long" (long "long")) (identifier "lVar2") (; ";")) (declaration "long *plVar3;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar3" (* "*") (identifier "plVar3")) (; ";")) (declaration "long lVar4;" (sized_type_specifier "long" (long "long")) (identifier "lVar4") (; ";")) (declaration "long lVar5;" (sized_type_specifier "long" (long "long")) (identifier "lVar5") (; ";")) (declaration "long lVar6;" (sized_type_specifier "long" (long "long")) (identifier "lVar6") (; ";")) (declaration "long lVar7;" (sized_type_specifier "long" (long "long")) (identifier "lVar7") (; ";")) (declaration "int *piVar8;" (primitive_type "int") (pointer_declarator "*piVar8" (* "*") (identifier "piVar8")) (; ";")) (declaration "ulong uVar9;" (type_identifier "ulong") (identifier "uVar9") (; ";")) (declaration "ulong uVar10;" (type_identifier "ulong") (identifier "uVar10") (; ";")) (declaration "long *plVar11;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar11" (* "*") (identifier "plVar11")) (; ";")) (declaration "long *plVar12;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar12" (* "*") (identifier "plVar12")) (; ";")) (if_statement "if (param_2 == -1) {\n    FUN_0031bad0();\nLAB_0031c632:\n                    \n    FUN_001e9890("../../gold/merge.cc",0xa1,"get_output_offset");\n  }" (if "if") (parenthesized_expression "(param_2 == -1)" (( "(") (binary_expression "param_2 == -1" (identifier "param_2") (== "==") (number_literal "-1")) () ")")) (compound_statement "{\n    FUN_0031bad0();\nLAB_0031c632:\n                    \n    FUN_001e9890("../../gold/merge.cc",0xa1,"get_output_offset");\n  }" ({ "{") (expression_statement "FUN_0031bad0();" (call_expression "FUN_0031bad0()" (identifier "FUN_0031bad0") (argument_list "()" (( "(") () ")"))) (; ";")) (labeled_statement "LAB_0031c632:\n                    \n    FUN_001e9890("../../gold/merge.cc",0xa1,"get_output_offset");" (statement_identifier "LAB_0031c632") (: ":") (expression_statement "FUN_001e9890("../../gold/merge.cc",0xa1,"get_output_offset");" (call_expression "FUN_001e9890("../../gold/merge.cc",0xa1,"get_output_offset")" (identifier "FUN_001e9890") (argument_list "("../../gold/merge.cc",0xa1,"get_output_offset")" (( "(") (string_literal ""../../gold/merge.cc"" (" """) (string_content "../../gold/merge.cc") (" """)) (, ",") (number_literal "0xa1") (, ",") (string_literal ""get_output_offset"" (" """) (string_content "get_output_offset") (" """)) () ")"))) (; ";"))) (} "}"))) (expression_statement "piVar8 = (int *)*param_1;" (assignment_expression "piVar8 = (int *)*param_1" (identifier "piVar8") (= "=") (cast_expression "(int *)*param_1" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_1" (* "*") (identifier "param_1")))) (; ";")) (if_statement "if ((int *)param_1[1] != piVar8) {\n    iVar1 = *piVar8;\n    while (iVar1 != param_2) {\n      piVar8 = piVar8 + 4;\n      if ((int *)param_1[1] == piVar8) {\n        return 0;\n      }\n      iVar1 = *piVar8;\n    }\n    lVar2 = *(long *)(piVar8 + 2);\n    if (lVar2 != 0) {\n      plVar3 = *(long **)(lVar2 + 0x10);\n      plVar11 = *(long **)(lVar2 + 8);\n      uVar9 = ((long)plVar3 - (long)plVar11 >> 3) * -0x5555555555555555;\n      plVar12 = plVar11;\n      if (*(char *)(lVar2 + 0x20) == '\0') {\n        if (plVar11 != plVar3) {\n          lVar7 = 0x3f;\n          if (uVar9 != 0) {\n            for (; uVar9 >> lVar7 == 0; lVar7 = lVar7 + -1) {\n            }\n          }\n          FUN_00320150(plVar11,plVar3,(0x3f - (long)(int)((uint)lVar7 ^ 0x3f)) * 2);\n          if ((long)plVar3 - (long)plVar11 < 0x181) {\n            FUN_0031ddb0(plVar11,plVar3);\n          }\n          else {\n            plVar12 = plVar11 + 0x30;\n            FUN_0031ddb0(plVar11,plVar12);\n            for (; plVar12 != plVar3; plVar12 = plVar12 + 3) {\n              lVar7 = *plVar12;\n              lVar4 = plVar12[1];\n              lVar5 = plVar12[2];\n              lVar6 = plVar12[-3];\n              plVar11 = plVar12;\n              while (lVar7 < lVar6) {\n                plVar11[2] = plVar11[-1];\n                *plVar11 = plVar11[-3];\n                plVar11[1] = plVar11[-2];\n                lVar6 = plVar11[-6];\n                plVar11 = plVar11 + -3;\n              }\n              *plVar11 = lVar7;\n              plVar11[1] = lVar4;\n              plVar11[2] = lVar5;\n            }\n          }\n          plVar11 = *(long **)(lVar2 + 8);\n          uVar9 = (*(long *)(lVar2 + 0x10) - (long)plVar11 >> 3) * -0x5555555555555555;\n        }\n        *(undefined1 *)(lVar2 + 0x20) = 1;\n        plVar12 = plVar11;\n      }\n      for (; 0 < (long)uVar9; uVar9 = (uVar9 - uVar10) - 1) {\n        while( true ) {\n          uVar10 = (long)uVar9 >> 1;\n          if (plVar11[uVar10 * 3] <= param_3) break;\n          uVar9 = uVar10;\n          if (uVar10 == 0) goto LAB_0031c4f3;\n        }\n        plVar11 = plVar11 + uVar10 * 3 + 3;\n      }\nLAB_0031c4f3:\n      if (plVar11 != plVar12) {\n        if (param_3 < plVar11[-3]) goto LAB_0031c632;\n        if (param_3 - plVar11[-3] < plVar11[-2]) {\n          lVar2 = plVar11[-1];\n          *param_4 = lVar2;\n          if (lVar2 != -1) {\n            *param_4 = (param_3 - plVar11[-3]) + lVar2;\n            return 1;\n          }\n          return 1;\n        }\n      }\n    }\n  }" (if "if") (parenthesized_expression "((int *)param_1[1] != piVar8)" (( "(") (binary_expression "(int *)param_1[1] != piVar8" (cast_expression "(int *)param_1[1]" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]"))) (!= "!=") (identifier "piVar8")) () ")")) (compound_statement "{\n    iVar1 = *piVar8;\n    while (iVar1 != param_2) {\n      piVar8 = piVar8 + 4;\n      if ((int *)param_1[1] == piVar8) {\n        return 0;\n      }\n      iVar1 = *piVar8;\n    }\n    lVar2 = *(long *)(piVar8 + 2);\n    if (lVar2 != 0) {\n      plVar3 = *(long **)(lVar2 + 0x10);\n      plVar11 = *(long **)(lVar2 + 8);\n      uVar9 = ((long)plVar3 - (long)plVar11 >> 3) * -0x5555555555555555;\n      plVar12 = plVar11;\n      if (*(char *)(lVar2 + 0x20) == '\0') {\n        if (plVar11 != plVar3) {\n          lVar7 = 0x3f;\n          if (uVar9 != 0) {\n            for (; uVar9 >> lVar7 == 0; lVar7 = lVar7 + -1) {\n            }\n          }\n          FUN_00320150(plVar11,plVar3,(0x3f - (long)(int)((uint)lVar7 ^ 0x3f)) * 2);\n          if ((long)plVar3 - (long)plVar11 < 0x181) {\n            FUN_0031ddb0(plVar11,plVar3);\n          }\n          else {\n            plVar12 = plVar11 + 0x30;\n            FUN_0031ddb0(plVar11,plVar12);\n            for (; plVar12 != plVar3; plVar12 = plVar12 + 3) {\n              lVar7 = *plVar12;\n              lVar4 = plVar12[1];\n              lVar5 = plVar12[2];\n              lVar6 = plVar12[-3];\n              plVar11 = plVar12;\n              while (lVar7 < lVar6) {\n                plVar11[2] = plVar11[-1];\n                *plVar11 = plVar11[-3];\n                plVar11[1] = plVar11[-2];\n                lVar6 = plVar11[-6];\n                plVar11 = plVar11 + -3;\n              }\n              *plVar11 = lVar7;\n              plVar11[1] = lVar4;\n              plVar11[2] = lVar5;\n            }\n          }\n          plVar11 = *(long **)(lVar2 + 8);\n          uVar9 = (*(long *)(lVar2 + 0x10) - (long)plVar11 >> 3) * -0x5555555555555555;\n        }\n        *(undefined1 *)(lVar2 + 0x20) = 1;\n        plVar12 = plVar11;\n      }\n      for (; 0 < (long)uVar9; uVar9 = (uVar9 - uVar10) - 1) {\n        while( true ) {\n          uVar10 = (long)uVar9 >> 1;\n          if (plVar11[uVar10 * 3] <= param_3) break;\n          uVar9 = uVar10;\n          if (uVar10 == 0) goto LAB_0031c4f3;\n        }\n        plVar11 = plVar11 + uVar10 * 3 + 3;\n      }\nLAB_0031c4f3:\n      if (plVar11 != plVar12) {\n        if (param_3 < plVar11[-3]) goto LAB_0031c632;\n        if (param_3 - plVar11[-3] < plVar11[-2]) {\n          lVar2 = plVar11[-1];\n          *param_4 = lVar2;\n          if (lVar2 != -1) {\n            *param_4 = (param_3 - plVar11[-3]) + lVar2;\n            return 1;\n          }\n          return 1;\n        }\n      }\n    }\n  }" ({ "{") (expression_statement "iVar1 = *piVar8;" (assignment_expression "iVar1 = *piVar8" (identifier "iVar1") (= "=") (pointer_expression "*piVar8" (* "*") (identifier "piVar8"))) (; ";")) (while_statement "while (iVar1 != param_2) {\n      piVar8 = piVar8 + 4;\n      if ((int *)param_1[1] == piVar8) {\n        return 0;\n      }\n      iVar1 = *piVar8;\n    }" (while "while") (parenthesized_expression "(iVar1 != param_2)" (( "(") (binary_expression "iVar1 != param_2" (identifier "iVar1") (!= "!=") (identifier "param_2")) () ")")) (compound_statement "{\n      piVar8 = piVar8 + 4;\n      if ((int *)param_1[1] == piVar8) {\n        return 0;\n      }\n      iVar1 = *piVar8;\n    }" ({ "{") (expression_statement "piVar8 = piVar8 + 4;" (assignment_expression "piVar8 = piVar8 + 4" (identifier "piVar8") (= "=") (binary_expression "piVar8 + 4" (identifier "piVar8") (+ "+") (number_literal "4"))) (; ";")) (if_statement "if ((int *)param_1[1] == piVar8) {\n        return 0;\n      }" (if "if") (parenthesized_expression "((int *)param_1[1] == piVar8)" (( "(") (binary_expression "(int *)param_1[1] == piVar8" (cast_expression "(int *)param_1[1]" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]"))) (== "==") (identifier "piVar8")) () ")")) (compound_statement "{\n        return 0;\n      }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "iVar1 = *piVar8;" (assignment_expression "iVar1 = *piVar8" (identifier "iVar1") (= "=") (pointer_expression "*piVar8" (* "*") (identifier "piVar8"))) (; ";")) (} "}"))) (expression_statement "lVar2 = *(long *)(piVar8 + 2);" (assignment_expression "lVar2 = *(long *)(piVar8 + 2)" (identifier "lVar2") (= "=") (pointer_expression "*(long *)(piVar8 + 2)" (* "*") (cast_expression "(long *)(piVar8 + 2)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(piVar8 + 2)" (( "(") (binary_expression "piVar8 + 2" (identifier "piVar8") (+ "+") (number_literal "2")) () ")"))))) (; ";")) (if_statement "if (lVar2 != 0) {\n      plVar3 = *(long **)(lVar2 + 0x10);\n      plVar11 = *(long **)(lVar2 + 8);\n      uVar9 = ((long)plVar3 - (long)plVar11 >> 3) * -0x5555555555555555;\n      plVar12 = plVar11;\n      if (*(char *)(lVar2 + 0x20) == '\0') {\n        if (plVar11 != plVar3) {\n          lVar7 = 0x3f;\n          if (uVar9 != 0) {\n            for (; uVar9 >> lVar7 == 0; lVar7 = lVar7 + -1) {\n            }\n          }\n          FUN_00320150(plVar11,plVar3,(0x3f - (long)(int)((uint)lVar7 ^ 0x3f)) * 2);\n          if ((long)plVar3 - (long)plVar11 < 0x181) {\n            FUN_0031ddb0(plVar11,plVar3);\n          }\n          else {\n            plVar12 = plVar11 + 0x30;\n            FUN_0031ddb0(plVar11,plVar12);\n            for (; plVar12 != plVar3; plVar12 = plVar12 + 3) {\n              lVar7 = *plVar12;\n              lVar4 = plVar12[1];\n              lVar5 = plVar12[2];\n              lVar6 = plVar12[-3];\n              plVar11 = plVar12;\n              while (lVar7 < lVar6) {\n                plVar11[2] = plVar11[-1];\n                *plVar11 = plVar11[-3];\n                plVar11[1] = plVar11[-2];\n                lVar6 = plVar11[-6];\n                plVar11 = plVar11 + -3;\n              }\n              *plVar11 = lVar7;\n              plVar11[1] = lVar4;\n              plVar11[2] = lVar5;\n            }\n          }\n          plVar11 = *(long **)(lVar2 + 8);\n          uVar9 = (*(long *)(lVar2 + 0x10) - (long)plVar11 >> 3) * -0x5555555555555555;\n        }\n        *(undefined1 *)(lVar2 + 0x20) = 1;\n        plVar12 = plVar11;\n      }\n      for (; 0 < (long)uVar9; uVar9 = (uVar9 - uVar10) - 1) {\n        while( true ) {\n          uVar10 = (long)uVar9 >> 1;\n          if (plVar11[uVar10 * 3] <= param_3) break;\n          uVar9 = uVar10;\n          if (uVar10 == 0) goto LAB_0031c4f3;\n        }\n        plVar11 = plVar11 + uVar10 * 3 + 3;\n      }\nLAB_0031c4f3:\n      if (plVar11 != plVar12) {\n        if (param_3 < plVar11[-3]) goto LAB_0031c632;\n        if (param_3 - plVar11[-3] < plVar11[-2]) {\n          lVar2 = plVar11[-1];\n          *param_4 = lVar2;\n          if (lVar2 != -1) {\n            *param_4 = (param_3 - plVar11[-3]) + lVar2;\n            return 1;\n          }\n          return 1;\n        }\n      }\n    }" (if "if") (parenthesized_expression "(lVar2 != 0)" (( "(") (binary_expression "lVar2 != 0" (identifier "lVar2") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      plVar3 = *(long **)(lVar2 + 0x10);\n      plVar11 = *(long **)(lVar2 + 8);\n      uVar9 = ((long)plVar3 - (long)plVar11 >> 3) * -0x5555555555555555;\n      plVar12 = plVar11;\n      if (*(char *)(lVar2 + 0x20) == '\0') {\n        if (plVar11 != plVar3) {\n          lVar7 = 0x3f;\n          if (uVar9 != 0) {\n            for (; uVar9 >> lVar7 == 0; lVar7 = lVar7 + -1) {\n            }\n          }\n          FUN_00320150(plVar11,plVar3,(0x3f - (long)(int)((uint)lVar7 ^ 0x3f)) * 2);\n          if ((long)plVar3 - (long)plVar11 < 0x181) {\n            FUN_0031ddb0(plVar11,plVar3);\n          }\n          else {\n            plVar12 = plVar11 + 0x30;\n            FUN_0031ddb0(plVar11,plVar12);\n            for (; plVar12 != plVar3; plVar12 = plVar12 + 3) {\n              lVar7 = *plVar12;\n              lVar4 = plVar12[1];\n              lVar5 = plVar12[2];\n              lVar6 = plVar12[-3];\n              plVar11 = plVar12;\n              while (lVar7 < lVar6) {\n                plVar11[2] = plVar11[-1];\n                *plVar11 = plVar11[-3];\n                plVar11[1] = plVar11[-2];\n                lVar6 = plVar11[-6];\n                plVar11 = plVar11 + -3;\n              }\n              *plVar11 = lVar7;\n              plVar11[1] = lVar4;\n              plVar11[2] = lVar5;\n            }\n          }\n          plVar11 = *(long **)(lVar2 + 8);\n          uVar9 = (*(long *)(lVar2 + 0x10) - (long)plVar11 >> 3) * -0x5555555555555555;\n        }\n        *(undefined1 *)(lVar2 + 0x20) = 1;\n        plVar12 = plVar11;\n      }\n      for (; 0 < (long)uVar9; uVar9 = (uVar9 - uVar10) - 1) {\n        while( true ) {\n          uVar10 = (long)uVar9 >> 1;\n          if (plVar11[uVar10 * 3] <= param_3) break;\n          uVar9 = uVar10;\n          if (uVar10 == 0) goto LAB_0031c4f3;\n        }\n        plVar11 = plVar11 + uVar10 * 3 + 3;\n      }\nLAB_0031c4f3:\n      if (plVar11 != plVar12) {\n        if (param_3 < plVar11[-3]) goto LAB_0031c632;\n        if (param_3 - plVar11[-3] < plVar11[-2]) {\n          lVar2 = plVar11[-1];\n          *param_4 = lVar2;\n          if (lVar2 != -1) {\n            *param_4 = (param_3 - plVar11[-3]) + lVar2;\n            return 1;\n          }\n          return 1;\n        }\n      }\n    }" ({ "{") (expression_statement "plVar3 = *(long **)(lVar2 + 0x10);" (assignment_expression "plVar3 = *(long **)(lVar2 + 0x10)" (identifier "plVar3") (= "=") (pointer_expression "*(long **)(lVar2 + 0x10)" (* "*") (cast_expression "(long **)(lVar2 + 0x10)" (( "(") (type_descriptor "long **" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(lVar2 + 0x10)" (( "(") (binary_expression "lVar2 + 0x10" (identifier "lVar2") (+ "+") (number_literal "0x10")) () ")"))))) (; ";")) (expression_statement "plVar11 = *(long **)(lVar2 + 8);" (assignment_expression "plVar11 = *(long **)(lVar2 + 8)" (identifier "plVar11") (= "=") (pointer_expression "*(long **)(lVar2 + 8)" (* "*") (cast_expression "(long **)(lVar2 + 8)" (( "(") (type_descriptor "long **" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(lVar2 + 8)" (( "(") (binary_expression "lVar2 + 8" (identifier "lVar2") (+ "+") (number_literal "8")) () ")"))))) (; ";")) (expression_statement "uVar9 = ((long)plVar3 - (long)plVar11 >> 3) * -0x5555555555555555;" (assignment_expression "uVar9 = ((long)plVar3 - (long)plVar11 >> 3) * -0x5555555555555555" (identifier "uVar9") (= "=") (binary_expression "((long)plVar3 - (long)plVar11 >> 3) * -0x5555555555555555" (parenthesized_expression "((long)plVar3 - (long)plVar11 >> 3)" (( "(") (binary_expression "(long)plVar3 - (long)plVar11 >> 3" (binary_expression "(long)plVar3 - (long)plVar11" (cast_expression "(long)plVar3" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "plVar3")) (- "-") (cast_expression "(long)plVar11" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "plVar11"))) (>> ">>") (number_literal "3")) () ")")) (* "*") (number_literal "-0x5555555555555555"))) (; ";")) (expression_statement "plVar12 = plVar11;" (assignment_expression "plVar12 = plVar11" (identifier "plVar12") (= "=") (identifier "plVar11")) (; ";")) (if_statement "if (*(char *)(lVar2 + 0x20) == '\0') {\n        if (plVar11 != plVar3) {\n          lVar7 = 0x3f;\n          if (uVar9 != 0) {\n            for (; uVar9 >> lVar7 == 0; lVar7 = lVar7 + -1) {\n            }\n          }\n          FUN_00320150(plVar11,plVar3,(0x3f - (long)(int)((uint)lVar7 ^ 0x3f)) * 2);\n          if ((long)plVar3 - (long)plVar11 < 0x181) {\n            FUN_0031ddb0(plVar11,plVar3);\n          }\n          else {\n            plVar12 = plVar11 + 0x30;\n            FUN_0031ddb0(plVar11,plVar12);\n            for (; plVar12 != plVar3; plVar12 = plVar12 + 3) {\n              lVar7 = *plVar12;\n              lVar4 = plVar12[1];\n              lVar5 = plVar12[2];\n              lVar6 = plVar12[-3];\n              plVar11 = plVar12;\n              while (lVar7 < lVar6) {\n                plVar11[2] = plVar11[-1];\n                *plVar11 = plVar11[-3];\n                plVar11[1] = plVar11[-2];\n                lVar6 = plVar11[-6];\n                plVar11 = plVar11 + -3;\n              }\n              *plVar11 = lVar7;\n              plVar11[1] = lVar4;\n              plVar11[2] = lVar5;\n            }\n          }\n          plVar11 = *(long **)(lVar2 + 8);\n          uVar9 = (*(long *)(lVar2 + 0x10) - (long)plVar11 >> 3) * -0x5555555555555555;\n        }\n        *(undefined1 *)(lVar2 + 0x20) = 1;\n        plVar12 = plVar11;\n      }" (if "if") (parenthesized_expression "(*(char *)(lVar2 + 0x20) == '\0')" (( "(") (binary_expression "*(char *)(lVar2 + 0x20) == '\0'" (pointer_expression "*(char *)(lVar2 + 0x20)" (* "*") (cast_expression "(char *)(lVar2 + 0x20)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar2 + 0x20)" (( "(") (binary_expression "lVar2 + 0x20" (identifier "lVar2") (+ "+") (number_literal "0x20")) () ")")))) (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n        if (plVar11 != plVar3) {\n          lVar7 = 0x3f;\n          if (uVar9 != 0) {\n            for (; uVar9 >> lVar7 == 0; lVar7 = lVar7 + -1) {\n            }\n          }\n          FUN_00320150(plVar11,plVar3,(0x3f - (long)(int)((uint)lVar7 ^ 0x3f)) * 2);\n          if ((long)plVar3 - (long)plVar11 < 0x181) {\n            FUN_0031ddb0(plVar11,plVar3);\n          }\n          else {\n            plVar12 = plVar11 + 0x30;\n            FUN_0031ddb0(plVar11,plVar12);\n            for (; plVar12 != plVar3; plVar12 = plVar12 + 3) {\n              lVar7 = *plVar12;\n              lVar4 = plVar12[1];\n              lVar5 = plVar12[2];\n              lVar6 = plVar12[-3];\n              plVar11 = plVar12;\n              while (lVar7 < lVar6) {\n                plVar11[2] = plVar11[-1];\n                *plVar11 = plVar11[-3];\n                plVar11[1] = plVar11[-2];\n                lVar6 = plVar11[-6];\n                plVar11 = plVar11 + -3;\n              }\n              *plVar11 = lVar7;\n              plVar11[1] = lVar4;\n              plVar11[2] = lVar5;\n            }\n          }\n          plVar11 = *(long **)(lVar2 + 8);\n          uVar9 = (*(long *)(lVar2 + 0x10) - (long)plVar11 >> 3) * -0x5555555555555555;\n        }\n        *(undefined1 *)(lVar2 + 0x20) = 1;\n        plVar12 = plVar11;\n      }" ({ "{") (if_statement "if (plVar11 != plVar3) {\n          lVar7 = 0x3f;\n          if (uVar9 != 0) {\n            for (; uVar9 >> lVar7 == 0; lVar7 = lVar7 + -1) {\n            }\n          }\n          FUN_00320150(plVar11,plVar3,(0x3f - (long)(int)((uint)lVar7 ^ 0x3f)) * 2);\n          if ((long)plVar3 - (long)plVar11 < 0x181) {\n            FUN_0031ddb0(plVar11,plVar3);\n          }\n          else {\n            plVar12 = plVar11 + 0x30;\n            FUN_0031ddb0(plVar11,plVar12);\n            for (; plVar12 != plVar3; plVar12 = plVar12 + 3) {\n              lVar7 = *plVar12;\n              lVar4 = plVar12[1];\n              lVar5 = plVar12[2];\n              lVar6 = plVar12[-3];\n              plVar11 = plVar12;\n              while (lVar7 < lVar6) {\n                plVar11[2] = plVar11[-1];\n                *plVar11 = plVar11[-3];\n                plVar11[1] = plVar11[-2];\n                lVar6 = plVar11[-6];\n                plVar11 = plVar11 + -3;\n              }\n              *plVar11 = lVar7;\n              plVar11[1] = lVar4;\n              plVar11[2] = lVar5;\n            }\n          }\n          plVar11 = *(long **)(lVar2 + 8);\n          uVar9 = (*(long *)(lVar2 + 0x10) - (long)plVar11 >> 3) * -0x5555555555555555;\n        }" (if "if") (parenthesized_expression "(plVar11 != plVar3)" (( "(") (binary_expression "plVar11 != plVar3" (identifier "plVar11") (!= "!=") (identifier "plVar3")) () ")")) (compound_statement "{\n          lVar7 = 0x3f;\n          if (uVar9 != 0) {\n            for (; uVar9 >> lVar7 == 0; lVar7 = lVar7 + -1) {\n            }\n          }\n          FUN_00320150(plVar11,plVar3,(0x3f - (long)(int)((uint)lVar7 ^ 0x3f)) * 2);\n          if ((long)plVar3 - (long)plVar11 < 0x181) {\n            FUN_0031ddb0(plVar11,plVar3);\n          }\n          else {\n            plVar12 = plVar11 + 0x30;\n            FUN_0031ddb0(plVar11,plVar12);\n            for (; plVar12 != plVar3; plVar12 = plVar12 + 3) {\n              lVar7 = *plVar12;\n              lVar4 = plVar12[1];\n              lVar5 = plVar12[2];\n              lVar6 = plVar12[-3];\n              plVar11 = plVar12;\n              while (lVar7 < lVar6) {\n                plVar11[2] = plVar11[-1];\n                *plVar11 = plVar11[-3];\n                plVar11[1] = plVar11[-2];\n                lVar6 = plVar11[-6];\n                plVar11 = plVar11 + -3;\n              }\n              *plVar11 = lVar7;\n              plVar11[1] = lVar4;\n              plVar11[2] = lVar5;\n            }\n          }\n          plVar11 = *(long **)(lVar2 + 8);\n          uVar9 = (*(long *)(lVar2 + 0x10) - (long)plVar11 >> 3) * -0x5555555555555555;\n        }" ({ "{") (expression_statement "lVar7 = 0x3f;" (assignment_expression "lVar7 = 0x3f" (identifier "lVar7") (= "=") (number_literal "0x3f")) (; ";")) (if_statement "if (uVar9 != 0) {\n            for (; uVar9 >> lVar7 == 0; lVar7 = lVar7 + -1) {\n            }\n          }" (if "if") (parenthesized_expression "(uVar9 != 0)" (( "(") (binary_expression "uVar9 != 0" (identifier "uVar9") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n            for (; uVar9 >> lVar7 == 0; lVar7 = lVar7 + -1) {\n            }\n          }" ({ "{") (for_statement "for (; uVar9 >> lVar7 == 0; lVar7 = lVar7 + -1) {\n            }" (for "for") (( "(") (; ";") (binary_expression "uVar9 >> lVar7 == 0" (binary_expression "uVar9 >> lVar7" (identifier "uVar9") (>> ">>") (identifier "lVar7")) (== "==") (number_literal "0")) (; ";") (assignment_expression "lVar7 = lVar7 + -1" (identifier "lVar7") (= "=") (binary_expression "lVar7 + -1" (identifier "lVar7") (+ "+") (number_literal "-1"))) () ")") (compound_statement "{\n            }" ({ "{") (} "}"))) (} "}"))) (expression_statement "FUN_00320150(plVar11,plVar3,(0x3f - (long)(int)((uint)lVar7 ^ 0x3f)) * 2);" (call_expression "FUN_00320150(plVar11,plVar3,(0x3f - (long)(int)((uint)lVar7 ^ 0x3f)) * 2)" (identifier "FUN_00320150") (argument_list "(plVar11,plVar3,(0x3f - (long)(int)((uint)lVar7 ^ 0x3f)) * 2)" (( "(") (identifier "plVar11") (, ",") (identifier "plVar3") (, ",") (binary_expression "(0x3f - (long)(int)((uint)lVar7 ^ 0x3f)) * 2" (parenthesized_expression "(0x3f - (long)(int)((uint)lVar7 ^ 0x3f))" (( "(") (binary_expression "0x3f - (long)(int)((uint)lVar7 ^ 0x3f)" (number_literal "0x3f") (- "-") (cast_expression "(long)(int)((uint)lVar7 ^ 0x3f)" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (cast_expression "(int)((uint)lVar7 ^ 0x3f)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "((uint)lVar7 ^ 0x3f)" (( "(") (binary_expression "(uint)lVar7 ^ 0x3f" (cast_expression "(uint)lVar7" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "lVar7")) (^ "^") (number_literal "0x3f")) () ")"))))) () ")")) (* "*") (number_literal "2")) () ")"))) (; ";")) (if_statement "if ((long)plVar3 - (long)plVar11 < 0x181) {\n            FUN_0031ddb0(plVar11,plVar3);\n          }\n          else {\n            plVar12 = plVar11 + 0x30;\n            FUN_0031ddb0(plVar11,plVar12);\n            for (; plVar12 != plVar3; plVar12 = plVar12 + 3) {\n              lVar7 = *plVar12;\n              lVar4 = plVar12[1];\n              lVar5 = plVar12[2];\n              lVar6 = plVar12[-3];\n              plVar11 = plVar12;\n              while (lVar7 < lVar6) {\n                plVar11[2] = plVar11[-1];\n                *plVar11 = plVar11[-3];\n                plVar11[1] = plVar11[-2];\n                lVar6 = plVar11[-6];\n                plVar11 = plVar11 + -3;\n              }\n              *plVar11 = lVar7;\n              plVar11[1] = lVar4;\n              plVar11[2] = lVar5;\n            }\n          }" (if "if") (parenthesized_expression "((long)plVar3 - (long)plVar11 < 0x181)" (( "(") (binary_expression "(long)plVar3 - (long)plVar11 < 0x181" (binary_expression "(long)plVar3 - (long)plVar11" (cast_expression "(long)plVar3" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "plVar3")) (- "-") (cast_expression "(long)plVar11" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "plVar11"))) (< "<") (number_literal "0x181")) () ")")) (compound_statement "{\n            FUN_0031ddb0(plVar11,plVar3);\n          }" ({ "{") (expression_statement "FUN_0031ddb0(plVar11,plVar3);" (call_expression "FUN_0031ddb0(plVar11,plVar3)" (identifier "FUN_0031ddb0") (argument_list "(plVar11,plVar3)" (( "(") (identifier "plVar11") (, ",") (identifier "plVar3") () ")"))) (; ";")) (} "}")) (else_clause "else {\n            plVar12 = plVar11 + 0x30;\n            FUN_0031ddb0(plVar11,plVar12);\n            for (; plVar12 != plVar3; plVar12 = plVar12 + 3) {\n              lVar7 = *plVar12;\n              lVar4 = plVar12[1];\n              lVar5 = plVar12[2];\n              lVar6 = plVar12[-3];\n              plVar11 = plVar12;\n              while (lVar7 < lVar6) {\n                plVar11[2] = plVar11[-1];\n                *plVar11 = plVar11[-3];\n                plVar11[1] = plVar11[-2];\n                lVar6 = plVar11[-6];\n                plVar11 = plVar11 + -3;\n              }\n              *plVar11 = lVar7;\n              plVar11[1] = lVar4;\n              plVar11[2] = lVar5;\n            }\n          }" (else "else") (compound_statement "{\n            plVar12 = plVar11 + 0x30;\n            FUN_0031ddb0(plVar11,plVar12);\n            for (; plVar12 != plVar3; plVar12 = plVar12 + 3) {\n              lVar7 = *plVar12;\n              lVar4 = plVar12[1];\n              lVar5 = plVar12[2];\n              lVar6 = plVar12[-3];\n              plVar11 = plVar12;\n              while (lVar7 < lVar6) {\n                plVar11[2] = plVar11[-1];\n                *plVar11 = plVar11[-3];\n                plVar11[1] = plVar11[-2];\n                lVar6 = plVar11[-6];\n                plVar11 = plVar11 + -3;\n              }\n              *plVar11 = lVar7;\n              plVar11[1] = lVar4;\n              plVar11[2] = lVar5;\n            }\n          }" ({ "{") (expression_statement "plVar12 = plVar11 + 0x30;" (assignment_expression "plVar12 = plVar11 + 0x30" (identifier "plVar12") (= "=") (binary_expression "plVar11 + 0x30" (identifier "plVar11") (+ "+") (number_literal "0x30"))) (; ";")) (expression_statement "FUN_0031ddb0(plVar11,plVar12);" (call_expression "FUN_0031ddb0(plVar11,plVar12)" (identifier "FUN_0031ddb0") (argument_list "(plVar11,plVar12)" (( "(") (identifier "plVar11") (, ",") (identifier "plVar12") () ")"))) (; ";")) (for_statement "for (; plVar12 != plVar3; plVar12 = plVar12 + 3) {\n              lVar7 = *plVar12;\n              lVar4 = plVar12[1];\n              lVar5 = plVar12[2];\n              lVar6 = plVar12[-3];\n              plVar11 = plVar12;\n              while (lVar7 < lVar6) {\n                plVar11[2] = plVar11[-1];\n                *plVar11 = plVar11[-3];\n                plVar11[1] = plVar11[-2];\n                lVar6 = plVar11[-6];\n                plVar11 = plVar11 + -3;\n              }\n              *plVar11 = lVar7;\n              plVar11[1] = lVar4;\n              plVar11[2] = lVar5;\n            }" (for "for") (( "(") (; ";") (binary_expression "plVar12 != plVar3" (identifier "plVar12") (!= "!=") (identifier "plVar3")) (; ";") (assignment_expression "plVar12 = plVar12 + 3" (identifier "plVar12") (= "=") (binary_expression "plVar12 + 3" (identifier "plVar12") (+ "+") (number_literal "3"))) () ")") (compound_statement "{\n              lVar7 = *plVar12;\n              lVar4 = plVar12[1];\n              lVar5 = plVar12[2];\n              lVar6 = plVar12[-3];\n              plVar11 = plVar12;\n              while (lVar7 < lVar6) {\n                plVar11[2] = plVar11[-1];\n                *plVar11 = plVar11[-3];\n                plVar11[1] = plVar11[-2];\n                lVar6 = plVar11[-6];\n                plVar11 = plVar11 + -3;\n              }\n              *plVar11 = lVar7;\n              plVar11[1] = lVar4;\n              plVar11[2] = lVar5;\n            }" ({ "{") (expression_statement "lVar7 = *plVar12;" (assignment_expression "lVar7 = *plVar12" (identifier "lVar7") (= "=") (pointer_expression "*plVar12" (* "*") (identifier "plVar12"))) (; ";")) (expression_statement "lVar4 = plVar12[1];" (assignment_expression "lVar4 = plVar12[1]" (identifier "lVar4") (= "=") (subscript_expression "plVar12[1]" (identifier "plVar12") ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "lVar5 = plVar12[2];" (assignment_expression "lVar5 = plVar12[2]" (identifier "lVar5") (= "=") (subscript_expression "plVar12[2]" (identifier "plVar12") ([ "[") (number_literal "2") (] "]"))) (; ";")) (expression_statement "lVar6 = plVar12[-3];" (assignment_expression "lVar6 = plVar12[-3]" (identifier "lVar6") (= "=") (subscript_expression "plVar12[-3]" (identifier "plVar12") ([ "[") (number_literal "-3") (] "]"))) (; ";")) (expression_statement "plVar11 = plVar12;" (assignment_expression "plVar11 = plVar12" (identifier "plVar11") (= "=") (identifier "plVar12")) (; ";")) (while_statement "while (lVar7 < lVar6) {\n                plVar11[2] = plVar11[-1];\n                *plVar11 = plVar11[-3];\n                plVar11[1] = plVar11[-2];\n                lVar6 = plVar11[-6];\n                plVar11 = plVar11 + -3;\n              }" (while "while") (parenthesized_expression "(lVar7 < lVar6)" (( "(") (binary_expression "lVar7 < lVar6" (identifier "lVar7") (< "<") (identifier "lVar6")) () ")")) (compound_statement "{\n                plVar11[2] = plVar11[-1];\n                *plVar11 = plVar11[-3];\n                plVar11[1] = plVar11[-2];\n                lVar6 = plVar11[-6];\n                plVar11 = plVar11 + -3;\n              }" ({ "{") (expression_statement "plVar11[2] = plVar11[-1];" (assignment_expression "plVar11[2] = plVar11[-1]" (subscript_expression "plVar11[2]" (identifier "plVar11") ([ "[") (number_literal "2") (] "]")) (= "=") (subscript_expression "plVar11[-1]" (identifier "plVar11") ([ "[") (number_literal "-1") (] "]"))) (; ";")) (expression_statement "*plVar11 = plVar11[-3];" (assignment_expression "*plVar11 = plVar11[-3]" (pointer_expression "*plVar11" (* "*") (identifier "plVar11")) (= "=") (subscript_expression "plVar11[-3]" (identifier "plVar11") ([ "[") (number_literal "-3") (] "]"))) (; ";")) (expression_statement "plVar11[1] = plVar11[-2];" (assignment_expression "plVar11[1] = plVar11[-2]" (subscript_expression "plVar11[1]" (identifier "plVar11") ([ "[") (number_literal "1") (] "]")) (= "=") (subscript_expression "plVar11[-2]" (identifier "plVar11") ([ "[") (number_literal "-2") (] "]"))) (; ";")) (expression_statement "lVar6 = plVar11[-6];" (assignment_expression "lVar6 = plVar11[-6]" (identifier "lVar6") (= "=") (subscript_expression "plVar11[-6]" (identifier "plVar11") ([ "[") (number_literal "-6") (] "]"))) (; ";")) (expression_statement "plVar11 = plVar11 + -3;" (assignment_expression "plVar11 = plVar11 + -3" (identifier "plVar11") (= "=") (binary_expression "plVar11 + -3" (identifier "plVar11") (+ "+") (number_literal "-3"))) (; ";")) (} "}"))) (expression_statement "*plVar11 = lVar7;" (assignment_expression "*plVar11 = lVar7" (pointer_expression "*plVar11" (* "*") (identifier "plVar11")) (= "=") (identifier "lVar7")) (; ";")) (expression_statement "plVar11[1] = lVar4;" (assignment_expression "plVar11[1] = lVar4" (subscript_expression "plVar11[1]" (identifier "plVar11") ([ "[") (number_literal "1") (] "]")) (= "=") (identifier "lVar4")) (; ";")) (expression_statement "plVar11[2] = lVar5;" (assignment_expression "plVar11[2] = lVar5" (subscript_expression "plVar11[2]" (identifier "plVar11") ([ "[") (number_literal "2") (] "]")) (= "=") (identifier "lVar5")) (; ";")) (} "}"))) (} "}")))) (expression_statement "plVar11 = *(long **)(lVar2 + 8);" (assignment_expression "plVar11 = *(long **)(lVar2 + 8)" (identifier "plVar11") (= "=") (pointer_expression "*(long **)(lVar2 + 8)" (* "*") (cast_expression "(long **)(lVar2 + 8)" (( "(") (type_descriptor "long **" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(lVar2 + 8)" (( "(") (binary_expression "lVar2 + 8" (identifier "lVar2") (+ "+") (number_literal "8")) () ")"))))) (; ";")) (expression_statement "uVar9 = (*(long *)(lVar2 + 0x10) - (long)plVar11 >> 3) * -0x5555555555555555;" (assignment_expression "uVar9 = (*(long *)(lVar2 + 0x10) - (long)plVar11 >> 3) * -0x5555555555555555" (identifier "uVar9") (= "=") (binary_expression "(*(long *)(lVar2 + 0x10) - (long)plVar11 >> 3) * -0x5555555555555555" (parenthesized_expression "(*(long *)(lVar2 + 0x10) - (long)plVar11 >> 3)" (( "(") (binary_expression "*(long *)(lVar2 + 0x10) - (long)plVar11 >> 3" (binary_expression "*(long *)(lVar2 + 0x10) - (long)plVar11" (pointer_expression "*(long *)(lVar2 + 0x10)" (* "*") (cast_expression "(long *)(lVar2 + 0x10)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar2 + 0x10)" (( "(") (binary_expression "lVar2 + 0x10" (identifier "lVar2") (+ "+") (number_literal "0x10")) () ")")))) (- "-") (cast_expression "(long)plVar11" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "plVar11"))) (>> ">>") (number_literal "3")) () ")")) (* "*") (number_literal "-0x5555555555555555"))) (; ";")) (} "}"))) (expression_statement "*(undefined1 *)(lVar2 + 0x20) = 1;" (assignment_expression "*(undefined1 *)(lVar2 + 0x20) = 1" (pointer_expression "*(undefined1 *)(lVar2 + 0x20)" (* "*") (cast_expression "(undefined1 *)(lVar2 + 0x20)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar2 + 0x20)" (( "(") (binary_expression "lVar2 + 0x20" (identifier "lVar2") (+ "+") (number_literal "0x20")) () ")")))) (= "=") (number_literal "1")) (; ";")) (expression_statement "plVar12 = plVar11;" (assignment_expression "plVar12 = plVar11" (identifier "plVar12") (= "=") (identifier "plVar11")) (; ";")) (} "}"))) (for_statement "for (; 0 < (long)uVar9; uVar9 = (uVar9 - uVar10) - 1) {\n        while( true ) {\n          uVar10 = (long)uVar9 >> 1;\n          if (plVar11[uVar10 * 3] <= param_3) break;\n          uVar9 = uVar10;\n          if (uVar10 == 0) goto LAB_0031c4f3;\n        }\n        plVar11 = plVar11 + uVar10 * 3 + 3;\n      }" (for "for") (( "(") (; ";") (binary_expression "0 < (long)uVar9" (number_literal "0") (< "<") (cast_expression "(long)uVar9" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "uVar9"))) (; ";") (assignment_expression "uVar9 = (uVar9 - uVar10) - 1" (identifier "uVar9") (= "=") (binary_expression "(uVar9 - uVar10) - 1" (parenthesized_expression "(uVar9 - uVar10)" (( "(") (binary_expression "uVar9 - uVar10" (identifier "uVar9") (- "-") (identifier "uVar10")) () ")")) (- "-") (number_literal "1"))) () ")") (compound_statement "{\n        while( true ) {\n          uVar10 = (long)uVar9 >> 1;\n          if (plVar11[uVar10 * 3] <= param_3) break;\n          uVar9 = uVar10;\n          if (uVar10 == 0) goto LAB_0031c4f3;\n        }\n        plVar11 = plVar11 + uVar10 * 3 + 3;\n      }" ({ "{") (while_statement "while( true ) {\n          uVar10 = (long)uVar9 >> 1;\n          if (plVar11[uVar10 * 3] <= param_3) break;\n          uVar9 = uVar10;\n          if (uVar10 == 0) goto LAB_0031c4f3;\n        }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n          uVar10 = (long)uVar9 >> 1;\n          if (plVar11[uVar10 * 3] <= param_3) break;\n          uVar9 = uVar10;\n          if (uVar10 == 0) goto LAB_0031c4f3;\n        }" ({ "{") (expression_statement "uVar10 = (long)uVar9 >> 1;" (assignment_expression "uVar10 = (long)uVar9 >> 1" (identifier "uVar10") (= "=") (binary_expression "(long)uVar9 >> 1" (cast_expression "(long)uVar9" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "uVar9")) (>> ">>") (number_literal "1"))) (; ";")) (if_statement "if (plVar11[uVar10 * 3] <= param_3) break;" (if "if") (parenthesized_expression "(plVar11[uVar10 * 3] <= param_3)" (( "(") (binary_expression "plVar11[uVar10 * 3] <= param_3" (subscript_expression "plVar11[uVar10 * 3]" (identifier "plVar11") ([ "[") (binary_expression "uVar10 * 3" (identifier "uVar10") (* "*") (number_literal "3")) (] "]")) (<= "<=") (identifier "param_3")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "uVar9 = uVar10;" (assignment_expression "uVar9 = uVar10" (identifier "uVar9") (= "=") (identifier "uVar10")) (; ";")) (if_statement "if (uVar10 == 0) goto LAB_0031c4f3;" (if "if") (parenthesized_expression "(uVar10 == 0)" (( "(") (binary_expression "uVar10 == 0" (identifier "uVar10") (== "==") (number_literal "0")) () ")")) (goto_statement "goto LAB_0031c4f3;" (goto "goto") (statement_identifier "LAB_0031c4f3") (; ";"))) (} "}"))) (expression_statement "plVar11 = plVar11 + uVar10 * 3 + 3;" (assignment_expression "plVar11 = plVar11 + uVar10 * 3 + 3" (identifier "plVar11") (= "=") (binary_expression "plVar11 + uVar10 * 3 + 3" (binary_expression "plVar11 + uVar10 * 3" (identifier "plVar11") (+ "+") (binary_expression "uVar10 * 3" (identifier "uVar10") (* "*") (number_literal "3"))) (+ "+") (number_literal "3"))) (; ";")) (} "}"))) (labeled_statement "LAB_0031c4f3:\n      if (plVar11 != plVar12) {\n        if (param_3 < plVar11[-3]) goto LAB_0031c632;\n        if (param_3 - plVar11[-3] < plVar11[-2]) {\n          lVar2 = plVar11[-1];\n          *param_4 = lVar2;\n          if (lVar2 != -1) {\n            *param_4 = (param_3 - plVar11[-3]) + lVar2;\n            return 1;\n          }\n          return 1;\n        }\n      }" (statement_identifier "LAB_0031c4f3") (: ":") (if_statement "if (plVar11 != plVar12) {\n        if (param_3 < plVar11[-3]) goto LAB_0031c632;\n        if (param_3 - plVar11[-3] < plVar11[-2]) {\n          lVar2 = plVar11[-1];\n          *param_4 = lVar2;\n          if (lVar2 != -1) {\n            *param_4 = (param_3 - plVar11[-3]) + lVar2;\n            return 1;\n          }\n          return 1;\n        }\n      }" (if "if") (parenthesized_expression "(plVar11 != plVar12)" (( "(") (binary_expression "plVar11 != plVar12" (identifier "plVar11") (!= "!=") (identifier "plVar12")) () ")")) (compound_statement "{\n        if (param_3 < plVar11[-3]) goto LAB_0031c632;\n        if (param_3 - plVar11[-3] < plVar11[-2]) {\n          lVar2 = plVar11[-1];\n          *param_4 = lVar2;\n          if (lVar2 != -1) {\n            *param_4 = (param_3 - plVar11[-3]) + lVar2;\n            return 1;\n          }\n          return 1;\n        }\n      }" ({ "{") (if_statement "if (param_3 < plVar11[-3]) goto LAB_0031c632;" (if "if") (parenthesized_expression "(param_3 < plVar11[-3])" (( "(") (binary_expression "param_3 < plVar11[-3]" (identifier "param_3") (< "<") (subscript_expression "plVar11[-3]" (identifier "plVar11") ([ "[") (number_literal "-3") (] "]"))) () ")")) (goto_statement "goto LAB_0031c632;" (goto "goto") (statement_identifier "LAB_0031c632") (; ";"))) (if_statement "if (param_3 - plVar11[-3] < plVar11[-2]) {\n          lVar2 = plVar11[-1];\n          *param_4 = lVar2;\n          if (lVar2 != -1) {\n            *param_4 = (param_3 - plVar11[-3]) + lVar2;\n            return 1;\n          }\n          return 1;\n        }" (if "if") (parenthesized_expression "(param_3 - plVar11[-3] < plVar11[-2])" (( "(") (binary_expression "param_3 - plVar11[-3] < plVar11[-2]" (binary_expression "param_3 - plVar11[-3]" (identifier "param_3") (- "-") (subscript_expression "plVar11[-3]" (identifier "plVar11") ([ "[") (number_literal "-3") (] "]"))) (< "<") (subscript_expression "plVar11[-2]" (identifier "plVar11") ([ "[") (number_literal "-2") (] "]"))) () ")")) (compound_statement "{\n          lVar2 = plVar11[-1];\n          *param_4 = lVar2;\n          if (lVar2 != -1) {\n            *param_4 = (param_3 - plVar11[-3]) + lVar2;\n            return 1;\n          }\n          return 1;\n        }" ({ "{") (expression_statement "lVar2 = plVar11[-1];" (assignment_expression "lVar2 = plVar11[-1]" (identifier "lVar2") (= "=") (subscript_expression "plVar11[-1]" (identifier "plVar11") ([ "[") (number_literal "-1") (] "]"))) (; ";")) (expression_statement "*param_4 = lVar2;" (assignment_expression "*param_4 = lVar2" (pointer_expression "*param_4" (* "*") (identifier "param_4")) (= "=") (identifier "lVar2")) (; ";")) (if_statement "if (lVar2 != -1) {\n            *param_4 = (param_3 - plVar11[-3]) + lVar2;\n            return 1;\n          }" (if "if") (parenthesized_expression "(lVar2 != -1)" (( "(") (binary_expression "lVar2 != -1" (identifier "lVar2") (!= "!=") (number_literal "-1")) () ")")) (compound_statement "{\n            *param_4 = (param_3 - plVar11[-3]) + lVar2;\n            return 1;\n          }" ({ "{") (expression_statement "*param_4 = (param_3 - plVar11[-3]) + lVar2;" (assignment_expression "*param_4 = (param_3 - plVar11[-3]) + lVar2" (pointer_expression "*param_4" (* "*") (identifier "param_4")) (= "=") (binary_expression "(param_3 - plVar11[-3]) + lVar2" (parenthesized_expression "(param_3 - plVar11[-3])" (( "(") (binary_expression "param_3 - plVar11[-3]" (identifier "param_3") (- "-") (subscript_expression "plVar11[-3]" (identifier "plVar11") ([ "[") (number_literal "-3") (] "]"))) () ")")) (+ "+") (identifier "lVar2"))) (; ";")) (return_statement "return 1;" (return "return") (number_literal "1") (; ";")) (} "}"))) (return_statement "return 1;" (return "return") (number_literal "1") (; ";")) (} "}"))) (} "}")))) (} "}"))) (} "}"))) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}")))

/* WARNING: Type propagation algorithm not settling */
/* DWARF original prototype: bool get_output_offset(Object_merge_map * this, uint shndx,
   section_offset_type input_offset, section_offset_type * output_offset) */

bool __thiscall
gold::type_1::function_1
          (type_1 *this,type_2 var_1,type_3 var_17,
          type_3 *output_offset)

{
  type_2 var_6;
  type_4 var_4;
  type_5 *var_7;
  type_4 var_10;
  long var_12;
  type_6 sVar6;
  type_3 sVar7;
  long var_15;
  type_3 sVar9;
  type_6 sVar10;
  type_4 var_5;
  type_7 var_11;
  type_7 var_16;
  type_4 var_9;
  type_4 var_14;
  
  if (var_1 == 0xffffffff) {
                    /* WARNING: Subroutine does not return */
    var_2(this,0xffffffff);
  }
  var_5 = (this->section_merge_maps_).
            super__Vector_base<std::pair<unsigned_int,_gold::type_1::type_5*>,_std::allocator<std::pair<unsigned_int,_gold::type_1::type_5*>var_3>var_3>
            ._M_impl._M_start;
  var_4 = (this->section_merge_maps_).
           super__Vector_base<std::pair<unsigned_int,_gold::type_1::type_5*>,_std::allocator<std::pair<unsigned_int,_gold::type_1::type_5*>var_3>var_3>
           ._M_impl._M_finish;
  if (var_4 != var_5) {
    var_6 = var_5->first;
    while (var_6 != var_1) {
      var_5 = var_5 + 1;
      if (var_4 == var_5) {
        return false;
      }
      var_6 = var_5->first;
    }
    var_7 = var_5->second;
    if (var_7 != (type_5 *)0x0) {
      var_10 = (var_7->entries).
               super__Vector_base<gold::Object_merge_map::var_8,_std::allocator<gold::Object_merge_map::var_8>var_3>
               ._M_impl._M_finish;
      var_9 = (var_7->entries).
                super__Vector_base<gold::Object_merge_map::var_8,_std::allocator<gold::Object_merge_map::var_8>var_3>
                ._M_impl._M_start;
      var_11 = ((long)var_10 - (long)var_9 >> 3) * -0x5555555555555555;
      var_14 = var_9;
      if (var_7->sorted == false) {
        if (var_9 != var_10) {
          var_12 = 0x3f;
          if (var_11 != 0) {
            for (; var_11 >> var_12 == 0; var_12 = var_12 + -1) {
            }
          }
          std::
          __introsort_loop<__gnu_cxx::__normal_iterator<gold::type_1::var_8*,_std::vector<gold::type_1::var_8>var_3>,_long_int,___gnu_cxx::__ops::_Iter_comp_iter<gold::Object_merge_map::var_13>var_3>
                    (var_9,var_10,(0x3f - (long)(int)((type_2)var_12 ^ 0x3f)) * 2);
          if ((long)var_10 - (long)var_9 < 0x181) {
            std::
            __insertion_sort<__gnu_cxx::__normal_iterator<gold::type_1::var_8*,_std::vector<gold::type_1::var_8>var_3>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Object_merge_map::var_13>var_3>
                      (var_9,var_10);
          }
          else {
            var_14 = var_9 + 0x10;
            std::
            __insertion_sort<__gnu_cxx::__normal_iterator<gold::type_1::var_8*,_std::vector<gold::type_1::var_8>var_3>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Object_merge_map::var_13>var_3>
                      (var_9,var_14);
            for (; var_14 != var_10; var_14 = var_14 + 1) {
              var_12 = var_14->var_17;
              sVar6 = var_14->length;
              sVar7 = var_14->output_offset;
              var_15 = var_14[-1].var_17;
              var_9 = var_14;
              while (var_12 < var_15) {
                sVar9 = var_9[-1].var_17;
                sVar10 = var_9[-1].length;
                var_9->output_offset = var_9[-1].output_offset;
                var_9->var_17 = sVar9;
                var_9->length = sVar10;
                var_15 = var_9[-2].var_17;
                var_9 = var_9 + -1;
              }
              var_9->var_17 = var_12;
              var_9->length = sVar6;
              var_9->output_offset = sVar7;
            }
          }
          var_9 = (var_7->entries).
                    super__Vector_base<gold::Object_merge_map::var_8,_std::allocator<gold::Object_merge_map::var_8>var_3>
                    ._M_impl._M_start;
          var_11 = ((long)(var_7->entries).
                          super__Vector_base<gold::type_1::var_8,_std::allocator<gold::type_1::var_8>var_3>
                          ._M_impl._M_finish - (long)var_9 >> 3) * -0x5555555555555555;
        }
        var_7->sorted = true;
        var_14 = var_9;
      }
      for (; 0 < (long)var_11; var_11 = (var_11 - var_16) - 1) {
        while( true ) {
          var_16 = (long)var_11 >> 1;
          if (var_9[var_16].var_17 <= var_17) break;
          var_11 = var_16;
          if (var_16 == 0) goto LAB_0031c4f3;
        }
        var_9 = var_9 + var_16 + 1;
      }
LAB_0031c4f3:
      if (var_9 != var_14) {
        if (var_17 < var_9[-1].var_17) {
                    /* WARNING: Subroutine does not return */
          var_18("../../gold/merge.cc",0xa1,"get_output_offset");
        }
        if (var_17 - var_9[-1].var_17 < (long)var_9[-1].length) {
          var_12 = var_9[-1].output_offset;
          *output_offset = var_12;
          if (var_12 != -1) {
            *output_offset = (var_17 - var_9[-1].var_17) + var_12;
            return true;
          }
          return true;
        }
      }
    }
  }
  return false;
}


(translation_unit (function_definition type: (type_identifier) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (primitive_type) declarator: (identifier)) (parameter_declaration type: (sized_type_specifier) declarator: (identifier)) (parameter_declaration type: (sized_type_specifier) declarator: (pointer_declarator declarator: (identifier))))) body: (compound_statement (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (sized_type_specifier) declarator: (pointer_declarator declarator: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list))) (labeled_statement label: (statement_identifier) (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content)) (number_literal) (string_literal (string_content)))))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal))) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (while_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal))) right: (identifier))) consequence: (compound_statement (return_statement (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (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: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier))) right: (number_literal))) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (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))))) right: (char_literal (escape_sequence)))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (for_statement condition: (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (number_literal)) update: (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) body: (compound_statement)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (binary_expression left: (parenthesized_expression (binary_expression left: (number_literal) right: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal))))))) right: (number_literal))))) (if_statement condition: (parenthesized_expression (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier))) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier))))) alternative: (else_clause (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) (identifier)))) (for_statement condition: (binary_expression left: (identifier) right: (identifier)) update: (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (while_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) body: (compound_statement (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (subscript_expression argument: (identifier) index: (number_literal)))) (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: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (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: (identifier))) (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: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier))) right: (number_literal))) 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: (identifier) right: (number_literal))))) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (identifier))))) (for_statement condition: (binary_expression left: (number_literal) right: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier))) update: (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (number_literal))) body: (compound_statement (while_statement condition: (parenthesized_expression (true)) body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (binary_expression left: (identifier) right: (number_literal))) right: (identifier))) consequence: (break_statement)) (expression_statement (assignment_expression left: (identifier) right: (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: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) right: (number_literal)))))) (labeled_statement label: (statement_identifier) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) consequence: (goto_statement label: (statement_identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal))) right: (subscript_expression argument: (identifier) index: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) right: (identifier)))) (return_statement (number_literal)))) (return_statement (number_literal))))))))))) (return_statement (number_literal)))))

undefined8 MASKED(undefined8 *param_1,int param_2,long param_3,long *param_4)

{
  int iVar1;
  long lVar2;
  long *plVar3;
  long lVar4;
  long lVar5;
  long lVar6;
  long lVar7;
  int *piVar8;
  ulong uVar9;
  ulong uVar10;
  long *plVar11;
  long *plVar12;
  
  if (param_2 == -1) {
    FUN_0031bad0();
LAB_0031c632:
                    /* WARNING: Subroutine does not return */
    FUN_001e9890("../../gold/merge.cc",0xa1,"get_output_offset");
  }
  piVar8 = (int *)*param_1;
  if ((int *)param_1[1] != piVar8) {
    iVar1 = *piVar8;
    while (iVar1 != param_2) {
      piVar8 = piVar8 + 4;
      if ((int *)param_1[1] == piVar8) {
        return 0;
      }
      iVar1 = *piVar8;
    }
    lVar2 = *(long *)(piVar8 + 2);
    if (lVar2 != 0) {
      plVar3 = *(long **)(lVar2 + 0x10);
      plVar11 = *(long **)(lVar2 + 8);
      uVar9 = ((long)plVar3 - (long)plVar11 >> 3) * -0x5555555555555555;
      plVar12 = plVar11;
      if (*(char *)(lVar2 + 0x20) == '\0') {
        if (plVar11 != plVar3) {
          lVar7 = 0x3f;
          if (uVar9 != 0) {
            for (; uVar9 >> lVar7 == 0; lVar7 = lVar7 + -1) {
            }
          }
          FUN_00320150(plVar11,plVar3,(0x3f - (long)(int)((uint)lVar7 ^ 0x3f)) * 2);
          if ((long)plVar3 - (long)plVar11 < 0x181) {
            FUN_0031ddb0(plVar11,plVar3);
          }
          else {
            plVar12 = plVar11 + 0x30;
            FUN_0031ddb0(plVar11,plVar12);
            for (; plVar12 != plVar3; plVar12 = plVar12 + 3) {
              lVar7 = *plVar12;
              lVar4 = plVar12[1];
              lVar5 = plVar12[2];
              lVar6 = plVar12[-3];
              plVar11 = plVar12;
              while (lVar7 < lVar6) {
                plVar11[2] = plVar11[-1];
                *plVar11 = plVar11[-3];
                plVar11[1] = plVar11[-2];
                lVar6 = plVar11[-6];
                plVar11 = plVar11 + -3;
              }
              *plVar11 = lVar7;
              plVar11[1] = lVar4;
              plVar11[2] = lVar5;
            }
          }
          plVar11 = *(long **)(lVar2 + 8);
          uVar9 = (*(long *)(lVar2 + 0x10) - (long)plVar11 >> 3) * -0x5555555555555555;
        }
        *(undefined1 *)(lVar2 + 0x20) = 1;
        plVar12 = plVar11;
      }
      for (; 0 < (long)uVar9; uVar9 = (uVar9 - uVar10) - 1) {
        while( true ) {
          uVar10 = (long)uVar9 >> 1;
          if (plVar11[uVar10 * 3] <= param_3) break;
          uVar9 = uVar10;
          if (uVar10 == 0) goto LAB_0031c4f3;
        }
        plVar11 = plVar11 + uVar10 * 3 + 3;
      }
LAB_0031c4f3:
      if (plVar11 != plVar12) {
        if (param_3 < plVar11[-3]) goto LAB_0031c632;
        if (param_3 - plVar11[-3] < plVar11[-2]) {
          lVar2 = plVar11[-1];
          *param_4 = lVar2;
          if (lVar2 != -1) {
            *param_4 = (param_3 - plVar11[-3]) + lVar2;
            return 1;
          }
          return 1;
        }
      }
    }
  }
  return 0;
}

