
/* std::istreambuf_iterator<wchar_t, std::char_traits<wchar_t> >
   std::__facet_shims::__money_get<wchar_t>(std::integral_constant<bool, false>, std::locale::facet
   const*, std::istreambuf_iterator<wchar_t, std::char_traits<wchar_t> >,
   std::istreambuf_iterator<wchar_t, std::char_traits<wchar_t> >, bool, std::ios_base&,
   std::_Ios_Iostate&, long double*, std::__facet_shims::__any_string*) */

undefined4 *
std::__facet_shims::__money_get<wchar_t>
          (undefined4 *param_1,undefined4 param_2,int *param_3,undefined4 param_4,undefined4 param_5
          ,undefined4 param_6,undefined4 param_7,undefined1 param_8,undefined4 param_9,int *param_10
          ,int param_11,int param_12)

{
  undefined *puVar1;
  int iVar2;
  undefined *puVar3;
  undefined4 local_38;
  undefined4 local_34;
  undefined4 local_30;
  undefined4 local_2c;
  undefined4 local_28;
  undefined4 local_24;
  undefined *local_20 [2];
  
  puVar1 = PTR__S_empty_rep_storage_004c133c;
  if (param_11 == 0) {
    local_20[0] = PTR__S_empty_rep_storage_004c133c + 0xc;
    local_24 = param_5;
    local_30 = param_6;
    local_2c = param_7;
    local_28 = param_4;
                    /* try { // try from 00387128 to 003871d3 has its CatchHandler @ 00387208 */
    (**(code **)(*param_3 + 0xc))
              (&local_38,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10,local_20);
    if (*param_10 == 0) {
      if (*(code **)(param_12 + 0x18) != (code *)0x0) {
        (**(code **)(param_12 + 0x18))(param_12);
      }
      (*(code *)PTR_wstring_004c12c0)(param_12,local_20);
      puVar3 = PTR_LAB_004c12c4 + 0x40f0;
      *(undefined4 *)(param_12 + 4) = *(undefined4 *)(local_20[0] + -0xc);
      *(undefined **)(param_12 + 0x18) = puVar3;
    }
    *param_1 = local_38;
    param_1[1] = local_34;
    if (local_20[0] + -0xc != puVar1) {
      if (PTR___pthread_key_create_004c5aa0 == (undefined *)0x0) {
        iVar2 = *(int *)(local_20[0] + -4);
        *(int *)(local_20[0] + -4) = iVar2 + -1;
      }
      else {
        SYNC(0);
        iVar2 = *(int *)(local_20[0] + -4);
        *(int *)(local_20[0] + -4) = iVar2 + -1;
        SYNC(0);
      }
      if (iVar2 < 1) {
        (*(code *)PTR__M_destroy_004c12b8)(local_20[0] + -0xc,&local_38);
      }
    }
  }
  else {
    local_2c = param_5;
    local_38 = param_6;
    local_34 = param_7;
    local_30 = param_4;
    (**(code **)(*param_3 + 8))
              (param_1,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10,param_11);
  }
  return param_1;
}



/* std::istreambuf_iterator<wchar_t, std::char_traits<wchar_t> >
   std::__facet_shims::__money_get<wchar_t>(std::integral_constant<bool, false>, std::locale::facet
   const*, std::istreambuf_iterator<wchar_t, std::char_traits<wchar_t> >,
   std::istreambuf_iterator<wchar_t, std::char_traits<wchar_t> >, bool, std::ios_base&,
   std::_Ios_Iostate&, long double*, std::__facet_shims::__any_string*) */

undefined4 *
std::__facet_shims::__money_get<wchar_t>
          (undefined4 *param_1,undefined4 param_2,int *param_3,undefined4 param_4,undefined4 param_5
          ,undefined4 param_6,undefined4 param_7,undefined1 param_8,undefined4 param_9,int *param_10
          ,int param_11,int param_12)

{
  undefined *puVar1;
  int iVar2;
  undefined *puVar3;
  undefined4 local_38;
  undefined4 local_34;
  undefined4 local_30;
  undefined4 local_2c;
  undefined4 local_28;
  undefined4 local_24;
  undefined *local_20 [2];
  
  puVar1 = PTR__S_empty_rep_storage_004c133c;
  if (param_11 == 0) {
    local_20[0] = PTR__S_empty_rep_storage_004c133c + 0xc;
    local_24 = param_5;
    local_30 = param_6;
    local_2c = param_7;
    local_28 = param_4;
                    /* try { // try from 00387128 to 003871d3 has its CatchHandler @ 00387208 */
    (**(code **)(*param_3 + 0xc))
              (&local_38,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10,local_20);
    if (*param_10 == 0) {
      if (*(code **)(param_12 + 0x18) != (code *)0x0) {
        (**(code **)(param_12 + 0x18))(param_12);
      }
      (*(code *)PTR_wstring_004c12c0)(param_12,local_20);
      puVar3 = PTR_LAB_004c12c4 + 0x40f0;
      *(undefined4 *)(param_12 + 4) = *(undefined4 *)(local_20[0] + -0xc);
      *(undefined **)(param_12 + 0x18) = puVar3;
    }
    *param_1 = local_38;
    param_1[1] = local_34;
    if (local_20[0] + -0xc != puVar1) {
      if (PTR___pthread_key_create_004c5aa0 == (undefined *)0x0) {
        iVar2 = *(int *)(local_20[0] + -4);
        *(int *)(local_20[0] + -4) = iVar2 + -1;
      }
      else {
        SYNC(0);
        iVar2 = *(int *)(local_20[0] + -4);
        *(int *)(local_20[0] + -4) = iVar2 + -1;
        SYNC(0);
      }
      if (iVar2 < 1) {
        (*(code *)PTR__M_destroy_004c12b8)(local_20[0] + -0xc,&local_38);
      }
    }
  }
  else {
    local_2c = param_5;
    local_38 = param_6;
    local_34 = param_7;
    local_30 = param_4;
    (**(code **)(*param_3 + 8))
              (param_1,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10,param_11);
  }
  return param_1;
}


lui gp,0x14
addiu gp,gp,0x2238
addu gp,gp,t9
addiu sp,sp,-0x68
lw t4,0x0(a2)
or v0,a2,zero
lw v1,0x90(sp)
lbu t5,0x87(sp)
lw t6,0x88(sp)
sw gp,0x28(sp)
sw s1,0x54(sp)
sw s0,0x50(sp)
or s0,a0,zero
sw ra,0x64(sp)
sw s4,0x60(sp)
sw s3,0x5c(sp)
sw s2,0x58(sp)
sw a1,0x6c(sp)
sw a3,0x74(sp)
beq v1,zero,0x003870cc
_lw s1,0x8c(sp)
lw t1,0x7c(sp)
or t3,a3,zero
lw t0,0x80(sp)
or a2,a3,zero
lw t2,0x78(sp)
or a1,v0,zero
sw v1,0x24(sp)
sw s1,0x20(sp)
sw t6,0x1c(sp)
sw t5,0x18(sp)
sw t1,0x10(sp)
sw t0,0x14(sp)
sw t3,0x38(sp)
sw t2,0x3c(sp)
sw t1,0x30(sp)
sw t0,0x34(sp)
lw t9,0x8(t4)
jalr t9
_or a3,t2,zero
lw ra,0x64(sp)
or v0,s0,zero
lw s4,0x60(sp)
lw s3,0x5c(sp)
lw s2,0x58(sp)
lw s1,0x54(sp)
lw s0,0x50(sp)
jr ra
_addiu sp,sp,0x68
lw t0,0x7c(sp)
addiu s3,sp,0x48
lw v1,0x80(sp)
addiu s4,sp,0x30
lw s2,-0x7f04(gp)
or a1,v0,zero
lw t1,0x78(sp)
or t2,a3,zero
sw s3,0x24(sp)
or a2,a3,zero
sw s1,0x20(sp)
addiu v0,s2,0xc
sw t6,0x1c(sp)
or a3,t1,zero
sw t5,0x18(sp)
sw t0,0x10(sp)
sw v1,0x14(sp)
sw v0,0x48(sp)
sw t2,0x40(sp)
sw t1,0x44(sp)
sw t0,0x38(sp)
sw v1,0x3c(sp)
lw t9,0xc(t4)
jalr t9
_or a0,s4,zero
lw v1,0x30(sp)
lw v0,0x0(s1)
lw gp,0x28(sp)
sw v1,0x74(sp)
lw v1,0x34(sp)
beq v0,zero,0x003871a8
_sw v1,0x78(sp)
lw v0,0x48(sp)
lw v1,0x74(sp)
addiu a0,v0,-0xc
sw v1,0x0(s0)
lw v1,0x78(sp)
beq a0,s2,0x003870a8
_sw v1,0x4(s0)
lw v1,-0x37a0(gp)
beq v1,zero,0x003871f8
_nop
sync 0x0
ll v1,-0x4(v0)
addiu at,v1,-0x1
sc at,-0x4(v0)
beq at,zero,0x00387178
_nop
sync 0x0
bgtz v1,0x003870a8
_lw t9,-0x7f88(gp)
jalr t9
_or a1,s4,zero
b 0x003870ac
_lw ra,0x64(sp)
lw v0,0x94(sp)
lw t9,0x18(v0)
beq t9,zero,0x003871c4
_nop
jalr t9
_or a0,v0,zero
lw gp,0x28(sp)
lw t9,-0x7f80(gp)
or a1,s3,zero
jalr t9
_lw a0,0x94(sp)
lw gp,0x28(sp)
lw v0,0x48(sp)
lw a1,0x94(sp)
lw v1,-0x7f7c(gp)
lw a0,-0xc(v0)
addiu v1,v1,0x40f0
sw a0,0x4(a1)
b 0x00387150
_sw v1,0x18(a1)
lw v1,-0x4(v0)
addiu a1,v1,-0x1
b 0x00387190
_sw a1,-0x4(v0)
(translation_unit "/* std::istreambuf_iterator<wchar_t, std::char_traits<wchar_t> >\n   std::__facet_shims::__money_get<wchar_t>(std::integral_constant<bool, false>, std::locale::facet\n   const*, std::istreambuf_iterator<wchar_t, std::char_traits<wchar_t> >,\n   std::istreambuf_iterator<wchar_t, std::char_traits<wchar_t> >, bool, std::ios_base&,\n   std::_Ios_Iostate&, long double*, std::__facet_shims::__any_string*) */\n\nundefined4 *\nstd::__facet_shims::__money_get<wchar_t>\n          (undefined4 *param_1,undefined4 param_2,int *param_3,undefined4 param_4,undefined4 param_5\n          ,undefined4 param_6,undefined4 param_7,undefined1 param_8,undefined4 param_9,int *param_10\n          ,int param_11,int param_12)\n\n{\n  undefined *puVar1;\n  int iVar2;\n  undefined *puVar3;\n  undefined4 local_38;\n  undefined4 local_34;\n  undefined4 local_30;\n  undefined4 local_2c;\n  undefined4 local_28;\n  undefined4 local_24;\n  undefined *local_20 [2];\n  \n  puVar1 = PTR__S_empty_rep_storage_004c133c;\n  if (param_11 == 0) {\n    local_20[0] = PTR__S_empty_rep_storage_004c133c + 0xc;\n    local_24 = param_5;\n    local_30 = param_6;\n    local_2c = param_7;\n    local_28 = param_4;\n                    /* try { // try from 00387128 to 003871d3 has its CatchHandler @ 00387208 */\n    (**(code **)(*param_3 + 0xc))\n              (&local_38,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10,local_20);\n    if (*param_10 == 0) {\n      if (*(code **)(param_12 + 0x18) != (code *)0x0) {\n        (**(code **)(param_12 + 0x18))(param_12);\n      }\n      (*(code *)PTR_wstring_004c12c0)(param_12,local_20);\n      puVar3 = PTR_LAB_004c12c4 + 0x40f0;\n      *(undefined4 *)(param_12 + 4) = *(undefined4 *)(local_20[0] + -0xc);\n      *(undefined **)(param_12 + 0x18) = puVar3;\n    }\n    *param_1 = local_38;\n    param_1[1] = local_34;\n    if (local_20[0] + -0xc != puVar1) {\n      if (PTR___pthread_key_create_004c5aa0 == (undefined *)0x0) {\n        iVar2 = *(int *)(local_20[0] + -4);\n        *(int *)(local_20[0] + -4) = iVar2 + -1;\n      }\n      else {\n        SYNC(0);\n        iVar2 = *(int *)(local_20[0] + -4);\n        *(int *)(local_20[0] + -4) = iVar2 + -1;\n        SYNC(0);\n      }\n      if (iVar2 < 1) {\n        (*(code *)PTR__M_destroy_004c12b8)(local_20[0] + -0xc,&local_38);\n      }\n    }\n  }\n  else {\n    local_2c = param_5;\n    local_38 = param_6;\n    local_34 = param_7;\n    local_30 = param_4;\n    (**(code **)(*param_3 + 8))\n              (param_1,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10,param_11);\n  }\n  return param_1;\n}\n\n" comment (ERROR "undefined4 *\nstd::" (binary_expression "undefined4 *\nstd" identifier * identifier) : :) (labeled_statement "__facet_shims::__money_get<wchar_t>\n          (undefined4 *param_1,undefined4 param_2,int *param_3,undefined4 param_4,undefined4 param_5\n          ,undefined4 param_6,undefined4 param_7,undefined1 param_8,undefined4 param_9,int *param_10\n          ,int param_11,int param_12)" statement_identifier : (ERROR ":" :) (expression_statement "__money_get<wchar_t>\n          (undefined4 *param_1,undefined4 param_2,int *param_3,undefined4 param_4,undefined4 param_5\n          ,undefined4 param_6,undefined4 param_7,undefined1 param_8,undefined4 param_9,int *param_10\n          ,int param_11,int param_12)" (binary_expression "__money_get<wchar_t>\n          (undefined4 *param_1,undefined4 param_2,int *param_3,undefined4 param_4,undefined4 param_5\n          ,undefined4 param_6,undefined4 param_7,undefined1 param_8,undefined4 param_9,int *param_10\n          ,int param_11,int param_12)" (binary_expression "__money_get<wchar_t" identifier < identifier) > (parenthesized_expression "(undefined4 *param_1,undefined4 param_2,int *param_3,undefined4 param_4,undefined4 param_5\n          ,undefined4 param_6,undefined4 param_7,undefined1 param_8,undefined4 param_9,int *param_10\n          ,int param_11,int param_12)" ( (comma_expression "undefined4 *param_1,undefined4 param_2,int *param_3,undefined4 param_4,undefined4 param_5\n          ,undefined4 param_6,undefined4 param_7,undefined1 param_8,undefined4 param_9,int *param_10\n          ,int param_11,int param_12" (binary_expression "undefined4 *param_1" identifier * identifier) , (comma_expression "undefined4 param_2,int *param_3,undefined4 param_4,undefined4 param_5\n          ,undefined4 param_6,undefined4 param_7,undefined1 param_8,undefined4 param_9,int *param_10\n          ,int param_11,int param_12" identifier (ERROR "param_2" identifier) , (comma_expression "int *param_3,undefined4 param_4,undefined4 param_5\n          ,undefined4 param_6,undefined4 param_7,undefined1 param_8,undefined4 param_9,int *param_10\n          ,int param_11,int param_12" (binary_expression "int *param_3" identifier * identifier) , (comma_expression "undefined4 param_4,undefined4 param_5\n          ,undefined4 param_6,undefined4 param_7,undefined1 param_8,undefined4 param_9,int *param_10\n          ,int param_11,int param_12" identifier (ERROR "param_4" identifier) , (comma_expression "undefined4 param_5\n          ,undefined4 param_6,undefined4 param_7,undefined1 param_8,undefined4 param_9,int *param_10\n          ,int param_11,int param_12" identifier (ERROR "param_5" identifier) , (comma_expression "undefined4 param_6,undefined4 param_7,undefined1 param_8,undefined4 param_9,int *param_10\n          ,int param_11,int param_12" identifier (ERROR "param_6" identifier) , (comma_expression "undefined4 param_7,undefined1 param_8,undefined4 param_9,int *param_10\n          ,int param_11,int param_12" identifier (ERROR "param_7" identifier) , (comma_expression "undefined1 param_8,undefined4 param_9,int *param_10\n          ,int param_11,int param_12" identifier (ERROR "param_8" identifier) , (ERROR "undefined4" identifier) (comma_expression "param_9,int *param_10\n          ,int param_11,int param_12" identifier , (comma_expression "int *param_10\n          ,int param_11,int param_12" (binary_expression "int *param_10" identifier * identifier) , (ERROR "int" identifier) (comma_expression "param_11,int param_12" identifier , (ERROR "int" identifier) identifier))))))))))) ))) ;)) (compound_statement "{\n  undefined *puVar1;\n  int iVar2;\n  undefined *puVar3;\n  undefined4 local_38;\n  undefined4 local_34;\n  undefined4 local_30;\n  undefined4 local_2c;\n  undefined4 local_28;\n  undefined4 local_24;\n  undefined *local_20 [2];\n  \n  puVar1 = PTR__S_empty_rep_storage_004c133c;\n  if (param_11 == 0) {\n    local_20[0] = PTR__S_empty_rep_storage_004c133c + 0xc;\n    local_24 = param_5;\n    local_30 = param_6;\n    local_2c = param_7;\n    local_28 = param_4;\n                    /* try { // try from 00387128 to 003871d3 has its CatchHandler @ 00387208 */\n    (**(code **)(*param_3 + 0xc))\n              (&local_38,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10,local_20);\n    if (*param_10 == 0) {\n      if (*(code **)(param_12 + 0x18) != (code *)0x0) {\n        (**(code **)(param_12 + 0x18))(param_12);\n      }\n      (*(code *)PTR_wstring_004c12c0)(param_12,local_20);\n      puVar3 = PTR_LAB_004c12c4 + 0x40f0;\n      *(undefined4 *)(param_12 + 4) = *(undefined4 *)(local_20[0] + -0xc);\n      *(undefined **)(param_12 + 0x18) = puVar3;\n    }\n    *param_1 = local_38;\n    param_1[1] = local_34;\n    if (local_20[0] + -0xc != puVar1) {\n      if (PTR___pthread_key_create_004c5aa0 == (undefined *)0x0) {\n        iVar2 = *(int *)(local_20[0] + -4);\n        *(int *)(local_20[0] + -4) = iVar2 + -1;\n      }\n      else {\n        SYNC(0);\n        iVar2 = *(int *)(local_20[0] + -4);\n        *(int *)(local_20[0] + -4) = iVar2 + -1;\n        SYNC(0);\n      }\n      if (iVar2 < 1) {\n        (*(code *)PTR__M_destroy_004c12b8)(local_20[0] + -0xc,&local_38);\n      }\n    }\n  }\n  else {\n    local_2c = param_5;\n    local_38 = param_6;\n    local_34 = param_7;\n    local_30 = param_4;\n    (**(code **)(*param_3 + 8))\n              (param_1,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10,param_11);\n  }\n  return param_1;\n}" { (declaration "undefined *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "undefined *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "undefined4 local_38;" type_identifier identifier ;) (declaration "undefined4 local_34;" type_identifier identifier ;) (declaration "undefined4 local_30;" type_identifier identifier ;) (declaration "undefined4 local_2c;" type_identifier identifier ;) (declaration "undefined4 local_28;" type_identifier identifier ;) (declaration "undefined4 local_24;" type_identifier identifier ;) (declaration "undefined *local_20 [2];" type_identifier (pointer_declarator "*local_20 [2]" * (array_declarator "local_20 [2]" identifier [ number_literal ])) ;) (expression_statement "puVar1 = PTR__S_empty_rep_storage_004c133c;" (assignment_expression "puVar1 = PTR__S_empty_rep_storage_004c133c" identifier = identifier) ;) (if_statement "if (param_11 == 0) {\n    local_20[0] = PTR__S_empty_rep_storage_004c133c + 0xc;\n    local_24 = param_5;\n    local_30 = param_6;\n    local_2c = param_7;\n    local_28 = param_4;\n                    /* try { // try from 00387128 to 003871d3 has its CatchHandler @ 00387208 */\n    (**(code **)(*param_3 + 0xc))\n              (&local_38,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10,local_20);\n    if (*param_10 == 0) {\n      if (*(code **)(param_12 + 0x18) != (code *)0x0) {\n        (**(code **)(param_12 + 0x18))(param_12);\n      }\n      (*(code *)PTR_wstring_004c12c0)(param_12,local_20);\n      puVar3 = PTR_LAB_004c12c4 + 0x40f0;\n      *(undefined4 *)(param_12 + 4) = *(undefined4 *)(local_20[0] + -0xc);\n      *(undefined **)(param_12 + 0x18) = puVar3;\n    }\n    *param_1 = local_38;\n    param_1[1] = local_34;\n    if (local_20[0] + -0xc != puVar1) {\n      if (PTR___pthread_key_create_004c5aa0 == (undefined *)0x0) {\n        iVar2 = *(int *)(local_20[0] + -4);\n        *(int *)(local_20[0] + -4) = iVar2 + -1;\n      }\n      else {\n        SYNC(0);\n        iVar2 = *(int *)(local_20[0] + -4);\n        *(int *)(local_20[0] + -4) = iVar2 + -1;\n        SYNC(0);\n      }\n      if (iVar2 < 1) {\n        (*(code *)PTR__M_destroy_004c12b8)(local_20[0] + -0xc,&local_38);\n      }\n    }\n  }\n  else {\n    local_2c = param_5;\n    local_38 = param_6;\n    local_34 = param_7;\n    local_30 = param_4;\n    (**(code **)(*param_3 + 8))\n              (param_1,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10,param_11);\n  }" if (parenthesized_expression "(param_11 == 0)" ( (binary_expression "param_11 == 0" identifier == number_literal) )) (compound_statement "{\n    local_20[0] = PTR__S_empty_rep_storage_004c133c + 0xc;\n    local_24 = param_5;\n    local_30 = param_6;\n    local_2c = param_7;\n    local_28 = param_4;\n                    /* try { // try from 00387128 to 003871d3 has its CatchHandler @ 00387208 */\n    (**(code **)(*param_3 + 0xc))\n              (&local_38,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10,local_20);\n    if (*param_10 == 0) {\n      if (*(code **)(param_12 + 0x18) != (code *)0x0) {\n        (**(code **)(param_12 + 0x18))(param_12);\n      }\n      (*(code *)PTR_wstring_004c12c0)(param_12,local_20);\n      puVar3 = PTR_LAB_004c12c4 + 0x40f0;\n      *(undefined4 *)(param_12 + 4) = *(undefined4 *)(local_20[0] + -0xc);\n      *(undefined **)(param_12 + 0x18) = puVar3;\n    }\n    *param_1 = local_38;\n    param_1[1] = local_34;\n    if (local_20[0] + -0xc != puVar1) {\n      if (PTR___pthread_key_create_004c5aa0 == (undefined *)0x0) {\n        iVar2 = *(int *)(local_20[0] + -4);\n        *(int *)(local_20[0] + -4) = iVar2 + -1;\n      }\n      else {\n        SYNC(0);\n        iVar2 = *(int *)(local_20[0] + -4);\n        *(int *)(local_20[0] + -4) = iVar2 + -1;\n        SYNC(0);\n      }\n      if (iVar2 < 1) {\n        (*(code *)PTR__M_destroy_004c12b8)(local_20[0] + -0xc,&local_38);\n      }\n    }\n  }" { (expression_statement "local_20[0] = PTR__S_empty_rep_storage_004c133c + 0xc;" (assignment_expression "local_20[0] = PTR__S_empty_rep_storage_004c133c + 0xc" (subscript_expression "local_20[0]" identifier [ number_literal ]) = (binary_expression "PTR__S_empty_rep_storage_004c133c + 0xc" identifier + number_literal)) ;) (expression_statement "local_24 = param_5;" (assignment_expression "local_24 = param_5" identifier = identifier) ;) (expression_statement "local_30 = param_6;" (assignment_expression "local_30 = param_6" identifier = identifier) ;) (expression_statement "local_2c = param_7;" (assignment_expression "local_2c = param_7" identifier = identifier) ;) (expression_statement "local_28 = param_4;" (assignment_expression "local_28 = param_4" identifier = identifier) ;) comment (expression_statement "(**(code **)(*param_3 + 0xc))\n              (&local_38,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10,local_20);" (call_expression "(**(code **)(*param_3 + 0xc))\n              (&local_38,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10,local_20)" (parenthesized_expression "(**(code **)(*param_3 + 0xc))" ( (pointer_expression "**(code **)(*param_3 + 0xc)" * (pointer_expression "*(code **)(*param_3 + 0xc)" * (cast_expression "(code **)(*param_3 + 0xc)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_3 + 0xc)" ( (binary_expression "*param_3 + 0xc" (pointer_expression "*param_3" * identifier) + number_literal) ))))) )) (argument_list "(&local_38,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10,local_20)" ( (pointer_expression "&local_38" & identifier) , identifier , identifier , identifier , identifier , identifier , identifier , identifier , identifier , identifier ))) ;) (if_statement "if (*param_10 == 0) {\n      if (*(code **)(param_12 + 0x18) != (code *)0x0) {\n        (**(code **)(param_12 + 0x18))(param_12);\n      }\n      (*(code *)PTR_wstring_004c12c0)(param_12,local_20);\n      puVar3 = PTR_LAB_004c12c4 + 0x40f0;\n      *(undefined4 *)(param_12 + 4) = *(undefined4 *)(local_20[0] + -0xc);\n      *(undefined **)(param_12 + 0x18) = puVar3;\n    }" if (parenthesized_expression "(*param_10 == 0)" ( (binary_expression "*param_10 == 0" (pointer_expression "*param_10" * identifier) == number_literal) )) (compound_statement "{\n      if (*(code **)(param_12 + 0x18) != (code *)0x0) {\n        (**(code **)(param_12 + 0x18))(param_12);\n      }\n      (*(code *)PTR_wstring_004c12c0)(param_12,local_20);\n      puVar3 = PTR_LAB_004c12c4 + 0x40f0;\n      *(undefined4 *)(param_12 + 4) = *(undefined4 *)(local_20[0] + -0xc);\n      *(undefined **)(param_12 + 0x18) = puVar3;\n    }" { (if_statement "if (*(code **)(param_12 + 0x18) != (code *)0x0) {\n        (**(code **)(param_12 + 0x18))(param_12);\n      }" if (parenthesized_expression "(*(code **)(param_12 + 0x18) != (code *)0x0)" ( (binary_expression "*(code **)(param_12 + 0x18) != (code *)0x0" (pointer_expression "*(code **)(param_12 + 0x18)" * (cast_expression "(code **)(param_12 + 0x18)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_12 + 0x18)" ( (binary_expression "param_12 + 0x18" identifier + number_literal) )))) != (cast_expression "(code *)0x0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        (**(code **)(param_12 + 0x18))(param_12);\n      }" { (expression_statement "(**(code **)(param_12 + 0x18))(param_12);" (call_expression "(**(code **)(param_12 + 0x18))(param_12)" (parenthesized_expression "(**(code **)(param_12 + 0x18))" ( (pointer_expression "**(code **)(param_12 + 0x18)" * (pointer_expression "*(code **)(param_12 + 0x18)" * (cast_expression "(code **)(param_12 + 0x18)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_12 + 0x18)" ( (binary_expression "param_12 + 0x18" identifier + number_literal) ))))) )) (argument_list "(param_12)" ( identifier ))) ;) })) (expression_statement "(*(code *)PTR_wstring_004c12c0)(param_12,local_20);" (call_expression "(*(code *)PTR_wstring_004c12c0)(param_12,local_20)" (parenthesized_expression "(*(code *)PTR_wstring_004c12c0)" ( (pointer_expression "*(code *)PTR_wstring_004c12c0" * (cast_expression "(code *)PTR_wstring_004c12c0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(param_12,local_20)" ( identifier , identifier ))) ;) (expression_statement "puVar3 = PTR_LAB_004c12c4 + 0x40f0;" (assignment_expression "puVar3 = PTR_LAB_004c12c4 + 0x40f0" identifier = (binary_expression "PTR_LAB_004c12c4 + 0x40f0" identifier + number_literal)) ;) (expression_statement "*(undefined4 *)(param_12 + 4) = *(undefined4 *)(local_20[0] + -0xc);" (assignment_expression "*(undefined4 *)(param_12 + 4) = *(undefined4 *)(local_20[0] + -0xc)" (pointer_expression "*(undefined4 *)(param_12 + 4)" * (cast_expression "(undefined4 *)(param_12 + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_12 + 4)" ( (binary_expression "param_12 + 4" identifier + number_literal) )))) = (pointer_expression "*(undefined4 *)(local_20[0] + -0xc)" * (cast_expression "(undefined4 *)(local_20[0] + -0xc)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_20[0] + -0xc)" ( (binary_expression "local_20[0] + -0xc" (subscript_expression "local_20[0]" identifier [ number_literal ]) + number_literal) ))))) ;) (expression_statement "*(undefined **)(param_12 + 0x18) = puVar3;" (assignment_expression "*(undefined **)(param_12 + 0x18) = puVar3" (pointer_expression "*(undefined **)(param_12 + 0x18)" * (cast_expression "(undefined **)(param_12 + 0x18)" ( (type_descriptor "undefined **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_12 + 0x18)" ( (binary_expression "param_12 + 0x18" identifier + number_literal) )))) = identifier) ;) })) (expression_statement "*param_1 = local_38;" (assignment_expression "*param_1 = local_38" (pointer_expression "*param_1" * identifier) = identifier) ;) (expression_statement "param_1[1] = local_34;" (assignment_expression "param_1[1] = local_34" (subscript_expression "param_1[1]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (local_20[0] + -0xc != puVar1) {\n      if (PTR___pthread_key_create_004c5aa0 == (undefined *)0x0) {\n        iVar2 = *(int *)(local_20[0] + -4);\n        *(int *)(local_20[0] + -4) = iVar2 + -1;\n      }\n      else {\n        SYNC(0);\n        iVar2 = *(int *)(local_20[0] + -4);\n        *(int *)(local_20[0] + -4) = iVar2 + -1;\n        SYNC(0);\n      }\n      if (iVar2 < 1) {\n        (*(code *)PTR__M_destroy_004c12b8)(local_20[0] + -0xc,&local_38);\n      }\n    }" if (parenthesized_expression "(local_20[0] + -0xc != puVar1)" ( (binary_expression "local_20[0] + -0xc != puVar1" (binary_expression "local_20[0] + -0xc" (subscript_expression "local_20[0]" identifier [ number_literal ]) + number_literal) != identifier) )) (compound_statement "{\n      if (PTR___pthread_key_create_004c5aa0 == (undefined *)0x0) {\n        iVar2 = *(int *)(local_20[0] + -4);\n        *(int *)(local_20[0] + -4) = iVar2 + -1;\n      }\n      else {\n        SYNC(0);\n        iVar2 = *(int *)(local_20[0] + -4);\n        *(int *)(local_20[0] + -4) = iVar2 + -1;\n        SYNC(0);\n      }\n      if (iVar2 < 1) {\n        (*(code *)PTR__M_destroy_004c12b8)(local_20[0] + -0xc,&local_38);\n      }\n    }" { (if_statement "if (PTR___pthread_key_create_004c5aa0 == (undefined *)0x0) {\n        iVar2 = *(int *)(local_20[0] + -4);\n        *(int *)(local_20[0] + -4) = iVar2 + -1;\n      }\n      else {\n        SYNC(0);\n        iVar2 = *(int *)(local_20[0] + -4);\n        *(int *)(local_20[0] + -4) = iVar2 + -1;\n        SYNC(0);\n      }" if (parenthesized_expression "(PTR___pthread_key_create_004c5aa0 == (undefined *)0x0)" ( (binary_expression "PTR___pthread_key_create_004c5aa0 == (undefined *)0x0" identifier == (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        iVar2 = *(int *)(local_20[0] + -4);\n        *(int *)(local_20[0] + -4) = iVar2 + -1;\n      }" { (expression_statement "iVar2 = *(int *)(local_20[0] + -4);" (assignment_expression "iVar2 = *(int *)(local_20[0] + -4)" identifier = (pointer_expression "*(int *)(local_20[0] + -4)" * (cast_expression "(int *)(local_20[0] + -4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_20[0] + -4)" ( (binary_expression "local_20[0] + -4" (subscript_expression "local_20[0]" identifier [ number_literal ]) + number_literal) ))))) ;) (expression_statement "*(int *)(local_20[0] + -4) = iVar2 + -1;" (assignment_expression "*(int *)(local_20[0] + -4) = iVar2 + -1" (pointer_expression "*(int *)(local_20[0] + -4)" * (cast_expression "(int *)(local_20[0] + -4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_20[0] + -4)" ( (binary_expression "local_20[0] + -4" (subscript_expression "local_20[0]" identifier [ number_literal ]) + number_literal) )))) = (binary_expression "iVar2 + -1" identifier + number_literal)) ;) }) (else_clause "else {\n        SYNC(0);\n        iVar2 = *(int *)(local_20[0] + -4);\n        *(int *)(local_20[0] + -4) = iVar2 + -1;\n        SYNC(0);\n      }" else (compound_statement "{\n        SYNC(0);\n        iVar2 = *(int *)(local_20[0] + -4);\n        *(int *)(local_20[0] + -4) = iVar2 + -1;\n        SYNC(0);\n      }" { (expression_statement "SYNC(0);" (call_expression "SYNC(0)" identifier (argument_list "(0)" ( number_literal ))) ;) (expression_statement "iVar2 = *(int *)(local_20[0] + -4);" (assignment_expression "iVar2 = *(int *)(local_20[0] + -4)" identifier = (pointer_expression "*(int *)(local_20[0] + -4)" * (cast_expression "(int *)(local_20[0] + -4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_20[0] + -4)" ( (binary_expression "local_20[0] + -4" (subscript_expression "local_20[0]" identifier [ number_literal ]) + number_literal) ))))) ;) (expression_statement "*(int *)(local_20[0] + -4) = iVar2 + -1;" (assignment_expression "*(int *)(local_20[0] + -4) = iVar2 + -1" (pointer_expression "*(int *)(local_20[0] + -4)" * (cast_expression "(int *)(local_20[0] + -4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_20[0] + -4)" ( (binary_expression "local_20[0] + -4" (subscript_expression "local_20[0]" identifier [ number_literal ]) + number_literal) )))) = (binary_expression "iVar2 + -1" identifier + number_literal)) ;) (expression_statement "SYNC(0);" (call_expression "SYNC(0)" identifier (argument_list "(0)" ( number_literal ))) ;) }))) (if_statement "if (iVar2 < 1) {\n        (*(code *)PTR__M_destroy_004c12b8)(local_20[0] + -0xc,&local_38);\n      }" if (parenthesized_expression "(iVar2 < 1)" ( (binary_expression "iVar2 < 1" identifier < number_literal) )) (compound_statement "{\n        (*(code *)PTR__M_destroy_004c12b8)(local_20[0] + -0xc,&local_38);\n      }" { (expression_statement "(*(code *)PTR__M_destroy_004c12b8)(local_20[0] + -0xc,&local_38);" (call_expression "(*(code *)PTR__M_destroy_004c12b8)(local_20[0] + -0xc,&local_38)" (parenthesized_expression "(*(code *)PTR__M_destroy_004c12b8)" ( (pointer_expression "*(code *)PTR__M_destroy_004c12b8" * (cast_expression "(code *)PTR__M_destroy_004c12b8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(local_20[0] + -0xc,&local_38)" ( (binary_expression "local_20[0] + -0xc" (subscript_expression "local_20[0]" identifier [ number_literal ]) + number_literal) , (pointer_expression "&local_38" & identifier) ))) ;) })) })) }) (else_clause "else {\n    local_2c = param_5;\n    local_38 = param_6;\n    local_34 = param_7;\n    local_30 = param_4;\n    (**(code **)(*param_3 + 8))\n              (param_1,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10,param_11);\n  }" else (compound_statement "{\n    local_2c = param_5;\n    local_38 = param_6;\n    local_34 = param_7;\n    local_30 = param_4;\n    (**(code **)(*param_3 + 8))\n              (param_1,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10,param_11);\n  }" { (expression_statement "local_2c = param_5;" (assignment_expression "local_2c = param_5" identifier = identifier) ;) (expression_statement "local_38 = param_6;" (assignment_expression "local_38 = param_6" identifier = identifier) ;) (expression_statement "local_34 = param_7;" (assignment_expression "local_34 = param_7" identifier = identifier) ;) (expression_statement "local_30 = param_4;" (assignment_expression "local_30 = param_4" identifier = identifier) ;) (expression_statement "(**(code **)(*param_3 + 8))\n              (param_1,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10,param_11);" (call_expression "(**(code **)(*param_3 + 8))\n              (param_1,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10,param_11)" (parenthesized_expression "(**(code **)(*param_3 + 8))" ( (pointer_expression "**(code **)(*param_3 + 8)" * (pointer_expression "*(code **)(*param_3 + 8)" * (cast_expression "(code **)(*param_3 + 8)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_3 + 8)" ( (binary_expression "*param_3 + 8" (pointer_expression "*param_3" * identifier) + number_literal) ))))) )) (argument_list "(param_1,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10,param_11)" ( identifier , identifier , identifier , identifier , identifier , identifier , identifier , identifier , identifier , identifier ))) ;) }))) (return_statement "return param_1;" return identifier ;) }))
(translation_unit "/* std::istreambuf_iterator<wchar_t, std::char_traits<wchar_t> >\n   std::__facet_shims::__money_get<wchar_t>(std::integral_constant<bool, false>, std::locale::facet\n   const*, std::istreambuf_iterator<wchar_t, std::char_traits<wchar_t> >,\n   std::istreambuf_iterator<wchar_t, std::char_traits<wchar_t> >, bool, std::ios_base&,\n   std::_Ios_Iostate&, long double*, std::__facet_shims::__any_string*) */\n\nundefined4 *\nstd::__facet_shims::__money_get<wchar_t>\n          (undefined4 *param_1,undefined4 param_2,int *param_3,undefined4 param_4,undefined4 param_5\n          ,undefined4 param_6,undefined4 param_7,undefined1 param_8,undefined4 param_9,int *param_10\n          ,int param_11,int param_12)\n\n{\n  undefined *puVar1;\n  int iVar2;\n  undefined *puVar3;\n  undefined4 local_38;\n  undefined4 local_34;\n  undefined4 local_30;\n  undefined4 local_2c;\n  undefined4 local_28;\n  undefined4 local_24;\n  undefined *local_20 [2];\n  \n  puVar1 = PTR__S_empty_rep_storage_004c133c;\n  if (param_11 == 0) {\n    local_20[0] = PTR__S_empty_rep_storage_004c133c + 0xc;\n    local_24 = param_5;\n    local_30 = param_6;\n    local_2c = param_7;\n    local_28 = param_4;\n                    /* try { // try from 00387128 to 003871d3 has its CatchHandler @ 00387208 */\n    (**(code **)(*param_3 + 0xc))\n              (&local_38,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10,local_20);\n    if (*param_10 == 0) {\n      if (*(code **)(param_12 + 0x18) != (code *)0x0) {\n        (**(code **)(param_12 + 0x18))(param_12);\n      }\n      (*(code *)PTR_wstring_004c12c0)(param_12,local_20);\n      puVar3 = PTR_LAB_004c12c4 + 0x40f0;\n      *(undefined4 *)(param_12 + 4) = *(undefined4 *)(local_20[0] + -0xc);\n      *(undefined **)(param_12 + 0x18) = puVar3;\n    }\n    *param_1 = local_38;\n    param_1[1] = local_34;\n    if (local_20[0] + -0xc != puVar1) {\n      if (PTR___pthread_key_create_004c5aa0 == (undefined *)0x0) {\n        iVar2 = *(int *)(local_20[0] + -4);\n        *(int *)(local_20[0] + -4) = iVar2 + -1;\n      }\n      else {\n        SYNC(0);\n        iVar2 = *(int *)(local_20[0] + -4);\n        *(int *)(local_20[0] + -4) = iVar2 + -1;\n        SYNC(0);\n      }\n      if (iVar2 < 1) {\n        (*(code *)PTR__M_destroy_004c12b8)(local_20[0] + -0xc,&local_38);\n      }\n    }\n  }\n  else {\n    local_2c = param_5;\n    local_38 = param_6;\n    local_34 = param_7;\n    local_30 = param_4;\n    (**(code **)(*param_3 + 8))\n              (param_1,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10,param_11);\n  }\n  return param_1;\n}\n\n" comment (ERROR "undefined4 *\nstd::" (binary_expression "undefined4 *\nstd" identifier * identifier) : :) (labeled_statement "__facet_shims::__money_get<wchar_t>\n          (undefined4 *param_1,undefined4 param_2,int *param_3,undefined4 param_4,undefined4 param_5\n          ,undefined4 param_6,undefined4 param_7,undefined1 param_8,undefined4 param_9,int *param_10\n          ,int param_11,int param_12)" statement_identifier : (ERROR ":" :) (expression_statement "__money_get<wchar_t>\n          (undefined4 *param_1,undefined4 param_2,int *param_3,undefined4 param_4,undefined4 param_5\n          ,undefined4 param_6,undefined4 param_7,undefined1 param_8,undefined4 param_9,int *param_10\n          ,int param_11,int param_12)" (binary_expression "__money_get<wchar_t>\n          (undefined4 *param_1,undefined4 param_2,int *param_3,undefined4 param_4,undefined4 param_5\n          ,undefined4 param_6,undefined4 param_7,undefined1 param_8,undefined4 param_9,int *param_10\n          ,int param_11,int param_12)" (binary_expression "__money_get<wchar_t" identifier < identifier) > (parenthesized_expression "(undefined4 *param_1,undefined4 param_2,int *param_3,undefined4 param_4,undefined4 param_5\n          ,undefined4 param_6,undefined4 param_7,undefined1 param_8,undefined4 param_9,int *param_10\n          ,int param_11,int param_12)" ( (comma_expression "undefined4 *param_1,undefined4 param_2,int *param_3,undefined4 param_4,undefined4 param_5\n          ,undefined4 param_6,undefined4 param_7,undefined1 param_8,undefined4 param_9,int *param_10\n          ,int param_11,int param_12" (binary_expression "undefined4 *param_1" identifier * identifier) , (comma_expression "undefined4 param_2,int *param_3,undefined4 param_4,undefined4 param_5\n          ,undefined4 param_6,undefined4 param_7,undefined1 param_8,undefined4 param_9,int *param_10\n          ,int param_11,int param_12" identifier (ERROR "param_2" identifier) , (comma_expression "int *param_3,undefined4 param_4,undefined4 param_5\n          ,undefined4 param_6,undefined4 param_7,undefined1 param_8,undefined4 param_9,int *param_10\n          ,int param_11,int param_12" (binary_expression "int *param_3" identifier * identifier) , (comma_expression "undefined4 param_4,undefined4 param_5\n          ,undefined4 param_6,undefined4 param_7,undefined1 param_8,undefined4 param_9,int *param_10\n          ,int param_11,int param_12" identifier (ERROR "param_4" identifier) , (comma_expression "undefined4 param_5\n          ,undefined4 param_6,undefined4 param_7,undefined1 param_8,undefined4 param_9,int *param_10\n          ,int param_11,int param_12" identifier (ERROR "param_5" identifier) , (comma_expression "undefined4 param_6,undefined4 param_7,undefined1 param_8,undefined4 param_9,int *param_10\n          ,int param_11,int param_12" identifier (ERROR "param_6" identifier) , (comma_expression "undefined4 param_7,undefined1 param_8,undefined4 param_9,int *param_10\n          ,int param_11,int param_12" identifier (ERROR "param_7" identifier) , (comma_expression "undefined1 param_8,undefined4 param_9,int *param_10\n          ,int param_11,int param_12" identifier (ERROR "param_8" identifier) , (ERROR "undefined4" identifier) (comma_expression "param_9,int *param_10\n          ,int param_11,int param_12" identifier , (comma_expression "int *param_10\n          ,int param_11,int param_12" (binary_expression "int *param_10" identifier * identifier) , (ERROR "int" identifier) (comma_expression "param_11,int param_12" identifier , (ERROR "int" identifier) identifier))))))))))) ))) ;)) (compound_statement "{\n  undefined *puVar1;\n  int iVar2;\n  undefined *puVar3;\n  undefined4 local_38;\n  undefined4 local_34;\n  undefined4 local_30;\n  undefined4 local_2c;\n  undefined4 local_28;\n  undefined4 local_24;\n  undefined *local_20 [2];\n  \n  puVar1 = PTR__S_empty_rep_storage_004c133c;\n  if (param_11 == 0) {\n    local_20[0] = PTR__S_empty_rep_storage_004c133c + 0xc;\n    local_24 = param_5;\n    local_30 = param_6;\n    local_2c = param_7;\n    local_28 = param_4;\n                    /* try { // try from 00387128 to 003871d3 has its CatchHandler @ 00387208 */\n    (**(code **)(*param_3 + 0xc))\n              (&local_38,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10,local_20);\n    if (*param_10 == 0) {\n      if (*(code **)(param_12 + 0x18) != (code *)0x0) {\n        (**(code **)(param_12 + 0x18))(param_12);\n      }\n      (*(code *)PTR_wstring_004c12c0)(param_12,local_20);\n      puVar3 = PTR_LAB_004c12c4 + 0x40f0;\n      *(undefined4 *)(param_12 + 4) = *(undefined4 *)(local_20[0] + -0xc);\n      *(undefined **)(param_12 + 0x18) = puVar3;\n    }\n    *param_1 = local_38;\n    param_1[1] = local_34;\n    if (local_20[0] + -0xc != puVar1) {\n      if (PTR___pthread_key_create_004c5aa0 == (undefined *)0x0) {\n        iVar2 = *(int *)(local_20[0] + -4);\n        *(int *)(local_20[0] + -4) = iVar2 + -1;\n      }\n      else {\n        SYNC(0);\n        iVar2 = *(int *)(local_20[0] + -4);\n        *(int *)(local_20[0] + -4) = iVar2 + -1;\n        SYNC(0);\n      }\n      if (iVar2 < 1) {\n        (*(code *)PTR__M_destroy_004c12b8)(local_20[0] + -0xc,&local_38);\n      }\n    }\n  }\n  else {\n    local_2c = param_5;\n    local_38 = param_6;\n    local_34 = param_7;\n    local_30 = param_4;\n    (**(code **)(*param_3 + 8))\n              (param_1,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10,param_11);\n  }\n  return param_1;\n}" { (declaration "undefined *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "undefined *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "undefined4 local_38;" type_identifier identifier ;) (declaration "undefined4 local_34;" type_identifier identifier ;) (declaration "undefined4 local_30;" type_identifier identifier ;) (declaration "undefined4 local_2c;" type_identifier identifier ;) (declaration "undefined4 local_28;" type_identifier identifier ;) (declaration "undefined4 local_24;" type_identifier identifier ;) (declaration "undefined *local_20 [2];" type_identifier (pointer_declarator "*local_20 [2]" * (array_declarator "local_20 [2]" identifier [ number_literal ])) ;) (expression_statement "puVar1 = PTR__S_empty_rep_storage_004c133c;" (assignment_expression "puVar1 = PTR__S_empty_rep_storage_004c133c" identifier = identifier) ;) (if_statement "if (param_11 == 0) {\n    local_20[0] = PTR__S_empty_rep_storage_004c133c + 0xc;\n    local_24 = param_5;\n    local_30 = param_6;\n    local_2c = param_7;\n    local_28 = param_4;\n                    /* try { // try from 00387128 to 003871d3 has its CatchHandler @ 00387208 */\n    (**(code **)(*param_3 + 0xc))\n              (&local_38,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10,local_20);\n    if (*param_10 == 0) {\n      if (*(code **)(param_12 + 0x18) != (code *)0x0) {\n        (**(code **)(param_12 + 0x18))(param_12);\n      }\n      (*(code *)PTR_wstring_004c12c0)(param_12,local_20);\n      puVar3 = PTR_LAB_004c12c4 + 0x40f0;\n      *(undefined4 *)(param_12 + 4) = *(undefined4 *)(local_20[0] + -0xc);\n      *(undefined **)(param_12 + 0x18) = puVar3;\n    }\n    *param_1 = local_38;\n    param_1[1] = local_34;\n    if (local_20[0] + -0xc != puVar1) {\n      if (PTR___pthread_key_create_004c5aa0 == (undefined *)0x0) {\n        iVar2 = *(int *)(local_20[0] + -4);\n        *(int *)(local_20[0] + -4) = iVar2 + -1;\n      }\n      else {\n        SYNC(0);\n        iVar2 = *(int *)(local_20[0] + -4);\n        *(int *)(local_20[0] + -4) = iVar2 + -1;\n        SYNC(0);\n      }\n      if (iVar2 < 1) {\n        (*(code *)PTR__M_destroy_004c12b8)(local_20[0] + -0xc,&local_38);\n      }\n    }\n  }\n  else {\n    local_2c = param_5;\n    local_38 = param_6;\n    local_34 = param_7;\n    local_30 = param_4;\n    (**(code **)(*param_3 + 8))\n              (param_1,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10,param_11);\n  }" if (parenthesized_expression "(param_11 == 0)" ( (binary_expression "param_11 == 0" identifier == number_literal) )) (compound_statement "{\n    local_20[0] = PTR__S_empty_rep_storage_004c133c + 0xc;\n    local_24 = param_5;\n    local_30 = param_6;\n    local_2c = param_7;\n    local_28 = param_4;\n                    /* try { // try from 00387128 to 003871d3 has its CatchHandler @ 00387208 */\n    (**(code **)(*param_3 + 0xc))\n              (&local_38,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10,local_20);\n    if (*param_10 == 0) {\n      if (*(code **)(param_12 + 0x18) != (code *)0x0) {\n        (**(code **)(param_12 + 0x18))(param_12);\n      }\n      (*(code *)PTR_wstring_004c12c0)(param_12,local_20);\n      puVar3 = PTR_LAB_004c12c4 + 0x40f0;\n      *(undefined4 *)(param_12 + 4) = *(undefined4 *)(local_20[0] + -0xc);\n      *(undefined **)(param_12 + 0x18) = puVar3;\n    }\n    *param_1 = local_38;\n    param_1[1] = local_34;\n    if (local_20[0] + -0xc != puVar1) {\n      if (PTR___pthread_key_create_004c5aa0 == (undefined *)0x0) {\n        iVar2 = *(int *)(local_20[0] + -4);\n        *(int *)(local_20[0] + -4) = iVar2 + -1;\n      }\n      else {\n        SYNC(0);\n        iVar2 = *(int *)(local_20[0] + -4);\n        *(int *)(local_20[0] + -4) = iVar2 + -1;\n        SYNC(0);\n      }\n      if (iVar2 < 1) {\n        (*(code *)PTR__M_destroy_004c12b8)(local_20[0] + -0xc,&local_38);\n      }\n    }\n  }" { (expression_statement "local_20[0] = PTR__S_empty_rep_storage_004c133c + 0xc;" (assignment_expression "local_20[0] = PTR__S_empty_rep_storage_004c133c + 0xc" (subscript_expression "local_20[0]" identifier [ number_literal ]) = (binary_expression "PTR__S_empty_rep_storage_004c133c + 0xc" identifier + number_literal)) ;) (expression_statement "local_24 = param_5;" (assignment_expression "local_24 = param_5" identifier = identifier) ;) (expression_statement "local_30 = param_6;" (assignment_expression "local_30 = param_6" identifier = identifier) ;) (expression_statement "local_2c = param_7;" (assignment_expression "local_2c = param_7" identifier = identifier) ;) (expression_statement "local_28 = param_4;" (assignment_expression "local_28 = param_4" identifier = identifier) ;) comment (expression_statement "(**(code **)(*param_3 + 0xc))\n              (&local_38,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10,local_20);" (call_expression "(**(code **)(*param_3 + 0xc))\n              (&local_38,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10,local_20)" (parenthesized_expression "(**(code **)(*param_3 + 0xc))" ( (pointer_expression "**(code **)(*param_3 + 0xc)" * (pointer_expression "*(code **)(*param_3 + 0xc)" * (cast_expression "(code **)(*param_3 + 0xc)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_3 + 0xc)" ( (binary_expression "*param_3 + 0xc" (pointer_expression "*param_3" * identifier) + number_literal) ))))) )) (argument_list "(&local_38,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10,local_20)" ( (pointer_expression "&local_38" & identifier) , identifier , identifier , identifier , identifier , identifier , identifier , identifier , identifier , identifier ))) ;) (if_statement "if (*param_10 == 0) {\n      if (*(code **)(param_12 + 0x18) != (code *)0x0) {\n        (**(code **)(param_12 + 0x18))(param_12);\n      }\n      (*(code *)PTR_wstring_004c12c0)(param_12,local_20);\n      puVar3 = PTR_LAB_004c12c4 + 0x40f0;\n      *(undefined4 *)(param_12 + 4) = *(undefined4 *)(local_20[0] + -0xc);\n      *(undefined **)(param_12 + 0x18) = puVar3;\n    }" if (parenthesized_expression "(*param_10 == 0)" ( (binary_expression "*param_10 == 0" (pointer_expression "*param_10" * identifier) == number_literal) )) (compound_statement "{\n      if (*(code **)(param_12 + 0x18) != (code *)0x0) {\n        (**(code **)(param_12 + 0x18))(param_12);\n      }\n      (*(code *)PTR_wstring_004c12c0)(param_12,local_20);\n      puVar3 = PTR_LAB_004c12c4 + 0x40f0;\n      *(undefined4 *)(param_12 + 4) = *(undefined4 *)(local_20[0] + -0xc);\n      *(undefined **)(param_12 + 0x18) = puVar3;\n    }" { (if_statement "if (*(code **)(param_12 + 0x18) != (code *)0x0) {\n        (**(code **)(param_12 + 0x18))(param_12);\n      }" if (parenthesized_expression "(*(code **)(param_12 + 0x18) != (code *)0x0)" ( (binary_expression "*(code **)(param_12 + 0x18) != (code *)0x0" (pointer_expression "*(code **)(param_12 + 0x18)" * (cast_expression "(code **)(param_12 + 0x18)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_12 + 0x18)" ( (binary_expression "param_12 + 0x18" identifier + number_literal) )))) != (cast_expression "(code *)0x0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        (**(code **)(param_12 + 0x18))(param_12);\n      }" { (expression_statement "(**(code **)(param_12 + 0x18))(param_12);" (call_expression "(**(code **)(param_12 + 0x18))(param_12)" (parenthesized_expression "(**(code **)(param_12 + 0x18))" ( (pointer_expression "**(code **)(param_12 + 0x18)" * (pointer_expression "*(code **)(param_12 + 0x18)" * (cast_expression "(code **)(param_12 + 0x18)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_12 + 0x18)" ( (binary_expression "param_12 + 0x18" identifier + number_literal) ))))) )) (argument_list "(param_12)" ( identifier ))) ;) })) (expression_statement "(*(code *)PTR_wstring_004c12c0)(param_12,local_20);" (call_expression "(*(code *)PTR_wstring_004c12c0)(param_12,local_20)" (parenthesized_expression "(*(code *)PTR_wstring_004c12c0)" ( (pointer_expression "*(code *)PTR_wstring_004c12c0" * (cast_expression "(code *)PTR_wstring_004c12c0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(param_12,local_20)" ( identifier , identifier ))) ;) (expression_statement "puVar3 = PTR_LAB_004c12c4 + 0x40f0;" (assignment_expression "puVar3 = PTR_LAB_004c12c4 + 0x40f0" identifier = (binary_expression "PTR_LAB_004c12c4 + 0x40f0" identifier + number_literal)) ;) (expression_statement "*(undefined4 *)(param_12 + 4) = *(undefined4 *)(local_20[0] + -0xc);" (assignment_expression "*(undefined4 *)(param_12 + 4) = *(undefined4 *)(local_20[0] + -0xc)" (pointer_expression "*(undefined4 *)(param_12 + 4)" * (cast_expression "(undefined4 *)(param_12 + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_12 + 4)" ( (binary_expression "param_12 + 4" identifier + number_literal) )))) = (pointer_expression "*(undefined4 *)(local_20[0] + -0xc)" * (cast_expression "(undefined4 *)(local_20[0] + -0xc)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_20[0] + -0xc)" ( (binary_expression "local_20[0] + -0xc" (subscript_expression "local_20[0]" identifier [ number_literal ]) + number_literal) ))))) ;) (expression_statement "*(undefined **)(param_12 + 0x18) = puVar3;" (assignment_expression "*(undefined **)(param_12 + 0x18) = puVar3" (pointer_expression "*(undefined **)(param_12 + 0x18)" * (cast_expression "(undefined **)(param_12 + 0x18)" ( (type_descriptor "undefined **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_12 + 0x18)" ( (binary_expression "param_12 + 0x18" identifier + number_literal) )))) = identifier) ;) })) (expression_statement "*param_1 = local_38;" (assignment_expression "*param_1 = local_38" (pointer_expression "*param_1" * identifier) = identifier) ;) (expression_statement "param_1[1] = local_34;" (assignment_expression "param_1[1] = local_34" (subscript_expression "param_1[1]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (local_20[0] + -0xc != puVar1) {\n      if (PTR___pthread_key_create_004c5aa0 == (undefined *)0x0) {\n        iVar2 = *(int *)(local_20[0] + -4);\n        *(int *)(local_20[0] + -4) = iVar2 + -1;\n      }\n      else {\n        SYNC(0);\n        iVar2 = *(int *)(local_20[0] + -4);\n        *(int *)(local_20[0] + -4) = iVar2 + -1;\n        SYNC(0);\n      }\n      if (iVar2 < 1) {\n        (*(code *)PTR__M_destroy_004c12b8)(local_20[0] + -0xc,&local_38);\n      }\n    }" if (parenthesized_expression "(local_20[0] + -0xc != puVar1)" ( (binary_expression "local_20[0] + -0xc != puVar1" (binary_expression "local_20[0] + -0xc" (subscript_expression "local_20[0]" identifier [ number_literal ]) + number_literal) != identifier) )) (compound_statement "{\n      if (PTR___pthread_key_create_004c5aa0 == (undefined *)0x0) {\n        iVar2 = *(int *)(local_20[0] + -4);\n        *(int *)(local_20[0] + -4) = iVar2 + -1;\n      }\n      else {\n        SYNC(0);\n        iVar2 = *(int *)(local_20[0] + -4);\n        *(int *)(local_20[0] + -4) = iVar2 + -1;\n        SYNC(0);\n      }\n      if (iVar2 < 1) {\n        (*(code *)PTR__M_destroy_004c12b8)(local_20[0] + -0xc,&local_38);\n      }\n    }" { (if_statement "if (PTR___pthread_key_create_004c5aa0 == (undefined *)0x0) {\n        iVar2 = *(int *)(local_20[0] + -4);\n        *(int *)(local_20[0] + -4) = iVar2 + -1;\n      }\n      else {\n        SYNC(0);\n        iVar2 = *(int *)(local_20[0] + -4);\n        *(int *)(local_20[0] + -4) = iVar2 + -1;\n        SYNC(0);\n      }" if (parenthesized_expression "(PTR___pthread_key_create_004c5aa0 == (undefined *)0x0)" ( (binary_expression "PTR___pthread_key_create_004c5aa0 == (undefined *)0x0" identifier == (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        iVar2 = *(int *)(local_20[0] + -4);\n        *(int *)(local_20[0] + -4) = iVar2 + -1;\n      }" { (expression_statement "iVar2 = *(int *)(local_20[0] + -4);" (assignment_expression "iVar2 = *(int *)(local_20[0] + -4)" identifier = (pointer_expression "*(int *)(local_20[0] + -4)" * (cast_expression "(int *)(local_20[0] + -4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_20[0] + -4)" ( (binary_expression "local_20[0] + -4" (subscript_expression "local_20[0]" identifier [ number_literal ]) + number_literal) ))))) ;) (expression_statement "*(int *)(local_20[0] + -4) = iVar2 + -1;" (assignment_expression "*(int *)(local_20[0] + -4) = iVar2 + -1" (pointer_expression "*(int *)(local_20[0] + -4)" * (cast_expression "(int *)(local_20[0] + -4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_20[0] + -4)" ( (binary_expression "local_20[0] + -4" (subscript_expression "local_20[0]" identifier [ number_literal ]) + number_literal) )))) = (binary_expression "iVar2 + -1" identifier + number_literal)) ;) }) (else_clause "else {\n        SYNC(0);\n        iVar2 = *(int *)(local_20[0] + -4);\n        *(int *)(local_20[0] + -4) = iVar2 + -1;\n        SYNC(0);\n      }" else (compound_statement "{\n        SYNC(0);\n        iVar2 = *(int *)(local_20[0] + -4);\n        *(int *)(local_20[0] + -4) = iVar2 + -1;\n        SYNC(0);\n      }" { (expression_statement "SYNC(0);" (call_expression "SYNC(0)" identifier (argument_list "(0)" ( number_literal ))) ;) (expression_statement "iVar2 = *(int *)(local_20[0] + -4);" (assignment_expression "iVar2 = *(int *)(local_20[0] + -4)" identifier = (pointer_expression "*(int *)(local_20[0] + -4)" * (cast_expression "(int *)(local_20[0] + -4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_20[0] + -4)" ( (binary_expression "local_20[0] + -4" (subscript_expression "local_20[0]" identifier [ number_literal ]) + number_literal) ))))) ;) (expression_statement "*(int *)(local_20[0] + -4) = iVar2 + -1;" (assignment_expression "*(int *)(local_20[0] + -4) = iVar2 + -1" (pointer_expression "*(int *)(local_20[0] + -4)" * (cast_expression "(int *)(local_20[0] + -4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_20[0] + -4)" ( (binary_expression "local_20[0] + -4" (subscript_expression "local_20[0]" identifier [ number_literal ]) + number_literal) )))) = (binary_expression "iVar2 + -1" identifier + number_literal)) ;) (expression_statement "SYNC(0);" (call_expression "SYNC(0)" identifier (argument_list "(0)" ( number_literal ))) ;) }))) (if_statement "if (iVar2 < 1) {\n        (*(code *)PTR__M_destroy_004c12b8)(local_20[0] + -0xc,&local_38);\n      }" if (parenthesized_expression "(iVar2 < 1)" ( (binary_expression "iVar2 < 1" identifier < number_literal) )) (compound_statement "{\n        (*(code *)PTR__M_destroy_004c12b8)(local_20[0] + -0xc,&local_38);\n      }" { (expression_statement "(*(code *)PTR__M_destroy_004c12b8)(local_20[0] + -0xc,&local_38);" (call_expression "(*(code *)PTR__M_destroy_004c12b8)(local_20[0] + -0xc,&local_38)" (parenthesized_expression "(*(code *)PTR__M_destroy_004c12b8)" ( (pointer_expression "*(code *)PTR__M_destroy_004c12b8" * (cast_expression "(code *)PTR__M_destroy_004c12b8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(local_20[0] + -0xc,&local_38)" ( (binary_expression "local_20[0] + -0xc" (subscript_expression "local_20[0]" identifier [ number_literal ]) + number_literal) , (pointer_expression "&local_38" & identifier) ))) ;) })) })) }) (else_clause "else {\n    local_2c = param_5;\n    local_38 = param_6;\n    local_34 = param_7;\n    local_30 = param_4;\n    (**(code **)(*param_3 + 8))\n              (param_1,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10,param_11);\n  }" else (compound_statement "{\n    local_2c = param_5;\n    local_38 = param_6;\n    local_34 = param_7;\n    local_30 = param_4;\n    (**(code **)(*param_3 + 8))\n              (param_1,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10,param_11);\n  }" { (expression_statement "local_2c = param_5;" (assignment_expression "local_2c = param_5" identifier = identifier) ;) (expression_statement "local_38 = param_6;" (assignment_expression "local_38 = param_6" identifier = identifier) ;) (expression_statement "local_34 = param_7;" (assignment_expression "local_34 = param_7" identifier = identifier) ;) (expression_statement "local_30 = param_4;" (assignment_expression "local_30 = param_4" identifier = identifier) ;) (expression_statement "(**(code **)(*param_3 + 8))\n              (param_1,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10,param_11);" (call_expression "(**(code **)(*param_3 + 8))\n              (param_1,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10,param_11)" (parenthesized_expression "(**(code **)(*param_3 + 8))" ( (pointer_expression "**(code **)(*param_3 + 8)" * (pointer_expression "*(code **)(*param_3 + 8)" * (cast_expression "(code **)(*param_3 + 8)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_3 + 8)" ( (binary_expression "*param_3 + 8" (pointer_expression "*param_3" * identifier) + number_literal) ))))) )) (argument_list "(param_1,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10,param_11)" ( identifier , identifier , identifier , identifier , identifier , identifier , identifier , identifier , identifier , identifier ))) ;) }))) (return_statement "return param_1;" return identifier ;) }))
(translation_unit "undefined4 *\nstd::__facet_shims::__money_get<wchar_t>\n          (undefined4 *param_1,undefined4 param_2,int *param_3,undefined4 param_4,undefined4 param_5\n          ,undefined4 param_6,undefined4 param_7,undefined1 param_8,undefined4 param_9,int *param_10\n          ,int param_11,int param_12)\n\n{\n  undefined *puVar1;\n  int iVar2;\n  undefined *puVar3;\n  undefined4 local_38;\n  undefined4 local_34;\n  undefined4 local_30;\n  undefined4 local_2c;\n  undefined4 local_28;\n  undefined4 local_24;\n  undefined *local_20 [2];\n  \n  puVar1 = PTR__S_empty_rep_storage_004c133c;\n  if (param_11 == 0) {\n    local_20[0] = PTR__S_empty_rep_storage_004c133c + 0xc;\n    local_24 = param_5;\n    local_30 = param_6;\n    local_2c = param_7;\n    local_28 = param_4;\n                    \n    (**(code **)(*param_3 + 0xc))\n              (&local_38,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10,local_20);\n    if (*param_10 == 0) {\n      if (*(code **)(param_12 + 0x18) != (code *)0x0) {\n        (**(code **)(param_12 + 0x18))(param_12);\n      }\n      (*(code *)PTR_wstring_004c12c0)(param_12,local_20);\n      puVar3 = PTR_LAB_004c12c4 + 0x40f0;\n      *(undefined4 *)(param_12 + 4) = *(undefined4 *)(local_20[0] + -0xc);\n      *(undefined **)(param_12 + 0x18) = puVar3;\n    }\n    *param_1 = local_38;\n    param_1[1] = local_34;\n    if (local_20[0] + -0xc != puVar1) {\n      if (PTR___pthread_key_create_004c5aa0 == (undefined *)0x0) {\n        iVar2 = *(int *)(local_20[0] + -4);\n        *(int *)(local_20[0] + -4) = iVar2 + -1;\n      }\n      else {\n        SYNC(0);\n        iVar2 = *(int *)(local_20[0] + -4);\n        *(int *)(local_20[0] + -4) = iVar2 + -1;\n        SYNC(0);\n      }\n      if (iVar2 < 1) {\n        (*(code *)PTR__M_destroy_004c12b8)(local_20[0] + -0xc,&local_38);\n      }\n    }\n  }\n  else {\n    local_2c = param_5;\n    local_38 = param_6;\n    local_34 = param_7;\n    local_30 = param_4;\n    (**(code **)(*param_3 + 8))\n              (param_1,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10,param_11);\n  }\n  return param_1;\n}\n\n" (ERROR "undefined4 *\nstd::" (binary_expression "undefined4 *\nstd" identifier * identifier) : :) (labeled_statement "__facet_shims::__money_get<wchar_t>\n          (undefined4 *param_1,undefined4 param_2,int *param_3,undefined4 param_4,undefined4 param_5\n          ,undefined4 param_6,undefined4 param_7,undefined1 param_8,undefined4 param_9,int *param_10\n          ,int param_11,int param_12)" statement_identifier : (ERROR ":" :) (expression_statement "__money_get<wchar_t>\n          (undefined4 *param_1,undefined4 param_2,int *param_3,undefined4 param_4,undefined4 param_5\n          ,undefined4 param_6,undefined4 param_7,undefined1 param_8,undefined4 param_9,int *param_10\n          ,int param_11,int param_12)" (binary_expression "__money_get<wchar_t>\n          (undefined4 *param_1,undefined4 param_2,int *param_3,undefined4 param_4,undefined4 param_5\n          ,undefined4 param_6,undefined4 param_7,undefined1 param_8,undefined4 param_9,int *param_10\n          ,int param_11,int param_12)" (binary_expression "__money_get<wchar_t" identifier < identifier) > (parenthesized_expression "(undefined4 *param_1,undefined4 param_2,int *param_3,undefined4 param_4,undefined4 param_5\n          ,undefined4 param_6,undefined4 param_7,undefined1 param_8,undefined4 param_9,int *param_10\n          ,int param_11,int param_12)" ( (comma_expression "undefined4 *param_1,undefined4 param_2,int *param_3,undefined4 param_4,undefined4 param_5\n          ,undefined4 param_6,undefined4 param_7,undefined1 param_8,undefined4 param_9,int *param_10\n          ,int param_11,int param_12" (binary_expression "undefined4 *param_1" identifier * identifier) , (comma_expression "undefined4 param_2,int *param_3,undefined4 param_4,undefined4 param_5\n          ,undefined4 param_6,undefined4 param_7,undefined1 param_8,undefined4 param_9,int *param_10\n          ,int param_11,int param_12" identifier (ERROR "param_2" identifier) , (comma_expression "int *param_3,undefined4 param_4,undefined4 param_5\n          ,undefined4 param_6,undefined4 param_7,undefined1 param_8,undefined4 param_9,int *param_10\n          ,int param_11,int param_12" (binary_expression "int *param_3" identifier * identifier) , (comma_expression "undefined4 param_4,undefined4 param_5\n          ,undefined4 param_6,undefined4 param_7,undefined1 param_8,undefined4 param_9,int *param_10\n          ,int param_11,int param_12" identifier (ERROR "param_4" identifier) , (comma_expression "undefined4 param_5\n          ,undefined4 param_6,undefined4 param_7,undefined1 param_8,undefined4 param_9,int *param_10\n          ,int param_11,int param_12" identifier (ERROR "param_5" identifier) , (comma_expression "undefined4 param_6,undefined4 param_7,undefined1 param_8,undefined4 param_9,int *param_10\n          ,int param_11,int param_12" identifier (ERROR "param_6" identifier) , (comma_expression "undefined4 param_7,undefined1 param_8,undefined4 param_9,int *param_10\n          ,int param_11,int param_12" identifier (ERROR "param_7" identifier) , (comma_expression "undefined1 param_8,undefined4 param_9,int *param_10\n          ,int param_11,int param_12" identifier (ERROR "param_8" identifier) , (ERROR "undefined4" identifier) (comma_expression "param_9,int *param_10\n          ,int param_11,int param_12" identifier , (comma_expression "int *param_10\n          ,int param_11,int param_12" (binary_expression "int *param_10" identifier * identifier) , (ERROR "int" identifier) (comma_expression "param_11,int param_12" identifier , (ERROR "int" identifier) identifier))))))))))) ))) ;)) (compound_statement "{\n  undefined *puVar1;\n  int iVar2;\n  undefined *puVar3;\n  undefined4 local_38;\n  undefined4 local_34;\n  undefined4 local_30;\n  undefined4 local_2c;\n  undefined4 local_28;\n  undefined4 local_24;\n  undefined *local_20 [2];\n  \n  puVar1 = PTR__S_empty_rep_storage_004c133c;\n  if (param_11 == 0) {\n    local_20[0] = PTR__S_empty_rep_storage_004c133c + 0xc;\n    local_24 = param_5;\n    local_30 = param_6;\n    local_2c = param_7;\n    local_28 = param_4;\n                    \n    (**(code **)(*param_3 + 0xc))\n              (&local_38,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10,local_20);\n    if (*param_10 == 0) {\n      if (*(code **)(param_12 + 0x18) != (code *)0x0) {\n        (**(code **)(param_12 + 0x18))(param_12);\n      }\n      (*(code *)PTR_wstring_004c12c0)(param_12,local_20);\n      puVar3 = PTR_LAB_004c12c4 + 0x40f0;\n      *(undefined4 *)(param_12 + 4) = *(undefined4 *)(local_20[0] + -0xc);\n      *(undefined **)(param_12 + 0x18) = puVar3;\n    }\n    *param_1 = local_38;\n    param_1[1] = local_34;\n    if (local_20[0] + -0xc != puVar1) {\n      if (PTR___pthread_key_create_004c5aa0 == (undefined *)0x0) {\n        iVar2 = *(int *)(local_20[0] + -4);\n        *(int *)(local_20[0] + -4) = iVar2 + -1;\n      }\n      else {\n        SYNC(0);\n        iVar2 = *(int *)(local_20[0] + -4);\n        *(int *)(local_20[0] + -4) = iVar2 + -1;\n        SYNC(0);\n      }\n      if (iVar2 < 1) {\n        (*(code *)PTR__M_destroy_004c12b8)(local_20[0] + -0xc,&local_38);\n      }\n    }\n  }\n  else {\n    local_2c = param_5;\n    local_38 = param_6;\n    local_34 = param_7;\n    local_30 = param_4;\n    (**(code **)(*param_3 + 8))\n              (param_1,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10,param_11);\n  }\n  return param_1;\n}" { (declaration "undefined *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "undefined *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "undefined4 local_38;" type_identifier identifier ;) (declaration "undefined4 local_34;" type_identifier identifier ;) (declaration "undefined4 local_30;" type_identifier identifier ;) (declaration "undefined4 local_2c;" type_identifier identifier ;) (declaration "undefined4 local_28;" type_identifier identifier ;) (declaration "undefined4 local_24;" type_identifier identifier ;) (declaration "undefined *local_20 [2];" type_identifier (pointer_declarator "*local_20 [2]" * (array_declarator "local_20 [2]" identifier [ number_literal ])) ;) (expression_statement "puVar1 = PTR__S_empty_rep_storage_004c133c;" (assignment_expression "puVar1 = PTR__S_empty_rep_storage_004c133c" identifier = identifier) ;) (if_statement "if (param_11 == 0) {\n    local_20[0] = PTR__S_empty_rep_storage_004c133c + 0xc;\n    local_24 = param_5;\n    local_30 = param_6;\n    local_2c = param_7;\n    local_28 = param_4;\n                    \n    (**(code **)(*param_3 + 0xc))\n              (&local_38,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10,local_20);\n    if (*param_10 == 0) {\n      if (*(code **)(param_12 + 0x18) != (code *)0x0) {\n        (**(code **)(param_12 + 0x18))(param_12);\n      }\n      (*(code *)PTR_wstring_004c12c0)(param_12,local_20);\n      puVar3 = PTR_LAB_004c12c4 + 0x40f0;\n      *(undefined4 *)(param_12 + 4) = *(undefined4 *)(local_20[0] + -0xc);\n      *(undefined **)(param_12 + 0x18) = puVar3;\n    }\n    *param_1 = local_38;\n    param_1[1] = local_34;\n    if (local_20[0] + -0xc != puVar1) {\n      if (PTR___pthread_key_create_004c5aa0 == (undefined *)0x0) {\n        iVar2 = *(int *)(local_20[0] + -4);\n        *(int *)(local_20[0] + -4) = iVar2 + -1;\n      }\n      else {\n        SYNC(0);\n        iVar2 = *(int *)(local_20[0] + -4);\n        *(int *)(local_20[0] + -4) = iVar2 + -1;\n        SYNC(0);\n      }\n      if (iVar2 < 1) {\n        (*(code *)PTR__M_destroy_004c12b8)(local_20[0] + -0xc,&local_38);\n      }\n    }\n  }\n  else {\n    local_2c = param_5;\n    local_38 = param_6;\n    local_34 = param_7;\n    local_30 = param_4;\n    (**(code **)(*param_3 + 8))\n              (param_1,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10,param_11);\n  }" if (parenthesized_expression "(param_11 == 0)" ( (binary_expression "param_11 == 0" identifier == number_literal) )) (compound_statement "{\n    local_20[0] = PTR__S_empty_rep_storage_004c133c + 0xc;\n    local_24 = param_5;\n    local_30 = param_6;\n    local_2c = param_7;\n    local_28 = param_4;\n                    \n    (**(code **)(*param_3 + 0xc))\n              (&local_38,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10,local_20);\n    if (*param_10 == 0) {\n      if (*(code **)(param_12 + 0x18) != (code *)0x0) {\n        (**(code **)(param_12 + 0x18))(param_12);\n      }\n      (*(code *)PTR_wstring_004c12c0)(param_12,local_20);\n      puVar3 = PTR_LAB_004c12c4 + 0x40f0;\n      *(undefined4 *)(param_12 + 4) = *(undefined4 *)(local_20[0] + -0xc);\n      *(undefined **)(param_12 + 0x18) = puVar3;\n    }\n    *param_1 = local_38;\n    param_1[1] = local_34;\n    if (local_20[0] + -0xc != puVar1) {\n      if (PTR___pthread_key_create_004c5aa0 == (undefined *)0x0) {\n        iVar2 = *(int *)(local_20[0] + -4);\n        *(int *)(local_20[0] + -4) = iVar2 + -1;\n      }\n      else {\n        SYNC(0);\n        iVar2 = *(int *)(local_20[0] + -4);\n        *(int *)(local_20[0] + -4) = iVar2 + -1;\n        SYNC(0);\n      }\n      if (iVar2 < 1) {\n        (*(code *)PTR__M_destroy_004c12b8)(local_20[0] + -0xc,&local_38);\n      }\n    }\n  }" { (expression_statement "local_20[0] = PTR__S_empty_rep_storage_004c133c + 0xc;" (assignment_expression "local_20[0] = PTR__S_empty_rep_storage_004c133c + 0xc" (subscript_expression "local_20[0]" identifier [ number_literal ]) = (binary_expression "PTR__S_empty_rep_storage_004c133c + 0xc" identifier + number_literal)) ;) (expression_statement "local_24 = param_5;" (assignment_expression "local_24 = param_5" identifier = identifier) ;) (expression_statement "local_30 = param_6;" (assignment_expression "local_30 = param_6" identifier = identifier) ;) (expression_statement "local_2c = param_7;" (assignment_expression "local_2c = param_7" identifier = identifier) ;) (expression_statement "local_28 = param_4;" (assignment_expression "local_28 = param_4" identifier = identifier) ;) (expression_statement "(**(code **)(*param_3 + 0xc))\n              (&local_38,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10,local_20);" (call_expression "(**(code **)(*param_3 + 0xc))\n              (&local_38,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10,local_20)" (parenthesized_expression "(**(code **)(*param_3 + 0xc))" ( (pointer_expression "**(code **)(*param_3 + 0xc)" * (pointer_expression "*(code **)(*param_3 + 0xc)" * (cast_expression "(code **)(*param_3 + 0xc)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_3 + 0xc)" ( (binary_expression "*param_3 + 0xc" (pointer_expression "*param_3" * identifier) + number_literal) ))))) )) (argument_list "(&local_38,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10,local_20)" ( (pointer_expression "&local_38" & identifier) , identifier , identifier , identifier , identifier , identifier , identifier , identifier , identifier , identifier ))) ;) (if_statement "if (*param_10 == 0) {\n      if (*(code **)(param_12 + 0x18) != (code *)0x0) {\n        (**(code **)(param_12 + 0x18))(param_12);\n      }\n      (*(code *)PTR_wstring_004c12c0)(param_12,local_20);\n      puVar3 = PTR_LAB_004c12c4 + 0x40f0;\n      *(undefined4 *)(param_12 + 4) = *(undefined4 *)(local_20[0] + -0xc);\n      *(undefined **)(param_12 + 0x18) = puVar3;\n    }" if (parenthesized_expression "(*param_10 == 0)" ( (binary_expression "*param_10 == 0" (pointer_expression "*param_10" * identifier) == number_literal) )) (compound_statement "{\n      if (*(code **)(param_12 + 0x18) != (code *)0x0) {\n        (**(code **)(param_12 + 0x18))(param_12);\n      }\n      (*(code *)PTR_wstring_004c12c0)(param_12,local_20);\n      puVar3 = PTR_LAB_004c12c4 + 0x40f0;\n      *(undefined4 *)(param_12 + 4) = *(undefined4 *)(local_20[0] + -0xc);\n      *(undefined **)(param_12 + 0x18) = puVar3;\n    }" { (if_statement "if (*(code **)(param_12 + 0x18) != (code *)0x0) {\n        (**(code **)(param_12 + 0x18))(param_12);\n      }" if (parenthesized_expression "(*(code **)(param_12 + 0x18) != (code *)0x0)" ( (binary_expression "*(code **)(param_12 + 0x18) != (code *)0x0" (pointer_expression "*(code **)(param_12 + 0x18)" * (cast_expression "(code **)(param_12 + 0x18)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_12 + 0x18)" ( (binary_expression "param_12 + 0x18" identifier + number_literal) )))) != (cast_expression "(code *)0x0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        (**(code **)(param_12 + 0x18))(param_12);\n      }" { (expression_statement "(**(code **)(param_12 + 0x18))(param_12);" (call_expression "(**(code **)(param_12 + 0x18))(param_12)" (parenthesized_expression "(**(code **)(param_12 + 0x18))" ( (pointer_expression "**(code **)(param_12 + 0x18)" * (pointer_expression "*(code **)(param_12 + 0x18)" * (cast_expression "(code **)(param_12 + 0x18)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_12 + 0x18)" ( (binary_expression "param_12 + 0x18" identifier + number_literal) ))))) )) (argument_list "(param_12)" ( identifier ))) ;) })) (expression_statement "(*(code *)PTR_wstring_004c12c0)(param_12,local_20);" (call_expression "(*(code *)PTR_wstring_004c12c0)(param_12,local_20)" (parenthesized_expression "(*(code *)PTR_wstring_004c12c0)" ( (pointer_expression "*(code *)PTR_wstring_004c12c0" * (cast_expression "(code *)PTR_wstring_004c12c0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(param_12,local_20)" ( identifier , identifier ))) ;) (expression_statement "puVar3 = PTR_LAB_004c12c4 + 0x40f0;" (assignment_expression "puVar3 = PTR_LAB_004c12c4 + 0x40f0" identifier = (binary_expression "PTR_LAB_004c12c4 + 0x40f0" identifier + number_literal)) ;) (expression_statement "*(undefined4 *)(param_12 + 4) = *(undefined4 *)(local_20[0] + -0xc);" (assignment_expression "*(undefined4 *)(param_12 + 4) = *(undefined4 *)(local_20[0] + -0xc)" (pointer_expression "*(undefined4 *)(param_12 + 4)" * (cast_expression "(undefined4 *)(param_12 + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_12 + 4)" ( (binary_expression "param_12 + 4" identifier + number_literal) )))) = (pointer_expression "*(undefined4 *)(local_20[0] + -0xc)" * (cast_expression "(undefined4 *)(local_20[0] + -0xc)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_20[0] + -0xc)" ( (binary_expression "local_20[0] + -0xc" (subscript_expression "local_20[0]" identifier [ number_literal ]) + number_literal) ))))) ;) (expression_statement "*(undefined **)(param_12 + 0x18) = puVar3;" (assignment_expression "*(undefined **)(param_12 + 0x18) = puVar3" (pointer_expression "*(undefined **)(param_12 + 0x18)" * (cast_expression "(undefined **)(param_12 + 0x18)" ( (type_descriptor "undefined **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_12 + 0x18)" ( (binary_expression "param_12 + 0x18" identifier + number_literal) )))) = identifier) ;) })) (expression_statement "*param_1 = local_38;" (assignment_expression "*param_1 = local_38" (pointer_expression "*param_1" * identifier) = identifier) ;) (expression_statement "param_1[1] = local_34;" (assignment_expression "param_1[1] = local_34" (subscript_expression "param_1[1]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (local_20[0] + -0xc != puVar1) {\n      if (PTR___pthread_key_create_004c5aa0 == (undefined *)0x0) {\n        iVar2 = *(int *)(local_20[0] + -4);\n        *(int *)(local_20[0] + -4) = iVar2 + -1;\n      }\n      else {\n        SYNC(0);\n        iVar2 = *(int *)(local_20[0] + -4);\n        *(int *)(local_20[0] + -4) = iVar2 + -1;\n        SYNC(0);\n      }\n      if (iVar2 < 1) {\n        (*(code *)PTR__M_destroy_004c12b8)(local_20[0] + -0xc,&local_38);\n      }\n    }" if (parenthesized_expression "(local_20[0] + -0xc != puVar1)" ( (binary_expression "local_20[0] + -0xc != puVar1" (binary_expression "local_20[0] + -0xc" (subscript_expression "local_20[0]" identifier [ number_literal ]) + number_literal) != identifier) )) (compound_statement "{\n      if (PTR___pthread_key_create_004c5aa0 == (undefined *)0x0) {\n        iVar2 = *(int *)(local_20[0] + -4);\n        *(int *)(local_20[0] + -4) = iVar2 + -1;\n      }\n      else {\n        SYNC(0);\n        iVar2 = *(int *)(local_20[0] + -4);\n        *(int *)(local_20[0] + -4) = iVar2 + -1;\n        SYNC(0);\n      }\n      if (iVar2 < 1) {\n        (*(code *)PTR__M_destroy_004c12b8)(local_20[0] + -0xc,&local_38);\n      }\n    }" { (if_statement "if (PTR___pthread_key_create_004c5aa0 == (undefined *)0x0) {\n        iVar2 = *(int *)(local_20[0] + -4);\n        *(int *)(local_20[0] + -4) = iVar2 + -1;\n      }\n      else {\n        SYNC(0);\n        iVar2 = *(int *)(local_20[0] + -4);\n        *(int *)(local_20[0] + -4) = iVar2 + -1;\n        SYNC(0);\n      }" if (parenthesized_expression "(PTR___pthread_key_create_004c5aa0 == (undefined *)0x0)" ( (binary_expression "PTR___pthread_key_create_004c5aa0 == (undefined *)0x0" identifier == (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        iVar2 = *(int *)(local_20[0] + -4);\n        *(int *)(local_20[0] + -4) = iVar2 + -1;\n      }" { (expression_statement "iVar2 = *(int *)(local_20[0] + -4);" (assignment_expression "iVar2 = *(int *)(local_20[0] + -4)" identifier = (pointer_expression "*(int *)(local_20[0] + -4)" * (cast_expression "(int *)(local_20[0] + -4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_20[0] + -4)" ( (binary_expression "local_20[0] + -4" (subscript_expression "local_20[0]" identifier [ number_literal ]) + number_literal) ))))) ;) (expression_statement "*(int *)(local_20[0] + -4) = iVar2 + -1;" (assignment_expression "*(int *)(local_20[0] + -4) = iVar2 + -1" (pointer_expression "*(int *)(local_20[0] + -4)" * (cast_expression "(int *)(local_20[0] + -4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_20[0] + -4)" ( (binary_expression "local_20[0] + -4" (subscript_expression "local_20[0]" identifier [ number_literal ]) + number_literal) )))) = (binary_expression "iVar2 + -1" identifier + number_literal)) ;) }) (else_clause "else {\n        SYNC(0);\n        iVar2 = *(int *)(local_20[0] + -4);\n        *(int *)(local_20[0] + -4) = iVar2 + -1;\n        SYNC(0);\n      }" else (compound_statement "{\n        SYNC(0);\n        iVar2 = *(int *)(local_20[0] + -4);\n        *(int *)(local_20[0] + -4) = iVar2 + -1;\n        SYNC(0);\n      }" { (expression_statement "SYNC(0);" (call_expression "SYNC(0)" identifier (argument_list "(0)" ( number_literal ))) ;) (expression_statement "iVar2 = *(int *)(local_20[0] + -4);" (assignment_expression "iVar2 = *(int *)(local_20[0] + -4)" identifier = (pointer_expression "*(int *)(local_20[0] + -4)" * (cast_expression "(int *)(local_20[0] + -4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_20[0] + -4)" ( (binary_expression "local_20[0] + -4" (subscript_expression "local_20[0]" identifier [ number_literal ]) + number_literal) ))))) ;) (expression_statement "*(int *)(local_20[0] + -4) = iVar2 + -1;" (assignment_expression "*(int *)(local_20[0] + -4) = iVar2 + -1" (pointer_expression "*(int *)(local_20[0] + -4)" * (cast_expression "(int *)(local_20[0] + -4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_20[0] + -4)" ( (binary_expression "local_20[0] + -4" (subscript_expression "local_20[0]" identifier [ number_literal ]) + number_literal) )))) = (binary_expression "iVar2 + -1" identifier + number_literal)) ;) (expression_statement "SYNC(0);" (call_expression "SYNC(0)" identifier (argument_list "(0)" ( number_literal ))) ;) }))) (if_statement "if (iVar2 < 1) {\n        (*(code *)PTR__M_destroy_004c12b8)(local_20[0] + -0xc,&local_38);\n      }" if (parenthesized_expression "(iVar2 < 1)" ( (binary_expression "iVar2 < 1" identifier < number_literal) )) (compound_statement "{\n        (*(code *)PTR__M_destroy_004c12b8)(local_20[0] + -0xc,&local_38);\n      }" { (expression_statement "(*(code *)PTR__M_destroy_004c12b8)(local_20[0] + -0xc,&local_38);" (call_expression "(*(code *)PTR__M_destroy_004c12b8)(local_20[0] + -0xc,&local_38)" (parenthesized_expression "(*(code *)PTR__M_destroy_004c12b8)" ( (pointer_expression "*(code *)PTR__M_destroy_004c12b8" * (cast_expression "(code *)PTR__M_destroy_004c12b8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(local_20[0] + -0xc,&local_38)" ( (binary_expression "local_20[0] + -0xc" (subscript_expression "local_20[0]" identifier [ number_literal ]) + number_literal) , (pointer_expression "&local_38" & identifier) ))) ;) })) })) }) (else_clause "else {\n    local_2c = param_5;\n    local_38 = param_6;\n    local_34 = param_7;\n    local_30 = param_4;\n    (**(code **)(*param_3 + 8))\n              (param_1,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10,param_11);\n  }" else (compound_statement "{\n    local_2c = param_5;\n    local_38 = param_6;\n    local_34 = param_7;\n    local_30 = param_4;\n    (**(code **)(*param_3 + 8))\n              (param_1,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10,param_11);\n  }" { (expression_statement "local_2c = param_5;" (assignment_expression "local_2c = param_5" identifier = identifier) ;) (expression_statement "local_38 = param_6;" (assignment_expression "local_38 = param_6" identifier = identifier) ;) (expression_statement "local_34 = param_7;" (assignment_expression "local_34 = param_7" identifier = identifier) ;) (expression_statement "local_30 = param_4;" (assignment_expression "local_30 = param_4" identifier = identifier) ;) (expression_statement "(**(code **)(*param_3 + 8))\n              (param_1,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10,param_11);" (call_expression "(**(code **)(*param_3 + 8))\n              (param_1,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10,param_11)" (parenthesized_expression "(**(code **)(*param_3 + 8))" ( (pointer_expression "**(code **)(*param_3 + 8)" * (pointer_expression "*(code **)(*param_3 + 8)" * (cast_expression "(code **)(*param_3 + 8)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_3 + 8)" ( (binary_expression "*param_3 + 8" (pointer_expression "*param_3" * identifier) + number_literal) ))))) )) (argument_list "(param_1,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10,param_11)" ( identifier , identifier , identifier , identifier , identifier , identifier , identifier , identifier , identifier , identifier ))) ;) }))) (return_statement "return param_1;" return identifier ;) }))
(translation_unit (ERROR (binary_expression IDENT * IDENT) : :) (labeled_statement statement_identifier : (ERROR :) (expression_statement (binary_expression (binary_expression IDENT < IDENT) > (parenthesized_expression ( (comma_expression (binary_expression IDENT * IDENT) , (comma_expression IDENT (ERROR IDENT) , (comma_expression (binary_expression IDENT * IDENT) , (comma_expression IDENT (ERROR IDENT) , (comma_expression IDENT (ERROR IDENT) , (comma_expression IDENT (ERROR IDENT) , (comma_expression IDENT (ERROR IDENT) , (comma_expression IDENT (ERROR IDENT) , (ERROR IDENT) (comma_expression IDENT , (comma_expression (binary_expression IDENT * IDENT) , (ERROR IDENT) (comma_expression IDENT , (ERROR IDENT) IDENT))))))))))) ))) ;)) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * (array_declarator IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (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 , IDENT , IDENT , IDENT , IDENT ))) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) == LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (argument_list ( IDENT ))) ;) })) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) })) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) != IDENT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) )))) = (binary_expression IDENT + LIT)) ;) }) (else_clause else (compound_statement { (expression_statement (call_expression IDENT (argument_list ( LIT ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) )))) = (binary_expression IDENT + LIT)) ;) (expression_statement (call_expression IDENT (argument_list ( LIT ))) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) , (pointer_expression & IDENT) ))) ;) })) })) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (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 , IDENT , IDENT , IDENT , IDENT , IDENT , IDENT , IDENT ))) ;) }))) (return_statement return IDENT ;) }))
(ERROR "undefined4 *\nstd::" (binary_expression "undefined4 *\nstd" (identifier "undefined4") (* "*") (identifier "std")) (: ":") (: ":")) (labeled_statement "__facet_shims::__money_get<wchar_t>\n          (undefined4 *param_1,undefined4 param_2,int *param_3,undefined4 param_4,undefined4 param_5\n          ,undefined4 param_6,undefined4 param_7,undefined1 param_8,undefined4 param_9,int *param_10\n          ,int param_11,int param_12)" (statement_identifier "__facet_shims") (: ":") (ERROR ":" (: ":")) (expression_statement "__money_get<wchar_t>\n          (undefined4 *param_1,undefined4 param_2,int *param_3,undefined4 param_4,undefined4 param_5\n          ,undefined4 param_6,undefined4 param_7,undefined1 param_8,undefined4 param_9,int *param_10\n          ,int param_11,int param_12)" (binary_expression "__money_get<wchar_t>\n          (undefined4 *param_1,undefined4 param_2,int *param_3,undefined4 param_4,undefined4 param_5\n          ,undefined4 param_6,undefined4 param_7,undefined1 param_8,undefined4 param_9,int *param_10\n          ,int param_11,int param_12)" (binary_expression "__money_get<wchar_t" (identifier "__money_get") (< "<") (identifier "wchar_t")) (> ">") (parenthesized_expression "(undefined4 *param_1,undefined4 param_2,int *param_3,undefined4 param_4,undefined4 param_5\n          ,undefined4 param_6,undefined4 param_7,undefined1 param_8,undefined4 param_9,int *param_10\n          ,int param_11,int param_12)" (( "(") (comma_expression "undefined4 *param_1,undefined4 param_2,int *param_3,undefined4 param_4,undefined4 param_5\n          ,undefined4 param_6,undefined4 param_7,undefined1 param_8,undefined4 param_9,int *param_10\n          ,int param_11,int param_12" (binary_expression "undefined4 *param_1" (identifier "undefined4") (* "*") (identifier "param_1")) (, ",") (comma_expression "undefined4 param_2,int *param_3,undefined4 param_4,undefined4 param_5\n          ,undefined4 param_6,undefined4 param_7,undefined1 param_8,undefined4 param_9,int *param_10\n          ,int param_11,int param_12" (identifier "undefined4") (ERROR "param_2" (identifier "param_2")) (, ",") (comma_expression "int *param_3,undefined4 param_4,undefined4 param_5\n          ,undefined4 param_6,undefined4 param_7,undefined1 param_8,undefined4 param_9,int *param_10\n          ,int param_11,int param_12" (binary_expression "int *param_3" (identifier "int") (* "*") (identifier "param_3")) (, ",") (comma_expression "undefined4 param_4,undefined4 param_5\n          ,undefined4 param_6,undefined4 param_7,undefined1 param_8,undefined4 param_9,int *param_10\n          ,int param_11,int param_12" (identifier "undefined4") (ERROR "param_4" (identifier "param_4")) (, ",") (comma_expression "undefined4 param_5\n          ,undefined4 param_6,undefined4 param_7,undefined1 param_8,undefined4 param_9,int *param_10\n          ,int param_11,int param_12" (identifier "undefined4") (ERROR "param_5" (identifier "param_5")) (, ",") (comma_expression "undefined4 param_6,undefined4 param_7,undefined1 param_8,undefined4 param_9,int *param_10\n          ,int param_11,int param_12" (identifier "undefined4") (ERROR "param_6" (identifier "param_6")) (, ",") (comma_expression "undefined4 param_7,undefined1 param_8,undefined4 param_9,int *param_10\n          ,int param_11,int param_12" (identifier "undefined4") (ERROR "param_7" (identifier "param_7")) (, ",") (comma_expression "undefined1 param_8,undefined4 param_9,int *param_10\n          ,int param_11,int param_12" (identifier "undefined1") (ERROR "param_8" (identifier "param_8")) (, ",") (ERROR "undefined4" (identifier "undefined4")) (comma_expression "param_9,int *param_10\n          ,int param_11,int param_12" (identifier "param_9") (, ",") (comma_expression "int *param_10\n          ,int param_11,int param_12" (binary_expression "int *param_10" (identifier "int") (* "*") (identifier "param_10")) (, ",") (ERROR "int" (identifier "int")) (comma_expression "param_11,int param_12" (identifier "param_11") (, ",") (ERROR "int" (identifier "int")) (identifier "param_12")))))))))))) () ")"))) (; ""))) (compound_statement "{\n  undefined *puVar1;\n  int iVar2;\n  undefined *puVar3;\n  undefined4 local_38;\n  undefined4 local_34;\n  undefined4 local_30;\n  undefined4 local_2c;\n  undefined4 local_28;\n  undefined4 local_24;\n  undefined *local_20 [2];\n  \n  puVar1 = PTR__S_empty_rep_storage_004c133c;\n  if (param_11 == 0) {\n    local_20[0] = PTR__S_empty_rep_storage_004c133c + 0xc;\n    local_24 = param_5;\n    local_30 = param_6;\n    local_2c = param_7;\n    local_28 = param_4;\n                    \n    (**(code **)(*param_3 + 0xc))\n              (&local_38,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10,local_20);\n    if (*param_10 == 0) {\n      if (*(code **)(param_12 + 0x18) != (code *)0x0) {\n        (**(code **)(param_12 + 0x18))(param_12);\n      }\n      (*(code *)PTR_wstring_004c12c0)(param_12,local_20);\n      puVar3 = PTR_LAB_004c12c4 + 0x40f0;\n      *(undefined4 *)(param_12 + 4) = *(undefined4 *)(local_20[0] + -0xc);\n      *(undefined **)(param_12 + 0x18) = puVar3;\n    }\n    *param_1 = local_38;\n    param_1[1] = local_34;\n    if (local_20[0] + -0xc != puVar1) {\n      if (PTR___pthread_key_create_004c5aa0 == (undefined *)0x0) {\n        iVar2 = *(int *)(local_20[0] + -4);\n        *(int *)(local_20[0] + -4) = iVar2 + -1;\n      }\n      else {\n        SYNC(0);\n        iVar2 = *(int *)(local_20[0] + -4);\n        *(int *)(local_20[0] + -4) = iVar2 + -1;\n        SYNC(0);\n      }\n      if (iVar2 < 1) {\n        (*(code *)PTR__M_destroy_004c12b8)(local_20[0] + -0xc,&local_38);\n      }\n    }\n  }\n  else {\n    local_2c = param_5;\n    local_38 = param_6;\n    local_34 = param_7;\n    local_30 = param_4;\n    (**(code **)(*param_3 + 8))\n              (param_1,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10,param_11);\n  }\n  return param_1;\n}" ({ "{") (declaration "undefined *puVar1;" (type_identifier "undefined") (pointer_declarator "*puVar1" (* "*") (identifier "puVar1")) (; ";")) (declaration "int iVar2;" (primitive_type "int") (identifier "iVar2") (; ";")) (declaration "undefined *puVar3;" (type_identifier "undefined") (pointer_declarator "*puVar3" (* "*") (identifier "puVar3")) (; ";")) (declaration "undefined4 local_38;" (type_identifier "undefined4") (identifier "local_38") (; ";")) (declaration "undefined4 local_34;" (type_identifier "undefined4") (identifier "local_34") (; ";")) (declaration "undefined4 local_30;" (type_identifier "undefined4") (identifier "local_30") (; ";")) (declaration "undefined4 local_2c;" (type_identifier "undefined4") (identifier "local_2c") (; ";")) (declaration "undefined4 local_28;" (type_identifier "undefined4") (identifier "local_28") (; ";")) (declaration "undefined4 local_24;" (type_identifier "undefined4") (identifier "local_24") (; ";")) (declaration "undefined *local_20 [2];" (type_identifier "undefined") (pointer_declarator "*local_20 [2]" (* "*") (array_declarator "local_20 [2]" (identifier "local_20") ([ "[") (number_literal "2") (] "]"))) (; ";")) (expression_statement "puVar1 = PTR__S_empty_rep_storage_004c133c;" (assignment_expression "puVar1 = PTR__S_empty_rep_storage_004c133c" (identifier "puVar1") (= "=") (identifier "PTR__S_empty_rep_storage_004c133c")) (; ";")) (if_statement "if (param_11 == 0) {\n    local_20[0] = PTR__S_empty_rep_storage_004c133c + 0xc;\n    local_24 = param_5;\n    local_30 = param_6;\n    local_2c = param_7;\n    local_28 = param_4;\n                    \n    (**(code **)(*param_3 + 0xc))\n              (&local_38,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10,local_20);\n    if (*param_10 == 0) {\n      if (*(code **)(param_12 + 0x18) != (code *)0x0) {\n        (**(code **)(param_12 + 0x18))(param_12);\n      }\n      (*(code *)PTR_wstring_004c12c0)(param_12,local_20);\n      puVar3 = PTR_LAB_004c12c4 + 0x40f0;\n      *(undefined4 *)(param_12 + 4) = *(undefined4 *)(local_20[0] + -0xc);\n      *(undefined **)(param_12 + 0x18) = puVar3;\n    }\n    *param_1 = local_38;\n    param_1[1] = local_34;\n    if (local_20[0] + -0xc != puVar1) {\n      if (PTR___pthread_key_create_004c5aa0 == (undefined *)0x0) {\n        iVar2 = *(int *)(local_20[0] + -4);\n        *(int *)(local_20[0] + -4) = iVar2 + -1;\n      }\n      else {\n        SYNC(0);\n        iVar2 = *(int *)(local_20[0] + -4);\n        *(int *)(local_20[0] + -4) = iVar2 + -1;\n        SYNC(0);\n      }\n      if (iVar2 < 1) {\n        (*(code *)PTR__M_destroy_004c12b8)(local_20[0] + -0xc,&local_38);\n      }\n    }\n  }\n  else {\n    local_2c = param_5;\n    local_38 = param_6;\n    local_34 = param_7;\n    local_30 = param_4;\n    (**(code **)(*param_3 + 8))\n              (param_1,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10,param_11);\n  }" (if "if") (parenthesized_expression "(param_11 == 0)" (( "(") (binary_expression "param_11 == 0" (identifier "param_11") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    local_20[0] = PTR__S_empty_rep_storage_004c133c + 0xc;\n    local_24 = param_5;\n    local_30 = param_6;\n    local_2c = param_7;\n    local_28 = param_4;\n                    \n    (**(code **)(*param_3 + 0xc))\n              (&local_38,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10,local_20);\n    if (*param_10 == 0) {\n      if (*(code **)(param_12 + 0x18) != (code *)0x0) {\n        (**(code **)(param_12 + 0x18))(param_12);\n      }\n      (*(code *)PTR_wstring_004c12c0)(param_12,local_20);\n      puVar3 = PTR_LAB_004c12c4 + 0x40f0;\n      *(undefined4 *)(param_12 + 4) = *(undefined4 *)(local_20[0] + -0xc);\n      *(undefined **)(param_12 + 0x18) = puVar3;\n    }\n    *param_1 = local_38;\n    param_1[1] = local_34;\n    if (local_20[0] + -0xc != puVar1) {\n      if (PTR___pthread_key_create_004c5aa0 == (undefined *)0x0) {\n        iVar2 = *(int *)(local_20[0] + -4);\n        *(int *)(local_20[0] + -4) = iVar2 + -1;\n      }\n      else {\n        SYNC(0);\n        iVar2 = *(int *)(local_20[0] + -4);\n        *(int *)(local_20[0] + -4) = iVar2 + -1;\n        SYNC(0);\n      }\n      if (iVar2 < 1) {\n        (*(code *)PTR__M_destroy_004c12b8)(local_20[0] + -0xc,&local_38);\n      }\n    }\n  }" ({ "{") (expression_statement "local_20[0] = PTR__S_empty_rep_storage_004c133c + 0xc;" (assignment_expression "local_20[0] = PTR__S_empty_rep_storage_004c133c + 0xc" (subscript_expression "local_20[0]" (identifier "local_20") ([ "[") (number_literal "0") (] "]")) (= "=") (binary_expression "PTR__S_empty_rep_storage_004c133c + 0xc" (identifier "PTR__S_empty_rep_storage_004c133c") (+ "+") (number_literal "0xc"))) (; ";")) (expression_statement "local_24 = param_5;" (assignment_expression "local_24 = param_5" (identifier "local_24") (= "=") (identifier "param_5")) (; ";")) (expression_statement "local_30 = param_6;" (assignment_expression "local_30 = param_6" (identifier "local_30") (= "=") (identifier "param_6")) (; ";")) (expression_statement "local_2c = param_7;" (assignment_expression "local_2c = param_7" (identifier "local_2c") (= "=") (identifier "param_7")) (; ";")) (expression_statement "local_28 = param_4;" (assignment_expression "local_28 = param_4" (identifier "local_28") (= "=") (identifier "param_4")) (; ";")) (expression_statement "(**(code **)(*param_3 + 0xc))\n              (&local_38,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10,local_20);" (call_expression "(**(code **)(*param_3 + 0xc))\n              (&local_38,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10,local_20)" (parenthesized_expression "(**(code **)(*param_3 + 0xc))" (( "(") (pointer_expression "**(code **)(*param_3 + 0xc)" (* "*") (pointer_expression "*(code **)(*param_3 + 0xc)" (* "*") (cast_expression "(code **)(*param_3 + 0xc)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_3 + 0xc)" (( "(") (binary_expression "*param_3 + 0xc" (pointer_expression "*param_3" (* "*") (identifier "param_3")) (+ "+") (number_literal "0xc")) () ")"))))) () ")")) (argument_list "(&local_38,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10,local_20)" (( "(") (pointer_expression "&local_38" (& "&") (identifier "local_38")) (, ",") (identifier "param_3") (, ",") (identifier "param_4") (, ",") (identifier "param_5") (, ",") (identifier "param_6") (, ",") (identifier "param_7") (, ",") (identifier "param_8") (, ",") (identifier "param_9") (, ",") (identifier "param_10") (, ",") (identifier "local_20") () ")"))) (; ";")) (if_statement "if (*param_10 == 0) {\n      if (*(code **)(param_12 + 0x18) != (code *)0x0) {\n        (**(code **)(param_12 + 0x18))(param_12);\n      }\n      (*(code *)PTR_wstring_004c12c0)(param_12,local_20);\n      puVar3 = PTR_LAB_004c12c4 + 0x40f0;\n      *(undefined4 *)(param_12 + 4) = *(undefined4 *)(local_20[0] + -0xc);\n      *(undefined **)(param_12 + 0x18) = puVar3;\n    }" (if "if") (parenthesized_expression "(*param_10 == 0)" (( "(") (binary_expression "*param_10 == 0" (pointer_expression "*param_10" (* "*") (identifier "param_10")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      if (*(code **)(param_12 + 0x18) != (code *)0x0) {\n        (**(code **)(param_12 + 0x18))(param_12);\n      }\n      (*(code *)PTR_wstring_004c12c0)(param_12,local_20);\n      puVar3 = PTR_LAB_004c12c4 + 0x40f0;\n      *(undefined4 *)(param_12 + 4) = *(undefined4 *)(local_20[0] + -0xc);\n      *(undefined **)(param_12 + 0x18) = puVar3;\n    }" ({ "{") (if_statement "if (*(code **)(param_12 + 0x18) != (code *)0x0) {\n        (**(code **)(param_12 + 0x18))(param_12);\n      }" (if "if") (parenthesized_expression "(*(code **)(param_12 + 0x18) != (code *)0x0)" (( "(") (binary_expression "*(code **)(param_12 + 0x18) != (code *)0x0" (pointer_expression "*(code **)(param_12 + 0x18)" (* "*") (cast_expression "(code **)(param_12 + 0x18)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_12 + 0x18)" (( "(") (binary_expression "param_12 + 0x18" (identifier "param_12") (+ "+") (number_literal "0x18")) () ")")))) (!= "!=") (cast_expression "(code *)0x0" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n        (**(code **)(param_12 + 0x18))(param_12);\n      }" ({ "{") (expression_statement "(**(code **)(param_12 + 0x18))(param_12);" (call_expression "(**(code **)(param_12 + 0x18))(param_12)" (parenthesized_expression "(**(code **)(param_12 + 0x18))" (( "(") (pointer_expression "**(code **)(param_12 + 0x18)" (* "*") (pointer_expression "*(code **)(param_12 + 0x18)" (* "*") (cast_expression "(code **)(param_12 + 0x18)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_12 + 0x18)" (( "(") (binary_expression "param_12 + 0x18" (identifier "param_12") (+ "+") (number_literal "0x18")) () ")"))))) () ")")) (argument_list "(param_12)" (( "(") (identifier "param_12") () ")"))) (; ";")) (} "}"))) (expression_statement "(*(code *)PTR_wstring_004c12c0)(param_12,local_20);" (call_expression "(*(code *)PTR_wstring_004c12c0)(param_12,local_20)" (parenthesized_expression "(*(code *)PTR_wstring_004c12c0)" (( "(") (pointer_expression "*(code *)PTR_wstring_004c12c0" (* "*") (cast_expression "(code *)PTR_wstring_004c12c0" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_wstring_004c12c0"))) () ")")) (argument_list "(param_12,local_20)" (( "(") (identifier "param_12") (, ",") (identifier "local_20") () ")"))) (; ";")) (expression_statement "puVar3 = PTR_LAB_004c12c4 + 0x40f0;" (assignment_expression "puVar3 = PTR_LAB_004c12c4 + 0x40f0" (identifier "puVar3") (= "=") (binary_expression "PTR_LAB_004c12c4 + 0x40f0" (identifier "PTR_LAB_004c12c4") (+ "+") (number_literal "0x40f0"))) (; ";")) (expression_statement "*(undefined4 *)(param_12 + 4) = *(undefined4 *)(local_20[0] + -0xc);" (assignment_expression "*(undefined4 *)(param_12 + 4) = *(undefined4 *)(local_20[0] + -0xc)" (pointer_expression "*(undefined4 *)(param_12 + 4)" (* "*") (cast_expression "(undefined4 *)(param_12 + 4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_12 + 4)" (( "(") (binary_expression "param_12 + 4" (identifier "param_12") (+ "+") (number_literal "4")) () ")")))) (= "=") (pointer_expression "*(undefined4 *)(local_20[0] + -0xc)" (* "*") (cast_expression "(undefined4 *)(local_20[0] + -0xc)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_20[0] + -0xc)" (( "(") (binary_expression "local_20[0] + -0xc" (subscript_expression "local_20[0]" (identifier "local_20") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "-0xc")) () ")"))))) (; ";")) (expression_statement "*(undefined **)(param_12 + 0x18) = puVar3;" (assignment_expression "*(undefined **)(param_12 + 0x18) = puVar3" (pointer_expression "*(undefined **)(param_12 + 0x18)" (* "*") (cast_expression "(undefined **)(param_12 + 0x18)" (( "(") (type_descriptor "undefined **" (type_identifier "undefined") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_12 + 0x18)" (( "(") (binary_expression "param_12 + 0x18" (identifier "param_12") (+ "+") (number_literal "0x18")) () ")")))) (= "=") (identifier "puVar3")) (; ";")) (} "}"))) (expression_statement "*param_1 = local_38;" (assignment_expression "*param_1 = local_38" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (= "=") (identifier "local_38")) (; ";")) (expression_statement "param_1[1] = local_34;" (assignment_expression "param_1[1] = local_34" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (= "=") (identifier "local_34")) (; ";")) (if_statement "if (local_20[0] + -0xc != puVar1) {\n      if (PTR___pthread_key_create_004c5aa0 == (undefined *)0x0) {\n        iVar2 = *(int *)(local_20[0] + -4);\n        *(int *)(local_20[0] + -4) = iVar2 + -1;\n      }\n      else {\n        SYNC(0);\n        iVar2 = *(int *)(local_20[0] + -4);\n        *(int *)(local_20[0] + -4) = iVar2 + -1;\n        SYNC(0);\n      }\n      if (iVar2 < 1) {\n        (*(code *)PTR__M_destroy_004c12b8)(local_20[0] + -0xc,&local_38);\n      }\n    }" (if "if") (parenthesized_expression "(local_20[0] + -0xc != puVar1)" (( "(") (binary_expression "local_20[0] + -0xc != puVar1" (binary_expression "local_20[0] + -0xc" (subscript_expression "local_20[0]" (identifier "local_20") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "-0xc")) (!= "!=") (identifier "puVar1")) () ")")) (compound_statement "{\n      if (PTR___pthread_key_create_004c5aa0 == (undefined *)0x0) {\n        iVar2 = *(int *)(local_20[0] + -4);\n        *(int *)(local_20[0] + -4) = iVar2 + -1;\n      }\n      else {\n        SYNC(0);\n        iVar2 = *(int *)(local_20[0] + -4);\n        *(int *)(local_20[0] + -4) = iVar2 + -1;\n        SYNC(0);\n      }\n      if (iVar2 < 1) {\n        (*(code *)PTR__M_destroy_004c12b8)(local_20[0] + -0xc,&local_38);\n      }\n    }" ({ "{") (if_statement "if (PTR___pthread_key_create_004c5aa0 == (undefined *)0x0) {\n        iVar2 = *(int *)(local_20[0] + -4);\n        *(int *)(local_20[0] + -4) = iVar2 + -1;\n      }\n      else {\n        SYNC(0);\n        iVar2 = *(int *)(local_20[0] + -4);\n        *(int *)(local_20[0] + -4) = iVar2 + -1;\n        SYNC(0);\n      }" (if "if") (parenthesized_expression "(PTR___pthread_key_create_004c5aa0 == (undefined *)0x0)" (( "(") (binary_expression "PTR___pthread_key_create_004c5aa0 == (undefined *)0x0" (identifier "PTR___pthread_key_create_004c5aa0") (== "==") (cast_expression "(undefined *)0x0" (( "(") (type_descriptor "undefined *" (type_identifier "undefined") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n        iVar2 = *(int *)(local_20[0] + -4);\n        *(int *)(local_20[0] + -4) = iVar2 + -1;\n      }" ({ "{") (expression_statement "iVar2 = *(int *)(local_20[0] + -4);" (assignment_expression "iVar2 = *(int *)(local_20[0] + -4)" (identifier "iVar2") (= "=") (pointer_expression "*(int *)(local_20[0] + -4)" (* "*") (cast_expression "(int *)(local_20[0] + -4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_20[0] + -4)" (( "(") (binary_expression "local_20[0] + -4" (subscript_expression "local_20[0]" (identifier "local_20") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "-4")) () ")"))))) (; ";")) (expression_statement "*(int *)(local_20[0] + -4) = iVar2 + -1;" (assignment_expression "*(int *)(local_20[0] + -4) = iVar2 + -1" (pointer_expression "*(int *)(local_20[0] + -4)" (* "*") (cast_expression "(int *)(local_20[0] + -4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_20[0] + -4)" (( "(") (binary_expression "local_20[0] + -4" (subscript_expression "local_20[0]" (identifier "local_20") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "-4")) () ")")))) (= "=") (binary_expression "iVar2 + -1" (identifier "iVar2") (+ "+") (number_literal "-1"))) (; ";")) (} "}")) (else_clause "else {\n        SYNC(0);\n        iVar2 = *(int *)(local_20[0] + -4);\n        *(int *)(local_20[0] + -4) = iVar2 + -1;\n        SYNC(0);\n      }" (else "else") (compound_statement "{\n        SYNC(0);\n        iVar2 = *(int *)(local_20[0] + -4);\n        *(int *)(local_20[0] + -4) = iVar2 + -1;\n        SYNC(0);\n      }" ({ "{") (expression_statement "SYNC(0);" (call_expression "SYNC(0)" (identifier "SYNC") (argument_list "(0)" (( "(") (number_literal "0") () ")"))) (; ";")) (expression_statement "iVar2 = *(int *)(local_20[0] + -4);" (assignment_expression "iVar2 = *(int *)(local_20[0] + -4)" (identifier "iVar2") (= "=") (pointer_expression "*(int *)(local_20[0] + -4)" (* "*") (cast_expression "(int *)(local_20[0] + -4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_20[0] + -4)" (( "(") (binary_expression "local_20[0] + -4" (subscript_expression "local_20[0]" (identifier "local_20") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "-4")) () ")"))))) (; ";")) (expression_statement "*(int *)(local_20[0] + -4) = iVar2 + -1;" (assignment_expression "*(int *)(local_20[0] + -4) = iVar2 + -1" (pointer_expression "*(int *)(local_20[0] + -4)" (* "*") (cast_expression "(int *)(local_20[0] + -4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_20[0] + -4)" (( "(") (binary_expression "local_20[0] + -4" (subscript_expression "local_20[0]" (identifier "local_20") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "-4")) () ")")))) (= "=") (binary_expression "iVar2 + -1" (identifier "iVar2") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "SYNC(0);" (call_expression "SYNC(0)" (identifier "SYNC") (argument_list "(0)" (( "(") (number_literal "0") () ")"))) (; ";")) (} "}")))) (if_statement "if (iVar2 < 1) {\n        (*(code *)PTR__M_destroy_004c12b8)(local_20[0] + -0xc,&local_38);\n      }" (if "if") (parenthesized_expression "(iVar2 < 1)" (( "(") (binary_expression "iVar2 < 1" (identifier "iVar2") (< "<") (number_literal "1")) () ")")) (compound_statement "{\n        (*(code *)PTR__M_destroy_004c12b8)(local_20[0] + -0xc,&local_38);\n      }" ({ "{") (expression_statement "(*(code *)PTR__M_destroy_004c12b8)(local_20[0] + -0xc,&local_38);" (call_expression "(*(code *)PTR__M_destroy_004c12b8)(local_20[0] + -0xc,&local_38)" (parenthesized_expression "(*(code *)PTR__M_destroy_004c12b8)" (( "(") (pointer_expression "*(code *)PTR__M_destroy_004c12b8" (* "*") (cast_expression "(code *)PTR__M_destroy_004c12b8" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR__M_destroy_004c12b8"))) () ")")) (argument_list "(local_20[0] + -0xc,&local_38)" (( "(") (binary_expression "local_20[0] + -0xc" (subscript_expression "local_20[0]" (identifier "local_20") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "-0xc")) (, ",") (pointer_expression "&local_38" (& "&") (identifier "local_38")) () ")"))) (; ";")) (} "}"))) (} "}"))) (} "}")) (else_clause "else {\n    local_2c = param_5;\n    local_38 = param_6;\n    local_34 = param_7;\n    local_30 = param_4;\n    (**(code **)(*param_3 + 8))\n              (param_1,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10,param_11);\n  }" (else "else") (compound_statement "{\n    local_2c = param_5;\n    local_38 = param_6;\n    local_34 = param_7;\n    local_30 = param_4;\n    (**(code **)(*param_3 + 8))\n              (param_1,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10,param_11);\n  }" ({ "{") (expression_statement "local_2c = param_5;" (assignment_expression "local_2c = param_5" (identifier "local_2c") (= "=") (identifier "param_5")) (; ";")) (expression_statement "local_38 = param_6;" (assignment_expression "local_38 = param_6" (identifier "local_38") (= "=") (identifier "param_6")) (; ";")) (expression_statement "local_34 = param_7;" (assignment_expression "local_34 = param_7" (identifier "local_34") (= "=") (identifier "param_7")) (; ";")) (expression_statement "local_30 = param_4;" (assignment_expression "local_30 = param_4" (identifier "local_30") (= "=") (identifier "param_4")) (; ";")) (expression_statement "(**(code **)(*param_3 + 8))\n              (param_1,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10,param_11);" (call_expression "(**(code **)(*param_3 + 8))\n              (param_1,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10,param_11)" (parenthesized_expression "(**(code **)(*param_3 + 8))" (( "(") (pointer_expression "**(code **)(*param_3 + 8)" (* "*") (pointer_expression "*(code **)(*param_3 + 8)" (* "*") (cast_expression "(code **)(*param_3 + 8)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_3 + 8)" (( "(") (binary_expression "*param_3 + 8" (pointer_expression "*param_3" (* "*") (identifier "param_3")) (+ "+") (number_literal "8")) () ")"))))) () ")")) (argument_list "(param_1,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10,param_11)" (( "(") (identifier "param_1") (, ",") (identifier "param_3") (, ",") (identifier "param_4") (, ",") (identifier "param_5") (, ",") (identifier "param_6") (, ",") (identifier "param_7") (, ",") (identifier "param_8") (, ",") (identifier "param_9") (, ",") (identifier "param_10") (, ",") (identifier "param_11") () ")"))) (; ";")) (} "}")))) (return_statement "return param_1;" (return "return") (identifier "param_1") (; ";")) (} "}"))

/* std::istreambuf_iterator<wchar_t, std::char_traits<wchar_t> >
   std::__facet_shims::__money_get<wchar_t>(std::integral_constant<bool, false>, std::locale::facet
   const*, std::istreambuf_iterator<wchar_t, std::char_traits<wchar_t> >,
   std::istreambuf_iterator<wchar_t, std::char_traits<wchar_t> >, bool, std::ios_base&,
   std::_Ios_Iostate&, long double*, std::__facet_shims::__any_string*) */

var_3 *
std::__facet_shims::var_1<var_2>
          (var_3 *var_4,var_3 param_2,var_5 *var_6,var_3 param_4,var_3 param_5
          ,var_3 param_6,var_3 param_7,undefined1 param_8,var_3 param_9,var_5 *var_7
          ,var_5 var_8,var_5 var_10)

{
  type_1 *var_12;
  int var_14;
  type_1 *puVar3;
  var_3 local_38;
  var_3 local_34;
  var_3 local_30;
  var_3 local_2c;
  var_3 local_28;
  var_3 local_24;
  type_1 *local_20 [2];
  
  var_12 = var_9;
  if (var_8 == 0) {
    local_20[0] = var_9 + 0xc;
    local_24 = param_5;
    local_30 = param_6;
    local_2c = param_7;
    local_28 = param_4;
                    /* try { // try from 00387128 to 003871d3 has its CatchHandler @ 00387208 */
    (**(type_2 **)(*var_6 + 0xc))
              (&local_38,var_6,param_4,param_5,param_6,param_7,param_8,param_9,var_7,local_20);
    if (*var_7 == 0) {
      if (*(type_2 **)(var_10 + 0x18) != (type_2 *)0x0) {
        (**(type_2 **)(var_10 + 0x18))(var_10);
      }
      (*(type_2 *)PTR_wstring_004c12c0)(var_10,local_20);
      puVar3 = var_11 + 0x40f0;
      *(var_3 *)(var_10 + 4) = *(var_3 *)(local_20[0] + -0xc);
      *(type_1 **)(var_10 + 0x18) = puVar3;
    }
    *var_4 = local_38;
    var_4[1] = local_34;
    if (local_20[0] + -0xc != var_12) {
      if (var_13 == (type_1 *)0x0) {
        var_14 = *(int *)(local_20[0] + -4);
        *(int *)(local_20[0] + -4) = var_14 + -1;
      }
      else {
        var_15(0);
        var_14 = *(int *)(local_20[0] + -4);
        *(int *)(local_20[0] + -4) = var_14 + -1;
        var_15(0);
      }
      if (var_14 < 1) {
        (*(type_2 *)PTR__M_destroy_004c12b8)(local_20[0] + -0xc,&local_38);
      }
    }
  }
  else {
    local_2c = param_5;
    local_38 = param_6;
    local_34 = param_7;
    local_30 = param_4;
    (**(type_2 **)(*var_6 + 8))
              (var_4,var_6,param_4,param_5,param_6,param_7,param_8,param_9,var_7,var_8);
  }
  return var_4;
}


(translation_unit (ERROR (binary_expression left: (identifier) right: (identifier))) (labeled_statement label: (statement_identifier) (ERROR) (expression_statement (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (parenthesized_expression (comma_expression left: (binary_expression left: (identifier) right: (identifier)) right: (comma_expression left: (identifier) (ERROR (identifier)) right: (comma_expression left: (binary_expression left: (identifier) right: (identifier)) right: (comma_expression left: (identifier) (ERROR (identifier)) right: (comma_expression left: (identifier) (ERROR (identifier)) right: (comma_expression left: (identifier) (ERROR (identifier)) right: (comma_expression left: (identifier) (ERROR (identifier)) right: (comma_expression left: (identifier) (ERROR (identifier)) (ERROR (identifier)) right: (comma_expression left: (identifier) right: (comma_expression left: (binary_expression left: (identifier) right: (identifier)) (ERROR (identifier)) right: (comma_expression left: (identifier) (ERROR (identifier)) right: (identifier)))))))))))))) (MISSING ";"))) (compound_statement (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (array_declarator declarator: (identifier) size: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (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) (identifier) (identifier) (identifier) (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (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: (identifier) right: (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: (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: (identifier) right: (number_literal))))))) arguments: (argument_list (identifier)))))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) arguments: (argument_list (identifier) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))))))) (expression_statement (assignment_expression left: (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: (identifier) right: (number_literal))))) right: (identifier))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal)) right: (identifier))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))))) right: (binary_expression left: (identifier) right: (number_literal))))) alternative: (else_clause (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))))) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (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: (identifier)))) arguments: (argument_list (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal)) (pointer_expression argument: (identifier)))))))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (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) (identifier) (identifier) (identifier) (identifier) (identifier) (identifier) (identifier))))))) (return_statement (identifier))))

/* std::istreambuf_iterator<wchar_t, std::char_traits<wchar_t> >
   std::__facet_shims::MASKED(std::integral_constant<bool, false>, std::locale::facet
   const*, std::istreambuf_iterator<wchar_t, std::char_traits<wchar_t> >,
   std::istreambuf_iterator<wchar_t, std::char_traits<wchar_t> >, bool, std::ios_base&,
   std::_Ios_Iostate&, long double*, std::__facet_shims::__any_string*) */

undefined4 *
std::__facet_shims::MASKED
          (undefined4 *param_1,undefined4 param_2,int *param_3,undefined4 param_4,undefined4 param_5
          ,undefined4 param_6,undefined4 param_7,undefined1 param_8,undefined4 param_9,int *param_10
          ,int param_11,int param_12)

{
  undefined *puVar1;
  int iVar2;
  undefined *puVar3;
  undefined4 local_38;
  undefined4 local_34;
  undefined4 local_30;
  undefined4 local_2c;
  undefined4 local_28;
  undefined4 local_24;
  undefined *local_20 [2];
  
  puVar1 = PTR__S_empty_rep_storage_004c133c;
  if (param_11 == 0) {
    local_20[0] = PTR__S_empty_rep_storage_004c133c + 0xc;
    local_24 = param_5;
    local_30 = param_6;
    local_2c = param_7;
    local_28 = param_4;
                    /* try { // try from 00387128 to 003871d3 has its CatchHandler @ 00387208 */
    (**(code **)(*param_3 + 0xc))
              (&local_38,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10,local_20);
    if (*param_10 == 0) {
      if (*(code **)(param_12 + 0x18) != (code *)0x0) {
        (**(code **)(param_12 + 0x18))(param_12);
      }
      (*(code *)PTR_wstring_004c12c0)(param_12,local_20);
      puVar3 = PTR_LAB_004c12c4 + 0x40f0;
      *(undefined4 *)(param_12 + 4) = *(undefined4 *)(local_20[0] + -0xc);
      *(undefined **)(param_12 + 0x18) = puVar3;
    }
    *param_1 = local_38;
    param_1[1] = local_34;
    if (local_20[0] + -0xc != puVar1) {
      if (PTR___pthread_key_create_004c5aa0 == (undefined *)0x0) {
        iVar2 = *(int *)(local_20[0] + -4);
        *(int *)(local_20[0] + -4) = iVar2 + -1;
      }
      else {
        SYNC(0);
        iVar2 = *(int *)(local_20[0] + -4);
        *(int *)(local_20[0] + -4) = iVar2 + -1;
        SYNC(0);
      }
      if (iVar2 < 1) {
        (*(code *)PTR__M_destroy_004c12b8)(local_20[0] + -0xc,&local_38);
      }
    }
  }
  else {
    local_2c = param_5;
    local_38 = param_6;
    local_34 = param_7;
    local_30 = param_4;
    (**(code **)(*param_3 + 8))
              (param_1,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10,param_11);
  }
  return param_1;
}

