
/* WARNING: Enum "DT": Some values do not have unique names */
/* WARNING: Enum "ELFOSABI": Some values do not have unique names */
/* DWARF original prototype: void run(Layout_task_runner * this, Workqueue * workqueue, Task * task)
    */

void __thiscall
gold::Layout_task_runner::run(Layout_task_runner *this,Workqueue *workqueue,Task *task)

{
  Layout *this_00;
  General_options *pGVar1;
  char *name;
  bool bVar2;
  Object_format OVar3;
  int unaff_EDI;
  off_t file_size;
  char *local_2c;
  int local_28;
  Output_file *local_24;
  
  __x86_get_pc_thunk_di();
  Symbol_table::detect_odr_violations(this->symtab_,task,(this->options_->output_).value);
  this_00 = this->layout_;
  file_size = Layout::finalize(this_00,this->input_objects_,this->symtab_,this->target_,task);
  if (this->mapfile_ != (Mapfile *)0x0) {
    Mapfile::print_discarded_sections(this->mapfile_,this->input_objects_);
    Layout::print_to_mapfile(this_00,this->mapfile_);
  }
  local_2c = (char *)file_size;
  local_28 = (int)((ulonglong)file_size >> 0x20);
  if (this_00->incremental_base_ == (Incremental_binary *)0x0) {
    pGVar1 = (*(Parameters **)(unaff_EDI + 0x36b88f))->options_;
    if (pGVar1 == (General_options *)0x0) {
                    /* WARNING: Subroutine does not return */
      do_gold_unreachable((char *)(unaff_EDI + 0x1c9334),0x5c,(char *)(unaff_EDI + 0x20c52f));
    }
    name = (pGVar1->output_).value;
    local_24 = (Output_file *)operator_new(0x18);
                    /* try { // try from 0027f056 to 0027f05a has its CatchHandler @ 0027f0a5 */
    Output_file::Output_file(local_24,name);
    OVar3 = General_options::oformat_enum(this->options_);
    if (OVar3 != OBJECT_FORMAT_ELF) {
      local_24->is_temporary_ = true;
    }
    Output_file::open(local_24,local_2c,local_28);
  }
  else {
    local_24 = this_00->incremental_base_->output_;
    bVar2 = Parameters::incremental_update(*(Parameters **)(unaff_EDI + 0x36b88f));
    if (bVar2) {
      (*this_00->incremental_base_->_vptr_Incremental_binary[8])
                (this_00->incremental_base_,this->symtab_,this->layout_,local_24);
    }
    Output_file::resize(local_24,file_size);
  }
  queue_final_tasks(this->options_,this->input_objects_,this->symtab_,this_00,workqueue,local_24);
  return;
}



void FUN_0027ef30(int param_1,undefined4 param_2,undefined4 param_3)

{
  int iVar1;
  char cVar2;
  int iVar3;
  undefined4 extraout_ECX;
  undefined4 extraout_ECX_00;
  undefined4 uVar4;
  int unaff_EDI;
  undefined8 uVar5;
  int local_24;
  
  FUN_00074f0a();
  FUN_0034fcb0(*(undefined4 *)(param_1 + 0xc),param_3,
               *(undefined4 *)(*(int *)(param_1 + 4) + 0x27a8));
  iVar1 = *(int *)(param_1 + 0x14);
  uVar5 = FUN_0027df90(iVar1,*(undefined4 *)(param_1 + 8),*(undefined4 *)(param_1 + 0xc),
                       *(undefined4 *)(param_1 + 0x10),param_3);
  uVar4 = extraout_ECX;
  if (*(int *)(param_1 + 0x18) != 0) {
    FUN_0028aa20(*(int *)(param_1 + 0x18),*(undefined4 *)(param_1 + 8));
    FUN_002747f0(iVar1,*(undefined4 *)(param_1 + 0x18));
    uVar4 = extraout_ECX_00;
  }
  if (*(int *)(iVar1 + 0x244) == 0) {
    iVar3 = *(int *)(*(int *)(unaff_EDI + 0x36b88f) + 8);
    if (iVar3 == 0) {
                    /* WARNING: Subroutine does not return */
      FUN_002446e0(unaff_EDI + 0x1c9334,0x5c,unaff_EDI + 0x20c52f,uVar4,uVar5);
    }
    uVar4 = *(undefined4 *)(iVar3 + 0x27a8);
    local_24 = FUN_003ac4d0(0x18);
                    /* try { // try from 0027f056 to 0027f05a has its CatchHandler @ 0027f0a5 */
    FUN_002c9940(local_24,uVar4);
    iVar3 = FUN_002b5cd0(*(undefined4 *)(param_1 + 4));
    if (iVar3 != 0) {
      *(undefined1 *)(local_24 + 0x16) = 1;
    }
    FUN_002c9c60(local_24,uVar5);
  }
  else {
    local_24 = *(int *)(*(int *)(iVar1 + 0x244) + 0x28);
    cVar2 = FUN_0030aff0(*(int *)(unaff_EDI + 0x36b88f));
    if (cVar2 != '\0') {
      (**(code **)(**(int **)(iVar1 + 0x244) + 0x20))
                (*(int **)(iVar1 + 0x244),*(undefined4 *)(param_1 + 0xc),
                 *(undefined4 *)(param_1 + 0x14),local_24);
    }
    FUN_002ca1b0(local_24,uVar5);
  }
  FUN_002455d0(*(undefined4 *)(param_1 + 4),*(undefined4 *)(param_1 + 8),
               *(undefined4 *)(param_1 + 0xc),iVar1,param_2,local_24);
  return;
}


PUSH EBP
MOV EBP,ESP
PUSH EDI
CALL 0x00074f0a
ADD EDI,0x36b0c7
PUSH ESI
PUSH EBX
SUB ESP,0x20
MOV ESI,dword ptr [EBP + 0x8]
MOV EAX,dword ptr [ESI + 0x4]
MOV EBX,EDI
PUSH dword ptr [EAX + 0x27a8]
PUSH dword ptr [EBP + 0x10]
PUSH dword ptr [ESI + 0xc]
CALL 0x0034fcb0
MOV EAX,dword ptr [ESI + 0x14]
POP EDX
PUSH dword ptr [EBP + 0x10]
PUSH dword ptr [ESI + 0x10]
PUSH dword ptr [ESI + 0xc]
PUSH dword ptr [ESI + 0x8]
PUSH EAX
MOV dword ptr [EBP + -0x1c],EAX
CALL 0x0027df90
ADD ESP,0x20
MOV dword ptr [EBP + -0x28],EAX
MOV EAX,dword ptr [ESI + 0x18]
MOV dword ptr [EBP + -0x24],EDX
TEST EAX,EAX
JZ 0x0027efa2
SUB ESP,0x8
PUSH dword ptr [ESI + 0x8]
PUSH EAX
CALL 0x0028aa20
POP EBX
POP EAX
PUSH dword ptr [ESI + 0x18]
PUSH dword ptr [EBP + -0x1c]
CALL 0x002747f0
ADD ESP,0x10
MOV EAX,dword ptr [EBP + -0x1c]
LEA EDX,[EDI + 0x7c8]
MOV EAX,dword ptr [EAX + 0x244]
MOV EDX,dword ptr [EDX]
TEST EAX,EAX
JZ 0x0027f030
SUB ESP,0xc
MOV EAX,dword ptr [EAX + 0x28]
MOV EBX,EDI
PUSH EDX
MOV dword ptr [EBP + -0x20],EAX
CALL 0x0030aff0
ADD ESP,0x10
TEST AL,AL
JNZ 0x0027f010
SUB ESP,0x4
PUSH dword ptr [EBP + -0x24]
MOV EBX,EDI
PUSH dword ptr [EBP + -0x28]
PUSH dword ptr [EBP + -0x20]
CALL 0x002ca1b0
ADD ESP,0x10
SUB ESP,0x8
PUSH dword ptr [EBP + -0x20]
MOV EBX,EDI
PUSH dword ptr [EBP + 0xc]
PUSH dword ptr [EBP + -0x1c]
PUSH dword ptr [ESI + 0xc]
PUSH dword ptr [ESI + 0x8]
PUSH dword ptr [ESI + 0x4]
CALL 0x002455d0
ADD ESP,0x20
LEA ESP,[EBP + -0xc]
POP EBX
POP ESI
POP EDI
POP EBP
RET
MOV ECX,dword ptr [EBP + -0x1c]
MOV EAX,dword ptr [ECX + 0x244]
MOV EDX,dword ptr [EAX]
PUSH dword ptr [EBP + -0x20]
PUSH dword ptr [ESI + 0x14]
PUSH dword ptr [ESI + 0xc]
PUSH EAX
CALL dword ptr [EDX + 0x20]
ADD ESP,0x10
JMP 0x0027efcf
MOV EAX,dword ptr [EDX + 0x8]
TEST EAX,EAX
JZ 0x0027f08d
SUB ESP,0xc
MOV EDX,dword ptr [EAX + 0x27a8]
MOV EBX,EDI
PUSH 0x18
MOV dword ptr [EBP + -0x20],EDX
CALL 0x003ac4d0
POP ECX
POP EDX
MOV EDX,dword ptr [EBP + -0x20]
MOV dword ptr [EBP + -0x20],EAX
PUSH EDX
PUSH EAX
CALL 0x002c9940
POP EDX
PUSH dword ptr [ESI + 0x4]
CALL 0x002b5cd0
ADD ESP,0x10
TEST EAX,EAX
JZ 0x0027f072
MOV EAX,dword ptr [EBP + -0x20]
MOV byte ptr [EAX + 0x16],0x1
SUB ESP,0x4
PUSH dword ptr [EBP + -0x24]
MOV EBX,EDI
PUSH dword ptr [EBP + -0x28]
PUSH dword ptr [EBP + -0x20]
CALL 0x002c9c60
ADD ESP,0x10
JMP 0x0027efe5
LEA EAX,[EDI + 0xffea1468]
PUSH ECX
MOV EBX,EDI
PUSH EAX
LEA EAX,[EDI + 0xffe5e26d]
PUSH 0x5c
PUSH EAX
CALL 0x002446e0
(translation_unit "void FUN_0027ef30(int param_1,undefined4 param_2,undefined4 param_3)\n\n{\n  int iVar1;\n  char cVar2;\n  int iVar3;\n  undefined4 extraout_ECX;\n  undefined4 extraout_ECX_00;\n  undefined4 uVar4;\n  int unaff_EDI;\n  undefined8 uVar5;\n  int local_24;\n  \n  FUN_00074f0a();\n  FUN_0034fcb0(*(undefined4 *)(param_1 + 0xc),param_3,\n               *(undefined4 *)(*(int *)(param_1 + 4) + 0x27a8));\n  iVar1 = *(int *)(param_1 + 0x14);\n  uVar5 = FUN_0027df90(iVar1,*(undefined4 *)(param_1 + 8),*(undefined4 *)(param_1 + 0xc),\n                       *(undefined4 *)(param_1 + 0x10),param_3);\n  uVar4 = extraout_ECX;\n  if (*(int *)(param_1 + 0x18) != 0) {\n    FUN_0028aa20(*(int *)(param_1 + 0x18),*(undefined4 *)(param_1 + 8));\n    FUN_002747f0(iVar1,*(undefined4 *)(param_1 + 0x18));\n    uVar4 = extraout_ECX_00;\n  }\n  if (*(int *)(iVar1 + 0x244) == 0) {\n    iVar3 = *(int *)(*(int *)(unaff_EDI + 0x36b88f) + 8);\n    if (iVar3 == 0) {\n                    /* WARNING: Subroutine does not return */\n      FUN_002446e0(unaff_EDI + 0x1c9334,0x5c,unaff_EDI + 0x20c52f,uVar4,uVar5);\n    }\n    uVar4 = *(undefined4 *)(iVar3 + 0x27a8);\n    local_24 = FUN_003ac4d0(0x18);\n                    /* try { // try from 0027f056 to 0027f05a has its CatchHandler @ 0027f0a5 */\n    FUN_002c9940(local_24,uVar4);\n    iVar3 = FUN_002b5cd0(*(undefined4 *)(param_1 + 4));\n    if (iVar3 != 0) {\n      *(undefined1 *)(local_24 + 0x16) = 1;\n    }\n    FUN_002c9c60(local_24,uVar5);\n  }\n  else {\n    local_24 = *(int *)(*(int *)(iVar1 + 0x244) + 0x28);\n    cVar2 = FUN_0030aff0(*(int *)(unaff_EDI + 0x36b88f));\n    if (cVar2 != '\0') {\n      (**(code **)(**(int **)(iVar1 + 0x244) + 0x20))\n                (*(int **)(iVar1 + 0x244),*(undefined4 *)(param_1 + 0xc),\n                 *(undefined4 *)(param_1 + 0x14),local_24);\n    }\n    FUN_002ca1b0(local_24,uVar5);\n  }\n  FUN_002455d0(*(undefined4 *)(param_1 + 4),*(undefined4 *)(param_1 + 8),\n               *(undefined4 *)(param_1 + 0xc),iVar1,param_2,local_24);\n  return;\n}\n\n" (function_definition "void FUN_0027ef30(int param_1,undefined4 param_2,undefined4 param_3)\n\n{\n  int iVar1;\n  char cVar2;\n  int iVar3;\n  undefined4 extraout_ECX;\n  undefined4 extraout_ECX_00;\n  undefined4 uVar4;\n  int unaff_EDI;\n  undefined8 uVar5;\n  int local_24;\n  \n  FUN_00074f0a();\n  FUN_0034fcb0(*(undefined4 *)(param_1 + 0xc),param_3,\n               *(undefined4 *)(*(int *)(param_1 + 4) + 0x27a8));\n  iVar1 = *(int *)(param_1 + 0x14);\n  uVar5 = FUN_0027df90(iVar1,*(undefined4 *)(param_1 + 8),*(undefined4 *)(param_1 + 0xc),\n                       *(undefined4 *)(param_1 + 0x10),param_3);\n  uVar4 = extraout_ECX;\n  if (*(int *)(param_1 + 0x18) != 0) {\n    FUN_0028aa20(*(int *)(param_1 + 0x18),*(undefined4 *)(param_1 + 8));\n    FUN_002747f0(iVar1,*(undefined4 *)(param_1 + 0x18));\n    uVar4 = extraout_ECX_00;\n  }\n  if (*(int *)(iVar1 + 0x244) == 0) {\n    iVar3 = *(int *)(*(int *)(unaff_EDI + 0x36b88f) + 8);\n    if (iVar3 == 0) {\n                    /* WARNING: Subroutine does not return */\n      FUN_002446e0(unaff_EDI + 0x1c9334,0x5c,unaff_EDI + 0x20c52f,uVar4,uVar5);\n    }\n    uVar4 = *(undefined4 *)(iVar3 + 0x27a8);\n    local_24 = FUN_003ac4d0(0x18);\n                    /* try { // try from 0027f056 to 0027f05a has its CatchHandler @ 0027f0a5 */\n    FUN_002c9940(local_24,uVar4);\n    iVar3 = FUN_002b5cd0(*(undefined4 *)(param_1 + 4));\n    if (iVar3 != 0) {\n      *(undefined1 *)(local_24 + 0x16) = 1;\n    }\n    FUN_002c9c60(local_24,uVar5);\n  }\n  else {\n    local_24 = *(int *)(*(int *)(iVar1 + 0x244) + 0x28);\n    cVar2 = FUN_0030aff0(*(int *)(unaff_EDI + 0x36b88f));\n    if (cVar2 != '\0') {\n      (**(code **)(**(int **)(iVar1 + 0x244) + 0x20))\n                (*(int **)(iVar1 + 0x244),*(undefined4 *)(param_1 + 0xc),\n                 *(undefined4 *)(param_1 + 0x14),local_24);\n    }\n    FUN_002ca1b0(local_24,uVar5);\n  }\n  FUN_002455d0(*(undefined4 *)(param_1 + 4),*(undefined4 *)(param_1 + 8),\n               *(undefined4 *)(param_1 + 0xc),iVar1,param_2,local_24);\n  return;\n}" primitive_type (function_declarator "FUN_0027ef30(int param_1,undefined4 param_2,undefined4 param_3)" identifier (parameter_list "(int param_1,undefined4 param_2,undefined4 param_3)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "undefined4 param_2" type_identifier identifier) , (parameter_declaration "undefined4 param_3" type_identifier identifier) ))) (compound_statement "{\n  int iVar1;\n  char cVar2;\n  int iVar3;\n  undefined4 extraout_ECX;\n  undefined4 extraout_ECX_00;\n  undefined4 uVar4;\n  int unaff_EDI;\n  undefined8 uVar5;\n  int local_24;\n  \n  FUN_00074f0a();\n  FUN_0034fcb0(*(undefined4 *)(param_1 + 0xc),param_3,\n               *(undefined4 *)(*(int *)(param_1 + 4) + 0x27a8));\n  iVar1 = *(int *)(param_1 + 0x14);\n  uVar5 = FUN_0027df90(iVar1,*(undefined4 *)(param_1 + 8),*(undefined4 *)(param_1 + 0xc),\n                       *(undefined4 *)(param_1 + 0x10),param_3);\n  uVar4 = extraout_ECX;\n  if (*(int *)(param_1 + 0x18) != 0) {\n    FUN_0028aa20(*(int *)(param_1 + 0x18),*(undefined4 *)(param_1 + 8));\n    FUN_002747f0(iVar1,*(undefined4 *)(param_1 + 0x18));\n    uVar4 = extraout_ECX_00;\n  }\n  if (*(int *)(iVar1 + 0x244) == 0) {\n    iVar3 = *(int *)(*(int *)(unaff_EDI + 0x36b88f) + 8);\n    if (iVar3 == 0) {\n                    /* WARNING: Subroutine does not return */\n      FUN_002446e0(unaff_EDI + 0x1c9334,0x5c,unaff_EDI + 0x20c52f,uVar4,uVar5);\n    }\n    uVar4 = *(undefined4 *)(iVar3 + 0x27a8);\n    local_24 = FUN_003ac4d0(0x18);\n                    /* try { // try from 0027f056 to 0027f05a has its CatchHandler @ 0027f0a5 */\n    FUN_002c9940(local_24,uVar4);\n    iVar3 = FUN_002b5cd0(*(undefined4 *)(param_1 + 4));\n    if (iVar3 != 0) {\n      *(undefined1 *)(local_24 + 0x16) = 1;\n    }\n    FUN_002c9c60(local_24,uVar5);\n  }\n  else {\n    local_24 = *(int *)(*(int *)(iVar1 + 0x244) + 0x28);\n    cVar2 = FUN_0030aff0(*(int *)(unaff_EDI + 0x36b88f));\n    if (cVar2 != '\0') {\n      (**(code **)(**(int **)(iVar1 + 0x244) + 0x20))\n                (*(int **)(iVar1 + 0x244),*(undefined4 *)(param_1 + 0xc),\n                 *(undefined4 *)(param_1 + 0x14),local_24);\n    }\n    FUN_002ca1b0(local_24,uVar5);\n  }\n  FUN_002455d0(*(undefined4 *)(param_1 + 4),*(undefined4 *)(param_1 + 8),\n               *(undefined4 *)(param_1 + 0xc),iVar1,param_2,local_24);\n  return;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "char cVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "undefined4 extraout_ECX;" type_identifier identifier ;) (declaration "undefined4 extraout_ECX_00;" type_identifier identifier ;) (declaration "undefined4 uVar4;" type_identifier identifier ;) (declaration "int unaff_EDI;" primitive_type identifier ;) (declaration "undefined8 uVar5;" type_identifier identifier ;) (declaration "int local_24;" primitive_type identifier ;) (expression_statement "FUN_00074f0a();" (call_expression "FUN_00074f0a()" identifier (argument_list "()" ( ))) ;) (expression_statement "FUN_0034fcb0(*(undefined4 *)(param_1 + 0xc),param_3,\n               *(undefined4 *)(*(int *)(param_1 + 4) + 0x27a8));" (call_expression "FUN_0034fcb0(*(undefined4 *)(param_1 + 0xc),param_3,\n               *(undefined4 *)(*(int *)(param_1 + 4) + 0x27a8))" identifier (argument_list "(*(undefined4 *)(param_1 + 0xc),param_3,\n               *(undefined4 *)(*(int *)(param_1 + 4) + 0x27a8))" ( (pointer_expression "*(undefined4 *)(param_1 + 0xc)" * (cast_expression "(undefined4 *)(param_1 + 0xc)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) )))) , identifier , (pointer_expression "*(undefined4 *)(*(int *)(param_1 + 4) + 0x27a8)" * (cast_expression "(undefined4 *)(*(int *)(param_1 + 4) + 0x27a8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 4) + 0x27a8)" ( (binary_expression "*(int *)(param_1 + 4) + 0x27a8" (pointer_expression "*(int *)(param_1 + 4)" * (cast_expression "(int *)(param_1 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 4)" ( (binary_expression "param_1 + 4" identifier + number_literal) )))) + number_literal) )))) ))) ;) (expression_statement "iVar1 = *(int *)(param_1 + 0x14);" (assignment_expression "iVar1 = *(int *)(param_1 + 0x14)" identifier = (pointer_expression "*(int *)(param_1 + 0x14)" * (cast_expression "(int *)(param_1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) ))))) ;) (expression_statement "uVar5 = FUN_0027df90(iVar1,*(undefined4 *)(param_1 + 8),*(undefined4 *)(param_1 + 0xc),\n                       *(undefined4 *)(param_1 + 0x10),param_3);" (assignment_expression "uVar5 = FUN_0027df90(iVar1,*(undefined4 *)(param_1 + 8),*(undefined4 *)(param_1 + 0xc),\n                       *(undefined4 *)(param_1 + 0x10),param_3)" identifier = (call_expression "FUN_0027df90(iVar1,*(undefined4 *)(param_1 + 8),*(undefined4 *)(param_1 + 0xc),\n                       *(undefined4 *)(param_1 + 0x10),param_3)" identifier (argument_list "(iVar1,*(undefined4 *)(param_1 + 8),*(undefined4 *)(param_1 + 0xc),\n                       *(undefined4 *)(param_1 + 0x10),param_3)" ( identifier , (pointer_expression "*(undefined4 *)(param_1 + 8)" * (cast_expression "(undefined4 *)(param_1 + 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) , (pointer_expression "*(undefined4 *)(param_1 + 0xc)" * (cast_expression "(undefined4 *)(param_1 + 0xc)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) )))) , (pointer_expression "*(undefined4 *)(param_1 + 0x10)" * (cast_expression "(undefined4 *)(param_1 + 0x10)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) )))) , identifier )))) ;) (expression_statement "uVar4 = extraout_ECX;" (assignment_expression "uVar4 = extraout_ECX" identifier = identifier) ;) (if_statement "if (*(int *)(param_1 + 0x18) != 0) {\n    FUN_0028aa20(*(int *)(param_1 + 0x18),*(undefined4 *)(param_1 + 8));\n    FUN_002747f0(iVar1,*(undefined4 *)(param_1 + 0x18));\n    uVar4 = extraout_ECX_00;\n  }" if (parenthesized_expression "(*(int *)(param_1 + 0x18) != 0)" ( (binary_expression "*(int *)(param_1 + 0x18) != 0" (pointer_expression "*(int *)(param_1 + 0x18)" * (cast_expression "(int *)(param_1 + 0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n    FUN_0028aa20(*(int *)(param_1 + 0x18),*(undefined4 *)(param_1 + 8));\n    FUN_002747f0(iVar1,*(undefined4 *)(param_1 + 0x18));\n    uVar4 = extraout_ECX_00;\n  }" { (expression_statement "FUN_0028aa20(*(int *)(param_1 + 0x18),*(undefined4 *)(param_1 + 8));" (call_expression "FUN_0028aa20(*(int *)(param_1 + 0x18),*(undefined4 *)(param_1 + 8))" identifier (argument_list "(*(int *)(param_1 + 0x18),*(undefined4 *)(param_1 + 8))" ( (pointer_expression "*(int *)(param_1 + 0x18)" * (cast_expression "(int *)(param_1 + 0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) )))) , (pointer_expression "*(undefined4 *)(param_1 + 8)" * (cast_expression "(undefined4 *)(param_1 + 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) ))) ;) (expression_statement "FUN_002747f0(iVar1,*(undefined4 *)(param_1 + 0x18));" (call_expression "FUN_002747f0(iVar1,*(undefined4 *)(param_1 + 0x18))" identifier (argument_list "(iVar1,*(undefined4 *)(param_1 + 0x18))" ( identifier , (pointer_expression "*(undefined4 *)(param_1 + 0x18)" * (cast_expression "(undefined4 *)(param_1 + 0x18)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) )))) ))) ;) (expression_statement "uVar4 = extraout_ECX_00;" (assignment_expression "uVar4 = extraout_ECX_00" identifier = identifier) ;) })) (if_statement "if (*(int *)(iVar1 + 0x244) == 0) {\n    iVar3 = *(int *)(*(int *)(unaff_EDI + 0x36b88f) + 8);\n    if (iVar3 == 0) {\n                    /* WARNING: Subroutine does not return */\n      FUN_002446e0(unaff_EDI + 0x1c9334,0x5c,unaff_EDI + 0x20c52f,uVar4,uVar5);\n    }\n    uVar4 = *(undefined4 *)(iVar3 + 0x27a8);\n    local_24 = FUN_003ac4d0(0x18);\n                    /* try { // try from 0027f056 to 0027f05a has its CatchHandler @ 0027f0a5 */\n    FUN_002c9940(local_24,uVar4);\n    iVar3 = FUN_002b5cd0(*(undefined4 *)(param_1 + 4));\n    if (iVar3 != 0) {\n      *(undefined1 *)(local_24 + 0x16) = 1;\n    }\n    FUN_002c9c60(local_24,uVar5);\n  }\n  else {\n    local_24 = *(int *)(*(int *)(iVar1 + 0x244) + 0x28);\n    cVar2 = FUN_0030aff0(*(int *)(unaff_EDI + 0x36b88f));\n    if (cVar2 != '\0') {\n      (**(code **)(**(int **)(iVar1 + 0x244) + 0x20))\n                (*(int **)(iVar1 + 0x244),*(undefined4 *)(param_1 + 0xc),\n                 *(undefined4 *)(param_1 + 0x14),local_24);\n    }\n    FUN_002ca1b0(local_24,uVar5);\n  }" if (parenthesized_expression "(*(int *)(iVar1 + 0x244) == 0)" ( (binary_expression "*(int *)(iVar1 + 0x244) == 0" (pointer_expression "*(int *)(iVar1 + 0x244)" * (cast_expression "(int *)(iVar1 + 0x244)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + 0x244)" ( (binary_expression "iVar1 + 0x244" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n    iVar3 = *(int *)(*(int *)(unaff_EDI + 0x36b88f) + 8);\n    if (iVar3 == 0) {\n                    /* WARNING: Subroutine does not return */\n      FUN_002446e0(unaff_EDI + 0x1c9334,0x5c,unaff_EDI + 0x20c52f,uVar4,uVar5);\n    }\n    uVar4 = *(undefined4 *)(iVar3 + 0x27a8);\n    local_24 = FUN_003ac4d0(0x18);\n                    /* try { // try from 0027f056 to 0027f05a has its CatchHandler @ 0027f0a5 */\n    FUN_002c9940(local_24,uVar4);\n    iVar3 = FUN_002b5cd0(*(undefined4 *)(param_1 + 4));\n    if (iVar3 != 0) {\n      *(undefined1 *)(local_24 + 0x16) = 1;\n    }\n    FUN_002c9c60(local_24,uVar5);\n  }" { (expression_statement "iVar3 = *(int *)(*(int *)(unaff_EDI + 0x36b88f) + 8);" (assignment_expression "iVar3 = *(int *)(*(int *)(unaff_EDI + 0x36b88f) + 8)" identifier = (pointer_expression "*(int *)(*(int *)(unaff_EDI + 0x36b88f) + 8)" * (cast_expression "(int *)(*(int *)(unaff_EDI + 0x36b88f) + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(unaff_EDI + 0x36b88f) + 8)" ( (binary_expression "*(int *)(unaff_EDI + 0x36b88f) + 8" (pointer_expression "*(int *)(unaff_EDI + 0x36b88f)" * (cast_expression "(int *)(unaff_EDI + 0x36b88f)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x36b88f)" ( (binary_expression "unaff_EDI + 0x36b88f" identifier + number_literal) )))) + number_literal) ))))) ;) (if_statement "if (iVar3 == 0) {\n                    /* WARNING: Subroutine does not return */\n      FUN_002446e0(unaff_EDI + 0x1c9334,0x5c,unaff_EDI + 0x20c52f,uVar4,uVar5);\n    }" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n      FUN_002446e0(unaff_EDI + 0x1c9334,0x5c,unaff_EDI + 0x20c52f,uVar4,uVar5);\n    }" { comment (expression_statement "FUN_002446e0(unaff_EDI + 0x1c9334,0x5c,unaff_EDI + 0x20c52f,uVar4,uVar5);" (call_expression "FUN_002446e0(unaff_EDI + 0x1c9334,0x5c,unaff_EDI + 0x20c52f,uVar4,uVar5)" identifier (argument_list "(unaff_EDI + 0x1c9334,0x5c,unaff_EDI + 0x20c52f,uVar4,uVar5)" ( (binary_expression "unaff_EDI + 0x1c9334" identifier + number_literal) , number_literal , (binary_expression "unaff_EDI + 0x20c52f" identifier + number_literal) , identifier , identifier ))) ;) })) (expression_statement "uVar4 = *(undefined4 *)(iVar3 + 0x27a8);" (assignment_expression "uVar4 = *(undefined4 *)(iVar3 + 0x27a8)" identifier = (pointer_expression "*(undefined4 *)(iVar3 + 0x27a8)" * (cast_expression "(undefined4 *)(iVar3 + 0x27a8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0x27a8)" ( (binary_expression "iVar3 + 0x27a8" identifier + number_literal) ))))) ;) (expression_statement "local_24 = FUN_003ac4d0(0x18);" (assignment_expression "local_24 = FUN_003ac4d0(0x18)" identifier = (call_expression "FUN_003ac4d0(0x18)" identifier (argument_list "(0x18)" ( number_literal )))) ;) comment (expression_statement "FUN_002c9940(local_24,uVar4);" (call_expression "FUN_002c9940(local_24,uVar4)" identifier (argument_list "(local_24,uVar4)" ( identifier , identifier ))) ;) (expression_statement "iVar3 = FUN_002b5cd0(*(undefined4 *)(param_1 + 4));" (assignment_expression "iVar3 = FUN_002b5cd0(*(undefined4 *)(param_1 + 4))" identifier = (call_expression "FUN_002b5cd0(*(undefined4 *)(param_1 + 4))" identifier (argument_list "(*(undefined4 *)(param_1 + 4))" ( (pointer_expression "*(undefined4 *)(param_1 + 4)" * (cast_expression "(undefined4 *)(param_1 + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 4)" ( (binary_expression "param_1 + 4" identifier + number_literal) )))) )))) ;) (if_statement "if (iVar3 != 0) {\n      *(undefined1 *)(local_24 + 0x16) = 1;\n    }" if (parenthesized_expression "(iVar3 != 0)" ( (binary_expression "iVar3 != 0" identifier != number_literal) )) (compound_statement "{\n      *(undefined1 *)(local_24 + 0x16) = 1;\n    }" { (expression_statement "*(undefined1 *)(local_24 + 0x16) = 1;" (assignment_expression "*(undefined1 *)(local_24 + 0x16) = 1" (pointer_expression "*(undefined1 *)(local_24 + 0x16)" * (cast_expression "(undefined1 *)(local_24 + 0x16)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_24 + 0x16)" ( (binary_expression "local_24 + 0x16" identifier + number_literal) )))) = number_literal) ;) })) (expression_statement "FUN_002c9c60(local_24,uVar5);" (call_expression "FUN_002c9c60(local_24,uVar5)" identifier (argument_list "(local_24,uVar5)" ( identifier , identifier ))) ;) }) (else_clause "else {\n    local_24 = *(int *)(*(int *)(iVar1 + 0x244) + 0x28);\n    cVar2 = FUN_0030aff0(*(int *)(unaff_EDI + 0x36b88f));\n    if (cVar2 != '\0') {\n      (**(code **)(**(int **)(iVar1 + 0x244) + 0x20))\n                (*(int **)(iVar1 + 0x244),*(undefined4 *)(param_1 + 0xc),\n                 *(undefined4 *)(param_1 + 0x14),local_24);\n    }\n    FUN_002ca1b0(local_24,uVar5);\n  }" else (compound_statement "{\n    local_24 = *(int *)(*(int *)(iVar1 + 0x244) + 0x28);\n    cVar2 = FUN_0030aff0(*(int *)(unaff_EDI + 0x36b88f));\n    if (cVar2 != '\0') {\n      (**(code **)(**(int **)(iVar1 + 0x244) + 0x20))\n                (*(int **)(iVar1 + 0x244),*(undefined4 *)(param_1 + 0xc),\n                 *(undefined4 *)(param_1 + 0x14),local_24);\n    }\n    FUN_002ca1b0(local_24,uVar5);\n  }" { (expression_statement "local_24 = *(int *)(*(int *)(iVar1 + 0x244) + 0x28);" (assignment_expression "local_24 = *(int *)(*(int *)(iVar1 + 0x244) + 0x28)" identifier = (pointer_expression "*(int *)(*(int *)(iVar1 + 0x244) + 0x28)" * (cast_expression "(int *)(*(int *)(iVar1 + 0x244) + 0x28)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(iVar1 + 0x244) + 0x28)" ( (binary_expression "*(int *)(iVar1 + 0x244) + 0x28" (pointer_expression "*(int *)(iVar1 + 0x244)" * (cast_expression "(int *)(iVar1 + 0x244)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + 0x244)" ( (binary_expression "iVar1 + 0x244" identifier + number_literal) )))) + number_literal) ))))) ;) (expression_statement "cVar2 = FUN_0030aff0(*(int *)(unaff_EDI + 0x36b88f));" (assignment_expression "cVar2 = FUN_0030aff0(*(int *)(unaff_EDI + 0x36b88f))" identifier = (call_expression "FUN_0030aff0(*(int *)(unaff_EDI + 0x36b88f))" identifier (argument_list "(*(int *)(unaff_EDI + 0x36b88f))" ( (pointer_expression "*(int *)(unaff_EDI + 0x36b88f)" * (cast_expression "(int *)(unaff_EDI + 0x36b88f)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x36b88f)" ( (binary_expression "unaff_EDI + 0x36b88f" identifier + number_literal) )))) )))) ;) (if_statement "if (cVar2 != '\0') {\n      (**(code **)(**(int **)(iVar1 + 0x244) + 0x20))\n                (*(int **)(iVar1 + 0x244),*(undefined4 *)(param_1 + 0xc),\n                 *(undefined4 *)(param_1 + 0x14),local_24);\n    }" if (parenthesized_expression "(cVar2 != '\0')" ( (binary_expression "cVar2 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      (**(code **)(**(int **)(iVar1 + 0x244) + 0x20))\n                (*(int **)(iVar1 + 0x244),*(undefined4 *)(param_1 + 0xc),\n                 *(undefined4 *)(param_1 + 0x14),local_24);\n    }" { (expression_statement "(**(code **)(**(int **)(iVar1 + 0x244) + 0x20))\n                (*(int **)(iVar1 + 0x244),*(undefined4 *)(param_1 + 0xc),\n                 *(undefined4 *)(param_1 + 0x14),local_24);" (call_expression "(**(code **)(**(int **)(iVar1 + 0x244) + 0x20))\n                (*(int **)(iVar1 + 0x244),*(undefined4 *)(param_1 + 0xc),\n                 *(undefined4 *)(param_1 + 0x14),local_24)" (parenthesized_expression "(**(code **)(**(int **)(iVar1 + 0x244) + 0x20))" ( (pointer_expression "**(code **)(**(int **)(iVar1 + 0x244) + 0x20)" * (pointer_expression "*(code **)(**(int **)(iVar1 + 0x244) + 0x20)" * (cast_expression "(code **)(**(int **)(iVar1 + 0x244) + 0x20)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(**(int **)(iVar1 + 0x244) + 0x20)" ( (binary_expression "**(int **)(iVar1 + 0x244) + 0x20" (pointer_expression "**(int **)(iVar1 + 0x244)" * (pointer_expression "*(int **)(iVar1 + 0x244)" * (cast_expression "(int **)(iVar1 + 0x244)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar1 + 0x244)" ( (binary_expression "iVar1 + 0x244" identifier + number_literal) ))))) + number_literal) ))))) )) (argument_list "(*(int **)(iVar1 + 0x244),*(undefined4 *)(param_1 + 0xc),\n                 *(undefined4 *)(param_1 + 0x14),local_24)" ( (pointer_expression "*(int **)(iVar1 + 0x244)" * (cast_expression "(int **)(iVar1 + 0x244)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar1 + 0x244)" ( (binary_expression "iVar1 + 0x244" identifier + number_literal) )))) , (pointer_expression "*(undefined4 *)(param_1 + 0xc)" * (cast_expression "(undefined4 *)(param_1 + 0xc)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) )))) , (pointer_expression "*(undefined4 *)(param_1 + 0x14)" * (cast_expression "(undefined4 *)(param_1 + 0x14)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) )))) , identifier ))) ;) })) (expression_statement "FUN_002ca1b0(local_24,uVar5);" (call_expression "FUN_002ca1b0(local_24,uVar5)" identifier (argument_list "(local_24,uVar5)" ( identifier , identifier ))) ;) }))) (expression_statement "FUN_002455d0(*(undefined4 *)(param_1 + 4),*(undefined4 *)(param_1 + 8),\n               *(undefined4 *)(param_1 + 0xc),iVar1,param_2,local_24);" (call_expression "FUN_002455d0(*(undefined4 *)(param_1 + 4),*(undefined4 *)(param_1 + 8),\n               *(undefined4 *)(param_1 + 0xc),iVar1,param_2,local_24)" identifier (argument_list "(*(undefined4 *)(param_1 + 4),*(undefined4 *)(param_1 + 8),\n               *(undefined4 *)(param_1 + 0xc),iVar1,param_2,local_24)" ( (pointer_expression "*(undefined4 *)(param_1 + 4)" * (cast_expression "(undefined4 *)(param_1 + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 4)" ( (binary_expression "param_1 + 4" identifier + number_literal) )))) , (pointer_expression "*(undefined4 *)(param_1 + 8)" * (cast_expression "(undefined4 *)(param_1 + 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) , (pointer_expression "*(undefined4 *)(param_1 + 0xc)" * (cast_expression "(undefined4 *)(param_1 + 0xc)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) )))) , identifier , identifier , identifier ))) ;) (return_statement "return;" return ;) })))
(translation_unit "/* WARNING: Enum "DT": Some values do not have unique names */\n/* WARNING: Enum "ELFOSABI": Some values do not have unique names */\n/* DWARF original prototype: void run(Layout_task_runner * this, Workqueue * workqueue, Task * task)\n    */\n\nvoid __thiscall\ngold::Layout_task_runner::run(Layout_task_runner *this,Workqueue *workqueue,Task *task)\n\n{\n  Layout *this_00;\n  General_options *pGVar1;\n  char *name;\n  bool bVar2;\n  Object_format OVar3;\n  int unaff_EDI;\n  off_t file_size;\n  char *local_2c;\n  int local_28;\n  Output_file *local_24;\n  \n  __x86_get_pc_thunk_di();\n  Symbol_table::detect_odr_violations(this->symtab_,task,(this->options_->output_).value);\n  this_00 = this->layout_;\n  file_size = Layout::finalize(this_00,this->input_objects_,this->symtab_,this->target_,task);\n  if (this->mapfile_ != (Mapfile *)0x0) {\n    Mapfile::print_discarded_sections(this->mapfile_,this->input_objects_);\n    Layout::print_to_mapfile(this_00,this->mapfile_);\n  }\n  local_2c = (char *)file_size;\n  local_28 = (int)((ulonglong)file_size >> 0x20);\n  if (this_00->incremental_base_ == (Incremental_binary *)0x0) {\n    pGVar1 = (*(Parameters **)(unaff_EDI + 0x36b88f))->options_;\n    if (pGVar1 == (General_options *)0x0) {\n                    /* WARNING: Subroutine does not return */\n      do_gold_unreachable((char *)(unaff_EDI + 0x1c9334),0x5c,(char *)(unaff_EDI + 0x20c52f));\n    }\n    name = (pGVar1->output_).value;\n    local_24 = (Output_file *)operator_new(0x18);\n                    /* try { // try from 0027f056 to 0027f05a has its CatchHandler @ 0027f0a5 */\n    Output_file::Output_file(local_24,name);\n    OVar3 = General_options::oformat_enum(this->options_);\n    if (OVar3 != OBJECT_FORMAT_ELF) {\n      local_24->is_temporary_ = true;\n    }\n    Output_file::open(local_24,local_2c,local_28);\n  }\n  else {\n    local_24 = this_00->incremental_base_->output_;\n    bVar2 = Parameters::incremental_update(*(Parameters **)(unaff_EDI + 0x36b88f));\n    if (bVar2) {\n      (*this_00->incremental_base_->_vptr_Incremental_binary[8])\n                (this_00->incremental_base_,this->symtab_,this->layout_,local_24);\n    }\n    Output_file::resize(local_24,file_size);\n  }\n  queue_final_tasks(this->options_,this->input_objects_,this->symtab_,this_00,workqueue,local_24);\n  return;\n}\n\n" comment comment comment (function_definition "void __thiscall\ngold::Layout_task_runner::run(Layout_task_runner *this,Workqueue *workqueue,Task *task)\n\n{\n  Layout *this_00;\n  General_options *pGVar1;\n  char *name;\n  bool bVar2;\n  Object_format OVar3;\n  int unaff_EDI;\n  off_t file_size;\n  char *local_2c;\n  int local_28;\n  Output_file *local_24;\n  \n  __x86_get_pc_thunk_di();\n  Symbol_table::detect_odr_violations(this->symtab_,task,(this->options_->output_).value);\n  this_00 = this->layout_;\n  file_size = Layout::finalize(this_00,this->input_objects_,this->symtab_,this->target_,task);\n  if (this->mapfile_ != (Mapfile *)0x0) {\n    Mapfile::print_discarded_sections(this->mapfile_,this->input_objects_);\n    Layout::print_to_mapfile(this_00,this->mapfile_);\n  }\n  local_2c = (char *)file_size;\n  local_28 = (int)((ulonglong)file_size >> 0x20);\n  if (this_00->incremental_base_ == (Incremental_binary *)0x0) {\n    pGVar1 = (*(Parameters **)(unaff_EDI + 0x36b88f))->options_;\n    if (pGVar1 == (General_options *)0x0) {\n                    /* WARNING: Subroutine does not return */\n      do_gold_unreachable((char *)(unaff_EDI + 0x1c9334),0x5c,(char *)(unaff_EDI + 0x20c52f));\n    }\n    name = (pGVar1->output_).value;\n    local_24 = (Output_file *)operator_new(0x18);\n                    /* try { // try from 0027f056 to 0027f05a has its CatchHandler @ 0027f0a5 */\n    Output_file::Output_file(local_24,name);\n    OVar3 = General_options::oformat_enum(this->options_);\n    if (OVar3 != OBJECT_FORMAT_ELF) {\n      local_24->is_temporary_ = true;\n    }\n    Output_file::open(local_24,local_2c,local_28);\n  }\n  else {\n    local_24 = this_00->incremental_base_->output_;\n    bVar2 = Parameters::incremental_update(*(Parameters **)(unaff_EDI + 0x36b88f));\n    if (bVar2) {\n      (*this_00->incremental_base_->_vptr_Incremental_binary[8])\n                (this_00->incremental_base_,this->symtab_,this->layout_,local_24);\n    }\n    Output_file::resize(local_24,file_size);\n  }\n  queue_final_tasks(this->options_,this->input_objects_,this->symtab_,this_00,workqueue,local_24);\n  return;\n}" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::Layout_task_runner::" identifier : : identifier : :) (function_declarator "run(Layout_task_runner *this,Workqueue *workqueue,Task *task)" identifier (parameter_list "(Layout_task_runner *this,Workqueue *workqueue,Task *task)" ( (parameter_declaration "Layout_task_runner *this" type_identifier (pointer_declarator "*this" * identifier)) , (parameter_declaration "Workqueue *workqueue" type_identifier (pointer_declarator "*workqueue" * identifier)) , (parameter_declaration "Task *task" type_identifier (pointer_declarator "*task" * identifier)) ))) (compound_statement "{\n  Layout *this_00;\n  General_options *pGVar1;\n  char *name;\n  bool bVar2;\n  Object_format OVar3;\n  int unaff_EDI;\n  off_t file_size;\n  char *local_2c;\n  int local_28;\n  Output_file *local_24;\n  \n  __x86_get_pc_thunk_di();\n  Symbol_table::detect_odr_violations(this->symtab_,task,(this->options_->output_).value);\n  this_00 = this->layout_;\n  file_size = Layout::finalize(this_00,this->input_objects_,this->symtab_,this->target_,task);\n  if (this->mapfile_ != (Mapfile *)0x0) {\n    Mapfile::print_discarded_sections(this->mapfile_,this->input_objects_);\n    Layout::print_to_mapfile(this_00,this->mapfile_);\n  }\n  local_2c = (char *)file_size;\n  local_28 = (int)((ulonglong)file_size >> 0x20);\n  if (this_00->incremental_base_ == (Incremental_binary *)0x0) {\n    pGVar1 = (*(Parameters **)(unaff_EDI + 0x36b88f))->options_;\n    if (pGVar1 == (General_options *)0x0) {\n                    /* WARNING: Subroutine does not return */\n      do_gold_unreachable((char *)(unaff_EDI + 0x1c9334),0x5c,(char *)(unaff_EDI + 0x20c52f));\n    }\n    name = (pGVar1->output_).value;\n    local_24 = (Output_file *)operator_new(0x18);\n                    /* try { // try from 0027f056 to 0027f05a has its CatchHandler @ 0027f0a5 */\n    Output_file::Output_file(local_24,name);\n    OVar3 = General_options::oformat_enum(this->options_);\n    if (OVar3 != OBJECT_FORMAT_ELF) {\n      local_24->is_temporary_ = true;\n    }\n    Output_file::open(local_24,local_2c,local_28);\n  }\n  else {\n    local_24 = this_00->incremental_base_->output_;\n    bVar2 = Parameters::incremental_update(*(Parameters **)(unaff_EDI + 0x36b88f));\n    if (bVar2) {\n      (*this_00->incremental_base_->_vptr_Incremental_binary[8])\n                (this_00->incremental_base_,this->symtab_,this->layout_,local_24);\n    }\n    Output_file::resize(local_24,file_size);\n  }\n  queue_final_tasks(this->options_,this->input_objects_,this->symtab_,this_00,workqueue,local_24);\n  return;\n}" { (declaration "Layout *this_00;" type_identifier (pointer_declarator "*this_00" * identifier) ;) (declaration "General_options *pGVar1;" type_identifier (pointer_declarator "*pGVar1" * identifier) ;) (declaration "char *name;" primitive_type (pointer_declarator "*name" * identifier) ;) (declaration "bool bVar2;" primitive_type identifier ;) (declaration "Object_format OVar3;" type_identifier identifier ;) (declaration "int unaff_EDI;" primitive_type identifier ;) (declaration "off_t file_size;" type_identifier identifier ;) (declaration "char *local_2c;" primitive_type (pointer_declarator "*local_2c" * identifier) ;) (declaration "int local_28;" primitive_type identifier ;) (declaration "Output_file *local_24;" type_identifier (pointer_declarator "*local_24" * identifier) ;) (expression_statement "__x86_get_pc_thunk_di();" (call_expression "__x86_get_pc_thunk_di()" identifier (argument_list "()" ( ))) ;) (labeled_statement "Symbol_table::detect_odr_violations(this->symtab_,task,(this->options_->output_).value);" statement_identifier : (ERROR ":" :) (expression_statement "detect_odr_violations(this->symtab_,task,(this->options_->output_).value);" (call_expression "detect_odr_violations(this->symtab_,task,(this->options_->output_).value)" identifier (argument_list "(this->symtab_,task,(this->options_->output_).value)" ( (field_expression "this->symtab_" identifier -> field_identifier) , identifier , (field_expression "(this->options_->output_).value" (parenthesized_expression "(this->options_->output_)" ( (field_expression "this->options_->output_" (field_expression "this->options_" identifier -> field_identifier) -> field_identifier) )) . field_identifier) ))) ;)) (expression_statement "this_00 = this->layout_;" (assignment_expression "this_00 = this->layout_" identifier = (field_expression "this->layout_" identifier -> field_identifier)) ;) (ERROR "file_size = Layout::" (assignment_expression "file_size = Layout" identifier = identifier) : :) (expression_statement "finalize(this_00,this->input_objects_,this->symtab_,this->target_,task);" (call_expression "finalize(this_00,this->input_objects_,this->symtab_,this->target_,task)" identifier (argument_list "(this_00,this->input_objects_,this->symtab_,this->target_,task)" ( identifier , (field_expression "this->input_objects_" identifier -> field_identifier) , (field_expression "this->symtab_" identifier -> field_identifier) , (field_expression "this->target_" identifier -> field_identifier) , identifier ))) ;) (if_statement "if (this->mapfile_ != (Mapfile *)0x0) {\n    Mapfile::print_discarded_sections(this->mapfile_,this->input_objects_);\n    Layout::print_to_mapfile(this_00,this->mapfile_);\n  }" if (parenthesized_expression "(this->mapfile_ != (Mapfile *)0x0)" ( (binary_expression "this->mapfile_ != (Mapfile *)0x0" (field_expression "this->mapfile_" identifier -> field_identifier) != (cast_expression "(Mapfile *)0x0" ( (type_descriptor "Mapfile *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    Mapfile::print_discarded_sections(this->mapfile_,this->input_objects_);\n    Layout::print_to_mapfile(this_00,this->mapfile_);\n  }" { (labeled_statement "Mapfile::print_discarded_sections(this->mapfile_,this->input_objects_);" statement_identifier : (ERROR ":" :) (expression_statement "print_discarded_sections(this->mapfile_,this->input_objects_);" (call_expression "print_discarded_sections(this->mapfile_,this->input_objects_)" identifier (argument_list "(this->mapfile_,this->input_objects_)" ( (field_expression "this->mapfile_" identifier -> field_identifier) , (field_expression "this->input_objects_" identifier -> field_identifier) ))) ;)) (labeled_statement "Layout::print_to_mapfile(this_00,this->mapfile_);" statement_identifier : (ERROR ":" :) (expression_statement "print_to_mapfile(this_00,this->mapfile_);" (call_expression "print_to_mapfile(this_00,this->mapfile_)" identifier (argument_list "(this_00,this->mapfile_)" ( identifier , (field_expression "this->mapfile_" identifier -> field_identifier) ))) ;)) })) (expression_statement "local_2c = (char *)file_size;" (assignment_expression "local_2c = (char *)file_size" identifier = (cast_expression "(char *)file_size" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "local_28 = (int)((ulonglong)file_size >> 0x20);" (assignment_expression "local_28 = (int)((ulonglong)file_size >> 0x20)" identifier = (cast_expression "(int)((ulonglong)file_size >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)file_size >> 0x20)" ( (binary_expression "(ulonglong)file_size >> 0x20" (cast_expression "(ulonglong)file_size" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) )))) ;) (if_statement "if (this_00->incremental_base_ == (Incremental_binary *)0x0) {\n    pGVar1 = (*(Parameters **)(unaff_EDI + 0x36b88f))->options_;\n    if (pGVar1 == (General_options *)0x0) {\n                    /* WARNING: Subroutine does not return */\n      do_gold_unreachable((char *)(unaff_EDI + 0x1c9334),0x5c,(char *)(unaff_EDI + 0x20c52f));\n    }\n    name = (pGVar1->output_).value;\n    local_24 = (Output_file *)operator_new(0x18);\n                    /* try { // try from 0027f056 to 0027f05a has its CatchHandler @ 0027f0a5 */\n    Output_file::Output_file(local_24,name);\n    OVar3 = General_options::oformat_enum(this->options_);\n    if (OVar3 != OBJECT_FORMAT_ELF) {\n      local_24->is_temporary_ = true;\n    }\n    Output_file::open(local_24,local_2c,local_28);\n  }\n  else {\n    local_24 = this_00->incremental_base_->output_;\n    bVar2 = Parameters::incremental_update(*(Parameters **)(unaff_EDI + 0x36b88f));\n    if (bVar2) {\n      (*this_00->incremental_base_->_vptr_Incremental_binary[8])\n                (this_00->incremental_base_,this->symtab_,this->layout_,local_24);\n    }\n    Output_file::resize(local_24,file_size);\n  }" if (parenthesized_expression "(this_00->incremental_base_ == (Incremental_binary *)0x0)" ( (binary_expression "this_00->incremental_base_ == (Incremental_binary *)0x0" (field_expression "this_00->incremental_base_" identifier -> field_identifier) == (cast_expression "(Incremental_binary *)0x0" ( (type_descriptor "Incremental_binary *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    pGVar1 = (*(Parameters **)(unaff_EDI + 0x36b88f))->options_;\n    if (pGVar1 == (General_options *)0x0) {\n                    /* WARNING: Subroutine does not return */\n      do_gold_unreachable((char *)(unaff_EDI + 0x1c9334),0x5c,(char *)(unaff_EDI + 0x20c52f));\n    }\n    name = (pGVar1->output_).value;\n    local_24 = (Output_file *)operator_new(0x18);\n                    /* try { // try from 0027f056 to 0027f05a has its CatchHandler @ 0027f0a5 */\n    Output_file::Output_file(local_24,name);\n    OVar3 = General_options::oformat_enum(this->options_);\n    if (OVar3 != OBJECT_FORMAT_ELF) {\n      local_24->is_temporary_ = true;\n    }\n    Output_file::open(local_24,local_2c,local_28);\n  }" { (expression_statement "pGVar1 = (*(Parameters **)(unaff_EDI + 0x36b88f))->options_;" (assignment_expression "pGVar1 = (*(Parameters **)(unaff_EDI + 0x36b88f))->options_" identifier = (field_expression "(*(Parameters **)(unaff_EDI + 0x36b88f))->options_" (parenthesized_expression "(*(Parameters **)(unaff_EDI + 0x36b88f))" ( (pointer_expression "*(Parameters **)(unaff_EDI + 0x36b88f)" * (cast_expression "(Parameters **)(unaff_EDI + 0x36b88f)" ( (type_descriptor "Parameters **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(unaff_EDI + 0x36b88f)" ( (binary_expression "unaff_EDI + 0x36b88f" identifier + number_literal) )))) )) -> field_identifier)) ;) (if_statement "if (pGVar1 == (General_options *)0x0) {\n                    /* WARNING: Subroutine does not return */\n      do_gold_unreachable((char *)(unaff_EDI + 0x1c9334),0x5c,(char *)(unaff_EDI + 0x20c52f));\n    }" if (parenthesized_expression "(pGVar1 == (General_options *)0x0)" ( (binary_expression "pGVar1 == (General_options *)0x0" identifier == (cast_expression "(General_options *)0x0" ( (type_descriptor "General_options *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n      do_gold_unreachable((char *)(unaff_EDI + 0x1c9334),0x5c,(char *)(unaff_EDI + 0x20c52f));\n    }" { comment (expression_statement "do_gold_unreachable((char *)(unaff_EDI + 0x1c9334),0x5c,(char *)(unaff_EDI + 0x20c52f));" (call_expression "do_gold_unreachable((char *)(unaff_EDI + 0x1c9334),0x5c,(char *)(unaff_EDI + 0x20c52f))" identifier (argument_list "((char *)(unaff_EDI + 0x1c9334),0x5c,(char *)(unaff_EDI + 0x20c52f))" ( (cast_expression "(char *)(unaff_EDI + 0x1c9334)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x1c9334)" ( (binary_expression "unaff_EDI + 0x1c9334" identifier + number_literal) ))) , number_literal , (cast_expression "(char *)(unaff_EDI + 0x20c52f)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x20c52f)" ( (binary_expression "unaff_EDI + 0x20c52f" identifier + number_literal) ))) ))) ;) })) (expression_statement "name = (pGVar1->output_).value;" (assignment_expression "name = (pGVar1->output_).value" identifier = (field_expression "(pGVar1->output_).value" (parenthesized_expression "(pGVar1->output_)" ( (field_expression "pGVar1->output_" identifier -> field_identifier) )) . field_identifier)) ;) (expression_statement "local_24 = (Output_file *)operator_new(0x18);" (assignment_expression "local_24 = (Output_file *)operator_new(0x18)" identifier = (cast_expression "(Output_file *)operator_new(0x18)" ( (type_descriptor "Output_file *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "operator_new(0x18)" identifier (argument_list "(0x18)" ( number_literal ))))) ;) comment (labeled_statement "Output_file::Output_file(local_24,name);" statement_identifier : (ERROR ":" :) (expression_statement "Output_file(local_24,name);" (call_expression "Output_file(local_24,name)" identifier (argument_list "(local_24,name)" ( identifier , identifier ))) ;)) (ERROR "OVar3 = General_options::" (assignment_expression "OVar3 = General_options" identifier = identifier) : :) (expression_statement "oformat_enum(this->options_);" (call_expression "oformat_enum(this->options_)" identifier (argument_list "(this->options_)" ( (field_expression "this->options_" identifier -> field_identifier) ))) ;) (if_statement "if (OVar3 != OBJECT_FORMAT_ELF) {\n      local_24->is_temporary_ = true;\n    }" if (parenthesized_expression "(OVar3 != OBJECT_FORMAT_ELF)" ( (binary_expression "OVar3 != OBJECT_FORMAT_ELF" identifier != identifier) )) (compound_statement "{\n      local_24->is_temporary_ = true;\n    }" { (expression_statement "local_24->is_temporary_ = true;" (assignment_expression "local_24->is_temporary_ = true" (field_expression "local_24->is_temporary_" identifier -> field_identifier) = true) ;) })) (labeled_statement "Output_file::open(local_24,local_2c,local_28);" statement_identifier : (ERROR ":" :) (expression_statement "open(local_24,local_2c,local_28);" (call_expression "open(local_24,local_2c,local_28)" identifier (argument_list "(local_24,local_2c,local_28)" ( identifier , identifier , identifier ))) ;)) }) (else_clause "else {\n    local_24 = this_00->incremental_base_->output_;\n    bVar2 = Parameters::incremental_update(*(Parameters **)(unaff_EDI + 0x36b88f));\n    if (bVar2) {\n      (*this_00->incremental_base_->_vptr_Incremental_binary[8])\n                (this_00->incremental_base_,this->symtab_,this->layout_,local_24);\n    }\n    Output_file::resize(local_24,file_size);\n  }" else (compound_statement "{\n    local_24 = this_00->incremental_base_->output_;\n    bVar2 = Parameters::incremental_update(*(Parameters **)(unaff_EDI + 0x36b88f));\n    if (bVar2) {\n      (*this_00->incremental_base_->_vptr_Incremental_binary[8])\n                (this_00->incremental_base_,this->symtab_,this->layout_,local_24);\n    }\n    Output_file::resize(local_24,file_size);\n  }" { (expression_statement "local_24 = this_00->incremental_base_->output_;" (assignment_expression "local_24 = this_00->incremental_base_->output_" identifier = (field_expression "this_00->incremental_base_->output_" (field_expression "this_00->incremental_base_" identifier -> field_identifier) -> field_identifier)) ;) (ERROR "bVar2 = Parameters::" (assignment_expression "bVar2 = Parameters" identifier = identifier) : :) (expression_statement "incremental_update(*(Parameters **)(unaff_EDI + 0x36b88f));" (call_expression "incremental_update(*(Parameters **)(unaff_EDI + 0x36b88f))" identifier (argument_list "(*(Parameters **)(unaff_EDI + 0x36b88f))" ( (pointer_expression "*(Parameters **)(unaff_EDI + 0x36b88f)" * (cast_expression "(Parameters **)(unaff_EDI + 0x36b88f)" ( (type_descriptor "Parameters **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(unaff_EDI + 0x36b88f)" ( (binary_expression "unaff_EDI + 0x36b88f" identifier + number_literal) )))) ))) ;) (if_statement "if (bVar2) {\n      (*this_00->incremental_base_->_vptr_Incremental_binary[8])\n                (this_00->incremental_base_,this->symtab_,this->layout_,local_24);\n    }" if (parenthesized_expression "(bVar2)" ( identifier )) (compound_statement "{\n      (*this_00->incremental_base_->_vptr_Incremental_binary[8])\n                (this_00->incremental_base_,this->symtab_,this->layout_,local_24);\n    }" { (expression_statement "(*this_00->incremental_base_->_vptr_Incremental_binary[8])\n                (this_00->incremental_base_,this->symtab_,this->layout_,local_24);" (call_expression "(*this_00->incremental_base_->_vptr_Incremental_binary[8])\n                (this_00->incremental_base_,this->symtab_,this->layout_,local_24)" (parenthesized_expression "(*this_00->incremental_base_->_vptr_Incremental_binary[8])" ( (pointer_expression "*this_00->incremental_base_->_vptr_Incremental_binary[8]" * (subscript_expression "this_00->incremental_base_->_vptr_Incremental_binary[8]" (field_expression "this_00->incremental_base_->_vptr_Incremental_binary" (field_expression "this_00->incremental_base_" identifier -> field_identifier) -> field_identifier) [ number_literal ])) )) (argument_list "(this_00->incremental_base_,this->symtab_,this->layout_,local_24)" ( (field_expression "this_00->incremental_base_" identifier -> field_identifier) , (field_expression "this->symtab_" identifier -> field_identifier) , (field_expression "this->layout_" identifier -> field_identifier) , identifier ))) ;) })) (labeled_statement "Output_file::resize(local_24,file_size);" statement_identifier : (ERROR ":" :) (expression_statement "resize(local_24,file_size);" (call_expression "resize(local_24,file_size)" identifier (argument_list "(local_24,file_size)" ( identifier , identifier ))) ;)) }))) (expression_statement "queue_final_tasks(this->options_,this->input_objects_,this->symtab_,this_00,workqueue,local_24);" (call_expression "queue_final_tasks(this->options_,this->input_objects_,this->symtab_,this_00,workqueue,local_24)" identifier (argument_list "(this->options_,this->input_objects_,this->symtab_,this_00,workqueue,local_24)" ( (field_expression "this->options_" identifier -> field_identifier) , (field_expression "this->input_objects_" identifier -> field_identifier) , (field_expression "this->symtab_" identifier -> field_identifier) , identifier , identifier , identifier ))) ;) (return_statement "return;" return ;) })))
(translation_unit "void FUN_0027ef30(int param_1,undefined4 param_2,undefined4 param_3)\n\n{\n  int iVar1;\n  char cVar2;\n  int iVar3;\n  undefined4 extraout_ECX;\n  undefined4 extraout_ECX_00;\n  undefined4 uVar4;\n  int unaff_EDI;\n  undefined8 uVar5;\n  int local_24;\n  \n  FUN_00074f0a();\n  FUN_0034fcb0(*(undefined4 *)(param_1 + 0xc),param_3,\n               *(undefined4 *)(*(int *)(param_1 + 4) + 0x27a8));\n  iVar1 = *(int *)(param_1 + 0x14);\n  uVar5 = FUN_0027df90(iVar1,*(undefined4 *)(param_1 + 8),*(undefined4 *)(param_1 + 0xc),\n                       *(undefined4 *)(param_1 + 0x10),param_3);\n  uVar4 = extraout_ECX;\n  if (*(int *)(param_1 + 0x18) != 0) {\n    FUN_0028aa20(*(int *)(param_1 + 0x18),*(undefined4 *)(param_1 + 8));\n    FUN_002747f0(iVar1,*(undefined4 *)(param_1 + 0x18));\n    uVar4 = extraout_ECX_00;\n  }\n  if (*(int *)(iVar1 + 0x244) == 0) {\n    iVar3 = *(int *)(*(int *)(unaff_EDI + 0x36b88f) + 8);\n    if (iVar3 == 0) {\n                    \n      FUN_002446e0(unaff_EDI + 0x1c9334,0x5c,unaff_EDI + 0x20c52f,uVar4,uVar5);\n    }\n    uVar4 = *(undefined4 *)(iVar3 + 0x27a8);\n    local_24 = FUN_003ac4d0(0x18);\n                    \n    FUN_002c9940(local_24,uVar4);\n    iVar3 = FUN_002b5cd0(*(undefined4 *)(param_1 + 4));\n    if (iVar3 != 0) {\n      *(undefined1 *)(local_24 + 0x16) = 1;\n    }\n    FUN_002c9c60(local_24,uVar5);\n  }\n  else {\n    local_24 = *(int *)(*(int *)(iVar1 + 0x244) + 0x28);\n    cVar2 = FUN_0030aff0(*(int *)(unaff_EDI + 0x36b88f));\n    if (cVar2 != '\0') {\n      (**(code **)(**(int **)(iVar1 + 0x244) + 0x20))\n                (*(int **)(iVar1 + 0x244),*(undefined4 *)(param_1 + 0xc),\n                 *(undefined4 *)(param_1 + 0x14),local_24);\n    }\n    FUN_002ca1b0(local_24,uVar5);\n  }\n  FUN_002455d0(*(undefined4 *)(param_1 + 4),*(undefined4 *)(param_1 + 8),\n               *(undefined4 *)(param_1 + 0xc),iVar1,param_2,local_24);\n  return;\n}\n\n" (function_definition "void FUN_0027ef30(int param_1,undefined4 param_2,undefined4 param_3)\n\n{\n  int iVar1;\n  char cVar2;\n  int iVar3;\n  undefined4 extraout_ECX;\n  undefined4 extraout_ECX_00;\n  undefined4 uVar4;\n  int unaff_EDI;\n  undefined8 uVar5;\n  int local_24;\n  \n  FUN_00074f0a();\n  FUN_0034fcb0(*(undefined4 *)(param_1 + 0xc),param_3,\n               *(undefined4 *)(*(int *)(param_1 + 4) + 0x27a8));\n  iVar1 = *(int *)(param_1 + 0x14);\n  uVar5 = FUN_0027df90(iVar1,*(undefined4 *)(param_1 + 8),*(undefined4 *)(param_1 + 0xc),\n                       *(undefined4 *)(param_1 + 0x10),param_3);\n  uVar4 = extraout_ECX;\n  if (*(int *)(param_1 + 0x18) != 0) {\n    FUN_0028aa20(*(int *)(param_1 + 0x18),*(undefined4 *)(param_1 + 8));\n    FUN_002747f0(iVar1,*(undefined4 *)(param_1 + 0x18));\n    uVar4 = extraout_ECX_00;\n  }\n  if (*(int *)(iVar1 + 0x244) == 0) {\n    iVar3 = *(int *)(*(int *)(unaff_EDI + 0x36b88f) + 8);\n    if (iVar3 == 0) {\n                    \n      FUN_002446e0(unaff_EDI + 0x1c9334,0x5c,unaff_EDI + 0x20c52f,uVar4,uVar5);\n    }\n    uVar4 = *(undefined4 *)(iVar3 + 0x27a8);\n    local_24 = FUN_003ac4d0(0x18);\n                    \n    FUN_002c9940(local_24,uVar4);\n    iVar3 = FUN_002b5cd0(*(undefined4 *)(param_1 + 4));\n    if (iVar3 != 0) {\n      *(undefined1 *)(local_24 + 0x16) = 1;\n    }\n    FUN_002c9c60(local_24,uVar5);\n  }\n  else {\n    local_24 = *(int *)(*(int *)(iVar1 + 0x244) + 0x28);\n    cVar2 = FUN_0030aff0(*(int *)(unaff_EDI + 0x36b88f));\n    if (cVar2 != '\0') {\n      (**(code **)(**(int **)(iVar1 + 0x244) + 0x20))\n                (*(int **)(iVar1 + 0x244),*(undefined4 *)(param_1 + 0xc),\n                 *(undefined4 *)(param_1 + 0x14),local_24);\n    }\n    FUN_002ca1b0(local_24,uVar5);\n  }\n  FUN_002455d0(*(undefined4 *)(param_1 + 4),*(undefined4 *)(param_1 + 8),\n               *(undefined4 *)(param_1 + 0xc),iVar1,param_2,local_24);\n  return;\n}" primitive_type (function_declarator "FUN_0027ef30(int param_1,undefined4 param_2,undefined4 param_3)" identifier (parameter_list "(int param_1,undefined4 param_2,undefined4 param_3)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "undefined4 param_2" type_identifier identifier) , (parameter_declaration "undefined4 param_3" type_identifier identifier) ))) (compound_statement "{\n  int iVar1;\n  char cVar2;\n  int iVar3;\n  undefined4 extraout_ECX;\n  undefined4 extraout_ECX_00;\n  undefined4 uVar4;\n  int unaff_EDI;\n  undefined8 uVar5;\n  int local_24;\n  \n  FUN_00074f0a();\n  FUN_0034fcb0(*(undefined4 *)(param_1 + 0xc),param_3,\n               *(undefined4 *)(*(int *)(param_1 + 4) + 0x27a8));\n  iVar1 = *(int *)(param_1 + 0x14);\n  uVar5 = FUN_0027df90(iVar1,*(undefined4 *)(param_1 + 8),*(undefined4 *)(param_1 + 0xc),\n                       *(undefined4 *)(param_1 + 0x10),param_3);\n  uVar4 = extraout_ECX;\n  if (*(int *)(param_1 + 0x18) != 0) {\n    FUN_0028aa20(*(int *)(param_1 + 0x18),*(undefined4 *)(param_1 + 8));\n    FUN_002747f0(iVar1,*(undefined4 *)(param_1 + 0x18));\n    uVar4 = extraout_ECX_00;\n  }\n  if (*(int *)(iVar1 + 0x244) == 0) {\n    iVar3 = *(int *)(*(int *)(unaff_EDI + 0x36b88f) + 8);\n    if (iVar3 == 0) {\n                    \n      FUN_002446e0(unaff_EDI + 0x1c9334,0x5c,unaff_EDI + 0x20c52f,uVar4,uVar5);\n    }\n    uVar4 = *(undefined4 *)(iVar3 + 0x27a8);\n    local_24 = FUN_003ac4d0(0x18);\n                    \n    FUN_002c9940(local_24,uVar4);\n    iVar3 = FUN_002b5cd0(*(undefined4 *)(param_1 + 4));\n    if (iVar3 != 0) {\n      *(undefined1 *)(local_24 + 0x16) = 1;\n    }\n    FUN_002c9c60(local_24,uVar5);\n  }\n  else {\n    local_24 = *(int *)(*(int *)(iVar1 + 0x244) + 0x28);\n    cVar2 = FUN_0030aff0(*(int *)(unaff_EDI + 0x36b88f));\n    if (cVar2 != '\0') {\n      (**(code **)(**(int **)(iVar1 + 0x244) + 0x20))\n                (*(int **)(iVar1 + 0x244),*(undefined4 *)(param_1 + 0xc),\n                 *(undefined4 *)(param_1 + 0x14),local_24);\n    }\n    FUN_002ca1b0(local_24,uVar5);\n  }\n  FUN_002455d0(*(undefined4 *)(param_1 + 4),*(undefined4 *)(param_1 + 8),\n               *(undefined4 *)(param_1 + 0xc),iVar1,param_2,local_24);\n  return;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "char cVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "undefined4 extraout_ECX;" type_identifier identifier ;) (declaration "undefined4 extraout_ECX_00;" type_identifier identifier ;) (declaration "undefined4 uVar4;" type_identifier identifier ;) (declaration "int unaff_EDI;" primitive_type identifier ;) (declaration "undefined8 uVar5;" type_identifier identifier ;) (declaration "int local_24;" primitive_type identifier ;) (expression_statement "FUN_00074f0a();" (call_expression "FUN_00074f0a()" identifier (argument_list "()" ( ))) ;) (expression_statement "FUN_0034fcb0(*(undefined4 *)(param_1 + 0xc),param_3,\n               *(undefined4 *)(*(int *)(param_1 + 4) + 0x27a8));" (call_expression "FUN_0034fcb0(*(undefined4 *)(param_1 + 0xc),param_3,\n               *(undefined4 *)(*(int *)(param_1 + 4) + 0x27a8))" identifier (argument_list "(*(undefined4 *)(param_1 + 0xc),param_3,\n               *(undefined4 *)(*(int *)(param_1 + 4) + 0x27a8))" ( (pointer_expression "*(undefined4 *)(param_1 + 0xc)" * (cast_expression "(undefined4 *)(param_1 + 0xc)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) )))) , identifier , (pointer_expression "*(undefined4 *)(*(int *)(param_1 + 4) + 0x27a8)" * (cast_expression "(undefined4 *)(*(int *)(param_1 + 4) + 0x27a8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 4) + 0x27a8)" ( (binary_expression "*(int *)(param_1 + 4) + 0x27a8" (pointer_expression "*(int *)(param_1 + 4)" * (cast_expression "(int *)(param_1 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 4)" ( (binary_expression "param_1 + 4" identifier + number_literal) )))) + number_literal) )))) ))) ;) (expression_statement "iVar1 = *(int *)(param_1 + 0x14);" (assignment_expression "iVar1 = *(int *)(param_1 + 0x14)" identifier = (pointer_expression "*(int *)(param_1 + 0x14)" * (cast_expression "(int *)(param_1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) ))))) ;) (expression_statement "uVar5 = FUN_0027df90(iVar1,*(undefined4 *)(param_1 + 8),*(undefined4 *)(param_1 + 0xc),\n                       *(undefined4 *)(param_1 + 0x10),param_3);" (assignment_expression "uVar5 = FUN_0027df90(iVar1,*(undefined4 *)(param_1 + 8),*(undefined4 *)(param_1 + 0xc),\n                       *(undefined4 *)(param_1 + 0x10),param_3)" identifier = (call_expression "FUN_0027df90(iVar1,*(undefined4 *)(param_1 + 8),*(undefined4 *)(param_1 + 0xc),\n                       *(undefined4 *)(param_1 + 0x10),param_3)" identifier (argument_list "(iVar1,*(undefined4 *)(param_1 + 8),*(undefined4 *)(param_1 + 0xc),\n                       *(undefined4 *)(param_1 + 0x10),param_3)" ( identifier , (pointer_expression "*(undefined4 *)(param_1 + 8)" * (cast_expression "(undefined4 *)(param_1 + 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) , (pointer_expression "*(undefined4 *)(param_1 + 0xc)" * (cast_expression "(undefined4 *)(param_1 + 0xc)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) )))) , (pointer_expression "*(undefined4 *)(param_1 + 0x10)" * (cast_expression "(undefined4 *)(param_1 + 0x10)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) )))) , identifier )))) ;) (expression_statement "uVar4 = extraout_ECX;" (assignment_expression "uVar4 = extraout_ECX" identifier = identifier) ;) (if_statement "if (*(int *)(param_1 + 0x18) != 0) {\n    FUN_0028aa20(*(int *)(param_1 + 0x18),*(undefined4 *)(param_1 + 8));\n    FUN_002747f0(iVar1,*(undefined4 *)(param_1 + 0x18));\n    uVar4 = extraout_ECX_00;\n  }" if (parenthesized_expression "(*(int *)(param_1 + 0x18) != 0)" ( (binary_expression "*(int *)(param_1 + 0x18) != 0" (pointer_expression "*(int *)(param_1 + 0x18)" * (cast_expression "(int *)(param_1 + 0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n    FUN_0028aa20(*(int *)(param_1 + 0x18),*(undefined4 *)(param_1 + 8));\n    FUN_002747f0(iVar1,*(undefined4 *)(param_1 + 0x18));\n    uVar4 = extraout_ECX_00;\n  }" { (expression_statement "FUN_0028aa20(*(int *)(param_1 + 0x18),*(undefined4 *)(param_1 + 8));" (call_expression "FUN_0028aa20(*(int *)(param_1 + 0x18),*(undefined4 *)(param_1 + 8))" identifier (argument_list "(*(int *)(param_1 + 0x18),*(undefined4 *)(param_1 + 8))" ( (pointer_expression "*(int *)(param_1 + 0x18)" * (cast_expression "(int *)(param_1 + 0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) )))) , (pointer_expression "*(undefined4 *)(param_1 + 8)" * (cast_expression "(undefined4 *)(param_1 + 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) ))) ;) (expression_statement "FUN_002747f0(iVar1,*(undefined4 *)(param_1 + 0x18));" (call_expression "FUN_002747f0(iVar1,*(undefined4 *)(param_1 + 0x18))" identifier (argument_list "(iVar1,*(undefined4 *)(param_1 + 0x18))" ( identifier , (pointer_expression "*(undefined4 *)(param_1 + 0x18)" * (cast_expression "(undefined4 *)(param_1 + 0x18)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) )))) ))) ;) (expression_statement "uVar4 = extraout_ECX_00;" (assignment_expression "uVar4 = extraout_ECX_00" identifier = identifier) ;) })) (if_statement "if (*(int *)(iVar1 + 0x244) == 0) {\n    iVar3 = *(int *)(*(int *)(unaff_EDI + 0x36b88f) + 8);\n    if (iVar3 == 0) {\n                    \n      FUN_002446e0(unaff_EDI + 0x1c9334,0x5c,unaff_EDI + 0x20c52f,uVar4,uVar5);\n    }\n    uVar4 = *(undefined4 *)(iVar3 + 0x27a8);\n    local_24 = FUN_003ac4d0(0x18);\n                    \n    FUN_002c9940(local_24,uVar4);\n    iVar3 = FUN_002b5cd0(*(undefined4 *)(param_1 + 4));\n    if (iVar3 != 0) {\n      *(undefined1 *)(local_24 + 0x16) = 1;\n    }\n    FUN_002c9c60(local_24,uVar5);\n  }\n  else {\n    local_24 = *(int *)(*(int *)(iVar1 + 0x244) + 0x28);\n    cVar2 = FUN_0030aff0(*(int *)(unaff_EDI + 0x36b88f));\n    if (cVar2 != '\0') {\n      (**(code **)(**(int **)(iVar1 + 0x244) + 0x20))\n                (*(int **)(iVar1 + 0x244),*(undefined4 *)(param_1 + 0xc),\n                 *(undefined4 *)(param_1 + 0x14),local_24);\n    }\n    FUN_002ca1b0(local_24,uVar5);\n  }" if (parenthesized_expression "(*(int *)(iVar1 + 0x244) == 0)" ( (binary_expression "*(int *)(iVar1 + 0x244) == 0" (pointer_expression "*(int *)(iVar1 + 0x244)" * (cast_expression "(int *)(iVar1 + 0x244)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + 0x244)" ( (binary_expression "iVar1 + 0x244" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n    iVar3 = *(int *)(*(int *)(unaff_EDI + 0x36b88f) + 8);\n    if (iVar3 == 0) {\n                    \n      FUN_002446e0(unaff_EDI + 0x1c9334,0x5c,unaff_EDI + 0x20c52f,uVar4,uVar5);\n    }\n    uVar4 = *(undefined4 *)(iVar3 + 0x27a8);\n    local_24 = FUN_003ac4d0(0x18);\n                    \n    FUN_002c9940(local_24,uVar4);\n    iVar3 = FUN_002b5cd0(*(undefined4 *)(param_1 + 4));\n    if (iVar3 != 0) {\n      *(undefined1 *)(local_24 + 0x16) = 1;\n    }\n    FUN_002c9c60(local_24,uVar5);\n  }" { (expression_statement "iVar3 = *(int *)(*(int *)(unaff_EDI + 0x36b88f) + 8);" (assignment_expression "iVar3 = *(int *)(*(int *)(unaff_EDI + 0x36b88f) + 8)" identifier = (pointer_expression "*(int *)(*(int *)(unaff_EDI + 0x36b88f) + 8)" * (cast_expression "(int *)(*(int *)(unaff_EDI + 0x36b88f) + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(unaff_EDI + 0x36b88f) + 8)" ( (binary_expression "*(int *)(unaff_EDI + 0x36b88f) + 8" (pointer_expression "*(int *)(unaff_EDI + 0x36b88f)" * (cast_expression "(int *)(unaff_EDI + 0x36b88f)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x36b88f)" ( (binary_expression "unaff_EDI + 0x36b88f" identifier + number_literal) )))) + number_literal) ))))) ;) (if_statement "if (iVar3 == 0) {\n                    \n      FUN_002446e0(unaff_EDI + 0x1c9334,0x5c,unaff_EDI + 0x20c52f,uVar4,uVar5);\n    }" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (compound_statement "{\n                    \n      FUN_002446e0(unaff_EDI + 0x1c9334,0x5c,unaff_EDI + 0x20c52f,uVar4,uVar5);\n    }" { (expression_statement "FUN_002446e0(unaff_EDI + 0x1c9334,0x5c,unaff_EDI + 0x20c52f,uVar4,uVar5);" (call_expression "FUN_002446e0(unaff_EDI + 0x1c9334,0x5c,unaff_EDI + 0x20c52f,uVar4,uVar5)" identifier (argument_list "(unaff_EDI + 0x1c9334,0x5c,unaff_EDI + 0x20c52f,uVar4,uVar5)" ( (binary_expression "unaff_EDI + 0x1c9334" identifier + number_literal) , number_literal , (binary_expression "unaff_EDI + 0x20c52f" identifier + number_literal) , identifier , identifier ))) ;) })) (expression_statement "uVar4 = *(undefined4 *)(iVar3 + 0x27a8);" (assignment_expression "uVar4 = *(undefined4 *)(iVar3 + 0x27a8)" identifier = (pointer_expression "*(undefined4 *)(iVar3 + 0x27a8)" * (cast_expression "(undefined4 *)(iVar3 + 0x27a8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0x27a8)" ( (binary_expression "iVar3 + 0x27a8" identifier + number_literal) ))))) ;) (expression_statement "local_24 = FUN_003ac4d0(0x18);" (assignment_expression "local_24 = FUN_003ac4d0(0x18)" identifier = (call_expression "FUN_003ac4d0(0x18)" identifier (argument_list "(0x18)" ( number_literal )))) ;) (expression_statement "FUN_002c9940(local_24,uVar4);" (call_expression "FUN_002c9940(local_24,uVar4)" identifier (argument_list "(local_24,uVar4)" ( identifier , identifier ))) ;) (expression_statement "iVar3 = FUN_002b5cd0(*(undefined4 *)(param_1 + 4));" (assignment_expression "iVar3 = FUN_002b5cd0(*(undefined4 *)(param_1 + 4))" identifier = (call_expression "FUN_002b5cd0(*(undefined4 *)(param_1 + 4))" identifier (argument_list "(*(undefined4 *)(param_1 + 4))" ( (pointer_expression "*(undefined4 *)(param_1 + 4)" * (cast_expression "(undefined4 *)(param_1 + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 4)" ( (binary_expression "param_1 + 4" identifier + number_literal) )))) )))) ;) (if_statement "if (iVar3 != 0) {\n      *(undefined1 *)(local_24 + 0x16) = 1;\n    }" if (parenthesized_expression "(iVar3 != 0)" ( (binary_expression "iVar3 != 0" identifier != number_literal) )) (compound_statement "{\n      *(undefined1 *)(local_24 + 0x16) = 1;\n    }" { (expression_statement "*(undefined1 *)(local_24 + 0x16) = 1;" (assignment_expression "*(undefined1 *)(local_24 + 0x16) = 1" (pointer_expression "*(undefined1 *)(local_24 + 0x16)" * (cast_expression "(undefined1 *)(local_24 + 0x16)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_24 + 0x16)" ( (binary_expression "local_24 + 0x16" identifier + number_literal) )))) = number_literal) ;) })) (expression_statement "FUN_002c9c60(local_24,uVar5);" (call_expression "FUN_002c9c60(local_24,uVar5)" identifier (argument_list "(local_24,uVar5)" ( identifier , identifier ))) ;) }) (else_clause "else {\n    local_24 = *(int *)(*(int *)(iVar1 + 0x244) + 0x28);\n    cVar2 = FUN_0030aff0(*(int *)(unaff_EDI + 0x36b88f));\n    if (cVar2 != '\0') {\n      (**(code **)(**(int **)(iVar1 + 0x244) + 0x20))\n                (*(int **)(iVar1 + 0x244),*(undefined4 *)(param_1 + 0xc),\n                 *(undefined4 *)(param_1 + 0x14),local_24);\n    }\n    FUN_002ca1b0(local_24,uVar5);\n  }" else (compound_statement "{\n    local_24 = *(int *)(*(int *)(iVar1 + 0x244) + 0x28);\n    cVar2 = FUN_0030aff0(*(int *)(unaff_EDI + 0x36b88f));\n    if (cVar2 != '\0') {\n      (**(code **)(**(int **)(iVar1 + 0x244) + 0x20))\n                (*(int **)(iVar1 + 0x244),*(undefined4 *)(param_1 + 0xc),\n                 *(undefined4 *)(param_1 + 0x14),local_24);\n    }\n    FUN_002ca1b0(local_24,uVar5);\n  }" { (expression_statement "local_24 = *(int *)(*(int *)(iVar1 + 0x244) + 0x28);" (assignment_expression "local_24 = *(int *)(*(int *)(iVar1 + 0x244) + 0x28)" identifier = (pointer_expression "*(int *)(*(int *)(iVar1 + 0x244) + 0x28)" * (cast_expression "(int *)(*(int *)(iVar1 + 0x244) + 0x28)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(iVar1 + 0x244) + 0x28)" ( (binary_expression "*(int *)(iVar1 + 0x244) + 0x28" (pointer_expression "*(int *)(iVar1 + 0x244)" * (cast_expression "(int *)(iVar1 + 0x244)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + 0x244)" ( (binary_expression "iVar1 + 0x244" identifier + number_literal) )))) + number_literal) ))))) ;) (expression_statement "cVar2 = FUN_0030aff0(*(int *)(unaff_EDI + 0x36b88f));" (assignment_expression "cVar2 = FUN_0030aff0(*(int *)(unaff_EDI + 0x36b88f))" identifier = (call_expression "FUN_0030aff0(*(int *)(unaff_EDI + 0x36b88f))" identifier (argument_list "(*(int *)(unaff_EDI + 0x36b88f))" ( (pointer_expression "*(int *)(unaff_EDI + 0x36b88f)" * (cast_expression "(int *)(unaff_EDI + 0x36b88f)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x36b88f)" ( (binary_expression "unaff_EDI + 0x36b88f" identifier + number_literal) )))) )))) ;) (if_statement "if (cVar2 != '\0') {\n      (**(code **)(**(int **)(iVar1 + 0x244) + 0x20))\n                (*(int **)(iVar1 + 0x244),*(undefined4 *)(param_1 + 0xc),\n                 *(undefined4 *)(param_1 + 0x14),local_24);\n    }" if (parenthesized_expression "(cVar2 != '\0')" ( (binary_expression "cVar2 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      (**(code **)(**(int **)(iVar1 + 0x244) + 0x20))\n                (*(int **)(iVar1 + 0x244),*(undefined4 *)(param_1 + 0xc),\n                 *(undefined4 *)(param_1 + 0x14),local_24);\n    }" { (expression_statement "(**(code **)(**(int **)(iVar1 + 0x244) + 0x20))\n                (*(int **)(iVar1 + 0x244),*(undefined4 *)(param_1 + 0xc),\n                 *(undefined4 *)(param_1 + 0x14),local_24);" (call_expression "(**(code **)(**(int **)(iVar1 + 0x244) + 0x20))\n                (*(int **)(iVar1 + 0x244),*(undefined4 *)(param_1 + 0xc),\n                 *(undefined4 *)(param_1 + 0x14),local_24)" (parenthesized_expression "(**(code **)(**(int **)(iVar1 + 0x244) + 0x20))" ( (pointer_expression "**(code **)(**(int **)(iVar1 + 0x244) + 0x20)" * (pointer_expression "*(code **)(**(int **)(iVar1 + 0x244) + 0x20)" * (cast_expression "(code **)(**(int **)(iVar1 + 0x244) + 0x20)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(**(int **)(iVar1 + 0x244) + 0x20)" ( (binary_expression "**(int **)(iVar1 + 0x244) + 0x20" (pointer_expression "**(int **)(iVar1 + 0x244)" * (pointer_expression "*(int **)(iVar1 + 0x244)" * (cast_expression "(int **)(iVar1 + 0x244)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar1 + 0x244)" ( (binary_expression "iVar1 + 0x244" identifier + number_literal) ))))) + number_literal) ))))) )) (argument_list "(*(int **)(iVar1 + 0x244),*(undefined4 *)(param_1 + 0xc),\n                 *(undefined4 *)(param_1 + 0x14),local_24)" ( (pointer_expression "*(int **)(iVar1 + 0x244)" * (cast_expression "(int **)(iVar1 + 0x244)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar1 + 0x244)" ( (binary_expression "iVar1 + 0x244" identifier + number_literal) )))) , (pointer_expression "*(undefined4 *)(param_1 + 0xc)" * (cast_expression "(undefined4 *)(param_1 + 0xc)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) )))) , (pointer_expression "*(undefined4 *)(param_1 + 0x14)" * (cast_expression "(undefined4 *)(param_1 + 0x14)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) )))) , identifier ))) ;) })) (expression_statement "FUN_002ca1b0(local_24,uVar5);" (call_expression "FUN_002ca1b0(local_24,uVar5)" identifier (argument_list "(local_24,uVar5)" ( identifier , identifier ))) ;) }))) (expression_statement "FUN_002455d0(*(undefined4 *)(param_1 + 4),*(undefined4 *)(param_1 + 8),\n               *(undefined4 *)(param_1 + 0xc),iVar1,param_2,local_24);" (call_expression "FUN_002455d0(*(undefined4 *)(param_1 + 4),*(undefined4 *)(param_1 + 8),\n               *(undefined4 *)(param_1 + 0xc),iVar1,param_2,local_24)" identifier (argument_list "(*(undefined4 *)(param_1 + 4),*(undefined4 *)(param_1 + 8),\n               *(undefined4 *)(param_1 + 0xc),iVar1,param_2,local_24)" ( (pointer_expression "*(undefined4 *)(param_1 + 4)" * (cast_expression "(undefined4 *)(param_1 + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 4)" ( (binary_expression "param_1 + 4" identifier + number_literal) )))) , (pointer_expression "*(undefined4 *)(param_1 + 8)" * (cast_expression "(undefined4 *)(param_1 + 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) , (pointer_expression "*(undefined4 *)(param_1 + 0xc)" * (cast_expression "(undefined4 *)(param_1 + 0xc)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) )))) , identifier , identifier , identifier ))) ;) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (expression_statement (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) , IDENT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) )))) ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) , IDENT )))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , LIT , (binary_expression IDENT + LIT) , IDENT , IDENT ))) ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) })) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) + LIT) ))))) )) (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) , IDENT ))) ;) })) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) }))) (expression_statement (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) , IDENT , IDENT , IDENT ))) ;) (return_statement return ;) })))
(function_definition "void FUN_0027ef30(int param_1,undefined4 param_2,undefined4 param_3)\n\n{\n  int iVar1;\n  char cVar2;\n  int iVar3;\n  undefined4 extraout_ECX;\n  undefined4 extraout_ECX_00;\n  undefined4 uVar4;\n  int unaff_EDI;\n  undefined8 uVar5;\n  int local_24;\n  \n  FUN_00074f0a();\n  FUN_0034fcb0(*(undefined4 *)(param_1 + 0xc),param_3,\n               *(undefined4 *)(*(int *)(param_1 + 4) + 0x27a8));\n  iVar1 = *(int *)(param_1 + 0x14);\n  uVar5 = FUN_0027df90(iVar1,*(undefined4 *)(param_1 + 8),*(undefined4 *)(param_1 + 0xc),\n                       *(undefined4 *)(param_1 + 0x10),param_3);\n  uVar4 = extraout_ECX;\n  if (*(int *)(param_1 + 0x18) != 0) {\n    FUN_0028aa20(*(int *)(param_1 + 0x18),*(undefined4 *)(param_1 + 8));\n    FUN_002747f0(iVar1,*(undefined4 *)(param_1 + 0x18));\n    uVar4 = extraout_ECX_00;\n  }\n  if (*(int *)(iVar1 + 0x244) == 0) {\n    iVar3 = *(int *)(*(int *)(unaff_EDI + 0x36b88f) + 8);\n    if (iVar3 == 0) {\n                    \n      FUN_002446e0(unaff_EDI + 0x1c9334,0x5c,unaff_EDI + 0x20c52f,uVar4,uVar5);\n    }\n    uVar4 = *(undefined4 *)(iVar3 + 0x27a8);\n    local_24 = FUN_003ac4d0(0x18);\n                    \n    FUN_002c9940(local_24,uVar4);\n    iVar3 = FUN_002b5cd0(*(undefined4 *)(param_1 + 4));\n    if (iVar3 != 0) {\n      *(undefined1 *)(local_24 + 0x16) = 1;\n    }\n    FUN_002c9c60(local_24,uVar5);\n  }\n  else {\n    local_24 = *(int *)(*(int *)(iVar1 + 0x244) + 0x28);\n    cVar2 = FUN_0030aff0(*(int *)(unaff_EDI + 0x36b88f));\n    if (cVar2 != '\0') {\n      (**(code **)(**(int **)(iVar1 + 0x244) + 0x20))\n                (*(int **)(iVar1 + 0x244),*(undefined4 *)(param_1 + 0xc),\n                 *(undefined4 *)(param_1 + 0x14),local_24);\n    }\n    FUN_002ca1b0(local_24,uVar5);\n  }\n  FUN_002455d0(*(undefined4 *)(param_1 + 4),*(undefined4 *)(param_1 + 8),\n               *(undefined4 *)(param_1 + 0xc),iVar1,param_2,local_24);\n  return;\n}" (primitive_type "void") (function_declarator "FUN_0027ef30(int param_1,undefined4 param_2,undefined4 param_3)" (identifier "FUN_0027ef30") (parameter_list "(int param_1,undefined4 param_2,undefined4 param_3)" (( "(") (parameter_declaration "int param_1" (primitive_type "int") (identifier "param_1")) (, ",") (parameter_declaration "undefined4 param_2" (type_identifier "undefined4") (identifier "param_2")) (, ",") (parameter_declaration "undefined4 param_3" (type_identifier "undefined4") (identifier "param_3")) () ")"))) (compound_statement "{\n  int iVar1;\n  char cVar2;\n  int iVar3;\n  undefined4 extraout_ECX;\n  undefined4 extraout_ECX_00;\n  undefined4 uVar4;\n  int unaff_EDI;\n  undefined8 uVar5;\n  int local_24;\n  \n  FUN_00074f0a();\n  FUN_0034fcb0(*(undefined4 *)(param_1 + 0xc),param_3,\n               *(undefined4 *)(*(int *)(param_1 + 4) + 0x27a8));\n  iVar1 = *(int *)(param_1 + 0x14);\n  uVar5 = FUN_0027df90(iVar1,*(undefined4 *)(param_1 + 8),*(undefined4 *)(param_1 + 0xc),\n                       *(undefined4 *)(param_1 + 0x10),param_3);\n  uVar4 = extraout_ECX;\n  if (*(int *)(param_1 + 0x18) != 0) {\n    FUN_0028aa20(*(int *)(param_1 + 0x18),*(undefined4 *)(param_1 + 8));\n    FUN_002747f0(iVar1,*(undefined4 *)(param_1 + 0x18));\n    uVar4 = extraout_ECX_00;\n  }\n  if (*(int *)(iVar1 + 0x244) == 0) {\n    iVar3 = *(int *)(*(int *)(unaff_EDI + 0x36b88f) + 8);\n    if (iVar3 == 0) {\n                    \n      FUN_002446e0(unaff_EDI + 0x1c9334,0x5c,unaff_EDI + 0x20c52f,uVar4,uVar5);\n    }\n    uVar4 = *(undefined4 *)(iVar3 + 0x27a8);\n    local_24 = FUN_003ac4d0(0x18);\n                    \n    FUN_002c9940(local_24,uVar4);\n    iVar3 = FUN_002b5cd0(*(undefined4 *)(param_1 + 4));\n    if (iVar3 != 0) {\n      *(undefined1 *)(local_24 + 0x16) = 1;\n    }\n    FUN_002c9c60(local_24,uVar5);\n  }\n  else {\n    local_24 = *(int *)(*(int *)(iVar1 + 0x244) + 0x28);\n    cVar2 = FUN_0030aff0(*(int *)(unaff_EDI + 0x36b88f));\n    if (cVar2 != '\0') {\n      (**(code **)(**(int **)(iVar1 + 0x244) + 0x20))\n                (*(int **)(iVar1 + 0x244),*(undefined4 *)(param_1 + 0xc),\n                 *(undefined4 *)(param_1 + 0x14),local_24);\n    }\n    FUN_002ca1b0(local_24,uVar5);\n  }\n  FUN_002455d0(*(undefined4 *)(param_1 + 4),*(undefined4 *)(param_1 + 8),\n               *(undefined4 *)(param_1 + 0xc),iVar1,param_2,local_24);\n  return;\n}" ({ "{") (declaration "int iVar1;" (primitive_type "int") (identifier "iVar1") (; ";")) (declaration "char cVar2;" (primitive_type "char") (identifier "cVar2") (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (declaration "undefined4 extraout_ECX;" (type_identifier "undefined4") (identifier "extraout_ECX") (; ";")) (declaration "undefined4 extraout_ECX_00;" (type_identifier "undefined4") (identifier "extraout_ECX_00") (; ";")) (declaration "undefined4 uVar4;" (type_identifier "undefined4") (identifier "uVar4") (; ";")) (declaration "int unaff_EDI;" (primitive_type "int") (identifier "unaff_EDI") (; ";")) (declaration "undefined8 uVar5;" (type_identifier "undefined8") (identifier "uVar5") (; ";")) (declaration "int local_24;" (primitive_type "int") (identifier "local_24") (; ";")) (expression_statement "FUN_00074f0a();" (call_expression "FUN_00074f0a()" (identifier "FUN_00074f0a") (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "FUN_0034fcb0(*(undefined4 *)(param_1 + 0xc),param_3,\n               *(undefined4 *)(*(int *)(param_1 + 4) + 0x27a8));" (call_expression "FUN_0034fcb0(*(undefined4 *)(param_1 + 0xc),param_3,\n               *(undefined4 *)(*(int *)(param_1 + 4) + 0x27a8))" (identifier "FUN_0034fcb0") (argument_list "(*(undefined4 *)(param_1 + 0xc),param_3,\n               *(undefined4 *)(*(int *)(param_1 + 4) + 0x27a8))" (( "(") (pointer_expression "*(undefined4 *)(param_1 + 0xc)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0xc)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xc)" (( "(") (binary_expression "param_1 + 0xc" (identifier "param_1") (+ "+") (number_literal "0xc")) () ")")))) (, ",") (identifier "param_3") (, ",") (pointer_expression "*(undefined4 *)(*(int *)(param_1 + 4) + 0x27a8)" (* "*") (cast_expression "(undefined4 *)(*(int *)(param_1 + 4) + 0x27a8)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_1 + 4) + 0x27a8)" (( "(") (binary_expression "*(int *)(param_1 + 4) + 0x27a8" (pointer_expression "*(int *)(param_1 + 4)" (* "*") (cast_expression "(int *)(param_1 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 4)" (( "(") (binary_expression "param_1 + 4" (identifier "param_1") (+ "+") (number_literal "4")) () ")")))) (+ "+") (number_literal "0x27a8")) () ")")))) () ")"))) (; ";")) (expression_statement "iVar1 = *(int *)(param_1 + 0x14);" (assignment_expression "iVar1 = *(int *)(param_1 + 0x14)" (identifier "iVar1") (= "=") (pointer_expression "*(int *)(param_1 + 0x14)" (* "*") (cast_expression "(int *)(param_1 + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x14)" (( "(") (binary_expression "param_1 + 0x14" (identifier "param_1") (+ "+") (number_literal "0x14")) () ")"))))) (; ";")) (expression_statement "uVar5 = FUN_0027df90(iVar1,*(undefined4 *)(param_1 + 8),*(undefined4 *)(param_1 + 0xc),\n                       *(undefined4 *)(param_1 + 0x10),param_3);" (assignment_expression "uVar5 = FUN_0027df90(iVar1,*(undefined4 *)(param_1 + 8),*(undefined4 *)(param_1 + 0xc),\n                       *(undefined4 *)(param_1 + 0x10),param_3)" (identifier "uVar5") (= "=") (call_expression "FUN_0027df90(iVar1,*(undefined4 *)(param_1 + 8),*(undefined4 *)(param_1 + 0xc),\n                       *(undefined4 *)(param_1 + 0x10),param_3)" (identifier "FUN_0027df90") (argument_list "(iVar1,*(undefined4 *)(param_1 + 8),*(undefined4 *)(param_1 + 0xc),\n                       *(undefined4 *)(param_1 + 0x10),param_3)" (( "(") (identifier "iVar1") (, ",") (pointer_expression "*(undefined4 *)(param_1 + 8)" (* "*") (cast_expression "(undefined4 *)(param_1 + 8)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 8)" (( "(") (binary_expression "param_1 + 8" (identifier "param_1") (+ "+") (number_literal "8")) () ")")))) (, ",") (pointer_expression "*(undefined4 *)(param_1 + 0xc)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0xc)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xc)" (( "(") (binary_expression "param_1 + 0xc" (identifier "param_1") (+ "+") (number_literal "0xc")) () ")")))) (, ",") (pointer_expression "*(undefined4 *)(param_1 + 0x10)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0x10)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x10)" (( "(") (binary_expression "param_1 + 0x10" (identifier "param_1") (+ "+") (number_literal "0x10")) () ")")))) (, ",") (identifier "param_3") () ")")))) (; ";")) (expression_statement "uVar4 = extraout_ECX;" (assignment_expression "uVar4 = extraout_ECX" (identifier "uVar4") (= "=") (identifier "extraout_ECX")) (; ";")) (if_statement "if (*(int *)(param_1 + 0x18) != 0) {\n    FUN_0028aa20(*(int *)(param_1 + 0x18),*(undefined4 *)(param_1 + 8));\n    FUN_002747f0(iVar1,*(undefined4 *)(param_1 + 0x18));\n    uVar4 = extraout_ECX_00;\n  }" (if "if") (parenthesized_expression "(*(int *)(param_1 + 0x18) != 0)" (( "(") (binary_expression "*(int *)(param_1 + 0x18) != 0" (pointer_expression "*(int *)(param_1 + 0x18)" (* "*") (cast_expression "(int *)(param_1 + 0x18)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x18)" (( "(") (binary_expression "param_1 + 0x18" (identifier "param_1") (+ "+") (number_literal "0x18")) () ")")))) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    FUN_0028aa20(*(int *)(param_1 + 0x18),*(undefined4 *)(param_1 + 8));\n    FUN_002747f0(iVar1,*(undefined4 *)(param_1 + 0x18));\n    uVar4 = extraout_ECX_00;\n  }" ({ "{") (expression_statement "FUN_0028aa20(*(int *)(param_1 + 0x18),*(undefined4 *)(param_1 + 8));" (call_expression "FUN_0028aa20(*(int *)(param_1 + 0x18),*(undefined4 *)(param_1 + 8))" (identifier "FUN_0028aa20") (argument_list "(*(int *)(param_1 + 0x18),*(undefined4 *)(param_1 + 8))" (( "(") (pointer_expression "*(int *)(param_1 + 0x18)" (* "*") (cast_expression "(int *)(param_1 + 0x18)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x18)" (( "(") (binary_expression "param_1 + 0x18" (identifier "param_1") (+ "+") (number_literal "0x18")) () ")")))) (, ",") (pointer_expression "*(undefined4 *)(param_1 + 8)" (* "*") (cast_expression "(undefined4 *)(param_1 + 8)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 8)" (( "(") (binary_expression "param_1 + 8" (identifier "param_1") (+ "+") (number_literal "8")) () ")")))) () ")"))) (; ";")) (expression_statement "FUN_002747f0(iVar1,*(undefined4 *)(param_1 + 0x18));" (call_expression "FUN_002747f0(iVar1,*(undefined4 *)(param_1 + 0x18))" (identifier "FUN_002747f0") (argument_list "(iVar1,*(undefined4 *)(param_1 + 0x18))" (( "(") (identifier "iVar1") (, ",") (pointer_expression "*(undefined4 *)(param_1 + 0x18)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0x18)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x18)" (( "(") (binary_expression "param_1 + 0x18" (identifier "param_1") (+ "+") (number_literal "0x18")) () ")")))) () ")"))) (; ";")) (expression_statement "uVar4 = extraout_ECX_00;" (assignment_expression "uVar4 = extraout_ECX_00" (identifier "uVar4") (= "=") (identifier "extraout_ECX_00")) (; ";")) (} "}"))) (if_statement "if (*(int *)(iVar1 + 0x244) == 0) {\n    iVar3 = *(int *)(*(int *)(unaff_EDI + 0x36b88f) + 8);\n    if (iVar3 == 0) {\n                    \n      FUN_002446e0(unaff_EDI + 0x1c9334,0x5c,unaff_EDI + 0x20c52f,uVar4,uVar5);\n    }\n    uVar4 = *(undefined4 *)(iVar3 + 0x27a8);\n    local_24 = FUN_003ac4d0(0x18);\n                    \n    FUN_002c9940(local_24,uVar4);\n    iVar3 = FUN_002b5cd0(*(undefined4 *)(param_1 + 4));\n    if (iVar3 != 0) {\n      *(undefined1 *)(local_24 + 0x16) = 1;\n    }\n    FUN_002c9c60(local_24,uVar5);\n  }\n  else {\n    local_24 = *(int *)(*(int *)(iVar1 + 0x244) + 0x28);\n    cVar2 = FUN_0030aff0(*(int *)(unaff_EDI + 0x36b88f));\n    if (cVar2 != '\0') {\n      (**(code **)(**(int **)(iVar1 + 0x244) + 0x20))\n                (*(int **)(iVar1 + 0x244),*(undefined4 *)(param_1 + 0xc),\n                 *(undefined4 *)(param_1 + 0x14),local_24);\n    }\n    FUN_002ca1b0(local_24,uVar5);\n  }" (if "if") (parenthesized_expression "(*(int *)(iVar1 + 0x244) == 0)" (( "(") (binary_expression "*(int *)(iVar1 + 0x244) == 0" (pointer_expression "*(int *)(iVar1 + 0x244)" (* "*") (cast_expression "(int *)(iVar1 + 0x244)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar1 + 0x244)" (( "(") (binary_expression "iVar1 + 0x244" (identifier "iVar1") (+ "+") (number_literal "0x244")) () ")")))) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    iVar3 = *(int *)(*(int *)(unaff_EDI + 0x36b88f) + 8);\n    if (iVar3 == 0) {\n                    \n      FUN_002446e0(unaff_EDI + 0x1c9334,0x5c,unaff_EDI + 0x20c52f,uVar4,uVar5);\n    }\n    uVar4 = *(undefined4 *)(iVar3 + 0x27a8);\n    local_24 = FUN_003ac4d0(0x18);\n                    \n    FUN_002c9940(local_24,uVar4);\n    iVar3 = FUN_002b5cd0(*(undefined4 *)(param_1 + 4));\n    if (iVar3 != 0) {\n      *(undefined1 *)(local_24 + 0x16) = 1;\n    }\n    FUN_002c9c60(local_24,uVar5);\n  }" ({ "{") (expression_statement "iVar3 = *(int *)(*(int *)(unaff_EDI + 0x36b88f) + 8);" (assignment_expression "iVar3 = *(int *)(*(int *)(unaff_EDI + 0x36b88f) + 8)" (identifier "iVar3") (= "=") (pointer_expression "*(int *)(*(int *)(unaff_EDI + 0x36b88f) + 8)" (* "*") (cast_expression "(int *)(*(int *)(unaff_EDI + 0x36b88f) + 8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(unaff_EDI + 0x36b88f) + 8)" (( "(") (binary_expression "*(int *)(unaff_EDI + 0x36b88f) + 8" (pointer_expression "*(int *)(unaff_EDI + 0x36b88f)" (* "*") (cast_expression "(int *)(unaff_EDI + 0x36b88f)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(unaff_EDI + 0x36b88f)" (( "(") (binary_expression "unaff_EDI + 0x36b88f" (identifier "unaff_EDI") (+ "+") (number_literal "0x36b88f")) () ")")))) (+ "+") (number_literal "8")) () ")"))))) (; ";")) (if_statement "if (iVar3 == 0) {\n                    \n      FUN_002446e0(unaff_EDI + 0x1c9334,0x5c,unaff_EDI + 0x20c52f,uVar4,uVar5);\n    }" (if "if") (parenthesized_expression "(iVar3 == 0)" (( "(") (binary_expression "iVar3 == 0" (identifier "iVar3") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n                    \n      FUN_002446e0(unaff_EDI + 0x1c9334,0x5c,unaff_EDI + 0x20c52f,uVar4,uVar5);\n    }" ({ "{") (expression_statement "FUN_002446e0(unaff_EDI + 0x1c9334,0x5c,unaff_EDI + 0x20c52f,uVar4,uVar5);" (call_expression "FUN_002446e0(unaff_EDI + 0x1c9334,0x5c,unaff_EDI + 0x20c52f,uVar4,uVar5)" (identifier "FUN_002446e0") (argument_list "(unaff_EDI + 0x1c9334,0x5c,unaff_EDI + 0x20c52f,uVar4,uVar5)" (( "(") (binary_expression "unaff_EDI + 0x1c9334" (identifier "unaff_EDI") (+ "+") (number_literal "0x1c9334")) (, ",") (number_literal "0x5c") (, ",") (binary_expression "unaff_EDI + 0x20c52f" (identifier "unaff_EDI") (+ "+") (number_literal "0x20c52f")) (, ",") (identifier "uVar4") (, ",") (identifier "uVar5") () ")"))) (; ";")) (} "}"))) (expression_statement "uVar4 = *(undefined4 *)(iVar3 + 0x27a8);" (assignment_expression "uVar4 = *(undefined4 *)(iVar3 + 0x27a8)" (identifier "uVar4") (= "=") (pointer_expression "*(undefined4 *)(iVar3 + 0x27a8)" (* "*") (cast_expression "(undefined4 *)(iVar3 + 0x27a8)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar3 + 0x27a8)" (( "(") (binary_expression "iVar3 + 0x27a8" (identifier "iVar3") (+ "+") (number_literal "0x27a8")) () ")"))))) (; ";")) (expression_statement "local_24 = FUN_003ac4d0(0x18);" (assignment_expression "local_24 = FUN_003ac4d0(0x18)" (identifier "local_24") (= "=") (call_expression "FUN_003ac4d0(0x18)" (identifier "FUN_003ac4d0") (argument_list "(0x18)" (( "(") (number_literal "0x18") () ")")))) (; ";")) (expression_statement "FUN_002c9940(local_24,uVar4);" (call_expression "FUN_002c9940(local_24,uVar4)" (identifier "FUN_002c9940") (argument_list "(local_24,uVar4)" (( "(") (identifier "local_24") (, ",") (identifier "uVar4") () ")"))) (; ";")) (expression_statement "iVar3 = FUN_002b5cd0(*(undefined4 *)(param_1 + 4));" (assignment_expression "iVar3 = FUN_002b5cd0(*(undefined4 *)(param_1 + 4))" (identifier "iVar3") (= "=") (call_expression "FUN_002b5cd0(*(undefined4 *)(param_1 + 4))" (identifier "FUN_002b5cd0") (argument_list "(*(undefined4 *)(param_1 + 4))" (( "(") (pointer_expression "*(undefined4 *)(param_1 + 4)" (* "*") (cast_expression "(undefined4 *)(param_1 + 4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 4)" (( "(") (binary_expression "param_1 + 4" (identifier "param_1") (+ "+") (number_literal "4")) () ")")))) () ")")))) (; ";")) (if_statement "if (iVar3 != 0) {\n      *(undefined1 *)(local_24 + 0x16) = 1;\n    }" (if "if") (parenthesized_expression "(iVar3 != 0)" (( "(") (binary_expression "iVar3 != 0" (identifier "iVar3") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      *(undefined1 *)(local_24 + 0x16) = 1;\n    }" ({ "{") (expression_statement "*(undefined1 *)(local_24 + 0x16) = 1;" (assignment_expression "*(undefined1 *)(local_24 + 0x16) = 1" (pointer_expression "*(undefined1 *)(local_24 + 0x16)" (* "*") (cast_expression "(undefined1 *)(local_24 + 0x16)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_24 + 0x16)" (( "(") (binary_expression "local_24 + 0x16" (identifier "local_24") (+ "+") (number_literal "0x16")) () ")")))) (= "=") (number_literal "1")) (; ";")) (} "}"))) (expression_statement "FUN_002c9c60(local_24,uVar5);" (call_expression "FUN_002c9c60(local_24,uVar5)" (identifier "FUN_002c9c60") (argument_list "(local_24,uVar5)" (( "(") (identifier "local_24") (, ",") (identifier "uVar5") () ")"))) (; ";")) (} "}")) (else_clause "else {\n    local_24 = *(int *)(*(int *)(iVar1 + 0x244) + 0x28);\n    cVar2 = FUN_0030aff0(*(int *)(unaff_EDI + 0x36b88f));\n    if (cVar2 != '\0') {\n      (**(code **)(**(int **)(iVar1 + 0x244) + 0x20))\n                (*(int **)(iVar1 + 0x244),*(undefined4 *)(param_1 + 0xc),\n                 *(undefined4 *)(param_1 + 0x14),local_24);\n    }\n    FUN_002ca1b0(local_24,uVar5);\n  }" (else "else") (compound_statement "{\n    local_24 = *(int *)(*(int *)(iVar1 + 0x244) + 0x28);\n    cVar2 = FUN_0030aff0(*(int *)(unaff_EDI + 0x36b88f));\n    if (cVar2 != '\0') {\n      (**(code **)(**(int **)(iVar1 + 0x244) + 0x20))\n                (*(int **)(iVar1 + 0x244),*(undefined4 *)(param_1 + 0xc),\n                 *(undefined4 *)(param_1 + 0x14),local_24);\n    }\n    FUN_002ca1b0(local_24,uVar5);\n  }" ({ "{") (expression_statement "local_24 = *(int *)(*(int *)(iVar1 + 0x244) + 0x28);" (assignment_expression "local_24 = *(int *)(*(int *)(iVar1 + 0x244) + 0x28)" (identifier "local_24") (= "=") (pointer_expression "*(int *)(*(int *)(iVar1 + 0x244) + 0x28)" (* "*") (cast_expression "(int *)(*(int *)(iVar1 + 0x244) + 0x28)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(iVar1 + 0x244) + 0x28)" (( "(") (binary_expression "*(int *)(iVar1 + 0x244) + 0x28" (pointer_expression "*(int *)(iVar1 + 0x244)" (* "*") (cast_expression "(int *)(iVar1 + 0x244)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar1 + 0x244)" (( "(") (binary_expression "iVar1 + 0x244" (identifier "iVar1") (+ "+") (number_literal "0x244")) () ")")))) (+ "+") (number_literal "0x28")) () ")"))))) (; ";")) (expression_statement "cVar2 = FUN_0030aff0(*(int *)(unaff_EDI + 0x36b88f));" (assignment_expression "cVar2 = FUN_0030aff0(*(int *)(unaff_EDI + 0x36b88f))" (identifier "cVar2") (= "=") (call_expression "FUN_0030aff0(*(int *)(unaff_EDI + 0x36b88f))" (identifier "FUN_0030aff0") (argument_list "(*(int *)(unaff_EDI + 0x36b88f))" (( "(") (pointer_expression "*(int *)(unaff_EDI + 0x36b88f)" (* "*") (cast_expression "(int *)(unaff_EDI + 0x36b88f)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(unaff_EDI + 0x36b88f)" (( "(") (binary_expression "unaff_EDI + 0x36b88f" (identifier "unaff_EDI") (+ "+") (number_literal "0x36b88f")) () ")")))) () ")")))) (; ";")) (if_statement "if (cVar2 != '\0') {\n      (**(code **)(**(int **)(iVar1 + 0x244) + 0x20))\n                (*(int **)(iVar1 + 0x244),*(undefined4 *)(param_1 + 0xc),\n                 *(undefined4 *)(param_1 + 0x14),local_24);\n    }" (if "if") (parenthesized_expression "(cVar2 != '\0')" (( "(") (binary_expression "cVar2 != '\0'" (identifier "cVar2") (!= "!=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n      (**(code **)(**(int **)(iVar1 + 0x244) + 0x20))\n                (*(int **)(iVar1 + 0x244),*(undefined4 *)(param_1 + 0xc),\n                 *(undefined4 *)(param_1 + 0x14),local_24);\n    }" ({ "{") (expression_statement "(**(code **)(**(int **)(iVar1 + 0x244) + 0x20))\n                (*(int **)(iVar1 + 0x244),*(undefined4 *)(param_1 + 0xc),\n                 *(undefined4 *)(param_1 + 0x14),local_24);" (call_expression "(**(code **)(**(int **)(iVar1 + 0x244) + 0x20))\n                (*(int **)(iVar1 + 0x244),*(undefined4 *)(param_1 + 0xc),\n                 *(undefined4 *)(param_1 + 0x14),local_24)" (parenthesized_expression "(**(code **)(**(int **)(iVar1 + 0x244) + 0x20))" (( "(") (pointer_expression "**(code **)(**(int **)(iVar1 + 0x244) + 0x20)" (* "*") (pointer_expression "*(code **)(**(int **)(iVar1 + 0x244) + 0x20)" (* "*") (cast_expression "(code **)(**(int **)(iVar1 + 0x244) + 0x20)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(**(int **)(iVar1 + 0x244) + 0x20)" (( "(") (binary_expression "**(int **)(iVar1 + 0x244) + 0x20" (pointer_expression "**(int **)(iVar1 + 0x244)" (* "*") (pointer_expression "*(int **)(iVar1 + 0x244)" (* "*") (cast_expression "(int **)(iVar1 + 0x244)" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(iVar1 + 0x244)" (( "(") (binary_expression "iVar1 + 0x244" (identifier "iVar1") (+ "+") (number_literal "0x244")) () ")"))))) (+ "+") (number_literal "0x20")) () ")"))))) () ")")) (argument_list "(*(int **)(iVar1 + 0x244),*(undefined4 *)(param_1 + 0xc),\n                 *(undefined4 *)(param_1 + 0x14),local_24)" (( "(") (pointer_expression "*(int **)(iVar1 + 0x244)" (* "*") (cast_expression "(int **)(iVar1 + 0x244)" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(iVar1 + 0x244)" (( "(") (binary_expression "iVar1 + 0x244" (identifier "iVar1") (+ "+") (number_literal "0x244")) () ")")))) (, ",") (pointer_expression "*(undefined4 *)(param_1 + 0xc)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0xc)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xc)" (( "(") (binary_expression "param_1 + 0xc" (identifier "param_1") (+ "+") (number_literal "0xc")) () ")")))) (, ",") (pointer_expression "*(undefined4 *)(param_1 + 0x14)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0x14)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x14)" (( "(") (binary_expression "param_1 + 0x14" (identifier "param_1") (+ "+") (number_literal "0x14")) () ")")))) (, ",") (identifier "local_24") () ")"))) (; ";")) (} "}"))) (expression_statement "FUN_002ca1b0(local_24,uVar5);" (call_expression "FUN_002ca1b0(local_24,uVar5)" (identifier "FUN_002ca1b0") (argument_list "(local_24,uVar5)" (( "(") (identifier "local_24") (, ",") (identifier "uVar5") () ")"))) (; ";")) (} "}")))) (expression_statement "FUN_002455d0(*(undefined4 *)(param_1 + 4),*(undefined4 *)(param_1 + 8),\n               *(undefined4 *)(param_1 + 0xc),iVar1,param_2,local_24);" (call_expression "FUN_002455d0(*(undefined4 *)(param_1 + 4),*(undefined4 *)(param_1 + 8),\n               *(undefined4 *)(param_1 + 0xc),iVar1,param_2,local_24)" (identifier "FUN_002455d0") (argument_list "(*(undefined4 *)(param_1 + 4),*(undefined4 *)(param_1 + 8),\n               *(undefined4 *)(param_1 + 0xc),iVar1,param_2,local_24)" (( "(") (pointer_expression "*(undefined4 *)(param_1 + 4)" (* "*") (cast_expression "(undefined4 *)(param_1 + 4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 4)" (( "(") (binary_expression "param_1 + 4" (identifier "param_1") (+ "+") (number_literal "4")) () ")")))) (, ",") (pointer_expression "*(undefined4 *)(param_1 + 8)" (* "*") (cast_expression "(undefined4 *)(param_1 + 8)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 8)" (( "(") (binary_expression "param_1 + 8" (identifier "param_1") (+ "+") (number_literal "8")) () ")")))) (, ",") (pointer_expression "*(undefined4 *)(param_1 + 0xc)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0xc)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xc)" (( "(") (binary_expression "param_1 + 0xc" (identifier "param_1") (+ "+") (number_literal "0xc")) () ")")))) (, ",") (identifier "iVar1") (, ",") (identifier "param_2") (, ",") (identifier "local_24") () ")"))) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}")))

/* WARNING: Enum "DT": Some values do not have unique names */
/* WARNING: Enum "ELFOSABI": Some values do not have unique names */
/* DWARF original prototype: void run(Layout_task_runner * this, Workqueue * workqueue, Task * task)
    */

void __thiscall
gold::type_1::function_1(type_1 *this,type_2 *workqueue,type_3 *task)

{
  type_4 *this_00;
  type_5 *var_7;
  char *name;
  bool bVar2;
  type_6 var_11;
  int var_6;
  type_7 file_size;
  char *local_2c;
  int local_28;
  type_8 *local_24;
  
  var_1();
  Symbol_table::var_2(this->symtab_,task,(this->options_->output_).value);
  this_00 = this->layout_;
  file_size = type_4::var_3(this_00,this->input_objects_,this->symtab_,this->target_,task);
  if (this->mapfile_ != (type_9 *)0x0) {
    Mapfile::var_4(this->mapfile_,this->input_objects_);
    Layout::var_5(this_00,this->mapfile_);
  }
  local_2c = (char *)file_size;
  local_28 = (int)((type_10)file_size >> 0x20);
  if (this_00->incremental_base_ == (type_11 *)0x0) {
    var_7 = (*(type_12 **)(var_6 + 0x36b88f))->options_;
    if (var_7 == (type_5 *)0x0) {
                    /* WARNING: Subroutine does not return */
      var_8((char *)(var_6 + 0x1c9334),0x5c,(char *)(var_6 + 0x20c52f));
    }
    name = (var_7->output_).value;
    local_24 = (type_8 *)var_9(0x18);
                    /* try { // try from 0027f056 to 0027f05a has its CatchHandler @ 0027f0a5 */
    Output_file::type_8(local_24,name);
    var_11 = type_5::var_10(this->options_);
    if (var_11 != var_12) {
      local_24->is_temporary_ = true;
    }
    Output_file::var_13(local_24,local_2c,local_28);
  }
  else {
    local_24 = this_00->incremental_base_->output_;
    bVar2 = type_12::var_14(*(type_12 **)(var_6 + 0x36b88f));
    if (bVar2) {
      (*this_00->incremental_base_->_vptr_Incremental_binary[8])
                (this_00->incremental_base_,this->symtab_,this->layout_,local_24);
    }
    Output_file::var_15(local_24,file_size);
  }
  var_16(this->options_,this->input_objects_,this->symtab_,this_00,workqueue,local_24);
  return;
}


(translation_unit (function_definition type: (primitive_type) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (primitive_type) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)))) body: (compound_statement (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (expression_statement (call_expression function: (identifier) arguments: (argument_list))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) (identifier) (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal)))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)) (number_literal) (binary_expression left: (identifier) right: (number_literal)) (identifier) (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (number_literal))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (char_literal (escape_sequence)))) consequence: (compound_statement (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) right: (number_literal))))))) arguments: (argument_list (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) (identifier)))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier))))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) (identifier) (identifier) (identifier)))) (return_statement))))

void MASKED(int param_1,undefined4 param_2,undefined4 param_3)

{
  int iVar1;
  char cVar2;
  int iVar3;
  undefined4 extraout_ECX;
  undefined4 extraout_ECX_00;
  undefined4 uVar4;
  int unaff_EDI;
  undefined8 uVar5;
  int local_24;
  
  FUN_00074f0a();
  FUN_0034fcb0(*(undefined4 *)(param_1 + 0xc),param_3,
               *(undefined4 *)(*(int *)(param_1 + 4) + 0x27a8));
  iVar1 = *(int *)(param_1 + 0x14);
  uVar5 = FUN_0027df90(iVar1,*(undefined4 *)(param_1 + 8),*(undefined4 *)(param_1 + 0xc),
                       *(undefined4 *)(param_1 + 0x10),param_3);
  uVar4 = extraout_ECX;
  if (*(int *)(param_1 + 0x18) != 0) {
    FUN_0028aa20(*(int *)(param_1 + 0x18),*(undefined4 *)(param_1 + 8));
    FUN_002747f0(iVar1,*(undefined4 *)(param_1 + 0x18));
    uVar4 = extraout_ECX_00;
  }
  if (*(int *)(iVar1 + 0x244) == 0) {
    iVar3 = *(int *)(*(int *)(unaff_EDI + 0x36b88f) + 8);
    if (iVar3 == 0) {
                    /* WARNING: Subroutine does not return */
      FUN_002446e0(unaff_EDI + 0x1c9334,0x5c,unaff_EDI + 0x20c52f,uVar4,uVar5);
    }
    uVar4 = *(undefined4 *)(iVar3 + 0x27a8);
    local_24 = FUN_003ac4d0(0x18);
                    /* try { // try from 0027f056 to 0027f05a has its CatchHandler @ 0027f0a5 */
    FUN_002c9940(local_24,uVar4);
    iVar3 = FUN_002b5cd0(*(undefined4 *)(param_1 + 4));
    if (iVar3 != 0) {
      *(undefined1 *)(local_24 + 0x16) = 1;
    }
    FUN_002c9c60(local_24,uVar5);
  }
  else {
    local_24 = *(int *)(*(int *)(iVar1 + 0x244) + 0x28);
    cVar2 = FUN_0030aff0(*(int *)(unaff_EDI + 0x36b88f));
    if (cVar2 != '\0') {
      (**(code **)(**(int **)(iVar1 + 0x244) + 0x20))
                (*(int **)(iVar1 + 0x244),*(undefined4 *)(param_1 + 0xc),
                 *(undefined4 *)(param_1 + 0x14),local_24);
    }
    FUN_002ca1b0(local_24,uVar5);
  }
  FUN_002455d0(*(undefined4 *)(param_1 + 4),*(undefined4 *)(param_1 + 8),
               *(undefined4 *)(param_1 + 0xc),iVar1,param_2,local_24);
  return;
}

