
/* WARNING: Unknown calling convention -- yet parameter storage is locked */
/* DWARF original name:
   __adjust_heap<__gnu_cxx::__normal_iterator<gold::File_read::Read_multiple_entry*,
   std::vector<gold::File_read::Read_multiple_entry> >, long int,
   gold::File_read::Read_multiple_entry,
   __gnu_cxx::__ops::_Iter_comp_iter<gold::Read_multiple_compare> > */

void std::
     __adjust_heap<__gnu_cxx::__normal_iterator<gold::File_read::Read_multiple_entry*,_std::vector<gold::File_read::Read_multiple_entry>_>,_long_int,_gold::File_read::Read_multiple_entry,___gnu_cxx::__ops::_Iter_comp_iter<gold::Read_multiple_compare>_>
               (long __first,long __holeIndex,ulong __len)

{
  long lVar1;
  long *plVar2;
  long lVar3;
  long lVar4;
  long __topIndex;
  long *plVar5;
  long lVar6;
  long __value;
  long in_stack_00000010;
  long in_stack_00000018;
  
  lVar6 = (long)(__len - 1) / 2;
  lVar4 = __holeIndex;
  if (__holeIndex < lVar6) {
    do {
      lVar3 = (lVar4 + 1) * 2;
      lVar1 = lVar3 + -1;
      plVar5 = (long *)(__first + (lVar4 + 1) * 0x30);
      plVar2 = (long *)(__first + lVar1 * 0x18);
      if (*plVar5 < *plVar2) {
        lVar3 = lVar1;
        plVar5 = plVar2;
      }
      lVar1 = plVar5[1];
      plVar2 = (long *)(__first + lVar4 * 0x18);
      *plVar2 = *plVar5;
      plVar2[1] = lVar1;
      plVar2[2] = plVar5[2];
      lVar4 = lVar3;
    } while (lVar3 < lVar6);
    if ((__len & 1) == 0) goto LAB_00420d30;
  }
  else {
    plVar5 = (long *)(__first + __holeIndex * 0x18);
    lVar3 = __holeIndex;
    if ((__len & 1) != 0) goto LAB_00420d09;
LAB_00420d30:
    if ((long)(__len - 2) / 2 == lVar3) {
      lVar3 = lVar3 * 2 + 1;
      plVar2 = (long *)(__first + lVar3 * 0x18);
      lVar4 = plVar2[1];
      *plVar5 = *plVar2;
      plVar5[1] = lVar4;
      plVar5[2] = plVar2[2];
      plVar5 = plVar2;
    }
  }
  lVar4 = (lVar3 + -1) / 2;
  if (__holeIndex < lVar3) {
    plVar2 = (long *)(__first + lVar4 * 0x18);
    lVar6 = *plVar2;
    while (lVar1 = lVar4, lVar6 < __value) {
      lVar4 = plVar2[1];
      plVar5 = (long *)(__first + lVar3 * 0x18);
      *plVar5 = *plVar2;
      plVar5[1] = lVar4;
      plVar5[2] = plVar2[2];
      lVar4 = (lVar1 + -1) / 2;
      plVar5 = (long *)(__first + lVar1 * 0x18);
      if (lVar1 <= __holeIndex) break;
      plVar2 = (long *)(__first + lVar4 * 0x18);
      lVar3 = lVar1;
      lVar6 = *plVar2;
    }
  }
LAB_00420d09:
  *plVar5 = __value;
  plVar5[1] = in_stack_00000010;
  plVar5[2] = in_stack_00000018;
  return;
}



void FUN_00420c00(long param_1,long param_2,ulong param_3)

{
  long lVar1;
  long *plVar2;
  long lVar3;
  long lVar4;
  long *plVar5;
  long lVar6;
  long in_stack_00000008;
  long in_stack_00000010;
  long in_stack_00000018;
  
  lVar6 = (long)(param_3 - 1) / 2;
  lVar4 = param_2;
  if (param_2 < lVar6) {
    do {
      lVar3 = (lVar4 + 1) * 2;
      lVar1 = lVar3 + -1;
      plVar5 = (long *)(param_1 + (lVar4 + 1) * 0x30);
      plVar2 = (long *)(param_1 + lVar1 * 0x18);
      if (*plVar5 < *plVar2) {
        lVar3 = lVar1;
        plVar5 = plVar2;
      }
      lVar1 = plVar5[1];
      plVar2 = (long *)(param_1 + lVar4 * 0x18);
      *plVar2 = *plVar5;
      plVar2[1] = lVar1;
      plVar2[2] = plVar5[2];
      lVar4 = lVar3;
    } while (lVar3 < lVar6);
    if ((param_3 & 1) == 0) goto LAB_00420d30;
  }
  else {
    plVar5 = (long *)(param_1 + param_2 * 0x18);
    lVar3 = param_2;
    if ((param_3 & 1) != 0) goto LAB_00420d09;
LAB_00420d30:
    if ((long)(param_3 - 2) / 2 == lVar3) {
      lVar3 = lVar3 * 2 + 1;
      plVar2 = (long *)(param_1 + lVar3 * 0x18);
      lVar4 = plVar2[1];
      *plVar5 = *plVar2;
      plVar5[1] = lVar4;
      plVar5[2] = plVar2[2];
      plVar5 = plVar2;
    }
  }
  lVar4 = (lVar3 + -1) / 2;
  if (param_2 < lVar3) {
    plVar2 = (long *)(param_1 + lVar4 * 0x18);
    lVar6 = *plVar2;
    while (lVar1 = lVar4, lVar6 < in_stack_00000008) {
      lVar4 = plVar2[1];
      plVar5 = (long *)(param_1 + lVar3 * 0x18);
      *plVar5 = *plVar2;
      plVar5[1] = lVar4;
      plVar5[2] = plVar2[2];
      lVar4 = (lVar1 + -1) / 2;
      plVar5 = (long *)(param_1 + lVar1 * 0x18);
      if (lVar1 <= param_2) break;
      plVar2 = (long *)(param_1 + lVar4 * 0x18);
      lVar3 = lVar1;
      lVar6 = *plVar2;
    }
  }
LAB_00420d09:
  *plVar5 = in_stack_00000008;
  plVar5[1] = in_stack_00000010;
  plVar5[2] = in_stack_00000018;
  return;
}


LEA RAX,[RDX + -0x1]
PUSH R14
PUSH R13
MOV R13,RDX
PUSH R12
MOV R12,RAX
AND R13D,0x1
SHR R12,0x3f
PUSH RBP
ADD R12,RAX
PUSH RBX
MOV R10,qword ptr [RSP + 0x30]
SAR R12,0x1
MOV R11,qword ptr [RSP + 0x38]
MOV RBX,qword ptr [RSP + 0x40]
CMP RSI,R12
JGE 0x00420d20
MOV RCX,RSI
NOP dword ptr [RAX + RAX*0x1]
LEA R8,[RCX + 0x1]
LEA RAX,[R8 + R8*0x1]
LEA R9,[RAX + -0x1]
LEA R8,[RAX + R8*0x4]
LEA RBP,[R9 + R9*0x2]
LEA R8,[RDI + R8*0x8]
LEA RBP,[RDI + RBP*0x8]
MOV R14,qword ptr [R8]
CMP qword ptr [RBP],R14
JLE 0x00420c6b
MOV R8,RBP
MOV RAX,R9
MOVDQU XMM1,xmmword ptr [R8]
LEA RCX,[RCX + RCX*0x2]
LEA RCX,[RDI + RCX*0x8]
MOVUPS xmmword ptr [RCX],XMM1
MOV R9,qword ptr [R8 + 0x10]
MOV qword ptr [RCX + 0x10],R9
MOV RCX,RAX
CMP RAX,R12
JL 0x00420c40
TEST R13,R13
JZ 0x00420d30
LEA RDX,[RAX + -0x1]
MOV RCX,RDX
SHR RCX,0x3f
ADD RCX,RDX
SAR RCX,0x1
CMP RAX,RSI
JLE 0x00420d09
LEA RDX,[RCX + RCX*0x2]
LEA R9,[RDI + RDX*0x8]
CMP qword ptr [R9],R10
JL 0x00420cd3
JMP 0x00420d09
LEA RAX,[RDX + RDX*0x2]
LEA R9,[RDI + RAX*0x8]
MOV RAX,RCX
MOV RCX,RDX
CMP qword ptr [R9],R10
JGE 0x00420d09
MOVDQU XMM0,xmmword ptr [R9]
LEA RAX,[RAX + RAX*0x2]
LEA RAX,[RDI + RAX*0x8]
MOVUPS xmmword ptr [RAX],XMM0
MOV RDX,qword ptr [R9 + 0x10]
MOV qword ptr [RAX + 0x10],RDX
LEA RAX,[RCX + -0x1]
MOV RDX,RAX
SHR RDX,0x3f
ADD RDX,RAX
LEA RAX,[RCX + RCX*0x2]
SAR RDX,0x1
LEA R8,[RDI + RAX*0x8]
CMP RSI,RCX
JL 0x00420cc0
MOV qword ptr [R8],R10
MOV qword ptr [R8 + 0x8],R11
MOV qword ptr [R8 + 0x10],RBX
POP RBX
POP RBP
POP R12
POP R13
POP R14
RET
LEA RAX,[RSI + RSI*0x2]
LEA R8,[RDI + RAX*0x8]
TEST R13,R13
JNZ 0x00420d09
MOV RAX,RSI
LEA RCX,[RDX + -0x2]
MOV RDX,RCX
SHR RDX,0x3f
ADD RDX,RCX
SAR RDX,0x1
CMP RDX,RAX
JNZ 0x00420c94
LEA RAX,[RAX + RAX*0x1 + 0x1]
LEA RDX,[RAX + RAX*0x2]
LEA RDX,[RDI + RDX*0x8]
MOVDQU XMM2,xmmword ptr [RDX]
MOVUPS xmmword ptr [R8],XMM2
MOV RCX,qword ptr [RDX + 0x10]
MOV qword ptr [R8 + 0x10],RCX
MOV R8,RDX
JMP 0x00420c94
(translation_unit "void FUN_00420c00(long param_1,long param_2,ulong param_3)\n\n{\n  long lVar1;\n  long *plVar2;\n  long lVar3;\n  long lVar4;\n  long *plVar5;\n  long lVar6;\n  long in_stack_00000008;\n  long in_stack_00000010;\n  long in_stack_00000018;\n  \n  lVar6 = (long)(param_3 - 1) / 2;\n  lVar4 = param_2;\n  if (param_2 < lVar6) {\n    do {\n      lVar3 = (lVar4 + 1) * 2;\n      lVar1 = lVar3 + -1;\n      plVar5 = (long *)(param_1 + (lVar4 + 1) * 0x30);\n      plVar2 = (long *)(param_1 + lVar1 * 0x18);\n      if (*plVar5 < *plVar2) {\n        lVar3 = lVar1;\n        plVar5 = plVar2;\n      }\n      lVar1 = plVar5[1];\n      plVar2 = (long *)(param_1 + lVar4 * 0x18);\n      *plVar2 = *plVar5;\n      plVar2[1] = lVar1;\n      plVar2[2] = plVar5[2];\n      lVar4 = lVar3;\n    } while (lVar3 < lVar6);\n    if ((param_3 & 1) == 0) goto LAB_00420d30;\n  }\n  else {\n    plVar5 = (long *)(param_1 + param_2 * 0x18);\n    lVar3 = param_2;\n    if ((param_3 & 1) != 0) goto LAB_00420d09;\nLAB_00420d30:\n    if ((long)(param_3 - 2) / 2 == lVar3) {\n      lVar3 = lVar3 * 2 + 1;\n      plVar2 = (long *)(param_1 + lVar3 * 0x18);\n      lVar4 = plVar2[1];\n      *plVar5 = *plVar2;\n      plVar5[1] = lVar4;\n      plVar5[2] = plVar2[2];\n      plVar5 = plVar2;\n    }\n  }\n  lVar4 = (lVar3 + -1) / 2;\n  if (param_2 < lVar3) {\n    plVar2 = (long *)(param_1 + lVar4 * 0x18);\n    lVar6 = *plVar2;\n    while (lVar1 = lVar4, lVar6 < in_stack_00000008) {\n      lVar4 = plVar2[1];\n      plVar5 = (long *)(param_1 + lVar3 * 0x18);\n      *plVar5 = *plVar2;\n      plVar5[1] = lVar4;\n      plVar5[2] = plVar2[2];\n      lVar4 = (lVar1 + -1) / 2;\n      plVar5 = (long *)(param_1 + lVar1 * 0x18);\n      if (lVar1 <= param_2) break;\n      plVar2 = (long *)(param_1 + lVar4 * 0x18);\n      lVar3 = lVar1;\n      lVar6 = *plVar2;\n    }\n  }\nLAB_00420d09:\n  *plVar5 = in_stack_00000008;\n  plVar5[1] = in_stack_00000010;\n  plVar5[2] = in_stack_00000018;\n  return;\n}\n\n" (function_definition "void FUN_00420c00(long param_1,long param_2,ulong param_3)\n\n{\n  long lVar1;\n  long *plVar2;\n  long lVar3;\n  long lVar4;\n  long *plVar5;\n  long lVar6;\n  long in_stack_00000008;\n  long in_stack_00000010;\n  long in_stack_00000018;\n  \n  lVar6 = (long)(param_3 - 1) / 2;\n  lVar4 = param_2;\n  if (param_2 < lVar6) {\n    do {\n      lVar3 = (lVar4 + 1) * 2;\n      lVar1 = lVar3 + -1;\n      plVar5 = (long *)(param_1 + (lVar4 + 1) * 0x30);\n      plVar2 = (long *)(param_1 + lVar1 * 0x18);\n      if (*plVar5 < *plVar2) {\n        lVar3 = lVar1;\n        plVar5 = plVar2;\n      }\n      lVar1 = plVar5[1];\n      plVar2 = (long *)(param_1 + lVar4 * 0x18);\n      *plVar2 = *plVar5;\n      plVar2[1] = lVar1;\n      plVar2[2] = plVar5[2];\n      lVar4 = lVar3;\n    } while (lVar3 < lVar6);\n    if ((param_3 & 1) == 0) goto LAB_00420d30;\n  }\n  else {\n    plVar5 = (long *)(param_1 + param_2 * 0x18);\n    lVar3 = param_2;\n    if ((param_3 & 1) != 0) goto LAB_00420d09;\nLAB_00420d30:\n    if ((long)(param_3 - 2) / 2 == lVar3) {\n      lVar3 = lVar3 * 2 + 1;\n      plVar2 = (long *)(param_1 + lVar3 * 0x18);\n      lVar4 = plVar2[1];\n      *plVar5 = *plVar2;\n      plVar5[1] = lVar4;\n      plVar5[2] = plVar2[2];\n      plVar5 = plVar2;\n    }\n  }\n  lVar4 = (lVar3 + -1) / 2;\n  if (param_2 < lVar3) {\n    plVar2 = (long *)(param_1 + lVar4 * 0x18);\n    lVar6 = *plVar2;\n    while (lVar1 = lVar4, lVar6 < in_stack_00000008) {\n      lVar4 = plVar2[1];\n      plVar5 = (long *)(param_1 + lVar3 * 0x18);\n      *plVar5 = *plVar2;\n      plVar5[1] = lVar4;\n      plVar5[2] = plVar2[2];\n      lVar4 = (lVar1 + -1) / 2;\n      plVar5 = (long *)(param_1 + lVar1 * 0x18);\n      if (lVar1 <= param_2) break;\n      plVar2 = (long *)(param_1 + lVar4 * 0x18);\n      lVar3 = lVar1;\n      lVar6 = *plVar2;\n    }\n  }\nLAB_00420d09:\n  *plVar5 = in_stack_00000008;\n  plVar5[1] = in_stack_00000010;\n  plVar5[2] = in_stack_00000018;\n  return;\n}" primitive_type (function_declarator "FUN_00420c00(long param_1,long param_2,ulong param_3)" identifier (parameter_list "(long param_1,long param_2,ulong param_3)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "long param_2" (sized_type_specifier "long" long) identifier) , (parameter_declaration "ulong param_3" type_identifier identifier) ))) (compound_statement "{\n  long lVar1;\n  long *plVar2;\n  long lVar3;\n  long lVar4;\n  long *plVar5;\n  long lVar6;\n  long in_stack_00000008;\n  long in_stack_00000010;\n  long in_stack_00000018;\n  \n  lVar6 = (long)(param_3 - 1) / 2;\n  lVar4 = param_2;\n  if (param_2 < lVar6) {\n    do {\n      lVar3 = (lVar4 + 1) * 2;\n      lVar1 = lVar3 + -1;\n      plVar5 = (long *)(param_1 + (lVar4 + 1) * 0x30);\n      plVar2 = (long *)(param_1 + lVar1 * 0x18);\n      if (*plVar5 < *plVar2) {\n        lVar3 = lVar1;\n        plVar5 = plVar2;\n      }\n      lVar1 = plVar5[1];\n      plVar2 = (long *)(param_1 + lVar4 * 0x18);\n      *plVar2 = *plVar5;\n      plVar2[1] = lVar1;\n      plVar2[2] = plVar5[2];\n      lVar4 = lVar3;\n    } while (lVar3 < lVar6);\n    if ((param_3 & 1) == 0) goto LAB_00420d30;\n  }\n  else {\n    plVar5 = (long *)(param_1 + param_2 * 0x18);\n    lVar3 = param_2;\n    if ((param_3 & 1) != 0) goto LAB_00420d09;\nLAB_00420d30:\n    if ((long)(param_3 - 2) / 2 == lVar3) {\n      lVar3 = lVar3 * 2 + 1;\n      plVar2 = (long *)(param_1 + lVar3 * 0x18);\n      lVar4 = plVar2[1];\n      *plVar5 = *plVar2;\n      plVar5[1] = lVar4;\n      plVar5[2] = plVar2[2];\n      plVar5 = plVar2;\n    }\n  }\n  lVar4 = (lVar3 + -1) / 2;\n  if (param_2 < lVar3) {\n    plVar2 = (long *)(param_1 + lVar4 * 0x18);\n    lVar6 = *plVar2;\n    while (lVar1 = lVar4, lVar6 < in_stack_00000008) {\n      lVar4 = plVar2[1];\n      plVar5 = (long *)(param_1 + lVar3 * 0x18);\n      *plVar5 = *plVar2;\n      plVar5[1] = lVar4;\n      plVar5[2] = plVar2[2];\n      lVar4 = (lVar1 + -1) / 2;\n      plVar5 = (long *)(param_1 + lVar1 * 0x18);\n      if (lVar1 <= param_2) break;\n      plVar2 = (long *)(param_1 + lVar4 * 0x18);\n      lVar3 = lVar1;\n      lVar6 = *plVar2;\n    }\n  }\nLAB_00420d09:\n  *plVar5 = in_stack_00000008;\n  plVar5[1] = in_stack_00000010;\n  plVar5[2] = in_stack_00000018;\n  return;\n}" { (declaration "long lVar1;" (sized_type_specifier "long" long) identifier ;) (declaration "long *plVar2;" (sized_type_specifier "long" long) (pointer_declarator "*plVar2" * identifier) ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar4;" (sized_type_specifier "long" long) identifier ;) (declaration "long *plVar5;" (sized_type_specifier "long" long) (pointer_declarator "*plVar5" * identifier) ;) (declaration "long lVar6;" (sized_type_specifier "long" long) identifier ;) (declaration "long in_stack_00000008;" (sized_type_specifier "long" long) identifier ;) (declaration "long in_stack_00000010;" (sized_type_specifier "long" long) identifier ;) (declaration "long in_stack_00000018;" (sized_type_specifier "long" long) identifier ;) (expression_statement "lVar6 = (long)(param_3 - 1) / 2;" (assignment_expression "lVar6 = (long)(param_3 - 1) / 2" identifier = (binary_expression "(long)(param_3 - 1) / 2" (cast_expression "(long)(param_3 - 1)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "(param_3 - 1)" ( (binary_expression "param_3 - 1" identifier - number_literal) ))) / number_literal)) ;) (expression_statement "lVar4 = param_2;" (assignment_expression "lVar4 = param_2" identifier = identifier) ;) (if_statement "if (param_2 < lVar6) {\n    do {\n      lVar3 = (lVar4 + 1) * 2;\n      lVar1 = lVar3 + -1;\n      plVar5 = (long *)(param_1 + (lVar4 + 1) * 0x30);\n      plVar2 = (long *)(param_1 + lVar1 * 0x18);\n      if (*plVar5 < *plVar2) {\n        lVar3 = lVar1;\n        plVar5 = plVar2;\n      }\n      lVar1 = plVar5[1];\n      plVar2 = (long *)(param_1 + lVar4 * 0x18);\n      *plVar2 = *plVar5;\n      plVar2[1] = lVar1;\n      plVar2[2] = plVar5[2];\n      lVar4 = lVar3;\n    } while (lVar3 < lVar6);\n    if ((param_3 & 1) == 0) goto LAB_00420d30;\n  }\n  else {\n    plVar5 = (long *)(param_1 + param_2 * 0x18);\n    lVar3 = param_2;\n    if ((param_3 & 1) != 0) goto LAB_00420d09;\nLAB_00420d30:\n    if ((long)(param_3 - 2) / 2 == lVar3) {\n      lVar3 = lVar3 * 2 + 1;\n      plVar2 = (long *)(param_1 + lVar3 * 0x18);\n      lVar4 = plVar2[1];\n      *plVar5 = *plVar2;\n      plVar5[1] = lVar4;\n      plVar5[2] = plVar2[2];\n      plVar5 = plVar2;\n    }\n  }" if (parenthesized_expression "(param_2 < lVar6)" ( (binary_expression "param_2 < lVar6" identifier < identifier) )) (compound_statement "{\n    do {\n      lVar3 = (lVar4 + 1) * 2;\n      lVar1 = lVar3 + -1;\n      plVar5 = (long *)(param_1 + (lVar4 + 1) * 0x30);\n      plVar2 = (long *)(param_1 + lVar1 * 0x18);\n      if (*plVar5 < *plVar2) {\n        lVar3 = lVar1;\n        plVar5 = plVar2;\n      }\n      lVar1 = plVar5[1];\n      plVar2 = (long *)(param_1 + lVar4 * 0x18);\n      *plVar2 = *plVar5;\n      plVar2[1] = lVar1;\n      plVar2[2] = plVar5[2];\n      lVar4 = lVar3;\n    } while (lVar3 < lVar6);\n    if ((param_3 & 1) == 0) goto LAB_00420d30;\n  }" { (do_statement "do {\n      lVar3 = (lVar4 + 1) * 2;\n      lVar1 = lVar3 + -1;\n      plVar5 = (long *)(param_1 + (lVar4 + 1) * 0x30);\n      plVar2 = (long *)(param_1 + lVar1 * 0x18);\n      if (*plVar5 < *plVar2) {\n        lVar3 = lVar1;\n        plVar5 = plVar2;\n      }\n      lVar1 = plVar5[1];\n      plVar2 = (long *)(param_1 + lVar4 * 0x18);\n      *plVar2 = *plVar5;\n      plVar2[1] = lVar1;\n      plVar2[2] = plVar5[2];\n      lVar4 = lVar3;\n    } while (lVar3 < lVar6);" do (compound_statement "{\n      lVar3 = (lVar4 + 1) * 2;\n      lVar1 = lVar3 + -1;\n      plVar5 = (long *)(param_1 + (lVar4 + 1) * 0x30);\n      plVar2 = (long *)(param_1 + lVar1 * 0x18);\n      if (*plVar5 < *plVar2) {\n        lVar3 = lVar1;\n        plVar5 = plVar2;\n      }\n      lVar1 = plVar5[1];\n      plVar2 = (long *)(param_1 + lVar4 * 0x18);\n      *plVar2 = *plVar5;\n      plVar2[1] = lVar1;\n      plVar2[2] = plVar5[2];\n      lVar4 = lVar3;\n    }" { (expression_statement "lVar3 = (lVar4 + 1) * 2;" (assignment_expression "lVar3 = (lVar4 + 1) * 2" identifier = (binary_expression "(lVar4 + 1) * 2" (parenthesized_expression "(lVar4 + 1)" ( (binary_expression "lVar4 + 1" identifier + number_literal) )) * number_literal)) ;) (expression_statement "lVar1 = lVar3 + -1;" (assignment_expression "lVar1 = lVar3 + -1" identifier = (binary_expression "lVar3 + -1" identifier + number_literal)) ;) (expression_statement "plVar5 = (long *)(param_1 + (lVar4 + 1) * 0x30);" (assignment_expression "plVar5 = (long *)(param_1 + (lVar4 + 1) * 0x30)" identifier = (cast_expression "(long *)(param_1 + (lVar4 + 1) * 0x30)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + (lVar4 + 1) * 0x30)" ( (binary_expression "param_1 + (lVar4 + 1) * 0x30" identifier + (binary_expression "(lVar4 + 1) * 0x30" (parenthesized_expression "(lVar4 + 1)" ( (binary_expression "lVar4 + 1" identifier + number_literal) )) * number_literal)) )))) ;) (expression_statement "plVar2 = (long *)(param_1 + lVar1 * 0x18);" (assignment_expression "plVar2 = (long *)(param_1 + lVar1 * 0x18)" identifier = (cast_expression "(long *)(param_1 + lVar1 * 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + lVar1 * 0x18)" ( (binary_expression "param_1 + lVar1 * 0x18" identifier + (binary_expression "lVar1 * 0x18" identifier * number_literal)) )))) ;) (if_statement "if (*plVar5 < *plVar2) {\n        lVar3 = lVar1;\n        plVar5 = plVar2;\n      }" if (parenthesized_expression "(*plVar5 < *plVar2)" ( (binary_expression "*plVar5 < *plVar2" (pointer_expression "*plVar5" * identifier) < (pointer_expression "*plVar2" * identifier)) )) (compound_statement "{\n        lVar3 = lVar1;\n        plVar5 = plVar2;\n      }" { (expression_statement "lVar3 = lVar1;" (assignment_expression "lVar3 = lVar1" identifier = identifier) ;) (expression_statement "plVar5 = plVar2;" (assignment_expression "plVar5 = plVar2" identifier = identifier) ;) })) (expression_statement "lVar1 = plVar5[1];" (assignment_expression "lVar1 = plVar5[1]" identifier = (subscript_expression "plVar5[1]" identifier [ number_literal ])) ;) (expression_statement "plVar2 = (long *)(param_1 + lVar4 * 0x18);" (assignment_expression "plVar2 = (long *)(param_1 + lVar4 * 0x18)" identifier = (cast_expression "(long *)(param_1 + lVar4 * 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + lVar4 * 0x18)" ( (binary_expression "param_1 + lVar4 * 0x18" identifier + (binary_expression "lVar4 * 0x18" identifier * number_literal)) )))) ;) (expression_statement "*plVar2 = *plVar5;" (assignment_expression "*plVar2 = *plVar5" (pointer_expression "*plVar2" * identifier) = (pointer_expression "*plVar5" * identifier)) ;) (expression_statement "plVar2[1] = lVar1;" (assignment_expression "plVar2[1] = lVar1" (subscript_expression "plVar2[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "plVar2[2] = plVar5[2];" (assignment_expression "plVar2[2] = plVar5[2]" (subscript_expression "plVar2[2]" identifier [ number_literal ]) = (subscript_expression "plVar5[2]" identifier [ number_literal ])) ;) (expression_statement "lVar4 = lVar3;" (assignment_expression "lVar4 = lVar3" identifier = identifier) ;) }) while (parenthesized_expression "(lVar3 < lVar6)" ( (binary_expression "lVar3 < lVar6" identifier < identifier) )) ;) (if_statement "if ((param_3 & 1) == 0) goto LAB_00420d30;" if (parenthesized_expression "((param_3 & 1) == 0)" ( (binary_expression "(param_3 & 1) == 0" (parenthesized_expression "(param_3 & 1)" ( (binary_expression "param_3 & 1" identifier & number_literal) )) == number_literal) )) (goto_statement "goto LAB_00420d30;" goto statement_identifier ;)) }) (else_clause "else {\n    plVar5 = (long *)(param_1 + param_2 * 0x18);\n    lVar3 = param_2;\n    if ((param_3 & 1) != 0) goto LAB_00420d09;\nLAB_00420d30:\n    if ((long)(param_3 - 2) / 2 == lVar3) {\n      lVar3 = lVar3 * 2 + 1;\n      plVar2 = (long *)(param_1 + lVar3 * 0x18);\n      lVar4 = plVar2[1];\n      *plVar5 = *plVar2;\n      plVar5[1] = lVar4;\n      plVar5[2] = plVar2[2];\n      plVar5 = plVar2;\n    }\n  }" else (compound_statement "{\n    plVar5 = (long *)(param_1 + param_2 * 0x18);\n    lVar3 = param_2;\n    if ((param_3 & 1) != 0) goto LAB_00420d09;\nLAB_00420d30:\n    if ((long)(param_3 - 2) / 2 == lVar3) {\n      lVar3 = lVar3 * 2 + 1;\n      plVar2 = (long *)(param_1 + lVar3 * 0x18);\n      lVar4 = plVar2[1];\n      *plVar5 = *plVar2;\n      plVar5[1] = lVar4;\n      plVar5[2] = plVar2[2];\n      plVar5 = plVar2;\n    }\n  }" { (expression_statement "plVar5 = (long *)(param_1 + param_2 * 0x18);" (assignment_expression "plVar5 = (long *)(param_1 + param_2 * 0x18)" identifier = (cast_expression "(long *)(param_1 + param_2 * 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + param_2 * 0x18)" ( (binary_expression "param_1 + param_2 * 0x18" identifier + (binary_expression "param_2 * 0x18" identifier * number_literal)) )))) ;) (expression_statement "lVar3 = param_2;" (assignment_expression "lVar3 = param_2" identifier = identifier) ;) (if_statement "if ((param_3 & 1) != 0) goto LAB_00420d09;" if (parenthesized_expression "((param_3 & 1) != 0)" ( (binary_expression "(param_3 & 1) != 0" (parenthesized_expression "(param_3 & 1)" ( (binary_expression "param_3 & 1" identifier & number_literal) )) != number_literal) )) (goto_statement "goto LAB_00420d09;" goto statement_identifier ;)) (labeled_statement "LAB_00420d30:\n    if ((long)(param_3 - 2) / 2 == lVar3) {\n      lVar3 = lVar3 * 2 + 1;\n      plVar2 = (long *)(param_1 + lVar3 * 0x18);\n      lVar4 = plVar2[1];\n      *plVar5 = *plVar2;\n      plVar5[1] = lVar4;\n      plVar5[2] = plVar2[2];\n      plVar5 = plVar2;\n    }" statement_identifier : (if_statement "if ((long)(param_3 - 2) / 2 == lVar3) {\n      lVar3 = lVar3 * 2 + 1;\n      plVar2 = (long *)(param_1 + lVar3 * 0x18);\n      lVar4 = plVar2[1];\n      *plVar5 = *plVar2;\n      plVar5[1] = lVar4;\n      plVar5[2] = plVar2[2];\n      plVar5 = plVar2;\n    }" if (parenthesized_expression "((long)(param_3 - 2) / 2 == lVar3)" ( (binary_expression "(long)(param_3 - 2) / 2 == lVar3" (binary_expression "(long)(param_3 - 2) / 2" (cast_expression "(long)(param_3 - 2)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "(param_3 - 2)" ( (binary_expression "param_3 - 2" identifier - number_literal) ))) / number_literal) == identifier) )) (compound_statement "{\n      lVar3 = lVar3 * 2 + 1;\n      plVar2 = (long *)(param_1 + lVar3 * 0x18);\n      lVar4 = plVar2[1];\n      *plVar5 = *plVar2;\n      plVar5[1] = lVar4;\n      plVar5[2] = plVar2[2];\n      plVar5 = plVar2;\n    }" { (expression_statement "lVar3 = lVar3 * 2 + 1;" (assignment_expression "lVar3 = lVar3 * 2 + 1" identifier = (binary_expression "lVar3 * 2 + 1" (binary_expression "lVar3 * 2" identifier * number_literal) + number_literal)) ;) (expression_statement "plVar2 = (long *)(param_1 + lVar3 * 0x18);" (assignment_expression "plVar2 = (long *)(param_1 + lVar3 * 0x18)" identifier = (cast_expression "(long *)(param_1 + lVar3 * 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + lVar3 * 0x18)" ( (binary_expression "param_1 + lVar3 * 0x18" identifier + (binary_expression "lVar3 * 0x18" identifier * number_literal)) )))) ;) (expression_statement "lVar4 = plVar2[1];" (assignment_expression "lVar4 = plVar2[1]" identifier = (subscript_expression "plVar2[1]" identifier [ number_literal ])) ;) (expression_statement "*plVar5 = *plVar2;" (assignment_expression "*plVar5 = *plVar2" (pointer_expression "*plVar5" * identifier) = (pointer_expression "*plVar2" * identifier)) ;) (expression_statement "plVar5[1] = lVar4;" (assignment_expression "plVar5[1] = lVar4" (subscript_expression "plVar5[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "plVar5[2] = plVar2[2];" (assignment_expression "plVar5[2] = plVar2[2]" (subscript_expression "plVar5[2]" identifier [ number_literal ]) = (subscript_expression "plVar2[2]" identifier [ number_literal ])) ;) (expression_statement "plVar5 = plVar2;" (assignment_expression "plVar5 = plVar2" identifier = identifier) ;) }))) }))) (expression_statement "lVar4 = (lVar3 + -1) / 2;" (assignment_expression "lVar4 = (lVar3 + -1) / 2" identifier = (binary_expression "(lVar3 + -1) / 2" (parenthesized_expression "(lVar3 + -1)" ( (binary_expression "lVar3 + -1" identifier + number_literal) )) / number_literal)) ;) (if_statement "if (param_2 < lVar3) {\n    plVar2 = (long *)(param_1 + lVar4 * 0x18);\n    lVar6 = *plVar2;\n    while (lVar1 = lVar4, lVar6 < in_stack_00000008) {\n      lVar4 = plVar2[1];\n      plVar5 = (long *)(param_1 + lVar3 * 0x18);\n      *plVar5 = *plVar2;\n      plVar5[1] = lVar4;\n      plVar5[2] = plVar2[2];\n      lVar4 = (lVar1 + -1) / 2;\n      plVar5 = (long *)(param_1 + lVar1 * 0x18);\n      if (lVar1 <= param_2) break;\n      plVar2 = (long *)(param_1 + lVar4 * 0x18);\n      lVar3 = lVar1;\n      lVar6 = *plVar2;\n    }\n  }" if (parenthesized_expression "(param_2 < lVar3)" ( (binary_expression "param_2 < lVar3" identifier < identifier) )) (compound_statement "{\n    plVar2 = (long *)(param_1 + lVar4 * 0x18);\n    lVar6 = *plVar2;\n    while (lVar1 = lVar4, lVar6 < in_stack_00000008) {\n      lVar4 = plVar2[1];\n      plVar5 = (long *)(param_1 + lVar3 * 0x18);\n      *plVar5 = *plVar2;\n      plVar5[1] = lVar4;\n      plVar5[2] = plVar2[2];\n      lVar4 = (lVar1 + -1) / 2;\n      plVar5 = (long *)(param_1 + lVar1 * 0x18);\n      if (lVar1 <= param_2) break;\n      plVar2 = (long *)(param_1 + lVar4 * 0x18);\n      lVar3 = lVar1;\n      lVar6 = *plVar2;\n    }\n  }" { (expression_statement "plVar2 = (long *)(param_1 + lVar4 * 0x18);" (assignment_expression "plVar2 = (long *)(param_1 + lVar4 * 0x18)" identifier = (cast_expression "(long *)(param_1 + lVar4 * 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + lVar4 * 0x18)" ( (binary_expression "param_1 + lVar4 * 0x18" identifier + (binary_expression "lVar4 * 0x18" identifier * number_literal)) )))) ;) (expression_statement "lVar6 = *plVar2;" (assignment_expression "lVar6 = *plVar2" identifier = (pointer_expression "*plVar2" * identifier)) ;) (while_statement "while (lVar1 = lVar4, lVar6 < in_stack_00000008) {\n      lVar4 = plVar2[1];\n      plVar5 = (long *)(param_1 + lVar3 * 0x18);\n      *plVar5 = *plVar2;\n      plVar5[1] = lVar4;\n      plVar5[2] = plVar2[2];\n      lVar4 = (lVar1 + -1) / 2;\n      plVar5 = (long *)(param_1 + lVar1 * 0x18);\n      if (lVar1 <= param_2) break;\n      plVar2 = (long *)(param_1 + lVar4 * 0x18);\n      lVar3 = lVar1;\n      lVar6 = *plVar2;\n    }" while (parenthesized_expression "(lVar1 = lVar4, lVar6 < in_stack_00000008)" ( (comma_expression "lVar1 = lVar4, lVar6 < in_stack_00000008" (assignment_expression "lVar1 = lVar4" identifier = identifier) , (binary_expression "lVar6 < in_stack_00000008" identifier < identifier)) )) (compound_statement "{\n      lVar4 = plVar2[1];\n      plVar5 = (long *)(param_1 + lVar3 * 0x18);\n      *plVar5 = *plVar2;\n      plVar5[1] = lVar4;\n      plVar5[2] = plVar2[2];\n      lVar4 = (lVar1 + -1) / 2;\n      plVar5 = (long *)(param_1 + lVar1 * 0x18);\n      if (lVar1 <= param_2) break;\n      plVar2 = (long *)(param_1 + lVar4 * 0x18);\n      lVar3 = lVar1;\n      lVar6 = *plVar2;\n    }" { (expression_statement "lVar4 = plVar2[1];" (assignment_expression "lVar4 = plVar2[1]" identifier = (subscript_expression "plVar2[1]" identifier [ number_literal ])) ;) (expression_statement "plVar5 = (long *)(param_1 + lVar3 * 0x18);" (assignment_expression "plVar5 = (long *)(param_1 + lVar3 * 0x18)" identifier = (cast_expression "(long *)(param_1 + lVar3 * 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + lVar3 * 0x18)" ( (binary_expression "param_1 + lVar3 * 0x18" identifier + (binary_expression "lVar3 * 0x18" identifier * number_literal)) )))) ;) (expression_statement "*plVar5 = *plVar2;" (assignment_expression "*plVar5 = *plVar2" (pointer_expression "*plVar5" * identifier) = (pointer_expression "*plVar2" * identifier)) ;) (expression_statement "plVar5[1] = lVar4;" (assignment_expression "plVar5[1] = lVar4" (subscript_expression "plVar5[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "plVar5[2] = plVar2[2];" (assignment_expression "plVar5[2] = plVar2[2]" (subscript_expression "plVar5[2]" identifier [ number_literal ]) = (subscript_expression "plVar2[2]" identifier [ number_literal ])) ;) (expression_statement "lVar4 = (lVar1 + -1) / 2;" (assignment_expression "lVar4 = (lVar1 + -1) / 2" identifier = (binary_expression "(lVar1 + -1) / 2" (parenthesized_expression "(lVar1 + -1)" ( (binary_expression "lVar1 + -1" identifier + number_literal) )) / number_literal)) ;) (expression_statement "plVar5 = (long *)(param_1 + lVar1 * 0x18);" (assignment_expression "plVar5 = (long *)(param_1 + lVar1 * 0x18)" identifier = (cast_expression "(long *)(param_1 + lVar1 * 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + lVar1 * 0x18)" ( (binary_expression "param_1 + lVar1 * 0x18" identifier + (binary_expression "lVar1 * 0x18" identifier * number_literal)) )))) ;) (if_statement "if (lVar1 <= param_2) break;" if (parenthesized_expression "(lVar1 <= param_2)" ( (binary_expression "lVar1 <= param_2" identifier <= identifier) )) (break_statement "break;" break ;)) (expression_statement "plVar2 = (long *)(param_1 + lVar4 * 0x18);" (assignment_expression "plVar2 = (long *)(param_1 + lVar4 * 0x18)" identifier = (cast_expression "(long *)(param_1 + lVar4 * 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + lVar4 * 0x18)" ( (binary_expression "param_1 + lVar4 * 0x18" identifier + (binary_expression "lVar4 * 0x18" identifier * number_literal)) )))) ;) (expression_statement "lVar3 = lVar1;" (assignment_expression "lVar3 = lVar1" identifier = identifier) ;) (expression_statement "lVar6 = *plVar2;" (assignment_expression "lVar6 = *plVar2" identifier = (pointer_expression "*plVar2" * identifier)) ;) })) })) (labeled_statement "LAB_00420d09:\n  *plVar5 = in_stack_00000008;" statement_identifier : (expression_statement "*plVar5 = in_stack_00000008;" (assignment_expression "*plVar5 = in_stack_00000008" (pointer_expression "*plVar5" * identifier) = identifier) ;)) (expression_statement "plVar5[1] = in_stack_00000010;" (assignment_expression "plVar5[1] = in_stack_00000010" (subscript_expression "plVar5[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "plVar5[2] = in_stack_00000018;" (assignment_expression "plVar5[2] = in_stack_00000018" (subscript_expression "plVar5[2]" identifier [ number_literal ]) = identifier) ;) (return_statement "return;" return ;) })))
(translation_unit "/* WARNING: Unknown calling convention -- yet parameter storage is locked */\n/* DWARF original name:\n   __adjust_heap<__gnu_cxx::__normal_iterator<gold::File_read::Read_multiple_entry*,\n   std::vector<gold::File_read::Read_multiple_entry> >, long int,\n   gold::File_read::Read_multiple_entry,\n   __gnu_cxx::__ops::_Iter_comp_iter<gold::Read_multiple_compare> > */\n\nvoid std::\n     __adjust_heap<__gnu_cxx::__normal_iterator<gold::File_read::Read_multiple_entry*,_std::vector<gold::File_read::Read_multiple_entry>_>,_long_int,_gold::File_read::Read_multiple_entry,___gnu_cxx::__ops::_Iter_comp_iter<gold::Read_multiple_compare>_>\n               (long __first,long __holeIndex,ulong __len)\n\n{\n  long lVar1;\n  long *plVar2;\n  long lVar3;\n  long lVar4;\n  long __topIndex;\n  long *plVar5;\n  long lVar6;\n  long __value;\n  long in_stack_00000010;\n  long in_stack_00000018;\n  \n  lVar6 = (long)(__len - 1) / 2;\n  lVar4 = __holeIndex;\n  if (__holeIndex < lVar6) {\n    do {\n      lVar3 = (lVar4 + 1) * 2;\n      lVar1 = lVar3 + -1;\n      plVar5 = (long *)(__first + (lVar4 + 1) * 0x30);\n      plVar2 = (long *)(__first + lVar1 * 0x18);\n      if (*plVar5 < *plVar2) {\n        lVar3 = lVar1;\n        plVar5 = plVar2;\n      }\n      lVar1 = plVar5[1];\n      plVar2 = (long *)(__first + lVar4 * 0x18);\n      *plVar2 = *plVar5;\n      plVar2[1] = lVar1;\n      plVar2[2] = plVar5[2];\n      lVar4 = lVar3;\n    } while (lVar3 < lVar6);\n    if ((__len & 1) == 0) goto LAB_00420d30;\n  }\n  else {\n    plVar5 = (long *)(__first + __holeIndex * 0x18);\n    lVar3 = __holeIndex;\n    if ((__len & 1) != 0) goto LAB_00420d09;\nLAB_00420d30:\n    if ((long)(__len - 2) / 2 == lVar3) {\n      lVar3 = lVar3 * 2 + 1;\n      plVar2 = (long *)(__first + lVar3 * 0x18);\n      lVar4 = plVar2[1];\n      *plVar5 = *plVar2;\n      plVar5[1] = lVar4;\n      plVar5[2] = plVar2[2];\n      plVar5 = plVar2;\n    }\n  }\n  lVar4 = (lVar3 + -1) / 2;\n  if (__holeIndex < lVar3) {\n    plVar2 = (long *)(__first + lVar4 * 0x18);\n    lVar6 = *plVar2;\n    while (lVar1 = lVar4, lVar6 < __value) {\n      lVar4 = plVar2[1];\n      plVar5 = (long *)(__first + lVar3 * 0x18);\n      *plVar5 = *plVar2;\n      plVar5[1] = lVar4;\n      plVar5[2] = plVar2[2];\n      lVar4 = (lVar1 + -1) / 2;\n      plVar5 = (long *)(__first + lVar1 * 0x18);\n      if (lVar1 <= __holeIndex) break;\n      plVar2 = (long *)(__first + lVar4 * 0x18);\n      lVar3 = lVar1;\n      lVar6 = *plVar2;\n    }\n  }\nLAB_00420d09:\n  *plVar5 = __value;\n  plVar5[1] = in_stack_00000010;\n  plVar5[2] = in_stack_00000018;\n  return;\n}\n\n" comment comment (declaration "void std::\n     __adjust_heap<__gnu_cxx::__normal_iterator<gold::File_read::Read_multiple_entry*,_std::vector<gold::File_read::Read_multiple_entry>_>,_long_int,_gold::File_read::Read_multiple_entry,___gnu_cxx::__ops::_Iter_comp_iter<gold::Read_multiple_compare>_>\n               (long __first,long __holeIndex,ulong __len)\n\n{\n  long lVar1;" primitive_type (ERROR "std::\n     __adjust_heap<__gnu_cxx::__normal_iterator<gold::File_read::" identifier : : identifier < identifier : : identifier < identifier : : identifier : :) identifier (ERROR "*" *) , (ERROR "_std::vector<gold::File_read::Read_multiple_entry>" identifier : : identifier < identifier : : identifier : : identifier >) identifier (ERROR ">" >) , identifier , (ERROR "_gold::File_read::" identifier : : identifier : :) identifier , (ERROR "___gnu_cxx::__ops::_Iter_comp_iter<gold::Read_multiple_compare>_>\n               (long __first,long __holeIndex,ulong __len)\n\n{\n  long" identifier : : identifier : : identifier < identifier : : identifier > (function_declarator "_>\n               (long __first,long __holeIndex,ulong __len)" identifier (ERROR ">" >) (parameter_list "(long __first,long __holeIndex,ulong __len)" ( (parameter_declaration "long __first" (sized_type_specifier "long" long) identifier) , (parameter_declaration "long __holeIndex" (sized_type_specifier "long" long) identifier) , (parameter_declaration "ulong __len" type_identifier identifier) ))) { long) identifier ;) (declaration "long *plVar2;" (sized_type_specifier "long" long) (pointer_declarator "*plVar2" * identifier) ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar4;" (sized_type_specifier "long" long) identifier ;) (declaration "long __topIndex;" (sized_type_specifier "long" long) identifier ;) (declaration "long *plVar5;" (sized_type_specifier "long" long) (pointer_declarator "*plVar5" * identifier) ;) (declaration "long lVar6;" (sized_type_specifier "long" long) identifier ;) (declaration "long __value;" (sized_type_specifier "long" long) identifier ;) (declaration "long in_stack_00000010;" (sized_type_specifier "long" long) identifier ;) (declaration "long in_stack_00000018;" (sized_type_specifier "long" long) identifier ;) (expression_statement "lVar6 = (long)(__len - 1) / 2;" (assignment_expression "lVar6 = (long)(__len - 1) / 2" identifier = (binary_expression "(long)(__len - 1) / 2" (cast_expression "(long)(__len - 1)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "(__len - 1)" ( (binary_expression "__len - 1" identifier - number_literal) ))) / number_literal)) ;) (expression_statement "lVar4 = __holeIndex;" (assignment_expression "lVar4 = __holeIndex" identifier = identifier) ;) (if_statement "if (__holeIndex < lVar6) {\n    do {\n      lVar3 = (lVar4 + 1) * 2;\n      lVar1 = lVar3 + -1;\n      plVar5 = (long *)(__first + (lVar4 + 1) * 0x30);\n      plVar2 = (long *)(__first + lVar1 * 0x18);\n      if (*plVar5 < *plVar2) {\n        lVar3 = lVar1;\n        plVar5 = plVar2;\n      }\n      lVar1 = plVar5[1];\n      plVar2 = (long *)(__first + lVar4 * 0x18);\n      *plVar2 = *plVar5;\n      plVar2[1] = lVar1;\n      plVar2[2] = plVar5[2];\n      lVar4 = lVar3;\n    } while (lVar3 < lVar6);\n    if ((__len & 1) == 0) goto LAB_00420d30;\n  }\n  else {\n    plVar5 = (long *)(__first + __holeIndex * 0x18);\n    lVar3 = __holeIndex;\n    if ((__len & 1) != 0) goto LAB_00420d09;\nLAB_00420d30:\n    if ((long)(__len - 2) / 2 == lVar3) {\n      lVar3 = lVar3 * 2 + 1;\n      plVar2 = (long *)(__first + lVar3 * 0x18);\n      lVar4 = plVar2[1];\n      *plVar5 = *plVar2;\n      plVar5[1] = lVar4;\n      plVar5[2] = plVar2[2];\n      plVar5 = plVar2;\n    }\n  }" if (parenthesized_expression "(__holeIndex < lVar6)" ( (binary_expression "__holeIndex < lVar6" identifier < identifier) )) (compound_statement "{\n    do {\n      lVar3 = (lVar4 + 1) * 2;\n      lVar1 = lVar3 + -1;\n      plVar5 = (long *)(__first + (lVar4 + 1) * 0x30);\n      plVar2 = (long *)(__first + lVar1 * 0x18);\n      if (*plVar5 < *plVar2) {\n        lVar3 = lVar1;\n        plVar5 = plVar2;\n      }\n      lVar1 = plVar5[1];\n      plVar2 = (long *)(__first + lVar4 * 0x18);\n      *plVar2 = *plVar5;\n      plVar2[1] = lVar1;\n      plVar2[2] = plVar5[2];\n      lVar4 = lVar3;\n    } while (lVar3 < lVar6);\n    if ((__len & 1) == 0) goto LAB_00420d30;\n  }" { (do_statement "do {\n      lVar3 = (lVar4 + 1) * 2;\n      lVar1 = lVar3 + -1;\n      plVar5 = (long *)(__first + (lVar4 + 1) * 0x30);\n      plVar2 = (long *)(__first + lVar1 * 0x18);\n      if (*plVar5 < *plVar2) {\n        lVar3 = lVar1;\n        plVar5 = plVar2;\n      }\n      lVar1 = plVar5[1];\n      plVar2 = (long *)(__first + lVar4 * 0x18);\n      *plVar2 = *plVar5;\n      plVar2[1] = lVar1;\n      plVar2[2] = plVar5[2];\n      lVar4 = lVar3;\n    } while (lVar3 < lVar6);" do (compound_statement "{\n      lVar3 = (lVar4 + 1) * 2;\n      lVar1 = lVar3 + -1;\n      plVar5 = (long *)(__first + (lVar4 + 1) * 0x30);\n      plVar2 = (long *)(__first + lVar1 * 0x18);\n      if (*plVar5 < *plVar2) {\n        lVar3 = lVar1;\n        plVar5 = plVar2;\n      }\n      lVar1 = plVar5[1];\n      plVar2 = (long *)(__first + lVar4 * 0x18);\n      *plVar2 = *plVar5;\n      plVar2[1] = lVar1;\n      plVar2[2] = plVar5[2];\n      lVar4 = lVar3;\n    }" { (expression_statement "lVar3 = (lVar4 + 1) * 2;" (assignment_expression "lVar3 = (lVar4 + 1) * 2" identifier = (binary_expression "(lVar4 + 1) * 2" (parenthesized_expression "(lVar4 + 1)" ( (binary_expression "lVar4 + 1" identifier + number_literal) )) * number_literal)) ;) (expression_statement "lVar1 = lVar3 + -1;" (assignment_expression "lVar1 = lVar3 + -1" identifier = (binary_expression "lVar3 + -1" identifier + number_literal)) ;) (expression_statement "plVar5 = (long *)(__first + (lVar4 + 1) * 0x30);" (assignment_expression "plVar5 = (long *)(__first + (lVar4 + 1) * 0x30)" identifier = (cast_expression "(long *)(__first + (lVar4 + 1) * 0x30)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(__first + (lVar4 + 1) * 0x30)" ( (binary_expression "__first + (lVar4 + 1) * 0x30" identifier + (binary_expression "(lVar4 + 1) * 0x30" (parenthesized_expression "(lVar4 + 1)" ( (binary_expression "lVar4 + 1" identifier + number_literal) )) * number_literal)) )))) ;) (expression_statement "plVar2 = (long *)(__first + lVar1 * 0x18);" (assignment_expression "plVar2 = (long *)(__first + lVar1 * 0x18)" identifier = (cast_expression "(long *)(__first + lVar1 * 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(__first + lVar1 * 0x18)" ( (binary_expression "__first + lVar1 * 0x18" identifier + (binary_expression "lVar1 * 0x18" identifier * number_literal)) )))) ;) (if_statement "if (*plVar5 < *plVar2) {\n        lVar3 = lVar1;\n        plVar5 = plVar2;\n      }" if (parenthesized_expression "(*plVar5 < *plVar2)" ( (binary_expression "*plVar5 < *plVar2" (pointer_expression "*plVar5" * identifier) < (pointer_expression "*plVar2" * identifier)) )) (compound_statement "{\n        lVar3 = lVar1;\n        plVar5 = plVar2;\n      }" { (expression_statement "lVar3 = lVar1;" (assignment_expression "lVar3 = lVar1" identifier = identifier) ;) (expression_statement "plVar5 = plVar2;" (assignment_expression "plVar5 = plVar2" identifier = identifier) ;) })) (expression_statement "lVar1 = plVar5[1];" (assignment_expression "lVar1 = plVar5[1]" identifier = (subscript_expression "plVar5[1]" identifier [ number_literal ])) ;) (expression_statement "plVar2 = (long *)(__first + lVar4 * 0x18);" (assignment_expression "plVar2 = (long *)(__first + lVar4 * 0x18)" identifier = (cast_expression "(long *)(__first + lVar4 * 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(__first + lVar4 * 0x18)" ( (binary_expression "__first + lVar4 * 0x18" identifier + (binary_expression "lVar4 * 0x18" identifier * number_literal)) )))) ;) (expression_statement "*plVar2 = *plVar5;" (assignment_expression "*plVar2 = *plVar5" (pointer_expression "*plVar2" * identifier) = (pointer_expression "*plVar5" * identifier)) ;) (expression_statement "plVar2[1] = lVar1;" (assignment_expression "plVar2[1] = lVar1" (subscript_expression "plVar2[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "plVar2[2] = plVar5[2];" (assignment_expression "plVar2[2] = plVar5[2]" (subscript_expression "plVar2[2]" identifier [ number_literal ]) = (subscript_expression "plVar5[2]" identifier [ number_literal ])) ;) (expression_statement "lVar4 = lVar3;" (assignment_expression "lVar4 = lVar3" identifier = identifier) ;) }) while (parenthesized_expression "(lVar3 < lVar6)" ( (binary_expression "lVar3 < lVar6" identifier < identifier) )) ;) (if_statement "if ((__len & 1) == 0) goto LAB_00420d30;" if (parenthesized_expression "((__len & 1) == 0)" ( (binary_expression "(__len & 1) == 0" (parenthesized_expression "(__len & 1)" ( (binary_expression "__len & 1" identifier & number_literal) )) == number_literal) )) (goto_statement "goto LAB_00420d30;" goto statement_identifier ;)) }) (else_clause "else {\n    plVar5 = (long *)(__first + __holeIndex * 0x18);\n    lVar3 = __holeIndex;\n    if ((__len & 1) != 0) goto LAB_00420d09;\nLAB_00420d30:\n    if ((long)(__len - 2) / 2 == lVar3) {\n      lVar3 = lVar3 * 2 + 1;\n      plVar2 = (long *)(__first + lVar3 * 0x18);\n      lVar4 = plVar2[1];\n      *plVar5 = *plVar2;\n      plVar5[1] = lVar4;\n      plVar5[2] = plVar2[2];\n      plVar5 = plVar2;\n    }\n  }" else (compound_statement "{\n    plVar5 = (long *)(__first + __holeIndex * 0x18);\n    lVar3 = __holeIndex;\n    if ((__len & 1) != 0) goto LAB_00420d09;\nLAB_00420d30:\n    if ((long)(__len - 2) / 2 == lVar3) {\n      lVar3 = lVar3 * 2 + 1;\n      plVar2 = (long *)(__first + lVar3 * 0x18);\n      lVar4 = plVar2[1];\n      *plVar5 = *plVar2;\n      plVar5[1] = lVar4;\n      plVar5[2] = plVar2[2];\n      plVar5 = plVar2;\n    }\n  }" { (expression_statement "plVar5 = (long *)(__first + __holeIndex * 0x18);" (assignment_expression "plVar5 = (long *)(__first + __holeIndex * 0x18)" identifier = (cast_expression "(long *)(__first + __holeIndex * 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(__first + __holeIndex * 0x18)" ( (binary_expression "__first + __holeIndex * 0x18" identifier + (binary_expression "__holeIndex * 0x18" identifier * number_literal)) )))) ;) (expression_statement "lVar3 = __holeIndex;" (assignment_expression "lVar3 = __holeIndex" identifier = identifier) ;) (if_statement "if ((__len & 1) != 0) goto LAB_00420d09;" if (parenthesized_expression "((__len & 1) != 0)" ( (binary_expression "(__len & 1) != 0" (parenthesized_expression "(__len & 1)" ( (binary_expression "__len & 1" identifier & number_literal) )) != number_literal) )) (goto_statement "goto LAB_00420d09;" goto statement_identifier ;)) (labeled_statement "LAB_00420d30:\n    if ((long)(__len - 2) / 2 == lVar3) {\n      lVar3 = lVar3 * 2 + 1;\n      plVar2 = (long *)(__first + lVar3 * 0x18);\n      lVar4 = plVar2[1];\n      *plVar5 = *plVar2;\n      plVar5[1] = lVar4;\n      plVar5[2] = plVar2[2];\n      plVar5 = plVar2;\n    }" statement_identifier : (if_statement "if ((long)(__len - 2) / 2 == lVar3) {\n      lVar3 = lVar3 * 2 + 1;\n      plVar2 = (long *)(__first + lVar3 * 0x18);\n      lVar4 = plVar2[1];\n      *plVar5 = *plVar2;\n      plVar5[1] = lVar4;\n      plVar5[2] = plVar2[2];\n      plVar5 = plVar2;\n    }" if (parenthesized_expression "((long)(__len - 2) / 2 == lVar3)" ( (binary_expression "(long)(__len - 2) / 2 == lVar3" (binary_expression "(long)(__len - 2) / 2" (cast_expression "(long)(__len - 2)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "(__len - 2)" ( (binary_expression "__len - 2" identifier - number_literal) ))) / number_literal) == identifier) )) (compound_statement "{\n      lVar3 = lVar3 * 2 + 1;\n      plVar2 = (long *)(__first + lVar3 * 0x18);\n      lVar4 = plVar2[1];\n      *plVar5 = *plVar2;\n      plVar5[1] = lVar4;\n      plVar5[2] = plVar2[2];\n      plVar5 = plVar2;\n    }" { (expression_statement "lVar3 = lVar3 * 2 + 1;" (assignment_expression "lVar3 = lVar3 * 2 + 1" identifier = (binary_expression "lVar3 * 2 + 1" (binary_expression "lVar3 * 2" identifier * number_literal) + number_literal)) ;) (expression_statement "plVar2 = (long *)(__first + lVar3 * 0x18);" (assignment_expression "plVar2 = (long *)(__first + lVar3 * 0x18)" identifier = (cast_expression "(long *)(__first + lVar3 * 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(__first + lVar3 * 0x18)" ( (binary_expression "__first + lVar3 * 0x18" identifier + (binary_expression "lVar3 * 0x18" identifier * number_literal)) )))) ;) (expression_statement "lVar4 = plVar2[1];" (assignment_expression "lVar4 = plVar2[1]" identifier = (subscript_expression "plVar2[1]" identifier [ number_literal ])) ;) (expression_statement "*plVar5 = *plVar2;" (assignment_expression "*plVar5 = *plVar2" (pointer_expression "*plVar5" * identifier) = (pointer_expression "*plVar2" * identifier)) ;) (expression_statement "plVar5[1] = lVar4;" (assignment_expression "plVar5[1] = lVar4" (subscript_expression "plVar5[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "plVar5[2] = plVar2[2];" (assignment_expression "plVar5[2] = plVar2[2]" (subscript_expression "plVar5[2]" identifier [ number_literal ]) = (subscript_expression "plVar2[2]" identifier [ number_literal ])) ;) (expression_statement "plVar5 = plVar2;" (assignment_expression "plVar5 = plVar2" identifier = identifier) ;) }))) }))) (expression_statement "lVar4 = (lVar3 + -1) / 2;" (assignment_expression "lVar4 = (lVar3 + -1) / 2" identifier = (binary_expression "(lVar3 + -1) / 2" (parenthesized_expression "(lVar3 + -1)" ( (binary_expression "lVar3 + -1" identifier + number_literal) )) / number_literal)) ;) (if_statement "if (__holeIndex < lVar3) {\n    plVar2 = (long *)(__first + lVar4 * 0x18);\n    lVar6 = *plVar2;\n    while (lVar1 = lVar4, lVar6 < __value) {\n      lVar4 = plVar2[1];\n      plVar5 = (long *)(__first + lVar3 * 0x18);\n      *plVar5 = *plVar2;\n      plVar5[1] = lVar4;\n      plVar5[2] = plVar2[2];\n      lVar4 = (lVar1 + -1) / 2;\n      plVar5 = (long *)(__first + lVar1 * 0x18);\n      if (lVar1 <= __holeIndex) break;\n      plVar2 = (long *)(__first + lVar4 * 0x18);\n      lVar3 = lVar1;\n      lVar6 = *plVar2;\n    }\n  }" if (parenthesized_expression "(__holeIndex < lVar3)" ( (binary_expression "__holeIndex < lVar3" identifier < identifier) )) (compound_statement "{\n    plVar2 = (long *)(__first + lVar4 * 0x18);\n    lVar6 = *plVar2;\n    while (lVar1 = lVar4, lVar6 < __value) {\n      lVar4 = plVar2[1];\n      plVar5 = (long *)(__first + lVar3 * 0x18);\n      *plVar5 = *plVar2;\n      plVar5[1] = lVar4;\n      plVar5[2] = plVar2[2];\n      lVar4 = (lVar1 + -1) / 2;\n      plVar5 = (long *)(__first + lVar1 * 0x18);\n      if (lVar1 <= __holeIndex) break;\n      plVar2 = (long *)(__first + lVar4 * 0x18);\n      lVar3 = lVar1;\n      lVar6 = *plVar2;\n    }\n  }" { (expression_statement "plVar2 = (long *)(__first + lVar4 * 0x18);" (assignment_expression "plVar2 = (long *)(__first + lVar4 * 0x18)" identifier = (cast_expression "(long *)(__first + lVar4 * 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(__first + lVar4 * 0x18)" ( (binary_expression "__first + lVar4 * 0x18" identifier + (binary_expression "lVar4 * 0x18" identifier * number_literal)) )))) ;) (expression_statement "lVar6 = *plVar2;" (assignment_expression "lVar6 = *plVar2" identifier = (pointer_expression "*plVar2" * identifier)) ;) (while_statement "while (lVar1 = lVar4, lVar6 < __value) {\n      lVar4 = plVar2[1];\n      plVar5 = (long *)(__first + lVar3 * 0x18);\n      *plVar5 = *plVar2;\n      plVar5[1] = lVar4;\n      plVar5[2] = plVar2[2];\n      lVar4 = (lVar1 + -1) / 2;\n      plVar5 = (long *)(__first + lVar1 * 0x18);\n      if (lVar1 <= __holeIndex) break;\n      plVar2 = (long *)(__first + lVar4 * 0x18);\n      lVar3 = lVar1;\n      lVar6 = *plVar2;\n    }" while (parenthesized_expression "(lVar1 = lVar4, lVar6 < __value)" ( (comma_expression "lVar1 = lVar4, lVar6 < __value" (assignment_expression "lVar1 = lVar4" identifier = identifier) , (binary_expression "lVar6 < __value" identifier < identifier)) )) (compound_statement "{\n      lVar4 = plVar2[1];\n      plVar5 = (long *)(__first + lVar3 * 0x18);\n      *plVar5 = *plVar2;\n      plVar5[1] = lVar4;\n      plVar5[2] = plVar2[2];\n      lVar4 = (lVar1 + -1) / 2;\n      plVar5 = (long *)(__first + lVar1 * 0x18);\n      if (lVar1 <= __holeIndex) break;\n      plVar2 = (long *)(__first + lVar4 * 0x18);\n      lVar3 = lVar1;\n      lVar6 = *plVar2;\n    }" { (expression_statement "lVar4 = plVar2[1];" (assignment_expression "lVar4 = plVar2[1]" identifier = (subscript_expression "plVar2[1]" identifier [ number_literal ])) ;) (expression_statement "plVar5 = (long *)(__first + lVar3 * 0x18);" (assignment_expression "plVar5 = (long *)(__first + lVar3 * 0x18)" identifier = (cast_expression "(long *)(__first + lVar3 * 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(__first + lVar3 * 0x18)" ( (binary_expression "__first + lVar3 * 0x18" identifier + (binary_expression "lVar3 * 0x18" identifier * number_literal)) )))) ;) (expression_statement "*plVar5 = *plVar2;" (assignment_expression "*plVar5 = *plVar2" (pointer_expression "*plVar5" * identifier) = (pointer_expression "*plVar2" * identifier)) ;) (expression_statement "plVar5[1] = lVar4;" (assignment_expression "plVar5[1] = lVar4" (subscript_expression "plVar5[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "plVar5[2] = plVar2[2];" (assignment_expression "plVar5[2] = plVar2[2]" (subscript_expression "plVar5[2]" identifier [ number_literal ]) = (subscript_expression "plVar2[2]" identifier [ number_literal ])) ;) (expression_statement "lVar4 = (lVar1 + -1) / 2;" (assignment_expression "lVar4 = (lVar1 + -1) / 2" identifier = (binary_expression "(lVar1 + -1) / 2" (parenthesized_expression "(lVar1 + -1)" ( (binary_expression "lVar1 + -1" identifier + number_literal) )) / number_literal)) ;) (expression_statement "plVar5 = (long *)(__first + lVar1 * 0x18);" (assignment_expression "plVar5 = (long *)(__first + lVar1 * 0x18)" identifier = (cast_expression "(long *)(__first + lVar1 * 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(__first + lVar1 * 0x18)" ( (binary_expression "__first + lVar1 * 0x18" identifier + (binary_expression "lVar1 * 0x18" identifier * number_literal)) )))) ;) (if_statement "if (lVar1 <= __holeIndex) break;" if (parenthesized_expression "(lVar1 <= __holeIndex)" ( (binary_expression "lVar1 <= __holeIndex" identifier <= identifier) )) (break_statement "break;" break ;)) (expression_statement "plVar2 = (long *)(__first + lVar4 * 0x18);" (assignment_expression "plVar2 = (long *)(__first + lVar4 * 0x18)" identifier = (cast_expression "(long *)(__first + lVar4 * 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(__first + lVar4 * 0x18)" ( (binary_expression "__first + lVar4 * 0x18" identifier + (binary_expression "lVar4 * 0x18" identifier * number_literal)) )))) ;) (expression_statement "lVar3 = lVar1;" (assignment_expression "lVar3 = lVar1" identifier = identifier) ;) (expression_statement "lVar6 = *plVar2;" (assignment_expression "lVar6 = *plVar2" identifier = (pointer_expression "*plVar2" * identifier)) ;) })) })) (labeled_statement "LAB_00420d09:\n  *plVar5 = __value;" statement_identifier : (expression_statement "*plVar5 = __value;" (assignment_expression "*plVar5 = __value" (pointer_expression "*plVar5" * identifier) = identifier) ;)) (expression_statement "plVar5[1] = in_stack_00000010;" (assignment_expression "plVar5[1] = in_stack_00000010" (subscript_expression "plVar5[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "plVar5[2] = in_stack_00000018;" (assignment_expression "plVar5[2] = in_stack_00000018" (subscript_expression "plVar5[2]" identifier [ number_literal ]) = identifier) ;) (return_statement "return;" return ;) (ERROR "}" }))
(translation_unit "void FUN_00420c00(long param_1,long param_2,ulong param_3)\n\n{\n  long lVar1;\n  long *plVar2;\n  long lVar3;\n  long lVar4;\n  long *plVar5;\n  long lVar6;\n  long in_stack_00000008;\n  long in_stack_00000010;\n  long in_stack_00000018;\n  \n  lVar6 = (long)(param_3 - 1) / 2;\n  lVar4 = param_2;\n  if (param_2 < lVar6) {\n    do {\n      lVar3 = (lVar4 + 1) * 2;\n      lVar1 = lVar3 + -1;\n      plVar5 = (long *)(param_1 + (lVar4 + 1) * 0x30);\n      plVar2 = (long *)(param_1 + lVar1 * 0x18);\n      if (*plVar5 < *plVar2) {\n        lVar3 = lVar1;\n        plVar5 = plVar2;\n      }\n      lVar1 = plVar5[1];\n      plVar2 = (long *)(param_1 + lVar4 * 0x18);\n      *plVar2 = *plVar5;\n      plVar2[1] = lVar1;\n      plVar2[2] = plVar5[2];\n      lVar4 = lVar3;\n    } while (lVar3 < lVar6);\n    if ((param_3 & 1) == 0) goto LAB_00420d30;\n  }\n  else {\n    plVar5 = (long *)(param_1 + param_2 * 0x18);\n    lVar3 = param_2;\n    if ((param_3 & 1) != 0) goto LAB_00420d09;\nLAB_00420d30:\n    if ((long)(param_3 - 2) / 2 == lVar3) {\n      lVar3 = lVar3 * 2 + 1;\n      plVar2 = (long *)(param_1 + lVar3 * 0x18);\n      lVar4 = plVar2[1];\n      *plVar5 = *plVar2;\n      plVar5[1] = lVar4;\n      plVar5[2] = plVar2[2];\n      plVar5 = plVar2;\n    }\n  }\n  lVar4 = (lVar3 + -1) / 2;\n  if (param_2 < lVar3) {\n    plVar2 = (long *)(param_1 + lVar4 * 0x18);\n    lVar6 = *plVar2;\n    while (lVar1 = lVar4, lVar6 < in_stack_00000008) {\n      lVar4 = plVar2[1];\n      plVar5 = (long *)(param_1 + lVar3 * 0x18);\n      *plVar5 = *plVar2;\n      plVar5[1] = lVar4;\n      plVar5[2] = plVar2[2];\n      lVar4 = (lVar1 + -1) / 2;\n      plVar5 = (long *)(param_1 + lVar1 * 0x18);\n      if (lVar1 <= param_2) break;\n      plVar2 = (long *)(param_1 + lVar4 * 0x18);\n      lVar3 = lVar1;\n      lVar6 = *plVar2;\n    }\n  }\nLAB_00420d09:\n  *plVar5 = in_stack_00000008;\n  plVar5[1] = in_stack_00000010;\n  plVar5[2] = in_stack_00000018;\n  return;\n}\n\n" (function_definition "void FUN_00420c00(long param_1,long param_2,ulong param_3)\n\n{\n  long lVar1;\n  long *plVar2;\n  long lVar3;\n  long lVar4;\n  long *plVar5;\n  long lVar6;\n  long in_stack_00000008;\n  long in_stack_00000010;\n  long in_stack_00000018;\n  \n  lVar6 = (long)(param_3 - 1) / 2;\n  lVar4 = param_2;\n  if (param_2 < lVar6) {\n    do {\n      lVar3 = (lVar4 + 1) * 2;\n      lVar1 = lVar3 + -1;\n      plVar5 = (long *)(param_1 + (lVar4 + 1) * 0x30);\n      plVar2 = (long *)(param_1 + lVar1 * 0x18);\n      if (*plVar5 < *plVar2) {\n        lVar3 = lVar1;\n        plVar5 = plVar2;\n      }\n      lVar1 = plVar5[1];\n      plVar2 = (long *)(param_1 + lVar4 * 0x18);\n      *plVar2 = *plVar5;\n      plVar2[1] = lVar1;\n      plVar2[2] = plVar5[2];\n      lVar4 = lVar3;\n    } while (lVar3 < lVar6);\n    if ((param_3 & 1) == 0) goto LAB_00420d30;\n  }\n  else {\n    plVar5 = (long *)(param_1 + param_2 * 0x18);\n    lVar3 = param_2;\n    if ((param_3 & 1) != 0) goto LAB_00420d09;\nLAB_00420d30:\n    if ((long)(param_3 - 2) / 2 == lVar3) {\n      lVar3 = lVar3 * 2 + 1;\n      plVar2 = (long *)(param_1 + lVar3 * 0x18);\n      lVar4 = plVar2[1];\n      *plVar5 = *plVar2;\n      plVar5[1] = lVar4;\n      plVar5[2] = plVar2[2];\n      plVar5 = plVar2;\n    }\n  }\n  lVar4 = (lVar3 + -1) / 2;\n  if (param_2 < lVar3) {\n    plVar2 = (long *)(param_1 + lVar4 * 0x18);\n    lVar6 = *plVar2;\n    while (lVar1 = lVar4, lVar6 < in_stack_00000008) {\n      lVar4 = plVar2[1];\n      plVar5 = (long *)(param_1 + lVar3 * 0x18);\n      *plVar5 = *plVar2;\n      plVar5[1] = lVar4;\n      plVar5[2] = plVar2[2];\n      lVar4 = (lVar1 + -1) / 2;\n      plVar5 = (long *)(param_1 + lVar1 * 0x18);\n      if (lVar1 <= param_2) break;\n      plVar2 = (long *)(param_1 + lVar4 * 0x18);\n      lVar3 = lVar1;\n      lVar6 = *plVar2;\n    }\n  }\nLAB_00420d09:\n  *plVar5 = in_stack_00000008;\n  plVar5[1] = in_stack_00000010;\n  plVar5[2] = in_stack_00000018;\n  return;\n}" primitive_type (function_declarator "FUN_00420c00(long param_1,long param_2,ulong param_3)" identifier (parameter_list "(long param_1,long param_2,ulong param_3)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "long param_2" (sized_type_specifier "long" long) identifier) , (parameter_declaration "ulong param_3" type_identifier identifier) ))) (compound_statement "{\n  long lVar1;\n  long *plVar2;\n  long lVar3;\n  long lVar4;\n  long *plVar5;\n  long lVar6;\n  long in_stack_00000008;\n  long in_stack_00000010;\n  long in_stack_00000018;\n  \n  lVar6 = (long)(param_3 - 1) / 2;\n  lVar4 = param_2;\n  if (param_2 < lVar6) {\n    do {\n      lVar3 = (lVar4 + 1) * 2;\n      lVar1 = lVar3 + -1;\n      plVar5 = (long *)(param_1 + (lVar4 + 1) * 0x30);\n      plVar2 = (long *)(param_1 + lVar1 * 0x18);\n      if (*plVar5 < *plVar2) {\n        lVar3 = lVar1;\n        plVar5 = plVar2;\n      }\n      lVar1 = plVar5[1];\n      plVar2 = (long *)(param_1 + lVar4 * 0x18);\n      *plVar2 = *plVar5;\n      plVar2[1] = lVar1;\n      plVar2[2] = plVar5[2];\n      lVar4 = lVar3;\n    } while (lVar3 < lVar6);\n    if ((param_3 & 1) == 0) goto LAB_00420d30;\n  }\n  else {\n    plVar5 = (long *)(param_1 + param_2 * 0x18);\n    lVar3 = param_2;\n    if ((param_3 & 1) != 0) goto LAB_00420d09;\nLAB_00420d30:\n    if ((long)(param_3 - 2) / 2 == lVar3) {\n      lVar3 = lVar3 * 2 + 1;\n      plVar2 = (long *)(param_1 + lVar3 * 0x18);\n      lVar4 = plVar2[1];\n      *plVar5 = *plVar2;\n      plVar5[1] = lVar4;\n      plVar5[2] = plVar2[2];\n      plVar5 = plVar2;\n    }\n  }\n  lVar4 = (lVar3 + -1) / 2;\n  if (param_2 < lVar3) {\n    plVar2 = (long *)(param_1 + lVar4 * 0x18);\n    lVar6 = *plVar2;\n    while (lVar1 = lVar4, lVar6 < in_stack_00000008) {\n      lVar4 = plVar2[1];\n      plVar5 = (long *)(param_1 + lVar3 * 0x18);\n      *plVar5 = *plVar2;\n      plVar5[1] = lVar4;\n      plVar5[2] = plVar2[2];\n      lVar4 = (lVar1 + -1) / 2;\n      plVar5 = (long *)(param_1 + lVar1 * 0x18);\n      if (lVar1 <= param_2) break;\n      plVar2 = (long *)(param_1 + lVar4 * 0x18);\n      lVar3 = lVar1;\n      lVar6 = *plVar2;\n    }\n  }\nLAB_00420d09:\n  *plVar5 = in_stack_00000008;\n  plVar5[1] = in_stack_00000010;\n  plVar5[2] = in_stack_00000018;\n  return;\n}" { (declaration "long lVar1;" (sized_type_specifier "long" long) identifier ;) (declaration "long *plVar2;" (sized_type_specifier "long" long) (pointer_declarator "*plVar2" * identifier) ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar4;" (sized_type_specifier "long" long) identifier ;) (declaration "long *plVar5;" (sized_type_specifier "long" long) (pointer_declarator "*plVar5" * identifier) ;) (declaration "long lVar6;" (sized_type_specifier "long" long) identifier ;) (declaration "long in_stack_00000008;" (sized_type_specifier "long" long) identifier ;) (declaration "long in_stack_00000010;" (sized_type_specifier "long" long) identifier ;) (declaration "long in_stack_00000018;" (sized_type_specifier "long" long) identifier ;) (expression_statement "lVar6 = (long)(param_3 - 1) / 2;" (assignment_expression "lVar6 = (long)(param_3 - 1) / 2" identifier = (binary_expression "(long)(param_3 - 1) / 2" (cast_expression "(long)(param_3 - 1)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "(param_3 - 1)" ( (binary_expression "param_3 - 1" identifier - number_literal) ))) / number_literal)) ;) (expression_statement "lVar4 = param_2;" (assignment_expression "lVar4 = param_2" identifier = identifier) ;) (if_statement "if (param_2 < lVar6) {\n    do {\n      lVar3 = (lVar4 + 1) * 2;\n      lVar1 = lVar3 + -1;\n      plVar5 = (long *)(param_1 + (lVar4 + 1) * 0x30);\n      plVar2 = (long *)(param_1 + lVar1 * 0x18);\n      if (*plVar5 < *plVar2) {\n        lVar3 = lVar1;\n        plVar5 = plVar2;\n      }\n      lVar1 = plVar5[1];\n      plVar2 = (long *)(param_1 + lVar4 * 0x18);\n      *plVar2 = *plVar5;\n      plVar2[1] = lVar1;\n      plVar2[2] = plVar5[2];\n      lVar4 = lVar3;\n    } while (lVar3 < lVar6);\n    if ((param_3 & 1) == 0) goto LAB_00420d30;\n  }\n  else {\n    plVar5 = (long *)(param_1 + param_2 * 0x18);\n    lVar3 = param_2;\n    if ((param_3 & 1) != 0) goto LAB_00420d09;\nLAB_00420d30:\n    if ((long)(param_3 - 2) / 2 == lVar3) {\n      lVar3 = lVar3 * 2 + 1;\n      plVar2 = (long *)(param_1 + lVar3 * 0x18);\n      lVar4 = plVar2[1];\n      *plVar5 = *plVar2;\n      plVar5[1] = lVar4;\n      plVar5[2] = plVar2[2];\n      plVar5 = plVar2;\n    }\n  }" if (parenthesized_expression "(param_2 < lVar6)" ( (binary_expression "param_2 < lVar6" identifier < identifier) )) (compound_statement "{\n    do {\n      lVar3 = (lVar4 + 1) * 2;\n      lVar1 = lVar3 + -1;\n      plVar5 = (long *)(param_1 + (lVar4 + 1) * 0x30);\n      plVar2 = (long *)(param_1 + lVar1 * 0x18);\n      if (*plVar5 < *plVar2) {\n        lVar3 = lVar1;\n        plVar5 = plVar2;\n      }\n      lVar1 = plVar5[1];\n      plVar2 = (long *)(param_1 + lVar4 * 0x18);\n      *plVar2 = *plVar5;\n      plVar2[1] = lVar1;\n      plVar2[2] = plVar5[2];\n      lVar4 = lVar3;\n    } while (lVar3 < lVar6);\n    if ((param_3 & 1) == 0) goto LAB_00420d30;\n  }" { (do_statement "do {\n      lVar3 = (lVar4 + 1) * 2;\n      lVar1 = lVar3 + -1;\n      plVar5 = (long *)(param_1 + (lVar4 + 1) * 0x30);\n      plVar2 = (long *)(param_1 + lVar1 * 0x18);\n      if (*plVar5 < *plVar2) {\n        lVar3 = lVar1;\n        plVar5 = plVar2;\n      }\n      lVar1 = plVar5[1];\n      plVar2 = (long *)(param_1 + lVar4 * 0x18);\n      *plVar2 = *plVar5;\n      plVar2[1] = lVar1;\n      plVar2[2] = plVar5[2];\n      lVar4 = lVar3;\n    } while (lVar3 < lVar6);" do (compound_statement "{\n      lVar3 = (lVar4 + 1) * 2;\n      lVar1 = lVar3 + -1;\n      plVar5 = (long *)(param_1 + (lVar4 + 1) * 0x30);\n      plVar2 = (long *)(param_1 + lVar1 * 0x18);\n      if (*plVar5 < *plVar2) {\n        lVar3 = lVar1;\n        plVar5 = plVar2;\n      }\n      lVar1 = plVar5[1];\n      plVar2 = (long *)(param_1 + lVar4 * 0x18);\n      *plVar2 = *plVar5;\n      plVar2[1] = lVar1;\n      plVar2[2] = plVar5[2];\n      lVar4 = lVar3;\n    }" { (expression_statement "lVar3 = (lVar4 + 1) * 2;" (assignment_expression "lVar3 = (lVar4 + 1) * 2" identifier = (binary_expression "(lVar4 + 1) * 2" (parenthesized_expression "(lVar4 + 1)" ( (binary_expression "lVar4 + 1" identifier + number_literal) )) * number_literal)) ;) (expression_statement "lVar1 = lVar3 + -1;" (assignment_expression "lVar1 = lVar3 + -1" identifier = (binary_expression "lVar3 + -1" identifier + number_literal)) ;) (expression_statement "plVar5 = (long *)(param_1 + (lVar4 + 1) * 0x30);" (assignment_expression "plVar5 = (long *)(param_1 + (lVar4 + 1) * 0x30)" identifier = (cast_expression "(long *)(param_1 + (lVar4 + 1) * 0x30)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + (lVar4 + 1) * 0x30)" ( (binary_expression "param_1 + (lVar4 + 1) * 0x30" identifier + (binary_expression "(lVar4 + 1) * 0x30" (parenthesized_expression "(lVar4 + 1)" ( (binary_expression "lVar4 + 1" identifier + number_literal) )) * number_literal)) )))) ;) (expression_statement "plVar2 = (long *)(param_1 + lVar1 * 0x18);" (assignment_expression "plVar2 = (long *)(param_1 + lVar1 * 0x18)" identifier = (cast_expression "(long *)(param_1 + lVar1 * 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + lVar1 * 0x18)" ( (binary_expression "param_1 + lVar1 * 0x18" identifier + (binary_expression "lVar1 * 0x18" identifier * number_literal)) )))) ;) (if_statement "if (*plVar5 < *plVar2) {\n        lVar3 = lVar1;\n        plVar5 = plVar2;\n      }" if (parenthesized_expression "(*plVar5 < *plVar2)" ( (binary_expression "*plVar5 < *plVar2" (pointer_expression "*plVar5" * identifier) < (pointer_expression "*plVar2" * identifier)) )) (compound_statement "{\n        lVar3 = lVar1;\n        plVar5 = plVar2;\n      }" { (expression_statement "lVar3 = lVar1;" (assignment_expression "lVar3 = lVar1" identifier = identifier) ;) (expression_statement "plVar5 = plVar2;" (assignment_expression "plVar5 = plVar2" identifier = identifier) ;) })) (expression_statement "lVar1 = plVar5[1];" (assignment_expression "lVar1 = plVar5[1]" identifier = (subscript_expression "plVar5[1]" identifier [ number_literal ])) ;) (expression_statement "plVar2 = (long *)(param_1 + lVar4 * 0x18);" (assignment_expression "plVar2 = (long *)(param_1 + lVar4 * 0x18)" identifier = (cast_expression "(long *)(param_1 + lVar4 * 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + lVar4 * 0x18)" ( (binary_expression "param_1 + lVar4 * 0x18" identifier + (binary_expression "lVar4 * 0x18" identifier * number_literal)) )))) ;) (expression_statement "*plVar2 = *plVar5;" (assignment_expression "*plVar2 = *plVar5" (pointer_expression "*plVar2" * identifier) = (pointer_expression "*plVar5" * identifier)) ;) (expression_statement "plVar2[1] = lVar1;" (assignment_expression "plVar2[1] = lVar1" (subscript_expression "plVar2[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "plVar2[2] = plVar5[2];" (assignment_expression "plVar2[2] = plVar5[2]" (subscript_expression "plVar2[2]" identifier [ number_literal ]) = (subscript_expression "plVar5[2]" identifier [ number_literal ])) ;) (expression_statement "lVar4 = lVar3;" (assignment_expression "lVar4 = lVar3" identifier = identifier) ;) }) while (parenthesized_expression "(lVar3 < lVar6)" ( (binary_expression "lVar3 < lVar6" identifier < identifier) )) ;) (if_statement "if ((param_3 & 1) == 0) goto LAB_00420d30;" if (parenthesized_expression "((param_3 & 1) == 0)" ( (binary_expression "(param_3 & 1) == 0" (parenthesized_expression "(param_3 & 1)" ( (binary_expression "param_3 & 1" identifier & number_literal) )) == number_literal) )) (goto_statement "goto LAB_00420d30;" goto statement_identifier ;)) }) (else_clause "else {\n    plVar5 = (long *)(param_1 + param_2 * 0x18);\n    lVar3 = param_2;\n    if ((param_3 & 1) != 0) goto LAB_00420d09;\nLAB_00420d30:\n    if ((long)(param_3 - 2) / 2 == lVar3) {\n      lVar3 = lVar3 * 2 + 1;\n      plVar2 = (long *)(param_1 + lVar3 * 0x18);\n      lVar4 = plVar2[1];\n      *plVar5 = *plVar2;\n      plVar5[1] = lVar4;\n      plVar5[2] = plVar2[2];\n      plVar5 = plVar2;\n    }\n  }" else (compound_statement "{\n    plVar5 = (long *)(param_1 + param_2 * 0x18);\n    lVar3 = param_2;\n    if ((param_3 & 1) != 0) goto LAB_00420d09;\nLAB_00420d30:\n    if ((long)(param_3 - 2) / 2 == lVar3) {\n      lVar3 = lVar3 * 2 + 1;\n      plVar2 = (long *)(param_1 + lVar3 * 0x18);\n      lVar4 = plVar2[1];\n      *plVar5 = *plVar2;\n      plVar5[1] = lVar4;\n      plVar5[2] = plVar2[2];\n      plVar5 = plVar2;\n    }\n  }" { (expression_statement "plVar5 = (long *)(param_1 + param_2 * 0x18);" (assignment_expression "plVar5 = (long *)(param_1 + param_2 * 0x18)" identifier = (cast_expression "(long *)(param_1 + param_2 * 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + param_2 * 0x18)" ( (binary_expression "param_1 + param_2 * 0x18" identifier + (binary_expression "param_2 * 0x18" identifier * number_literal)) )))) ;) (expression_statement "lVar3 = param_2;" (assignment_expression "lVar3 = param_2" identifier = identifier) ;) (if_statement "if ((param_3 & 1) != 0) goto LAB_00420d09;" if (parenthesized_expression "((param_3 & 1) != 0)" ( (binary_expression "(param_3 & 1) != 0" (parenthesized_expression "(param_3 & 1)" ( (binary_expression "param_3 & 1" identifier & number_literal) )) != number_literal) )) (goto_statement "goto LAB_00420d09;" goto statement_identifier ;)) (labeled_statement "LAB_00420d30:\n    if ((long)(param_3 - 2) / 2 == lVar3) {\n      lVar3 = lVar3 * 2 + 1;\n      plVar2 = (long *)(param_1 + lVar3 * 0x18);\n      lVar4 = plVar2[1];\n      *plVar5 = *plVar2;\n      plVar5[1] = lVar4;\n      plVar5[2] = plVar2[2];\n      plVar5 = plVar2;\n    }" statement_identifier : (if_statement "if ((long)(param_3 - 2) / 2 == lVar3) {\n      lVar3 = lVar3 * 2 + 1;\n      plVar2 = (long *)(param_1 + lVar3 * 0x18);\n      lVar4 = plVar2[1];\n      *plVar5 = *plVar2;\n      plVar5[1] = lVar4;\n      plVar5[2] = plVar2[2];\n      plVar5 = plVar2;\n    }" if (parenthesized_expression "((long)(param_3 - 2) / 2 == lVar3)" ( (binary_expression "(long)(param_3 - 2) / 2 == lVar3" (binary_expression "(long)(param_3 - 2) / 2" (cast_expression "(long)(param_3 - 2)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "(param_3 - 2)" ( (binary_expression "param_3 - 2" identifier - number_literal) ))) / number_literal) == identifier) )) (compound_statement "{\n      lVar3 = lVar3 * 2 + 1;\n      plVar2 = (long *)(param_1 + lVar3 * 0x18);\n      lVar4 = plVar2[1];\n      *plVar5 = *plVar2;\n      plVar5[1] = lVar4;\n      plVar5[2] = plVar2[2];\n      plVar5 = plVar2;\n    }" { (expression_statement "lVar3 = lVar3 * 2 + 1;" (assignment_expression "lVar3 = lVar3 * 2 + 1" identifier = (binary_expression "lVar3 * 2 + 1" (binary_expression "lVar3 * 2" identifier * number_literal) + number_literal)) ;) (expression_statement "plVar2 = (long *)(param_1 + lVar3 * 0x18);" (assignment_expression "plVar2 = (long *)(param_1 + lVar3 * 0x18)" identifier = (cast_expression "(long *)(param_1 + lVar3 * 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + lVar3 * 0x18)" ( (binary_expression "param_1 + lVar3 * 0x18" identifier + (binary_expression "lVar3 * 0x18" identifier * number_literal)) )))) ;) (expression_statement "lVar4 = plVar2[1];" (assignment_expression "lVar4 = plVar2[1]" identifier = (subscript_expression "plVar2[1]" identifier [ number_literal ])) ;) (expression_statement "*plVar5 = *plVar2;" (assignment_expression "*plVar5 = *plVar2" (pointer_expression "*plVar5" * identifier) = (pointer_expression "*plVar2" * identifier)) ;) (expression_statement "plVar5[1] = lVar4;" (assignment_expression "plVar5[1] = lVar4" (subscript_expression "plVar5[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "plVar5[2] = plVar2[2];" (assignment_expression "plVar5[2] = plVar2[2]" (subscript_expression "plVar5[2]" identifier [ number_literal ]) = (subscript_expression "plVar2[2]" identifier [ number_literal ])) ;) (expression_statement "plVar5 = plVar2;" (assignment_expression "plVar5 = plVar2" identifier = identifier) ;) }))) }))) (expression_statement "lVar4 = (lVar3 + -1) / 2;" (assignment_expression "lVar4 = (lVar3 + -1) / 2" identifier = (binary_expression "(lVar3 + -1) / 2" (parenthesized_expression "(lVar3 + -1)" ( (binary_expression "lVar3 + -1" identifier + number_literal) )) / number_literal)) ;) (if_statement "if (param_2 < lVar3) {\n    plVar2 = (long *)(param_1 + lVar4 * 0x18);\n    lVar6 = *plVar2;\n    while (lVar1 = lVar4, lVar6 < in_stack_00000008) {\n      lVar4 = plVar2[1];\n      plVar5 = (long *)(param_1 + lVar3 * 0x18);\n      *plVar5 = *plVar2;\n      plVar5[1] = lVar4;\n      plVar5[2] = plVar2[2];\n      lVar4 = (lVar1 + -1) / 2;\n      plVar5 = (long *)(param_1 + lVar1 * 0x18);\n      if (lVar1 <= param_2) break;\n      plVar2 = (long *)(param_1 + lVar4 * 0x18);\n      lVar3 = lVar1;\n      lVar6 = *plVar2;\n    }\n  }" if (parenthesized_expression "(param_2 < lVar3)" ( (binary_expression "param_2 < lVar3" identifier < identifier) )) (compound_statement "{\n    plVar2 = (long *)(param_1 + lVar4 * 0x18);\n    lVar6 = *plVar2;\n    while (lVar1 = lVar4, lVar6 < in_stack_00000008) {\n      lVar4 = plVar2[1];\n      plVar5 = (long *)(param_1 + lVar3 * 0x18);\n      *plVar5 = *plVar2;\n      plVar5[1] = lVar4;\n      plVar5[2] = plVar2[2];\n      lVar4 = (lVar1 + -1) / 2;\n      plVar5 = (long *)(param_1 + lVar1 * 0x18);\n      if (lVar1 <= param_2) break;\n      plVar2 = (long *)(param_1 + lVar4 * 0x18);\n      lVar3 = lVar1;\n      lVar6 = *plVar2;\n    }\n  }" { (expression_statement "plVar2 = (long *)(param_1 + lVar4 * 0x18);" (assignment_expression "plVar2 = (long *)(param_1 + lVar4 * 0x18)" identifier = (cast_expression "(long *)(param_1 + lVar4 * 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + lVar4 * 0x18)" ( (binary_expression "param_1 + lVar4 * 0x18" identifier + (binary_expression "lVar4 * 0x18" identifier * number_literal)) )))) ;) (expression_statement "lVar6 = *plVar2;" (assignment_expression "lVar6 = *plVar2" identifier = (pointer_expression "*plVar2" * identifier)) ;) (while_statement "while (lVar1 = lVar4, lVar6 < in_stack_00000008) {\n      lVar4 = plVar2[1];\n      plVar5 = (long *)(param_1 + lVar3 * 0x18);\n      *plVar5 = *plVar2;\n      plVar5[1] = lVar4;\n      plVar5[2] = plVar2[2];\n      lVar4 = (lVar1 + -1) / 2;\n      plVar5 = (long *)(param_1 + lVar1 * 0x18);\n      if (lVar1 <= param_2) break;\n      plVar2 = (long *)(param_1 + lVar4 * 0x18);\n      lVar3 = lVar1;\n      lVar6 = *plVar2;\n    }" while (parenthesized_expression "(lVar1 = lVar4, lVar6 < in_stack_00000008)" ( (comma_expression "lVar1 = lVar4, lVar6 < in_stack_00000008" (assignment_expression "lVar1 = lVar4" identifier = identifier) , (binary_expression "lVar6 < in_stack_00000008" identifier < identifier)) )) (compound_statement "{\n      lVar4 = plVar2[1];\n      plVar5 = (long *)(param_1 + lVar3 * 0x18);\n      *plVar5 = *plVar2;\n      plVar5[1] = lVar4;\n      plVar5[2] = plVar2[2];\n      lVar4 = (lVar1 + -1) / 2;\n      plVar5 = (long *)(param_1 + lVar1 * 0x18);\n      if (lVar1 <= param_2) break;\n      plVar2 = (long *)(param_1 + lVar4 * 0x18);\n      lVar3 = lVar1;\n      lVar6 = *plVar2;\n    }" { (expression_statement "lVar4 = plVar2[1];" (assignment_expression "lVar4 = plVar2[1]" identifier = (subscript_expression "plVar2[1]" identifier [ number_literal ])) ;) (expression_statement "plVar5 = (long *)(param_1 + lVar3 * 0x18);" (assignment_expression "plVar5 = (long *)(param_1 + lVar3 * 0x18)" identifier = (cast_expression "(long *)(param_1 + lVar3 * 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + lVar3 * 0x18)" ( (binary_expression "param_1 + lVar3 * 0x18" identifier + (binary_expression "lVar3 * 0x18" identifier * number_literal)) )))) ;) (expression_statement "*plVar5 = *plVar2;" (assignment_expression "*plVar5 = *plVar2" (pointer_expression "*plVar5" * identifier) = (pointer_expression "*plVar2" * identifier)) ;) (expression_statement "plVar5[1] = lVar4;" (assignment_expression "plVar5[1] = lVar4" (subscript_expression "plVar5[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "plVar5[2] = plVar2[2];" (assignment_expression "plVar5[2] = plVar2[2]" (subscript_expression "plVar5[2]" identifier [ number_literal ]) = (subscript_expression "plVar2[2]" identifier [ number_literal ])) ;) (expression_statement "lVar4 = (lVar1 + -1) / 2;" (assignment_expression "lVar4 = (lVar1 + -1) / 2" identifier = (binary_expression "(lVar1 + -1) / 2" (parenthesized_expression "(lVar1 + -1)" ( (binary_expression "lVar1 + -1" identifier + number_literal) )) / number_literal)) ;) (expression_statement "plVar5 = (long *)(param_1 + lVar1 * 0x18);" (assignment_expression "plVar5 = (long *)(param_1 + lVar1 * 0x18)" identifier = (cast_expression "(long *)(param_1 + lVar1 * 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + lVar1 * 0x18)" ( (binary_expression "param_1 + lVar1 * 0x18" identifier + (binary_expression "lVar1 * 0x18" identifier * number_literal)) )))) ;) (if_statement "if (lVar1 <= param_2) break;" if (parenthesized_expression "(lVar1 <= param_2)" ( (binary_expression "lVar1 <= param_2" identifier <= identifier) )) (break_statement "break;" break ;)) (expression_statement "plVar2 = (long *)(param_1 + lVar4 * 0x18);" (assignment_expression "plVar2 = (long *)(param_1 + lVar4 * 0x18)" identifier = (cast_expression "(long *)(param_1 + lVar4 * 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + lVar4 * 0x18)" ( (binary_expression "param_1 + lVar4 * 0x18" identifier + (binary_expression "lVar4 * 0x18" identifier * number_literal)) )))) ;) (expression_statement "lVar3 = lVar1;" (assignment_expression "lVar3 = lVar1" identifier = identifier) ;) (expression_statement "lVar6 = *plVar2;" (assignment_expression "lVar6 = *plVar2" identifier = (pointer_expression "*plVar2" * identifier)) ;) })) })) (labeled_statement "LAB_00420d09:\n  *plVar5 = in_stack_00000008;" statement_identifier : (expression_statement "*plVar5 = in_stack_00000008;" (assignment_expression "*plVar5 = in_stack_00000008" (pointer_expression "*plVar5" * identifier) = identifier) ;)) (expression_statement "plVar5[1] = in_stack_00000010;" (assignment_expression "plVar5[1] = in_stack_00000010" (subscript_expression "plVar5[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "plVar5[2] = in_stack_00000018;" (assignment_expression "plVar5[2] = in_stack_00000018" (subscript_expression "plVar5[2]" identifier [ number_literal ]) = identifier) ;) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (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) (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 ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (parenthesized_expression ( (binary_expression IDENT - LIT) ))) / LIT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT + LIT) )) * LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression (parenthesized_expression ( (binary_expression IDENT + LIT) )) * LIT)) )))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression IDENT * LIT)) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) < (pointer_expression * IDENT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) })) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression IDENT * LIT)) )))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) while (parenthesized_expression ( (binary_expression IDENT < IDENT) )) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) (goto_statement goto statement_identifier ;)) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression IDENT * LIT)) )))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) )) (goto_statement goto statement_identifier ;)) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (parenthesized_expression ( (binary_expression IDENT - LIT) ))) / LIT) == IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT * LIT) + LIT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression IDENT * LIT)) )))) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }))) }))) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT + LIT) )) / LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression IDENT * LIT)) )))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (while_statement while (parenthesized_expression ( (comma_expression (assignment_expression IDENT = IDENT) , (binary_expression IDENT < IDENT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression IDENT * LIT)) )))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT + LIT) )) / LIT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression IDENT * LIT)) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression IDENT * LIT)) )))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) })) })) (labeled_statement statement_identifier : (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) ;) (return_statement return ;) })))
(function_definition "void FUN_00420c00(long param_1,long param_2,ulong param_3)\n\n{\n  long lVar1;\n  long *plVar2;\n  long lVar3;\n  long lVar4;\n  long *plVar5;\n  long lVar6;\n  long in_stack_00000008;\n  long in_stack_00000010;\n  long in_stack_00000018;\n  \n  lVar6 = (long)(param_3 - 1) / 2;\n  lVar4 = param_2;\n  if (param_2 < lVar6) {\n    do {\n      lVar3 = (lVar4 + 1) * 2;\n      lVar1 = lVar3 + -1;\n      plVar5 = (long *)(param_1 + (lVar4 + 1) * 0x30);\n      plVar2 = (long *)(param_1 + lVar1 * 0x18);\n      if (*plVar5 < *plVar2) {\n        lVar3 = lVar1;\n        plVar5 = plVar2;\n      }\n      lVar1 = plVar5[1];\n      plVar2 = (long *)(param_1 + lVar4 * 0x18);\n      *plVar2 = *plVar5;\n      plVar2[1] = lVar1;\n      plVar2[2] = plVar5[2];\n      lVar4 = lVar3;\n    } while (lVar3 < lVar6);\n    if ((param_3 & 1) == 0) goto LAB_00420d30;\n  }\n  else {\n    plVar5 = (long *)(param_1 + param_2 * 0x18);\n    lVar3 = param_2;\n    if ((param_3 & 1) != 0) goto LAB_00420d09;\nLAB_00420d30:\n    if ((long)(param_3 - 2) / 2 == lVar3) {\n      lVar3 = lVar3 * 2 + 1;\n      plVar2 = (long *)(param_1 + lVar3 * 0x18);\n      lVar4 = plVar2[1];\n      *plVar5 = *plVar2;\n      plVar5[1] = lVar4;\n      plVar5[2] = plVar2[2];\n      plVar5 = plVar2;\n    }\n  }\n  lVar4 = (lVar3 + -1) / 2;\n  if (param_2 < lVar3) {\n    plVar2 = (long *)(param_1 + lVar4 * 0x18);\n    lVar6 = *plVar2;\n    while (lVar1 = lVar4, lVar6 < in_stack_00000008) {\n      lVar4 = plVar2[1];\n      plVar5 = (long *)(param_1 + lVar3 * 0x18);\n      *plVar5 = *plVar2;\n      plVar5[1] = lVar4;\n      plVar5[2] = plVar2[2];\n      lVar4 = (lVar1 + -1) / 2;\n      plVar5 = (long *)(param_1 + lVar1 * 0x18);\n      if (lVar1 <= param_2) break;\n      plVar2 = (long *)(param_1 + lVar4 * 0x18);\n      lVar3 = lVar1;\n      lVar6 = *plVar2;\n    }\n  }\nLAB_00420d09:\n  *plVar5 = in_stack_00000008;\n  plVar5[1] = in_stack_00000010;\n  plVar5[2] = in_stack_00000018;\n  return;\n}" (primitive_type "void") (function_declarator "FUN_00420c00(long param_1,long param_2,ulong param_3)" (identifier "FUN_00420c00") (parameter_list "(long param_1,long param_2,ulong param_3)" (( "(") (parameter_declaration "long param_1" (sized_type_specifier "long" (long "long")) (identifier "param_1")) (, ",") (parameter_declaration "long param_2" (sized_type_specifier "long" (long "long")) (identifier "param_2")) (, ",") (parameter_declaration "ulong param_3" (type_identifier "ulong") (identifier "param_3")) () ")"))) (compound_statement "{\n  long lVar1;\n  long *plVar2;\n  long lVar3;\n  long lVar4;\n  long *plVar5;\n  long lVar6;\n  long in_stack_00000008;\n  long in_stack_00000010;\n  long in_stack_00000018;\n  \n  lVar6 = (long)(param_3 - 1) / 2;\n  lVar4 = param_2;\n  if (param_2 < lVar6) {\n    do {\n      lVar3 = (lVar4 + 1) * 2;\n      lVar1 = lVar3 + -1;\n      plVar5 = (long *)(param_1 + (lVar4 + 1) * 0x30);\n      plVar2 = (long *)(param_1 + lVar1 * 0x18);\n      if (*plVar5 < *plVar2) {\n        lVar3 = lVar1;\n        plVar5 = plVar2;\n      }\n      lVar1 = plVar5[1];\n      plVar2 = (long *)(param_1 + lVar4 * 0x18);\n      *plVar2 = *plVar5;\n      plVar2[1] = lVar1;\n      plVar2[2] = plVar5[2];\n      lVar4 = lVar3;\n    } while (lVar3 < lVar6);\n    if ((param_3 & 1) == 0) goto LAB_00420d30;\n  }\n  else {\n    plVar5 = (long *)(param_1 + param_2 * 0x18);\n    lVar3 = param_2;\n    if ((param_3 & 1) != 0) goto LAB_00420d09;\nLAB_00420d30:\n    if ((long)(param_3 - 2) / 2 == lVar3) {\n      lVar3 = lVar3 * 2 + 1;\n      plVar2 = (long *)(param_1 + lVar3 * 0x18);\n      lVar4 = plVar2[1];\n      *plVar5 = *plVar2;\n      plVar5[1] = lVar4;\n      plVar5[2] = plVar2[2];\n      plVar5 = plVar2;\n    }\n  }\n  lVar4 = (lVar3 + -1) / 2;\n  if (param_2 < lVar3) {\n    plVar2 = (long *)(param_1 + lVar4 * 0x18);\n    lVar6 = *plVar2;\n    while (lVar1 = lVar4, lVar6 < in_stack_00000008) {\n      lVar4 = plVar2[1];\n      plVar5 = (long *)(param_1 + lVar3 * 0x18);\n      *plVar5 = *plVar2;\n      plVar5[1] = lVar4;\n      plVar5[2] = plVar2[2];\n      lVar4 = (lVar1 + -1) / 2;\n      plVar5 = (long *)(param_1 + lVar1 * 0x18);\n      if (lVar1 <= param_2) break;\n      plVar2 = (long *)(param_1 + lVar4 * 0x18);\n      lVar3 = lVar1;\n      lVar6 = *plVar2;\n    }\n  }\nLAB_00420d09:\n  *plVar5 = in_stack_00000008;\n  plVar5[1] = in_stack_00000010;\n  plVar5[2] = in_stack_00000018;\n  return;\n}" ({ "{") (declaration "long lVar1;" (sized_type_specifier "long" (long "long")) (identifier "lVar1") (; ";")) (declaration "long *plVar2;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar2" (* "*") (identifier "plVar2")) (; ";")) (declaration "long lVar3;" (sized_type_specifier "long" (long "long")) (identifier "lVar3") (; ";")) (declaration "long lVar4;" (sized_type_specifier "long" (long "long")) (identifier "lVar4") (; ";")) (declaration "long *plVar5;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar5" (* "*") (identifier "plVar5")) (; ";")) (declaration "long lVar6;" (sized_type_specifier "long" (long "long")) (identifier "lVar6") (; ";")) (declaration "long in_stack_00000008;" (sized_type_specifier "long" (long "long")) (identifier "in_stack_00000008") (; ";")) (declaration "long in_stack_00000010;" (sized_type_specifier "long" (long "long")) (identifier "in_stack_00000010") (; ";")) (declaration "long in_stack_00000018;" (sized_type_specifier "long" (long "long")) (identifier "in_stack_00000018") (; ";")) (expression_statement "lVar6 = (long)(param_3 - 1) / 2;" (assignment_expression "lVar6 = (long)(param_3 - 1) / 2" (identifier "lVar6") (= "=") (binary_expression "(long)(param_3 - 1) / 2" (cast_expression "(long)(param_3 - 1)" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (parenthesized_expression "(param_3 - 1)" (( "(") (binary_expression "param_3 - 1" (identifier "param_3") (- "-") (number_literal "1")) () ")"))) (/ "/") (number_literal "2"))) (; ";")) (expression_statement "lVar4 = param_2;" (assignment_expression "lVar4 = param_2" (identifier "lVar4") (= "=") (identifier "param_2")) (; ";")) (if_statement "if (param_2 < lVar6) {\n    do {\n      lVar3 = (lVar4 + 1) * 2;\n      lVar1 = lVar3 + -1;\n      plVar5 = (long *)(param_1 + (lVar4 + 1) * 0x30);\n      plVar2 = (long *)(param_1 + lVar1 * 0x18);\n      if (*plVar5 < *plVar2) {\n        lVar3 = lVar1;\n        plVar5 = plVar2;\n      }\n      lVar1 = plVar5[1];\n      plVar2 = (long *)(param_1 + lVar4 * 0x18);\n      *plVar2 = *plVar5;\n      plVar2[1] = lVar1;\n      plVar2[2] = plVar5[2];\n      lVar4 = lVar3;\n    } while (lVar3 < lVar6);\n    if ((param_3 & 1) == 0) goto LAB_00420d30;\n  }\n  else {\n    plVar5 = (long *)(param_1 + param_2 * 0x18);\n    lVar3 = param_2;\n    if ((param_3 & 1) != 0) goto LAB_00420d09;\nLAB_00420d30:\n    if ((long)(param_3 - 2) / 2 == lVar3) {\n      lVar3 = lVar3 * 2 + 1;\n      plVar2 = (long *)(param_1 + lVar3 * 0x18);\n      lVar4 = plVar2[1];\n      *plVar5 = *plVar2;\n      plVar5[1] = lVar4;\n      plVar5[2] = plVar2[2];\n      plVar5 = plVar2;\n    }\n  }" (if "if") (parenthesized_expression "(param_2 < lVar6)" (( "(") (binary_expression "param_2 < lVar6" (identifier "param_2") (< "<") (identifier "lVar6")) () ")")) (compound_statement "{\n    do {\n      lVar3 = (lVar4 + 1) * 2;\n      lVar1 = lVar3 + -1;\n      plVar5 = (long *)(param_1 + (lVar4 + 1) * 0x30);\n      plVar2 = (long *)(param_1 + lVar1 * 0x18);\n      if (*plVar5 < *plVar2) {\n        lVar3 = lVar1;\n        plVar5 = plVar2;\n      }\n      lVar1 = plVar5[1];\n      plVar2 = (long *)(param_1 + lVar4 * 0x18);\n      *plVar2 = *plVar5;\n      plVar2[1] = lVar1;\n      plVar2[2] = plVar5[2];\n      lVar4 = lVar3;\n    } while (lVar3 < lVar6);\n    if ((param_3 & 1) == 0) goto LAB_00420d30;\n  }" ({ "{") (do_statement "do {\n      lVar3 = (lVar4 + 1) * 2;\n      lVar1 = lVar3 + -1;\n      plVar5 = (long *)(param_1 + (lVar4 + 1) * 0x30);\n      plVar2 = (long *)(param_1 + lVar1 * 0x18);\n      if (*plVar5 < *plVar2) {\n        lVar3 = lVar1;\n        plVar5 = plVar2;\n      }\n      lVar1 = plVar5[1];\n      plVar2 = (long *)(param_1 + lVar4 * 0x18);\n      *plVar2 = *plVar5;\n      plVar2[1] = lVar1;\n      plVar2[2] = plVar5[2];\n      lVar4 = lVar3;\n    } while (lVar3 < lVar6);" (do "do") (compound_statement "{\n      lVar3 = (lVar4 + 1) * 2;\n      lVar1 = lVar3 + -1;\n      plVar5 = (long *)(param_1 + (lVar4 + 1) * 0x30);\n      plVar2 = (long *)(param_1 + lVar1 * 0x18);\n      if (*plVar5 < *plVar2) {\n        lVar3 = lVar1;\n        plVar5 = plVar2;\n      }\n      lVar1 = plVar5[1];\n      plVar2 = (long *)(param_1 + lVar4 * 0x18);\n      *plVar2 = *plVar5;\n      plVar2[1] = lVar1;\n      plVar2[2] = plVar5[2];\n      lVar4 = lVar3;\n    }" ({ "{") (expression_statement "lVar3 = (lVar4 + 1) * 2;" (assignment_expression "lVar3 = (lVar4 + 1) * 2" (identifier "lVar3") (= "=") (binary_expression "(lVar4 + 1) * 2" (parenthesized_expression "(lVar4 + 1)" (( "(") (binary_expression "lVar4 + 1" (identifier "lVar4") (+ "+") (number_literal "1")) () ")")) (* "*") (number_literal "2"))) (; ";")) (expression_statement "lVar1 = lVar3 + -1;" (assignment_expression "lVar1 = lVar3 + -1" (identifier "lVar1") (= "=") (binary_expression "lVar3 + -1" (identifier "lVar3") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "plVar5 = (long *)(param_1 + (lVar4 + 1) * 0x30);" (assignment_expression "plVar5 = (long *)(param_1 + (lVar4 + 1) * 0x30)" (identifier "plVar5") (= "=") (cast_expression "(long *)(param_1 + (lVar4 + 1) * 0x30)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + (lVar4 + 1) * 0x30)" (( "(") (binary_expression "param_1 + (lVar4 + 1) * 0x30" (identifier "param_1") (+ "+") (binary_expression "(lVar4 + 1) * 0x30" (parenthesized_expression "(lVar4 + 1)" (( "(") (binary_expression "lVar4 + 1" (identifier "lVar4") (+ "+") (number_literal "1")) () ")")) (* "*") (number_literal "0x30"))) () ")")))) (; ";")) (expression_statement "plVar2 = (long *)(param_1 + lVar1 * 0x18);" (assignment_expression "plVar2 = (long *)(param_1 + lVar1 * 0x18)" (identifier "plVar2") (= "=") (cast_expression "(long *)(param_1 + lVar1 * 0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + lVar1 * 0x18)" (( "(") (binary_expression "param_1 + lVar1 * 0x18" (identifier "param_1") (+ "+") (binary_expression "lVar1 * 0x18" (identifier "lVar1") (* "*") (number_literal "0x18"))) () ")")))) (; ";")) (if_statement "if (*plVar5 < *plVar2) {\n        lVar3 = lVar1;\n        plVar5 = plVar2;\n      }" (if "if") (parenthesized_expression "(*plVar5 < *plVar2)" (( "(") (binary_expression "*plVar5 < *plVar2" (pointer_expression "*plVar5" (* "*") (identifier "plVar5")) (< "<") (pointer_expression "*plVar2" (* "*") (identifier "plVar2"))) () ")")) (compound_statement "{\n        lVar3 = lVar1;\n        plVar5 = plVar2;\n      }" ({ "{") (expression_statement "lVar3 = lVar1;" (assignment_expression "lVar3 = lVar1" (identifier "lVar3") (= "=") (identifier "lVar1")) (; ";")) (expression_statement "plVar5 = plVar2;" (assignment_expression "plVar5 = plVar2" (identifier "plVar5") (= "=") (identifier "plVar2")) (; ";")) (} "}"))) (expression_statement "lVar1 = plVar5[1];" (assignment_expression "lVar1 = plVar5[1]" (identifier "lVar1") (= "=") (subscript_expression "plVar5[1]" (identifier "plVar5") ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "plVar2 = (long *)(param_1 + lVar4 * 0x18);" (assignment_expression "plVar2 = (long *)(param_1 + lVar4 * 0x18)" (identifier "plVar2") (= "=") (cast_expression "(long *)(param_1 + lVar4 * 0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + lVar4 * 0x18)" (( "(") (binary_expression "param_1 + lVar4 * 0x18" (identifier "param_1") (+ "+") (binary_expression "lVar4 * 0x18" (identifier "lVar4") (* "*") (number_literal "0x18"))) () ")")))) (; ";")) (expression_statement "*plVar2 = *plVar5;" (assignment_expression "*plVar2 = *plVar5" (pointer_expression "*plVar2" (* "*") (identifier "plVar2")) (= "=") (pointer_expression "*plVar5" (* "*") (identifier "plVar5"))) (; ";")) (expression_statement "plVar2[1] = lVar1;" (assignment_expression "plVar2[1] = lVar1" (subscript_expression "plVar2[1]" (identifier "plVar2") ([ "[") (number_literal "1") (] "]")) (= "=") (identifier "lVar1")) (; ";")) (expression_statement "plVar2[2] = plVar5[2];" (assignment_expression "plVar2[2] = plVar5[2]" (subscript_expression "plVar2[2]" (identifier "plVar2") ([ "[") (number_literal "2") (] "]")) (= "=") (subscript_expression "plVar5[2]" (identifier "plVar5") ([ "[") (number_literal "2") (] "]"))) (; ";")) (expression_statement "lVar4 = lVar3;" (assignment_expression "lVar4 = lVar3" (identifier "lVar4") (= "=") (identifier "lVar3")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(lVar3 < lVar6)" (( "(") (binary_expression "lVar3 < lVar6" (identifier "lVar3") (< "<") (identifier "lVar6")) () ")")) (; ";")) (if_statement "if ((param_3 & 1) == 0) goto LAB_00420d30;" (if "if") (parenthesized_expression "((param_3 & 1) == 0)" (( "(") (binary_expression "(param_3 & 1) == 0" (parenthesized_expression "(param_3 & 1)" (( "(") (binary_expression "param_3 & 1" (identifier "param_3") (& "&") (number_literal "1")) () ")")) (== "==") (number_literal "0")) () ")")) (goto_statement "goto LAB_00420d30;" (goto "goto") (statement_identifier "LAB_00420d30") (; ";"))) (} "}")) (else_clause "else {\n    plVar5 = (long *)(param_1 + param_2 * 0x18);\n    lVar3 = param_2;\n    if ((param_3 & 1) != 0) goto LAB_00420d09;\nLAB_00420d30:\n    if ((long)(param_3 - 2) / 2 == lVar3) {\n      lVar3 = lVar3 * 2 + 1;\n      plVar2 = (long *)(param_1 + lVar3 * 0x18);\n      lVar4 = plVar2[1];\n      *plVar5 = *plVar2;\n      plVar5[1] = lVar4;\n      plVar5[2] = plVar2[2];\n      plVar5 = plVar2;\n    }\n  }" (else "else") (compound_statement "{\n    plVar5 = (long *)(param_1 + param_2 * 0x18);\n    lVar3 = param_2;\n    if ((param_3 & 1) != 0) goto LAB_00420d09;\nLAB_00420d30:\n    if ((long)(param_3 - 2) / 2 == lVar3) {\n      lVar3 = lVar3 * 2 + 1;\n      plVar2 = (long *)(param_1 + lVar3 * 0x18);\n      lVar4 = plVar2[1];\n      *plVar5 = *plVar2;\n      plVar5[1] = lVar4;\n      plVar5[2] = plVar2[2];\n      plVar5 = plVar2;\n    }\n  }" ({ "{") (expression_statement "plVar5 = (long *)(param_1 + param_2 * 0x18);" (assignment_expression "plVar5 = (long *)(param_1 + param_2 * 0x18)" (identifier "plVar5") (= "=") (cast_expression "(long *)(param_1 + param_2 * 0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + param_2 * 0x18)" (( "(") (binary_expression "param_1 + param_2 * 0x18" (identifier "param_1") (+ "+") (binary_expression "param_2 * 0x18" (identifier "param_2") (* "*") (number_literal "0x18"))) () ")")))) (; ";")) (expression_statement "lVar3 = param_2;" (assignment_expression "lVar3 = param_2" (identifier "lVar3") (= "=") (identifier "param_2")) (; ";")) (if_statement "if ((param_3 & 1) != 0) goto LAB_00420d09;" (if "if") (parenthesized_expression "((param_3 & 1) != 0)" (( "(") (binary_expression "(param_3 & 1) != 0" (parenthesized_expression "(param_3 & 1)" (( "(") (binary_expression "param_3 & 1" (identifier "param_3") (& "&") (number_literal "1")) () ")")) (!= "!=") (number_literal "0")) () ")")) (goto_statement "goto LAB_00420d09;" (goto "goto") (statement_identifier "LAB_00420d09") (; ";"))) (labeled_statement "LAB_00420d30:\n    if ((long)(param_3 - 2) / 2 == lVar3) {\n      lVar3 = lVar3 * 2 + 1;\n      plVar2 = (long *)(param_1 + lVar3 * 0x18);\n      lVar4 = plVar2[1];\n      *plVar5 = *plVar2;\n      plVar5[1] = lVar4;\n      plVar5[2] = plVar2[2];\n      plVar5 = plVar2;\n    }" (statement_identifier "LAB_00420d30") (: ":") (if_statement "if ((long)(param_3 - 2) / 2 == lVar3) {\n      lVar3 = lVar3 * 2 + 1;\n      plVar2 = (long *)(param_1 + lVar3 * 0x18);\n      lVar4 = plVar2[1];\n      *plVar5 = *plVar2;\n      plVar5[1] = lVar4;\n      plVar5[2] = plVar2[2];\n      plVar5 = plVar2;\n    }" (if "if") (parenthesized_expression "((long)(param_3 - 2) / 2 == lVar3)" (( "(") (binary_expression "(long)(param_3 - 2) / 2 == lVar3" (binary_expression "(long)(param_3 - 2) / 2" (cast_expression "(long)(param_3 - 2)" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (parenthesized_expression "(param_3 - 2)" (( "(") (binary_expression "param_3 - 2" (identifier "param_3") (- "-") (number_literal "2")) () ")"))) (/ "/") (number_literal "2")) (== "==") (identifier "lVar3")) () ")")) (compound_statement "{\n      lVar3 = lVar3 * 2 + 1;\n      plVar2 = (long *)(param_1 + lVar3 * 0x18);\n      lVar4 = plVar2[1];\n      *plVar5 = *plVar2;\n      plVar5[1] = lVar4;\n      plVar5[2] = plVar2[2];\n      plVar5 = plVar2;\n    }" ({ "{") (expression_statement "lVar3 = lVar3 * 2 + 1;" (assignment_expression "lVar3 = lVar3 * 2 + 1" (identifier "lVar3") (= "=") (binary_expression "lVar3 * 2 + 1" (binary_expression "lVar3 * 2" (identifier "lVar3") (* "*") (number_literal "2")) (+ "+") (number_literal "1"))) (; ";")) (expression_statement "plVar2 = (long *)(param_1 + lVar3 * 0x18);" (assignment_expression "plVar2 = (long *)(param_1 + lVar3 * 0x18)" (identifier "plVar2") (= "=") (cast_expression "(long *)(param_1 + lVar3 * 0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + lVar3 * 0x18)" (( "(") (binary_expression "param_1 + lVar3 * 0x18" (identifier "param_1") (+ "+") (binary_expression "lVar3 * 0x18" (identifier "lVar3") (* "*") (number_literal "0x18"))) () ")")))) (; ";")) (expression_statement "lVar4 = plVar2[1];" (assignment_expression "lVar4 = plVar2[1]" (identifier "lVar4") (= "=") (subscript_expression "plVar2[1]" (identifier "plVar2") ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "*plVar5 = *plVar2;" (assignment_expression "*plVar5 = *plVar2" (pointer_expression "*plVar5" (* "*") (identifier "plVar5")) (= "=") (pointer_expression "*plVar2" (* "*") (identifier "plVar2"))) (; ";")) (expression_statement "plVar5[1] = lVar4;" (assignment_expression "plVar5[1] = lVar4" (subscript_expression "plVar5[1]" (identifier "plVar5") ([ "[") (number_literal "1") (] "]")) (= "=") (identifier "lVar4")) (; ";")) (expression_statement "plVar5[2] = plVar2[2];" (assignment_expression "plVar5[2] = plVar2[2]" (subscript_expression "plVar5[2]" (identifier "plVar5") ([ "[") (number_literal "2") (] "]")) (= "=") (subscript_expression "plVar2[2]" (identifier "plVar2") ([ "[") (number_literal "2") (] "]"))) (; ";")) (expression_statement "plVar5 = plVar2;" (assignment_expression "plVar5 = plVar2" (identifier "plVar5") (= "=") (identifier "plVar2")) (; ";")) (} "}")))) (} "}")))) (expression_statement "lVar4 = (lVar3 + -1) / 2;" (assignment_expression "lVar4 = (lVar3 + -1) / 2" (identifier "lVar4") (= "=") (binary_expression "(lVar3 + -1) / 2" (parenthesized_expression "(lVar3 + -1)" (( "(") (binary_expression "lVar3 + -1" (identifier "lVar3") (+ "+") (number_literal "-1")) () ")")) (/ "/") (number_literal "2"))) (; ";")) (if_statement "if (param_2 < lVar3) {\n    plVar2 = (long *)(param_1 + lVar4 * 0x18);\n    lVar6 = *plVar2;\n    while (lVar1 = lVar4, lVar6 < in_stack_00000008) {\n      lVar4 = plVar2[1];\n      plVar5 = (long *)(param_1 + lVar3 * 0x18);\n      *plVar5 = *plVar2;\n      plVar5[1] = lVar4;\n      plVar5[2] = plVar2[2];\n      lVar4 = (lVar1 + -1) / 2;\n      plVar5 = (long *)(param_1 + lVar1 * 0x18);\n      if (lVar1 <= param_2) break;\n      plVar2 = (long *)(param_1 + lVar4 * 0x18);\n      lVar3 = lVar1;\n      lVar6 = *plVar2;\n    }\n  }" (if "if") (parenthesized_expression "(param_2 < lVar3)" (( "(") (binary_expression "param_2 < lVar3" (identifier "param_2") (< "<") (identifier "lVar3")) () ")")) (compound_statement "{\n    plVar2 = (long *)(param_1 + lVar4 * 0x18);\n    lVar6 = *plVar2;\n    while (lVar1 = lVar4, lVar6 < in_stack_00000008) {\n      lVar4 = plVar2[1];\n      plVar5 = (long *)(param_1 + lVar3 * 0x18);\n      *plVar5 = *plVar2;\n      plVar5[1] = lVar4;\n      plVar5[2] = plVar2[2];\n      lVar4 = (lVar1 + -1) / 2;\n      plVar5 = (long *)(param_1 + lVar1 * 0x18);\n      if (lVar1 <= param_2) break;\n      plVar2 = (long *)(param_1 + lVar4 * 0x18);\n      lVar3 = lVar1;\n      lVar6 = *plVar2;\n    }\n  }" ({ "{") (expression_statement "plVar2 = (long *)(param_1 + lVar4 * 0x18);" (assignment_expression "plVar2 = (long *)(param_1 + lVar4 * 0x18)" (identifier "plVar2") (= "=") (cast_expression "(long *)(param_1 + lVar4 * 0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + lVar4 * 0x18)" (( "(") (binary_expression "param_1 + lVar4 * 0x18" (identifier "param_1") (+ "+") (binary_expression "lVar4 * 0x18" (identifier "lVar4") (* "*") (number_literal "0x18"))) () ")")))) (; ";")) (expression_statement "lVar6 = *plVar2;" (assignment_expression "lVar6 = *plVar2" (identifier "lVar6") (= "=") (pointer_expression "*plVar2" (* "*") (identifier "plVar2"))) (; ";")) (while_statement "while (lVar1 = lVar4, lVar6 < in_stack_00000008) {\n      lVar4 = plVar2[1];\n      plVar5 = (long *)(param_1 + lVar3 * 0x18);\n      *plVar5 = *plVar2;\n      plVar5[1] = lVar4;\n      plVar5[2] = plVar2[2];\n      lVar4 = (lVar1 + -1) / 2;\n      plVar5 = (long *)(param_1 + lVar1 * 0x18);\n      if (lVar1 <= param_2) break;\n      plVar2 = (long *)(param_1 + lVar4 * 0x18);\n      lVar3 = lVar1;\n      lVar6 = *plVar2;\n    }" (while "while") (parenthesized_expression "(lVar1 = lVar4, lVar6 < in_stack_00000008)" (( "(") (comma_expression "lVar1 = lVar4, lVar6 < in_stack_00000008" (assignment_expression "lVar1 = lVar4" (identifier "lVar1") (= "=") (identifier "lVar4")) (, ",") (binary_expression "lVar6 < in_stack_00000008" (identifier "lVar6") (< "<") (identifier "in_stack_00000008"))) () ")")) (compound_statement "{\n      lVar4 = plVar2[1];\n      plVar5 = (long *)(param_1 + lVar3 * 0x18);\n      *plVar5 = *plVar2;\n      plVar5[1] = lVar4;\n      plVar5[2] = plVar2[2];\n      lVar4 = (lVar1 + -1) / 2;\n      plVar5 = (long *)(param_1 + lVar1 * 0x18);\n      if (lVar1 <= param_2) break;\n      plVar2 = (long *)(param_1 + lVar4 * 0x18);\n      lVar3 = lVar1;\n      lVar6 = *plVar2;\n    }" ({ "{") (expression_statement "lVar4 = plVar2[1];" (assignment_expression "lVar4 = plVar2[1]" (identifier "lVar4") (= "=") (subscript_expression "plVar2[1]" (identifier "plVar2") ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "plVar5 = (long *)(param_1 + lVar3 * 0x18);" (assignment_expression "plVar5 = (long *)(param_1 + lVar3 * 0x18)" (identifier "plVar5") (= "=") (cast_expression "(long *)(param_1 + lVar3 * 0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + lVar3 * 0x18)" (( "(") (binary_expression "param_1 + lVar3 * 0x18" (identifier "param_1") (+ "+") (binary_expression "lVar3 * 0x18" (identifier "lVar3") (* "*") (number_literal "0x18"))) () ")")))) (; ";")) (expression_statement "*plVar5 = *plVar2;" (assignment_expression "*plVar5 = *plVar2" (pointer_expression "*plVar5" (* "*") (identifier "plVar5")) (= "=") (pointer_expression "*plVar2" (* "*") (identifier "plVar2"))) (; ";")) (expression_statement "plVar5[1] = lVar4;" (assignment_expression "plVar5[1] = lVar4" (subscript_expression "plVar5[1]" (identifier "plVar5") ([ "[") (number_literal "1") (] "]")) (= "=") (identifier "lVar4")) (; ";")) (expression_statement "plVar5[2] = plVar2[2];" (assignment_expression "plVar5[2] = plVar2[2]" (subscript_expression "plVar5[2]" (identifier "plVar5") ([ "[") (number_literal "2") (] "]")) (= "=") (subscript_expression "plVar2[2]" (identifier "plVar2") ([ "[") (number_literal "2") (] "]"))) (; ";")) (expression_statement "lVar4 = (lVar1 + -1) / 2;" (assignment_expression "lVar4 = (lVar1 + -1) / 2" (identifier "lVar4") (= "=") (binary_expression "(lVar1 + -1) / 2" (parenthesized_expression "(lVar1 + -1)" (( "(") (binary_expression "lVar1 + -1" (identifier "lVar1") (+ "+") (number_literal "-1")) () ")")) (/ "/") (number_literal "2"))) (; ";")) (expression_statement "plVar5 = (long *)(param_1 + lVar1 * 0x18);" (assignment_expression "plVar5 = (long *)(param_1 + lVar1 * 0x18)" (identifier "plVar5") (= "=") (cast_expression "(long *)(param_1 + lVar1 * 0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + lVar1 * 0x18)" (( "(") (binary_expression "param_1 + lVar1 * 0x18" (identifier "param_1") (+ "+") (binary_expression "lVar1 * 0x18" (identifier "lVar1") (* "*") (number_literal "0x18"))) () ")")))) (; ";")) (if_statement "if (lVar1 <= param_2) break;" (if "if") (parenthesized_expression "(lVar1 <= param_2)" (( "(") (binary_expression "lVar1 <= param_2" (identifier "lVar1") (<= "<=") (identifier "param_2")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "plVar2 = (long *)(param_1 + lVar4 * 0x18);" (assignment_expression "plVar2 = (long *)(param_1 + lVar4 * 0x18)" (identifier "plVar2") (= "=") (cast_expression "(long *)(param_1 + lVar4 * 0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + lVar4 * 0x18)" (( "(") (binary_expression "param_1 + lVar4 * 0x18" (identifier "param_1") (+ "+") (binary_expression "lVar4 * 0x18" (identifier "lVar4") (* "*") (number_literal "0x18"))) () ")")))) (; ";")) (expression_statement "lVar3 = lVar1;" (assignment_expression "lVar3 = lVar1" (identifier "lVar3") (= "=") (identifier "lVar1")) (; ";")) (expression_statement "lVar6 = *plVar2;" (assignment_expression "lVar6 = *plVar2" (identifier "lVar6") (= "=") (pointer_expression "*plVar2" (* "*") (identifier "plVar2"))) (; ";")) (} "}"))) (} "}"))) (labeled_statement "LAB_00420d09:\n  *plVar5 = in_stack_00000008;" (statement_identifier "LAB_00420d09") (: ":") (expression_statement "*plVar5 = in_stack_00000008;" (assignment_expression "*plVar5 = in_stack_00000008" (pointer_expression "*plVar5" (* "*") (identifier "plVar5")) (= "=") (identifier "in_stack_00000008")) (; ";"))) (expression_statement "plVar5[1] = in_stack_00000010;" (assignment_expression "plVar5[1] = in_stack_00000010" (subscript_expression "plVar5[1]" (identifier "plVar5") ([ "[") (number_literal "1") (] "]")) (= "=") (identifier "in_stack_00000010")) (; ";")) (expression_statement "plVar5[2] = in_stack_00000018;" (assignment_expression "plVar5[2] = in_stack_00000018" (subscript_expression "plVar5[2]" (identifier "plVar5") ([ "[") (number_literal "2") (] "]")) (= "=") (identifier "in_stack_00000018")) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}")))

/* WARNING: Unknown calling convention -- yet parameter storage is locked */
/* DWARF original name:
   __adjust_heap<__gnu_cxx::__normal_iterator<gold::File_read::Read_multiple_entry*,
   std::vector<gold::File_read::Read_multiple_entry> >, long int,
   gold::File_read::Read_multiple_entry,
   __gnu_cxx::__ops::_Iter_comp_iter<gold::Read_multiple_compare> > */

void std::
     __adjust_heap<__gnu_cxx::__normal_iterator<gold::File_read::Read_multiple_entry*,_std::vector<gold::File_read::Read_multiple_entry>_>,_long_int,_gold::File_read::Read_multiple_entry,___gnu_cxx::__ops::_Iter_comp_iter<gold::Read_multiple_compare>_>
               (long var_6,long var_2,ulong var_1)

{
  long var_7;
  long *plVar2;
  long var_5;
  long var_4;
  long __topIndex;
  long *plVar5;
  long var_3;
  long var_8;
  long in_stack_00000010;
  long in_stack_00000018;
  
  var_3 = (long)(var_1 - 1) / 2;
  var_4 = var_2;
  if (var_2 < var_3) {
    do {
      var_5 = (var_4 + 1) * 2;
      var_7 = var_5 + -1;
      plVar5 = (long *)(var_6 + (var_4 + 1) * 0x30);
      plVar2 = (long *)(var_6 + var_7 * 0x18);
      if (*plVar5 < *plVar2) {
        var_5 = var_7;
        plVar5 = plVar2;
      }
      var_7 = plVar5[1];
      plVar2 = (long *)(var_6 + var_4 * 0x18);
      *plVar2 = *plVar5;
      plVar2[1] = var_7;
      plVar2[2] = plVar5[2];
      var_4 = var_5;
    } while (var_5 < var_3);
    if ((var_1 & 1) == 0) goto LAB_00420d30;
  }
  else {
    plVar5 = (long *)(var_6 + var_2 * 0x18);
    var_5 = var_2;
    if ((var_1 & 1) != 0) goto LAB_00420d09;
LAB_00420d30:
    if ((long)(var_1 - 2) / 2 == var_5) {
      var_5 = var_5 * 2 + 1;
      plVar2 = (long *)(var_6 + var_5 * 0x18);
      var_4 = plVar2[1];
      *plVar5 = *plVar2;
      plVar5[1] = var_4;
      plVar5[2] = plVar2[2];
      plVar5 = plVar2;
    }
  }
  var_4 = (var_5 + -1) / 2;
  if (var_2 < var_5) {
    plVar2 = (long *)(var_6 + var_4 * 0x18);
    var_3 = *plVar2;
    while (var_7 = var_4, var_3 < var_8) {
      var_4 = plVar2[1];
      plVar5 = (long *)(var_6 + var_5 * 0x18);
      *plVar5 = *plVar2;
      plVar5[1] = var_4;
      plVar5[2] = plVar2[2];
      var_4 = (var_7 + -1) / 2;
      plVar5 = (long *)(var_6 + var_7 * 0x18);
      if (var_7 <= var_2) break;
      plVar2 = (long *)(var_6 + var_4 * 0x18);
      var_5 = var_7;
      var_3 = *plVar2;
    }
  }
LAB_00420d09:
  *plVar5 = var_8;
  plVar5[1] = in_stack_00000010;
  plVar5[2] = in_stack_00000018;
  return;
}


(translation_unit (function_definition type: (primitive_type) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (sized_type_specifier) declarator: (identifier)) (parameter_declaration type: (sized_type_specifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)))) body: (compound_statement (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: (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)) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (pointer_expression argument: (identifier)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (pointer_expression argument: (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: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) consequence: (goto_statement label: (statement_identifier)))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) consequence: (goto_statement label: (statement_identifier))) (labeled_statement label: (statement_identifier) (if_statement condition: (parenthesized_expression (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))) right: (number_literal)) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (pointer_expression argument: (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: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (while_statement condition: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (identifier)) right: (binary_expression left: (identifier) right: (identifier)))) body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (pointer_expression argument: (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: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (break_statement)) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))))))) (labeled_statement label: (statement_identifier) (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))) (return_statement))))

void MASKED(long param_1,long param_2,ulong param_3)

{
  long lVar1;
  long *plVar2;
  long lVar3;
  long lVar4;
  long *plVar5;
  long lVar6;
  long in_stack_00000008;
  long in_stack_00000010;
  long in_stack_00000018;
  
  lVar6 = (long)(param_3 - 1) / 2;
  lVar4 = param_2;
  if (param_2 < lVar6) {
    do {
      lVar3 = (lVar4 + 1) * 2;
      lVar1 = lVar3 + -1;
      plVar5 = (long *)(param_1 + (lVar4 + 1) * 0x30);
      plVar2 = (long *)(param_1 + lVar1 * 0x18);
      if (*plVar5 < *plVar2) {
        lVar3 = lVar1;
        plVar5 = plVar2;
      }
      lVar1 = plVar5[1];
      plVar2 = (long *)(param_1 + lVar4 * 0x18);
      *plVar2 = *plVar5;
      plVar2[1] = lVar1;
      plVar2[2] = plVar5[2];
      lVar4 = lVar3;
    } while (lVar3 < lVar6);
    if ((param_3 & 1) == 0) goto LAB_00420d30;
  }
  else {
    plVar5 = (long *)(param_1 + param_2 * 0x18);
    lVar3 = param_2;
    if ((param_3 & 1) != 0) goto LAB_00420d09;
LAB_00420d30:
    if ((long)(param_3 - 2) / 2 == lVar3) {
      lVar3 = lVar3 * 2 + 1;
      plVar2 = (long *)(param_1 + lVar3 * 0x18);
      lVar4 = plVar2[1];
      *plVar5 = *plVar2;
      plVar5[1] = lVar4;
      plVar5[2] = plVar2[2];
      plVar5 = plVar2;
    }
  }
  lVar4 = (lVar3 + -1) / 2;
  if (param_2 < lVar3) {
    plVar2 = (long *)(param_1 + lVar4 * 0x18);
    lVar6 = *plVar2;
    while (lVar1 = lVar4, lVar6 < in_stack_00000008) {
      lVar4 = plVar2[1];
      plVar5 = (long *)(param_1 + lVar3 * 0x18);
      *plVar5 = *plVar2;
      plVar5[1] = lVar4;
      plVar5[2] = plVar2[2];
      lVar4 = (lVar1 + -1) / 2;
      plVar5 = (long *)(param_1 + lVar1 * 0x18);
      if (lVar1 <= param_2) break;
      plVar2 = (long *)(param_1 + lVar4 * 0x18);
      lVar3 = lVar1;
      lVar6 = *plVar2;
    }
  }
LAB_00420d09:
  *plVar5 = in_stack_00000008;
  plVar5[1] = in_stack_00000010;
  plVar5[2] = in_stack_00000018;
  return;
}

