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

void std::__facet_shims::__collate_transform<wchar_t>
               (undefined4 param_1,int *param_2,int *param_3,undefined4 param_4,undefined4 param_5)

{
  int unaff_EDI;
  undefined1 *local_34;
  int local_30;
  undefined1 local_2c [28];
  
  __x86_get_pc_thunk_di();
  (**(code **)(*param_2 + 0xc))(&local_34,param_2,param_4,param_5);
  if ((code *)param_3[6] != (code *)0x0) {
                    /* try { // try from 00224018 to 00224036 has its CatchHandler @ 00224061 */
    (*(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 + -0x23b9;
  if (local_34 != local_2c) {
    operator_delete(local_34);
  }
  return;
}



void FUN_00223fe0(undefined4 param_1,int *param_2,int *param_3,undefined4 param_4,undefined4 param_5
                 )

{
  int unaff_EDI;
  undefined1 *local_34;
  int local_30;
  undefined1 local_2c [28];
  
  FUN_000559ee();
  (**(code **)(*param_2 + 0xc))(&local_34,param_2,param_4,param_5);
  if ((code *)param_3[6] != (code *)0x0) {
                    /* try { // try from 00224018 to 00224036 has its CatchHandler @ 00224061 */
    (*(code *)param_3[6])(param_3);
  }
  *param_3 = (int)(param_3 + 2);
  FUN_001edf30(param_3,local_34,local_34 + local_30 * 4,0);
  param_3[6] = unaff_EDI + -0x23b9;
  if (local_34 != local_2c) {
    FUN_001e6db0(local_34);
  }
  return;
}


PUSH EBP
MOV EBP,ESP
PUSH EDI
CALL 0x000559ee
ADD EDI,0x16b017
PUSH ESI
LEA ECX,[EBP + -0x30]
PUSH EBX
SUB ESP,0x2c
MOV EAX,dword ptr [EBP + 0xc]
MOV ESI,dword ptr [EBP + 0x10]
MOV EDX,dword ptr [EAX]
PUSH dword ptr [EBP + 0x18]
PUSH dword ptr [EBP + 0x14]
PUSH EAX
PUSH ECX
CALL dword ptr [EDX + 0xc]
MOV EAX,dword ptr [ESI + 0x18]
ADD ESP,0xc
TEST EAX,EAX
JZ 0x0022401d
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 0x001edf30
LEA EAX,[EDI + 0xffe92c30]
LEA EDX,[EBP + -0x28]
ADD ESP,0x10
MOV dword ptr [ESI + 0x18],EAX
MOV EAX,dword ptr [EBP + -0x30]
CMP EAX,EDX
JZ 0x00224059
SUB ESP,0xc
PUSH EAX
CALL 0x001e6db0
ADD ESP,0x10
LEA ESP,[EBP + -0xc]
POP EBX
POP ESI
POP EDI
POP EBP
RET
(translation_unit "void FUN_00223fe0(undefined4 param_1,int *param_2,int *param_3,undefined4 param_4,undefined4 param_5\n                 )\n\n{\n  int unaff_EDI;\n  undefined1 *local_34;\n  int local_30;\n  undefined1 local_2c [28];\n  \n  FUN_000559ee();\n  (**(code **)(*param_2 + 0xc))(&local_34,param_2,param_4,param_5);\n  if ((code *)param_3[6] != (code *)0x0) {\n                    /* try { // try from 00224018 to 00224036 has its CatchHandler @ 00224061 */\n    (*(code *)param_3[6])(param_3);\n  }\n  *param_3 = (int)(param_3 + 2);\n  FUN_001edf30(param_3,local_34,local_34 + local_30 * 4,0);\n  param_3[6] = unaff_EDI + -0x23b9;\n  if (local_34 != local_2c) {\n    FUN_001e6db0(local_34);\n  }\n  return;\n}\n\n" (function_definition "void FUN_00223fe0(undefined4 param_1,int *param_2,int *param_3,undefined4 param_4,undefined4 param_5\n                 )\n\n{\n  int unaff_EDI;\n  undefined1 *local_34;\n  int local_30;\n  undefined1 local_2c [28];\n  \n  FUN_000559ee();\n  (**(code **)(*param_2 + 0xc))(&local_34,param_2,param_4,param_5);\n  if ((code *)param_3[6] != (code *)0x0) {\n                    /* try { // try from 00224018 to 00224036 has its CatchHandler @ 00224061 */\n    (*(code *)param_3[6])(param_3);\n  }\n  *param_3 = (int)(param_3 + 2);\n  FUN_001edf30(param_3,local_34,local_34 + local_30 * 4,0);\n  param_3[6] = unaff_EDI + -0x23b9;\n  if (local_34 != local_2c) {\n    FUN_001e6db0(local_34);\n  }\n  return;\n}" primitive_type (function_declarator "FUN_00223fe0(undefined4 param_1,int *param_2,int *param_3,undefined4 param_4,undefined4 param_5\n                 )" identifier (parameter_list "(undefined4 param_1,int *param_2,int *param_3,undefined4 param_4,undefined4 param_5\n                 )" ( (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) ))) (compound_statement "{\n  int unaff_EDI;\n  undefined1 *local_34;\n  int local_30;\n  undefined1 local_2c [28];\n  \n  FUN_000559ee();\n  (**(code **)(*param_2 + 0xc))(&local_34,param_2,param_4,param_5);\n  if ((code *)param_3[6] != (code *)0x0) {\n                    /* try { // try from 00224018 to 00224036 has its CatchHandler @ 00224061 */\n    (*(code *)param_3[6])(param_3);\n  }\n  *param_3 = (int)(param_3 + 2);\n  FUN_001edf30(param_3,local_34,local_34 + local_30 * 4,0);\n  param_3[6] = unaff_EDI + -0x23b9;\n  if (local_34 != local_2c) {\n    FUN_001e6db0(local_34);\n  }\n  return;\n}" { (declaration "int unaff_EDI;" primitive_type identifier ;) (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_000559ee();" (call_expression "FUN_000559ee()" identifier (argument_list "()" ( ))) ;) (expression_statement "(**(code **)(*param_2 + 0xc))(&local_34,param_2,param_4,param_5);" (call_expression "(**(code **)(*param_2 + 0xc))(&local_34,param_2,param_4,param_5)" (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)" ( (pointer_expression "&local_34" & identifier) , identifier , identifier , identifier ))) ;) (if_statement "if ((code *)param_3[6] != (code *)0x0) {\n                    /* try { // try from 00224018 to 00224036 has its CatchHandler @ 00224061 */\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 00224018 to 00224036 has its CatchHandler @ 00224061 */\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_001edf30(param_3,local_34,local_34 + local_30 * 4,0);" (call_expression "FUN_001edf30(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 + -0x23b9;" (assignment_expression "param_3[6] = unaff_EDI + -0x23b9" (subscript_expression "param_3[6]" identifier [ number_literal ]) = (binary_expression "unaff_EDI + -0x23b9" identifier + number_literal)) ;) (if_statement "if (local_34 != local_2c) {\n    FUN_001e6db0(local_34);\n  }" if (parenthesized_expression "(local_34 != local_2c)" ( (binary_expression "local_34 != local_2c" identifier != identifier) )) (compound_statement "{\n    FUN_001e6db0(local_34);\n  }" { (expression_statement "FUN_001e6db0(local_34);" (call_expression "FUN_001e6db0(local_34)" identifier (argument_list "(local_34)" ( identifier ))) ;) })) (return_statement "return;" return ;) })))
(translation_unit "/* void std::__facet_shims::__collate_transform<wchar_t>(std::integral_constant<bool, true>,\n   std::locale::facet const*, std::__facet_shims::__any_string&, wchar_t const*, wchar_t const*) */\n\nvoid std::__facet_shims::__collate_transform<wchar_t>\n               (undefined4 param_1,int *param_2,int *param_3,undefined4 param_4,undefined4 param_5)\n\n{\n  int unaff_EDI;\n  undefined1 *local_34;\n  int local_30;\n  undefined1 local_2c [28];\n  \n  __x86_get_pc_thunk_di();\n  (**(code **)(*param_2 + 0xc))(&local_34,param_2,param_4,param_5);\n  if ((code *)param_3[6] != (code *)0x0) {\n                    /* try { // try from 00224018 to 00224036 has its CatchHandler @ 00224061 */\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 + -0x23b9;\n  if (local_34 != local_2c) {\n    operator_delete(local_34);\n  }\n  return;\n}\n\n" comment (function_definition "void std::__facet_shims::__collate_transform<wchar_t>\n               (undefined4 param_1,int *param_2,int *param_3,undefined4 param_4,undefined4 param_5)\n\n{\n  int unaff_EDI;\n  undefined1 *local_34;\n  int local_30;\n  undefined1 local_2c [28];\n  \n  __x86_get_pc_thunk_di();\n  (**(code **)(*param_2 + 0xc))(&local_34,param_2,param_4,param_5);\n  if ((code *)param_3[6] != (code *)0x0) {\n                    /* try { // try from 00224018 to 00224036 has its CatchHandler @ 00224061 */\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 + -0x23b9;\n  if (local_34 != local_2c) {\n    operator_delete(local_34);\n  }\n  return;\n}" primitive_type (ERROR "std::__facet_shims::__collate_transform<" identifier : : identifier : : identifier <) (function_declarator "wchar_t>\n               (undefined4 param_1,int *param_2,int *param_3,undefined4 param_4,undefined4 param_5)" identifier (ERROR ">" >) (parameter_list "(undefined4 param_1,int *param_2,int *param_3,undefined4 param_4,undefined4 param_5)" ( (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) ))) (compound_statement "{\n  int unaff_EDI;\n  undefined1 *local_34;\n  int local_30;\n  undefined1 local_2c [28];\n  \n  __x86_get_pc_thunk_di();\n  (**(code **)(*param_2 + 0xc))(&local_34,param_2,param_4,param_5);\n  if ((code *)param_3[6] != (code *)0x0) {\n                    /* try { // try from 00224018 to 00224036 has its CatchHandler @ 00224061 */\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 + -0x23b9;\n  if (local_34 != local_2c) {\n    operator_delete(local_34);\n  }\n  return;\n}" { (declaration "int unaff_EDI;" primitive_type identifier ;) (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 "(**(code **)(*param_2 + 0xc))(&local_34,param_2,param_4,param_5);" (call_expression "(**(code **)(*param_2 + 0xc))(&local_34,param_2,param_4,param_5)" (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)" ( (pointer_expression "&local_34" & identifier) , identifier , identifier , identifier ))) ;) (if_statement "if ((code *)param_3[6] != (code *)0x0) {\n                    /* try { // try from 00224018 to 00224036 has its CatchHandler @ 00224061 */\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 00224018 to 00224036 has its CatchHandler @ 00224061 */\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 + -0x23b9;" (assignment_expression "param_3[6] = unaff_EDI + -0x23b9" (subscript_expression "param_3[6]" identifier [ number_literal ]) = (binary_expression "unaff_EDI + -0x23b9" 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 ))) ;) })) (return_statement "return;" return ;) })))
(translation_unit "void FUN_00223fe0(undefined4 param_1,int *param_2,int *param_3,undefined4 param_4,undefined4 param_5\n                 )\n\n{\n  int unaff_EDI;\n  undefined1 *local_34;\n  int local_30;\n  undefined1 local_2c [28];\n  \n  FUN_000559ee();\n  (**(code **)(*param_2 + 0xc))(&local_34,param_2,param_4,param_5);\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_001edf30(param_3,local_34,local_34 + local_30 * 4,0);\n  param_3[6] = unaff_EDI + -0x23b9;\n  if (local_34 != local_2c) {\n    FUN_001e6db0(local_34);\n  }\n  return;\n}\n\n" (function_definition "void FUN_00223fe0(undefined4 param_1,int *param_2,int *param_3,undefined4 param_4,undefined4 param_5\n                 )\n\n{\n  int unaff_EDI;\n  undefined1 *local_34;\n  int local_30;\n  undefined1 local_2c [28];\n  \n  FUN_000559ee();\n  (**(code **)(*param_2 + 0xc))(&local_34,param_2,param_4,param_5);\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_001edf30(param_3,local_34,local_34 + local_30 * 4,0);\n  param_3[6] = unaff_EDI + -0x23b9;\n  if (local_34 != local_2c) {\n    FUN_001e6db0(local_34);\n  }\n  return;\n}" primitive_type (function_declarator "FUN_00223fe0(undefined4 param_1,int *param_2,int *param_3,undefined4 param_4,undefined4 param_5\n                 )" identifier (parameter_list "(undefined4 param_1,int *param_2,int *param_3,undefined4 param_4,undefined4 param_5\n                 )" ( (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) ))) (compound_statement "{\n  int unaff_EDI;\n  undefined1 *local_34;\n  int local_30;\n  undefined1 local_2c [28];\n  \n  FUN_000559ee();\n  (**(code **)(*param_2 + 0xc))(&local_34,param_2,param_4,param_5);\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_001edf30(param_3,local_34,local_34 + local_30 * 4,0);\n  param_3[6] = unaff_EDI + -0x23b9;\n  if (local_34 != local_2c) {\n    FUN_001e6db0(local_34);\n  }\n  return;\n}" { (declaration "int unaff_EDI;" primitive_type identifier ;) (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_000559ee();" (call_expression "FUN_000559ee()" identifier (argument_list "()" ( ))) ;) (expression_statement "(**(code **)(*param_2 + 0xc))(&local_34,param_2,param_4,param_5);" (call_expression "(**(code **)(*param_2 + 0xc))(&local_34,param_2,param_4,param_5)" (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)" ( (pointer_expression "&local_34" & 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_001edf30(param_3,local_34,local_34 + local_30 * 4,0);" (call_expression "FUN_001edf30(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 + -0x23b9;" (assignment_expression "param_3[6] = unaff_EDI + -0x23b9" (subscript_expression "param_3[6]" identifier [ number_literal ]) = (binary_expression "unaff_EDI + -0x23b9" identifier + number_literal)) ;) (if_statement "if (local_34 != local_2c) {\n    FUN_001e6db0(local_34);\n  }" if (parenthesized_expression "(local_34 != local_2c)" ( (binary_expression "local_34 != local_2c" identifier != identifier) )) (compound_statement "{\n    FUN_001e6db0(local_34);\n  }" { (expression_statement "FUN_001e6db0(local_34);" (call_expression "FUN_001e6db0(local_34)" identifier (argument_list "(local_34)" ( identifier ))) ;) })) (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) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (expression_statement (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 ( (pointer_expression & 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 ))) ;) })) (return_statement return ;) })))
(function_definition "void FUN_00223fe0(undefined4 param_1,int *param_2,int *param_3,undefined4 param_4,undefined4 param_5\n                 )\n\n{\n  int unaff_EDI;\n  undefined1 *local_34;\n  int local_30;\n  undefined1 local_2c [28];\n  \n  FUN_000559ee();\n  (**(code **)(*param_2 + 0xc))(&local_34,param_2,param_4,param_5);\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_001edf30(param_3,local_34,local_34 + local_30 * 4,0);\n  param_3[6] = unaff_EDI + -0x23b9;\n  if (local_34 != local_2c) {\n    FUN_001e6db0(local_34);\n  }\n  return;\n}" (primitive_type "void") (function_declarator "FUN_00223fe0(undefined4 param_1,int *param_2,int *param_3,undefined4 param_4,undefined4 param_5\n                 )" (identifier "FUN_00223fe0") (parameter_list "(undefined4 param_1,int *param_2,int *param_3,undefined4 param_4,undefined4 param_5\n                 )" (( "(") (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")) () ")"))) (compound_statement "{\n  int unaff_EDI;\n  undefined1 *local_34;\n  int local_30;\n  undefined1 local_2c [28];\n  \n  FUN_000559ee();\n  (**(code **)(*param_2 + 0xc))(&local_34,param_2,param_4,param_5);\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_001edf30(param_3,local_34,local_34 + local_30 * 4,0);\n  param_3[6] = unaff_EDI + -0x23b9;\n  if (local_34 != local_2c) {\n    FUN_001e6db0(local_34);\n  }\n  return;\n}" ({ "{") (declaration "int unaff_EDI;" (primitive_type "int") (identifier "unaff_EDI") (; ";")) (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_000559ee();" (call_expression "FUN_000559ee()" (identifier "FUN_000559ee") (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "(**(code **)(*param_2 + 0xc))(&local_34,param_2,param_4,param_5);" (call_expression "(**(code **)(*param_2 + 0xc))(&local_34,param_2,param_4,param_5)" (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)" (( "(") (pointer_expression "&local_34" (& "&") (identifier "local_34")) (, ",") (identifier "param_2") (, ",") (identifier "param_4") (, ",") (identifier "param_5") () ")"))) (; ";")) (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_001edf30(param_3,local_34,local_34 + local_30 * 4,0);" (call_expression "FUN_001edf30(param_3,local_34,local_34 + local_30 * 4,0)" (identifier "FUN_001edf30") (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 + -0x23b9;" (assignment_expression "param_3[6] = unaff_EDI + -0x23b9" (subscript_expression "param_3[6]" (identifier "param_3") ([ "[") (number_literal "6") (] "]")) (= "=") (binary_expression "unaff_EDI + -0x23b9" (identifier "unaff_EDI") (+ "+") (number_literal "-0x23b9"))) (; ";")) (if_statement "if (local_34 != local_2c) {\n    FUN_001e6db0(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_001e6db0(local_34);\n  }" ({ "{") (expression_statement "FUN_001e6db0(local_34);" (call_expression "FUN_001e6db0(local_34)" (identifier "FUN_001e6db0") (argument_list "(local_34)" (( "(") (identifier "local_34") () ")"))) (; ";")) (} "}"))) (return_statement "return;" (return "return") (; ";")) (} "}")))

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

void std::__facet_shims::__collate_transform<function_1>
               (type_1 param_1,int *param_2,int *var_2,type_1 param_4,type_1 param_5)

{
  int var_6;
  type_2 *var_4;
  int var_5;
  type_2 var_7 [28];
  
  var_1();
  (**(type_3 **)(*param_2 + 0xc))(&var_4,param_2,param_4,param_5);
  if ((type_3 *)var_2[6] != (type_3 *)0x0) {
                    /* try { // try from 00224018 to 00224036 has its CatchHandler @ 00224061 */
    (*(type_3 *)var_2[6])(var_2);
  }
  *var_2 = (int)(var_2 + 2);
  std::wstring::var_3<function_1*>(var_2,var_4,var_4 + var_5 * 4,0);
  var_2[6] = var_6 + -0x23b9;
  if (var_4 != var_7) {
    var_8(var_4);
  }
  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)))) body: (compound_statement (declaration type: (primitive_type) declarator: (identifier)) (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 (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)))) (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)))))) (return_statement))))

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

{
  int unaff_EDI;
  undefined1 *local_34;
  int local_30;
  undefined1 local_2c [28];
  
  FUN_000559ee();
  (**(code **)(*param_2 + 0xc))(&local_34,param_2,param_4,param_5);
  if ((code *)param_3[6] != (code *)0x0) {
                    /* try { // try from 00224018 to 00224036 has its CatchHandler @ 00224061 */
    (*(code *)param_3[6])(param_3);
  }
  *param_3 = (int)(param_3 + 2);
  FUN_001edf30(param_3,local_34,local_34 + local_30 * 4,0);
  param_3[6] = unaff_EDI + -0x23b9;
  if (local_34 != local_2c) {
    FUN_001e6db0(local_34);
  }
  return;
}

