
/* void std::__facet_shims::__messages_get<wchar_t>(std::integral_constant<bool, true>,
   std::locale::facet const*, std::__facet_shims::__any_string&, int, int, int, wchar_t const*,
   unsigned int) */

void std::__facet_shims::__messages_get<wchar_t>
               (undefined4 param_1,int *param_2,int *param_3,undefined4 param_4,undefined4 param_5,
               undefined4 param_6,int param_7,int param_8)

{
  int unaff_EDI;
  undefined1 *local_4c [2];
  undefined1 local_44 [16];
  undefined1 *local_34;
  int local_30;
  undefined1 local_2c [28];
  
  __x86_get_pc_thunk_di();
  local_4c[0] = local_44;
  std::wstring::_M_construct<wchar_t_const*>(local_4c,param_7,param_7 + param_8 * 4,0);
                    /* try { // try from 001be766 to 001be768 has its CatchHandler @ 001be7d6 */
  (**(code **)(*param_2 + 0xc))(&local_34,param_2,param_4,param_5,param_6,local_4c);
  if ((code *)param_3[6] != (code *)0x0) {
                    /* try { // try from 001be777 to 001be795 has its CatchHandler @ 001be7da */
    (*(code *)param_3[6])(param_3);
  }
  *param_3 = (int)(param_3 + 2);
  std::wstring::_M_construct<wchar_t*>(param_3,local_34,local_34 + local_30 * 4,0);
  param_3[6] = unaff_EDI + -0x30f9;
  if (local_34 != local_2c) {
    operator_delete(local_34);
  }
  if (local_4c[0] != local_44) {
    operator_delete(local_4c[0]);
  }
  return;
}



void FUN_001be710(undefined4 param_1,int *param_2,int *param_3,undefined4 param_4,undefined4 param_5
                 ,undefined4 param_6,int param_7,int param_8)

{
  int unaff_EDI;
  undefined1 *local_4c [2];
  undefined1 local_44 [16];
  undefined1 *local_34;
  int local_30;
  undefined1 local_2c [28];
  
  FUN_0004fb7e();
  local_4c[0] = local_44;
  FUN_00187ac0(local_4c,param_7,param_7 + param_8 * 4,0);
                    /* try { // try from 001be766 to 001be768 has its CatchHandler @ 001be7d6 */
  (**(code **)(*param_2 + 0xc))(&local_34,param_2,param_4,param_5,param_6,local_4c);
  if ((code *)param_3[6] != (code *)0x0) {
                    /* try { // try from 001be777 to 001be795 has its CatchHandler @ 001be7da */
    (*(code *)param_3[6])(param_3);
  }
  *param_3 = (int)(param_3 + 2);
  FUN_00187920(param_3,local_34,local_34 + local_30 * 4,0);
  param_3[6] = unaff_EDI + -0x30f9;
  if (local_34 != local_2c) {
    FUN_001807a0(local_34);
  }
  if (local_4c[0] != local_44) {
    FUN_001807a0(local_4c[0]);
  }
  return;
}


PUSH EBP
MOV EBP,ESP
PUSH EDI
CALL 0x0004fb7e
ADD EDI,0x1438e7
PUSH ESI
LEA EAX,[EBP + -0x48]
PUSH EBX
LEA EBX,[EBP + -0x40]
SUB ESP,0x4c
MOV EDX,dword ptr [EBP + 0x20]
MOV ECX,dword ptr [EBP + 0x24]
MOV dword ptr [EBP + -0x4c],EBX
PUSH 0x0
MOV ESI,dword ptr [EBP + 0x10]
LEA ECX,[EDX + ECX*0x4]
MOV dword ptr [EBP + -0x48],EBX
MOV EBX,EDI
PUSH ECX
PUSH EDX
PUSH EAX
MOV dword ptr [EBP + -0x50],EAX
CALL 0x00187ac0
POP EAX
MOV EAX,dword ptr [EBP + 0xc]
LEA ECX,[EBP + -0x30]
POP EDX
MOV EDX,dword ptr [EAX]
MOV EAX,dword ptr [EBP + -0x50]
PUSH EAX
PUSH dword ptr [EBP + 0x1c]
PUSH dword ptr [EBP + 0x18]
PUSH dword ptr [EBP + 0x14]
PUSH dword ptr [EBP + 0xc]
PUSH ECX
CALL dword ptr [EDX + 0xc]
MOV EAX,dword ptr [ESI + 0x18]
ADD ESP,0x1c
TEST EAX,EAX
JZ 0x001be77c
SUB ESP,0xc
PUSH ESI
CALL EAX
ADD ESP,0x10
LEA EAX,[ESI + 0x8]
MOV EDX,dword ptr [EBP + -0x2c]
MOV EBX,EDI
MOV dword ptr [ESI],EAX
MOV EAX,dword ptr [EBP + -0x30]
PUSH 0x0
LEA EDX,[EAX + EDX*0x4]
PUSH EDX
PUSH EAX
PUSH ESI
CALL 0x00187920
LEA EAX,[EDI + 0xffeb9620]
LEA EDX,[EBP + -0x28]
ADD ESP,0x10
MOV dword ptr [ESI + 0x18],EAX
MOV EAX,dword ptr [EBP + -0x30]
CMP EAX,EDX
JZ 0x001be7b8
SUB ESP,0xc
PUSH EAX
CALL 0x001807a0
ADD ESP,0x10
MOV EAX,dword ptr [EBP + -0x48]
CMP EAX,dword ptr [EBP + -0x4c]
JZ 0x001be7ce
SUB ESP,0xc
MOV EBX,EDI
PUSH EAX
CALL 0x001807a0
ADD ESP,0x10
LEA ESP,[EBP + -0xc]
POP EBX
POP ESI
POP EDI
POP EBP
RET
(translation_unit "void FUN_001be710(undefined4 param_1,int *param_2,int *param_3,undefined4 param_4,undefined4 param_5\n                 ,undefined4 param_6,int param_7,int param_8)\n\n{\n  int unaff_EDI;\n  undefined1 *local_4c [2];\n  undefined1 local_44 [16];\n  undefined1 *local_34;\n  int local_30;\n  undefined1 local_2c [28];\n  \n  FUN_0004fb7e();\n  local_4c[0] = local_44;\n  FUN_00187ac0(local_4c,param_7,param_7 + param_8 * 4,0);\n                    /* try { // try from 001be766 to 001be768 has its CatchHandler @ 001be7d6 */\n  (**(code **)(*param_2 + 0xc))(&local_34,param_2,param_4,param_5,param_6,local_4c);\n  if ((code *)param_3[6] != (code *)0x0) {\n                    /* try { // try from 001be777 to 001be795 has its CatchHandler @ 001be7da */\n    (*(code *)param_3[6])(param_3);\n  }\n  *param_3 = (int)(param_3 + 2);\n  FUN_00187920(param_3,local_34,local_34 + local_30 * 4,0);\n  param_3[6] = unaff_EDI + -0x30f9;\n  if (local_34 != local_2c) {\n    FUN_001807a0(local_34);\n  }\n  if (local_4c[0] != local_44) {\n    FUN_001807a0(local_4c[0]);\n  }\n  return;\n}\n\n" (function_definition "void FUN_001be710(undefined4 param_1,int *param_2,int *param_3,undefined4 param_4,undefined4 param_5\n                 ,undefined4 param_6,int param_7,int param_8)\n\n{\n  int unaff_EDI;\n  undefined1 *local_4c [2];\n  undefined1 local_44 [16];\n  undefined1 *local_34;\n  int local_30;\n  undefined1 local_2c [28];\n  \n  FUN_0004fb7e();\n  local_4c[0] = local_44;\n  FUN_00187ac0(local_4c,param_7,param_7 + param_8 * 4,0);\n                    /* try { // try from 001be766 to 001be768 has its CatchHandler @ 001be7d6 */\n  (**(code **)(*param_2 + 0xc))(&local_34,param_2,param_4,param_5,param_6,local_4c);\n  if ((code *)param_3[6] != (code *)0x0) {\n                    /* try { // try from 001be777 to 001be795 has its CatchHandler @ 001be7da */\n    (*(code *)param_3[6])(param_3);\n  }\n  *param_3 = (int)(param_3 + 2);\n  FUN_00187920(param_3,local_34,local_34 + local_30 * 4,0);\n  param_3[6] = unaff_EDI + -0x30f9;\n  if (local_34 != local_2c) {\n    FUN_001807a0(local_34);\n  }\n  if (local_4c[0] != local_44) {\n    FUN_001807a0(local_4c[0]);\n  }\n  return;\n}" primitive_type (function_declarator "FUN_001be710(undefined4 param_1,int *param_2,int *param_3,undefined4 param_4,undefined4 param_5\n                 ,undefined4 param_6,int param_7,int param_8)" identifier (parameter_list "(undefined4 param_1,int *param_2,int *param_3,undefined4 param_4,undefined4 param_5\n                 ,undefined4 param_6,int param_7,int param_8)" ( (parameter_declaration "undefined4 param_1" type_identifier identifier) , (parameter_declaration "int *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "int *param_3" primitive_type (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "undefined4 param_4" type_identifier identifier) , (parameter_declaration "undefined4 param_5" type_identifier identifier) , (parameter_declaration "undefined4 param_6" type_identifier identifier) , (parameter_declaration "int param_7" primitive_type identifier) , (parameter_declaration "int param_8" primitive_type identifier) ))) (compound_statement "{\n  int unaff_EDI;\n  undefined1 *local_4c [2];\n  undefined1 local_44 [16];\n  undefined1 *local_34;\n  int local_30;\n  undefined1 local_2c [28];\n  \n  FUN_0004fb7e();\n  local_4c[0] = local_44;\n  FUN_00187ac0(local_4c,param_7,param_7 + param_8 * 4,0);\n                    /* try { // try from 001be766 to 001be768 has its CatchHandler @ 001be7d6 */\n  (**(code **)(*param_2 + 0xc))(&local_34,param_2,param_4,param_5,param_6,local_4c);\n  if ((code *)param_3[6] != (code *)0x0) {\n                    /* try { // try from 001be777 to 001be795 has its CatchHandler @ 001be7da */\n    (*(code *)param_3[6])(param_3);\n  }\n  *param_3 = (int)(param_3 + 2);\n  FUN_00187920(param_3,local_34,local_34 + local_30 * 4,0);\n  param_3[6] = unaff_EDI + -0x30f9;\n  if (local_34 != local_2c) {\n    FUN_001807a0(local_34);\n  }\n  if (local_4c[0] != local_44) {\n    FUN_001807a0(local_4c[0]);\n  }\n  return;\n}" { (declaration "int unaff_EDI;" primitive_type identifier ;) (declaration "undefined1 *local_4c [2];" type_identifier (pointer_declarator "*local_4c [2]" * (array_declarator "local_4c [2]" identifier [ number_literal ])) ;) (declaration "undefined1 local_44 [16];" type_identifier (array_declarator "local_44 [16]" identifier [ number_literal ]) ;) (declaration "undefined1 *local_34;" type_identifier (pointer_declarator "*local_34" * identifier) ;) (declaration "int local_30;" primitive_type identifier ;) (declaration "undefined1 local_2c [28];" type_identifier (array_declarator "local_2c [28]" identifier [ number_literal ]) ;) (expression_statement "FUN_0004fb7e();" (call_expression "FUN_0004fb7e()" identifier (argument_list "()" ( ))) ;) (expression_statement "local_4c[0] = local_44;" (assignment_expression "local_4c[0] = local_44" (subscript_expression "local_4c[0]" identifier [ number_literal ]) = identifier) ;) (expression_statement "FUN_00187ac0(local_4c,param_7,param_7 + param_8 * 4,0);" (call_expression "FUN_00187ac0(local_4c,param_7,param_7 + param_8 * 4,0)" identifier (argument_list "(local_4c,param_7,param_7 + param_8 * 4,0)" ( identifier , identifier , (binary_expression "param_7 + param_8 * 4" identifier + (binary_expression "param_8 * 4" identifier * number_literal)) , number_literal ))) ;) comment (expression_statement "(**(code **)(*param_2 + 0xc))(&local_34,param_2,param_4,param_5,param_6,local_4c);" (call_expression "(**(code **)(*param_2 + 0xc))(&local_34,param_2,param_4,param_5,param_6,local_4c)" (parenthesized_expression "(**(code **)(*param_2 + 0xc))" ( (pointer_expression "**(code **)(*param_2 + 0xc)" * (pointer_expression "*(code **)(*param_2 + 0xc)" * (cast_expression "(code **)(*param_2 + 0xc)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_2 + 0xc)" ( (binary_expression "*param_2 + 0xc" (pointer_expression "*param_2" * identifier) + number_literal) ))))) )) (argument_list "(&local_34,param_2,param_4,param_5,param_6,local_4c)" ( (pointer_expression "&local_34" & identifier) , identifier , identifier , identifier , identifier , identifier ))) ;) (if_statement "if ((code *)param_3[6] != (code *)0x0) {\n                    /* try { // try from 001be777 to 001be795 has its CatchHandler @ 001be7da */\n    (*(code *)param_3[6])(param_3);\n  }" if (parenthesized_expression "((code *)param_3[6] != (code *)0x0)" ( (binary_expression "(code *)param_3[6] != (code *)0x0" (cast_expression "(code *)param_3[6]" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_3[6]" identifier [ number_literal ])) != (cast_expression "(code *)0x0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                    /* try { // try from 001be777 to 001be795 has its CatchHandler @ 001be7da */\n    (*(code *)param_3[6])(param_3);\n  }" { comment (expression_statement "(*(code *)param_3[6])(param_3);" (call_expression "(*(code *)param_3[6])(param_3)" (parenthesized_expression "(*(code *)param_3[6])" ( (pointer_expression "*(code *)param_3[6]" * (cast_expression "(code *)param_3[6]" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_3[6]" identifier [ number_literal ]))) )) (argument_list "(param_3)" ( identifier ))) ;) })) (expression_statement "*param_3 = (int)(param_3 + 2);" (assignment_expression "*param_3 = (int)(param_3 + 2)" (pointer_expression "*param_3" * identifier) = (cast_expression "(int)(param_3 + 2)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(param_3 + 2)" ( (binary_expression "param_3 + 2" identifier + number_literal) )))) ;) (expression_statement "FUN_00187920(param_3,local_34,local_34 + local_30 * 4,0);" (call_expression "FUN_00187920(param_3,local_34,local_34 + local_30 * 4,0)" identifier (argument_list "(param_3,local_34,local_34 + local_30 * 4,0)" ( identifier , identifier , (binary_expression "local_34 + local_30 * 4" identifier + (binary_expression "local_30 * 4" identifier * number_literal)) , number_literal ))) ;) (expression_statement "param_3[6] = unaff_EDI + -0x30f9;" (assignment_expression "param_3[6] = unaff_EDI + -0x30f9" (subscript_expression "param_3[6]" identifier [ number_literal ]) = (binary_expression "unaff_EDI + -0x30f9" identifier + number_literal)) ;) (if_statement "if (local_34 != local_2c) {\n    FUN_001807a0(local_34);\n  }" if (parenthesized_expression "(local_34 != local_2c)" ( (binary_expression "local_34 != local_2c" identifier != identifier) )) (compound_statement "{\n    FUN_001807a0(local_34);\n  }" { (expression_statement "FUN_001807a0(local_34);" (call_expression "FUN_001807a0(local_34)" identifier (argument_list "(local_34)" ( identifier ))) ;) })) (if_statement "if (local_4c[0] != local_44) {\n    FUN_001807a0(local_4c[0]);\n  }" if (parenthesized_expression "(local_4c[0] != local_44)" ( (binary_expression "local_4c[0] != local_44" (subscript_expression "local_4c[0]" identifier [ number_literal ]) != identifier) )) (compound_statement "{\n    FUN_001807a0(local_4c[0]);\n  }" { (expression_statement "FUN_001807a0(local_4c[0]);" (call_expression "FUN_001807a0(local_4c[0])" identifier (argument_list "(local_4c[0])" ( (subscript_expression "local_4c[0]" identifier [ number_literal ]) ))) ;) })) (return_statement "return;" return ;) })))
(translation_unit "/* void std::__facet_shims::__messages_get<wchar_t>(std::integral_constant<bool, true>,\n   std::locale::facet const*, std::__facet_shims::__any_string&, int, int, int, wchar_t const*,\n   unsigned int) */\n\nvoid std::__facet_shims::__messages_get<wchar_t>\n               (undefined4 param_1,int *param_2,int *param_3,undefined4 param_4,undefined4 param_5,\n               undefined4 param_6,int param_7,int param_8)\n\n{\n  int unaff_EDI;\n  undefined1 *local_4c [2];\n  undefined1 local_44 [16];\n  undefined1 *local_34;\n  int local_30;\n  undefined1 local_2c [28];\n  \n  __x86_get_pc_thunk_di();\n  local_4c[0] = local_44;\n  std::wstring::_M_construct<wchar_t_const*>(local_4c,param_7,param_7 + param_8 * 4,0);\n                    /* try { // try from 001be766 to 001be768 has its CatchHandler @ 001be7d6 */\n  (**(code **)(*param_2 + 0xc))(&local_34,param_2,param_4,param_5,param_6,local_4c);\n  if ((code *)param_3[6] != (code *)0x0) {\n                    /* try { // try from 001be777 to 001be795 has its CatchHandler @ 001be7da */\n    (*(code *)param_3[6])(param_3);\n  }\n  *param_3 = (int)(param_3 + 2);\n  std::wstring::_M_construct<wchar_t*>(param_3,local_34,local_34 + local_30 * 4,0);\n  param_3[6] = unaff_EDI + -0x30f9;\n  if (local_34 != local_2c) {\n    operator_delete(local_34);\n  }\n  if (local_4c[0] != local_44) {\n    operator_delete(local_4c[0]);\n  }\n  return;\n}\n\n" comment (function_definition "void std::__facet_shims::__messages_get<wchar_t>\n               (undefined4 param_1,int *param_2,int *param_3,undefined4 param_4,undefined4 param_5,\n               undefined4 param_6,int param_7,int param_8)\n\n{\n  int unaff_EDI;\n  undefined1 *local_4c [2];\n  undefined1 local_44 [16];\n  undefined1 *local_34;\n  int local_30;\n  undefined1 local_2c [28];\n  \n  __x86_get_pc_thunk_di();\n  local_4c[0] = local_44;\n  std::wstring::_M_construct<wchar_t_const*>(local_4c,param_7,param_7 + param_8 * 4,0);\n                    /* try { // try from 001be766 to 001be768 has its CatchHandler @ 001be7d6 */\n  (**(code **)(*param_2 + 0xc))(&local_34,param_2,param_4,param_5,param_6,local_4c);\n  if ((code *)param_3[6] != (code *)0x0) {\n                    /* try { // try from 001be777 to 001be795 has its CatchHandler @ 001be7da */\n    (*(code *)param_3[6])(param_3);\n  }\n  *param_3 = (int)(param_3 + 2);\n  std::wstring::_M_construct<wchar_t*>(param_3,local_34,local_34 + local_30 * 4,0);\n  param_3[6] = unaff_EDI + -0x30f9;\n  if (local_34 != local_2c) {\n    operator_delete(local_34);\n  }\n  if (local_4c[0] != local_44) {\n    operator_delete(local_4c[0]);\n  }\n  return;\n}" primitive_type (ERROR "std::__facet_shims::__messages_get<" identifier : : identifier : : identifier <) (function_declarator "wchar_t>\n               (undefined4 param_1,int *param_2,int *param_3,undefined4 param_4,undefined4 param_5,\n               undefined4 param_6,int param_7,int param_8)" identifier (ERROR ">" >) (parameter_list "(undefined4 param_1,int *param_2,int *param_3,undefined4 param_4,undefined4 param_5,\n               undefined4 param_6,int param_7,int param_8)" ( (parameter_declaration "undefined4 param_1" type_identifier identifier) , (parameter_declaration "int *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "int *param_3" primitive_type (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "undefined4 param_4" type_identifier identifier) , (parameter_declaration "undefined4 param_5" type_identifier identifier) , (parameter_declaration "undefined4 param_6" type_identifier identifier) , (parameter_declaration "int param_7" primitive_type identifier) , (parameter_declaration "int param_8" primitive_type identifier) ))) (compound_statement "{\n  int unaff_EDI;\n  undefined1 *local_4c [2];\n  undefined1 local_44 [16];\n  undefined1 *local_34;\n  int local_30;\n  undefined1 local_2c [28];\n  \n  __x86_get_pc_thunk_di();\n  local_4c[0] = local_44;\n  std::wstring::_M_construct<wchar_t_const*>(local_4c,param_7,param_7 + param_8 * 4,0);\n                    /* try { // try from 001be766 to 001be768 has its CatchHandler @ 001be7d6 */\n  (**(code **)(*param_2 + 0xc))(&local_34,param_2,param_4,param_5,param_6,local_4c);\n  if ((code *)param_3[6] != (code *)0x0) {\n                    /* try { // try from 001be777 to 001be795 has its CatchHandler @ 001be7da */\n    (*(code *)param_3[6])(param_3);\n  }\n  *param_3 = (int)(param_3 + 2);\n  std::wstring::_M_construct<wchar_t*>(param_3,local_34,local_34 + local_30 * 4,0);\n  param_3[6] = unaff_EDI + -0x30f9;\n  if (local_34 != local_2c) {\n    operator_delete(local_34);\n  }\n  if (local_4c[0] != local_44) {\n    operator_delete(local_4c[0]);\n  }\n  return;\n}" { (declaration "int unaff_EDI;" primitive_type identifier ;) (declaration "undefined1 *local_4c [2];" type_identifier (pointer_declarator "*local_4c [2]" * (array_declarator "local_4c [2]" identifier [ number_literal ])) ;) (declaration "undefined1 local_44 [16];" type_identifier (array_declarator "local_44 [16]" identifier [ number_literal ]) ;) (declaration "undefined1 *local_34;" type_identifier (pointer_declarator "*local_34" * identifier) ;) (declaration "int local_30;" primitive_type identifier ;) (declaration "undefined1 local_2c [28];" type_identifier (array_declarator "local_2c [28]" identifier [ number_literal ]) ;) (expression_statement "__x86_get_pc_thunk_di();" (call_expression "__x86_get_pc_thunk_di()" identifier (argument_list "()" ( ))) ;) (expression_statement "local_4c[0] = local_44;" (assignment_expression "local_4c[0] = local_44" (subscript_expression "local_4c[0]" identifier [ number_literal ]) = identifier) ;) (labeled_statement "std::wstring::_M_construct<wchar_t_const*>(local_4c,param_7,param_7 + param_8 * 4,0);" statement_identifier : (ERROR ":" :) (labeled_statement "wstring::_M_construct<wchar_t_const*>(local_4c,param_7,param_7 + param_8 * 4,0);" statement_identifier : (ERROR ":" :) (expression_statement "_M_construct<wchar_t_const*>(local_4c,param_7,param_7 + param_8 * 4,0);" (binary_expression "_M_construct<wchar_t_const*>(local_4c,param_7,param_7 + param_8 * 4,0)" (binary_expression "_M_construct<wchar_t_const" identifier < identifier) (ERROR "*" *) > (parenthesized_expression "(local_4c,param_7,param_7 + param_8 * 4,0)" ( (comma_expression "local_4c,param_7,param_7 + param_8 * 4,0" identifier , (comma_expression "param_7,param_7 + param_8 * 4,0" identifier , (comma_expression "param_7 + param_8 * 4,0" (binary_expression "param_7 + param_8 * 4" identifier + (binary_expression "param_8 * 4" identifier * number_literal)) , number_literal))) ))) ;))) comment (expression_statement "(**(code **)(*param_2 + 0xc))(&local_34,param_2,param_4,param_5,param_6,local_4c);" (call_expression "(**(code **)(*param_2 + 0xc))(&local_34,param_2,param_4,param_5,param_6,local_4c)" (parenthesized_expression "(**(code **)(*param_2 + 0xc))" ( (pointer_expression "**(code **)(*param_2 + 0xc)" * (pointer_expression "*(code **)(*param_2 + 0xc)" * (cast_expression "(code **)(*param_2 + 0xc)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_2 + 0xc)" ( (binary_expression "*param_2 + 0xc" (pointer_expression "*param_2" * identifier) + number_literal) ))))) )) (argument_list "(&local_34,param_2,param_4,param_5,param_6,local_4c)" ( (pointer_expression "&local_34" & identifier) , identifier , identifier , identifier , identifier , identifier ))) ;) (if_statement "if ((code *)param_3[6] != (code *)0x0) {\n                    /* try { // try from 001be777 to 001be795 has its CatchHandler @ 001be7da */\n    (*(code *)param_3[6])(param_3);\n  }" if (parenthesized_expression "((code *)param_3[6] != (code *)0x0)" ( (binary_expression "(code *)param_3[6] != (code *)0x0" (cast_expression "(code *)param_3[6]" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_3[6]" identifier [ number_literal ])) != (cast_expression "(code *)0x0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                    /* try { // try from 001be777 to 001be795 has its CatchHandler @ 001be7da */\n    (*(code *)param_3[6])(param_3);\n  }" { comment (expression_statement "(*(code *)param_3[6])(param_3);" (call_expression "(*(code *)param_3[6])(param_3)" (parenthesized_expression "(*(code *)param_3[6])" ( (pointer_expression "*(code *)param_3[6]" * (cast_expression "(code *)param_3[6]" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_3[6]" identifier [ number_literal ]))) )) (argument_list "(param_3)" ( identifier ))) ;) })) (expression_statement "*param_3 = (int)(param_3 + 2);" (assignment_expression "*param_3 = (int)(param_3 + 2)" (pointer_expression "*param_3" * identifier) = (cast_expression "(int)(param_3 + 2)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(param_3 + 2)" ( (binary_expression "param_3 + 2" identifier + number_literal) )))) ;) (labeled_statement "std::wstring::_M_construct<wchar_t*>(param_3,local_34,local_34 + local_30 * 4,0);" statement_identifier : (ERROR ":" :) (labeled_statement "wstring::_M_construct<wchar_t*>(param_3,local_34,local_34 + local_30 * 4,0);" statement_identifier : (ERROR ":" :) (expression_statement "_M_construct<wchar_t*>(param_3,local_34,local_34 + local_30 * 4,0);" (binary_expression "_M_construct<wchar_t*>(param_3,local_34,local_34 + local_30 * 4,0)" (binary_expression "_M_construct<wchar_t" identifier < identifier) (ERROR "*" *) > (parenthesized_expression "(param_3,local_34,local_34 + local_30 * 4,0)" ( (comma_expression "param_3,local_34,local_34 + local_30 * 4,0" identifier , (comma_expression "local_34,local_34 + local_30 * 4,0" identifier , (comma_expression "local_34 + local_30 * 4,0" (binary_expression "local_34 + local_30 * 4" identifier + (binary_expression "local_30 * 4" identifier * number_literal)) , number_literal))) ))) ;))) (expression_statement "param_3[6] = unaff_EDI + -0x30f9;" (assignment_expression "param_3[6] = unaff_EDI + -0x30f9" (subscript_expression "param_3[6]" identifier [ number_literal ]) = (binary_expression "unaff_EDI + -0x30f9" identifier + number_literal)) ;) (if_statement "if (local_34 != local_2c) {\n    operator_delete(local_34);\n  }" if (parenthesized_expression "(local_34 != local_2c)" ( (binary_expression "local_34 != local_2c" identifier != identifier) )) (compound_statement "{\n    operator_delete(local_34);\n  }" { (expression_statement "operator_delete(local_34);" (call_expression "operator_delete(local_34)" identifier (argument_list "(local_34)" ( identifier ))) ;) })) (if_statement "if (local_4c[0] != local_44) {\n    operator_delete(local_4c[0]);\n  }" if (parenthesized_expression "(local_4c[0] != local_44)" ( (binary_expression "local_4c[0] != local_44" (subscript_expression "local_4c[0]" identifier [ number_literal ]) != identifier) )) (compound_statement "{\n    operator_delete(local_4c[0]);\n  }" { (expression_statement "operator_delete(local_4c[0]);" (call_expression "operator_delete(local_4c[0])" identifier (argument_list "(local_4c[0])" ( (subscript_expression "local_4c[0]" identifier [ number_literal ]) ))) ;) })) (return_statement "return;" return ;) })))
(translation_unit "void FUN_001be710(undefined4 param_1,int *param_2,int *param_3,undefined4 param_4,undefined4 param_5\n                 ,undefined4 param_6,int param_7,int param_8)\n\n{\n  int unaff_EDI;\n  undefined1 *local_4c [2];\n  undefined1 local_44 [16];\n  undefined1 *local_34;\n  int local_30;\n  undefined1 local_2c [28];\n  \n  FUN_0004fb7e();\n  local_4c[0] = local_44;\n  FUN_00187ac0(local_4c,param_7,param_7 + param_8 * 4,0);\n                    \n  (**(code **)(*param_2 + 0xc))(&local_34,param_2,param_4,param_5,param_6,local_4c);\n  if ((code *)param_3[6] != (code *)0x0) {\n                    \n    (*(code *)param_3[6])(param_3);\n  }\n  *param_3 = (int)(param_3 + 2);\n  FUN_00187920(param_3,local_34,local_34 + local_30 * 4,0);\n  param_3[6] = unaff_EDI + -0x30f9;\n  if (local_34 != local_2c) {\n    FUN_001807a0(local_34);\n  }\n  if (local_4c[0] != local_44) {\n    FUN_001807a0(local_4c[0]);\n  }\n  return;\n}\n\n" (function_definition "void FUN_001be710(undefined4 param_1,int *param_2,int *param_3,undefined4 param_4,undefined4 param_5\n                 ,undefined4 param_6,int param_7,int param_8)\n\n{\n  int unaff_EDI;\n  undefined1 *local_4c [2];\n  undefined1 local_44 [16];\n  undefined1 *local_34;\n  int local_30;\n  undefined1 local_2c [28];\n  \n  FUN_0004fb7e();\n  local_4c[0] = local_44;\n  FUN_00187ac0(local_4c,param_7,param_7 + param_8 * 4,0);\n                    \n  (**(code **)(*param_2 + 0xc))(&local_34,param_2,param_4,param_5,param_6,local_4c);\n  if ((code *)param_3[6] != (code *)0x0) {\n                    \n    (*(code *)param_3[6])(param_3);\n  }\n  *param_3 = (int)(param_3 + 2);\n  FUN_00187920(param_3,local_34,local_34 + local_30 * 4,0);\n  param_3[6] = unaff_EDI + -0x30f9;\n  if (local_34 != local_2c) {\n    FUN_001807a0(local_34);\n  }\n  if (local_4c[0] != local_44) {\n    FUN_001807a0(local_4c[0]);\n  }\n  return;\n}" primitive_type (function_declarator "FUN_001be710(undefined4 param_1,int *param_2,int *param_3,undefined4 param_4,undefined4 param_5\n                 ,undefined4 param_6,int param_7,int param_8)" identifier (parameter_list "(undefined4 param_1,int *param_2,int *param_3,undefined4 param_4,undefined4 param_5\n                 ,undefined4 param_6,int param_7,int param_8)" ( (parameter_declaration "undefined4 param_1" type_identifier identifier) , (parameter_declaration "int *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "int *param_3" primitive_type (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "undefined4 param_4" type_identifier identifier) , (parameter_declaration "undefined4 param_5" type_identifier identifier) , (parameter_declaration "undefined4 param_6" type_identifier identifier) , (parameter_declaration "int param_7" primitive_type identifier) , (parameter_declaration "int param_8" primitive_type identifier) ))) (compound_statement "{\n  int unaff_EDI;\n  undefined1 *local_4c [2];\n  undefined1 local_44 [16];\n  undefined1 *local_34;\n  int local_30;\n  undefined1 local_2c [28];\n  \n  FUN_0004fb7e();\n  local_4c[0] = local_44;\n  FUN_00187ac0(local_4c,param_7,param_7 + param_8 * 4,0);\n                    \n  (**(code **)(*param_2 + 0xc))(&local_34,param_2,param_4,param_5,param_6,local_4c);\n  if ((code *)param_3[6] != (code *)0x0) {\n                    \n    (*(code *)param_3[6])(param_3);\n  }\n  *param_3 = (int)(param_3 + 2);\n  FUN_00187920(param_3,local_34,local_34 + local_30 * 4,0);\n  param_3[6] = unaff_EDI + -0x30f9;\n  if (local_34 != local_2c) {\n    FUN_001807a0(local_34);\n  }\n  if (local_4c[0] != local_44) {\n    FUN_001807a0(local_4c[0]);\n  }\n  return;\n}" { (declaration "int unaff_EDI;" primitive_type identifier ;) (declaration "undefined1 *local_4c [2];" type_identifier (pointer_declarator "*local_4c [2]" * (array_declarator "local_4c [2]" identifier [ number_literal ])) ;) (declaration "undefined1 local_44 [16];" type_identifier (array_declarator "local_44 [16]" identifier [ number_literal ]) ;) (declaration "undefined1 *local_34;" type_identifier (pointer_declarator "*local_34" * identifier) ;) (declaration "int local_30;" primitive_type identifier ;) (declaration "undefined1 local_2c [28];" type_identifier (array_declarator "local_2c [28]" identifier [ number_literal ]) ;) (expression_statement "FUN_0004fb7e();" (call_expression "FUN_0004fb7e()" identifier (argument_list "()" ( ))) ;) (expression_statement "local_4c[0] = local_44;" (assignment_expression "local_4c[0] = local_44" (subscript_expression "local_4c[0]" identifier [ number_literal ]) = identifier) ;) (expression_statement "FUN_00187ac0(local_4c,param_7,param_7 + param_8 * 4,0);" (call_expression "FUN_00187ac0(local_4c,param_7,param_7 + param_8 * 4,0)" identifier (argument_list "(local_4c,param_7,param_7 + param_8 * 4,0)" ( identifier , identifier , (binary_expression "param_7 + param_8 * 4" identifier + (binary_expression "param_8 * 4" identifier * number_literal)) , number_literal ))) ;) (expression_statement "(**(code **)(*param_2 + 0xc))(&local_34,param_2,param_4,param_5,param_6,local_4c);" (call_expression "(**(code **)(*param_2 + 0xc))(&local_34,param_2,param_4,param_5,param_6,local_4c)" (parenthesized_expression "(**(code **)(*param_2 + 0xc))" ( (pointer_expression "**(code **)(*param_2 + 0xc)" * (pointer_expression "*(code **)(*param_2 + 0xc)" * (cast_expression "(code **)(*param_2 + 0xc)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_2 + 0xc)" ( (binary_expression "*param_2 + 0xc" (pointer_expression "*param_2" * identifier) + number_literal) ))))) )) (argument_list "(&local_34,param_2,param_4,param_5,param_6,local_4c)" ( (pointer_expression "&local_34" & identifier) , identifier , identifier , identifier , identifier , identifier ))) ;) (if_statement "if ((code *)param_3[6] != (code *)0x0) {\n                    \n    (*(code *)param_3[6])(param_3);\n  }" if (parenthesized_expression "((code *)param_3[6] != (code *)0x0)" ( (binary_expression "(code *)param_3[6] != (code *)0x0" (cast_expression "(code *)param_3[6]" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_3[6]" identifier [ number_literal ])) != (cast_expression "(code *)0x0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                    \n    (*(code *)param_3[6])(param_3);\n  }" { (expression_statement "(*(code *)param_3[6])(param_3);" (call_expression "(*(code *)param_3[6])(param_3)" (parenthesized_expression "(*(code *)param_3[6])" ( (pointer_expression "*(code *)param_3[6]" * (cast_expression "(code *)param_3[6]" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_3[6]" identifier [ number_literal ]))) )) (argument_list "(param_3)" ( identifier ))) ;) })) (expression_statement "*param_3 = (int)(param_3 + 2);" (assignment_expression "*param_3 = (int)(param_3 + 2)" (pointer_expression "*param_3" * identifier) = (cast_expression "(int)(param_3 + 2)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(param_3 + 2)" ( (binary_expression "param_3 + 2" identifier + number_literal) )))) ;) (expression_statement "FUN_00187920(param_3,local_34,local_34 + local_30 * 4,0);" (call_expression "FUN_00187920(param_3,local_34,local_34 + local_30 * 4,0)" identifier (argument_list "(param_3,local_34,local_34 + local_30 * 4,0)" ( identifier , identifier , (binary_expression "local_34 + local_30 * 4" identifier + (binary_expression "local_30 * 4" identifier * number_literal)) , number_literal ))) ;) (expression_statement "param_3[6] = unaff_EDI + -0x30f9;" (assignment_expression "param_3[6] = unaff_EDI + -0x30f9" (subscript_expression "param_3[6]" identifier [ number_literal ]) = (binary_expression "unaff_EDI + -0x30f9" identifier + number_literal)) ;) (if_statement "if (local_34 != local_2c) {\n    FUN_001807a0(local_34);\n  }" if (parenthesized_expression "(local_34 != local_2c)" ( (binary_expression "local_34 != local_2c" identifier != identifier) )) (compound_statement "{\n    FUN_001807a0(local_34);\n  }" { (expression_statement "FUN_001807a0(local_34);" (call_expression "FUN_001807a0(local_34)" identifier (argument_list "(local_34)" ( identifier ))) ;) })) (if_statement "if (local_4c[0] != local_44) {\n    FUN_001807a0(local_4c[0]);\n  }" if (parenthesized_expression "(local_4c[0] != local_44)" ( (binary_expression "local_4c[0] != local_44" (subscript_expression "local_4c[0]" identifier [ number_literal ]) != identifier) )) (compound_statement "{\n    FUN_001807a0(local_4c[0]);\n  }" { (expression_statement "FUN_001807a0(local_4c[0]);" (call_expression "FUN_001807a0(local_4c[0])" identifier (argument_list "(local_4c[0])" ( (subscript_expression "local_4c[0]" identifier [ number_literal ]) ))) ;) })) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * (array_declarator IDENT [ LIT ])) ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , (binary_expression IDENT + (binary_expression IDENT * LIT)) , LIT ))) ;) (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 ( (pointer_expression & IDENT) , IDENT , IDENT , IDENT , IDENT , IDENT ))) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])) != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) )) (argument_list ( IDENT ))) ;) })) (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , (binary_expression IDENT + (binary_expression IDENT * LIT)) , LIT ))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) != IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (subscript_expression IDENT [ LIT ]) ))) ;) })) (return_statement return ;) })))
(function_definition "void FUN_001be710(undefined4 param_1,int *param_2,int *param_3,undefined4 param_4,undefined4 param_5\n                 ,undefined4 param_6,int param_7,int param_8)\n\n{\n  int unaff_EDI;\n  undefined1 *local_4c [2];\n  undefined1 local_44 [16];\n  undefined1 *local_34;\n  int local_30;\n  undefined1 local_2c [28];\n  \n  FUN_0004fb7e();\n  local_4c[0] = local_44;\n  FUN_00187ac0(local_4c,param_7,param_7 + param_8 * 4,0);\n                    \n  (**(code **)(*param_2 + 0xc))(&local_34,param_2,param_4,param_5,param_6,local_4c);\n  if ((code *)param_3[6] != (code *)0x0) {\n                    \n    (*(code *)param_3[6])(param_3);\n  }\n  *param_3 = (int)(param_3 + 2);\n  FUN_00187920(param_3,local_34,local_34 + local_30 * 4,0);\n  param_3[6] = unaff_EDI + -0x30f9;\n  if (local_34 != local_2c) {\n    FUN_001807a0(local_34);\n  }\n  if (local_4c[0] != local_44) {\n    FUN_001807a0(local_4c[0]);\n  }\n  return;\n}" (primitive_type "void") (function_declarator "FUN_001be710(undefined4 param_1,int *param_2,int *param_3,undefined4 param_4,undefined4 param_5\n                 ,undefined4 param_6,int param_7,int param_8)" (identifier "FUN_001be710") (parameter_list "(undefined4 param_1,int *param_2,int *param_3,undefined4 param_4,undefined4 param_5\n                 ,undefined4 param_6,int param_7,int param_8)" (( "(") (parameter_declaration "undefined4 param_1" (type_identifier "undefined4") (identifier "param_1")) (, ",") (parameter_declaration "int *param_2" (primitive_type "int") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "int *param_3" (primitive_type "int") (pointer_declarator "*param_3" (* "*") (identifier "param_3"))) (, ",") (parameter_declaration "undefined4 param_4" (type_identifier "undefined4") (identifier "param_4")) (, ",") (parameter_declaration "undefined4 param_5" (type_identifier "undefined4") (identifier "param_5")) (, ",") (parameter_declaration "undefined4 param_6" (type_identifier "undefined4") (identifier "param_6")) (, ",") (parameter_declaration "int param_7" (primitive_type "int") (identifier "param_7")) (, ",") (parameter_declaration "int param_8" (primitive_type "int") (identifier "param_8")) () ")"))) (compound_statement "{\n  int unaff_EDI;\n  undefined1 *local_4c [2];\n  undefined1 local_44 [16];\n  undefined1 *local_34;\n  int local_30;\n  undefined1 local_2c [28];\n  \n  FUN_0004fb7e();\n  local_4c[0] = local_44;\n  FUN_00187ac0(local_4c,param_7,param_7 + param_8 * 4,0);\n                    \n  (**(code **)(*param_2 + 0xc))(&local_34,param_2,param_4,param_5,param_6,local_4c);\n  if ((code *)param_3[6] != (code *)0x0) {\n                    \n    (*(code *)param_3[6])(param_3);\n  }\n  *param_3 = (int)(param_3 + 2);\n  FUN_00187920(param_3,local_34,local_34 + local_30 * 4,0);\n  param_3[6] = unaff_EDI + -0x30f9;\n  if (local_34 != local_2c) {\n    FUN_001807a0(local_34);\n  }\n  if (local_4c[0] != local_44) {\n    FUN_001807a0(local_4c[0]);\n  }\n  return;\n}" ({ "{") (declaration "int unaff_EDI;" (primitive_type "int") (identifier "unaff_EDI") (; ";")) (declaration "undefined1 *local_4c [2];" (type_identifier "undefined1") (pointer_declarator "*local_4c [2]" (* "*") (array_declarator "local_4c [2]" (identifier "local_4c") ([ "[") (number_literal "2") (] "]"))) (; ";")) (declaration "undefined1 local_44 [16];" (type_identifier "undefined1") (array_declarator "local_44 [16]" (identifier "local_44") ([ "[") (number_literal "16") (] "]")) (; ";")) (declaration "undefined1 *local_34;" (type_identifier "undefined1") (pointer_declarator "*local_34" (* "*") (identifier "local_34")) (; ";")) (declaration "int local_30;" (primitive_type "int") (identifier "local_30") (; ";")) (declaration "undefined1 local_2c [28];" (type_identifier "undefined1") (array_declarator "local_2c [28]" (identifier "local_2c") ([ "[") (number_literal "28") (] "]")) (; ";")) (expression_statement "FUN_0004fb7e();" (call_expression "FUN_0004fb7e()" (identifier "FUN_0004fb7e") (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "local_4c[0] = local_44;" (assignment_expression "local_4c[0] = local_44" (subscript_expression "local_4c[0]" (identifier "local_4c") ([ "[") (number_literal "0") (] "]")) (= "=") (identifier "local_44")) (; ";")) (expression_statement "FUN_00187ac0(local_4c,param_7,param_7 + param_8 * 4,0);" (call_expression "FUN_00187ac0(local_4c,param_7,param_7 + param_8 * 4,0)" (identifier "FUN_00187ac0") (argument_list "(local_4c,param_7,param_7 + param_8 * 4,0)" (( "(") (identifier "local_4c") (, ",") (identifier "param_7") (, ",") (binary_expression "param_7 + param_8 * 4" (identifier "param_7") (+ "+") (binary_expression "param_8 * 4" (identifier "param_8") (* "*") (number_literal "4"))) (, ",") (number_literal "0") () ")"))) (; ";")) (expression_statement "(**(code **)(*param_2 + 0xc))(&local_34,param_2,param_4,param_5,param_6,local_4c);" (call_expression "(**(code **)(*param_2 + 0xc))(&local_34,param_2,param_4,param_5,param_6,local_4c)" (parenthesized_expression "(**(code **)(*param_2 + 0xc))" (( "(") (pointer_expression "**(code **)(*param_2 + 0xc)" (* "*") (pointer_expression "*(code **)(*param_2 + 0xc)" (* "*") (cast_expression "(code **)(*param_2 + 0xc)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_2 + 0xc)" (( "(") (binary_expression "*param_2 + 0xc" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (+ "+") (number_literal "0xc")) () ")"))))) () ")")) (argument_list "(&local_34,param_2,param_4,param_5,param_6,local_4c)" (( "(") (pointer_expression "&local_34" (& "&") (identifier "local_34")) (, ",") (identifier "param_2") (, ",") (identifier "param_4") (, ",") (identifier "param_5") (, ",") (identifier "param_6") (, ",") (identifier "local_4c") () ")"))) (; ";")) (if_statement "if ((code *)param_3[6] != (code *)0x0) {\n                    \n    (*(code *)param_3[6])(param_3);\n  }" (if "if") (parenthesized_expression "((code *)param_3[6] != (code *)0x0)" (( "(") (binary_expression "(code *)param_3[6] != (code *)0x0" (cast_expression "(code *)param_3[6]" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_3[6]" (identifier "param_3") ([ "[") (number_literal "6") (] "]"))) (!= "!=") (cast_expression "(code *)0x0" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n                    \n    (*(code *)param_3[6])(param_3);\n  }" ({ "{") (expression_statement "(*(code *)param_3[6])(param_3);" (call_expression "(*(code *)param_3[6])(param_3)" (parenthesized_expression "(*(code *)param_3[6])" (( "(") (pointer_expression "*(code *)param_3[6]" (* "*") (cast_expression "(code *)param_3[6]" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_3[6]" (identifier "param_3") ([ "[") (number_literal "6") (] "]")))) () ")")) (argument_list "(param_3)" (( "(") (identifier "param_3") () ")"))) (; ";")) (} "}"))) (expression_statement "*param_3 = (int)(param_3 + 2);" (assignment_expression "*param_3 = (int)(param_3 + 2)" (pointer_expression "*param_3" (* "*") (identifier "param_3")) (= "=") (cast_expression "(int)(param_3 + 2)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(param_3 + 2)" (( "(") (binary_expression "param_3 + 2" (identifier "param_3") (+ "+") (number_literal "2")) () ")")))) (; ";")) (expression_statement "FUN_00187920(param_3,local_34,local_34 + local_30 * 4,0);" (call_expression "FUN_00187920(param_3,local_34,local_34 + local_30 * 4,0)" (identifier "FUN_00187920") (argument_list "(param_3,local_34,local_34 + local_30 * 4,0)" (( "(") (identifier "param_3") (, ",") (identifier "local_34") (, ",") (binary_expression "local_34 + local_30 * 4" (identifier "local_34") (+ "+") (binary_expression "local_30 * 4" (identifier "local_30") (* "*") (number_literal "4"))) (, ",") (number_literal "0") () ")"))) (; ";")) (expression_statement "param_3[6] = unaff_EDI + -0x30f9;" (assignment_expression "param_3[6] = unaff_EDI + -0x30f9" (subscript_expression "param_3[6]" (identifier "param_3") ([ "[") (number_literal "6") (] "]")) (= "=") (binary_expression "unaff_EDI + -0x30f9" (identifier "unaff_EDI") (+ "+") (number_literal "-0x30f9"))) (; ";")) (if_statement "if (local_34 != local_2c) {\n    FUN_001807a0(local_34);\n  }" (if "if") (parenthesized_expression "(local_34 != local_2c)" (( "(") (binary_expression "local_34 != local_2c" (identifier "local_34") (!= "!=") (identifier "local_2c")) () ")")) (compound_statement "{\n    FUN_001807a0(local_34);\n  }" ({ "{") (expression_statement "FUN_001807a0(local_34);" (call_expression "FUN_001807a0(local_34)" (identifier "FUN_001807a0") (argument_list "(local_34)" (( "(") (identifier "local_34") () ")"))) (; ";")) (} "}"))) (if_statement "if (local_4c[0] != local_44) {\n    FUN_001807a0(local_4c[0]);\n  }" (if "if") (parenthesized_expression "(local_4c[0] != local_44)" (( "(") (binary_expression "local_4c[0] != local_44" (subscript_expression "local_4c[0]" (identifier "local_4c") ([ "[") (number_literal "0") (] "]")) (!= "!=") (identifier "local_44")) () ")")) (compound_statement "{\n    FUN_001807a0(local_4c[0]);\n  }" ({ "{") (expression_statement "FUN_001807a0(local_4c[0]);" (call_expression "FUN_001807a0(local_4c[0])" (identifier "FUN_001807a0") (argument_list "(local_4c[0])" (( "(") (subscript_expression "local_4c[0]" (identifier "local_4c") ([ "[") (number_literal "0") (] "]")) () ")"))) (; ";")) (} "}"))) (return_statement "return;" (return "return") (; ";")) (} "}")))

/* void std::__facet_shims::__messages_get<wchar_t>(std::integral_constant<bool, true>,
   std::locale::facet const*, std::__facet_shims::__any_string&, int, int, int, wchar_t const*,
   unsigned int) */

void std::__facet_shims::__messages_get<function_1>
               (type_1 param_1,int *param_2,int *var_6,type_1 param_4,type_1 param_5,
               type_1 param_6,int var_4,int var_5)

{
  int var_9;
  type_2 *local_4c [2];
  type_2 var_12 [16];
  type_2 *var_7;
  int var_8;
  type_2 var_10 [28];
  
  var_1();
  local_4c[0] = var_12;
  std::wstring::var_2<var_3*>(local_4c,var_4,var_4 + var_5 * 4,0);
                    /* try { // try from 001be766 to 001be768 has its CatchHandler @ 001be7d6 */
  (**(type_3 **)(*param_2 + 0xc))(&var_7,param_2,param_4,param_5,param_6,local_4c);
  if ((type_3 *)var_6[6] != (type_3 *)0x0) {
                    /* try { // try from 001be777 to 001be795 has its CatchHandler @ 001be7da */
    (*(type_3 *)var_6[6])(var_6);
  }
  *var_6 = (int)(var_6 + 2);
  std::wstring::var_2<function_1*>(var_6,var_7,var_7 + var_8 * 4,0);
  var_6[6] = var_9 + -0x30f9;
  if (var_7 != var_10) {
    var_11(var_7);
  }
  if (local_4c[0] != var_12) {
    var_11(local_4c[0]);
  }
  return;
}


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

void MASKED(undefined4 param_1,int *param_2,int *param_3,undefined4 param_4,undefined4 param_5
                 ,undefined4 param_6,int param_7,int param_8)

{
  int unaff_EDI;
  undefined1 *local_4c [2];
  undefined1 local_44 [16];
  undefined1 *local_34;
  int local_30;
  undefined1 local_2c [28];
  
  FUN_0004fb7e();
  local_4c[0] = local_44;
  FUN_00187ac0(local_4c,param_7,param_7 + param_8 * 4,0);
                    /* try { // try from 001be766 to 001be768 has its CatchHandler @ 001be7d6 */
  (**(code **)(*param_2 + 0xc))(&local_34,param_2,param_4,param_5,param_6,local_4c);
  if ((code *)param_3[6] != (code *)0x0) {
                    /* try { // try from 001be777 to 001be795 has its CatchHandler @ 001be7da */
    (*(code *)param_3[6])(param_3);
  }
  *param_3 = (int)(param_3 + 2);
  FUN_00187920(param_3,local_34,local_34 + local_30 * 4,0);
  param_3[6] = unaff_EDI + -0x30f9;
  if (local_34 != local_2c) {
    FUN_001807a0(local_34);
  }
  if (local_4c[0] != local_44) {
    FUN_001807a0(local_4c[0]);
  }
  return;
}

