
/* DWARF original name: _M_realloc_insert<const gold::Dwp_output_file::Contribution&>
   DWARF original prototype: void
   _M_realloc_insert<const_gold::Dwp_output_file::Contribution&>(vector<gold::Dwp_output_file::Contribution,_std::allocator<gold::Dwp_output_file::Contribution>_>
   * this, iterator __position, Contribution * __args#0) */

void __thiscall
std::
vector<gold::Dwp_output_file::Contribution,_std::allocator<gold::Dwp_output_file::Contribution>_>::
_M_realloc_insert<const_gold::Dwp_output_file::Contribution&>
          (vector<gold::Dwp_output_file::Contribution,_std::allocator<gold::Dwp_output_file::Contribution>_>
           *this,iterator __position,Contribution *__args_0)

{
  void *__dest;
  Contribution *pCVar1;
  Contribution *__src;
  uchar *puVar2;
  section_size_type sVar3;
  long lVar4;
  pointer __dest_00;
  size_t __n;
  ulong uVar5;
  ulong uVar6;
  pointer pCVar7;
  
  pCVar1 = (this->
           super__Vector_base<gold::Dwp_output_file::Contribution,_std::allocator<gold::Dwp_output_file::Contribution>_>
           )._M_impl._M_finish;
  __src = (this->
          super__Vector_base<gold::Dwp_output_file::Contribution,_std::allocator<gold::Dwp_output_file::Contribution>_>
          )._M_impl._M_start;
  __n = (long)__position._M_current - (long)__src;
  lVar4 = (long)pCVar1 - (long)__src >> 3;
  if (lVar4 * -0x5555555555555555 == 0) {
    uVar5 = 1;
LAB_001618c5:
    uVar6 = uVar5 * 0x18;
LAB_001617c9:
    __dest_00 = (pointer)operator_new(uVar6);
    pCVar7 = (pointer)((long)&__dest_00->output_offset + uVar6);
  }
  else {
    uVar5 = lVar4 * 0x5555555555555556;
    uVar6 = 0xfffffffffffffff0;
    if ((uVar5 <= (ulong)(lVar4 * -0x5555555555555555) && lVar4 * 0x5555555555555555 != 0) ||
       (0xaaaaaaaaaaaaaaa < uVar5)) goto LAB_001617c9;
    pCVar7 = (pointer)0x0;
    __dest_00 = (pointer)0x0;
    if (uVar5 != 0) goto LAB_001618c5;
  }
  sVar3 = __args_0->size;
  puVar2 = __args_0->contents;
  __dest = (void *)((long)__dest_00 + __n + 0x18);
  *(section_offset_type *)((long)__dest_00 + __n) = __args_0->output_offset;
  ((section_offset_type *)((long)__dest_00 + __n))[1] = sVar3;
  *(uchar **)((long)__dest_00 + __n + 0x10) = puVar2;
  if (__position._M_current == __src) {
    if (__position._M_current != pCVar1) goto LAB_00161846;
LAB_00161854:
    if (__src == (Contribution *)0x0) goto LAB_00161859;
  }
  else {
    memmove(__dest_00,__src,__n);
    if (__position._M_current != pCVar1) {
LAB_00161846:
      memcpy(__dest,__position._M_current,(long)pCVar1 - (long)__position._M_current);
      goto LAB_00161854;
    }
  }
  operator_delete(__src);
LAB_00161859:
  (this->
  super__Vector_base<gold::Dwp_output_file::Contribution,_std::allocator<gold::Dwp_output_file::Contribution>_>
  )._M_impl._M_start = __dest_00;
  (this->
  super__Vector_base<gold::Dwp_output_file::Contribution,_std::allocator<gold::Dwp_output_file::Contribution>_>
  )._M_impl._M_finish = (pointer)((long)__dest + ((long)pCVar1 - (long)__position._M_current));
  (this->
  super__Vector_base<gold::Dwp_output_file::Contribution,_std::allocator<gold::Dwp_output_file::Contribution>_>
  )._M_impl._M_end_of_storage = pCVar7;
  return;
}



void FUN_00161770(undefined8 *param_1,void *param_2,undefined8 *param_3)

{
  void *__dest;
  void *pvVar1;
  void *__src;
  undefined8 uVar2;
  undefined8 uVar3;
  long lVar4;
  void *__dest_00;
  size_t __n;
  ulong uVar5;
  long lVar6;
  
  pvVar1 = (void *)param_1[1];
  __src = (void *)*param_1;
  __n = (long)param_2 - (long)__src;
  lVar4 = (long)pvVar1 - (long)__src >> 3;
  if (lVar4 * -0x5555555555555555 == 0) {
    uVar5 = 1;
LAB_001618c5:
    lVar6 = uVar5 * 0x18;
LAB_001617c9:
    __dest_00 = (void *)FUN_002d9490(lVar6);
    lVar6 = lVar6 + (long)__dest_00;
  }
  else {
    uVar5 = lVar4 * 0x5555555555555556;
    lVar6 = -0x10;
    if ((uVar5 <= (ulong)(lVar4 * -0x5555555555555555) && lVar4 * 0x5555555555555555 != 0) ||
       (0xaaaaaaaaaaaaaaa < uVar5)) goto LAB_001617c9;
    lVar6 = 0;
    __dest_00 = (void *)0x0;
    if (uVar5 != 0) goto LAB_001618c5;
  }
  uVar3 = param_3[1];
  uVar2 = param_3[2];
  __dest = (void *)((long)__dest_00 + __n + 0x18);
  *(undefined8 *)((long)__dest_00 + __n) = *param_3;
  ((undefined8 *)((long)__dest_00 + __n))[1] = uVar3;
  *(undefined8 *)((long)__dest_00 + __n + 0x10) = uVar2;
  if (param_2 == __src) {
    if (param_2 != pvVar1) goto LAB_00161846;
LAB_00161854:
    if (__src == (void *)0x0) goto LAB_00161859;
  }
  else {
    memmove(__dest_00,__src,__n);
    if (param_2 != pvVar1) {
LAB_00161846:
      memcpy(__dest,param_2,(long)pvVar1 - (long)param_2);
      goto LAB_00161854;
    }
  }
  FUN_002dac60(__src);
LAB_00161859:
  *param_1 = __dest_00;
  param_1[1] = (long)__dest + ((long)pvVar1 - (long)param_2);
  param_1[2] = lVar6;
  return;
}


PUSH R15
MOV R15,RDX
MOV RCX,RSI
MOV RDX,-0x5555555555555555
PUSH R14
PUSH R13
MOV R13,RSI
PUSH R12
PUSH RBP
MOV RBP,RDI
PUSH RBX
SUB RSP,0x28
MOV R8,qword ptr [RDI + 0x8]
MOV R12,qword ptr [RDI]
MOV RAX,R8
SUB RCX,R12
SUB RAX,R12
SAR RAX,0x3
IMUL RAX,RDX
TEST RAX,RAX
JZ 0x001618c0
LEA RDX,[RAX + RAX*0x1]
MOV R14,-0x10
CMP RAX,RDX
JBE 0x00161888
MOV RDI,R14
MOV qword ptr [RSP + 0x10],RCX
MOV qword ptr [RSP + 0x8],R8
CALL 0x002d9490
MOV RCX,qword ptr [RSP + 0x10]
MOV R8,qword ptr [RSP + 0x8]
MOV RBX,RAX
ADD R14,RAX
MOVDQU XMM0,xmmword ptr [R15]
MOV RAX,qword ptr [R15 + 0x10]
MOV R9,R8
LEA R10,[RBX + RCX*0x1 + 0x18]
SUB R9,R13
MOVUPS xmmword ptr [RBX + RCX*0x1],XMM0
LEA R15,[R10 + R9*0x1]
MOV qword ptr [RBX + RCX*0x1 + 0x10],RAX
CMP R13,R12
JZ 0x001618b0
MOV RDX,RCX
MOV RSI,R12
MOV RDI,RBX
MOV qword ptr [RSP + 0x18],R10
MOV qword ptr [RSP + 0x10],R9
MOV qword ptr [RSP + 0x8],R8
CALL 0x001476d0
MOV R8,qword ptr [RSP + 0x8]
MOV R9,qword ptr [RSP + 0x10]
MOV R10,qword ptr [RSP + 0x18]
CMP R13,R8
JZ 0x00161878
MOV RDX,R9
MOV RSI,R13
MOV RDI,R10
CALL 0x00147aa0
TEST R12,R12
JNZ 0x00161878
MOV qword ptr [RBP],RBX
MOV qword ptr [RBP + 0x8],R15
MOV qword ptr [RBP + 0x10],R14
ADD RSP,0x28
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
MOV RDI,R12
CALL 0x002dac60
JMP 0x00161859
MOV RAX,0xaaaaaaaaaaaaaaa
CMP RDX,RAX
JA 0x001617c9
XOR R14D,R14D
XOR EBX,EBX
TEST RDX,RDX
JZ 0x001617eb
JMP 0x001618c5
CMP R13,R8
JNZ 0x00161846
JMP 0x00161854
MOV EDX,0x1
LEA R14,[RDX + RDX*0x2]
SHL R14,0x3
JMP 0x001617c9
(translation_unit "void FUN_00161770(undefined8 *param_1,void *param_2,undefined8 *param_3)\n\n{\n  void *__dest;\n  void *pvVar1;\n  void *__src;\n  undefined8 uVar2;\n  undefined8 uVar3;\n  long lVar4;\n  void *__dest_00;\n  size_t __n;\n  ulong uVar5;\n  long lVar6;\n  \n  pvVar1 = (void *)param_1[1];\n  __src = (void *)*param_1;\n  __n = (long)param_2 - (long)__src;\n  lVar4 = (long)pvVar1 - (long)__src >> 3;\n  if (lVar4 * -0x5555555555555555 == 0) {\n    uVar5 = 1;\nLAB_001618c5:\n    lVar6 = uVar5 * 0x18;\nLAB_001617c9:\n    __dest_00 = (void *)FUN_002d9490(lVar6);\n    lVar6 = lVar6 + (long)__dest_00;\n  }\n  else {\n    uVar5 = lVar4 * 0x5555555555555556;\n    lVar6 = -0x10;\n    if ((uVar5 <= (ulong)(lVar4 * -0x5555555555555555) && lVar4 * 0x5555555555555555 != 0) ||\n       (0xaaaaaaaaaaaaaaa < uVar5)) goto LAB_001617c9;\n    lVar6 = 0;\n    __dest_00 = (void *)0x0;\n    if (uVar5 != 0) goto LAB_001618c5;\n  }\n  uVar3 = param_3[1];\n  uVar2 = param_3[2];\n  __dest = (void *)((long)__dest_00 + __n + 0x18);\n  *(undefined8 *)((long)__dest_00 + __n) = *param_3;\n  ((undefined8 *)((long)__dest_00 + __n))[1] = uVar3;\n  *(undefined8 *)((long)__dest_00 + __n + 0x10) = uVar2;\n  if (param_2 == __src) {\n    if (param_2 != pvVar1) goto LAB_00161846;\nLAB_00161854:\n    if (__src == (void *)0x0) goto LAB_00161859;\n  }\n  else {\n    memmove(__dest_00,__src,__n);\n    if (param_2 != pvVar1) {\nLAB_00161846:\n      memcpy(__dest,param_2,(long)pvVar1 - (long)param_2);\n      goto LAB_00161854;\n    }\n  }\n  FUN_002dac60(__src);\nLAB_00161859:\n  *param_1 = __dest_00;\n  param_1[1] = (long)__dest + ((long)pvVar1 - (long)param_2);\n  param_1[2] = lVar6;\n  return;\n}\n\n" (function_definition "void FUN_00161770(undefined8 *param_1,void *param_2,undefined8 *param_3)\n\n{\n  void *__dest;\n  void *pvVar1;\n  void *__src;\n  undefined8 uVar2;\n  undefined8 uVar3;\n  long lVar4;\n  void *__dest_00;\n  size_t __n;\n  ulong uVar5;\n  long lVar6;\n  \n  pvVar1 = (void *)param_1[1];\n  __src = (void *)*param_1;\n  __n = (long)param_2 - (long)__src;\n  lVar4 = (long)pvVar1 - (long)__src >> 3;\n  if (lVar4 * -0x5555555555555555 == 0) {\n    uVar5 = 1;\nLAB_001618c5:\n    lVar6 = uVar5 * 0x18;\nLAB_001617c9:\n    __dest_00 = (void *)FUN_002d9490(lVar6);\n    lVar6 = lVar6 + (long)__dest_00;\n  }\n  else {\n    uVar5 = lVar4 * 0x5555555555555556;\n    lVar6 = -0x10;\n    if ((uVar5 <= (ulong)(lVar4 * -0x5555555555555555) && lVar4 * 0x5555555555555555 != 0) ||\n       (0xaaaaaaaaaaaaaaa < uVar5)) goto LAB_001617c9;\n    lVar6 = 0;\n    __dest_00 = (void *)0x0;\n    if (uVar5 != 0) goto LAB_001618c5;\n  }\n  uVar3 = param_3[1];\n  uVar2 = param_3[2];\n  __dest = (void *)((long)__dest_00 + __n + 0x18);\n  *(undefined8 *)((long)__dest_00 + __n) = *param_3;\n  ((undefined8 *)((long)__dest_00 + __n))[1] = uVar3;\n  *(undefined8 *)((long)__dest_00 + __n + 0x10) = uVar2;\n  if (param_2 == __src) {\n    if (param_2 != pvVar1) goto LAB_00161846;\nLAB_00161854:\n    if (__src == (void *)0x0) goto LAB_00161859;\n  }\n  else {\n    memmove(__dest_00,__src,__n);\n    if (param_2 != pvVar1) {\nLAB_00161846:\n      memcpy(__dest,param_2,(long)pvVar1 - (long)param_2);\n      goto LAB_00161854;\n    }\n  }\n  FUN_002dac60(__src);\nLAB_00161859:\n  *param_1 = __dest_00;\n  param_1[1] = (long)__dest + ((long)pvVar1 - (long)param_2);\n  param_1[2] = lVar6;\n  return;\n}" primitive_type (function_declarator "FUN_00161770(undefined8 *param_1,void *param_2,undefined8 *param_3)" identifier (parameter_list "(undefined8 *param_1,void *param_2,undefined8 *param_3)" ( (parameter_declaration "undefined8 *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "void *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "undefined8 *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) ))) (compound_statement "{\n  void *__dest;\n  void *pvVar1;\n  void *__src;\n  undefined8 uVar2;\n  undefined8 uVar3;\n  long lVar4;\n  void *__dest_00;\n  size_t __n;\n  ulong uVar5;\n  long lVar6;\n  \n  pvVar1 = (void *)param_1[1];\n  __src = (void *)*param_1;\n  __n = (long)param_2 - (long)__src;\n  lVar4 = (long)pvVar1 - (long)__src >> 3;\n  if (lVar4 * -0x5555555555555555 == 0) {\n    uVar5 = 1;\nLAB_001618c5:\n    lVar6 = uVar5 * 0x18;\nLAB_001617c9:\n    __dest_00 = (void *)FUN_002d9490(lVar6);\n    lVar6 = lVar6 + (long)__dest_00;\n  }\n  else {\n    uVar5 = lVar4 * 0x5555555555555556;\n    lVar6 = -0x10;\n    if ((uVar5 <= (ulong)(lVar4 * -0x5555555555555555) && lVar4 * 0x5555555555555555 != 0) ||\n       (0xaaaaaaaaaaaaaaa < uVar5)) goto LAB_001617c9;\n    lVar6 = 0;\n    __dest_00 = (void *)0x0;\n    if (uVar5 != 0) goto LAB_001618c5;\n  }\n  uVar3 = param_3[1];\n  uVar2 = param_3[2];\n  __dest = (void *)((long)__dest_00 + __n + 0x18);\n  *(undefined8 *)((long)__dest_00 + __n) = *param_3;\n  ((undefined8 *)((long)__dest_00 + __n))[1] = uVar3;\n  *(undefined8 *)((long)__dest_00 + __n + 0x10) = uVar2;\n  if (param_2 == __src) {\n    if (param_2 != pvVar1) goto LAB_00161846;\nLAB_00161854:\n    if (__src == (void *)0x0) goto LAB_00161859;\n  }\n  else {\n    memmove(__dest_00,__src,__n);\n    if (param_2 != pvVar1) {\nLAB_00161846:\n      memcpy(__dest,param_2,(long)pvVar1 - (long)param_2);\n      goto LAB_00161854;\n    }\n  }\n  FUN_002dac60(__src);\nLAB_00161859:\n  *param_1 = __dest_00;\n  param_1[1] = (long)__dest + ((long)pvVar1 - (long)param_2);\n  param_1[2] = lVar6;\n  return;\n}" { (declaration "void *__dest;" primitive_type (pointer_declarator "*__dest" * identifier) ;) (declaration "void *pvVar1;" primitive_type (pointer_declarator "*pvVar1" * identifier) ;) (declaration "void *__src;" primitive_type (pointer_declarator "*__src" * identifier) ;) (declaration "undefined8 uVar2;" type_identifier identifier ;) (declaration "undefined8 uVar3;" type_identifier identifier ;) (declaration "long lVar4;" (sized_type_specifier "long" long) identifier ;) (declaration "void *__dest_00;" primitive_type (pointer_declarator "*__dest_00" * identifier) ;) (declaration "size_t __n;" primitive_type identifier ;) (declaration "ulong uVar5;" type_identifier identifier ;) (declaration "long lVar6;" (sized_type_specifier "long" long) identifier ;) (expression_statement "pvVar1 = (void *)param_1[1];" (assignment_expression "pvVar1 = (void *)param_1[1]" identifier = (cast_expression "(void *)param_1[1]" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[1]" identifier [ number_literal ]))) ;) (expression_statement "__src = (void *)*param_1;" (assignment_expression "__src = (void *)*param_1" identifier = (cast_expression "(void *)*param_1" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) ;) (expression_statement "__n = (long)param_2 - (long)__src;" (assignment_expression "__n = (long)param_2 - (long)__src" identifier = (binary_expression "(long)param_2 - (long)__src" (cast_expression "(long)param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)__src" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) (expression_statement "lVar4 = (long)pvVar1 - (long)__src >> 3;" (assignment_expression "lVar4 = (long)pvVar1 - (long)__src >> 3" identifier = (binary_expression "(long)pvVar1 - (long)__src >> 3" (binary_expression "(long)pvVar1 - (long)__src" (cast_expression "(long)pvVar1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)__src" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) >> number_literal)) ;) (if_statement "if (lVar4 * -0x5555555555555555 == 0) {\n    uVar5 = 1;\nLAB_001618c5:\n    lVar6 = uVar5 * 0x18;\nLAB_001617c9:\n    __dest_00 = (void *)FUN_002d9490(lVar6);\n    lVar6 = lVar6 + (long)__dest_00;\n  }\n  else {\n    uVar5 = lVar4 * 0x5555555555555556;\n    lVar6 = -0x10;\n    if ((uVar5 <= (ulong)(lVar4 * -0x5555555555555555) && lVar4 * 0x5555555555555555 != 0) ||\n       (0xaaaaaaaaaaaaaaa < uVar5)) goto LAB_001617c9;\n    lVar6 = 0;\n    __dest_00 = (void *)0x0;\n    if (uVar5 != 0) goto LAB_001618c5;\n  }" if (parenthesized_expression "(lVar4 * -0x5555555555555555 == 0)" ( (binary_expression "lVar4 * -0x5555555555555555 == 0" (binary_expression "lVar4 * -0x5555555555555555" identifier * number_literal) == number_literal) )) (compound_statement "{\n    uVar5 = 1;\nLAB_001618c5:\n    lVar6 = uVar5 * 0x18;\nLAB_001617c9:\n    __dest_00 = (void *)FUN_002d9490(lVar6);\n    lVar6 = lVar6 + (long)__dest_00;\n  }" { (expression_statement "uVar5 = 1;" (assignment_expression "uVar5 = 1" identifier = number_literal) ;) (labeled_statement "LAB_001618c5:\n    lVar6 = uVar5 * 0x18;" statement_identifier : (expression_statement "lVar6 = uVar5 * 0x18;" (assignment_expression "lVar6 = uVar5 * 0x18" identifier = (binary_expression "uVar5 * 0x18" identifier * number_literal)) ;)) (labeled_statement "LAB_001617c9:\n    __dest_00 = (void *)FUN_002d9490(lVar6);" statement_identifier : (expression_statement "__dest_00 = (void *)FUN_002d9490(lVar6);" (assignment_expression "__dest_00 = (void *)FUN_002d9490(lVar6)" identifier = (cast_expression "(void *)FUN_002d9490(lVar6)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_002d9490(lVar6)" identifier (argument_list "(lVar6)" ( identifier ))))) ;)) (expression_statement "lVar6 = lVar6 + (long)__dest_00;" (assignment_expression "lVar6 = lVar6 + (long)__dest_00" identifier = (binary_expression "lVar6 + (long)__dest_00" identifier + (cast_expression "(long)__dest_00" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) }) (else_clause "else {\n    uVar5 = lVar4 * 0x5555555555555556;\n    lVar6 = -0x10;\n    if ((uVar5 <= (ulong)(lVar4 * -0x5555555555555555) && lVar4 * 0x5555555555555555 != 0) ||\n       (0xaaaaaaaaaaaaaaa < uVar5)) goto LAB_001617c9;\n    lVar6 = 0;\n    __dest_00 = (void *)0x0;\n    if (uVar5 != 0) goto LAB_001618c5;\n  }" else (compound_statement "{\n    uVar5 = lVar4 * 0x5555555555555556;\n    lVar6 = -0x10;\n    if ((uVar5 <= (ulong)(lVar4 * -0x5555555555555555) && lVar4 * 0x5555555555555555 != 0) ||\n       (0xaaaaaaaaaaaaaaa < uVar5)) goto LAB_001617c9;\n    lVar6 = 0;\n    __dest_00 = (void *)0x0;\n    if (uVar5 != 0) goto LAB_001618c5;\n  }" { (expression_statement "uVar5 = lVar4 * 0x5555555555555556;" (assignment_expression "uVar5 = lVar4 * 0x5555555555555556" identifier = (binary_expression "lVar4 * 0x5555555555555556" identifier * number_literal)) ;) (expression_statement "lVar6 = -0x10;" (assignment_expression "lVar6 = -0x10" identifier = number_literal) ;) (if_statement "if ((uVar5 <= (ulong)(lVar4 * -0x5555555555555555) && lVar4 * 0x5555555555555555 != 0) ||\n       (0xaaaaaaaaaaaaaaa < uVar5)) goto LAB_001617c9;" if (parenthesized_expression "((uVar5 <= (ulong)(lVar4 * -0x5555555555555555) && lVar4 * 0x5555555555555555 != 0) ||\n       (0xaaaaaaaaaaaaaaa < uVar5))" ( (binary_expression "(uVar5 <= (ulong)(lVar4 * -0x5555555555555555) && lVar4 * 0x5555555555555555 != 0) ||\n       (0xaaaaaaaaaaaaaaa < uVar5)" (parenthesized_expression "(uVar5 <= (ulong)(lVar4 * -0x5555555555555555) && lVar4 * 0x5555555555555555 != 0)" ( (binary_expression "uVar5 <= (ulong)(lVar4 * -0x5555555555555555) && lVar4 * 0x5555555555555555 != 0" (binary_expression "uVar5 <= (ulong)(lVar4 * -0x5555555555555555)" identifier <= (call_expression "(ulong)(lVar4 * -0x5555555555555555)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(lVar4 * -0x5555555555555555)" ( (binary_expression "lVar4 * -0x5555555555555555" identifier * number_literal) )))) && (binary_expression "lVar4 * 0x5555555555555555 != 0" (binary_expression "lVar4 * 0x5555555555555555" identifier * number_literal) != number_literal)) )) || (parenthesized_expression "(0xaaaaaaaaaaaaaaa < uVar5)" ( (binary_expression "0xaaaaaaaaaaaaaaa < uVar5" number_literal < identifier) ))) )) (goto_statement "goto LAB_001617c9;" goto statement_identifier ;)) (expression_statement "lVar6 = 0;" (assignment_expression "lVar6 = 0" identifier = number_literal) ;) (expression_statement "__dest_00 = (void *)0x0;" (assignment_expression "__dest_00 = (void *)0x0" identifier = (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (if_statement "if (uVar5 != 0) goto LAB_001618c5;" if (parenthesized_expression "(uVar5 != 0)" ( (binary_expression "uVar5 != 0" identifier != number_literal) )) (goto_statement "goto LAB_001618c5;" goto statement_identifier ;)) }))) (expression_statement "uVar3 = param_3[1];" (assignment_expression "uVar3 = param_3[1]" identifier = (subscript_expression "param_3[1]" identifier [ number_literal ])) ;) (expression_statement "uVar2 = param_3[2];" (assignment_expression "uVar2 = param_3[2]" identifier = (subscript_expression "param_3[2]" identifier [ number_literal ])) ;) (expression_statement "__dest = (void *)((long)__dest_00 + __n + 0x18);" (assignment_expression "__dest = (void *)((long)__dest_00 + __n + 0x18)" identifier = (cast_expression "(void *)((long)__dest_00 + __n + 0x18)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)__dest_00 + __n + 0x18)" ( (binary_expression "(long)__dest_00 + __n + 0x18" (binary_expression "(long)__dest_00 + __n" (cast_expression "(long)__dest_00" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) + number_literal) )))) ;) (expression_statement "*(undefined8 *)((long)__dest_00 + __n) = *param_3;" (assignment_expression "*(undefined8 *)((long)__dest_00 + __n) = *param_3" (pointer_expression "*(undefined8 *)((long)__dest_00 + __n)" * (cast_expression "(undefined8 *)((long)__dest_00 + __n)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)__dest_00 + __n)" ( (binary_expression "(long)__dest_00 + __n" (cast_expression "(long)__dest_00" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) )))) = (pointer_expression "*param_3" * identifier)) ;) (expression_statement "((undefined8 *)((long)__dest_00 + __n))[1] = uVar3;" (assignment_expression "((undefined8 *)((long)__dest_00 + __n))[1] = uVar3" (subscript_expression "((undefined8 *)((long)__dest_00 + __n))[1]" (parenthesized_expression "((undefined8 *)((long)__dest_00 + __n))" ( (cast_expression "(undefined8 *)((long)__dest_00 + __n)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)__dest_00 + __n)" ( (binary_expression "(long)__dest_00 + __n" (cast_expression "(long)__dest_00" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) ))) )) [ number_literal ]) = identifier) ;) (expression_statement "*(undefined8 *)((long)__dest_00 + __n + 0x10) = uVar2;" (assignment_expression "*(undefined8 *)((long)__dest_00 + __n + 0x10) = uVar2" (pointer_expression "*(undefined8 *)((long)__dest_00 + __n + 0x10)" * (cast_expression "(undefined8 *)((long)__dest_00 + __n + 0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)__dest_00 + __n + 0x10)" ( (binary_expression "(long)__dest_00 + __n + 0x10" (binary_expression "(long)__dest_00 + __n" (cast_expression "(long)__dest_00" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) + number_literal) )))) = identifier) ;) (if_statement "if (param_2 == __src) {\n    if (param_2 != pvVar1) goto LAB_00161846;\nLAB_00161854:\n    if (__src == (void *)0x0) goto LAB_00161859;\n  }\n  else {\n    memmove(__dest_00,__src,__n);\n    if (param_2 != pvVar1) {\nLAB_00161846:\n      memcpy(__dest,param_2,(long)pvVar1 - (long)param_2);\n      goto LAB_00161854;\n    }\n  }" if (parenthesized_expression "(param_2 == __src)" ( (binary_expression "param_2 == __src" identifier == identifier) )) (compound_statement "{\n    if (param_2 != pvVar1) goto LAB_00161846;\nLAB_00161854:\n    if (__src == (void *)0x0) goto LAB_00161859;\n  }" { (if_statement "if (param_2 != pvVar1) goto LAB_00161846;" if (parenthesized_expression "(param_2 != pvVar1)" ( (binary_expression "param_2 != pvVar1" identifier != identifier) )) (goto_statement "goto LAB_00161846;" goto statement_identifier ;)) (labeled_statement "LAB_00161854:\n    if (__src == (void *)0x0) goto LAB_00161859;" statement_identifier : (if_statement "if (__src == (void *)0x0) goto LAB_00161859;" if (parenthesized_expression "(__src == (void *)0x0)" ( (binary_expression "__src == (void *)0x0" identifier == (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_00161859;" goto statement_identifier ;))) }) (else_clause "else {\n    memmove(__dest_00,__src,__n);\n    if (param_2 != pvVar1) {\nLAB_00161846:\n      memcpy(__dest,param_2,(long)pvVar1 - (long)param_2);\n      goto LAB_00161854;\n    }\n  }" else (compound_statement "{\n    memmove(__dest_00,__src,__n);\n    if (param_2 != pvVar1) {\nLAB_00161846:\n      memcpy(__dest,param_2,(long)pvVar1 - (long)param_2);\n      goto LAB_00161854;\n    }\n  }" { (expression_statement "memmove(__dest_00,__src,__n);" (call_expression "memmove(__dest_00,__src,__n)" identifier (argument_list "(__dest_00,__src,__n)" ( identifier , identifier , identifier ))) ;) (if_statement "if (param_2 != pvVar1) {\nLAB_00161846:\n      memcpy(__dest,param_2,(long)pvVar1 - (long)param_2);\n      goto LAB_00161854;\n    }" if (parenthesized_expression "(param_2 != pvVar1)" ( (binary_expression "param_2 != pvVar1" identifier != identifier) )) (compound_statement "{\nLAB_00161846:\n      memcpy(__dest,param_2,(long)pvVar1 - (long)param_2);\n      goto LAB_00161854;\n    }" { (labeled_statement "LAB_00161846:\n      memcpy(__dest,param_2,(long)pvVar1 - (long)param_2);" statement_identifier : (expression_statement "memcpy(__dest,param_2,(long)pvVar1 - (long)param_2);" (call_expression "memcpy(__dest,param_2,(long)pvVar1 - (long)param_2)" identifier (argument_list "(__dest,param_2,(long)pvVar1 - (long)param_2)" ( identifier , identifier , (binary_expression "(long)pvVar1 - (long)param_2" (cast_expression "(long)pvVar1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ))) ;)) (goto_statement "goto LAB_00161854;" goto statement_identifier ;) })) }))) (expression_statement "FUN_002dac60(__src);" (call_expression "FUN_002dac60(__src)" identifier (argument_list "(__src)" ( identifier ))) ;) (labeled_statement "LAB_00161859:\n  *param_1 = __dest_00;" statement_identifier : (expression_statement "*param_1 = __dest_00;" (assignment_expression "*param_1 = __dest_00" (pointer_expression "*param_1" * identifier) = identifier) ;)) (expression_statement "param_1[1] = (long)__dest + ((long)pvVar1 - (long)param_2);" (assignment_expression "param_1[1] = (long)__dest + ((long)pvVar1 - (long)param_2)" (subscript_expression "param_1[1]" identifier [ number_literal ]) = (binary_expression "(long)__dest + ((long)pvVar1 - (long)param_2)" (cast_expression "(long)__dest" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "((long)pvVar1 - (long)param_2)" ( (binary_expression "(long)pvVar1 - (long)param_2" (cast_expression "(long)pvVar1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) )))) ;) (expression_statement "param_1[2] = lVar6;" (assignment_expression "param_1[2] = lVar6" (subscript_expression "param_1[2]" identifier [ number_literal ]) = identifier) ;) (return_statement "return;" return ;) })))
(translation_unit "/* DWARF original name: _M_realloc_insert<const gold::Dwp_output_file::Contribution&>\n   DWARF original prototype: void\n   _M_realloc_insert<const_gold::Dwp_output_file::Contribution&>(vector<gold::Dwp_output_file::Contribution,_std::allocator<gold::Dwp_output_file::Contribution>_>\n   * this, iterator __position, Contribution * __args#0) */\n\nvoid __thiscall\nstd::\nvector<gold::Dwp_output_file::Contribution,_std::allocator<gold::Dwp_output_file::Contribution>_>::\n_M_realloc_insert<const_gold::Dwp_output_file::Contribution&>\n          (vector<gold::Dwp_output_file::Contribution,_std::allocator<gold::Dwp_output_file::Contribution>_>\n           *this,iterator __position,Contribution *__args_0)\n\n{\n  void *__dest;\n  Contribution *pCVar1;\n  Contribution *__src;\n  uchar *puVar2;\n  section_size_type sVar3;\n  long lVar4;\n  pointer __dest_00;\n  size_t __n;\n  ulong uVar5;\n  ulong uVar6;\n  pointer pCVar7;\n  \n  pCVar1 = (this->\n           super__Vector_base<gold::Dwp_output_file::Contribution,_std::allocator<gold::Dwp_output_file::Contribution>_>\n           )._M_impl._M_finish;\n  __src = (this->\n          super__Vector_base<gold::Dwp_output_file::Contribution,_std::allocator<gold::Dwp_output_file::Contribution>_>\n          )._M_impl._M_start;\n  __n = (long)__position._M_current - (long)__src;\n  lVar4 = (long)pCVar1 - (long)__src >> 3;\n  if (lVar4 * -0x5555555555555555 == 0) {\n    uVar5 = 1;\nLAB_001618c5:\n    uVar6 = uVar5 * 0x18;\nLAB_001617c9:\n    __dest_00 = (pointer)operator_new(uVar6);\n    pCVar7 = (pointer)((long)&__dest_00->output_offset + uVar6);\n  }\n  else {\n    uVar5 = lVar4 * 0x5555555555555556;\n    uVar6 = 0xfffffffffffffff0;\n    if ((uVar5 <= (ulong)(lVar4 * -0x5555555555555555) && lVar4 * 0x5555555555555555 != 0) ||\n       (0xaaaaaaaaaaaaaaa < uVar5)) goto LAB_001617c9;\n    pCVar7 = (pointer)0x0;\n    __dest_00 = (pointer)0x0;\n    if (uVar5 != 0) goto LAB_001618c5;\n  }\n  sVar3 = __args_0->size;\n  puVar2 = __args_0->contents;\n  __dest = (void *)((long)__dest_00 + __n + 0x18);\n  *(section_offset_type *)((long)__dest_00 + __n) = __args_0->output_offset;\n  ((section_offset_type *)((long)__dest_00 + __n))[1] = sVar3;\n  *(uchar **)((long)__dest_00 + __n + 0x10) = puVar2;\n  if (__position._M_current == __src) {\n    if (__position._M_current != pCVar1) goto LAB_00161846;\nLAB_00161854:\n    if (__src == (Contribution *)0x0) goto LAB_00161859;\n  }\n  else {\n    memmove(__dest_00,__src,__n);\n    if (__position._M_current != pCVar1) {\nLAB_00161846:\n      memcpy(__dest,__position._M_current,(long)pCVar1 - (long)__position._M_current);\n      goto LAB_00161854;\n    }\n  }\n  operator_delete(__src);\nLAB_00161859:\n  (this->\n  super__Vector_base<gold::Dwp_output_file::Contribution,_std::allocator<gold::Dwp_output_file::Contribution>_>\n  )._M_impl._M_start = __dest_00;\n  (this->\n  super__Vector_base<gold::Dwp_output_file::Contribution,_std::allocator<gold::Dwp_output_file::Contribution>_>\n  )._M_impl._M_finish = (pointer)((long)__dest + ((long)pCVar1 - (long)__position._M_current));\n  (this->\n  super__Vector_base<gold::Dwp_output_file::Contribution,_std::allocator<gold::Dwp_output_file::Contribution>_>\n  )._M_impl._M_end_of_storage = pCVar7;\n  return;\n}\n\n" comment (declaration "void __thiscall\nstd::\nvector<gold::Dwp_output_file::Contribution,_std::allocator<gold::Dwp_output_file::Contribution>_>::\n_M_realloc_insert<const_gold::Dwp_output_file::Contribution&>\n          (vector<gold::Dwp_output_file::Contribution,_std::allocator<gold::Dwp_output_file::Contribution>_>\n           *this,iterator __position,Contribution *__args_0)\n\n{\n  void *__dest;" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "std::\nvector<gold::Dwp_output_file::" identifier : : identifier < identifier : : identifier : :) identifier , (ERROR "_std::allocator<gold::Dwp_output_file::Contribution>_>::\n_M_realloc_insert<const_gold::Dwp_output_file::Contribution&>\n          (vector<gold::Dwp_output_file::Contribution,_std::allocator<gold::Dwp_output_file::Contribution>_>\n           *this,iterator __position,Contribution *__args_0)\n\n{\n  void" identifier : : identifier < identifier : : identifier : : identifier > identifier > : : identifier < identifier : : identifier : : (function_declarator "Contribution&>\n          (vector<gold::Dwp_output_file::Contribution,_std::allocator<gold::Dwp_output_file::Contribution>_>\n           *this,iterator __position,Contribution *__args_0)" identifier (ERROR "&>" & >) (parameter_list "(vector<gold::Dwp_output_file::Contribution,_std::allocator<gold::Dwp_output_file::Contribution>_>\n           *this,iterator __position,Contribution *__args_0)" ( (parameter_declaration "vector<gold::Dwp_output_file::Contribution" type_identifier (ERROR "<gold::Dwp_output_file::" < identifier : : identifier : :) identifier) , (parameter_declaration "_std::allocator<gold::Dwp_output_file::Contribution>_>\n           *this" type_identifier (ERROR "::allocator<gold::Dwp_output_file::Contribution>_>" : : identifier < identifier : : identifier : : identifier > identifier >) (pointer_declarator "*this" * identifier)) , (parameter_declaration "iterator __position" type_identifier identifier) , (parameter_declaration "Contribution *__args_0" type_identifier (pointer_declarator "*__args_0" * identifier)) ))) { primitive_type) (pointer_declarator "*__dest" * identifier) ;) (declaration "Contribution *pCVar1;" type_identifier (pointer_declarator "*pCVar1" * identifier) ;) (declaration "Contribution *__src;" type_identifier (pointer_declarator "*__src" * identifier) ;) (declaration "uchar *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "section_size_type sVar3;" type_identifier identifier ;) (declaration "long lVar4;" (sized_type_specifier "long" long) identifier ;) (declaration "pointer __dest_00;" type_identifier identifier ;) (declaration "size_t __n;" primitive_type identifier ;) (declaration "ulong uVar5;" type_identifier identifier ;) (declaration "ulong uVar6;" type_identifier identifier ;) (declaration "pointer pCVar7;" type_identifier identifier ;) (expression_statement "pCVar1 = (this->\n           super__Vector_base<gold::Dwp_output_file::Contribution,_std::allocator<gold::Dwp_output_file::Contribution>_>\n           )._M_impl._M_finish;" (assignment_expression "pCVar1 = (this->\n           super__Vector_base<gold::Dwp_output_file::Contribution,_std::allocator<gold::Dwp_output_file::Contribution>_>\n           )._M_impl._M_finish" identifier = (field_expression "(this->\n           super__Vector_base<gold::Dwp_output_file::Contribution,_std::allocator<gold::Dwp_output_file::Contribution>_>\n           )._M_impl._M_finish" (field_expression "(this->\n           super__Vector_base<gold::Dwp_output_file::Contribution,_std::allocator<gold::Dwp_output_file::Contribution>_>\n           )._M_impl" (parenthesized_expression "(this->\n           super__Vector_base<gold::Dwp_output_file::Contribution,_std::allocator<gold::Dwp_output_file::Contribution>_>\n           )" ( (ERROR "this->\n           super__Vector_base<gold::Dwp_output_file::Contribution,_std::allocator<gold::Dwp_output_file::" (comma_expression "this->\n           super__Vector_base<gold::Dwp_output_file::Contribution,_std" (binary_expression "this->\n           super__Vector_base<gold" (field_expression "this->\n           super__Vector_base" identifier -> field_identifier) < identifier) (ERROR "::Dwp_output_file::Contribution" : : identifier : : identifier) , identifier) : : (binary_expression "allocator<gold" identifier < identifier) : : identifier : :) (binary_expression "Contribution>_>" (binary_expression "Contribution>_" identifier > identifier) > identifier) )) . field_identifier) . field_identifier)) ;) (expression_statement "__src = (this->\n          super__Vector_base<gold::Dwp_output_file::Contribution,_std::allocator<gold::Dwp_output_file::Contribution>_>\n          )._M_impl._M_start;" (assignment_expression "__src = (this->\n          super__Vector_base<gold::Dwp_output_file::Contribution,_std::allocator<gold::Dwp_output_file::Contribution>_>\n          )._M_impl._M_start" identifier = (field_expression "(this->\n          super__Vector_base<gold::Dwp_output_file::Contribution,_std::allocator<gold::Dwp_output_file::Contribution>_>\n          )._M_impl._M_start" (field_expression "(this->\n          super__Vector_base<gold::Dwp_output_file::Contribution,_std::allocator<gold::Dwp_output_file::Contribution>_>\n          )._M_impl" (parenthesized_expression "(this->\n          super__Vector_base<gold::Dwp_output_file::Contribution,_std::allocator<gold::Dwp_output_file::Contribution>_>\n          )" ( (ERROR "this->\n          super__Vector_base<gold::Dwp_output_file::Contribution,_std::allocator<gold::Dwp_output_file::" (comma_expression "this->\n          super__Vector_base<gold::Dwp_output_file::Contribution,_std" (binary_expression "this->\n          super__Vector_base<gold" (field_expression "this->\n          super__Vector_base" identifier -> field_identifier) < identifier) (ERROR "::Dwp_output_file::Contribution" : : identifier : : identifier) , identifier) : : (binary_expression "allocator<gold" identifier < identifier) : : identifier : :) (binary_expression "Contribution>_>" (binary_expression "Contribution>_" identifier > identifier) > identifier) )) . field_identifier) . field_identifier)) ;) (expression_statement "__n = (long)__position._M_current - (long)__src;" (assignment_expression "__n = (long)__position._M_current - (long)__src" identifier = (binary_expression "(long)__position._M_current - (long)__src" (cast_expression "(long)__position._M_current" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (field_expression "__position._M_current" identifier . field_identifier)) - (cast_expression "(long)__src" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) (expression_statement "lVar4 = (long)pCVar1 - (long)__src >> 3;" (assignment_expression "lVar4 = (long)pCVar1 - (long)__src >> 3" identifier = (binary_expression "(long)pCVar1 - (long)__src >> 3" (binary_expression "(long)pCVar1 - (long)__src" (cast_expression "(long)pCVar1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)__src" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) >> number_literal)) ;) (if_statement "if (lVar4 * -0x5555555555555555 == 0) {\n    uVar5 = 1;\nLAB_001618c5:\n    uVar6 = uVar5 * 0x18;\nLAB_001617c9:\n    __dest_00 = (pointer)operator_new(uVar6);\n    pCVar7 = (pointer)((long)&__dest_00->output_offset + uVar6);\n  }\n  else {\n    uVar5 = lVar4 * 0x5555555555555556;\n    uVar6 = 0xfffffffffffffff0;\n    if ((uVar5 <= (ulong)(lVar4 * -0x5555555555555555) && lVar4 * 0x5555555555555555 != 0) ||\n       (0xaaaaaaaaaaaaaaa < uVar5)) goto LAB_001617c9;\n    pCVar7 = (pointer)0x0;\n    __dest_00 = (pointer)0x0;\n    if (uVar5 != 0) goto LAB_001618c5;\n  }" if (parenthesized_expression "(lVar4 * -0x5555555555555555 == 0)" ( (binary_expression "lVar4 * -0x5555555555555555 == 0" (binary_expression "lVar4 * -0x5555555555555555" identifier * number_literal) == number_literal) )) (compound_statement "{\n    uVar5 = 1;\nLAB_001618c5:\n    uVar6 = uVar5 * 0x18;\nLAB_001617c9:\n    __dest_00 = (pointer)operator_new(uVar6);\n    pCVar7 = (pointer)((long)&__dest_00->output_offset + uVar6);\n  }" { (expression_statement "uVar5 = 1;" (assignment_expression "uVar5 = 1" identifier = number_literal) ;) (labeled_statement "LAB_001618c5:\n    uVar6 = uVar5 * 0x18;" statement_identifier : (expression_statement "uVar6 = uVar5 * 0x18;" (assignment_expression "uVar6 = uVar5 * 0x18" identifier = (binary_expression "uVar5 * 0x18" identifier * number_literal)) ;)) (labeled_statement "LAB_001617c9:\n    __dest_00 = (pointer)operator_new(uVar6);" statement_identifier : (expression_statement "__dest_00 = (pointer)operator_new(uVar6);" (assignment_expression "__dest_00 = (pointer)operator_new(uVar6)" identifier = (cast_expression "(pointer)operator_new(uVar6)" ( (type_descriptor "pointer" type_identifier) ) (call_expression "operator_new(uVar6)" identifier (argument_list "(uVar6)" ( identifier ))))) ;)) (expression_statement "pCVar7 = (pointer)((long)&__dest_00->output_offset + uVar6);" (assignment_expression "pCVar7 = (pointer)((long)&__dest_00->output_offset + uVar6)" identifier = (call_expression "(pointer)((long)&__dest_00->output_offset + uVar6)" (parenthesized_expression "(pointer)" ( identifier )) (argument_list "((long)&__dest_00->output_offset + uVar6)" ( (binary_expression "(long)&__dest_00->output_offset + uVar6" (cast_expression "(long)&__dest_00->output_offset" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&__dest_00->output_offset" & (field_expression "__dest_00->output_offset" identifier -> field_identifier))) + identifier) )))) ;) }) (else_clause "else {\n    uVar5 = lVar4 * 0x5555555555555556;\n    uVar6 = 0xfffffffffffffff0;\n    if ((uVar5 <= (ulong)(lVar4 * -0x5555555555555555) && lVar4 * 0x5555555555555555 != 0) ||\n       (0xaaaaaaaaaaaaaaa < uVar5)) goto LAB_001617c9;\n    pCVar7 = (pointer)0x0;\n    __dest_00 = (pointer)0x0;\n    if (uVar5 != 0) goto LAB_001618c5;\n  }" else (compound_statement "{\n    uVar5 = lVar4 * 0x5555555555555556;\n    uVar6 = 0xfffffffffffffff0;\n    if ((uVar5 <= (ulong)(lVar4 * -0x5555555555555555) && lVar4 * 0x5555555555555555 != 0) ||\n       (0xaaaaaaaaaaaaaaa < uVar5)) goto LAB_001617c9;\n    pCVar7 = (pointer)0x0;\n    __dest_00 = (pointer)0x0;\n    if (uVar5 != 0) goto LAB_001618c5;\n  }" { (expression_statement "uVar5 = lVar4 * 0x5555555555555556;" (assignment_expression "uVar5 = lVar4 * 0x5555555555555556" identifier = (binary_expression "lVar4 * 0x5555555555555556" identifier * number_literal)) ;) (expression_statement "uVar6 = 0xfffffffffffffff0;" (assignment_expression "uVar6 = 0xfffffffffffffff0" identifier = number_literal) ;) (if_statement "if ((uVar5 <= (ulong)(lVar4 * -0x5555555555555555) && lVar4 * 0x5555555555555555 != 0) ||\n       (0xaaaaaaaaaaaaaaa < uVar5)) goto LAB_001617c9;" if (parenthesized_expression "((uVar5 <= (ulong)(lVar4 * -0x5555555555555555) && lVar4 * 0x5555555555555555 != 0) ||\n       (0xaaaaaaaaaaaaaaa < uVar5))" ( (binary_expression "(uVar5 <= (ulong)(lVar4 * -0x5555555555555555) && lVar4 * 0x5555555555555555 != 0) ||\n       (0xaaaaaaaaaaaaaaa < uVar5)" (parenthesized_expression "(uVar5 <= (ulong)(lVar4 * -0x5555555555555555) && lVar4 * 0x5555555555555555 != 0)" ( (binary_expression "uVar5 <= (ulong)(lVar4 * -0x5555555555555555) && lVar4 * 0x5555555555555555 != 0" (binary_expression "uVar5 <= (ulong)(lVar4 * -0x5555555555555555)" identifier <= (call_expression "(ulong)(lVar4 * -0x5555555555555555)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(lVar4 * -0x5555555555555555)" ( (binary_expression "lVar4 * -0x5555555555555555" identifier * number_literal) )))) && (binary_expression "lVar4 * 0x5555555555555555 != 0" (binary_expression "lVar4 * 0x5555555555555555" identifier * number_literal) != number_literal)) )) || (parenthesized_expression "(0xaaaaaaaaaaaaaaa < uVar5)" ( (binary_expression "0xaaaaaaaaaaaaaaa < uVar5" number_literal < identifier) ))) )) (goto_statement "goto LAB_001617c9;" goto statement_identifier ;)) (expression_statement "pCVar7 = (pointer)0x0;" (assignment_expression "pCVar7 = (pointer)0x0" identifier = (cast_expression "(pointer)0x0" ( (type_descriptor "pointer" type_identifier) ) number_literal)) ;) (expression_statement "__dest_00 = (pointer)0x0;" (assignment_expression "__dest_00 = (pointer)0x0" identifier = (cast_expression "(pointer)0x0" ( (type_descriptor "pointer" type_identifier) ) number_literal)) ;) (if_statement "if (uVar5 != 0) goto LAB_001618c5;" if (parenthesized_expression "(uVar5 != 0)" ( (binary_expression "uVar5 != 0" identifier != number_literal) )) (goto_statement "goto LAB_001618c5;" goto statement_identifier ;)) }))) (expression_statement "sVar3 = __args_0->size;" (assignment_expression "sVar3 = __args_0->size" identifier = (field_expression "__args_0->size" identifier -> field_identifier)) ;) (expression_statement "puVar2 = __args_0->contents;" (assignment_expression "puVar2 = __args_0->contents" identifier = (field_expression "__args_0->contents" identifier -> field_identifier)) ;) (expression_statement "__dest = (void *)((long)__dest_00 + __n + 0x18);" (assignment_expression "__dest = (void *)((long)__dest_00 + __n + 0x18)" identifier = (cast_expression "(void *)((long)__dest_00 + __n + 0x18)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)__dest_00 + __n + 0x18)" ( (binary_expression "(long)__dest_00 + __n + 0x18" (binary_expression "(long)__dest_00 + __n" (cast_expression "(long)__dest_00" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) + number_literal) )))) ;) (expression_statement "*(section_offset_type *)((long)__dest_00 + __n) = __args_0->output_offset;" (assignment_expression "*(section_offset_type *)((long)__dest_00 + __n) = __args_0->output_offset" (pointer_expression "*(section_offset_type *)((long)__dest_00 + __n)" * (cast_expression "(section_offset_type *)((long)__dest_00 + __n)" ( (type_descriptor "section_offset_type *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)__dest_00 + __n)" ( (binary_expression "(long)__dest_00 + __n" (cast_expression "(long)__dest_00" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) )))) = (field_expression "__args_0->output_offset" identifier -> field_identifier)) ;) (expression_statement "((section_offset_type *)((long)__dest_00 + __n))[1] = sVar3;" (assignment_expression "((section_offset_type *)((long)__dest_00 + __n))[1] = sVar3" (subscript_expression "((section_offset_type *)((long)__dest_00 + __n))[1]" (parenthesized_expression "((section_offset_type *)((long)__dest_00 + __n))" ( (cast_expression "(section_offset_type *)((long)__dest_00 + __n)" ( (type_descriptor "section_offset_type *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)__dest_00 + __n)" ( (binary_expression "(long)__dest_00 + __n" (cast_expression "(long)__dest_00" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) ))) )) [ number_literal ]) = identifier) ;) (expression_statement "*(uchar **)((long)__dest_00 + __n + 0x10) = puVar2;" (assignment_expression "*(uchar **)((long)__dest_00 + __n + 0x10) = puVar2" (pointer_expression "*(uchar **)((long)__dest_00 + __n + 0x10)" * (cast_expression "(uchar **)((long)__dest_00 + __n + 0x10)" ( (type_descriptor "uchar **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "((long)__dest_00 + __n + 0x10)" ( (binary_expression "(long)__dest_00 + __n + 0x10" (binary_expression "(long)__dest_00 + __n" (cast_expression "(long)__dest_00" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) + number_literal) )))) = identifier) ;) (if_statement "if (__position._M_current == __src) {\n    if (__position._M_current != pCVar1) goto LAB_00161846;\nLAB_00161854:\n    if (__src == (Contribution *)0x0) goto LAB_00161859;\n  }\n  else {\n    memmove(__dest_00,__src,__n);\n    if (__position._M_current != pCVar1) {\nLAB_00161846:\n      memcpy(__dest,__position._M_current,(long)pCVar1 - (long)__position._M_current);\n      goto LAB_00161854;\n    }\n  }" if (parenthesized_expression "(__position._M_current == __src)" ( (binary_expression "__position._M_current == __src" (field_expression "__position._M_current" identifier . field_identifier) == identifier) )) (compound_statement "{\n    if (__position._M_current != pCVar1) goto LAB_00161846;\nLAB_00161854:\n    if (__src == (Contribution *)0x0) goto LAB_00161859;\n  }" { (if_statement "if (__position._M_current != pCVar1) goto LAB_00161846;" if (parenthesized_expression "(__position._M_current != pCVar1)" ( (binary_expression "__position._M_current != pCVar1" (field_expression "__position._M_current" identifier . field_identifier) != identifier) )) (goto_statement "goto LAB_00161846;" goto statement_identifier ;)) (labeled_statement "LAB_00161854:\n    if (__src == (Contribution *)0x0) goto LAB_00161859;" statement_identifier : (if_statement "if (__src == (Contribution *)0x0) goto LAB_00161859;" if (parenthesized_expression "(__src == (Contribution *)0x0)" ( (binary_expression "__src == (Contribution *)0x0" identifier == (cast_expression "(Contribution *)0x0" ( (type_descriptor "Contribution *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_00161859;" goto statement_identifier ;))) }) (else_clause "else {\n    memmove(__dest_00,__src,__n);\n    if (__position._M_current != pCVar1) {\nLAB_00161846:\n      memcpy(__dest,__position._M_current,(long)pCVar1 - (long)__position._M_current);\n      goto LAB_00161854;\n    }\n  }" else (compound_statement "{\n    memmove(__dest_00,__src,__n);\n    if (__position._M_current != pCVar1) {\nLAB_00161846:\n      memcpy(__dest,__position._M_current,(long)pCVar1 - (long)__position._M_current);\n      goto LAB_00161854;\n    }\n  }" { (expression_statement "memmove(__dest_00,__src,__n);" (call_expression "memmove(__dest_00,__src,__n)" identifier (argument_list "(__dest_00,__src,__n)" ( identifier , identifier , identifier ))) ;) (if_statement "if (__position._M_current != pCVar1) {\nLAB_00161846:\n      memcpy(__dest,__position._M_current,(long)pCVar1 - (long)__position._M_current);\n      goto LAB_00161854;\n    }" if (parenthesized_expression "(__position._M_current != pCVar1)" ( (binary_expression "__position._M_current != pCVar1" (field_expression "__position._M_current" identifier . field_identifier) != identifier) )) (compound_statement "{\nLAB_00161846:\n      memcpy(__dest,__position._M_current,(long)pCVar1 - (long)__position._M_current);\n      goto LAB_00161854;\n    }" { (labeled_statement "LAB_00161846:\n      memcpy(__dest,__position._M_current,(long)pCVar1 - (long)__position._M_current);" statement_identifier : (expression_statement "memcpy(__dest,__position._M_current,(long)pCVar1 - (long)__position._M_current);" (call_expression "memcpy(__dest,__position._M_current,(long)pCVar1 - (long)__position._M_current)" identifier (argument_list "(__dest,__position._M_current,(long)pCVar1 - (long)__position._M_current)" ( identifier , (field_expression "__position._M_current" identifier . field_identifier) , (binary_expression "(long)pCVar1 - (long)__position._M_current" (cast_expression "(long)pCVar1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)__position._M_current" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (field_expression "__position._M_current" identifier . field_identifier))) ))) ;)) (goto_statement "goto LAB_00161854;" goto statement_identifier ;) })) }))) (expression_statement "operator_delete(__src);" (call_expression "operator_delete(__src)" identifier (argument_list "(__src)" ( identifier ))) ;) (labeled_statement "LAB_00161859:\n  (this->\n  super__Vector_base<gold::Dwp_output_file::Contribution,_std::allocator<gold::Dwp_output_file::Contribution>_>\n  )._M_impl._M_start = __dest_00;" statement_identifier : (expression_statement "(this->\n  super__Vector_base<gold::Dwp_output_file::Contribution,_std::allocator<gold::Dwp_output_file::Contribution>_>\n  )._M_impl._M_start = __dest_00;" (assignment_expression "(this->\n  super__Vector_base<gold::Dwp_output_file::Contribution,_std::allocator<gold::Dwp_output_file::Contribution>_>\n  )._M_impl._M_start = __dest_00" (field_expression "(this->\n  super__Vector_base<gold::Dwp_output_file::Contribution,_std::allocator<gold::Dwp_output_file::Contribution>_>\n  )._M_impl._M_start" (field_expression "(this->\n  super__Vector_base<gold::Dwp_output_file::Contribution,_std::allocator<gold::Dwp_output_file::Contribution>_>\n  )._M_impl" (parenthesized_expression "(this->\n  super__Vector_base<gold::Dwp_output_file::Contribution,_std::allocator<gold::Dwp_output_file::Contribution>_>\n  )" ( (ERROR "this->\n  super__Vector_base<gold::Dwp_output_file::Contribution,_std::allocator<gold::Dwp_output_file::" (comma_expression "this->\n  super__Vector_base<gold::Dwp_output_file::Contribution,_std" (binary_expression "this->\n  super__Vector_base<gold" (field_expression "this->\n  super__Vector_base" identifier -> field_identifier) < identifier) (ERROR "::Dwp_output_file::Contribution" : : identifier : : identifier) , identifier) : : (binary_expression "allocator<gold" identifier < identifier) : : identifier : :) (binary_expression "Contribution>_>" (binary_expression "Contribution>_" identifier > identifier) > identifier) )) . field_identifier) . field_identifier) = identifier) ;)) (expression_statement "(this->\n  super__Vector_base<gold::Dwp_output_file::Contribution,_std::allocator<gold::Dwp_output_file::Contribution>_>\n  )._M_impl._M_finish = (pointer)((long)__dest + ((long)pCVar1 - (long)__position._M_current));" (assignment_expression "(this->\n  super__Vector_base<gold::Dwp_output_file::Contribution,_std::allocator<gold::Dwp_output_file::Contribution>_>\n  )._M_impl._M_finish = (pointer)((long)__dest + ((long)pCVar1 - (long)__position._M_current))" (field_expression "(this->\n  super__Vector_base<gold::Dwp_output_file::Contribution,_std::allocator<gold::Dwp_output_file::Contribution>_>\n  )._M_impl._M_finish" (field_expression "(this->\n  super__Vector_base<gold::Dwp_output_file::Contribution,_std::allocator<gold::Dwp_output_file::Contribution>_>\n  )._M_impl" (parenthesized_expression "(this->\n  super__Vector_base<gold::Dwp_output_file::Contribution,_std::allocator<gold::Dwp_output_file::Contribution>_>\n  )" ( (ERROR "this->\n  super__Vector_base<gold::Dwp_output_file::Contribution,_std::allocator<gold::Dwp_output_file::" (comma_expression "this->\n  super__Vector_base<gold::Dwp_output_file::Contribution,_std" (binary_expression "this->\n  super__Vector_base<gold" (field_expression "this->\n  super__Vector_base" identifier -> field_identifier) < identifier) (ERROR "::Dwp_output_file::Contribution" : : identifier : : identifier) , identifier) : : (binary_expression "allocator<gold" identifier < identifier) : : identifier : :) (binary_expression "Contribution>_>" (binary_expression "Contribution>_" identifier > identifier) > identifier) )) . field_identifier) . field_identifier) = (call_expression "(pointer)((long)__dest + ((long)pCVar1 - (long)__position._M_current))" (parenthesized_expression "(pointer)" ( identifier )) (argument_list "((long)__dest + ((long)pCVar1 - (long)__position._M_current))" ( (binary_expression "(long)__dest + ((long)pCVar1 - (long)__position._M_current)" (cast_expression "(long)__dest" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "((long)pCVar1 - (long)__position._M_current)" ( (binary_expression "(long)pCVar1 - (long)__position._M_current" (cast_expression "(long)pCVar1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)__position._M_current" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (field_expression "__position._M_current" identifier . field_identifier))) ))) )))) ;) (expression_statement "(this->\n  super__Vector_base<gold::Dwp_output_file::Contribution,_std::allocator<gold::Dwp_output_file::Contribution>_>\n  )._M_impl._M_end_of_storage = pCVar7;" (assignment_expression "(this->\n  super__Vector_base<gold::Dwp_output_file::Contribution,_std::allocator<gold::Dwp_output_file::Contribution>_>\n  )._M_impl._M_end_of_storage = pCVar7" (field_expression "(this->\n  super__Vector_base<gold::Dwp_output_file::Contribution,_std::allocator<gold::Dwp_output_file::Contribution>_>\n  )._M_impl._M_end_of_storage" (field_expression "(this->\n  super__Vector_base<gold::Dwp_output_file::Contribution,_std::allocator<gold::Dwp_output_file::Contribution>_>\n  )._M_impl" (parenthesized_expression "(this->\n  super__Vector_base<gold::Dwp_output_file::Contribution,_std::allocator<gold::Dwp_output_file::Contribution>_>\n  )" ( (ERROR "this->\n  super__Vector_base<gold::Dwp_output_file::Contribution,_std::allocator<gold::Dwp_output_file::" (comma_expression "this->\n  super__Vector_base<gold::Dwp_output_file::Contribution,_std" (binary_expression "this->\n  super__Vector_base<gold" (field_expression "this->\n  super__Vector_base" identifier -> field_identifier) < identifier) (ERROR "::Dwp_output_file::Contribution" : : identifier : : identifier) , identifier) : : (binary_expression "allocator<gold" identifier < identifier) : : identifier : :) (binary_expression "Contribution>_>" (binary_expression "Contribution>_" identifier > identifier) > identifier) )) . field_identifier) . field_identifier) = identifier) ;) (return_statement "return;" return ;) (ERROR "}" }))
(translation_unit "void FUN_00161770(undefined8 *param_1,void *param_2,undefined8 *param_3)\n\n{\n  void *__dest;\n  void *pvVar1;\n  void *__src;\n  undefined8 uVar2;\n  undefined8 uVar3;\n  long lVar4;\n  void *__dest_00;\n  size_t __n;\n  ulong uVar5;\n  long lVar6;\n  \n  pvVar1 = (void *)param_1[1];\n  __src = (void *)*param_1;\n  __n = (long)param_2 - (long)__src;\n  lVar4 = (long)pvVar1 - (long)__src >> 3;\n  if (lVar4 * -0x5555555555555555 == 0) {\n    uVar5 = 1;\nLAB_001618c5:\n    lVar6 = uVar5 * 0x18;\nLAB_001617c9:\n    __dest_00 = (void *)FUN_002d9490(lVar6);\n    lVar6 = lVar6 + (long)__dest_00;\n  }\n  else {\n    uVar5 = lVar4 * 0x5555555555555556;\n    lVar6 = -0x10;\n    if ((uVar5 <= (ulong)(lVar4 * -0x5555555555555555) && lVar4 * 0x5555555555555555 != 0) ||\n       (0xaaaaaaaaaaaaaaa < uVar5)) goto LAB_001617c9;\n    lVar6 = 0;\n    __dest_00 = (void *)0x0;\n    if (uVar5 != 0) goto LAB_001618c5;\n  }\n  uVar3 = param_3[1];\n  uVar2 = param_3[2];\n  __dest = (void *)((long)__dest_00 + __n + 0x18);\n  *(undefined8 *)((long)__dest_00 + __n) = *param_3;\n  ((undefined8 *)((long)__dest_00 + __n))[1] = uVar3;\n  *(undefined8 *)((long)__dest_00 + __n + 0x10) = uVar2;\n  if (param_2 == __src) {\n    if (param_2 != pvVar1) goto LAB_00161846;\nLAB_00161854:\n    if (__src == (void *)0x0) goto LAB_00161859;\n  }\n  else {\n    memmove(__dest_00,__src,__n);\n    if (param_2 != pvVar1) {\nLAB_00161846:\n      memcpy(__dest,param_2,(long)pvVar1 - (long)param_2);\n      goto LAB_00161854;\n    }\n  }\n  FUN_002dac60(__src);\nLAB_00161859:\n  *param_1 = __dest_00;\n  param_1[1] = (long)__dest + ((long)pvVar1 - (long)param_2);\n  param_1[2] = lVar6;\n  return;\n}\n\n" (function_definition "void FUN_00161770(undefined8 *param_1,void *param_2,undefined8 *param_3)\n\n{\n  void *__dest;\n  void *pvVar1;\n  void *__src;\n  undefined8 uVar2;\n  undefined8 uVar3;\n  long lVar4;\n  void *__dest_00;\n  size_t __n;\n  ulong uVar5;\n  long lVar6;\n  \n  pvVar1 = (void *)param_1[1];\n  __src = (void *)*param_1;\n  __n = (long)param_2 - (long)__src;\n  lVar4 = (long)pvVar1 - (long)__src >> 3;\n  if (lVar4 * -0x5555555555555555 == 0) {\n    uVar5 = 1;\nLAB_001618c5:\n    lVar6 = uVar5 * 0x18;\nLAB_001617c9:\n    __dest_00 = (void *)FUN_002d9490(lVar6);\n    lVar6 = lVar6 + (long)__dest_00;\n  }\n  else {\n    uVar5 = lVar4 * 0x5555555555555556;\n    lVar6 = -0x10;\n    if ((uVar5 <= (ulong)(lVar4 * -0x5555555555555555) && lVar4 * 0x5555555555555555 != 0) ||\n       (0xaaaaaaaaaaaaaaa < uVar5)) goto LAB_001617c9;\n    lVar6 = 0;\n    __dest_00 = (void *)0x0;\n    if (uVar5 != 0) goto LAB_001618c5;\n  }\n  uVar3 = param_3[1];\n  uVar2 = param_3[2];\n  __dest = (void *)((long)__dest_00 + __n + 0x18);\n  *(undefined8 *)((long)__dest_00 + __n) = *param_3;\n  ((undefined8 *)((long)__dest_00 + __n))[1] = uVar3;\n  *(undefined8 *)((long)__dest_00 + __n + 0x10) = uVar2;\n  if (param_2 == __src) {\n    if (param_2 != pvVar1) goto LAB_00161846;\nLAB_00161854:\n    if (__src == (void *)0x0) goto LAB_00161859;\n  }\n  else {\n    memmove(__dest_00,__src,__n);\n    if (param_2 != pvVar1) {\nLAB_00161846:\n      memcpy(__dest,param_2,(long)pvVar1 - (long)param_2);\n      goto LAB_00161854;\n    }\n  }\n  FUN_002dac60(__src);\nLAB_00161859:\n  *param_1 = __dest_00;\n  param_1[1] = (long)__dest + ((long)pvVar1 - (long)param_2);\n  param_1[2] = lVar6;\n  return;\n}" primitive_type (function_declarator "FUN_00161770(undefined8 *param_1,void *param_2,undefined8 *param_3)" identifier (parameter_list "(undefined8 *param_1,void *param_2,undefined8 *param_3)" ( (parameter_declaration "undefined8 *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "void *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "undefined8 *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) ))) (compound_statement "{\n  void *__dest;\n  void *pvVar1;\n  void *__src;\n  undefined8 uVar2;\n  undefined8 uVar3;\n  long lVar4;\n  void *__dest_00;\n  size_t __n;\n  ulong uVar5;\n  long lVar6;\n  \n  pvVar1 = (void *)param_1[1];\n  __src = (void *)*param_1;\n  __n = (long)param_2 - (long)__src;\n  lVar4 = (long)pvVar1 - (long)__src >> 3;\n  if (lVar4 * -0x5555555555555555 == 0) {\n    uVar5 = 1;\nLAB_001618c5:\n    lVar6 = uVar5 * 0x18;\nLAB_001617c9:\n    __dest_00 = (void *)FUN_002d9490(lVar6);\n    lVar6 = lVar6 + (long)__dest_00;\n  }\n  else {\n    uVar5 = lVar4 * 0x5555555555555556;\n    lVar6 = -0x10;\n    if ((uVar5 <= (ulong)(lVar4 * -0x5555555555555555) && lVar4 * 0x5555555555555555 != 0) ||\n       (0xaaaaaaaaaaaaaaa < uVar5)) goto LAB_001617c9;\n    lVar6 = 0;\n    __dest_00 = (void *)0x0;\n    if (uVar5 != 0) goto LAB_001618c5;\n  }\n  uVar3 = param_3[1];\n  uVar2 = param_3[2];\n  __dest = (void *)((long)__dest_00 + __n + 0x18);\n  *(undefined8 *)((long)__dest_00 + __n) = *param_3;\n  ((undefined8 *)((long)__dest_00 + __n))[1] = uVar3;\n  *(undefined8 *)((long)__dest_00 + __n + 0x10) = uVar2;\n  if (param_2 == __src) {\n    if (param_2 != pvVar1) goto LAB_00161846;\nLAB_00161854:\n    if (__src == (void *)0x0) goto LAB_00161859;\n  }\n  else {\n    memmove(__dest_00,__src,__n);\n    if (param_2 != pvVar1) {\nLAB_00161846:\n      memcpy(__dest,param_2,(long)pvVar1 - (long)param_2);\n      goto LAB_00161854;\n    }\n  }\n  FUN_002dac60(__src);\nLAB_00161859:\n  *param_1 = __dest_00;\n  param_1[1] = (long)__dest + ((long)pvVar1 - (long)param_2);\n  param_1[2] = lVar6;\n  return;\n}" { (declaration "void *__dest;" primitive_type (pointer_declarator "*__dest" * identifier) ;) (declaration "void *pvVar1;" primitive_type (pointer_declarator "*pvVar1" * identifier) ;) (declaration "void *__src;" primitive_type (pointer_declarator "*__src" * identifier) ;) (declaration "undefined8 uVar2;" type_identifier identifier ;) (declaration "undefined8 uVar3;" type_identifier identifier ;) (declaration "long lVar4;" (sized_type_specifier "long" long) identifier ;) (declaration "void *__dest_00;" primitive_type (pointer_declarator "*__dest_00" * identifier) ;) (declaration "size_t __n;" primitive_type identifier ;) (declaration "ulong uVar5;" type_identifier identifier ;) (declaration "long lVar6;" (sized_type_specifier "long" long) identifier ;) (expression_statement "pvVar1 = (void *)param_1[1];" (assignment_expression "pvVar1 = (void *)param_1[1]" identifier = (cast_expression "(void *)param_1[1]" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[1]" identifier [ number_literal ]))) ;) (expression_statement "__src = (void *)*param_1;" (assignment_expression "__src = (void *)*param_1" identifier = (cast_expression "(void *)*param_1" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) ;) (expression_statement "__n = (long)param_2 - (long)__src;" (assignment_expression "__n = (long)param_2 - (long)__src" identifier = (binary_expression "(long)param_2 - (long)__src" (cast_expression "(long)param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)__src" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) (expression_statement "lVar4 = (long)pvVar1 - (long)__src >> 3;" (assignment_expression "lVar4 = (long)pvVar1 - (long)__src >> 3" identifier = (binary_expression "(long)pvVar1 - (long)__src >> 3" (binary_expression "(long)pvVar1 - (long)__src" (cast_expression "(long)pvVar1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)__src" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) >> number_literal)) ;) (if_statement "if (lVar4 * -0x5555555555555555 == 0) {\n    uVar5 = 1;\nLAB_001618c5:\n    lVar6 = uVar5 * 0x18;\nLAB_001617c9:\n    __dest_00 = (void *)FUN_002d9490(lVar6);\n    lVar6 = lVar6 + (long)__dest_00;\n  }\n  else {\n    uVar5 = lVar4 * 0x5555555555555556;\n    lVar6 = -0x10;\n    if ((uVar5 <= (ulong)(lVar4 * -0x5555555555555555) && lVar4 * 0x5555555555555555 != 0) ||\n       (0xaaaaaaaaaaaaaaa < uVar5)) goto LAB_001617c9;\n    lVar6 = 0;\n    __dest_00 = (void *)0x0;\n    if (uVar5 != 0) goto LAB_001618c5;\n  }" if (parenthesized_expression "(lVar4 * -0x5555555555555555 == 0)" ( (binary_expression "lVar4 * -0x5555555555555555 == 0" (binary_expression "lVar4 * -0x5555555555555555" identifier * number_literal) == number_literal) )) (compound_statement "{\n    uVar5 = 1;\nLAB_001618c5:\n    lVar6 = uVar5 * 0x18;\nLAB_001617c9:\n    __dest_00 = (void *)FUN_002d9490(lVar6);\n    lVar6 = lVar6 + (long)__dest_00;\n  }" { (expression_statement "uVar5 = 1;" (assignment_expression "uVar5 = 1" identifier = number_literal) ;) (labeled_statement "LAB_001618c5:\n    lVar6 = uVar5 * 0x18;" statement_identifier : (expression_statement "lVar6 = uVar5 * 0x18;" (assignment_expression "lVar6 = uVar5 * 0x18" identifier = (binary_expression "uVar5 * 0x18" identifier * number_literal)) ;)) (labeled_statement "LAB_001617c9:\n    __dest_00 = (void *)FUN_002d9490(lVar6);" statement_identifier : (expression_statement "__dest_00 = (void *)FUN_002d9490(lVar6);" (assignment_expression "__dest_00 = (void *)FUN_002d9490(lVar6)" identifier = (cast_expression "(void *)FUN_002d9490(lVar6)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_002d9490(lVar6)" identifier (argument_list "(lVar6)" ( identifier ))))) ;)) (expression_statement "lVar6 = lVar6 + (long)__dest_00;" (assignment_expression "lVar6 = lVar6 + (long)__dest_00" identifier = (binary_expression "lVar6 + (long)__dest_00" identifier + (cast_expression "(long)__dest_00" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) }) (else_clause "else {\n    uVar5 = lVar4 * 0x5555555555555556;\n    lVar6 = -0x10;\n    if ((uVar5 <= (ulong)(lVar4 * -0x5555555555555555) && lVar4 * 0x5555555555555555 != 0) ||\n       (0xaaaaaaaaaaaaaaa < uVar5)) goto LAB_001617c9;\n    lVar6 = 0;\n    __dest_00 = (void *)0x0;\n    if (uVar5 != 0) goto LAB_001618c5;\n  }" else (compound_statement "{\n    uVar5 = lVar4 * 0x5555555555555556;\n    lVar6 = -0x10;\n    if ((uVar5 <= (ulong)(lVar4 * -0x5555555555555555) && lVar4 * 0x5555555555555555 != 0) ||\n       (0xaaaaaaaaaaaaaaa < uVar5)) goto LAB_001617c9;\n    lVar6 = 0;\n    __dest_00 = (void *)0x0;\n    if (uVar5 != 0) goto LAB_001618c5;\n  }" { (expression_statement "uVar5 = lVar4 * 0x5555555555555556;" (assignment_expression "uVar5 = lVar4 * 0x5555555555555556" identifier = (binary_expression "lVar4 * 0x5555555555555556" identifier * number_literal)) ;) (expression_statement "lVar6 = -0x10;" (assignment_expression "lVar6 = -0x10" identifier = number_literal) ;) (if_statement "if ((uVar5 <= (ulong)(lVar4 * -0x5555555555555555) && lVar4 * 0x5555555555555555 != 0) ||\n       (0xaaaaaaaaaaaaaaa < uVar5)) goto LAB_001617c9;" if (parenthesized_expression "((uVar5 <= (ulong)(lVar4 * -0x5555555555555555) && lVar4 * 0x5555555555555555 != 0) ||\n       (0xaaaaaaaaaaaaaaa < uVar5))" ( (binary_expression "(uVar5 <= (ulong)(lVar4 * -0x5555555555555555) && lVar4 * 0x5555555555555555 != 0) ||\n       (0xaaaaaaaaaaaaaaa < uVar5)" (parenthesized_expression "(uVar5 <= (ulong)(lVar4 * -0x5555555555555555) && lVar4 * 0x5555555555555555 != 0)" ( (binary_expression "uVar5 <= (ulong)(lVar4 * -0x5555555555555555) && lVar4 * 0x5555555555555555 != 0" (binary_expression "uVar5 <= (ulong)(lVar4 * -0x5555555555555555)" identifier <= (call_expression "(ulong)(lVar4 * -0x5555555555555555)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(lVar4 * -0x5555555555555555)" ( (binary_expression "lVar4 * -0x5555555555555555" identifier * number_literal) )))) && (binary_expression "lVar4 * 0x5555555555555555 != 0" (binary_expression "lVar4 * 0x5555555555555555" identifier * number_literal) != number_literal)) )) || (parenthesized_expression "(0xaaaaaaaaaaaaaaa < uVar5)" ( (binary_expression "0xaaaaaaaaaaaaaaa < uVar5" number_literal < identifier) ))) )) (goto_statement "goto LAB_001617c9;" goto statement_identifier ;)) (expression_statement "lVar6 = 0;" (assignment_expression "lVar6 = 0" identifier = number_literal) ;) (expression_statement "__dest_00 = (void *)0x0;" (assignment_expression "__dest_00 = (void *)0x0" identifier = (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (if_statement "if (uVar5 != 0) goto LAB_001618c5;" if (parenthesized_expression "(uVar5 != 0)" ( (binary_expression "uVar5 != 0" identifier != number_literal) )) (goto_statement "goto LAB_001618c5;" goto statement_identifier ;)) }))) (expression_statement "uVar3 = param_3[1];" (assignment_expression "uVar3 = param_3[1]" identifier = (subscript_expression "param_3[1]" identifier [ number_literal ])) ;) (expression_statement "uVar2 = param_3[2];" (assignment_expression "uVar2 = param_3[2]" identifier = (subscript_expression "param_3[2]" identifier [ number_literal ])) ;) (expression_statement "__dest = (void *)((long)__dest_00 + __n + 0x18);" (assignment_expression "__dest = (void *)((long)__dest_00 + __n + 0x18)" identifier = (cast_expression "(void *)((long)__dest_00 + __n + 0x18)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)__dest_00 + __n + 0x18)" ( (binary_expression "(long)__dest_00 + __n + 0x18" (binary_expression "(long)__dest_00 + __n" (cast_expression "(long)__dest_00" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) + number_literal) )))) ;) (expression_statement "*(undefined8 *)((long)__dest_00 + __n) = *param_3;" (assignment_expression "*(undefined8 *)((long)__dest_00 + __n) = *param_3" (pointer_expression "*(undefined8 *)((long)__dest_00 + __n)" * (cast_expression "(undefined8 *)((long)__dest_00 + __n)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)__dest_00 + __n)" ( (binary_expression "(long)__dest_00 + __n" (cast_expression "(long)__dest_00" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) )))) = (pointer_expression "*param_3" * identifier)) ;) (expression_statement "((undefined8 *)((long)__dest_00 + __n))[1] = uVar3;" (assignment_expression "((undefined8 *)((long)__dest_00 + __n))[1] = uVar3" (subscript_expression "((undefined8 *)((long)__dest_00 + __n))[1]" (parenthesized_expression "((undefined8 *)((long)__dest_00 + __n))" ( (cast_expression "(undefined8 *)((long)__dest_00 + __n)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)__dest_00 + __n)" ( (binary_expression "(long)__dest_00 + __n" (cast_expression "(long)__dest_00" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) ))) )) [ number_literal ]) = identifier) ;) (expression_statement "*(undefined8 *)((long)__dest_00 + __n + 0x10) = uVar2;" (assignment_expression "*(undefined8 *)((long)__dest_00 + __n + 0x10) = uVar2" (pointer_expression "*(undefined8 *)((long)__dest_00 + __n + 0x10)" * (cast_expression "(undefined8 *)((long)__dest_00 + __n + 0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)__dest_00 + __n + 0x10)" ( (binary_expression "(long)__dest_00 + __n + 0x10" (binary_expression "(long)__dest_00 + __n" (cast_expression "(long)__dest_00" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) + number_literal) )))) = identifier) ;) (if_statement "if (param_2 == __src) {\n    if (param_2 != pvVar1) goto LAB_00161846;\nLAB_00161854:\n    if (__src == (void *)0x0) goto LAB_00161859;\n  }\n  else {\n    memmove(__dest_00,__src,__n);\n    if (param_2 != pvVar1) {\nLAB_00161846:\n      memcpy(__dest,param_2,(long)pvVar1 - (long)param_2);\n      goto LAB_00161854;\n    }\n  }" if (parenthesized_expression "(param_2 == __src)" ( (binary_expression "param_2 == __src" identifier == identifier) )) (compound_statement "{\n    if (param_2 != pvVar1) goto LAB_00161846;\nLAB_00161854:\n    if (__src == (void *)0x0) goto LAB_00161859;\n  }" { (if_statement "if (param_2 != pvVar1) goto LAB_00161846;" if (parenthesized_expression "(param_2 != pvVar1)" ( (binary_expression "param_2 != pvVar1" identifier != identifier) )) (goto_statement "goto LAB_00161846;" goto statement_identifier ;)) (labeled_statement "LAB_00161854:\n    if (__src == (void *)0x0) goto LAB_00161859;" statement_identifier : (if_statement "if (__src == (void *)0x0) goto LAB_00161859;" if (parenthesized_expression "(__src == (void *)0x0)" ( (binary_expression "__src == (void *)0x0" identifier == (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_00161859;" goto statement_identifier ;))) }) (else_clause "else {\n    memmove(__dest_00,__src,__n);\n    if (param_2 != pvVar1) {\nLAB_00161846:\n      memcpy(__dest,param_2,(long)pvVar1 - (long)param_2);\n      goto LAB_00161854;\n    }\n  }" else (compound_statement "{\n    memmove(__dest_00,__src,__n);\n    if (param_2 != pvVar1) {\nLAB_00161846:\n      memcpy(__dest,param_2,(long)pvVar1 - (long)param_2);\n      goto LAB_00161854;\n    }\n  }" { (expression_statement "memmove(__dest_00,__src,__n);" (call_expression "memmove(__dest_00,__src,__n)" identifier (argument_list "(__dest_00,__src,__n)" ( identifier , identifier , identifier ))) ;) (if_statement "if (param_2 != pvVar1) {\nLAB_00161846:\n      memcpy(__dest,param_2,(long)pvVar1 - (long)param_2);\n      goto LAB_00161854;\n    }" if (parenthesized_expression "(param_2 != pvVar1)" ( (binary_expression "param_2 != pvVar1" identifier != identifier) )) (compound_statement "{\nLAB_00161846:\n      memcpy(__dest,param_2,(long)pvVar1 - (long)param_2);\n      goto LAB_00161854;\n    }" { (labeled_statement "LAB_00161846:\n      memcpy(__dest,param_2,(long)pvVar1 - (long)param_2);" statement_identifier : (expression_statement "memcpy(__dest,param_2,(long)pvVar1 - (long)param_2);" (call_expression "memcpy(__dest,param_2,(long)pvVar1 - (long)param_2)" identifier (argument_list "(__dest,param_2,(long)pvVar1 - (long)param_2)" ( identifier , identifier , (binary_expression "(long)pvVar1 - (long)param_2" (cast_expression "(long)pvVar1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ))) ;)) (goto_statement "goto LAB_00161854;" goto statement_identifier ;) })) }))) (expression_statement "FUN_002dac60(__src);" (call_expression "FUN_002dac60(__src)" identifier (argument_list "(__src)" ( identifier ))) ;) (labeled_statement "LAB_00161859:\n  *param_1 = __dest_00;" statement_identifier : (expression_statement "*param_1 = __dest_00;" (assignment_expression "*param_1 = __dest_00" (pointer_expression "*param_1" * identifier) = identifier) ;)) (expression_statement "param_1[1] = (long)__dest + ((long)pvVar1 - (long)param_2);" (assignment_expression "param_1[1] = (long)__dest + ((long)pvVar1 - (long)param_2)" (subscript_expression "param_1[1]" identifier [ number_literal ]) = (binary_expression "(long)__dest + ((long)pvVar1 - (long)param_2)" (cast_expression "(long)__dest" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "((long)pvVar1 - (long)param_2)" ( (binary_expression "(long)pvVar1 - (long)param_2" (cast_expression "(long)pvVar1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) )))) ;) (expression_statement "param_1[2] = lVar6;" (assignment_expression "param_1[2] = lVar6" (subscript_expression "param_1[2]" identifier [ number_literal ]) = identifier) ;) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) - (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) - (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) >> LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT * LIT) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (binary_expression IDENT * LIT)) ;)) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( IDENT ))))) ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT * LIT)) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (binary_expression IDENT <= (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT * LIT) )))) && (binary_expression (binary_expression IDENT * LIT) != LIT)) )) || (parenthesized_expression ( (binary_expression LIT < IDENT) ))) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (goto_statement goto statement_identifier ;)) }))) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + IDENT) + LIT) )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + IDENT) )))) = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (subscript_expression (parenthesized_expression ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + IDENT) ))) )) [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + IDENT) + LIT) )))) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT != IDENT) )) (goto_statement goto statement_identifier ;)) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (goto_statement goto statement_identifier ;))) }) (else_clause else (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT ))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != IDENT) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) - (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) ))) ;)) (goto_statement goto statement_identifier ;) })) }))) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;)) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) - (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) )))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (return_statement return ;) })))
(function_definition "void FUN_00161770(undefined8 *param_1,void *param_2,undefined8 *param_3)\n\n{\n  void *__dest;\n  void *pvVar1;\n  void *__src;\n  undefined8 uVar2;\n  undefined8 uVar3;\n  long lVar4;\n  void *__dest_00;\n  size_t __n;\n  ulong uVar5;\n  long lVar6;\n  \n  pvVar1 = (void *)param_1[1];\n  __src = (void *)*param_1;\n  __n = (long)param_2 - (long)__src;\n  lVar4 = (long)pvVar1 - (long)__src >> 3;\n  if (lVar4 * -0x5555555555555555 == 0) {\n    uVar5 = 1;\nLAB_001618c5:\n    lVar6 = uVar5 * 0x18;\nLAB_001617c9:\n    __dest_00 = (void *)FUN_002d9490(lVar6);\n    lVar6 = lVar6 + (long)__dest_00;\n  }\n  else {\n    uVar5 = lVar4 * 0x5555555555555556;\n    lVar6 = -0x10;\n    if ((uVar5 <= (ulong)(lVar4 * -0x5555555555555555) && lVar4 * 0x5555555555555555 != 0) ||\n       (0xaaaaaaaaaaaaaaa < uVar5)) goto LAB_001617c9;\n    lVar6 = 0;\n    __dest_00 = (void *)0x0;\n    if (uVar5 != 0) goto LAB_001618c5;\n  }\n  uVar3 = param_3[1];\n  uVar2 = param_3[2];\n  __dest = (void *)((long)__dest_00 + __n + 0x18);\n  *(undefined8 *)((long)__dest_00 + __n) = *param_3;\n  ((undefined8 *)((long)__dest_00 + __n))[1] = uVar3;\n  *(undefined8 *)((long)__dest_00 + __n + 0x10) = uVar2;\n  if (param_2 == __src) {\n    if (param_2 != pvVar1) goto LAB_00161846;\nLAB_00161854:\n    if (__src == (void *)0x0) goto LAB_00161859;\n  }\n  else {\n    memmove(__dest_00,__src,__n);\n    if (param_2 != pvVar1) {\nLAB_00161846:\n      memcpy(__dest,param_2,(long)pvVar1 - (long)param_2);\n      goto LAB_00161854;\n    }\n  }\n  FUN_002dac60(__src);\nLAB_00161859:\n  *param_1 = __dest_00;\n  param_1[1] = (long)__dest + ((long)pvVar1 - (long)param_2);\n  param_1[2] = lVar6;\n  return;\n}" (primitive_type "void") (function_declarator "FUN_00161770(undefined8 *param_1,void *param_2,undefined8 *param_3)" (identifier "FUN_00161770") (parameter_list "(undefined8 *param_1,void *param_2,undefined8 *param_3)" (( "(") (parameter_declaration "undefined8 *param_1" (type_identifier "undefined8") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "void *param_2" (primitive_type "void") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "undefined8 *param_3" (type_identifier "undefined8") (pointer_declarator "*param_3" (* "*") (identifier "param_3"))) () ")"))) (compound_statement "{\n  void *__dest;\n  void *pvVar1;\n  void *__src;\n  undefined8 uVar2;\n  undefined8 uVar3;\n  long lVar4;\n  void *__dest_00;\n  size_t __n;\n  ulong uVar5;\n  long lVar6;\n  \n  pvVar1 = (void *)param_1[1];\n  __src = (void *)*param_1;\n  __n = (long)param_2 - (long)__src;\n  lVar4 = (long)pvVar1 - (long)__src >> 3;\n  if (lVar4 * -0x5555555555555555 == 0) {\n    uVar5 = 1;\nLAB_001618c5:\n    lVar6 = uVar5 * 0x18;\nLAB_001617c9:\n    __dest_00 = (void *)FUN_002d9490(lVar6);\n    lVar6 = lVar6 + (long)__dest_00;\n  }\n  else {\n    uVar5 = lVar4 * 0x5555555555555556;\n    lVar6 = -0x10;\n    if ((uVar5 <= (ulong)(lVar4 * -0x5555555555555555) && lVar4 * 0x5555555555555555 != 0) ||\n       (0xaaaaaaaaaaaaaaa < uVar5)) goto LAB_001617c9;\n    lVar6 = 0;\n    __dest_00 = (void *)0x0;\n    if (uVar5 != 0) goto LAB_001618c5;\n  }\n  uVar3 = param_3[1];\n  uVar2 = param_3[2];\n  __dest = (void *)((long)__dest_00 + __n + 0x18);\n  *(undefined8 *)((long)__dest_00 + __n) = *param_3;\n  ((undefined8 *)((long)__dest_00 + __n))[1] = uVar3;\n  *(undefined8 *)((long)__dest_00 + __n + 0x10) = uVar2;\n  if (param_2 == __src) {\n    if (param_2 != pvVar1) goto LAB_00161846;\nLAB_00161854:\n    if (__src == (void *)0x0) goto LAB_00161859;\n  }\n  else {\n    memmove(__dest_00,__src,__n);\n    if (param_2 != pvVar1) {\nLAB_00161846:\n      memcpy(__dest,param_2,(long)pvVar1 - (long)param_2);\n      goto LAB_00161854;\n    }\n  }\n  FUN_002dac60(__src);\nLAB_00161859:\n  *param_1 = __dest_00;\n  param_1[1] = (long)__dest + ((long)pvVar1 - (long)param_2);\n  param_1[2] = lVar6;\n  return;\n}" ({ "{") (declaration "void *__dest;" (primitive_type "void") (pointer_declarator "*__dest" (* "*") (identifier "__dest")) (; ";")) (declaration "void *pvVar1;" (primitive_type "void") (pointer_declarator "*pvVar1" (* "*") (identifier "pvVar1")) (; ";")) (declaration "void *__src;" (primitive_type "void") (pointer_declarator "*__src" (* "*") (identifier "__src")) (; ";")) (declaration "undefined8 uVar2;" (type_identifier "undefined8") (identifier "uVar2") (; ";")) (declaration "undefined8 uVar3;" (type_identifier "undefined8") (identifier "uVar3") (; ";")) (declaration "long lVar4;" (sized_type_specifier "long" (long "long")) (identifier "lVar4") (; ";")) (declaration "void *__dest_00;" (primitive_type "void") (pointer_declarator "*__dest_00" (* "*") (identifier "__dest_00")) (; ";")) (declaration "size_t __n;" (primitive_type "size_t") (identifier "__n") (; ";")) (declaration "ulong uVar5;" (type_identifier "ulong") (identifier "uVar5") (; ";")) (declaration "long lVar6;" (sized_type_specifier "long" (long "long")) (identifier "lVar6") (; ";")) (expression_statement "pvVar1 = (void *)param_1[1];" (assignment_expression "pvVar1 = (void *)param_1[1]" (identifier "pvVar1") (= "=") (cast_expression "(void *)param_1[1]" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")))) (; ";")) (expression_statement "__src = (void *)*param_1;" (assignment_expression "__src = (void *)*param_1" (identifier "__src") (= "=") (cast_expression "(void *)*param_1" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_1" (* "*") (identifier "param_1")))) (; ";")) (expression_statement "__n = (long)param_2 - (long)__src;" (assignment_expression "__n = (long)param_2 - (long)__src" (identifier "__n") (= "=") (binary_expression "(long)param_2 - (long)__src" (cast_expression "(long)param_2" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_2")) (- "-") (cast_expression "(long)__src" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "__src")))) (; ";")) (expression_statement "lVar4 = (long)pvVar1 - (long)__src >> 3;" (assignment_expression "lVar4 = (long)pvVar1 - (long)__src >> 3" (identifier "lVar4") (= "=") (binary_expression "(long)pvVar1 - (long)__src >> 3" (binary_expression "(long)pvVar1 - (long)__src" (cast_expression "(long)pvVar1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "pvVar1")) (- "-") (cast_expression "(long)__src" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "__src"))) (>> ">>") (number_literal "3"))) (; ";")) (if_statement "if (lVar4 * -0x5555555555555555 == 0) {\n    uVar5 = 1;\nLAB_001618c5:\n    lVar6 = uVar5 * 0x18;\nLAB_001617c9:\n    __dest_00 = (void *)FUN_002d9490(lVar6);\n    lVar6 = lVar6 + (long)__dest_00;\n  }\n  else {\n    uVar5 = lVar4 * 0x5555555555555556;\n    lVar6 = -0x10;\n    if ((uVar5 <= (ulong)(lVar4 * -0x5555555555555555) && lVar4 * 0x5555555555555555 != 0) ||\n       (0xaaaaaaaaaaaaaaa < uVar5)) goto LAB_001617c9;\n    lVar6 = 0;\n    __dest_00 = (void *)0x0;\n    if (uVar5 != 0) goto LAB_001618c5;\n  }" (if "if") (parenthesized_expression "(lVar4 * -0x5555555555555555 == 0)" (( "(") (binary_expression "lVar4 * -0x5555555555555555 == 0" (binary_expression "lVar4 * -0x5555555555555555" (identifier "lVar4") (* "*") (number_literal "-0x5555555555555555")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    uVar5 = 1;\nLAB_001618c5:\n    lVar6 = uVar5 * 0x18;\nLAB_001617c9:\n    __dest_00 = (void *)FUN_002d9490(lVar6);\n    lVar6 = lVar6 + (long)__dest_00;\n  }" ({ "{") (expression_statement "uVar5 = 1;" (assignment_expression "uVar5 = 1" (identifier "uVar5") (= "=") (number_literal "1")) (; ";")) (labeled_statement "LAB_001618c5:\n    lVar6 = uVar5 * 0x18;" (statement_identifier "LAB_001618c5") (: ":") (expression_statement "lVar6 = uVar5 * 0x18;" (assignment_expression "lVar6 = uVar5 * 0x18" (identifier "lVar6") (= "=") (binary_expression "uVar5 * 0x18" (identifier "uVar5") (* "*") (number_literal "0x18"))) (; ";"))) (labeled_statement "LAB_001617c9:\n    __dest_00 = (void *)FUN_002d9490(lVar6);" (statement_identifier "LAB_001617c9") (: ":") (expression_statement "__dest_00 = (void *)FUN_002d9490(lVar6);" (assignment_expression "__dest_00 = (void *)FUN_002d9490(lVar6)" (identifier "__dest_00") (= "=") (cast_expression "(void *)FUN_002d9490(lVar6)" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_002d9490(lVar6)" (identifier "FUN_002d9490") (argument_list "(lVar6)" (( "(") (identifier "lVar6") () ")"))))) (; ";"))) (expression_statement "lVar6 = lVar6 + (long)__dest_00;" (assignment_expression "lVar6 = lVar6 + (long)__dest_00" (identifier "lVar6") (= "=") (binary_expression "lVar6 + (long)__dest_00" (identifier "lVar6") (+ "+") (cast_expression "(long)__dest_00" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "__dest_00")))) (; ";")) (} "}")) (else_clause "else {\n    uVar5 = lVar4 * 0x5555555555555556;\n    lVar6 = -0x10;\n    if ((uVar5 <= (ulong)(lVar4 * -0x5555555555555555) && lVar4 * 0x5555555555555555 != 0) ||\n       (0xaaaaaaaaaaaaaaa < uVar5)) goto LAB_001617c9;\n    lVar6 = 0;\n    __dest_00 = (void *)0x0;\n    if (uVar5 != 0) goto LAB_001618c5;\n  }" (else "else") (compound_statement "{\n    uVar5 = lVar4 * 0x5555555555555556;\n    lVar6 = -0x10;\n    if ((uVar5 <= (ulong)(lVar4 * -0x5555555555555555) && lVar4 * 0x5555555555555555 != 0) ||\n       (0xaaaaaaaaaaaaaaa < uVar5)) goto LAB_001617c9;\n    lVar6 = 0;\n    __dest_00 = (void *)0x0;\n    if (uVar5 != 0) goto LAB_001618c5;\n  }" ({ "{") (expression_statement "uVar5 = lVar4 * 0x5555555555555556;" (assignment_expression "uVar5 = lVar4 * 0x5555555555555556" (identifier "uVar5") (= "=") (binary_expression "lVar4 * 0x5555555555555556" (identifier "lVar4") (* "*") (number_literal "0x5555555555555556"))) (; ";")) (expression_statement "lVar6 = -0x10;" (assignment_expression "lVar6 = -0x10" (identifier "lVar6") (= "=") (number_literal "-0x10")) (; ";")) (if_statement "if ((uVar5 <= (ulong)(lVar4 * -0x5555555555555555) && lVar4 * 0x5555555555555555 != 0) ||\n       (0xaaaaaaaaaaaaaaa < uVar5)) goto LAB_001617c9;" (if "if") (parenthesized_expression "((uVar5 <= (ulong)(lVar4 * -0x5555555555555555) && lVar4 * 0x5555555555555555 != 0) ||\n       (0xaaaaaaaaaaaaaaa < uVar5))" (( "(") (binary_expression "(uVar5 <= (ulong)(lVar4 * -0x5555555555555555) && lVar4 * 0x5555555555555555 != 0) ||\n       (0xaaaaaaaaaaaaaaa < uVar5)" (parenthesized_expression "(uVar5 <= (ulong)(lVar4 * -0x5555555555555555) && lVar4 * 0x5555555555555555 != 0)" (( "(") (binary_expression "uVar5 <= (ulong)(lVar4 * -0x5555555555555555) && lVar4 * 0x5555555555555555 != 0" (binary_expression "uVar5 <= (ulong)(lVar4 * -0x5555555555555555)" (identifier "uVar5") (<= "<=") (call_expression "(ulong)(lVar4 * -0x5555555555555555)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(lVar4 * -0x5555555555555555)" (( "(") (binary_expression "lVar4 * -0x5555555555555555" (identifier "lVar4") (* "*") (number_literal "-0x5555555555555555")) () ")")))) (&& "&&") (binary_expression "lVar4 * 0x5555555555555555 != 0" (binary_expression "lVar4 * 0x5555555555555555" (identifier "lVar4") (* "*") (number_literal "0x5555555555555555")) (!= "!=") (number_literal "0"))) () ")")) (|| "||") (parenthesized_expression "(0xaaaaaaaaaaaaaaa < uVar5)" (( "(") (binary_expression "0xaaaaaaaaaaaaaaa < uVar5" (number_literal "0xaaaaaaaaaaaaaaa") (< "<") (identifier "uVar5")) () ")"))) () ")")) (goto_statement "goto LAB_001617c9;" (goto "goto") (statement_identifier "LAB_001617c9") (; ";"))) (expression_statement "lVar6 = 0;" (assignment_expression "lVar6 = 0" (identifier "lVar6") (= "=") (number_literal "0")) (; ";")) (expression_statement "__dest_00 = (void *)0x0;" (assignment_expression "__dest_00 = (void *)0x0" (identifier "__dest_00") (= "=") (cast_expression "(void *)0x0" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (if_statement "if (uVar5 != 0) goto LAB_001618c5;" (if "if") (parenthesized_expression "(uVar5 != 0)" (( "(") (binary_expression "uVar5 != 0" (identifier "uVar5") (!= "!=") (number_literal "0")) () ")")) (goto_statement "goto LAB_001618c5;" (goto "goto") (statement_identifier "LAB_001618c5") (; ";"))) (} "}")))) (expression_statement "uVar3 = param_3[1];" (assignment_expression "uVar3 = param_3[1]" (identifier "uVar3") (= "=") (subscript_expression "param_3[1]" (identifier "param_3") ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "uVar2 = param_3[2];" (assignment_expression "uVar2 = param_3[2]" (identifier "uVar2") (= "=") (subscript_expression "param_3[2]" (identifier "param_3") ([ "[") (number_literal "2") (] "]"))) (; ";")) (expression_statement "__dest = (void *)((long)__dest_00 + __n + 0x18);" (assignment_expression "__dest = (void *)((long)__dest_00 + __n + 0x18)" (identifier "__dest") (= "=") (cast_expression "(void *)((long)__dest_00 + __n + 0x18)" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)__dest_00 + __n + 0x18)" (( "(") (binary_expression "(long)__dest_00 + __n + 0x18" (binary_expression "(long)__dest_00 + __n" (cast_expression "(long)__dest_00" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "__dest_00")) (+ "+") (identifier "__n")) (+ "+") (number_literal "0x18")) () ")")))) (; ";")) (expression_statement "*(undefined8 *)((long)__dest_00 + __n) = *param_3;" (assignment_expression "*(undefined8 *)((long)__dest_00 + __n) = *param_3" (pointer_expression "*(undefined8 *)((long)__dest_00 + __n)" (* "*") (cast_expression "(undefined8 *)((long)__dest_00 + __n)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)__dest_00 + __n)" (( "(") (binary_expression "(long)__dest_00 + __n" (cast_expression "(long)__dest_00" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "__dest_00")) (+ "+") (identifier "__n")) () ")")))) (= "=") (pointer_expression "*param_3" (* "*") (identifier "param_3"))) (; ";")) (expression_statement "((undefined8 *)((long)__dest_00 + __n))[1] = uVar3;" (assignment_expression "((undefined8 *)((long)__dest_00 + __n))[1] = uVar3" (subscript_expression "((undefined8 *)((long)__dest_00 + __n))[1]" (parenthesized_expression "((undefined8 *)((long)__dest_00 + __n))" (( "(") (cast_expression "(undefined8 *)((long)__dest_00 + __n)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)__dest_00 + __n)" (( "(") (binary_expression "(long)__dest_00 + __n" (cast_expression "(long)__dest_00" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "__dest_00")) (+ "+") (identifier "__n")) () ")"))) () ")")) ([ "[") (number_literal "1") (] "]")) (= "=") (identifier "uVar3")) (; ";")) (expression_statement "*(undefined8 *)((long)__dest_00 + __n + 0x10) = uVar2;" (assignment_expression "*(undefined8 *)((long)__dest_00 + __n + 0x10) = uVar2" (pointer_expression "*(undefined8 *)((long)__dest_00 + __n + 0x10)" (* "*") (cast_expression "(undefined8 *)((long)__dest_00 + __n + 0x10)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)__dest_00 + __n + 0x10)" (( "(") (binary_expression "(long)__dest_00 + __n + 0x10" (binary_expression "(long)__dest_00 + __n" (cast_expression "(long)__dest_00" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "__dest_00")) (+ "+") (identifier "__n")) (+ "+") (number_literal "0x10")) () ")")))) (= "=") (identifier "uVar2")) (; ";")) (if_statement "if (param_2 == __src) {\n    if (param_2 != pvVar1) goto LAB_00161846;\nLAB_00161854:\n    if (__src == (void *)0x0) goto LAB_00161859;\n  }\n  else {\n    memmove(__dest_00,__src,__n);\n    if (param_2 != pvVar1) {\nLAB_00161846:\n      memcpy(__dest,param_2,(long)pvVar1 - (long)param_2);\n      goto LAB_00161854;\n    }\n  }" (if "if") (parenthesized_expression "(param_2 == __src)" (( "(") (binary_expression "param_2 == __src" (identifier "param_2") (== "==") (identifier "__src")) () ")")) (compound_statement "{\n    if (param_2 != pvVar1) goto LAB_00161846;\nLAB_00161854:\n    if (__src == (void *)0x0) goto LAB_00161859;\n  }" ({ "{") (if_statement "if (param_2 != pvVar1) goto LAB_00161846;" (if "if") (parenthesized_expression "(param_2 != pvVar1)" (( "(") (binary_expression "param_2 != pvVar1" (identifier "param_2") (!= "!=") (identifier "pvVar1")) () ")")) (goto_statement "goto LAB_00161846;" (goto "goto") (statement_identifier "LAB_00161846") (; ";"))) (labeled_statement "LAB_00161854:\n    if (__src == (void *)0x0) goto LAB_00161859;" (statement_identifier "LAB_00161854") (: ":") (if_statement "if (__src == (void *)0x0) goto LAB_00161859;" (if "if") (parenthesized_expression "(__src == (void *)0x0)" (( "(") (binary_expression "__src == (void *)0x0" (identifier "__src") (== "==") (cast_expression "(void *)0x0" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (goto_statement "goto LAB_00161859;" (goto "goto") (statement_identifier "LAB_00161859") (; ";")))) (} "}")) (else_clause "else {\n    memmove(__dest_00,__src,__n);\n    if (param_2 != pvVar1) {\nLAB_00161846:\n      memcpy(__dest,param_2,(long)pvVar1 - (long)param_2);\n      goto LAB_00161854;\n    }\n  }" (else "else") (compound_statement "{\n    memmove(__dest_00,__src,__n);\n    if (param_2 != pvVar1) {\nLAB_00161846:\n      memcpy(__dest,param_2,(long)pvVar1 - (long)param_2);\n      goto LAB_00161854;\n    }\n  }" ({ "{") (expression_statement "memmove(__dest_00,__src,__n);" (call_expression "memmove(__dest_00,__src,__n)" (identifier "memmove") (argument_list "(__dest_00,__src,__n)" (( "(") (identifier "__dest_00") (, ",") (identifier "__src") (, ",") (identifier "__n") () ")"))) (; ";")) (if_statement "if (param_2 != pvVar1) {\nLAB_00161846:\n      memcpy(__dest,param_2,(long)pvVar1 - (long)param_2);\n      goto LAB_00161854;\n    }" (if "if") (parenthesized_expression "(param_2 != pvVar1)" (( "(") (binary_expression "param_2 != pvVar1" (identifier "param_2") (!= "!=") (identifier "pvVar1")) () ")")) (compound_statement "{\nLAB_00161846:\n      memcpy(__dest,param_2,(long)pvVar1 - (long)param_2);\n      goto LAB_00161854;\n    }" ({ "{") (labeled_statement "LAB_00161846:\n      memcpy(__dest,param_2,(long)pvVar1 - (long)param_2);" (statement_identifier "LAB_00161846") (: ":") (expression_statement "memcpy(__dest,param_2,(long)pvVar1 - (long)param_2);" (call_expression "memcpy(__dest,param_2,(long)pvVar1 - (long)param_2)" (identifier "memcpy") (argument_list "(__dest,param_2,(long)pvVar1 - (long)param_2)" (( "(") (identifier "__dest") (, ",") (identifier "param_2") (, ",") (binary_expression "(long)pvVar1 - (long)param_2" (cast_expression "(long)pvVar1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "pvVar1")) (- "-") (cast_expression "(long)param_2" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_2"))) () ")"))) (; ";"))) (goto_statement "goto LAB_00161854;" (goto "goto") (statement_identifier "LAB_00161854") (; ";")) (} "}"))) (} "}")))) (expression_statement "FUN_002dac60(__src);" (call_expression "FUN_002dac60(__src)" (identifier "FUN_002dac60") (argument_list "(__src)" (( "(") (identifier "__src") () ")"))) (; ";")) (labeled_statement "LAB_00161859:\n  *param_1 = __dest_00;" (statement_identifier "LAB_00161859") (: ":") (expression_statement "*param_1 = __dest_00;" (assignment_expression "*param_1 = __dest_00" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (= "=") (identifier "__dest_00")) (; ";"))) (expression_statement "param_1[1] = (long)__dest + ((long)pvVar1 - (long)param_2);" (assignment_expression "param_1[1] = (long)__dest + ((long)pvVar1 - (long)param_2)" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (= "=") (binary_expression "(long)__dest + ((long)pvVar1 - (long)param_2)" (cast_expression "(long)__dest" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "__dest")) (+ "+") (parenthesized_expression "((long)pvVar1 - (long)param_2)" (( "(") (binary_expression "(long)pvVar1 - (long)param_2" (cast_expression "(long)pvVar1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "pvVar1")) (- "-") (cast_expression "(long)param_2" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_2"))) () ")")))) (; ";")) (expression_statement "param_1[2] = lVar6;" (assignment_expression "param_1[2] = lVar6" (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]")) (= "=") (identifier "lVar6")) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}")))

/* DWARF original name: _M_realloc_insert<const gold::Dwp_output_file::Contribution&>
   DWARF original prototype: void
   _M_realloc_insert<const_gold::Dwp_output_file::Contribution&>(vector<gold::Dwp_output_file::Contribution,_std::allocator<gold::Dwp_output_file::Contribution>_>
   * this, iterator __position, Contribution * __args#0) */

void __thiscall
std::
vector<gold::Dwp_output_file::type_1,_std::allocator<gold::Dwp_output_file::type_1>var_1>::
_M_realloc_insert<const_gold::Dwp_output_file::type_1&>
          (vector<gold::Dwp_output_file::type_1,_std::allocator<gold::Dwp_output_file::type_1>var_1>
           *this,iterator __position,type_1 *__args_0)

{
  void *__dest;
  type_1 *var_9;
  type_1 *var_8;
  type_2 *puVar2;
  type_3 sVar3;
  long var_3;
  type_4 __dest_00;
  size_t var_7;
  type_5 var_4;
  type_5 var_6;
  type_4 pCVar7;
  
  var_9 = (this->
           super__Vector_base<gold::Dwp_output_file::type_1,_std::allocator<gold::Dwp_output_file::type_1>var_1>var_2
           )._M_impl._M_finish;
  var_8 = (this->
          super__Vector_base<gold::Dwp_output_file::type_1,_std::allocator<gold::Dwp_output_file::type_1>var_1>var_2
          )._M_impl._M_start;
  var_7 = (long)__position._M_current - (long)var_8;
  var_3 = (long)var_9 - (long)var_8 >> 3;
  if (var_3 * -0x5555555555555555 == 0) {
    var_4 = 1;
LAB_001618c5:
    var_6 = var_4 * 0x18;
LAB_001617c9:
    __dest_00 = (type_4)var_5(var_6);
    pCVar7 = (type_4)((long)&__dest_00->output_offset + var_6);
  }
  else {
    var_4 = var_3 * 0x5555555555555556;
    var_6 = 0xfffffffffffffff0;
    if ((var_4 <= (type_5)(var_3 * -0x5555555555555555) && var_3 * 0x5555555555555555 != 0) ||
       (0xaaaaaaaaaaaaaaa < var_4)) goto LAB_001617c9;
    pCVar7 = (type_4)0x0;
    __dest_00 = (type_4)0x0;
    if (var_4 != 0) goto LAB_001618c5;
  }
  sVar3 = __args_0->size;
  puVar2 = __args_0->contents;
  __dest = (void *)((long)__dest_00 + var_7 + 0x18);
  *(type_6 *)((long)__dest_00 + var_7) = __args_0->output_offset;
  ((type_6 *)((long)__dest_00 + var_7))[1] = sVar3;
  *(type_2 **)((long)__dest_00 + var_7 + 0x10) = puVar2;
  if (__position._M_current == var_8) {
    if (__position._M_current != var_9) goto LAB_00161846;
LAB_00161854:
    if (var_8 == (type_1 *)0x0) goto LAB_00161859;
  }
  else {
    var_10(__dest_00,var_8,var_7);
    if (__position._M_current != var_9) {
LAB_00161846:
      var_11(__dest,__position._M_current,(long)var_9 - (long)__position._M_current);
      goto LAB_00161854;
    }
  }
  var_12(var_8);
LAB_00161859:
  (this->
  super__Vector_base<gold::Dwp_output_file::type_1,_std::allocator<gold::Dwp_output_file::type_1>var_1>var_2
  )._M_impl._M_start = __dest_00;
  (this->
  super__Vector_base<gold::Dwp_output_file::type_1,_std::allocator<gold::Dwp_output_file::type_1>var_1>var_2
  )._M_impl._M_finish = (type_4)((long)__dest + ((long)var_9 - (long)__position._M_current));
  (this->
  super__Vector_base<gold::Dwp_output_file::type_1,_std::allocator<gold::Dwp_output_file::type_1>var_1>var_2
  )._M_impl._M_end_of_storage = pCVar7;
  return;
}


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

void MASKED(undefined8 *param_1,void *param_2,undefined8 *param_3)

{
  void *__dest;
  void *pvVar1;
  void *__src;
  undefined8 uVar2;
  undefined8 uVar3;
  long lVar4;
  void *__dest_00;
  size_t __n;
  ulong uVar5;
  long lVar6;
  
  pvVar1 = (void *)param_1[1];
  __src = (void *)*param_1;
  __n = (long)param_2 - (long)__src;
  lVar4 = (long)pvVar1 - (long)__src >> 3;
  if (lVar4 * -0x5555555555555555 == 0) {
    uVar5 = 1;
LAB_001618c5:
    lVar6 = uVar5 * 0x18;
LAB_001617c9:
    __dest_00 = (void *)FUN_002d9490(lVar6);
    lVar6 = lVar6 + (long)__dest_00;
  }
  else {
    uVar5 = lVar4 * 0x5555555555555556;
    lVar6 = -0x10;
    if ((uVar5 <= (ulong)(lVar4 * -0x5555555555555555) && lVar4 * 0x5555555555555555 != 0) ||
       (0xaaaaaaaaaaaaaaa < uVar5)) goto LAB_001617c9;
    lVar6 = 0;
    __dest_00 = (void *)0x0;
    if (uVar5 != 0) goto LAB_001618c5;
  }
  uVar3 = param_3[1];
  uVar2 = param_3[2];
  __dest = (void *)((long)__dest_00 + __n + 0x18);
  *(undefined8 *)((long)__dest_00 + __n) = *param_3;
  ((undefined8 *)((long)__dest_00 + __n))[1] = uVar3;
  *(undefined8 *)((long)__dest_00 + __n + 0x10) = uVar2;
  if (param_2 == __src) {
    if (param_2 != pvVar1) goto LAB_00161846;
LAB_00161854:
    if (__src == (void *)0x0) goto LAB_00161859;
  }
  else {
    memmove(__dest_00,__src,__n);
    if (param_2 != pvVar1) {
LAB_00161846:
      memcpy(__dest,param_2,(long)pvVar1 - (long)param_2);
      goto LAB_00161854;
    }
  }
  FUN_002dac60(__src);
LAB_00161859:
  *param_1 = __dest_00;
  param_1[1] = (long)__dest + ((long)pvVar1 - (long)param_2);
  param_1[2] = lVar6;
  return;
}

