
/* WARNING: Unknown calling convention -- yet parameter storage is locked */
/* std::__throw_system_error(int) */

void std::__throw_system_error(int param_1)

{
  runtime_error *this;
  long *plVar1;
  undefined1 *local_48 [2];
  undefined1 auStack_38 [24];
  
  this = (runtime_error *)__cxa_allocate_exception(0x20);
  plVar1 = (long *)_V2::generic_category();
                    /* try { // try from 00318971 to 00318973 has its CatchHandler @ 0031899a */
  (**(code **)(*plVar1 + 0x20))(local_48,plVar1,param_1);
                    /* try { // try from 0031897a to 0031897e has its CatchHandler @ 003189a2 */
  runtime_error::runtime_error(this,(string *)local_48);
  if (local_48[0] != auStack_38) {
    operator_delete(local_48[0]);
    __throw_system_error((int)local_48[0]);
    return;
  }
  *(int *)(this + 0x10) = param_1;
  *(long **)(this + 0x18) = plVar1;
  *(undefined ***)this = &PTR__system_error_0043afc0;
                    /* WARNING: Subroutine does not return */
  __cxa_throw(this,&system_error::typeinfo,system_error::~system_error);
}



void FUN_00318940(undefined4 param_1)

{
  undefined8 *puVar1;
  long *plVar2;
  undefined1 *local_48 [2];
  undefined1 auStack_38 [24];
  
  puVar1 = (undefined8 *)FUN_002dab00(0x20);
  plVar2 = (long *)FUN_003188f0();
                    /* try { // try from 00318971 to 00318973 has its CatchHandler @ 0031899a */
  (**(code **)(*plVar2 + 0x20))(local_48,plVar2,param_1);
                    /* try { // try from 0031897a to 0031897e has its CatchHandler @ 003189a2 */
  FUN_00357a80(puVar1,local_48);
  if (local_48[0] != auStack_38) {
    FUN_002dac70();
    FUN_0014f1ba();
    return;
  }
  *(undefined4 *)(puVar1 + 2) = param_1;
  puVar1[3] = plVar2;
  *puVar1 = &PTR_FUN_0043afc0;
                    /* WARNING: Subroutine does not return */
  FUN_002d9820(puVar1,&PTR_PTR_FUN_0043ae78,FUN_00318770);
}


PUSH R13
MOV R13D,EDI
MOV EDI,0x20
PUSH R12
PUSH RBP
PUSH RBX
SUB RSP,0x28
CALL 0x002dab00
MOV RBX,RSP
MOV R12,RAX
CALL 0x003188f0
MOV EDX,R13D
MOV RDI,RBX
MOV RBP,RAX
MOV RAX,qword ptr [RAX]
MOV RSI,RBP
CALL qword ptr [RAX + 0x20]
MOV RSI,RBX
MOV RDI,R12
CALL 0x00357a80
MOV RDI,qword ptr [RSP]
ADD RBX,0x10
CMP RDI,RBX
JZ 0x0014f1ba
CALL 0x002dac70
JMP 0x0014f1ba
(translation_unit "void FUN_00318940(undefined4 param_1)\n\n{\n  undefined8 *puVar1;\n  long *plVar2;\n  undefined1 *local_48 [2];\n  undefined1 auStack_38 [24];\n  \n  puVar1 = (undefined8 *)FUN_002dab00(0x20);\n  plVar2 = (long *)FUN_003188f0();\n                    /* try { // try from 00318971 to 00318973 has its CatchHandler @ 0031899a */\n  (**(code **)(*plVar2 + 0x20))(local_48,plVar2,param_1);\n                    /* try { // try from 0031897a to 0031897e has its CatchHandler @ 003189a2 */\n  FUN_00357a80(puVar1,local_48);\n  if (local_48[0] != auStack_38) {\n    FUN_002dac70();\n    FUN_0014f1ba();\n    return;\n  }\n  *(undefined4 *)(puVar1 + 2) = param_1;\n  puVar1[3] = plVar2;\n  *puVar1 = &PTR_FUN_0043afc0;\n                    /* WARNING: Subroutine does not return */\n  FUN_002d9820(puVar1,&PTR_PTR_FUN_0043ae78,FUN_00318770);\n}\n\n" (function_definition "void FUN_00318940(undefined4 param_1)\n\n{\n  undefined8 *puVar1;\n  long *plVar2;\n  undefined1 *local_48 [2];\n  undefined1 auStack_38 [24];\n  \n  puVar1 = (undefined8 *)FUN_002dab00(0x20);\n  plVar2 = (long *)FUN_003188f0();\n                    /* try { // try from 00318971 to 00318973 has its CatchHandler @ 0031899a */\n  (**(code **)(*plVar2 + 0x20))(local_48,plVar2,param_1);\n                    /* try { // try from 0031897a to 0031897e has its CatchHandler @ 003189a2 */\n  FUN_00357a80(puVar1,local_48);\n  if (local_48[0] != auStack_38) {\n    FUN_002dac70();\n    FUN_0014f1ba();\n    return;\n  }\n  *(undefined4 *)(puVar1 + 2) = param_1;\n  puVar1[3] = plVar2;\n  *puVar1 = &PTR_FUN_0043afc0;\n                    /* WARNING: Subroutine does not return */\n  FUN_002d9820(puVar1,&PTR_PTR_FUN_0043ae78,FUN_00318770);\n}" primitive_type (function_declarator "FUN_00318940(undefined4 param_1)" identifier (parameter_list "(undefined4 param_1)" ( (parameter_declaration "undefined4 param_1" type_identifier identifier) ))) (compound_statement "{\n  undefined8 *puVar1;\n  long *plVar2;\n  undefined1 *local_48 [2];\n  undefined1 auStack_38 [24];\n  \n  puVar1 = (undefined8 *)FUN_002dab00(0x20);\n  plVar2 = (long *)FUN_003188f0();\n                    /* try { // try from 00318971 to 00318973 has its CatchHandler @ 0031899a */\n  (**(code **)(*plVar2 + 0x20))(local_48,plVar2,param_1);\n                    /* try { // try from 0031897a to 0031897e has its CatchHandler @ 003189a2 */\n  FUN_00357a80(puVar1,local_48);\n  if (local_48[0] != auStack_38) {\n    FUN_002dac70();\n    FUN_0014f1ba();\n    return;\n  }\n  *(undefined4 *)(puVar1 + 2) = param_1;\n  puVar1[3] = plVar2;\n  *puVar1 = &PTR_FUN_0043afc0;\n                    /* WARNING: Subroutine does not return */\n  FUN_002d9820(puVar1,&PTR_PTR_FUN_0043ae78,FUN_00318770);\n}" { (declaration "undefined8 *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "long *plVar2;" (sized_type_specifier "long" long) (pointer_declarator "*plVar2" * identifier) ;) (declaration "undefined1 *local_48 [2];" type_identifier (pointer_declarator "*local_48 [2]" * (array_declarator "local_48 [2]" identifier [ number_literal ])) ;) (declaration "undefined1 auStack_38 [24];" type_identifier (array_declarator "auStack_38 [24]" identifier [ number_literal ]) ;) (expression_statement "puVar1 = (undefined8 *)FUN_002dab00(0x20);" (assignment_expression "puVar1 = (undefined8 *)FUN_002dab00(0x20)" identifier = (cast_expression "(undefined8 *)FUN_002dab00(0x20)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_002dab00(0x20)" identifier (argument_list "(0x20)" ( number_literal ))))) ;) (expression_statement "plVar2 = (long *)FUN_003188f0();" (assignment_expression "plVar2 = (long *)FUN_003188f0()" identifier = (cast_expression "(long *)FUN_003188f0()" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_003188f0()" identifier (argument_list "()" ( ))))) ;) comment (expression_statement "(**(code **)(*plVar2 + 0x20))(local_48,plVar2,param_1);" (call_expression "(**(code **)(*plVar2 + 0x20))(local_48,plVar2,param_1)" (parenthesized_expression "(**(code **)(*plVar2 + 0x20))" ( (pointer_expression "**(code **)(*plVar2 + 0x20)" * (pointer_expression "*(code **)(*plVar2 + 0x20)" * (cast_expression "(code **)(*plVar2 + 0x20)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar2 + 0x20)" ( (binary_expression "*plVar2 + 0x20" (pointer_expression "*plVar2" * identifier) + number_literal) ))))) )) (argument_list "(local_48,plVar2,param_1)" ( identifier , identifier , identifier ))) ;) comment (expression_statement "FUN_00357a80(puVar1,local_48);" (call_expression "FUN_00357a80(puVar1,local_48)" identifier (argument_list "(puVar1,local_48)" ( identifier , identifier ))) ;) (if_statement "if (local_48[0] != auStack_38) {\n    FUN_002dac70();\n    FUN_0014f1ba();\n    return;\n  }" if (parenthesized_expression "(local_48[0] != auStack_38)" ( (binary_expression "local_48[0] != auStack_38" (subscript_expression "local_48[0]" identifier [ number_literal ]) != identifier) )) (compound_statement "{\n    FUN_002dac70();\n    FUN_0014f1ba();\n    return;\n  }" { (expression_statement "FUN_002dac70();" (call_expression "FUN_002dac70()" identifier (argument_list "()" ( ))) ;) (expression_statement "FUN_0014f1ba();" (call_expression "FUN_0014f1ba()" identifier (argument_list "()" ( ))) ;) (return_statement "return;" return ;) })) (expression_statement "*(undefined4 *)(puVar1 + 2) = param_1;" (assignment_expression "*(undefined4 *)(puVar1 + 2) = param_1" (pointer_expression "*(undefined4 *)(puVar1 + 2)" * (cast_expression "(undefined4 *)(puVar1 + 2)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar1 + 2)" ( (binary_expression "puVar1 + 2" identifier + number_literal) )))) = identifier) ;) (expression_statement "puVar1[3] = plVar2;" (assignment_expression "puVar1[3] = plVar2" (subscript_expression "puVar1[3]" identifier [ number_literal ]) = identifier) ;) (expression_statement "*puVar1 = &PTR_FUN_0043afc0;" (assignment_expression "*puVar1 = &PTR_FUN_0043afc0" (pointer_expression "*puVar1" * identifier) = (pointer_expression "&PTR_FUN_0043afc0" & identifier)) ;) comment (expression_statement "FUN_002d9820(puVar1,&PTR_PTR_FUN_0043ae78,FUN_00318770);" (call_expression "FUN_002d9820(puVar1,&PTR_PTR_FUN_0043ae78,FUN_00318770)" identifier (argument_list "(puVar1,&PTR_PTR_FUN_0043ae78,FUN_00318770)" ( identifier , (pointer_expression "&PTR_PTR_FUN_0043ae78" & identifier) , identifier ))) ;) })))
(translation_unit "/* WARNING: Unknown calling convention -- yet parameter storage is locked */\n/* std::__throw_system_error(int) */\n\nvoid std::__throw_system_error(int param_1)\n\n{\n  runtime_error *this;\n  long *plVar1;\n  undefined1 *local_48 [2];\n  undefined1 auStack_38 [24];\n  \n  this = (runtime_error *)__cxa_allocate_exception(0x20);\n  plVar1 = (long *)_V2::generic_category();\n                    /* try { // try from 00318971 to 00318973 has its CatchHandler @ 0031899a */\n  (**(code **)(*plVar1 + 0x20))(local_48,plVar1,param_1);\n                    /* try { // try from 0031897a to 0031897e has its CatchHandler @ 003189a2 */\n  runtime_error::runtime_error(this,(string *)local_48);\n  if (local_48[0] != auStack_38) {\n    operator_delete(local_48[0]);\n    __throw_system_error((int)local_48[0]);\n    return;\n  }\n  *(int *)(this + 0x10) = param_1;\n  *(long **)(this + 0x18) = plVar1;\n  *(undefined ***)this = &PTR__system_error_0043afc0;\n                    /* WARNING: Subroutine does not return */\n  __cxa_throw(this,&system_error::typeinfo,system_error::~system_error);\n}\n\n" comment comment (function_definition "void std::__throw_system_error(int param_1)\n\n{\n  runtime_error *this;\n  long *plVar1;\n  undefined1 *local_48 [2];\n  undefined1 auStack_38 [24];\n  \n  this = (runtime_error *)__cxa_allocate_exception(0x20);\n  plVar1 = (long *)_V2::generic_category();\n                    /* try { // try from 00318971 to 00318973 has its CatchHandler @ 0031899a */\n  (**(code **)(*plVar1 + 0x20))(local_48,plVar1,param_1);\n                    /* try { // try from 0031897a to 0031897e has its CatchHandler @ 003189a2 */\n  runtime_error::runtime_error(this,(string *)local_48);\n  if (local_48[0] != auStack_38) {\n    operator_delete(local_48[0]);\n    __throw_system_error((int)local_48[0]);\n    return;\n  }\n  *(int *)(this + 0x10) = param_1;\n  *(long **)(this + 0x18) = plVar1;\n  *(undefined ***)this = &PTR__system_error_0043afc0;\n                    /* WARNING: Subroutine does not return */\n  __cxa_throw(this,&system_error::typeinfo,system_error::~system_error);\n}" primitive_type (ERROR "std::" identifier : :) (function_declarator "__throw_system_error(int param_1)" identifier (parameter_list "(int param_1)" ( (parameter_declaration "int param_1" primitive_type identifier) ))) (compound_statement "{\n  runtime_error *this;\n  long *plVar1;\n  undefined1 *local_48 [2];\n  undefined1 auStack_38 [24];\n  \n  this = (runtime_error *)__cxa_allocate_exception(0x20);\n  plVar1 = (long *)_V2::generic_category();\n                    /* try { // try from 00318971 to 00318973 has its CatchHandler @ 0031899a */\n  (**(code **)(*plVar1 + 0x20))(local_48,plVar1,param_1);\n                    /* try { // try from 0031897a to 0031897e has its CatchHandler @ 003189a2 */\n  runtime_error::runtime_error(this,(string *)local_48);\n  if (local_48[0] != auStack_38) {\n    operator_delete(local_48[0]);\n    __throw_system_error((int)local_48[0]);\n    return;\n  }\n  *(int *)(this + 0x10) = param_1;\n  *(long **)(this + 0x18) = plVar1;\n  *(undefined ***)this = &PTR__system_error_0043afc0;\n                    /* WARNING: Subroutine does not return */\n  __cxa_throw(this,&system_error::typeinfo,system_error::~system_error);\n}" { (declaration "runtime_error *this;" type_identifier (pointer_declarator "*this" * identifier) ;) (declaration "long *plVar1;" (sized_type_specifier "long" long) (pointer_declarator "*plVar1" * identifier) ;) (declaration "undefined1 *local_48 [2];" type_identifier (pointer_declarator "*local_48 [2]" * (array_declarator "local_48 [2]" identifier [ number_literal ])) ;) (declaration "undefined1 auStack_38 [24];" type_identifier (array_declarator "auStack_38 [24]" identifier [ number_literal ]) ;) (expression_statement "this = (runtime_error *)__cxa_allocate_exception(0x20);" (assignment_expression "this = (runtime_error *)__cxa_allocate_exception(0x20)" identifier = (cast_expression "(runtime_error *)__cxa_allocate_exception(0x20)" ( (type_descriptor "runtime_error *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "__cxa_allocate_exception(0x20)" identifier (argument_list "(0x20)" ( number_literal ))))) ;) (ERROR "plVar1 = (long *)_V2::" (assignment_expression "plVar1 = (long *)_V2" identifier = (cast_expression "(long *)_V2" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) identifier)) : :) (expression_statement "generic_category();" (call_expression "generic_category()" identifier (argument_list "()" ( ))) ;) comment (expression_statement "(**(code **)(*plVar1 + 0x20))(local_48,plVar1,param_1);" (call_expression "(**(code **)(*plVar1 + 0x20))(local_48,plVar1,param_1)" (parenthesized_expression "(**(code **)(*plVar1 + 0x20))" ( (pointer_expression "**(code **)(*plVar1 + 0x20)" * (pointer_expression "*(code **)(*plVar1 + 0x20)" * (cast_expression "(code **)(*plVar1 + 0x20)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar1 + 0x20)" ( (binary_expression "*plVar1 + 0x20" (pointer_expression "*plVar1" * identifier) + number_literal) ))))) )) (argument_list "(local_48,plVar1,param_1)" ( identifier , identifier , identifier ))) ;) comment (labeled_statement "runtime_error::runtime_error(this,(string *)local_48);" statement_identifier : (ERROR ":" :) (expression_statement "runtime_error(this,(string *)local_48);" (call_expression "runtime_error(this,(string *)local_48)" identifier (argument_list "(this,(string *)local_48)" ( identifier , (cast_expression "(string *)local_48" ( (type_descriptor "string *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) ))) ;)) (if_statement "if (local_48[0] != auStack_38) {\n    operator_delete(local_48[0]);\n    __throw_system_error((int)local_48[0]);\n    return;\n  }" if (parenthesized_expression "(local_48[0] != auStack_38)" ( (binary_expression "local_48[0] != auStack_38" (subscript_expression "local_48[0]" identifier [ number_literal ]) != identifier) )) (compound_statement "{\n    operator_delete(local_48[0]);\n    __throw_system_error((int)local_48[0]);\n    return;\n  }" { (expression_statement "operator_delete(local_48[0]);" (call_expression "operator_delete(local_48[0])" identifier (argument_list "(local_48[0])" ( (subscript_expression "local_48[0]" identifier [ number_literal ]) ))) ;) (expression_statement "__throw_system_error((int)local_48[0]);" (call_expression "__throw_system_error((int)local_48[0])" identifier (argument_list "((int)local_48[0])" ( (cast_expression "(int)local_48[0]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "local_48[0]" identifier [ number_literal ])) ))) ;) (return_statement "return;" return ;) })) (expression_statement "*(int *)(this + 0x10) = param_1;" (assignment_expression "*(int *)(this + 0x10) = param_1" (pointer_expression "*(int *)(this + 0x10)" * (cast_expression "(int *)(this + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0x10)" ( (binary_expression "this + 0x10" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(long **)(this + 0x18) = plVar1;" (assignment_expression "*(long **)(this + 0x18) = plVar1" (pointer_expression "*(long **)(this + 0x18)" * (cast_expression "(long **)(this + 0x18)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(this + 0x18)" ( (binary_expression "this + 0x18" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined ***)this = &PTR__system_error_0043afc0;" (assignment_expression "*(undefined ***)this = &PTR__system_error_0043afc0" (pointer_expression "*(undefined ***)this" * (cast_expression "(undefined ***)this" ( (type_descriptor "undefined ***" type_identifier (abstract_pointer_declarator "***" * (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *)))) ) identifier)) = (pointer_expression "&PTR__system_error_0043afc0" & identifier)) ;) comment (expression_statement "__cxa_throw(this,&system_error::typeinfo,system_error::~system_error);" (call_expression "__cxa_throw(this,&system_error::typeinfo,system_error::~system_error)" identifier (argument_list "(this,&system_error::typeinfo,system_error::~system_error)" ( identifier , (pointer_expression "&system_error" & identifier) (ERROR "::typeinfo" : : identifier) , (ERROR "system_error::" identifier : :) (unary_expression "~system_error" ~ identifier) ))) ;) })))
(translation_unit "void FUN_00318940(undefined4 param_1)\n\n{\n  undefined8 *puVar1;\n  long *plVar2;\n  undefined1 *local_48 [2];\n  undefined1 auStack_38 [24];\n  \n  puVar1 = (undefined8 *)FUN_002dab00(0x20);\n  plVar2 = (long *)FUN_003188f0();\n                    \n  (**(code **)(*plVar2 + 0x20))(local_48,plVar2,param_1);\n                    \n  FUN_00357a80(puVar1,local_48);\n  if (local_48[0] != auStack_38) {\n    FUN_002dac70();\n    FUN_0014f1ba();\n    return;\n  }\n  *(undefined4 *)(puVar1 + 2) = param_1;\n  puVar1[3] = plVar2;\n  *puVar1 = &PTR_FUN_0043afc0;\n                    \n  FUN_002d9820(puVar1,&PTR_PTR_FUN_0043ae78,FUN_00318770);\n}\n\n" (function_definition "void FUN_00318940(undefined4 param_1)\n\n{\n  undefined8 *puVar1;\n  long *plVar2;\n  undefined1 *local_48 [2];\n  undefined1 auStack_38 [24];\n  \n  puVar1 = (undefined8 *)FUN_002dab00(0x20);\n  plVar2 = (long *)FUN_003188f0();\n                    \n  (**(code **)(*plVar2 + 0x20))(local_48,plVar2,param_1);\n                    \n  FUN_00357a80(puVar1,local_48);\n  if (local_48[0] != auStack_38) {\n    FUN_002dac70();\n    FUN_0014f1ba();\n    return;\n  }\n  *(undefined4 *)(puVar1 + 2) = param_1;\n  puVar1[3] = plVar2;\n  *puVar1 = &PTR_FUN_0043afc0;\n                    \n  FUN_002d9820(puVar1,&PTR_PTR_FUN_0043ae78,FUN_00318770);\n}" primitive_type (function_declarator "FUN_00318940(undefined4 param_1)" identifier (parameter_list "(undefined4 param_1)" ( (parameter_declaration "undefined4 param_1" type_identifier identifier) ))) (compound_statement "{\n  undefined8 *puVar1;\n  long *plVar2;\n  undefined1 *local_48 [2];\n  undefined1 auStack_38 [24];\n  \n  puVar1 = (undefined8 *)FUN_002dab00(0x20);\n  plVar2 = (long *)FUN_003188f0();\n                    \n  (**(code **)(*plVar2 + 0x20))(local_48,plVar2,param_1);\n                    \n  FUN_00357a80(puVar1,local_48);\n  if (local_48[0] != auStack_38) {\n    FUN_002dac70();\n    FUN_0014f1ba();\n    return;\n  }\n  *(undefined4 *)(puVar1 + 2) = param_1;\n  puVar1[3] = plVar2;\n  *puVar1 = &PTR_FUN_0043afc0;\n                    \n  FUN_002d9820(puVar1,&PTR_PTR_FUN_0043ae78,FUN_00318770);\n}" { (declaration "undefined8 *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "long *plVar2;" (sized_type_specifier "long" long) (pointer_declarator "*plVar2" * identifier) ;) (declaration "undefined1 *local_48 [2];" type_identifier (pointer_declarator "*local_48 [2]" * (array_declarator "local_48 [2]" identifier [ number_literal ])) ;) (declaration "undefined1 auStack_38 [24];" type_identifier (array_declarator "auStack_38 [24]" identifier [ number_literal ]) ;) (expression_statement "puVar1 = (undefined8 *)FUN_002dab00(0x20);" (assignment_expression "puVar1 = (undefined8 *)FUN_002dab00(0x20)" identifier = (cast_expression "(undefined8 *)FUN_002dab00(0x20)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_002dab00(0x20)" identifier (argument_list "(0x20)" ( number_literal ))))) ;) (expression_statement "plVar2 = (long *)FUN_003188f0();" (assignment_expression "plVar2 = (long *)FUN_003188f0()" identifier = (cast_expression "(long *)FUN_003188f0()" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_003188f0()" identifier (argument_list "()" ( ))))) ;) (expression_statement "(**(code **)(*plVar2 + 0x20))(local_48,plVar2,param_1);" (call_expression "(**(code **)(*plVar2 + 0x20))(local_48,plVar2,param_1)" (parenthesized_expression "(**(code **)(*plVar2 + 0x20))" ( (pointer_expression "**(code **)(*plVar2 + 0x20)" * (pointer_expression "*(code **)(*plVar2 + 0x20)" * (cast_expression "(code **)(*plVar2 + 0x20)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar2 + 0x20)" ( (binary_expression "*plVar2 + 0x20" (pointer_expression "*plVar2" * identifier) + number_literal) ))))) )) (argument_list "(local_48,plVar2,param_1)" ( identifier , identifier , identifier ))) ;) (expression_statement "FUN_00357a80(puVar1,local_48);" (call_expression "FUN_00357a80(puVar1,local_48)" identifier (argument_list "(puVar1,local_48)" ( identifier , identifier ))) ;) (if_statement "if (local_48[0] != auStack_38) {\n    FUN_002dac70();\n    FUN_0014f1ba();\n    return;\n  }" if (parenthesized_expression "(local_48[0] != auStack_38)" ( (binary_expression "local_48[0] != auStack_38" (subscript_expression "local_48[0]" identifier [ number_literal ]) != identifier) )) (compound_statement "{\n    FUN_002dac70();\n    FUN_0014f1ba();\n    return;\n  }" { (expression_statement "FUN_002dac70();" (call_expression "FUN_002dac70()" identifier (argument_list "()" ( ))) ;) (expression_statement "FUN_0014f1ba();" (call_expression "FUN_0014f1ba()" identifier (argument_list "()" ( ))) ;) (return_statement "return;" return ;) })) (expression_statement "*(undefined4 *)(puVar1 + 2) = param_1;" (assignment_expression "*(undefined4 *)(puVar1 + 2) = param_1" (pointer_expression "*(undefined4 *)(puVar1 + 2)" * (cast_expression "(undefined4 *)(puVar1 + 2)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar1 + 2)" ( (binary_expression "puVar1 + 2" identifier + number_literal) )))) = identifier) ;) (expression_statement "puVar1[3] = plVar2;" (assignment_expression "puVar1[3] = plVar2" (subscript_expression "puVar1[3]" identifier [ number_literal ]) = identifier) ;) (expression_statement "*puVar1 = &PTR_FUN_0043afc0;" (assignment_expression "*puVar1 = &PTR_FUN_0043afc0" (pointer_expression "*puVar1" * identifier) = (pointer_expression "&PTR_FUN_0043afc0" & identifier)) ;) (expression_statement "FUN_002d9820(puVar1,&PTR_PTR_FUN_0043ae78,FUN_00318770);" (call_expression "FUN_002d9820(puVar1,&PTR_PTR_FUN_0043ae78,FUN_00318770)" identifier (argument_list "(puVar1,&PTR_PTR_FUN_0043ae78,FUN_00318770)" ( identifier , (pointer_expression "&PTR_PTR_FUN_0043ae78" & identifier) , identifier ))) ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * (array_declarator IDENT [ LIT ])) ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( LIT ))))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( ))))) ;) (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 * IDENT) + LIT) ))))) )) (argument_list ( IDENT , IDENT , IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) != IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (return_statement return ;) })) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (pointer_expression & IDENT)) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , (pointer_expression & IDENT) , IDENT ))) ;) })))
(function_definition "void FUN_00318940(undefined4 param_1)\n\n{\n  undefined8 *puVar1;\n  long *plVar2;\n  undefined1 *local_48 [2];\n  undefined1 auStack_38 [24];\n  \n  puVar1 = (undefined8 *)FUN_002dab00(0x20);\n  plVar2 = (long *)FUN_003188f0();\n                    \n  (**(code **)(*plVar2 + 0x20))(local_48,plVar2,param_1);\n                    \n  FUN_00357a80(puVar1,local_48);\n  if (local_48[0] != auStack_38) {\n    FUN_002dac70();\n    FUN_0014f1ba();\n    return;\n  }\n  *(undefined4 *)(puVar1 + 2) = param_1;\n  puVar1[3] = plVar2;\n  *puVar1 = &PTR_FUN_0043afc0;\n                    \n  FUN_002d9820(puVar1,&PTR_PTR_FUN_0043ae78,FUN_00318770);\n}" (primitive_type "void") (function_declarator "FUN_00318940(undefined4 param_1)" (identifier "FUN_00318940") (parameter_list "(undefined4 param_1)" (( "(") (parameter_declaration "undefined4 param_1" (type_identifier "undefined4") (identifier "param_1")) () ")"))) (compound_statement "{\n  undefined8 *puVar1;\n  long *plVar2;\n  undefined1 *local_48 [2];\n  undefined1 auStack_38 [24];\n  \n  puVar1 = (undefined8 *)FUN_002dab00(0x20);\n  plVar2 = (long *)FUN_003188f0();\n                    \n  (**(code **)(*plVar2 + 0x20))(local_48,plVar2,param_1);\n                    \n  FUN_00357a80(puVar1,local_48);\n  if (local_48[0] != auStack_38) {\n    FUN_002dac70();\n    FUN_0014f1ba();\n    return;\n  }\n  *(undefined4 *)(puVar1 + 2) = param_1;\n  puVar1[3] = plVar2;\n  *puVar1 = &PTR_FUN_0043afc0;\n                    \n  FUN_002d9820(puVar1,&PTR_PTR_FUN_0043ae78,FUN_00318770);\n}" ({ "{") (declaration "undefined8 *puVar1;" (type_identifier "undefined8") (pointer_declarator "*puVar1" (* "*") (identifier "puVar1")) (; ";")) (declaration "long *plVar2;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar2" (* "*") (identifier "plVar2")) (; ";")) (declaration "undefined1 *local_48 [2];" (type_identifier "undefined1") (pointer_declarator "*local_48 [2]" (* "*") (array_declarator "local_48 [2]" (identifier "local_48") ([ "[") (number_literal "2") (] "]"))) (; ";")) (declaration "undefined1 auStack_38 [24];" (type_identifier "undefined1") (array_declarator "auStack_38 [24]" (identifier "auStack_38") ([ "[") (number_literal "24") (] "]")) (; ";")) (expression_statement "puVar1 = (undefined8 *)FUN_002dab00(0x20);" (assignment_expression "puVar1 = (undefined8 *)FUN_002dab00(0x20)" (identifier "puVar1") (= "=") (cast_expression "(undefined8 *)FUN_002dab00(0x20)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_002dab00(0x20)" (identifier "FUN_002dab00") (argument_list "(0x20)" (( "(") (number_literal "0x20") () ")"))))) (; ";")) (expression_statement "plVar2 = (long *)FUN_003188f0();" (assignment_expression "plVar2 = (long *)FUN_003188f0()" (identifier "plVar2") (= "=") (cast_expression "(long *)FUN_003188f0()" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_003188f0()" (identifier "FUN_003188f0") (argument_list "()" (( "(") () ")"))))) (; ";")) (expression_statement "(**(code **)(*plVar2 + 0x20))(local_48,plVar2,param_1);" (call_expression "(**(code **)(*plVar2 + 0x20))(local_48,plVar2,param_1)" (parenthesized_expression "(**(code **)(*plVar2 + 0x20))" (( "(") (pointer_expression "**(code **)(*plVar2 + 0x20)" (* "*") (pointer_expression "*(code **)(*plVar2 + 0x20)" (* "*") (cast_expression "(code **)(*plVar2 + 0x20)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*plVar2 + 0x20)" (( "(") (binary_expression "*plVar2 + 0x20" (pointer_expression "*plVar2" (* "*") (identifier "plVar2")) (+ "+") (number_literal "0x20")) () ")"))))) () ")")) (argument_list "(local_48,plVar2,param_1)" (( "(") (identifier "local_48") (, ",") (identifier "plVar2") (, ",") (identifier "param_1") () ")"))) (; ";")) (expression_statement "FUN_00357a80(puVar1,local_48);" (call_expression "FUN_00357a80(puVar1,local_48)" (identifier "FUN_00357a80") (argument_list "(puVar1,local_48)" (( "(") (identifier "puVar1") (, ",") (identifier "local_48") () ")"))) (; ";")) (if_statement "if (local_48[0] != auStack_38) {\n    FUN_002dac70();\n    FUN_0014f1ba();\n    return;\n  }" (if "if") (parenthesized_expression "(local_48[0] != auStack_38)" (( "(") (binary_expression "local_48[0] != auStack_38" (subscript_expression "local_48[0]" (identifier "local_48") ([ "[") (number_literal "0") (] "]")) (!= "!=") (identifier "auStack_38")) () ")")) (compound_statement "{\n    FUN_002dac70();\n    FUN_0014f1ba();\n    return;\n  }" ({ "{") (expression_statement "FUN_002dac70();" (call_expression "FUN_002dac70()" (identifier "FUN_002dac70") (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "FUN_0014f1ba();" (call_expression "FUN_0014f1ba()" (identifier "FUN_0014f1ba") (argument_list "()" (( "(") () ")"))) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}"))) (expression_statement "*(undefined4 *)(puVar1 + 2) = param_1;" (assignment_expression "*(undefined4 *)(puVar1 + 2) = param_1" (pointer_expression "*(undefined4 *)(puVar1 + 2)" (* "*") (cast_expression "(undefined4 *)(puVar1 + 2)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar1 + 2)" (( "(") (binary_expression "puVar1 + 2" (identifier "puVar1") (+ "+") (number_literal "2")) () ")")))) (= "=") (identifier "param_1")) (; ";")) (expression_statement "puVar1[3] = plVar2;" (assignment_expression "puVar1[3] = plVar2" (subscript_expression "puVar1[3]" (identifier "puVar1") ([ "[") (number_literal "3") (] "]")) (= "=") (identifier "plVar2")) (; ";")) (expression_statement "*puVar1 = &PTR_FUN_0043afc0;" (assignment_expression "*puVar1 = &PTR_FUN_0043afc0" (pointer_expression "*puVar1" (* "*") (identifier "puVar1")) (= "=") (pointer_expression "&PTR_FUN_0043afc0" (& "&") (identifier "PTR_FUN_0043afc0"))) (; ";")) (expression_statement "FUN_002d9820(puVar1,&PTR_PTR_FUN_0043ae78,FUN_00318770);" (call_expression "FUN_002d9820(puVar1,&PTR_PTR_FUN_0043ae78,FUN_00318770)" (identifier "FUN_002d9820") (argument_list "(puVar1,&PTR_PTR_FUN_0043ae78,FUN_00318770)" (( "(") (identifier "puVar1") (, ",") (pointer_expression "&PTR_PTR_FUN_0043ae78" (& "&") (identifier "PTR_PTR_FUN_0043ae78")) (, ",") (identifier "FUN_00318770") () ")"))) (; ";")) (} "}")))

/* WARNING: Unknown calling convention -- yet parameter storage is locked */
/* std::__throw_system_error(int) */

void std::function_1(int param_1)

{
  type_1 *var_5;
  long *plVar1;
  type_2 *local_48 [2];
  type_2 var_3 [24];
  
  var_5 = (type_1 *)var_1(0x20);
  plVar1 = (long *)_V2::var_2();
                    /* try { // try from 00318971 to 00318973 has its CatchHandler @ 0031899a */
  (**(type_3 **)(*plVar1 + 0x20))(local_48,plVar1,param_1);
                    /* try { // try from 0031897a to 0031897e has its CatchHandler @ 003189a2 */
  runtime_error::type_1(var_5,(type_4 *)local_48);
  if (local_48[0] != var_3) {
    var_4(local_48[0]);
    function_1((int)local_48[0]);
    return;
  }
  *(int *)(var_5 + 0x10) = param_1;
  *(long **)(var_5 + 0x18) = plVar1;
  *(type_5 ***)var_5 = &PTR__system_error_0043afc0;
                    /* WARNING: Subroutine does not return */
  var_6(var_5,&system_error::typeinfo,system_error::~system_error);
}


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

void MASKED(undefined4 param_1)

{
  undefined8 *puVar1;
  long *plVar2;
  undefined1 *local_48 [2];
  undefined1 auStack_38 [24];
  
  puVar1 = (undefined8 *)FUN_002dab00(0x20);
  plVar2 = (long *)FUN_003188f0();
                    /* try { // try from 00318971 to 00318973 has its CatchHandler @ 0031899a */
  (**(code **)(*plVar2 + 0x20))(local_48,plVar2,param_1);
                    /* try { // try from 0031897a to 0031897e has its CatchHandler @ 003189a2 */
  FUN_00357a80(puVar1,local_48);
  if (local_48[0] != auStack_38) {
    FUN_002dac70();
    FUN_0014f1ba();
    return;
  }
  *(undefined4 *)(puVar1 + 2) = param_1;
  puVar1[3] = plVar2;
  *puVar1 = &PTR_FUN_0043afc0;
                    /* WARNING: Subroutine does not return */
  FUN_002d9820(puVar1,&PTR_PTR_FUN_0043ae78,FUN_00318770);
}

