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

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

{
  void *__dest;
  Task **ppTVar1;
  Task **__src;
  ulong uVar2;
  pointer __dest_00;
  size_t __n;
  ulong uVar3;
  ulong uVar4;
  pointer ppTVar5;
  
  ppTVar1 = (this->super__Vector_base<gold::Task*,_std::allocator<gold::Task*>_>)._M_impl._M_finish;
  __src = (this->super__Vector_base<gold::Task*,_std::allocator<gold::Task*>_>)._M_impl._M_start;
  __n = (long)__position._M_current - (long)__src;
  uVar2 = (long)ppTVar1 - (long)__src >> 3;
  if (uVar2 == 0) {
    uVar3 = 1;
LAB_0016f585:
    uVar4 = uVar3 * 8;
LAB_0016f498:
    __dest_00 = (pointer)operator_new(uVar4);
    ppTVar5 = (pointer)(uVar4 + (long)__dest_00);
  }
  else {
    uVar3 = uVar2 * 2;
    uVar4 = 0xfffffffffffffff8;
    if ((uVar3 < uVar2) || (0x1fffffffffffffff < uVar3)) goto LAB_0016f498;
    ppTVar5 = (pointer)0x0;
    __dest_00 = (pointer)0x0;
    if (uVar3 != 0) goto LAB_0016f585;
  }
  __dest = (void *)((long)__dest_00 + __n + 8);
  *(Task **)((long)__dest_00 + __n) = *__args_0;
  if (__position._M_current == __src) {
    if (__position._M_current != ppTVar1) goto LAB_0016f508;
LAB_0016f516:
    if (__src == (Task **)0x0) goto LAB_0016f51b;
  }
  else {
    memmove(__dest_00,__src,__n);
    if (__position._M_current != ppTVar1) {
LAB_0016f508:
      memcpy(__dest,__position._M_current,(long)ppTVar1 - (long)__position._M_current);
      goto LAB_0016f516;
    }
  }
  operator_delete(__src);
LAB_0016f51b:
  (this->super__Vector_base<gold::Task*,_std::allocator<gold::Task*>_>)._M_impl._M_start = __dest_00
  ;
  (this->super__Vector_base<gold::Task*,_std::allocator<gold::Task*>_>)._M_impl._M_finish =
       (pointer)((long)__dest + ((long)ppTVar1 - (long)__position._M_current));
  (this->super__Vector_base<gold::Task*,_std::allocator<gold::Task*>_>)._M_impl._M_end_of_storage =
       ppTVar5;
  return;
}



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

{
  void *__dest;
  void *pvVar1;
  void *__src;
  ulong uVar2;
  void *__dest_00;
  size_t __n;
  ulong uVar3;
  long lVar4;
  
  pvVar1 = (void *)param_1[1];
  __src = (void *)*param_1;
  __n = (long)param_2 - (long)__src;
  uVar2 = (long)pvVar1 - (long)__src >> 3;
  if (uVar2 == 0) {
    uVar3 = 1;
LAB_0016f585:
    lVar4 = uVar3 * 8;
LAB_0016f498:
    __dest_00 = (void *)FUN_00275550(lVar4);
    lVar4 = lVar4 + (long)__dest_00;
  }
  else {
    uVar3 = uVar2 * 2;
    lVar4 = -8;
    if ((uVar3 < uVar2) || (0x1fffffffffffffff < uVar3)) goto LAB_0016f498;
    lVar4 = 0;
    __dest_00 = (void *)0x0;
    if (uVar3 != 0) goto LAB_0016f585;
  }
  __dest = (void *)((long)__dest_00 + __n + 8);
  *(undefined8 *)((long)__dest_00 + __n) = *param_3;
  if (param_2 == __src) {
    if (param_2 != pvVar1) goto LAB_0016f508;
LAB_0016f516:
    if (__src == (void *)0x0) goto LAB_0016f51b;
  }
  else {
    memmove(__dest_00,__src,__n);
    if (param_2 != pvVar1) {
LAB_0016f508:
      memcpy(__dest,param_2,(long)pvVar1 - (long)param_2);
      goto LAB_0016f516;
    }
  }
  FUN_00276d20(__src);
LAB_0016f51b:
  *param_1 = __dest_00;
  param_1[1] = (long)__dest + ((long)pvVar1 - (long)param_2);
  param_1[2] = lVar4;
  return;
}


PUSH R15
MOV R15,RDX
MOV RDX,RSI
PUSH R14
PUSH R13
PUSH R12
MOV R12,RSI
PUSH RBP
PUSH RBX
MOV RBX,RDI
SUB RSP,0x28
MOV RCX,qword ptr [RDI + 0x8]
MOV RBP,qword ptr [RDI]
MOV RAX,RCX
SUB RDX,RBP
SUB RAX,RBP
SAR RAX,0x3
JZ 0x0016f580
LEA RDI,[RAX + RAX*0x1]
MOV R14,-0x8
CMP RAX,RDI
JBE 0x0016f548
MOV RDI,R14
MOV qword ptr [RSP + 0x10],RDX
MOV qword ptr [RSP + 0x8],RCX
CALL 0x00275550
MOV RDX,qword ptr [RSP + 0x10]
MOV RCX,qword ptr [RSP + 0x8]
MOV R13,RAX
ADD R14,RAX
MOV RAX,qword ptr [R15]
MOV R8,RCX
LEA R9,[R13 + RDX*0x1 + 0x8]
SUB R8,R12
MOV qword ptr [R13 + RDX*0x1],RAX
LEA R15,[R9 + R8*0x1]
CMP R12,RBP
JZ 0x0016f570
MOV RSI,RBP
MOV RDI,R13
MOV qword ptr [RSP + 0x18],R9
MOV qword ptr [RSP + 0x10],R8
MOV qword ptr [RSP + 0x8],RCX
CALL 0x0013e6d0
MOV RCX,qword ptr [RSP + 0x8]
MOV R8,qword ptr [RSP + 0x10]
MOV R9,qword ptr [RSP + 0x18]
CMP R12,RCX
JZ 0x0016f538
MOV RDX,R8
MOV RSI,R12
MOV RDI,R9
CALL 0x0013eaa0
TEST RBP,RBP
JNZ 0x0016f538
MOV qword ptr [RBX],R13
MOV qword ptr [RBX + 0x8],R15
MOV qword ptr [RBX + 0x10],R14
ADD RSP,0x28
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
MOV RDI,RBP
CALL 0x00276d20
JMP 0x0016f51b
MOV RAX,0x1fffffffffffffff
CMP RDI,RAX
JA 0x0016f498
XOR R14D,R14D
XOR R13D,R13D
TEST RDI,RDI
JZ 0x0016f4ba
JMP 0x0016f585
CMP R12,RCX
JNZ 0x0016f508
JMP 0x0016f516
MOV EDI,0x1
LEA R14,[RDI*0x8]
JMP 0x0016f498
(translation_unit "void FUN_0016f450(undefined8 *param_1,void *param_2,undefined8 *param_3)\n\n{\n  void *__dest;\n  void *pvVar1;\n  void *__src;\n  ulong uVar2;\n  void *__dest_00;\n  size_t __n;\n  ulong uVar3;\n  long lVar4;\n  \n  pvVar1 = (void *)param_1[1];\n  __src = (void *)*param_1;\n  __n = (long)param_2 - (long)__src;\n  uVar2 = (long)pvVar1 - (long)__src >> 3;\n  if (uVar2 == 0) {\n    uVar3 = 1;\nLAB_0016f585:\n    lVar4 = uVar3 * 8;\nLAB_0016f498:\n    __dest_00 = (void *)FUN_00275550(lVar4);\n    lVar4 = lVar4 + (long)__dest_00;\n  }\n  else {\n    uVar3 = uVar2 * 2;\n    lVar4 = -8;\n    if ((uVar3 < uVar2) || (0x1fffffffffffffff < uVar3)) goto LAB_0016f498;\n    lVar4 = 0;\n    __dest_00 = (void *)0x0;\n    if (uVar3 != 0) goto LAB_0016f585;\n  }\n  __dest = (void *)((long)__dest_00 + __n + 8);\n  *(undefined8 *)((long)__dest_00 + __n) = *param_3;\n  if (param_2 == __src) {\n    if (param_2 != pvVar1) goto LAB_0016f508;\nLAB_0016f516:\n    if (__src == (void *)0x0) goto LAB_0016f51b;\n  }\n  else {\n    memmove(__dest_00,__src,__n);\n    if (param_2 != pvVar1) {\nLAB_0016f508:\n      memcpy(__dest,param_2,(long)pvVar1 - (long)param_2);\n      goto LAB_0016f516;\n    }\n  }\n  FUN_00276d20(__src);\nLAB_0016f51b:\n  *param_1 = __dest_00;\n  param_1[1] = (long)__dest + ((long)pvVar1 - (long)param_2);\n  param_1[2] = lVar4;\n  return;\n}\n\n" (function_definition "void FUN_0016f450(undefined8 *param_1,void *param_2,undefined8 *param_3)\n\n{\n  void *__dest;\n  void *pvVar1;\n  void *__src;\n  ulong uVar2;\n  void *__dest_00;\n  size_t __n;\n  ulong uVar3;\n  long lVar4;\n  \n  pvVar1 = (void *)param_1[1];\n  __src = (void *)*param_1;\n  __n = (long)param_2 - (long)__src;\n  uVar2 = (long)pvVar1 - (long)__src >> 3;\n  if (uVar2 == 0) {\n    uVar3 = 1;\nLAB_0016f585:\n    lVar4 = uVar3 * 8;\nLAB_0016f498:\n    __dest_00 = (void *)FUN_00275550(lVar4);\n    lVar4 = lVar4 + (long)__dest_00;\n  }\n  else {\n    uVar3 = uVar2 * 2;\n    lVar4 = -8;\n    if ((uVar3 < uVar2) || (0x1fffffffffffffff < uVar3)) goto LAB_0016f498;\n    lVar4 = 0;\n    __dest_00 = (void *)0x0;\n    if (uVar3 != 0) goto LAB_0016f585;\n  }\n  __dest = (void *)((long)__dest_00 + __n + 8);\n  *(undefined8 *)((long)__dest_00 + __n) = *param_3;\n  if (param_2 == __src) {\n    if (param_2 != pvVar1) goto LAB_0016f508;\nLAB_0016f516:\n    if (__src == (void *)0x0) goto LAB_0016f51b;\n  }\n  else {\n    memmove(__dest_00,__src,__n);\n    if (param_2 != pvVar1) {\nLAB_0016f508:\n      memcpy(__dest,param_2,(long)pvVar1 - (long)param_2);\n      goto LAB_0016f516;\n    }\n  }\n  FUN_00276d20(__src);\nLAB_0016f51b:\n  *param_1 = __dest_00;\n  param_1[1] = (long)__dest + ((long)pvVar1 - (long)param_2);\n  param_1[2] = lVar4;\n  return;\n}" primitive_type (function_declarator "FUN_0016f450(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  ulong uVar2;\n  void *__dest_00;\n  size_t __n;\n  ulong uVar3;\n  long lVar4;\n  \n  pvVar1 = (void *)param_1[1];\n  __src = (void *)*param_1;\n  __n = (long)param_2 - (long)__src;\n  uVar2 = (long)pvVar1 - (long)__src >> 3;\n  if (uVar2 == 0) {\n    uVar3 = 1;\nLAB_0016f585:\n    lVar4 = uVar3 * 8;\nLAB_0016f498:\n    __dest_00 = (void *)FUN_00275550(lVar4);\n    lVar4 = lVar4 + (long)__dest_00;\n  }\n  else {\n    uVar3 = uVar2 * 2;\n    lVar4 = -8;\n    if ((uVar3 < uVar2) || (0x1fffffffffffffff < uVar3)) goto LAB_0016f498;\n    lVar4 = 0;\n    __dest_00 = (void *)0x0;\n    if (uVar3 != 0) goto LAB_0016f585;\n  }\n  __dest = (void *)((long)__dest_00 + __n + 8);\n  *(undefined8 *)((long)__dest_00 + __n) = *param_3;\n  if (param_2 == __src) {\n    if (param_2 != pvVar1) goto LAB_0016f508;\nLAB_0016f516:\n    if (__src == (void *)0x0) goto LAB_0016f51b;\n  }\n  else {\n    memmove(__dest_00,__src,__n);\n    if (param_2 != pvVar1) {\nLAB_0016f508:\n      memcpy(__dest,param_2,(long)pvVar1 - (long)param_2);\n      goto LAB_0016f516;\n    }\n  }\n  FUN_00276d20(__src);\nLAB_0016f51b:\n  *param_1 = __dest_00;\n  param_1[1] = (long)__dest + ((long)pvVar1 - (long)param_2);\n  param_1[2] = lVar4;\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 "ulong uVar2;" type_identifier identifier ;) (declaration "void *__dest_00;" primitive_type (pointer_declarator "*__dest_00" * identifier) ;) (declaration "size_t __n;" primitive_type identifier ;) (declaration "ulong uVar3;" type_identifier identifier ;) (declaration "long lVar4;" (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 "uVar2 = (long)pvVar1 - (long)__src >> 3;" (assignment_expression "uVar2 = (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 (uVar2 == 0) {\n    uVar3 = 1;\nLAB_0016f585:\n    lVar4 = uVar3 * 8;\nLAB_0016f498:\n    __dest_00 = (void *)FUN_00275550(lVar4);\n    lVar4 = lVar4 + (long)__dest_00;\n  }\n  else {\n    uVar3 = uVar2 * 2;\n    lVar4 = -8;\n    if ((uVar3 < uVar2) || (0x1fffffffffffffff < uVar3)) goto LAB_0016f498;\n    lVar4 = 0;\n    __dest_00 = (void *)0x0;\n    if (uVar3 != 0) goto LAB_0016f585;\n  }" if (parenthesized_expression "(uVar2 == 0)" ( (binary_expression "uVar2 == 0" identifier == number_literal) )) (compound_statement "{\n    uVar3 = 1;\nLAB_0016f585:\n    lVar4 = uVar3 * 8;\nLAB_0016f498:\n    __dest_00 = (void *)FUN_00275550(lVar4);\n    lVar4 = lVar4 + (long)__dest_00;\n  }" { (expression_statement "uVar3 = 1;" (assignment_expression "uVar3 = 1" identifier = number_literal) ;) (labeled_statement "LAB_0016f585:\n    lVar4 = uVar3 * 8;" statement_identifier : (expression_statement "lVar4 = uVar3 * 8;" (assignment_expression "lVar4 = uVar3 * 8" identifier = (binary_expression "uVar3 * 8" identifier * number_literal)) ;)) (labeled_statement "LAB_0016f498:\n    __dest_00 = (void *)FUN_00275550(lVar4);" statement_identifier : (expression_statement "__dest_00 = (void *)FUN_00275550(lVar4);" (assignment_expression "__dest_00 = (void *)FUN_00275550(lVar4)" identifier = (cast_expression "(void *)FUN_00275550(lVar4)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_00275550(lVar4)" identifier (argument_list "(lVar4)" ( identifier ))))) ;)) (expression_statement "lVar4 = lVar4 + (long)__dest_00;" (assignment_expression "lVar4 = lVar4 + (long)__dest_00" identifier = (binary_expression "lVar4 + (long)__dest_00" identifier + (cast_expression "(long)__dest_00" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) }) (else_clause "else {\n    uVar3 = uVar2 * 2;\n    lVar4 = -8;\n    if ((uVar3 < uVar2) || (0x1fffffffffffffff < uVar3)) goto LAB_0016f498;\n    lVar4 = 0;\n    __dest_00 = (void *)0x0;\n    if (uVar3 != 0) goto LAB_0016f585;\n  }" else (compound_statement "{\n    uVar3 = uVar2 * 2;\n    lVar4 = -8;\n    if ((uVar3 < uVar2) || (0x1fffffffffffffff < uVar3)) goto LAB_0016f498;\n    lVar4 = 0;\n    __dest_00 = (void *)0x0;\n    if (uVar3 != 0) goto LAB_0016f585;\n  }" { (expression_statement "uVar3 = uVar2 * 2;" (assignment_expression "uVar3 = uVar2 * 2" identifier = (binary_expression "uVar2 * 2" identifier * number_literal)) ;) (expression_statement "lVar4 = -8;" (assignment_expression "lVar4 = -8" identifier = number_literal) ;) (if_statement "if ((uVar3 < uVar2) || (0x1fffffffffffffff < uVar3)) goto LAB_0016f498;" if (parenthesized_expression "((uVar3 < uVar2) || (0x1fffffffffffffff < uVar3))" ( (binary_expression "(uVar3 < uVar2) || (0x1fffffffffffffff < uVar3)" (parenthesized_expression "(uVar3 < uVar2)" ( (binary_expression "uVar3 < uVar2" identifier < identifier) )) || (parenthesized_expression "(0x1fffffffffffffff < uVar3)" ( (binary_expression "0x1fffffffffffffff < uVar3" number_literal < identifier) ))) )) (goto_statement "goto LAB_0016f498;" goto statement_identifier ;)) (expression_statement "lVar4 = 0;" (assignment_expression "lVar4 = 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 (uVar3 != 0) goto LAB_0016f585;" if (parenthesized_expression "(uVar3 != 0)" ( (binary_expression "uVar3 != 0" identifier != number_literal) )) (goto_statement "goto LAB_0016f585;" goto statement_identifier ;)) }))) (expression_statement "__dest = (void *)((long)__dest_00 + __n + 8);" (assignment_expression "__dest = (void *)((long)__dest_00 + __n + 8)" identifier = (cast_expression "(void *)((long)__dest_00 + __n + 8)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)__dest_00 + __n + 8)" ( (binary_expression "(long)__dest_00 + __n + 8" (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)) ;) (if_statement "if (param_2 == __src) {\n    if (param_2 != pvVar1) goto LAB_0016f508;\nLAB_0016f516:\n    if (__src == (void *)0x0) goto LAB_0016f51b;\n  }\n  else {\n    memmove(__dest_00,__src,__n);\n    if (param_2 != pvVar1) {\nLAB_0016f508:\n      memcpy(__dest,param_2,(long)pvVar1 - (long)param_2);\n      goto LAB_0016f516;\n    }\n  }" if (parenthesized_expression "(param_2 == __src)" ( (binary_expression "param_2 == __src" identifier == identifier) )) (compound_statement "{\n    if (param_2 != pvVar1) goto LAB_0016f508;\nLAB_0016f516:\n    if (__src == (void *)0x0) goto LAB_0016f51b;\n  }" { (if_statement "if (param_2 != pvVar1) goto LAB_0016f508;" if (parenthesized_expression "(param_2 != pvVar1)" ( (binary_expression "param_2 != pvVar1" identifier != identifier) )) (goto_statement "goto LAB_0016f508;" goto statement_identifier ;)) (labeled_statement "LAB_0016f516:\n    if (__src == (void *)0x0) goto LAB_0016f51b;" statement_identifier : (if_statement "if (__src == (void *)0x0) goto LAB_0016f51b;" 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_0016f51b;" goto statement_identifier ;))) }) (else_clause "else {\n    memmove(__dest_00,__src,__n);\n    if (param_2 != pvVar1) {\nLAB_0016f508:\n      memcpy(__dest,param_2,(long)pvVar1 - (long)param_2);\n      goto LAB_0016f516;\n    }\n  }" else (compound_statement "{\n    memmove(__dest_00,__src,__n);\n    if (param_2 != pvVar1) {\nLAB_0016f508:\n      memcpy(__dest,param_2,(long)pvVar1 - (long)param_2);\n      goto LAB_0016f516;\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_0016f508:\n      memcpy(__dest,param_2,(long)pvVar1 - (long)param_2);\n      goto LAB_0016f516;\n    }" if (parenthesized_expression "(param_2 != pvVar1)" ( (binary_expression "param_2 != pvVar1" identifier != identifier) )) (compound_statement "{\nLAB_0016f508:\n      memcpy(__dest,param_2,(long)pvVar1 - (long)param_2);\n      goto LAB_0016f516;\n    }" { (labeled_statement "LAB_0016f508:\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_0016f516;" goto statement_identifier ;) })) }))) (expression_statement "FUN_00276d20(__src);" (call_expression "FUN_00276d20(__src)" identifier (argument_list "(__src)" ( identifier ))) ;) (labeled_statement "LAB_0016f51b:\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] = lVar4;" (assignment_expression "param_1[2] = lVar4" (subscript_expression "param_1[2]" identifier [ number_literal ]) = identifier) ;) (return_statement "return;" return ;) })))
(translation_unit "/* DWARF original name: _M_realloc_insert<gold::Task* const&>\n   DWARF original prototype: void\n   _M_realloc_insert<gold::Task*_const&>(vector<gold::Task*,_std::allocator<gold::Task*>_> * this,\n   iterator __position, Task * * __args#0) */\n\nvoid __thiscall\nstd::vector<gold::Task*,_std::allocator<gold::Task*>_>::_M_realloc_insert<gold::Task*_const&>\n          (vector<gold::Task*,_std::allocator<gold::Task*>_> *this,iterator __position,\n          Task **__args_0)\n\n{\n  void *__dest;\n  Task **ppTVar1;\n  Task **__src;\n  ulong uVar2;\n  pointer __dest_00;\n  size_t __n;\n  ulong uVar3;\n  ulong uVar4;\n  pointer ppTVar5;\n  \n  ppTVar1 = (this->super__Vector_base<gold::Task*,_std::allocator<gold::Task*>_>)._M_impl._M_finish;\n  __src = (this->super__Vector_base<gold::Task*,_std::allocator<gold::Task*>_>)._M_impl._M_start;\n  __n = (long)__position._M_current - (long)__src;\n  uVar2 = (long)ppTVar1 - (long)__src >> 3;\n  if (uVar2 == 0) {\n    uVar3 = 1;\nLAB_0016f585:\n    uVar4 = uVar3 * 8;\nLAB_0016f498:\n    __dest_00 = (pointer)operator_new(uVar4);\n    ppTVar5 = (pointer)(uVar4 + (long)__dest_00);\n  }\n  else {\n    uVar3 = uVar2 * 2;\n    uVar4 = 0xfffffffffffffff8;\n    if ((uVar3 < uVar2) || (0x1fffffffffffffff < uVar3)) goto LAB_0016f498;\n    ppTVar5 = (pointer)0x0;\n    __dest_00 = (pointer)0x0;\n    if (uVar3 != 0) goto LAB_0016f585;\n  }\n  __dest = (void *)((long)__dest_00 + __n + 8);\n  *(Task **)((long)__dest_00 + __n) = *__args_0;\n  if (__position._M_current == __src) {\n    if (__position._M_current != ppTVar1) goto LAB_0016f508;\nLAB_0016f516:\n    if (__src == (Task **)0x0) goto LAB_0016f51b;\n  }\n  else {\n    memmove(__dest_00,__src,__n);\n    if (__position._M_current != ppTVar1) {\nLAB_0016f508:\n      memcpy(__dest,__position._M_current,(long)ppTVar1 - (long)__position._M_current);\n      goto LAB_0016f516;\n    }\n  }\n  operator_delete(__src);\nLAB_0016f51b:\n  (this->super__Vector_base<gold::Task*,_std::allocator<gold::Task*>_>)._M_impl._M_start = __dest_00\n  ;\n  (this->super__Vector_base<gold::Task*,_std::allocator<gold::Task*>_>)._M_impl._M_finish =\n       (pointer)((long)__dest + ((long)ppTVar1 - (long)__position._M_current));\n  (this->super__Vector_base<gold::Task*,_std::allocator<gold::Task*>_>)._M_impl._M_end_of_storage =\n       ppTVar5;\n  return;\n}\n\n" comment (declaration "void __thiscall\nstd::vector<gold::Task*,_std::allocator<gold::Task*>_>::_M_realloc_insert<gold::Task*_const&>\n          (vector<gold::Task*,_std::allocator<gold::Task*>_> *this,iterator __position,\n          Task **__args_0)\n\n{\n  void *__dest;" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "std::vector<gold::" identifier : : identifier < identifier : :) identifier (ERROR "*" *) , (ERROR "_std::allocator<gold::Task*>_>::_M_realloc_insert<gold::Task*_const&>\n          (vector<gold::Task*,_std::allocator<gold::Task*>_> *this,iterator __position,\n          Task **__args_0)\n\n{\n  void" identifier : : identifier < identifier : : identifier * > identifier > : : identifier < identifier : : identifier (pointer_declarator "*_const&>\n          (vector<gold::Task*,_std::allocator<gold::Task*>_> *this,iterator __position,\n          Task **__args_0)" * (function_declarator "_const&>\n          (vector<gold::Task*,_std::allocator<gold::Task*>_> *this,iterator __position,\n          Task **__args_0)" identifier (ERROR "&>" & >) (parameter_list "(vector<gold::Task*,_std::allocator<gold::Task*>_> *this,iterator __position,\n          Task **__args_0)" ( (parameter_declaration "vector<gold::Task*" type_identifier (ERROR "<gold::Task" < identifier : : identifier) (abstract_pointer_declarator "*" *)) , (parameter_declaration "_std::allocator<gold::Task*>_> *this" type_identifier (ERROR "::allocator<gold::Task*>_>" : : identifier < identifier : : identifier * > identifier >) (pointer_declarator "*this" * identifier)) , (parameter_declaration "iterator __position" type_identifier identifier) , (parameter_declaration "Task **__args_0" type_identifier (pointer_declarator "**__args_0" * (pointer_declarator "*__args_0" * identifier))) )))) { primitive_type) (pointer_declarator "*__dest" * identifier) ;) (declaration "Task **ppTVar1;" type_identifier (pointer_declarator "**ppTVar1" * (pointer_declarator "*ppTVar1" * identifier)) ;) (declaration "Task **__src;" type_identifier (pointer_declarator "**__src" * (pointer_declarator "*__src" * identifier)) ;) (declaration "ulong uVar2;" type_identifier identifier ;) (declaration "pointer __dest_00;" type_identifier identifier ;) (declaration "size_t __n;" primitive_type identifier ;) (declaration "ulong uVar3;" type_identifier identifier ;) (declaration "ulong uVar4;" type_identifier identifier ;) (declaration "pointer ppTVar5;" type_identifier identifier ;) (expression_statement "ppTVar1 = (this->super__Vector_base<gold::Task*,_std::allocator<gold::Task*>_>)._M_impl._M_finish;" (assignment_expression "ppTVar1 = (this->super__Vector_base<gold::Task*,_std::allocator<gold::Task*>_>)._M_impl._M_finish" identifier = (field_expression "(this->super__Vector_base<gold::Task*,_std::allocator<gold::Task*>_>)._M_impl._M_finish" (field_expression "(this->super__Vector_base<gold::Task*,_std::allocator<gold::Task*>_>)._M_impl" (parenthesized_expression "(this->super__Vector_base<gold::Task*,_std::allocator<gold::Task*>_>)" ( (binary_expression "this->super__Vector_base<gold::Task*,_std::allocator<gold::Task*>_>" (binary_expression "this->super__Vector_base<gold::Task*,_std::allocator<gold::Task*>_" (binary_expression "this->super__Vector_base<gold::Task*,_std::allocator<gold::Task*" (binary_expression "this->super__Vector_base<gold::Task*,_std::allocator<gold" (binary_expression "this->super__Vector_base<gold::Task*,_std" (binary_expression "this->super__Vector_base<gold" (field_expression "this->super__Vector_base" identifier -> field_identifier) < identifier) (ERROR "::Task" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Task" : : identifier) * identifier) > identifier) > identifier) )) . field_identifier) . field_identifier)) ;) (expression_statement "__src = (this->super__Vector_base<gold::Task*,_std::allocator<gold::Task*>_>)._M_impl._M_start;" (assignment_expression "__src = (this->super__Vector_base<gold::Task*,_std::allocator<gold::Task*>_>)._M_impl._M_start" identifier = (field_expression "(this->super__Vector_base<gold::Task*,_std::allocator<gold::Task*>_>)._M_impl._M_start" (field_expression "(this->super__Vector_base<gold::Task*,_std::allocator<gold::Task*>_>)._M_impl" (parenthesized_expression "(this->super__Vector_base<gold::Task*,_std::allocator<gold::Task*>_>)" ( (binary_expression "this->super__Vector_base<gold::Task*,_std::allocator<gold::Task*>_>" (binary_expression "this->super__Vector_base<gold::Task*,_std::allocator<gold::Task*>_" (binary_expression "this->super__Vector_base<gold::Task*,_std::allocator<gold::Task*" (binary_expression "this->super__Vector_base<gold::Task*,_std::allocator<gold" (binary_expression "this->super__Vector_base<gold::Task*,_std" (binary_expression "this->super__Vector_base<gold" (field_expression "this->super__Vector_base" identifier -> field_identifier) < identifier) (ERROR "::Task" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Task" : : identifier) * 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 "uVar2 = (long)ppTVar1 - (long)__src >> 3;" (assignment_expression "uVar2 = (long)ppTVar1 - (long)__src >> 3" identifier = (binary_expression "(long)ppTVar1 - (long)__src >> 3" (binary_expression "(long)ppTVar1 - (long)__src" (cast_expression "(long)ppTVar1" ( (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 (uVar2 == 0) {\n    uVar3 = 1;\nLAB_0016f585:\n    uVar4 = uVar3 * 8;\nLAB_0016f498:\n    __dest_00 = (pointer)operator_new(uVar4);\n    ppTVar5 = (pointer)(uVar4 + (long)__dest_00);\n  }\n  else {\n    uVar3 = uVar2 * 2;\n    uVar4 = 0xfffffffffffffff8;\n    if ((uVar3 < uVar2) || (0x1fffffffffffffff < uVar3)) goto LAB_0016f498;\n    ppTVar5 = (pointer)0x0;\n    __dest_00 = (pointer)0x0;\n    if (uVar3 != 0) goto LAB_0016f585;\n  }" if (parenthesized_expression "(uVar2 == 0)" ( (binary_expression "uVar2 == 0" identifier == number_literal) )) (compound_statement "{\n    uVar3 = 1;\nLAB_0016f585:\n    uVar4 = uVar3 * 8;\nLAB_0016f498:\n    __dest_00 = (pointer)operator_new(uVar4);\n    ppTVar5 = (pointer)(uVar4 + (long)__dest_00);\n  }" { (expression_statement "uVar3 = 1;" (assignment_expression "uVar3 = 1" identifier = number_literal) ;) (labeled_statement "LAB_0016f585:\n    uVar4 = uVar3 * 8;" statement_identifier : (expression_statement "uVar4 = uVar3 * 8;" (assignment_expression "uVar4 = uVar3 * 8" identifier = (binary_expression "uVar3 * 8" identifier * number_literal)) ;)) (labeled_statement "LAB_0016f498:\n    __dest_00 = (pointer)operator_new(uVar4);" statement_identifier : (expression_statement "__dest_00 = (pointer)operator_new(uVar4);" (assignment_expression "__dest_00 = (pointer)operator_new(uVar4)" identifier = (cast_expression "(pointer)operator_new(uVar4)" ( (type_descriptor "pointer" type_identifier) ) (call_expression "operator_new(uVar4)" identifier (argument_list "(uVar4)" ( identifier ))))) ;)) (expression_statement "ppTVar5 = (pointer)(uVar4 + (long)__dest_00);" (assignment_expression "ppTVar5 = (pointer)(uVar4 + (long)__dest_00)" identifier = (call_expression "(pointer)(uVar4 + (long)__dest_00)" (parenthesized_expression "(pointer)" ( identifier )) (argument_list "(uVar4 + (long)__dest_00)" ( (binary_expression "uVar4 + (long)__dest_00" identifier + (cast_expression "(long)__dest_00" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) )))) ;) }) (else_clause "else {\n    uVar3 = uVar2 * 2;\n    uVar4 = 0xfffffffffffffff8;\n    if ((uVar3 < uVar2) || (0x1fffffffffffffff < uVar3)) goto LAB_0016f498;\n    ppTVar5 = (pointer)0x0;\n    __dest_00 = (pointer)0x0;\n    if (uVar3 != 0) goto LAB_0016f585;\n  }" else (compound_statement "{\n    uVar3 = uVar2 * 2;\n    uVar4 = 0xfffffffffffffff8;\n    if ((uVar3 < uVar2) || (0x1fffffffffffffff < uVar3)) goto LAB_0016f498;\n    ppTVar5 = (pointer)0x0;\n    __dest_00 = (pointer)0x0;\n    if (uVar3 != 0) goto LAB_0016f585;\n  }" { (expression_statement "uVar3 = uVar2 * 2;" (assignment_expression "uVar3 = uVar2 * 2" identifier = (binary_expression "uVar2 * 2" identifier * number_literal)) ;) (expression_statement "uVar4 = 0xfffffffffffffff8;" (assignment_expression "uVar4 = 0xfffffffffffffff8" identifier = number_literal) ;) (if_statement "if ((uVar3 < uVar2) || (0x1fffffffffffffff < uVar3)) goto LAB_0016f498;" if (parenthesized_expression "((uVar3 < uVar2) || (0x1fffffffffffffff < uVar3))" ( (binary_expression "(uVar3 < uVar2) || (0x1fffffffffffffff < uVar3)" (parenthesized_expression "(uVar3 < uVar2)" ( (binary_expression "uVar3 < uVar2" identifier < identifier) )) || (parenthesized_expression "(0x1fffffffffffffff < uVar3)" ( (binary_expression "0x1fffffffffffffff < uVar3" number_literal < identifier) ))) )) (goto_statement "goto LAB_0016f498;" goto statement_identifier ;)) (expression_statement "ppTVar5 = (pointer)0x0;" (assignment_expression "ppTVar5 = (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 (uVar3 != 0) goto LAB_0016f585;" if (parenthesized_expression "(uVar3 != 0)" ( (binary_expression "uVar3 != 0" identifier != number_literal) )) (goto_statement "goto LAB_0016f585;" goto statement_identifier ;)) }))) (expression_statement "__dest = (void *)((long)__dest_00 + __n + 8);" (assignment_expression "__dest = (void *)((long)__dest_00 + __n + 8)" identifier = (cast_expression "(void *)((long)__dest_00 + __n + 8)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)__dest_00 + __n + 8)" ( (binary_expression "(long)__dest_00 + __n + 8" (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 "*(Task **)((long)__dest_00 + __n) = *__args_0;" (assignment_expression "*(Task **)((long)__dest_00 + __n) = *__args_0" (pointer_expression "*(Task **)((long)__dest_00 + __n)" * (cast_expression "(Task **)((long)__dest_00 + __n)" ( (type_descriptor "Task **" type_identifier (abstract_pointer_declarator "**" * (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 "*__args_0" * identifier)) ;) (if_statement "if (__position._M_current == __src) {\n    if (__position._M_current != ppTVar1) goto LAB_0016f508;\nLAB_0016f516:\n    if (__src == (Task **)0x0) goto LAB_0016f51b;\n  }\n  else {\n    memmove(__dest_00,__src,__n);\n    if (__position._M_current != ppTVar1) {\nLAB_0016f508:\n      memcpy(__dest,__position._M_current,(long)ppTVar1 - (long)__position._M_current);\n      goto LAB_0016f516;\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 != ppTVar1) goto LAB_0016f508;\nLAB_0016f516:\n    if (__src == (Task **)0x0) goto LAB_0016f51b;\n  }" { (if_statement "if (__position._M_current != ppTVar1) goto LAB_0016f508;" if (parenthesized_expression "(__position._M_current != ppTVar1)" ( (binary_expression "__position._M_current != ppTVar1" (field_expression "__position._M_current" identifier . field_identifier) != identifier) )) (goto_statement "goto LAB_0016f508;" goto statement_identifier ;)) (labeled_statement "LAB_0016f516:\n    if (__src == (Task **)0x0) goto LAB_0016f51b;" statement_identifier : (if_statement "if (__src == (Task **)0x0) goto LAB_0016f51b;" if (parenthesized_expression "(__src == (Task **)0x0)" ( (binary_expression "__src == (Task **)0x0" identifier == (cast_expression "(Task **)0x0" ( (type_descriptor "Task **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) )) (goto_statement "goto LAB_0016f51b;" goto statement_identifier ;))) }) (else_clause "else {\n    memmove(__dest_00,__src,__n);\n    if (__position._M_current != ppTVar1) {\nLAB_0016f508:\n      memcpy(__dest,__position._M_current,(long)ppTVar1 - (long)__position._M_current);\n      goto LAB_0016f516;\n    }\n  }" else (compound_statement "{\n    memmove(__dest_00,__src,__n);\n    if (__position._M_current != ppTVar1) {\nLAB_0016f508:\n      memcpy(__dest,__position._M_current,(long)ppTVar1 - (long)__position._M_current);\n      goto LAB_0016f516;\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 != ppTVar1) {\nLAB_0016f508:\n      memcpy(__dest,__position._M_current,(long)ppTVar1 - (long)__position._M_current);\n      goto LAB_0016f516;\n    }" if (parenthesized_expression "(__position._M_current != ppTVar1)" ( (binary_expression "__position._M_current != ppTVar1" (field_expression "__position._M_current" identifier . field_identifier) != identifier) )) (compound_statement "{\nLAB_0016f508:\n      memcpy(__dest,__position._M_current,(long)ppTVar1 - (long)__position._M_current);\n      goto LAB_0016f516;\n    }" { (labeled_statement "LAB_0016f508:\n      memcpy(__dest,__position._M_current,(long)ppTVar1 - (long)__position._M_current);" statement_identifier : (expression_statement "memcpy(__dest,__position._M_current,(long)ppTVar1 - (long)__position._M_current);" (call_expression "memcpy(__dest,__position._M_current,(long)ppTVar1 - (long)__position._M_current)" identifier (argument_list "(__dest,__position._M_current,(long)ppTVar1 - (long)__position._M_current)" ( identifier , (field_expression "__position._M_current" identifier . field_identifier) , (binary_expression "(long)ppTVar1 - (long)__position._M_current" (cast_expression "(long)ppTVar1" ( (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_0016f516;" goto statement_identifier ;) })) }))) (expression_statement "operator_delete(__src);" (call_expression "operator_delete(__src)" identifier (argument_list "(__src)" ( identifier ))) ;) (labeled_statement "LAB_0016f51b:\n  (this->super__Vector_base<gold::Task*,_std::allocator<gold::Task*>_>)._M_impl._M_start = __dest_00\n  ;" statement_identifier : (expression_statement "(this->super__Vector_base<gold::Task*,_std::allocator<gold::Task*>_>)._M_impl._M_start = __dest_00\n  ;" (assignment_expression "(this->super__Vector_base<gold::Task*,_std::allocator<gold::Task*>_>)._M_impl._M_start = __dest_00" (field_expression "(this->super__Vector_base<gold::Task*,_std::allocator<gold::Task*>_>)._M_impl._M_start" (field_expression "(this->super__Vector_base<gold::Task*,_std::allocator<gold::Task*>_>)._M_impl" (parenthesized_expression "(this->super__Vector_base<gold::Task*,_std::allocator<gold::Task*>_>)" ( (binary_expression "this->super__Vector_base<gold::Task*,_std::allocator<gold::Task*>_>" (binary_expression "this->super__Vector_base<gold::Task*,_std::allocator<gold::Task*>_" (binary_expression "this->super__Vector_base<gold::Task*,_std::allocator<gold::Task*" (binary_expression "this->super__Vector_base<gold::Task*,_std::allocator<gold" (binary_expression "this->super__Vector_base<gold::Task*,_std" (binary_expression "this->super__Vector_base<gold" (field_expression "this->super__Vector_base" identifier -> field_identifier) < identifier) (ERROR "::Task" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Task" : : identifier) * identifier) > identifier) > identifier) )) . field_identifier) . field_identifier) = identifier) ;)) (expression_statement "(this->super__Vector_base<gold::Task*,_std::allocator<gold::Task*>_>)._M_impl._M_finish =\n       (pointer)((long)__dest + ((long)ppTVar1 - (long)__position._M_current));" (assignment_expression "(this->super__Vector_base<gold::Task*,_std::allocator<gold::Task*>_>)._M_impl._M_finish =\n       (pointer)((long)__dest + ((long)ppTVar1 - (long)__position._M_current))" (field_expression "(this->super__Vector_base<gold::Task*,_std::allocator<gold::Task*>_>)._M_impl._M_finish" (field_expression "(this->super__Vector_base<gold::Task*,_std::allocator<gold::Task*>_>)._M_impl" (parenthesized_expression "(this->super__Vector_base<gold::Task*,_std::allocator<gold::Task*>_>)" ( (binary_expression "this->super__Vector_base<gold::Task*,_std::allocator<gold::Task*>_>" (binary_expression "this->super__Vector_base<gold::Task*,_std::allocator<gold::Task*>_" (binary_expression "this->super__Vector_base<gold::Task*,_std::allocator<gold" (binary_expression "this->super__Vector_base<gold::Task*,_std" (binary_expression "this->super__Vector_base<gold" (field_expression "this->super__Vector_base" identifier -> field_identifier) < identifier) (ERROR "::Task" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Task" : : identifier) * (ERROR ">" >) identifier) > identifier) )) . field_identifier) . field_identifier) = (call_expression "(pointer)((long)__dest + ((long)ppTVar1 - (long)__position._M_current))" (parenthesized_expression "(pointer)" ( identifier )) (argument_list "((long)__dest + ((long)ppTVar1 - (long)__position._M_current))" ( (binary_expression "(long)__dest + ((long)ppTVar1 - (long)__position._M_current)" (cast_expression "(long)__dest" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "((long)ppTVar1 - (long)__position._M_current)" ( (binary_expression "(long)ppTVar1 - (long)__position._M_current" (cast_expression "(long)ppTVar1" ( (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->super__Vector_base<gold::Task*,_std::allocator<gold::Task*>_>)._M_impl._M_end_of_storage =\n       ppTVar5;" (assignment_expression "(this->super__Vector_base<gold::Task*,_std::allocator<gold::Task*>_>)._M_impl._M_end_of_storage =\n       ppTVar5" (field_expression "(this->super__Vector_base<gold::Task*,_std::allocator<gold::Task*>_>)._M_impl._M_end_of_storage" (field_expression "(this->super__Vector_base<gold::Task*,_std::allocator<gold::Task*>_>)._M_impl" (parenthesized_expression "(this->super__Vector_base<gold::Task*,_std::allocator<gold::Task*>_>)" ( (binary_expression "this->super__Vector_base<gold::Task*,_std::allocator<gold::Task*>_>" (binary_expression "this->super__Vector_base<gold::Task*,_std::allocator<gold::Task*>_" (binary_expression "this->super__Vector_base<gold::Task*,_std::allocator<gold" (binary_expression "this->super__Vector_base<gold::Task*,_std" (binary_expression "this->super__Vector_base<gold" (field_expression "this->super__Vector_base" identifier -> field_identifier) < identifier) (ERROR "::Task" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Task" : : identifier) * (ERROR ">" >) identifier) > identifier) )) . field_identifier) . field_identifier) = identifier) ;) (return_statement "return;" return ;) (ERROR "}" }))
(translation_unit "void FUN_0016f450(undefined8 *param_1,void *param_2,undefined8 *param_3)\n\n{\n  void *__dest;\n  void *pvVar1;\n  void *__src;\n  ulong uVar2;\n  void *__dest_00;\n  size_t __n;\n  ulong uVar3;\n  long lVar4;\n  \n  pvVar1 = (void *)param_1[1];\n  __src = (void *)*param_1;\n  __n = (long)param_2 - (long)__src;\n  uVar2 = (long)pvVar1 - (long)__src >> 3;\n  if (uVar2 == 0) {\n    uVar3 = 1;\nLAB_0016f585:\n    lVar4 = uVar3 * 8;\nLAB_0016f498:\n    __dest_00 = (void *)FUN_00275550(lVar4);\n    lVar4 = lVar4 + (long)__dest_00;\n  }\n  else {\n    uVar3 = uVar2 * 2;\n    lVar4 = -8;\n    if ((uVar3 < uVar2) || (0x1fffffffffffffff < uVar3)) goto LAB_0016f498;\n    lVar4 = 0;\n    __dest_00 = (void *)0x0;\n    if (uVar3 != 0) goto LAB_0016f585;\n  }\n  __dest = (void *)((long)__dest_00 + __n + 8);\n  *(undefined8 *)((long)__dest_00 + __n) = *param_3;\n  if (param_2 == __src) {\n    if (param_2 != pvVar1) goto LAB_0016f508;\nLAB_0016f516:\n    if (__src == (void *)0x0) goto LAB_0016f51b;\n  }\n  else {\n    memmove(__dest_00,__src,__n);\n    if (param_2 != pvVar1) {\nLAB_0016f508:\n      memcpy(__dest,param_2,(long)pvVar1 - (long)param_2);\n      goto LAB_0016f516;\n    }\n  }\n  FUN_00276d20(__src);\nLAB_0016f51b:\n  *param_1 = __dest_00;\n  param_1[1] = (long)__dest + ((long)pvVar1 - (long)param_2);\n  param_1[2] = lVar4;\n  return;\n}\n\n" (function_definition "void FUN_0016f450(undefined8 *param_1,void *param_2,undefined8 *param_3)\n\n{\n  void *__dest;\n  void *pvVar1;\n  void *__src;\n  ulong uVar2;\n  void *__dest_00;\n  size_t __n;\n  ulong uVar3;\n  long lVar4;\n  \n  pvVar1 = (void *)param_1[1];\n  __src = (void *)*param_1;\n  __n = (long)param_2 - (long)__src;\n  uVar2 = (long)pvVar1 - (long)__src >> 3;\n  if (uVar2 == 0) {\n    uVar3 = 1;\nLAB_0016f585:\n    lVar4 = uVar3 * 8;\nLAB_0016f498:\n    __dest_00 = (void *)FUN_00275550(lVar4);\n    lVar4 = lVar4 + (long)__dest_00;\n  }\n  else {\n    uVar3 = uVar2 * 2;\n    lVar4 = -8;\n    if ((uVar3 < uVar2) || (0x1fffffffffffffff < uVar3)) goto LAB_0016f498;\n    lVar4 = 0;\n    __dest_00 = (void *)0x0;\n    if (uVar3 != 0) goto LAB_0016f585;\n  }\n  __dest = (void *)((long)__dest_00 + __n + 8);\n  *(undefined8 *)((long)__dest_00 + __n) = *param_3;\n  if (param_2 == __src) {\n    if (param_2 != pvVar1) goto LAB_0016f508;\nLAB_0016f516:\n    if (__src == (void *)0x0) goto LAB_0016f51b;\n  }\n  else {\n    memmove(__dest_00,__src,__n);\n    if (param_2 != pvVar1) {\nLAB_0016f508:\n      memcpy(__dest,param_2,(long)pvVar1 - (long)param_2);\n      goto LAB_0016f516;\n    }\n  }\n  FUN_00276d20(__src);\nLAB_0016f51b:\n  *param_1 = __dest_00;\n  param_1[1] = (long)__dest + ((long)pvVar1 - (long)param_2);\n  param_1[2] = lVar4;\n  return;\n}" primitive_type (function_declarator "FUN_0016f450(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  ulong uVar2;\n  void *__dest_00;\n  size_t __n;\n  ulong uVar3;\n  long lVar4;\n  \n  pvVar1 = (void *)param_1[1];\n  __src = (void *)*param_1;\n  __n = (long)param_2 - (long)__src;\n  uVar2 = (long)pvVar1 - (long)__src >> 3;\n  if (uVar2 == 0) {\n    uVar3 = 1;\nLAB_0016f585:\n    lVar4 = uVar3 * 8;\nLAB_0016f498:\n    __dest_00 = (void *)FUN_00275550(lVar4);\n    lVar4 = lVar4 + (long)__dest_00;\n  }\n  else {\n    uVar3 = uVar2 * 2;\n    lVar4 = -8;\n    if ((uVar3 < uVar2) || (0x1fffffffffffffff < uVar3)) goto LAB_0016f498;\n    lVar4 = 0;\n    __dest_00 = (void *)0x0;\n    if (uVar3 != 0) goto LAB_0016f585;\n  }\n  __dest = (void *)((long)__dest_00 + __n + 8);\n  *(undefined8 *)((long)__dest_00 + __n) = *param_3;\n  if (param_2 == __src) {\n    if (param_2 != pvVar1) goto LAB_0016f508;\nLAB_0016f516:\n    if (__src == (void *)0x0) goto LAB_0016f51b;\n  }\n  else {\n    memmove(__dest_00,__src,__n);\n    if (param_2 != pvVar1) {\nLAB_0016f508:\n      memcpy(__dest,param_2,(long)pvVar1 - (long)param_2);\n      goto LAB_0016f516;\n    }\n  }\n  FUN_00276d20(__src);\nLAB_0016f51b:\n  *param_1 = __dest_00;\n  param_1[1] = (long)__dest + ((long)pvVar1 - (long)param_2);\n  param_1[2] = lVar4;\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 "ulong uVar2;" type_identifier identifier ;) (declaration "void *__dest_00;" primitive_type (pointer_declarator "*__dest_00" * identifier) ;) (declaration "size_t __n;" primitive_type identifier ;) (declaration "ulong uVar3;" type_identifier identifier ;) (declaration "long lVar4;" (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 "uVar2 = (long)pvVar1 - (long)__src >> 3;" (assignment_expression "uVar2 = (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 (uVar2 == 0) {\n    uVar3 = 1;\nLAB_0016f585:\n    lVar4 = uVar3 * 8;\nLAB_0016f498:\n    __dest_00 = (void *)FUN_00275550(lVar4);\n    lVar4 = lVar4 + (long)__dest_00;\n  }\n  else {\n    uVar3 = uVar2 * 2;\n    lVar4 = -8;\n    if ((uVar3 < uVar2) || (0x1fffffffffffffff < uVar3)) goto LAB_0016f498;\n    lVar4 = 0;\n    __dest_00 = (void *)0x0;\n    if (uVar3 != 0) goto LAB_0016f585;\n  }" if (parenthesized_expression "(uVar2 == 0)" ( (binary_expression "uVar2 == 0" identifier == number_literal) )) (compound_statement "{\n    uVar3 = 1;\nLAB_0016f585:\n    lVar4 = uVar3 * 8;\nLAB_0016f498:\n    __dest_00 = (void *)FUN_00275550(lVar4);\n    lVar4 = lVar4 + (long)__dest_00;\n  }" { (expression_statement "uVar3 = 1;" (assignment_expression "uVar3 = 1" identifier = number_literal) ;) (labeled_statement "LAB_0016f585:\n    lVar4 = uVar3 * 8;" statement_identifier : (expression_statement "lVar4 = uVar3 * 8;" (assignment_expression "lVar4 = uVar3 * 8" identifier = (binary_expression "uVar3 * 8" identifier * number_literal)) ;)) (labeled_statement "LAB_0016f498:\n    __dest_00 = (void *)FUN_00275550(lVar4);" statement_identifier : (expression_statement "__dest_00 = (void *)FUN_00275550(lVar4);" (assignment_expression "__dest_00 = (void *)FUN_00275550(lVar4)" identifier = (cast_expression "(void *)FUN_00275550(lVar4)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_00275550(lVar4)" identifier (argument_list "(lVar4)" ( identifier ))))) ;)) (expression_statement "lVar4 = lVar4 + (long)__dest_00;" (assignment_expression "lVar4 = lVar4 + (long)__dest_00" identifier = (binary_expression "lVar4 + (long)__dest_00" identifier + (cast_expression "(long)__dest_00" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) }) (else_clause "else {\n    uVar3 = uVar2 * 2;\n    lVar4 = -8;\n    if ((uVar3 < uVar2) || (0x1fffffffffffffff < uVar3)) goto LAB_0016f498;\n    lVar4 = 0;\n    __dest_00 = (void *)0x0;\n    if (uVar3 != 0) goto LAB_0016f585;\n  }" else (compound_statement "{\n    uVar3 = uVar2 * 2;\n    lVar4 = -8;\n    if ((uVar3 < uVar2) || (0x1fffffffffffffff < uVar3)) goto LAB_0016f498;\n    lVar4 = 0;\n    __dest_00 = (void *)0x0;\n    if (uVar3 != 0) goto LAB_0016f585;\n  }" { (expression_statement "uVar3 = uVar2 * 2;" (assignment_expression "uVar3 = uVar2 * 2" identifier = (binary_expression "uVar2 * 2" identifier * number_literal)) ;) (expression_statement "lVar4 = -8;" (assignment_expression "lVar4 = -8" identifier = number_literal) ;) (if_statement "if ((uVar3 < uVar2) || (0x1fffffffffffffff < uVar3)) goto LAB_0016f498;" if (parenthesized_expression "((uVar3 < uVar2) || (0x1fffffffffffffff < uVar3))" ( (binary_expression "(uVar3 < uVar2) || (0x1fffffffffffffff < uVar3)" (parenthesized_expression "(uVar3 < uVar2)" ( (binary_expression "uVar3 < uVar2" identifier < identifier) )) || (parenthesized_expression "(0x1fffffffffffffff < uVar3)" ( (binary_expression "0x1fffffffffffffff < uVar3" number_literal < identifier) ))) )) (goto_statement "goto LAB_0016f498;" goto statement_identifier ;)) (expression_statement "lVar4 = 0;" (assignment_expression "lVar4 = 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 (uVar3 != 0) goto LAB_0016f585;" if (parenthesized_expression "(uVar3 != 0)" ( (binary_expression "uVar3 != 0" identifier != number_literal) )) (goto_statement "goto LAB_0016f585;" goto statement_identifier ;)) }))) (expression_statement "__dest = (void *)((long)__dest_00 + __n + 8);" (assignment_expression "__dest = (void *)((long)__dest_00 + __n + 8)" identifier = (cast_expression "(void *)((long)__dest_00 + __n + 8)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)__dest_00 + __n + 8)" ( (binary_expression "(long)__dest_00 + __n + 8" (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)) ;) (if_statement "if (param_2 == __src) {\n    if (param_2 != pvVar1) goto LAB_0016f508;\nLAB_0016f516:\n    if (__src == (void *)0x0) goto LAB_0016f51b;\n  }\n  else {\n    memmove(__dest_00,__src,__n);\n    if (param_2 != pvVar1) {\nLAB_0016f508:\n      memcpy(__dest,param_2,(long)pvVar1 - (long)param_2);\n      goto LAB_0016f516;\n    }\n  }" if (parenthesized_expression "(param_2 == __src)" ( (binary_expression "param_2 == __src" identifier == identifier) )) (compound_statement "{\n    if (param_2 != pvVar1) goto LAB_0016f508;\nLAB_0016f516:\n    if (__src == (void *)0x0) goto LAB_0016f51b;\n  }" { (if_statement "if (param_2 != pvVar1) goto LAB_0016f508;" if (parenthesized_expression "(param_2 != pvVar1)" ( (binary_expression "param_2 != pvVar1" identifier != identifier) )) (goto_statement "goto LAB_0016f508;" goto statement_identifier ;)) (labeled_statement "LAB_0016f516:\n    if (__src == (void *)0x0) goto LAB_0016f51b;" statement_identifier : (if_statement "if (__src == (void *)0x0) goto LAB_0016f51b;" 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_0016f51b;" goto statement_identifier ;))) }) (else_clause "else {\n    memmove(__dest_00,__src,__n);\n    if (param_2 != pvVar1) {\nLAB_0016f508:\n      memcpy(__dest,param_2,(long)pvVar1 - (long)param_2);\n      goto LAB_0016f516;\n    }\n  }" else (compound_statement "{\n    memmove(__dest_00,__src,__n);\n    if (param_2 != pvVar1) {\nLAB_0016f508:\n      memcpy(__dest,param_2,(long)pvVar1 - (long)param_2);\n      goto LAB_0016f516;\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_0016f508:\n      memcpy(__dest,param_2,(long)pvVar1 - (long)param_2);\n      goto LAB_0016f516;\n    }" if (parenthesized_expression "(param_2 != pvVar1)" ( (binary_expression "param_2 != pvVar1" identifier != identifier) )) (compound_statement "{\nLAB_0016f508:\n      memcpy(__dest,param_2,(long)pvVar1 - (long)param_2);\n      goto LAB_0016f516;\n    }" { (labeled_statement "LAB_0016f508:\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_0016f516;" goto statement_identifier ;) })) }))) (expression_statement "FUN_00276d20(__src);" (call_expression "FUN_00276d20(__src)" identifier (argument_list "(__src)" ( identifier ))) ;) (labeled_statement "LAB_0016f51b:\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] = lVar4;" (assignment_expression "param_1[2] = lVar4" (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 (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 IDENT == 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 IDENT < IDENT) )) || (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 = (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)) ;) (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_0016f450(undefined8 *param_1,void *param_2,undefined8 *param_3)\n\n{\n  void *__dest;\n  void *pvVar1;\n  void *__src;\n  ulong uVar2;\n  void *__dest_00;\n  size_t __n;\n  ulong uVar3;\n  long lVar4;\n  \n  pvVar1 = (void *)param_1[1];\n  __src = (void *)*param_1;\n  __n = (long)param_2 - (long)__src;\n  uVar2 = (long)pvVar1 - (long)__src >> 3;\n  if (uVar2 == 0) {\n    uVar3 = 1;\nLAB_0016f585:\n    lVar4 = uVar3 * 8;\nLAB_0016f498:\n    __dest_00 = (void *)FUN_00275550(lVar4);\n    lVar4 = lVar4 + (long)__dest_00;\n  }\n  else {\n    uVar3 = uVar2 * 2;\n    lVar4 = -8;\n    if ((uVar3 < uVar2) || (0x1fffffffffffffff < uVar3)) goto LAB_0016f498;\n    lVar4 = 0;\n    __dest_00 = (void *)0x0;\n    if (uVar3 != 0) goto LAB_0016f585;\n  }\n  __dest = (void *)((long)__dest_00 + __n + 8);\n  *(undefined8 *)((long)__dest_00 + __n) = *param_3;\n  if (param_2 == __src) {\n    if (param_2 != pvVar1) goto LAB_0016f508;\nLAB_0016f516:\n    if (__src == (void *)0x0) goto LAB_0016f51b;\n  }\n  else {\n    memmove(__dest_00,__src,__n);\n    if (param_2 != pvVar1) {\nLAB_0016f508:\n      memcpy(__dest,param_2,(long)pvVar1 - (long)param_2);\n      goto LAB_0016f516;\n    }\n  }\n  FUN_00276d20(__src);\nLAB_0016f51b:\n  *param_1 = __dest_00;\n  param_1[1] = (long)__dest + ((long)pvVar1 - (long)param_2);\n  param_1[2] = lVar4;\n  return;\n}" (primitive_type "void") (function_declarator "FUN_0016f450(undefined8 *param_1,void *param_2,undefined8 *param_3)" (identifier "FUN_0016f450") (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  ulong uVar2;\n  void *__dest_00;\n  size_t __n;\n  ulong uVar3;\n  long lVar4;\n  \n  pvVar1 = (void *)param_1[1];\n  __src = (void *)*param_1;\n  __n = (long)param_2 - (long)__src;\n  uVar2 = (long)pvVar1 - (long)__src >> 3;\n  if (uVar2 == 0) {\n    uVar3 = 1;\nLAB_0016f585:\n    lVar4 = uVar3 * 8;\nLAB_0016f498:\n    __dest_00 = (void *)FUN_00275550(lVar4);\n    lVar4 = lVar4 + (long)__dest_00;\n  }\n  else {\n    uVar3 = uVar2 * 2;\n    lVar4 = -8;\n    if ((uVar3 < uVar2) || (0x1fffffffffffffff < uVar3)) goto LAB_0016f498;\n    lVar4 = 0;\n    __dest_00 = (void *)0x0;\n    if (uVar3 != 0) goto LAB_0016f585;\n  }\n  __dest = (void *)((long)__dest_00 + __n + 8);\n  *(undefined8 *)((long)__dest_00 + __n) = *param_3;\n  if (param_2 == __src) {\n    if (param_2 != pvVar1) goto LAB_0016f508;\nLAB_0016f516:\n    if (__src == (void *)0x0) goto LAB_0016f51b;\n  }\n  else {\n    memmove(__dest_00,__src,__n);\n    if (param_2 != pvVar1) {\nLAB_0016f508:\n      memcpy(__dest,param_2,(long)pvVar1 - (long)param_2);\n      goto LAB_0016f516;\n    }\n  }\n  FUN_00276d20(__src);\nLAB_0016f51b:\n  *param_1 = __dest_00;\n  param_1[1] = (long)__dest + ((long)pvVar1 - (long)param_2);\n  param_1[2] = lVar4;\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 "ulong uVar2;" (type_identifier "ulong") (identifier "uVar2") (; ";")) (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 uVar3;" (type_identifier "ulong") (identifier "uVar3") (; ";")) (declaration "long lVar4;" (sized_type_specifier "long" (long "long")) (identifier "lVar4") (; ";")) (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 "uVar2 = (long)pvVar1 - (long)__src >> 3;" (assignment_expression "uVar2 = (long)pvVar1 - (long)__src >> 3" (identifier "uVar2") (= "=") (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 (uVar2 == 0) {\n    uVar3 = 1;\nLAB_0016f585:\n    lVar4 = uVar3 * 8;\nLAB_0016f498:\n    __dest_00 = (void *)FUN_00275550(lVar4);\n    lVar4 = lVar4 + (long)__dest_00;\n  }\n  else {\n    uVar3 = uVar2 * 2;\n    lVar4 = -8;\n    if ((uVar3 < uVar2) || (0x1fffffffffffffff < uVar3)) goto LAB_0016f498;\n    lVar4 = 0;\n    __dest_00 = (void *)0x0;\n    if (uVar3 != 0) goto LAB_0016f585;\n  }" (if "if") (parenthesized_expression "(uVar2 == 0)" (( "(") (binary_expression "uVar2 == 0" (identifier "uVar2") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    uVar3 = 1;\nLAB_0016f585:\n    lVar4 = uVar3 * 8;\nLAB_0016f498:\n    __dest_00 = (void *)FUN_00275550(lVar4);\n    lVar4 = lVar4 + (long)__dest_00;\n  }" ({ "{") (expression_statement "uVar3 = 1;" (assignment_expression "uVar3 = 1" (identifier "uVar3") (= "=") (number_literal "1")) (; ";")) (labeled_statement "LAB_0016f585:\n    lVar4 = uVar3 * 8;" (statement_identifier "LAB_0016f585") (: ":") (expression_statement "lVar4 = uVar3 * 8;" (assignment_expression "lVar4 = uVar3 * 8" (identifier "lVar4") (= "=") (binary_expression "uVar3 * 8" (identifier "uVar3") (* "*") (number_literal "8"))) (; ";"))) (labeled_statement "LAB_0016f498:\n    __dest_00 = (void *)FUN_00275550(lVar4);" (statement_identifier "LAB_0016f498") (: ":") (expression_statement "__dest_00 = (void *)FUN_00275550(lVar4);" (assignment_expression "__dest_00 = (void *)FUN_00275550(lVar4)" (identifier "__dest_00") (= "=") (cast_expression "(void *)FUN_00275550(lVar4)" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_00275550(lVar4)" (identifier "FUN_00275550") (argument_list "(lVar4)" (( "(") (identifier "lVar4") () ")"))))) (; ";"))) (expression_statement "lVar4 = lVar4 + (long)__dest_00;" (assignment_expression "lVar4 = lVar4 + (long)__dest_00" (identifier "lVar4") (= "=") (binary_expression "lVar4 + (long)__dest_00" (identifier "lVar4") (+ "+") (cast_expression "(long)__dest_00" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "__dest_00")))) (; ";")) (} "}")) (else_clause "else {\n    uVar3 = uVar2 * 2;\n    lVar4 = -8;\n    if ((uVar3 < uVar2) || (0x1fffffffffffffff < uVar3)) goto LAB_0016f498;\n    lVar4 = 0;\n    __dest_00 = (void *)0x0;\n    if (uVar3 != 0) goto LAB_0016f585;\n  }" (else "else") (compound_statement "{\n    uVar3 = uVar2 * 2;\n    lVar4 = -8;\n    if ((uVar3 < uVar2) || (0x1fffffffffffffff < uVar3)) goto LAB_0016f498;\n    lVar4 = 0;\n    __dest_00 = (void *)0x0;\n    if (uVar3 != 0) goto LAB_0016f585;\n  }" ({ "{") (expression_statement "uVar3 = uVar2 * 2;" (assignment_expression "uVar3 = uVar2 * 2" (identifier "uVar3") (= "=") (binary_expression "uVar2 * 2" (identifier "uVar2") (* "*") (number_literal "2"))) (; ";")) (expression_statement "lVar4 = -8;" (assignment_expression "lVar4 = -8" (identifier "lVar4") (= "=") (number_literal "-8")) (; ";")) (if_statement "if ((uVar3 < uVar2) || (0x1fffffffffffffff < uVar3)) goto LAB_0016f498;" (if "if") (parenthesized_expression "((uVar3 < uVar2) || (0x1fffffffffffffff < uVar3))" (( "(") (binary_expression "(uVar3 < uVar2) || (0x1fffffffffffffff < uVar3)" (parenthesized_expression "(uVar3 < uVar2)" (( "(") (binary_expression "uVar3 < uVar2" (identifier "uVar3") (< "<") (identifier "uVar2")) () ")")) (|| "||") (parenthesized_expression "(0x1fffffffffffffff < uVar3)" (( "(") (binary_expression "0x1fffffffffffffff < uVar3" (number_literal "0x1fffffffffffffff") (< "<") (identifier "uVar3")) () ")"))) () ")")) (goto_statement "goto LAB_0016f498;" (goto "goto") (statement_identifier "LAB_0016f498") (; ";"))) (expression_statement "lVar4 = 0;" (assignment_expression "lVar4 = 0" (identifier "lVar4") (= "=") (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 (uVar3 != 0) goto LAB_0016f585;" (if "if") (parenthesized_expression "(uVar3 != 0)" (( "(") (binary_expression "uVar3 != 0" (identifier "uVar3") (!= "!=") (number_literal "0")) () ")")) (goto_statement "goto LAB_0016f585;" (goto "goto") (statement_identifier "LAB_0016f585") (; ";"))) (} "}")))) (expression_statement "__dest = (void *)((long)__dest_00 + __n + 8);" (assignment_expression "__dest = (void *)((long)__dest_00 + __n + 8)" (identifier "__dest") (= "=") (cast_expression "(void *)((long)__dest_00 + __n + 8)" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)__dest_00 + __n + 8)" (( "(") (binary_expression "(long)__dest_00 + __n + 8" (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 "8")) () ")")))) (; ";")) (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"))) (; ";")) (if_statement "if (param_2 == __src) {\n    if (param_2 != pvVar1) goto LAB_0016f508;\nLAB_0016f516:\n    if (__src == (void *)0x0) goto LAB_0016f51b;\n  }\n  else {\n    memmove(__dest_00,__src,__n);\n    if (param_2 != pvVar1) {\nLAB_0016f508:\n      memcpy(__dest,param_2,(long)pvVar1 - (long)param_2);\n      goto LAB_0016f516;\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_0016f508;\nLAB_0016f516:\n    if (__src == (void *)0x0) goto LAB_0016f51b;\n  }" ({ "{") (if_statement "if (param_2 != pvVar1) goto LAB_0016f508;" (if "if") (parenthesized_expression "(param_2 != pvVar1)" (( "(") (binary_expression "param_2 != pvVar1" (identifier "param_2") (!= "!=") (identifier "pvVar1")) () ")")) (goto_statement "goto LAB_0016f508;" (goto "goto") (statement_identifier "LAB_0016f508") (; ";"))) (labeled_statement "LAB_0016f516:\n    if (__src == (void *)0x0) goto LAB_0016f51b;" (statement_identifier "LAB_0016f516") (: ":") (if_statement "if (__src == (void *)0x0) goto LAB_0016f51b;" (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_0016f51b;" (goto "goto") (statement_identifier "LAB_0016f51b") (; ";")))) (} "}")) (else_clause "else {\n    memmove(__dest_00,__src,__n);\n    if (param_2 != pvVar1) {\nLAB_0016f508:\n      memcpy(__dest,param_2,(long)pvVar1 - (long)param_2);\n      goto LAB_0016f516;\n    }\n  }" (else "else") (compound_statement "{\n    memmove(__dest_00,__src,__n);\n    if (param_2 != pvVar1) {\nLAB_0016f508:\n      memcpy(__dest,param_2,(long)pvVar1 - (long)param_2);\n      goto LAB_0016f516;\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_0016f508:\n      memcpy(__dest,param_2,(long)pvVar1 - (long)param_2);\n      goto LAB_0016f516;\n    }" (if "if") (parenthesized_expression "(param_2 != pvVar1)" (( "(") (binary_expression "param_2 != pvVar1" (identifier "param_2") (!= "!=") (identifier "pvVar1")) () ")")) (compound_statement "{\nLAB_0016f508:\n      memcpy(__dest,param_2,(long)pvVar1 - (long)param_2);\n      goto LAB_0016f516;\n    }" ({ "{") (labeled_statement "LAB_0016f508:\n      memcpy(__dest,param_2,(long)pvVar1 - (long)param_2);" (statement_identifier "LAB_0016f508") (: ":") (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_0016f516;" (goto "goto") (statement_identifier "LAB_0016f516") (; ";")) (} "}"))) (} "}")))) (expression_statement "FUN_00276d20(__src);" (call_expression "FUN_00276d20(__src)" (identifier "FUN_00276d20") (argument_list "(__src)" (( "(") (identifier "__src") () ")"))) (; ";")) (labeled_statement "LAB_0016f51b:\n  *param_1 = __dest_00;" (statement_identifier "LAB_0016f51b") (: ":") (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] = lVar4;" (assignment_expression "param_1[2] = lVar4" (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]")) (= "=") (identifier "lVar4")) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}")))

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

void __thiscall
std::vector<var_1::type_1*,var_2::allocator<var_1::type_1*>var_4>::_M_realloc_insert<var_1::type_1*_const&>
          (vector<var_1::type_1*,var_2::allocator<var_1::type_1*>var_4> *this,iterator __position,
          type_1 **__args_0)

{
  void *__dest;
  type_1 **var_11;
  type_1 **var_10;
  type_2 var_5;
  type_3 __dest_00;
  size_t var_9;
  type_2 var_6;
  type_2 var_8;
  type_3 ppTVar5;
  
  var_11 = (this->super__Vector_base<var_1::type_1*,var_2::allocator<var_1::type_1*var_3>var_4>var_3)._M_impl._M_finish;
  var_10 = (this->super__Vector_base<var_1::type_1*,var_2::allocator<var_1::type_1*var_3>var_4>var_3)._M_impl._M_start;
  var_9 = (long)__position._M_current - (long)var_10;
  var_5 = (long)var_11 - (long)var_10 >> 3;
  if (var_5 == 0) {
    var_6 = 1;
LAB_0016f585:
    var_8 = var_6 * 8;
LAB_0016f498:
    __dest_00 = (type_3)var_7(var_8);
    ppTVar5 = (type_3)(var_8 + (long)__dest_00);
  }
  else {
    var_6 = var_5 * 2;
    var_8 = 0xfffffffffffffff8;
    if ((var_6 < var_5) || (0x1fffffffffffffff < var_6)) goto LAB_0016f498;
    ppTVar5 = (type_3)0x0;
    __dest_00 = (type_3)0x0;
    if (var_6 != 0) goto LAB_0016f585;
  }
  __dest = (void *)((long)__dest_00 + var_9 + 8);
  *(type_1 **)((long)__dest_00 + var_9) = *__args_0;
  if (__position._M_current == var_10) {
    if (__position._M_current != var_11) goto LAB_0016f508;
LAB_0016f516:
    if (var_10 == (type_1 **)0x0) goto LAB_0016f51b;
  }
  else {
    var_12(__dest_00,var_10,var_9);
    if (__position._M_current != var_11) {
LAB_0016f508:
      var_13(__dest,__position._M_current,(long)var_11 - (long)__position._M_current);
      goto LAB_0016f516;
    }
  }
  var_14(var_10);
LAB_0016f51b:
  (this->super__Vector_base<var_1::type_1*,var_2::allocator<var_1::type_1*var_3>var_4>var_3)._M_impl._M_start = __dest_00
  ;
  (this->super__Vector_base<var_1::type_1*,var_2::allocator<var_1::type_1*>var_4>var_3)._M_impl._M_finish =
       (type_3)((long)__dest + ((long)var_11 - (long)__position._M_current));
  (this->super__Vector_base<var_1::type_1*,var_2::allocator<var_1::type_1*>var_4>var_3)._M_impl._M_end_of_storage =
       ppTVar5;
  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: (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: (identifier) 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: (identifier) right: (identifier))) 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: (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)))) (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;
  ulong uVar2;
  void *__dest_00;
  size_t __n;
  ulong uVar3;
  long lVar4;
  
  pvVar1 = (void *)param_1[1];
  __src = (void *)*param_1;
  __n = (long)param_2 - (long)__src;
  uVar2 = (long)pvVar1 - (long)__src >> 3;
  if (uVar2 == 0) {
    uVar3 = 1;
LAB_0016f585:
    lVar4 = uVar3 * 8;
LAB_0016f498:
    __dest_00 = (void *)FUN_00275550(lVar4);
    lVar4 = lVar4 + (long)__dest_00;
  }
  else {
    uVar3 = uVar2 * 2;
    lVar4 = -8;
    if ((uVar3 < uVar2) || (0x1fffffffffffffff < uVar3)) goto LAB_0016f498;
    lVar4 = 0;
    __dest_00 = (void *)0x0;
    if (uVar3 != 0) goto LAB_0016f585;
  }
  __dest = (void *)((long)__dest_00 + __n + 8);
  *(undefined8 *)((long)__dest_00 + __n) = *param_3;
  if (param_2 == __src) {
    if (param_2 != pvVar1) goto LAB_0016f508;
LAB_0016f516:
    if (__src == (void *)0x0) goto LAB_0016f51b;
  }
  else {
    memmove(__dest_00,__src,__n);
    if (param_2 != pvVar1) {
LAB_0016f508:
      memcpy(__dest,param_2,(long)pvVar1 - (long)param_2);
      goto LAB_0016f516;
    }
  }
  FUN_00276d20(__src);
LAB_0016f51b:
  *param_1 = __dest_00;
  param_1[1] = (long)__dest + ((long)pvVar1 - (long)param_2);
  param_1[2] = lVar4;
  return;
}

