
/* void std::__facet_shims::__numpunct_fill_cache<wchar_t>(std::integral_constant<bool, true>,
   std::locale::facet const*, std::__numpunct_cache<wchar_t>*) */

void std::__facet_shims::__numpunct_fill_cache<wchar_t>(long *param_1,long param_2)

{
  long lVar1;
  ulong uVar2;
  undefined4 uVar3;
  char *pcVar4;
  wchar_t *pwVar5;
  undefined1 *local_58;
  ulong local_50;
  undefined1 local_48 [24];
  
  uVar3 = (**(code **)(*param_1 + 0x10))();
  *(undefined4 *)(param_2 + 0x48) = uVar3;
  uVar3 = (**(code **)(*param_1 + 0x18))(param_1);
  *(undefined1 *)(param_2 + 0x148) = 1;
  *(undefined4 *)(param_2 + 0x4c) = uVar3;
  lVar1 = *param_1;
  *(undefined8 *)(param_2 + 0x10) = 0;
  *(undefined8 *)(param_2 + 0x28) = 0;
  *(undefined8 *)(param_2 + 0x38) = 0;
  (**(code **)(lVar1 + 0x20))(&local_58,param_1);
  uVar2 = local_50;
                    /* try { // try from 0036fa22 to 0036fa39 has its CatchHandler @ 0036fb3e */
  pcVar4 = (char *)operator_new__(local_50 + 1);
  std::string::copy((string *)&local_58,pcVar4,uVar2,0);
  pcVar4[uVar2] = '\0';
  *(char **)(param_2 + 0x10) = pcVar4;
  *(ulong *)(param_2 + 0x18) = uVar2;
  if (local_58 != local_48) {
    operator_delete(local_58);
  }
  (**(code **)(*param_1 + 0x28))(&local_58,param_1);
  uVar2 = local_50;
  if (0x1ffffffffffffffe < local_50 + 1) {
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 0036fb47 to 0036fb4b has its CatchHandler @ 0036fb45 */
    __cxa_throw_bad_array_new_length();
  }
                    /* try { // try from 0036fa8d to 0036faa4 has its CatchHandler @ 0036fb45 */
  pwVar5 = (wchar_t *)operator_new__((local_50 + 1) * 4);
  std::wstring::copy((wstring *)&local_58,pwVar5,uVar2,0);
  *(wchar_t **)(param_2 + 0x28) = pwVar5;
  pwVar5[uVar2] = L'\0';
  *(ulong *)(param_2 + 0x30) = uVar2;
  if (local_58 != local_48) {
    operator_delete(local_58);
  }
  (**(code **)(*param_1 + 0x30))(&local_58,param_1);
  if (local_50 + 1 < 0x1fffffffffffffff) {
                    /* try { // try from 0036faf4 to 0036fb0b has its CatchHandler @ 0036fb43 */
    pwVar5 = (wchar_t *)operator_new__((local_50 + 1) * 4);
    std::wstring::copy((wstring *)&local_58,pwVar5,local_50,0);
    *(wchar_t **)(param_2 + 0x38) = pwVar5;
    pwVar5[local_50] = L'\0';
    *(ulong *)(param_2 + 0x40) = local_50;
    if (local_58 != local_48) {
      operator_delete(local_58);
    }
    return;
  }
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 0036fb4c to 0036fb50 has its CatchHandler @ 0036fb43 */
  __cxa_throw_bad_array_new_length();
}



void FUN_0036f9c0(long *param_1,long param_2)

{
  undefined4 uVar1;
  long lVar2;
  long lVar3;
  long lVar4;
  undefined1 *local_58;
  long local_50;
  undefined1 local_48 [24];
  
  uVar1 = (**(code **)(*param_1 + 0x10))();
  *(undefined4 *)(param_2 + 0x48) = uVar1;
  uVar1 = (**(code **)(*param_1 + 0x18))(param_1);
  *(undefined1 *)(param_2 + 0x148) = 1;
  *(undefined4 *)(param_2 + 0x4c) = uVar1;
  lVar4 = *param_1;
  *(undefined8 *)(param_2 + 0x10) = 0;
  *(undefined8 *)(param_2 + 0x28) = 0;
  *(undefined8 *)(param_2 + 0x38) = 0;
  (**(code **)(lVar4 + 0x20))(&local_58,param_1);
  lVar4 = local_50;
                    /* try { // try from 0036fa22 to 0036fa39 has its CatchHandler @ 0036fb3e */
  lVar2 = thunk_FUN_00337280(local_50 + 1);
  FUN_00340ef0(&local_58,lVar2,lVar4,0);
  *(undefined1 *)(lVar2 + lVar4) = 0;
  *(long *)(param_2 + 0x10) = lVar2;
  *(long *)(param_2 + 0x18) = lVar4;
  if (local_58 != local_48) {
    FUN_00338a50();
  }
  (**(code **)(*param_1 + 0x28))(&local_58,param_1);
  lVar4 = local_50;
  if (0x1ffffffffffffffe < local_50 + 1U) {
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 0036fb47 to 0036fb4b has its CatchHandler @ 0036fb45 */
    FUN_003384c0();
  }
  lVar2 = (local_50 + 1U) * 4;
                    /* try { // try from 0036fa8d to 0036faa4 has its CatchHandler @ 0036fb45 */
  lVar3 = thunk_FUN_00337280(lVar2);
  FUN_0033e110(&local_58,lVar3,lVar4,0);
  *(long *)(param_2 + 0x28) = lVar3;
  *(undefined4 *)(lVar3 + -4 + lVar2) = 0;
  *(long *)(param_2 + 0x30) = lVar4;
  if (local_58 != local_48) {
    FUN_00338a50();
  }
  (**(code **)(*param_1 + 0x30))(&local_58,param_1);
  if (local_50 + 1U < 0x1fffffffffffffff) {
    lVar2 = (local_50 + 1U) * 4;
                    /* try { // try from 0036faf4 to 0036fb0b has its CatchHandler @ 0036fb43 */
    lVar4 = thunk_FUN_00337280(lVar2);
    FUN_0033e110(&local_58,lVar4,local_50,0);
    *(long *)(param_2 + 0x38) = lVar4;
    *(undefined4 *)(lVar4 + -4 + lVar2) = 0;
    *(long *)(param_2 + 0x40) = local_50;
    if (local_58 != local_48) {
      FUN_00338a50();
    }
    return;
  }
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 0036fb4c to 0036fb50 has its CatchHandler @ 0036fb43 */
  FUN_003384c0();
}


PUSH R15
PUSH R14
PUSH R13
PUSH R12
MOV R12,RDI
PUSH RBP
PUSH RBX
MOV RBX,RSI
SUB RSP,0x28
MOV RAX,qword ptr [RDI]
MOV RBP,RSP
CALL qword ptr [RAX + 0x10]
MOV RDI,R12
MOV dword ptr [RBX + 0x48],EAX
MOV RAX,qword ptr [R12]
CALL qword ptr [RAX + 0x18]
MOV RDI,RBP
MOV byte ptr [RBX + 0x148],0x1
MOV RSI,R12
MOV dword ptr [RBX + 0x4c],EAX
MOV RAX,qword ptr [R12]
MOV qword ptr [RBX + 0x10],0x0
MOV qword ptr [RBX + 0x28],0x0
MOV qword ptr [RBX + 0x38],0x0
CALL qword ptr [RAX + 0x20]
MOV R13,qword ptr [RSP + 0x8]
LEA RDI,[R13 + 0x1]
CALL 0x00337220
XOR ECX,ECX
MOV RDX,R13
MOV RSI,RAX
MOV RDI,RBP
MOV R14,RAX
CALL 0x00340ef0
MOV RDI,qword ptr [RSP]
LEA RAX,[RBP + 0x10]
MOV byte ptr [R14 + R13*0x1],0x0
MOV qword ptr [RBX + 0x10],R14
MOV qword ptr [RBX + 0x18],R13
CMP RDI,RAX
JZ 0x0036fa59
CALL 0x00338a50
MOV RAX,qword ptr [R12]
MOV RDI,RBP
MOV RSI,R12
CALL qword ptr [RAX + 0x28]
MOV R14,qword ptr [RSP + 0x8]
MOV RAX,0x1ffffffffffffffe
LEA RDI,[R14 + 0x1]
CMP RDI,RAX
JA 0x0036fb47
LEA R13,[RDI*0x4]
MOV RDI,R13
CALL 0x00337220
XOR ECX,ECX
MOV RDX,R14
MOV RSI,RAX
MOV RDI,RBP
MOV R15,RAX
CALL 0x0033e110
MOV RDI,qword ptr [RSP]
LEA RAX,[RBP + 0x10]
MOV qword ptr [RBX + 0x28],R15
MOV dword ptr [R15 + R13*0x1 + -0x4],0x0
MOV qword ptr [RBX + 0x30],R14
CMP RDI,RAX
JZ 0x0036fac8
CALL 0x00338a50
MOV RAX,qword ptr [R12]
MOV RSI,R12
MOV RDI,RBP
CALL qword ptr [RAX + 0x30]
MOV R13,qword ptr [RSP + 0x8]
MOV RAX,0x1ffffffffffffffe
LEA R12,[R13 + 0x1]
CMP R12,RAX
JA 0x0036fb4c
SHL R12,0x2
MOV RDI,R12
CALL 0x00337220
XOR ECX,ECX
MOV RDX,R13
MOV RSI,RAX
MOV RDI,RBP
MOV R14,RAX
CALL 0x0033e110
MOV RDI,qword ptr [RSP]
ADD RBP,0x10
MOV qword ptr [RBX + 0x38],R14
MOV dword ptr [R14 + R12*0x1 + -0x4],0x0
MOV qword ptr [RBX + 0x40],R13
CMP RDI,RBP
JZ 0x0036fb2f
CALL 0x00338a50
ADD RSP,0x28
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
CALL 0x003384c0
CALL 0x003384c0
(translation_unit "void FUN_0036f9c0(long *param_1,long param_2)\n\n{\n  undefined4 uVar1;\n  long lVar2;\n  long lVar3;\n  long lVar4;\n  undefined1 *local_58;\n  long local_50;\n  undefined1 local_48 [24];\n  \n  uVar1 = (**(code **)(*param_1 + 0x10))();\n  *(undefined4 *)(param_2 + 0x48) = uVar1;\n  uVar1 = (**(code **)(*param_1 + 0x18))(param_1);\n  *(undefined1 *)(param_2 + 0x148) = 1;\n  *(undefined4 *)(param_2 + 0x4c) = uVar1;\n  lVar4 = *param_1;\n  *(undefined8 *)(param_2 + 0x10) = 0;\n  *(undefined8 *)(param_2 + 0x28) = 0;\n  *(undefined8 *)(param_2 + 0x38) = 0;\n  (**(code **)(lVar4 + 0x20))(&local_58,param_1);\n  lVar4 = local_50;\n                    /* try { // try from 0036fa22 to 0036fa39 has its CatchHandler @ 0036fb3e */\n  lVar2 = thunk_FUN_00337280(local_50 + 1);\n  FUN_00340ef0(&local_58,lVar2,lVar4,0);\n  *(undefined1 *)(lVar2 + lVar4) = 0;\n  *(long *)(param_2 + 0x10) = lVar2;\n  *(long *)(param_2 + 0x18) = lVar4;\n  if (local_58 != local_48) {\n    FUN_00338a50();\n  }\n  (**(code **)(*param_1 + 0x28))(&local_58,param_1);\n  lVar4 = local_50;\n  if (0x1ffffffffffffffe < local_50 + 1U) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 0036fb47 to 0036fb4b has its CatchHandler @ 0036fb45 */\n    FUN_003384c0();\n  }\n  lVar2 = (local_50 + 1U) * 4;\n                    /* try { // try from 0036fa8d to 0036faa4 has its CatchHandler @ 0036fb45 */\n  lVar3 = thunk_FUN_00337280(lVar2);\n  FUN_0033e110(&local_58,lVar3,lVar4,0);\n  *(long *)(param_2 + 0x28) = lVar3;\n  *(undefined4 *)(lVar3 + -4 + lVar2) = 0;\n  *(long *)(param_2 + 0x30) = lVar4;\n  if (local_58 != local_48) {\n    FUN_00338a50();\n  }\n  (**(code **)(*param_1 + 0x30))(&local_58,param_1);\n  if (local_50 + 1U < 0x1fffffffffffffff) {\n    lVar2 = (local_50 + 1U) * 4;\n                    /* try { // try from 0036faf4 to 0036fb0b has its CatchHandler @ 0036fb43 */\n    lVar4 = thunk_FUN_00337280(lVar2);\n    FUN_0033e110(&local_58,lVar4,local_50,0);\n    *(long *)(param_2 + 0x38) = lVar4;\n    *(undefined4 *)(lVar4 + -4 + lVar2) = 0;\n    *(long *)(param_2 + 0x40) = local_50;\n    if (local_58 != local_48) {\n      FUN_00338a50();\n    }\n    return;\n  }\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 0036fb4c to 0036fb50 has its CatchHandler @ 0036fb43 */\n  FUN_003384c0();\n}\n\n" (function_definition "void FUN_0036f9c0(long *param_1,long param_2)\n\n{\n  undefined4 uVar1;\n  long lVar2;\n  long lVar3;\n  long lVar4;\n  undefined1 *local_58;\n  long local_50;\n  undefined1 local_48 [24];\n  \n  uVar1 = (**(code **)(*param_1 + 0x10))();\n  *(undefined4 *)(param_2 + 0x48) = uVar1;\n  uVar1 = (**(code **)(*param_1 + 0x18))(param_1);\n  *(undefined1 *)(param_2 + 0x148) = 1;\n  *(undefined4 *)(param_2 + 0x4c) = uVar1;\n  lVar4 = *param_1;\n  *(undefined8 *)(param_2 + 0x10) = 0;\n  *(undefined8 *)(param_2 + 0x28) = 0;\n  *(undefined8 *)(param_2 + 0x38) = 0;\n  (**(code **)(lVar4 + 0x20))(&local_58,param_1);\n  lVar4 = local_50;\n                    /* try { // try from 0036fa22 to 0036fa39 has its CatchHandler @ 0036fb3e */\n  lVar2 = thunk_FUN_00337280(local_50 + 1);\n  FUN_00340ef0(&local_58,lVar2,lVar4,0);\n  *(undefined1 *)(lVar2 + lVar4) = 0;\n  *(long *)(param_2 + 0x10) = lVar2;\n  *(long *)(param_2 + 0x18) = lVar4;\n  if (local_58 != local_48) {\n    FUN_00338a50();\n  }\n  (**(code **)(*param_1 + 0x28))(&local_58,param_1);\n  lVar4 = local_50;\n  if (0x1ffffffffffffffe < local_50 + 1U) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 0036fb47 to 0036fb4b has its CatchHandler @ 0036fb45 */\n    FUN_003384c0();\n  }\n  lVar2 = (local_50 + 1U) * 4;\n                    /* try { // try from 0036fa8d to 0036faa4 has its CatchHandler @ 0036fb45 */\n  lVar3 = thunk_FUN_00337280(lVar2);\n  FUN_0033e110(&local_58,lVar3,lVar4,0);\n  *(long *)(param_2 + 0x28) = lVar3;\n  *(undefined4 *)(lVar3 + -4 + lVar2) = 0;\n  *(long *)(param_2 + 0x30) = lVar4;\n  if (local_58 != local_48) {\n    FUN_00338a50();\n  }\n  (**(code **)(*param_1 + 0x30))(&local_58,param_1);\n  if (local_50 + 1U < 0x1fffffffffffffff) {\n    lVar2 = (local_50 + 1U) * 4;\n                    /* try { // try from 0036faf4 to 0036fb0b has its CatchHandler @ 0036fb43 */\n    lVar4 = thunk_FUN_00337280(lVar2);\n    FUN_0033e110(&local_58,lVar4,local_50,0);\n    *(long *)(param_2 + 0x38) = lVar4;\n    *(undefined4 *)(lVar4 + -4 + lVar2) = 0;\n    *(long *)(param_2 + 0x40) = local_50;\n    if (local_58 != local_48) {\n      FUN_00338a50();\n    }\n    return;\n  }\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 0036fb4c to 0036fb50 has its CatchHandler @ 0036fb43 */\n  FUN_003384c0();\n}" primitive_type (function_declarator "FUN_0036f9c0(long *param_1,long param_2)" identifier (parameter_list "(long *param_1,long param_2)" ( (parameter_declaration "long *param_1" (sized_type_specifier "long" long) (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "long param_2" (sized_type_specifier "long" long) identifier) ))) (compound_statement "{\n  undefined4 uVar1;\n  long lVar2;\n  long lVar3;\n  long lVar4;\n  undefined1 *local_58;\n  long local_50;\n  undefined1 local_48 [24];\n  \n  uVar1 = (**(code **)(*param_1 + 0x10))();\n  *(undefined4 *)(param_2 + 0x48) = uVar1;\n  uVar1 = (**(code **)(*param_1 + 0x18))(param_1);\n  *(undefined1 *)(param_2 + 0x148) = 1;\n  *(undefined4 *)(param_2 + 0x4c) = uVar1;\n  lVar4 = *param_1;\n  *(undefined8 *)(param_2 + 0x10) = 0;\n  *(undefined8 *)(param_2 + 0x28) = 0;\n  *(undefined8 *)(param_2 + 0x38) = 0;\n  (**(code **)(lVar4 + 0x20))(&local_58,param_1);\n  lVar4 = local_50;\n                    /* try { // try from 0036fa22 to 0036fa39 has its CatchHandler @ 0036fb3e */\n  lVar2 = thunk_FUN_00337280(local_50 + 1);\n  FUN_00340ef0(&local_58,lVar2,lVar4,0);\n  *(undefined1 *)(lVar2 + lVar4) = 0;\n  *(long *)(param_2 + 0x10) = lVar2;\n  *(long *)(param_2 + 0x18) = lVar4;\n  if (local_58 != local_48) {\n    FUN_00338a50();\n  }\n  (**(code **)(*param_1 + 0x28))(&local_58,param_1);\n  lVar4 = local_50;\n  if (0x1ffffffffffffffe < local_50 + 1U) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 0036fb47 to 0036fb4b has its CatchHandler @ 0036fb45 */\n    FUN_003384c0();\n  }\n  lVar2 = (local_50 + 1U) * 4;\n                    /* try { // try from 0036fa8d to 0036faa4 has its CatchHandler @ 0036fb45 */\n  lVar3 = thunk_FUN_00337280(lVar2);\n  FUN_0033e110(&local_58,lVar3,lVar4,0);\n  *(long *)(param_2 + 0x28) = lVar3;\n  *(undefined4 *)(lVar3 + -4 + lVar2) = 0;\n  *(long *)(param_2 + 0x30) = lVar4;\n  if (local_58 != local_48) {\n    FUN_00338a50();\n  }\n  (**(code **)(*param_1 + 0x30))(&local_58,param_1);\n  if (local_50 + 1U < 0x1fffffffffffffff) {\n    lVar2 = (local_50 + 1U) * 4;\n                    /* try { // try from 0036faf4 to 0036fb0b has its CatchHandler @ 0036fb43 */\n    lVar4 = thunk_FUN_00337280(lVar2);\n    FUN_0033e110(&local_58,lVar4,local_50,0);\n    *(long *)(param_2 + 0x38) = lVar4;\n    *(undefined4 *)(lVar4 + -4 + lVar2) = 0;\n    *(long *)(param_2 + 0x40) = local_50;\n    if (local_58 != local_48) {\n      FUN_00338a50();\n    }\n    return;\n  }\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 0036fb4c to 0036fb50 has its CatchHandler @ 0036fb43 */\n  FUN_003384c0();\n}" { (declaration "undefined4 uVar1;" type_identifier identifier ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar4;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined1 *local_58;" type_identifier (pointer_declarator "*local_58" * identifier) ;) (declaration "long local_50;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined1 local_48 [24];" type_identifier (array_declarator "local_48 [24]" identifier [ number_literal ]) ;) (expression_statement "uVar1 = (**(code **)(*param_1 + 0x10))();" (assignment_expression "uVar1 = (**(code **)(*param_1 + 0x10))()" identifier = (call_expression "(**(code **)(*param_1 + 0x10))()" (parenthesized_expression "(**(code **)(*param_1 + 0x10))" ( (pointer_expression "**(code **)(*param_1 + 0x10)" * (pointer_expression "*(code **)(*param_1 + 0x10)" * (cast_expression "(code **)(*param_1 + 0x10)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x10)" ( (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "()" ( )))) ;) (expression_statement "*(undefined4 *)(param_2 + 0x48) = uVar1;" (assignment_expression "*(undefined4 *)(param_2 + 0x48) = uVar1" (pointer_expression "*(undefined4 *)(param_2 + 0x48)" * (cast_expression "(undefined4 *)(param_2 + 0x48)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x48)" ( (binary_expression "param_2 + 0x48" identifier + number_literal) )))) = identifier) ;) (expression_statement "uVar1 = (**(code **)(*param_1 + 0x18))(param_1);" (assignment_expression "uVar1 = (**(code **)(*param_1 + 0x18))(param_1)" identifier = (call_expression "(**(code **)(*param_1 + 0x18))(param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x18))" ( (pointer_expression "**(code **)(*param_1 + 0x18)" * (pointer_expression "*(code **)(*param_1 + 0x18)" * (cast_expression "(code **)(*param_1 + 0x18)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x18)" ( (binary_expression "*param_1 + 0x18" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(param_1)" ( identifier )))) ;) (expression_statement "*(undefined1 *)(param_2 + 0x148) = 1;" (assignment_expression "*(undefined1 *)(param_2 + 0x148) = 1" (pointer_expression "*(undefined1 *)(param_2 + 0x148)" * (cast_expression "(undefined1 *)(param_2 + 0x148)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x148)" ( (binary_expression "param_2 + 0x148" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined4 *)(param_2 + 0x4c) = uVar1;" (assignment_expression "*(undefined4 *)(param_2 + 0x4c) = uVar1" (pointer_expression "*(undefined4 *)(param_2 + 0x4c)" * (cast_expression "(undefined4 *)(param_2 + 0x4c)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x4c)" ( (binary_expression "param_2 + 0x4c" identifier + number_literal) )))) = identifier) ;) (expression_statement "lVar4 = *param_1;" (assignment_expression "lVar4 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "*(undefined8 *)(param_2 + 0x10) = 0;" (assignment_expression "*(undefined8 *)(param_2 + 0x10) = 0" (pointer_expression "*(undefined8 *)(param_2 + 0x10)" * (cast_expression "(undefined8 *)(param_2 + 0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x10)" ( (binary_expression "param_2 + 0x10" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined8 *)(param_2 + 0x28) = 0;" (assignment_expression "*(undefined8 *)(param_2 + 0x28) = 0" (pointer_expression "*(undefined8 *)(param_2 + 0x28)" * (cast_expression "(undefined8 *)(param_2 + 0x28)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x28)" ( (binary_expression "param_2 + 0x28" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined8 *)(param_2 + 0x38) = 0;" (assignment_expression "*(undefined8 *)(param_2 + 0x38) = 0" (pointer_expression "*(undefined8 *)(param_2 + 0x38)" * (cast_expression "(undefined8 *)(param_2 + 0x38)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x38)" ( (binary_expression "param_2 + 0x38" identifier + number_literal) )))) = number_literal) ;) (expression_statement "(**(code **)(lVar4 + 0x20))(&local_58,param_1);" (call_expression "(**(code **)(lVar4 + 0x20))(&local_58,param_1)" (parenthesized_expression "(**(code **)(lVar4 + 0x20))" ( (pointer_expression "**(code **)(lVar4 + 0x20)" * (pointer_expression "*(code **)(lVar4 + 0x20)" * (cast_expression "(code **)(lVar4 + 0x20)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar4 + 0x20)" ( (binary_expression "lVar4 + 0x20" identifier + number_literal) ))))) )) (argument_list "(&local_58,param_1)" ( (pointer_expression "&local_58" & identifier) , identifier ))) ;) (expression_statement "lVar4 = local_50;" (assignment_expression "lVar4 = local_50" identifier = identifier) ;) comment (expression_statement "lVar2 = thunk_FUN_00337280(local_50 + 1);" (assignment_expression "lVar2 = thunk_FUN_00337280(local_50 + 1)" identifier = (call_expression "thunk_FUN_00337280(local_50 + 1)" identifier (argument_list "(local_50 + 1)" ( (binary_expression "local_50 + 1" identifier + number_literal) )))) ;) (expression_statement "FUN_00340ef0(&local_58,lVar2,lVar4,0);" (call_expression "FUN_00340ef0(&local_58,lVar2,lVar4,0)" identifier (argument_list "(&local_58,lVar2,lVar4,0)" ( (pointer_expression "&local_58" & identifier) , identifier , identifier , number_literal ))) ;) (expression_statement "*(undefined1 *)(lVar2 + lVar4) = 0;" (assignment_expression "*(undefined1 *)(lVar2 + lVar4) = 0" (pointer_expression "*(undefined1 *)(lVar2 + lVar4)" * (cast_expression "(undefined1 *)(lVar2 + lVar4)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar2 + lVar4)" ( (binary_expression "lVar2 + lVar4" identifier + identifier) )))) = number_literal) ;) (expression_statement "*(long *)(param_2 + 0x10) = lVar2;" (assignment_expression "*(long *)(param_2 + 0x10) = lVar2" (pointer_expression "*(long *)(param_2 + 0x10)" * (cast_expression "(long *)(param_2 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x10)" ( (binary_expression "param_2 + 0x10" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(long *)(param_2 + 0x18) = lVar4;" (assignment_expression "*(long *)(param_2 + 0x18) = lVar4" (pointer_expression "*(long *)(param_2 + 0x18)" * (cast_expression "(long *)(param_2 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x18)" ( (binary_expression "param_2 + 0x18" identifier + number_literal) )))) = identifier) ;) (if_statement "if (local_58 != local_48) {\n    FUN_00338a50();\n  }" if (parenthesized_expression "(local_58 != local_48)" ( (binary_expression "local_58 != local_48" identifier != identifier) )) (compound_statement "{\n    FUN_00338a50();\n  }" { (expression_statement "FUN_00338a50();" (call_expression "FUN_00338a50()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "(**(code **)(*param_1 + 0x28))(&local_58,param_1);" (call_expression "(**(code **)(*param_1 + 0x28))(&local_58,param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x28))" ( (pointer_expression "**(code **)(*param_1 + 0x28)" * (pointer_expression "*(code **)(*param_1 + 0x28)" * (cast_expression "(code **)(*param_1 + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x28)" ( (binary_expression "*param_1 + 0x28" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(&local_58,param_1)" ( (pointer_expression "&local_58" & identifier) , identifier ))) ;) (expression_statement "lVar4 = local_50;" (assignment_expression "lVar4 = local_50" identifier = identifier) ;) (if_statement "if (0x1ffffffffffffffe < local_50 + 1U) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 0036fb47 to 0036fb4b has its CatchHandler @ 0036fb45 */\n    FUN_003384c0();\n  }" if (parenthesized_expression "(0x1ffffffffffffffe < local_50 + 1U)" ( (binary_expression "0x1ffffffffffffffe < local_50 + 1U" number_literal < (binary_expression "local_50 + 1U" identifier + number_literal)) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 0036fb47 to 0036fb4b has its CatchHandler @ 0036fb45 */\n    FUN_003384c0();\n  }" { comment comment (expression_statement "FUN_003384c0();" (call_expression "FUN_003384c0()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "lVar2 = (local_50 + 1U) * 4;" (assignment_expression "lVar2 = (local_50 + 1U) * 4" identifier = (binary_expression "(local_50 + 1U) * 4" (parenthesized_expression "(local_50 + 1U)" ( (binary_expression "local_50 + 1U" identifier + number_literal) )) * number_literal)) ;) comment (expression_statement "lVar3 = thunk_FUN_00337280(lVar2);" (assignment_expression "lVar3 = thunk_FUN_00337280(lVar2)" identifier = (call_expression "thunk_FUN_00337280(lVar2)" identifier (argument_list "(lVar2)" ( identifier )))) ;) (expression_statement "FUN_0033e110(&local_58,lVar3,lVar4,0);" (call_expression "FUN_0033e110(&local_58,lVar3,lVar4,0)" identifier (argument_list "(&local_58,lVar3,lVar4,0)" ( (pointer_expression "&local_58" & identifier) , identifier , identifier , number_literal ))) ;) (expression_statement "*(long *)(param_2 + 0x28) = lVar3;" (assignment_expression "*(long *)(param_2 + 0x28) = lVar3" (pointer_expression "*(long *)(param_2 + 0x28)" * (cast_expression "(long *)(param_2 + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x28)" ( (binary_expression "param_2 + 0x28" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(lVar3 + -4 + lVar2) = 0;" (assignment_expression "*(undefined4 *)(lVar3 + -4 + lVar2) = 0" (pointer_expression "*(undefined4 *)(lVar3 + -4 + lVar2)" * (cast_expression "(undefined4 *)(lVar3 + -4 + lVar2)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + -4 + lVar2)" ( (binary_expression "lVar3 + -4 + lVar2" (binary_expression "lVar3 + -4" identifier + number_literal) + identifier) )))) = number_literal) ;) (expression_statement "*(long *)(param_2 + 0x30) = lVar4;" (assignment_expression "*(long *)(param_2 + 0x30) = lVar4" (pointer_expression "*(long *)(param_2 + 0x30)" * (cast_expression "(long *)(param_2 + 0x30)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x30)" ( (binary_expression "param_2 + 0x30" identifier + number_literal) )))) = identifier) ;) (if_statement "if (local_58 != local_48) {\n    FUN_00338a50();\n  }" if (parenthesized_expression "(local_58 != local_48)" ( (binary_expression "local_58 != local_48" identifier != identifier) )) (compound_statement "{\n    FUN_00338a50();\n  }" { (expression_statement "FUN_00338a50();" (call_expression "FUN_00338a50()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "(**(code **)(*param_1 + 0x30))(&local_58,param_1);" (call_expression "(**(code **)(*param_1 + 0x30))(&local_58,param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x30))" ( (pointer_expression "**(code **)(*param_1 + 0x30)" * (pointer_expression "*(code **)(*param_1 + 0x30)" * (cast_expression "(code **)(*param_1 + 0x30)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x30)" ( (binary_expression "*param_1 + 0x30" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(&local_58,param_1)" ( (pointer_expression "&local_58" & identifier) , identifier ))) ;) (if_statement "if (local_50 + 1U < 0x1fffffffffffffff) {\n    lVar2 = (local_50 + 1U) * 4;\n                    /* try { // try from 0036faf4 to 0036fb0b has its CatchHandler @ 0036fb43 */\n    lVar4 = thunk_FUN_00337280(lVar2);\n    FUN_0033e110(&local_58,lVar4,local_50,0);\n    *(long *)(param_2 + 0x38) = lVar4;\n    *(undefined4 *)(lVar4 + -4 + lVar2) = 0;\n    *(long *)(param_2 + 0x40) = local_50;\n    if (local_58 != local_48) {\n      FUN_00338a50();\n    }\n    return;\n  }" if (parenthesized_expression "(local_50 + 1U < 0x1fffffffffffffff)" ( (binary_expression "local_50 + 1U < 0x1fffffffffffffff" (binary_expression "local_50 + 1U" identifier + number_literal) < number_literal) )) (compound_statement "{\n    lVar2 = (local_50 + 1U) * 4;\n                    /* try { // try from 0036faf4 to 0036fb0b has its CatchHandler @ 0036fb43 */\n    lVar4 = thunk_FUN_00337280(lVar2);\n    FUN_0033e110(&local_58,lVar4,local_50,0);\n    *(long *)(param_2 + 0x38) = lVar4;\n    *(undefined4 *)(lVar4 + -4 + lVar2) = 0;\n    *(long *)(param_2 + 0x40) = local_50;\n    if (local_58 != local_48) {\n      FUN_00338a50();\n    }\n    return;\n  }" { (expression_statement "lVar2 = (local_50 + 1U) * 4;" (assignment_expression "lVar2 = (local_50 + 1U) * 4" identifier = (binary_expression "(local_50 + 1U) * 4" (parenthesized_expression "(local_50 + 1U)" ( (binary_expression "local_50 + 1U" identifier + number_literal) )) * number_literal)) ;) comment (expression_statement "lVar4 = thunk_FUN_00337280(lVar2);" (assignment_expression "lVar4 = thunk_FUN_00337280(lVar2)" identifier = (call_expression "thunk_FUN_00337280(lVar2)" identifier (argument_list "(lVar2)" ( identifier )))) ;) (expression_statement "FUN_0033e110(&local_58,lVar4,local_50,0);" (call_expression "FUN_0033e110(&local_58,lVar4,local_50,0)" identifier (argument_list "(&local_58,lVar4,local_50,0)" ( (pointer_expression "&local_58" & identifier) , identifier , identifier , number_literal ))) ;) (expression_statement "*(long *)(param_2 + 0x38) = lVar4;" (assignment_expression "*(long *)(param_2 + 0x38) = lVar4" (pointer_expression "*(long *)(param_2 + 0x38)" * (cast_expression "(long *)(param_2 + 0x38)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x38)" ( (binary_expression "param_2 + 0x38" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(lVar4 + -4 + lVar2) = 0;" (assignment_expression "*(undefined4 *)(lVar4 + -4 + lVar2) = 0" (pointer_expression "*(undefined4 *)(lVar4 + -4 + lVar2)" * (cast_expression "(undefined4 *)(lVar4 + -4 + lVar2)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar4 + -4 + lVar2)" ( (binary_expression "lVar4 + -4 + lVar2" (binary_expression "lVar4 + -4" identifier + number_literal) + identifier) )))) = number_literal) ;) (expression_statement "*(long *)(param_2 + 0x40) = local_50;" (assignment_expression "*(long *)(param_2 + 0x40) = local_50" (pointer_expression "*(long *)(param_2 + 0x40)" * (cast_expression "(long *)(param_2 + 0x40)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x40)" ( (binary_expression "param_2 + 0x40" identifier + number_literal) )))) = identifier) ;) (if_statement "if (local_58 != local_48) {\n      FUN_00338a50();\n    }" if (parenthesized_expression "(local_58 != local_48)" ( (binary_expression "local_58 != local_48" identifier != identifier) )) (compound_statement "{\n      FUN_00338a50();\n    }" { (expression_statement "FUN_00338a50();" (call_expression "FUN_00338a50()" identifier (argument_list "()" ( ))) ;) })) (return_statement "return;" return ;) })) comment comment (expression_statement "FUN_003384c0();" (call_expression "FUN_003384c0()" identifier (argument_list "()" ( ))) ;) })))
(translation_unit "/* void std::__facet_shims::__numpunct_fill_cache<wchar_t>(std::integral_constant<bool, true>,\n   std::locale::facet const*, std::__numpunct_cache<wchar_t>*) */\n\nvoid std::__facet_shims::__numpunct_fill_cache<wchar_t>(long *param_1,long param_2)\n\n{\n  long lVar1;\n  ulong uVar2;\n  undefined4 uVar3;\n  char *pcVar4;\n  wchar_t *pwVar5;\n  undefined1 *local_58;\n  ulong local_50;\n  undefined1 local_48 [24];\n  \n  uVar3 = (**(code **)(*param_1 + 0x10))();\n  *(undefined4 *)(param_2 + 0x48) = uVar3;\n  uVar3 = (**(code **)(*param_1 + 0x18))(param_1);\n  *(undefined1 *)(param_2 + 0x148) = 1;\n  *(undefined4 *)(param_2 + 0x4c) = uVar3;\n  lVar1 = *param_1;\n  *(undefined8 *)(param_2 + 0x10) = 0;\n  *(undefined8 *)(param_2 + 0x28) = 0;\n  *(undefined8 *)(param_2 + 0x38) = 0;\n  (**(code **)(lVar1 + 0x20))(&local_58,param_1);\n  uVar2 = local_50;\n                    /* try { // try from 0036fa22 to 0036fa39 has its CatchHandler @ 0036fb3e */\n  pcVar4 = (char *)operator_new__(local_50 + 1);\n  std::string::copy((string *)&local_58,pcVar4,uVar2,0);\n  pcVar4[uVar2] = '\0';\n  *(char **)(param_2 + 0x10) = pcVar4;\n  *(ulong *)(param_2 + 0x18) = uVar2;\n  if (local_58 != local_48) {\n    operator_delete(local_58);\n  }\n  (**(code **)(*param_1 + 0x28))(&local_58,param_1);\n  uVar2 = local_50;\n  if (0x1ffffffffffffffe < local_50 + 1) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 0036fb47 to 0036fb4b has its CatchHandler @ 0036fb45 */\n    __cxa_throw_bad_array_new_length();\n  }\n                    /* try { // try from 0036fa8d to 0036faa4 has its CatchHandler @ 0036fb45 */\n  pwVar5 = (wchar_t *)operator_new__((local_50 + 1) * 4);\n  std::wstring::copy((wstring *)&local_58,pwVar5,uVar2,0);\n  *(wchar_t **)(param_2 + 0x28) = pwVar5;\n  pwVar5[uVar2] = L'\0';\n  *(ulong *)(param_2 + 0x30) = uVar2;\n  if (local_58 != local_48) {\n    operator_delete(local_58);\n  }\n  (**(code **)(*param_1 + 0x30))(&local_58,param_1);\n  if (local_50 + 1 < 0x1fffffffffffffff) {\n                    /* try { // try from 0036faf4 to 0036fb0b has its CatchHandler @ 0036fb43 */\n    pwVar5 = (wchar_t *)operator_new__((local_50 + 1) * 4);\n    std::wstring::copy((wstring *)&local_58,pwVar5,local_50,0);\n    *(wchar_t **)(param_2 + 0x38) = pwVar5;\n    pwVar5[local_50] = L'\0';\n    *(ulong *)(param_2 + 0x40) = local_50;\n    if (local_58 != local_48) {\n      operator_delete(local_58);\n    }\n    return;\n  }\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 0036fb4c to 0036fb50 has its CatchHandler @ 0036fb43 */\n  __cxa_throw_bad_array_new_length();\n}\n\n" comment (declaration "void std::__facet_shims::__numpunct_fill_cache<wchar_t>(long *param_1,long param_2)\n\n{\n  long lVar1;" primitive_type (ERROR "std::__facet_shims::__numpunct_fill_cache<wchar_t>(long" identifier : : identifier : : identifier < identifier > ( long) (pointer_declarator "*param_1" * identifier) , (ERROR "long param_2)\n\n{\n  long" identifier identifier ) { long) identifier ;) (declaration "ulong uVar2;" type_identifier identifier ;) (declaration "undefined4 uVar3;" type_identifier identifier ;) (declaration "char *pcVar4;" primitive_type (pointer_declarator "*pcVar4" * identifier) ;) (declaration "wchar_t *pwVar5;" type_identifier (pointer_declarator "*pwVar5" * identifier) ;) (declaration "undefined1 *local_58;" type_identifier (pointer_declarator "*local_58" * identifier) ;) (declaration "ulong local_50;" type_identifier identifier ;) (declaration "undefined1 local_48 [24];" type_identifier (array_declarator "local_48 [24]" identifier [ number_literal ]) ;) (expression_statement "uVar3 = (**(code **)(*param_1 + 0x10))();" (assignment_expression "uVar3 = (**(code **)(*param_1 + 0x10))()" identifier = (call_expression "(**(code **)(*param_1 + 0x10))()" (parenthesized_expression "(**(code **)(*param_1 + 0x10))" ( (pointer_expression "**(code **)(*param_1 + 0x10)" * (pointer_expression "*(code **)(*param_1 + 0x10)" * (cast_expression "(code **)(*param_1 + 0x10)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x10)" ( (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "()" ( )))) ;) (expression_statement "*(undefined4 *)(param_2 + 0x48) = uVar3;" (assignment_expression "*(undefined4 *)(param_2 + 0x48) = uVar3" (pointer_expression "*(undefined4 *)(param_2 + 0x48)" * (cast_expression "(undefined4 *)(param_2 + 0x48)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x48)" ( (binary_expression "param_2 + 0x48" identifier + number_literal) )))) = identifier) ;) (expression_statement "uVar3 = (**(code **)(*param_1 + 0x18))(param_1);" (assignment_expression "uVar3 = (**(code **)(*param_1 + 0x18))(param_1)" identifier = (call_expression "(**(code **)(*param_1 + 0x18))(param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x18))" ( (pointer_expression "**(code **)(*param_1 + 0x18)" * (pointer_expression "*(code **)(*param_1 + 0x18)" * (cast_expression "(code **)(*param_1 + 0x18)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x18)" ( (binary_expression "*param_1 + 0x18" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(param_1)" ( identifier )))) ;) (expression_statement "*(undefined1 *)(param_2 + 0x148) = 1;" (assignment_expression "*(undefined1 *)(param_2 + 0x148) = 1" (pointer_expression "*(undefined1 *)(param_2 + 0x148)" * (cast_expression "(undefined1 *)(param_2 + 0x148)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x148)" ( (binary_expression "param_2 + 0x148" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined4 *)(param_2 + 0x4c) = uVar3;" (assignment_expression "*(undefined4 *)(param_2 + 0x4c) = uVar3" (pointer_expression "*(undefined4 *)(param_2 + 0x4c)" * (cast_expression "(undefined4 *)(param_2 + 0x4c)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x4c)" ( (binary_expression "param_2 + 0x4c" identifier + number_literal) )))) = identifier) ;) (expression_statement "lVar1 = *param_1;" (assignment_expression "lVar1 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "*(undefined8 *)(param_2 + 0x10) = 0;" (assignment_expression "*(undefined8 *)(param_2 + 0x10) = 0" (pointer_expression "*(undefined8 *)(param_2 + 0x10)" * (cast_expression "(undefined8 *)(param_2 + 0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x10)" ( (binary_expression "param_2 + 0x10" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined8 *)(param_2 + 0x28) = 0;" (assignment_expression "*(undefined8 *)(param_2 + 0x28) = 0" (pointer_expression "*(undefined8 *)(param_2 + 0x28)" * (cast_expression "(undefined8 *)(param_2 + 0x28)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x28)" ( (binary_expression "param_2 + 0x28" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined8 *)(param_2 + 0x38) = 0;" (assignment_expression "*(undefined8 *)(param_2 + 0x38) = 0" (pointer_expression "*(undefined8 *)(param_2 + 0x38)" * (cast_expression "(undefined8 *)(param_2 + 0x38)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x38)" ( (binary_expression "param_2 + 0x38" identifier + number_literal) )))) = number_literal) ;) (expression_statement "(**(code **)(lVar1 + 0x20))(&local_58,param_1);" (call_expression "(**(code **)(lVar1 + 0x20))(&local_58,param_1)" (parenthesized_expression "(**(code **)(lVar1 + 0x20))" ( (pointer_expression "**(code **)(lVar1 + 0x20)" * (pointer_expression "*(code **)(lVar1 + 0x20)" * (cast_expression "(code **)(lVar1 + 0x20)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar1 + 0x20)" ( (binary_expression "lVar1 + 0x20" identifier + number_literal) ))))) )) (argument_list "(&local_58,param_1)" ( (pointer_expression "&local_58" & identifier) , identifier ))) ;) (expression_statement "uVar2 = local_50;" (assignment_expression "uVar2 = local_50" identifier = identifier) ;) comment (expression_statement "pcVar4 = (char *)operator_new__(local_50 + 1);" (assignment_expression "pcVar4 = (char *)operator_new__(local_50 + 1)" identifier = (cast_expression "(char *)operator_new__(local_50 + 1)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "operator_new__(local_50 + 1)" identifier (argument_list "(local_50 + 1)" ( (binary_expression "local_50 + 1" identifier + number_literal) ))))) ;) (labeled_statement "std::string::copy((string *)&local_58,pcVar4,uVar2,0);" statement_identifier : (ERROR ":" :) (labeled_statement "string::copy((string *)&local_58,pcVar4,uVar2,0);" statement_identifier : (ERROR ":" :) (expression_statement "copy((string *)&local_58,pcVar4,uVar2,0);" (call_expression "copy((string *)&local_58,pcVar4,uVar2,0)" identifier (argument_list "((string *)&local_58,pcVar4,uVar2,0)" ( (cast_expression "(string *)&local_58" ( (type_descriptor "string *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&local_58" & identifier)) , identifier , identifier , number_literal ))) ;))) (expression_statement "pcVar4[uVar2] = '\0';" (assignment_expression "pcVar4[uVar2] = '\0'" (subscript_expression "pcVar4[uVar2]" identifier [ identifier ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "*(char **)(param_2 + 0x10) = pcVar4;" (assignment_expression "*(char **)(param_2 + 0x10) = pcVar4" (pointer_expression "*(char **)(param_2 + 0x10)" * (cast_expression "(char **)(param_2 + 0x10)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_2 + 0x10)" ( (binary_expression "param_2 + 0x10" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(ulong *)(param_2 + 0x18) = uVar2;" (assignment_expression "*(ulong *)(param_2 + 0x18) = uVar2" (pointer_expression "*(ulong *)(param_2 + 0x18)" * (cast_expression "(ulong *)(param_2 + 0x18)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x18)" ( (binary_expression "param_2 + 0x18" identifier + number_literal) )))) = identifier) ;) (if_statement "if (local_58 != local_48) {\n    operator_delete(local_58);\n  }" if (parenthesized_expression "(local_58 != local_48)" ( (binary_expression "local_58 != local_48" identifier != identifier) )) (compound_statement "{\n    operator_delete(local_58);\n  }" { (expression_statement "operator_delete(local_58);" (call_expression "operator_delete(local_58)" identifier (argument_list "(local_58)" ( identifier ))) ;) })) (expression_statement "(**(code **)(*param_1 + 0x28))(&local_58,param_1);" (call_expression "(**(code **)(*param_1 + 0x28))(&local_58,param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x28))" ( (pointer_expression "**(code **)(*param_1 + 0x28)" * (pointer_expression "*(code **)(*param_1 + 0x28)" * (cast_expression "(code **)(*param_1 + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x28)" ( (binary_expression "*param_1 + 0x28" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(&local_58,param_1)" ( (pointer_expression "&local_58" & identifier) , identifier ))) ;) (expression_statement "uVar2 = local_50;" (assignment_expression "uVar2 = local_50" identifier = identifier) ;) (if_statement "if (0x1ffffffffffffffe < local_50 + 1) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 0036fb47 to 0036fb4b has its CatchHandler @ 0036fb45 */\n    __cxa_throw_bad_array_new_length();\n  }" if (parenthesized_expression "(0x1ffffffffffffffe < local_50 + 1)" ( (binary_expression "0x1ffffffffffffffe < local_50 + 1" number_literal < (binary_expression "local_50 + 1" identifier + number_literal)) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 0036fb47 to 0036fb4b has its CatchHandler @ 0036fb45 */\n    __cxa_throw_bad_array_new_length();\n  }" { comment comment (expression_statement "__cxa_throw_bad_array_new_length();" (call_expression "__cxa_throw_bad_array_new_length()" identifier (argument_list "()" ( ))) ;) })) comment (expression_statement "pwVar5 = (wchar_t *)operator_new__((local_50 + 1) * 4);" (assignment_expression "pwVar5 = (wchar_t *)operator_new__((local_50 + 1) * 4)" identifier = (cast_expression "(wchar_t *)operator_new__((local_50 + 1) * 4)" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "operator_new__((local_50 + 1) * 4)" identifier (argument_list "((local_50 + 1) * 4)" ( (binary_expression "(local_50 + 1) * 4" (parenthesized_expression "(local_50 + 1)" ( (binary_expression "local_50 + 1" identifier + number_literal) )) * number_literal) ))))) ;) (labeled_statement "std::wstring::copy((wstring *)&local_58,pwVar5,uVar2,0);" statement_identifier : (ERROR ":" :) (labeled_statement "wstring::copy((wstring *)&local_58,pwVar5,uVar2,0);" statement_identifier : (ERROR ":" :) (expression_statement "copy((wstring *)&local_58,pwVar5,uVar2,0);" (call_expression "copy((wstring *)&local_58,pwVar5,uVar2,0)" identifier (argument_list "((wstring *)&local_58,pwVar5,uVar2,0)" ( (cast_expression "(wstring *)&local_58" ( (type_descriptor "wstring *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&local_58" & identifier)) , identifier , identifier , number_literal ))) ;))) (expression_statement "*(wchar_t **)(param_2 + 0x28) = pwVar5;" (assignment_expression "*(wchar_t **)(param_2 + 0x28) = pwVar5" (pointer_expression "*(wchar_t **)(param_2 + 0x28)" * (cast_expression "(wchar_t **)(param_2 + 0x28)" ( (type_descriptor "wchar_t **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_2 + 0x28)" ( (binary_expression "param_2 + 0x28" identifier + number_literal) )))) = identifier) ;) (expression_statement "pwVar5[uVar2] = L'\0';" (assignment_expression "pwVar5[uVar2] = L'\0'" (subscript_expression "pwVar5[uVar2]" identifier [ identifier ]) = (char_literal "L'\0'" L' escape_sequence ')) ;) (expression_statement "*(ulong *)(param_2 + 0x30) = uVar2;" (assignment_expression "*(ulong *)(param_2 + 0x30) = uVar2" (pointer_expression "*(ulong *)(param_2 + 0x30)" * (cast_expression "(ulong *)(param_2 + 0x30)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x30)" ( (binary_expression "param_2 + 0x30" identifier + number_literal) )))) = identifier) ;) (if_statement "if (local_58 != local_48) {\n    operator_delete(local_58);\n  }" if (parenthesized_expression "(local_58 != local_48)" ( (binary_expression "local_58 != local_48" identifier != identifier) )) (compound_statement "{\n    operator_delete(local_58);\n  }" { (expression_statement "operator_delete(local_58);" (call_expression "operator_delete(local_58)" identifier (argument_list "(local_58)" ( identifier ))) ;) })) (expression_statement "(**(code **)(*param_1 + 0x30))(&local_58,param_1);" (call_expression "(**(code **)(*param_1 + 0x30))(&local_58,param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x30))" ( (pointer_expression "**(code **)(*param_1 + 0x30)" * (pointer_expression "*(code **)(*param_1 + 0x30)" * (cast_expression "(code **)(*param_1 + 0x30)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x30)" ( (binary_expression "*param_1 + 0x30" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(&local_58,param_1)" ( (pointer_expression "&local_58" & identifier) , identifier ))) ;) (if_statement "if (local_50 + 1 < 0x1fffffffffffffff) {\n                    /* try { // try from 0036faf4 to 0036fb0b has its CatchHandler @ 0036fb43 */\n    pwVar5 = (wchar_t *)operator_new__((local_50 + 1) * 4);\n    std::wstring::copy((wstring *)&local_58,pwVar5,local_50,0);\n    *(wchar_t **)(param_2 + 0x38) = pwVar5;\n    pwVar5[local_50] = L'\0';\n    *(ulong *)(param_2 + 0x40) = local_50;\n    if (local_58 != local_48) {\n      operator_delete(local_58);\n    }\n    return;\n  }" if (parenthesized_expression "(local_50 + 1 < 0x1fffffffffffffff)" ( (binary_expression "local_50 + 1 < 0x1fffffffffffffff" (binary_expression "local_50 + 1" identifier + number_literal) < number_literal) )) (compound_statement "{\n                    /* try { // try from 0036faf4 to 0036fb0b has its CatchHandler @ 0036fb43 */\n    pwVar5 = (wchar_t *)operator_new__((local_50 + 1) * 4);\n    std::wstring::copy((wstring *)&local_58,pwVar5,local_50,0);\n    *(wchar_t **)(param_2 + 0x38) = pwVar5;\n    pwVar5[local_50] = L'\0';\n    *(ulong *)(param_2 + 0x40) = local_50;\n    if (local_58 != local_48) {\n      operator_delete(local_58);\n    }\n    return;\n  }" { comment (expression_statement "pwVar5 = (wchar_t *)operator_new__((local_50 + 1) * 4);" (assignment_expression "pwVar5 = (wchar_t *)operator_new__((local_50 + 1) * 4)" identifier = (cast_expression "(wchar_t *)operator_new__((local_50 + 1) * 4)" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "operator_new__((local_50 + 1) * 4)" identifier (argument_list "((local_50 + 1) * 4)" ( (binary_expression "(local_50 + 1) * 4" (parenthesized_expression "(local_50 + 1)" ( (binary_expression "local_50 + 1" identifier + number_literal) )) * number_literal) ))))) ;) (labeled_statement "std::wstring::copy((wstring *)&local_58,pwVar5,local_50,0);" statement_identifier : (ERROR ":" :) (labeled_statement "wstring::copy((wstring *)&local_58,pwVar5,local_50,0);" statement_identifier : (ERROR ":" :) (expression_statement "copy((wstring *)&local_58,pwVar5,local_50,0);" (call_expression "copy((wstring *)&local_58,pwVar5,local_50,0)" identifier (argument_list "((wstring *)&local_58,pwVar5,local_50,0)" ( (cast_expression "(wstring *)&local_58" ( (type_descriptor "wstring *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&local_58" & identifier)) , identifier , identifier , number_literal ))) ;))) (expression_statement "*(wchar_t **)(param_2 + 0x38) = pwVar5;" (assignment_expression "*(wchar_t **)(param_2 + 0x38) = pwVar5" (pointer_expression "*(wchar_t **)(param_2 + 0x38)" * (cast_expression "(wchar_t **)(param_2 + 0x38)" ( (type_descriptor "wchar_t **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_2 + 0x38)" ( (binary_expression "param_2 + 0x38" identifier + number_literal) )))) = identifier) ;) (expression_statement "pwVar5[local_50] = L'\0';" (assignment_expression "pwVar5[local_50] = L'\0'" (subscript_expression "pwVar5[local_50]" identifier [ identifier ]) = (char_literal "L'\0'" L' escape_sequence ')) ;) (expression_statement "*(ulong *)(param_2 + 0x40) = local_50;" (assignment_expression "*(ulong *)(param_2 + 0x40) = local_50" (pointer_expression "*(ulong *)(param_2 + 0x40)" * (cast_expression "(ulong *)(param_2 + 0x40)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x40)" ( (binary_expression "param_2 + 0x40" identifier + number_literal) )))) = identifier) ;) (if_statement "if (local_58 != local_48) {\n      operator_delete(local_58);\n    }" if (parenthesized_expression "(local_58 != local_48)" ( (binary_expression "local_58 != local_48" identifier != identifier) )) (compound_statement "{\n      operator_delete(local_58);\n    }" { (expression_statement "operator_delete(local_58);" (call_expression "operator_delete(local_58)" identifier (argument_list "(local_58)" ( identifier ))) ;) })) (return_statement "return;" return ;) })) comment comment (expression_statement "__cxa_throw_bad_array_new_length();" (call_expression "__cxa_throw_bad_array_new_length()" identifier (argument_list "()" ( ))) ;) (ERROR "}" }))
(translation_unit "void FUN_0036f9c0(long *param_1,long param_2)\n\n{\n  undefined4 uVar1;\n  long lVar2;\n  long lVar3;\n  long lVar4;\n  undefined1 *local_58;\n  long local_50;\n  undefined1 local_48 [24];\n  \n  uVar1 = (**(code **)(*param_1 + 0x10))();\n  *(undefined4 *)(param_2 + 0x48) = uVar1;\n  uVar1 = (**(code **)(*param_1 + 0x18))(param_1);\n  *(undefined1 *)(param_2 + 0x148) = 1;\n  *(undefined4 *)(param_2 + 0x4c) = uVar1;\n  lVar4 = *param_1;\n  *(undefined8 *)(param_2 + 0x10) = 0;\n  *(undefined8 *)(param_2 + 0x28) = 0;\n  *(undefined8 *)(param_2 + 0x38) = 0;\n  (**(code **)(lVar4 + 0x20))(&local_58,param_1);\n  lVar4 = local_50;\n                    \n  lVar2 = thunk_FUN_00337280(local_50 + 1);\n  FUN_00340ef0(&local_58,lVar2,lVar4,0);\n  *(undefined1 *)(lVar2 + lVar4) = 0;\n  *(long *)(param_2 + 0x10) = lVar2;\n  *(long *)(param_2 + 0x18) = lVar4;\n  if (local_58 != local_48) {\n    FUN_00338a50();\n  }\n  (**(code **)(*param_1 + 0x28))(&local_58,param_1);\n  lVar4 = local_50;\n  if (0x1ffffffffffffffe < local_50 + 1U) {\n                    \n                    \n    FUN_003384c0();\n  }\n  lVar2 = (local_50 + 1U) * 4;\n                    \n  lVar3 = thunk_FUN_00337280(lVar2);\n  FUN_0033e110(&local_58,lVar3,lVar4,0);\n  *(long *)(param_2 + 0x28) = lVar3;\n  *(undefined4 *)(lVar3 + -4 + lVar2) = 0;\n  *(long *)(param_2 + 0x30) = lVar4;\n  if (local_58 != local_48) {\n    FUN_00338a50();\n  }\n  (**(code **)(*param_1 + 0x30))(&local_58,param_1);\n  if (local_50 + 1U < 0x1fffffffffffffff) {\n    lVar2 = (local_50 + 1U) * 4;\n                    \n    lVar4 = thunk_FUN_00337280(lVar2);\n    FUN_0033e110(&local_58,lVar4,local_50,0);\n    *(long *)(param_2 + 0x38) = lVar4;\n    *(undefined4 *)(lVar4 + -4 + lVar2) = 0;\n    *(long *)(param_2 + 0x40) = local_50;\n    if (local_58 != local_48) {\n      FUN_00338a50();\n    }\n    return;\n  }\n                    \n                    \n  FUN_003384c0();\n}\n\n" (function_definition "void FUN_0036f9c0(long *param_1,long param_2)\n\n{\n  undefined4 uVar1;\n  long lVar2;\n  long lVar3;\n  long lVar4;\n  undefined1 *local_58;\n  long local_50;\n  undefined1 local_48 [24];\n  \n  uVar1 = (**(code **)(*param_1 + 0x10))();\n  *(undefined4 *)(param_2 + 0x48) = uVar1;\n  uVar1 = (**(code **)(*param_1 + 0x18))(param_1);\n  *(undefined1 *)(param_2 + 0x148) = 1;\n  *(undefined4 *)(param_2 + 0x4c) = uVar1;\n  lVar4 = *param_1;\n  *(undefined8 *)(param_2 + 0x10) = 0;\n  *(undefined8 *)(param_2 + 0x28) = 0;\n  *(undefined8 *)(param_2 + 0x38) = 0;\n  (**(code **)(lVar4 + 0x20))(&local_58,param_1);\n  lVar4 = local_50;\n                    \n  lVar2 = thunk_FUN_00337280(local_50 + 1);\n  FUN_00340ef0(&local_58,lVar2,lVar4,0);\n  *(undefined1 *)(lVar2 + lVar4) = 0;\n  *(long *)(param_2 + 0x10) = lVar2;\n  *(long *)(param_2 + 0x18) = lVar4;\n  if (local_58 != local_48) {\n    FUN_00338a50();\n  }\n  (**(code **)(*param_1 + 0x28))(&local_58,param_1);\n  lVar4 = local_50;\n  if (0x1ffffffffffffffe < local_50 + 1U) {\n                    \n                    \n    FUN_003384c0();\n  }\n  lVar2 = (local_50 + 1U) * 4;\n                    \n  lVar3 = thunk_FUN_00337280(lVar2);\n  FUN_0033e110(&local_58,lVar3,lVar4,0);\n  *(long *)(param_2 + 0x28) = lVar3;\n  *(undefined4 *)(lVar3 + -4 + lVar2) = 0;\n  *(long *)(param_2 + 0x30) = lVar4;\n  if (local_58 != local_48) {\n    FUN_00338a50();\n  }\n  (**(code **)(*param_1 + 0x30))(&local_58,param_1);\n  if (local_50 + 1U < 0x1fffffffffffffff) {\n    lVar2 = (local_50 + 1U) * 4;\n                    \n    lVar4 = thunk_FUN_00337280(lVar2);\n    FUN_0033e110(&local_58,lVar4,local_50,0);\n    *(long *)(param_2 + 0x38) = lVar4;\n    *(undefined4 *)(lVar4 + -4 + lVar2) = 0;\n    *(long *)(param_2 + 0x40) = local_50;\n    if (local_58 != local_48) {\n      FUN_00338a50();\n    }\n    return;\n  }\n                    \n                    \n  FUN_003384c0();\n}" primitive_type (function_declarator "FUN_0036f9c0(long *param_1,long param_2)" identifier (parameter_list "(long *param_1,long param_2)" ( (parameter_declaration "long *param_1" (sized_type_specifier "long" long) (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "long param_2" (sized_type_specifier "long" long) identifier) ))) (compound_statement "{\n  undefined4 uVar1;\n  long lVar2;\n  long lVar3;\n  long lVar4;\n  undefined1 *local_58;\n  long local_50;\n  undefined1 local_48 [24];\n  \n  uVar1 = (**(code **)(*param_1 + 0x10))();\n  *(undefined4 *)(param_2 + 0x48) = uVar1;\n  uVar1 = (**(code **)(*param_1 + 0x18))(param_1);\n  *(undefined1 *)(param_2 + 0x148) = 1;\n  *(undefined4 *)(param_2 + 0x4c) = uVar1;\n  lVar4 = *param_1;\n  *(undefined8 *)(param_2 + 0x10) = 0;\n  *(undefined8 *)(param_2 + 0x28) = 0;\n  *(undefined8 *)(param_2 + 0x38) = 0;\n  (**(code **)(lVar4 + 0x20))(&local_58,param_1);\n  lVar4 = local_50;\n                    \n  lVar2 = thunk_FUN_00337280(local_50 + 1);\n  FUN_00340ef0(&local_58,lVar2,lVar4,0);\n  *(undefined1 *)(lVar2 + lVar4) = 0;\n  *(long *)(param_2 + 0x10) = lVar2;\n  *(long *)(param_2 + 0x18) = lVar4;\n  if (local_58 != local_48) {\n    FUN_00338a50();\n  }\n  (**(code **)(*param_1 + 0x28))(&local_58,param_1);\n  lVar4 = local_50;\n  if (0x1ffffffffffffffe < local_50 + 1U) {\n                    \n                    \n    FUN_003384c0();\n  }\n  lVar2 = (local_50 + 1U) * 4;\n                    \n  lVar3 = thunk_FUN_00337280(lVar2);\n  FUN_0033e110(&local_58,lVar3,lVar4,0);\n  *(long *)(param_2 + 0x28) = lVar3;\n  *(undefined4 *)(lVar3 + -4 + lVar2) = 0;\n  *(long *)(param_2 + 0x30) = lVar4;\n  if (local_58 != local_48) {\n    FUN_00338a50();\n  }\n  (**(code **)(*param_1 + 0x30))(&local_58,param_1);\n  if (local_50 + 1U < 0x1fffffffffffffff) {\n    lVar2 = (local_50 + 1U) * 4;\n                    \n    lVar4 = thunk_FUN_00337280(lVar2);\n    FUN_0033e110(&local_58,lVar4,local_50,0);\n    *(long *)(param_2 + 0x38) = lVar4;\n    *(undefined4 *)(lVar4 + -4 + lVar2) = 0;\n    *(long *)(param_2 + 0x40) = local_50;\n    if (local_58 != local_48) {\n      FUN_00338a50();\n    }\n    return;\n  }\n                    \n                    \n  FUN_003384c0();\n}" { (declaration "undefined4 uVar1;" type_identifier identifier ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar4;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined1 *local_58;" type_identifier (pointer_declarator "*local_58" * identifier) ;) (declaration "long local_50;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined1 local_48 [24];" type_identifier (array_declarator "local_48 [24]" identifier [ number_literal ]) ;) (expression_statement "uVar1 = (**(code **)(*param_1 + 0x10))();" (assignment_expression "uVar1 = (**(code **)(*param_1 + 0x10))()" identifier = (call_expression "(**(code **)(*param_1 + 0x10))()" (parenthesized_expression "(**(code **)(*param_1 + 0x10))" ( (pointer_expression "**(code **)(*param_1 + 0x10)" * (pointer_expression "*(code **)(*param_1 + 0x10)" * (cast_expression "(code **)(*param_1 + 0x10)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x10)" ( (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "()" ( )))) ;) (expression_statement "*(undefined4 *)(param_2 + 0x48) = uVar1;" (assignment_expression "*(undefined4 *)(param_2 + 0x48) = uVar1" (pointer_expression "*(undefined4 *)(param_2 + 0x48)" * (cast_expression "(undefined4 *)(param_2 + 0x48)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x48)" ( (binary_expression "param_2 + 0x48" identifier + number_literal) )))) = identifier) ;) (expression_statement "uVar1 = (**(code **)(*param_1 + 0x18))(param_1);" (assignment_expression "uVar1 = (**(code **)(*param_1 + 0x18))(param_1)" identifier = (call_expression "(**(code **)(*param_1 + 0x18))(param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x18))" ( (pointer_expression "**(code **)(*param_1 + 0x18)" * (pointer_expression "*(code **)(*param_1 + 0x18)" * (cast_expression "(code **)(*param_1 + 0x18)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x18)" ( (binary_expression "*param_1 + 0x18" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(param_1)" ( identifier )))) ;) (expression_statement "*(undefined1 *)(param_2 + 0x148) = 1;" (assignment_expression "*(undefined1 *)(param_2 + 0x148) = 1" (pointer_expression "*(undefined1 *)(param_2 + 0x148)" * (cast_expression "(undefined1 *)(param_2 + 0x148)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x148)" ( (binary_expression "param_2 + 0x148" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined4 *)(param_2 + 0x4c) = uVar1;" (assignment_expression "*(undefined4 *)(param_2 + 0x4c) = uVar1" (pointer_expression "*(undefined4 *)(param_2 + 0x4c)" * (cast_expression "(undefined4 *)(param_2 + 0x4c)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x4c)" ( (binary_expression "param_2 + 0x4c" identifier + number_literal) )))) = identifier) ;) (expression_statement "lVar4 = *param_1;" (assignment_expression "lVar4 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "*(undefined8 *)(param_2 + 0x10) = 0;" (assignment_expression "*(undefined8 *)(param_2 + 0x10) = 0" (pointer_expression "*(undefined8 *)(param_2 + 0x10)" * (cast_expression "(undefined8 *)(param_2 + 0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x10)" ( (binary_expression "param_2 + 0x10" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined8 *)(param_2 + 0x28) = 0;" (assignment_expression "*(undefined8 *)(param_2 + 0x28) = 0" (pointer_expression "*(undefined8 *)(param_2 + 0x28)" * (cast_expression "(undefined8 *)(param_2 + 0x28)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x28)" ( (binary_expression "param_2 + 0x28" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined8 *)(param_2 + 0x38) = 0;" (assignment_expression "*(undefined8 *)(param_2 + 0x38) = 0" (pointer_expression "*(undefined8 *)(param_2 + 0x38)" * (cast_expression "(undefined8 *)(param_2 + 0x38)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x38)" ( (binary_expression "param_2 + 0x38" identifier + number_literal) )))) = number_literal) ;) (expression_statement "(**(code **)(lVar4 + 0x20))(&local_58,param_1);" (call_expression "(**(code **)(lVar4 + 0x20))(&local_58,param_1)" (parenthesized_expression "(**(code **)(lVar4 + 0x20))" ( (pointer_expression "**(code **)(lVar4 + 0x20)" * (pointer_expression "*(code **)(lVar4 + 0x20)" * (cast_expression "(code **)(lVar4 + 0x20)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar4 + 0x20)" ( (binary_expression "lVar4 + 0x20" identifier + number_literal) ))))) )) (argument_list "(&local_58,param_1)" ( (pointer_expression "&local_58" & identifier) , identifier ))) ;) (expression_statement "lVar4 = local_50;" (assignment_expression "lVar4 = local_50" identifier = identifier) ;) (expression_statement "lVar2 = thunk_FUN_00337280(local_50 + 1);" (assignment_expression "lVar2 = thunk_FUN_00337280(local_50 + 1)" identifier = (call_expression "thunk_FUN_00337280(local_50 + 1)" identifier (argument_list "(local_50 + 1)" ( (binary_expression "local_50 + 1" identifier + number_literal) )))) ;) (expression_statement "FUN_00340ef0(&local_58,lVar2,lVar4,0);" (call_expression "FUN_00340ef0(&local_58,lVar2,lVar4,0)" identifier (argument_list "(&local_58,lVar2,lVar4,0)" ( (pointer_expression "&local_58" & identifier) , identifier , identifier , number_literal ))) ;) (expression_statement "*(undefined1 *)(lVar2 + lVar4) = 0;" (assignment_expression "*(undefined1 *)(lVar2 + lVar4) = 0" (pointer_expression "*(undefined1 *)(lVar2 + lVar4)" * (cast_expression "(undefined1 *)(lVar2 + lVar4)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar2 + lVar4)" ( (binary_expression "lVar2 + lVar4" identifier + identifier) )))) = number_literal) ;) (expression_statement "*(long *)(param_2 + 0x10) = lVar2;" (assignment_expression "*(long *)(param_2 + 0x10) = lVar2" (pointer_expression "*(long *)(param_2 + 0x10)" * (cast_expression "(long *)(param_2 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x10)" ( (binary_expression "param_2 + 0x10" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(long *)(param_2 + 0x18) = lVar4;" (assignment_expression "*(long *)(param_2 + 0x18) = lVar4" (pointer_expression "*(long *)(param_2 + 0x18)" * (cast_expression "(long *)(param_2 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x18)" ( (binary_expression "param_2 + 0x18" identifier + number_literal) )))) = identifier) ;) (if_statement "if (local_58 != local_48) {\n    FUN_00338a50();\n  }" if (parenthesized_expression "(local_58 != local_48)" ( (binary_expression "local_58 != local_48" identifier != identifier) )) (compound_statement "{\n    FUN_00338a50();\n  }" { (expression_statement "FUN_00338a50();" (call_expression "FUN_00338a50()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "(**(code **)(*param_1 + 0x28))(&local_58,param_1);" (call_expression "(**(code **)(*param_1 + 0x28))(&local_58,param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x28))" ( (pointer_expression "**(code **)(*param_1 + 0x28)" * (pointer_expression "*(code **)(*param_1 + 0x28)" * (cast_expression "(code **)(*param_1 + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x28)" ( (binary_expression "*param_1 + 0x28" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(&local_58,param_1)" ( (pointer_expression "&local_58" & identifier) , identifier ))) ;) (expression_statement "lVar4 = local_50;" (assignment_expression "lVar4 = local_50" identifier = identifier) ;) (if_statement "if (0x1ffffffffffffffe < local_50 + 1U) {\n                    \n                    \n    FUN_003384c0();\n  }" if (parenthesized_expression "(0x1ffffffffffffffe < local_50 + 1U)" ( (binary_expression "0x1ffffffffffffffe < local_50 + 1U" number_literal < (binary_expression "local_50 + 1U" identifier + number_literal)) )) (compound_statement "{\n                    \n                    \n    FUN_003384c0();\n  }" { (expression_statement "FUN_003384c0();" (call_expression "FUN_003384c0()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "lVar2 = (local_50 + 1U) * 4;" (assignment_expression "lVar2 = (local_50 + 1U) * 4" identifier = (binary_expression "(local_50 + 1U) * 4" (parenthesized_expression "(local_50 + 1U)" ( (binary_expression "local_50 + 1U" identifier + number_literal) )) * number_literal)) ;) (expression_statement "lVar3 = thunk_FUN_00337280(lVar2);" (assignment_expression "lVar3 = thunk_FUN_00337280(lVar2)" identifier = (call_expression "thunk_FUN_00337280(lVar2)" identifier (argument_list "(lVar2)" ( identifier )))) ;) (expression_statement "FUN_0033e110(&local_58,lVar3,lVar4,0);" (call_expression "FUN_0033e110(&local_58,lVar3,lVar4,0)" identifier (argument_list "(&local_58,lVar3,lVar4,0)" ( (pointer_expression "&local_58" & identifier) , identifier , identifier , number_literal ))) ;) (expression_statement "*(long *)(param_2 + 0x28) = lVar3;" (assignment_expression "*(long *)(param_2 + 0x28) = lVar3" (pointer_expression "*(long *)(param_2 + 0x28)" * (cast_expression "(long *)(param_2 + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x28)" ( (binary_expression "param_2 + 0x28" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(lVar3 + -4 + lVar2) = 0;" (assignment_expression "*(undefined4 *)(lVar3 + -4 + lVar2) = 0" (pointer_expression "*(undefined4 *)(lVar3 + -4 + lVar2)" * (cast_expression "(undefined4 *)(lVar3 + -4 + lVar2)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + -4 + lVar2)" ( (binary_expression "lVar3 + -4 + lVar2" (binary_expression "lVar3 + -4" identifier + number_literal) + identifier) )))) = number_literal) ;) (expression_statement "*(long *)(param_2 + 0x30) = lVar4;" (assignment_expression "*(long *)(param_2 + 0x30) = lVar4" (pointer_expression "*(long *)(param_2 + 0x30)" * (cast_expression "(long *)(param_2 + 0x30)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x30)" ( (binary_expression "param_2 + 0x30" identifier + number_literal) )))) = identifier) ;) (if_statement "if (local_58 != local_48) {\n    FUN_00338a50();\n  }" if (parenthesized_expression "(local_58 != local_48)" ( (binary_expression "local_58 != local_48" identifier != identifier) )) (compound_statement "{\n    FUN_00338a50();\n  }" { (expression_statement "FUN_00338a50();" (call_expression "FUN_00338a50()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "(**(code **)(*param_1 + 0x30))(&local_58,param_1);" (call_expression "(**(code **)(*param_1 + 0x30))(&local_58,param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x30))" ( (pointer_expression "**(code **)(*param_1 + 0x30)" * (pointer_expression "*(code **)(*param_1 + 0x30)" * (cast_expression "(code **)(*param_1 + 0x30)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x30)" ( (binary_expression "*param_1 + 0x30" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(&local_58,param_1)" ( (pointer_expression "&local_58" & identifier) , identifier ))) ;) (if_statement "if (local_50 + 1U < 0x1fffffffffffffff) {\n    lVar2 = (local_50 + 1U) * 4;\n                    \n    lVar4 = thunk_FUN_00337280(lVar2);\n    FUN_0033e110(&local_58,lVar4,local_50,0);\n    *(long *)(param_2 + 0x38) = lVar4;\n    *(undefined4 *)(lVar4 + -4 + lVar2) = 0;\n    *(long *)(param_2 + 0x40) = local_50;\n    if (local_58 != local_48) {\n      FUN_00338a50();\n    }\n    return;\n  }" if (parenthesized_expression "(local_50 + 1U < 0x1fffffffffffffff)" ( (binary_expression "local_50 + 1U < 0x1fffffffffffffff" (binary_expression "local_50 + 1U" identifier + number_literal) < number_literal) )) (compound_statement "{\n    lVar2 = (local_50 + 1U) * 4;\n                    \n    lVar4 = thunk_FUN_00337280(lVar2);\n    FUN_0033e110(&local_58,lVar4,local_50,0);\n    *(long *)(param_2 + 0x38) = lVar4;\n    *(undefined4 *)(lVar4 + -4 + lVar2) = 0;\n    *(long *)(param_2 + 0x40) = local_50;\n    if (local_58 != local_48) {\n      FUN_00338a50();\n    }\n    return;\n  }" { (expression_statement "lVar2 = (local_50 + 1U) * 4;" (assignment_expression "lVar2 = (local_50 + 1U) * 4" identifier = (binary_expression "(local_50 + 1U) * 4" (parenthesized_expression "(local_50 + 1U)" ( (binary_expression "local_50 + 1U" identifier + number_literal) )) * number_literal)) ;) (expression_statement "lVar4 = thunk_FUN_00337280(lVar2);" (assignment_expression "lVar4 = thunk_FUN_00337280(lVar2)" identifier = (call_expression "thunk_FUN_00337280(lVar2)" identifier (argument_list "(lVar2)" ( identifier )))) ;) (expression_statement "FUN_0033e110(&local_58,lVar4,local_50,0);" (call_expression "FUN_0033e110(&local_58,lVar4,local_50,0)" identifier (argument_list "(&local_58,lVar4,local_50,0)" ( (pointer_expression "&local_58" & identifier) , identifier , identifier , number_literal ))) ;) (expression_statement "*(long *)(param_2 + 0x38) = lVar4;" (assignment_expression "*(long *)(param_2 + 0x38) = lVar4" (pointer_expression "*(long *)(param_2 + 0x38)" * (cast_expression "(long *)(param_2 + 0x38)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x38)" ( (binary_expression "param_2 + 0x38" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(lVar4 + -4 + lVar2) = 0;" (assignment_expression "*(undefined4 *)(lVar4 + -4 + lVar2) = 0" (pointer_expression "*(undefined4 *)(lVar4 + -4 + lVar2)" * (cast_expression "(undefined4 *)(lVar4 + -4 + lVar2)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar4 + -4 + lVar2)" ( (binary_expression "lVar4 + -4 + lVar2" (binary_expression "lVar4 + -4" identifier + number_literal) + identifier) )))) = number_literal) ;) (expression_statement "*(long *)(param_2 + 0x40) = local_50;" (assignment_expression "*(long *)(param_2 + 0x40) = local_50" (pointer_expression "*(long *)(param_2 + 0x40)" * (cast_expression "(long *)(param_2 + 0x40)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x40)" ( (binary_expression "param_2 + 0x40" identifier + number_literal) )))) = identifier) ;) (if_statement "if (local_58 != local_48) {\n      FUN_00338a50();\n    }" if (parenthesized_expression "(local_58 != local_48)" ( (binary_expression "local_58 != local_48" identifier != identifier) )) (compound_statement "{\n      FUN_00338a50();\n    }" { (expression_statement "FUN_00338a50();" (call_expression "FUN_00338a50()" identifier (argument_list "()" ( ))) ;) })) (return_statement "return;" return ;) })) (expression_statement "FUN_003384c0();" (call_expression "FUN_003384c0()" identifier (argument_list "()" ( ))) ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) (pointer_declarator * IDENT)) , (parameter_declaration (sized_type_specifier long) IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (expression_statement (assignment_expression IDENT = (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 ( )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (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 )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (call_expression (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 ( (pointer_expression & IDENT) , IDENT ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) )))) ;) (expression_statement (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , IDENT , IDENT , LIT ))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + IDENT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( (pointer_expression & IDENT) , IDENT ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < (binary_expression IDENT + LIT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT + LIT) )) * LIT)) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (expression_statement (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , IDENT , IDENT , LIT ))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + IDENT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( (pointer_expression & IDENT) , IDENT ))) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT + LIT) )) * LIT)) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (expression_statement (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , IDENT , IDENT , LIT ))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + IDENT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) (return_statement return ;) })) (expression_statement (call_expression IDENT (argument_list ( ))) ;) })))
(function_definition "void FUN_0036f9c0(long *param_1,long param_2)\n\n{\n  undefined4 uVar1;\n  long lVar2;\n  long lVar3;\n  long lVar4;\n  undefined1 *local_58;\n  long local_50;\n  undefined1 local_48 [24];\n  \n  uVar1 = (**(code **)(*param_1 + 0x10))();\n  *(undefined4 *)(param_2 + 0x48) = uVar1;\n  uVar1 = (**(code **)(*param_1 + 0x18))(param_1);\n  *(undefined1 *)(param_2 + 0x148) = 1;\n  *(undefined4 *)(param_2 + 0x4c) = uVar1;\n  lVar4 = *param_1;\n  *(undefined8 *)(param_2 + 0x10) = 0;\n  *(undefined8 *)(param_2 + 0x28) = 0;\n  *(undefined8 *)(param_2 + 0x38) = 0;\n  (**(code **)(lVar4 + 0x20))(&local_58,param_1);\n  lVar4 = local_50;\n                    \n  lVar2 = thunk_FUN_00337280(local_50 + 1);\n  FUN_00340ef0(&local_58,lVar2,lVar4,0);\n  *(undefined1 *)(lVar2 + lVar4) = 0;\n  *(long *)(param_2 + 0x10) = lVar2;\n  *(long *)(param_2 + 0x18) = lVar4;\n  if (local_58 != local_48) {\n    FUN_00338a50();\n  }\n  (**(code **)(*param_1 + 0x28))(&local_58,param_1);\n  lVar4 = local_50;\n  if (0x1ffffffffffffffe < local_50 + 1U) {\n                    \n                    \n    FUN_003384c0();\n  }\n  lVar2 = (local_50 + 1U) * 4;\n                    \n  lVar3 = thunk_FUN_00337280(lVar2);\n  FUN_0033e110(&local_58,lVar3,lVar4,0);\n  *(long *)(param_2 + 0x28) = lVar3;\n  *(undefined4 *)(lVar3 + -4 + lVar2) = 0;\n  *(long *)(param_2 + 0x30) = lVar4;\n  if (local_58 != local_48) {\n    FUN_00338a50();\n  }\n  (**(code **)(*param_1 + 0x30))(&local_58,param_1);\n  if (local_50 + 1U < 0x1fffffffffffffff) {\n    lVar2 = (local_50 + 1U) * 4;\n                    \n    lVar4 = thunk_FUN_00337280(lVar2);\n    FUN_0033e110(&local_58,lVar4,local_50,0);\n    *(long *)(param_2 + 0x38) = lVar4;\n    *(undefined4 *)(lVar4 + -4 + lVar2) = 0;\n    *(long *)(param_2 + 0x40) = local_50;\n    if (local_58 != local_48) {\n      FUN_00338a50();\n    }\n    return;\n  }\n                    \n                    \n  FUN_003384c0();\n}" (primitive_type "void") (function_declarator "FUN_0036f9c0(long *param_1,long param_2)" (identifier "FUN_0036f9c0") (parameter_list "(long *param_1,long param_2)" (( "(") (parameter_declaration "long *param_1" (sized_type_specifier "long" (long "long")) (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "long param_2" (sized_type_specifier "long" (long "long")) (identifier "param_2")) () ")"))) (compound_statement "{\n  undefined4 uVar1;\n  long lVar2;\n  long lVar3;\n  long lVar4;\n  undefined1 *local_58;\n  long local_50;\n  undefined1 local_48 [24];\n  \n  uVar1 = (**(code **)(*param_1 + 0x10))();\n  *(undefined4 *)(param_2 + 0x48) = uVar1;\n  uVar1 = (**(code **)(*param_1 + 0x18))(param_1);\n  *(undefined1 *)(param_2 + 0x148) = 1;\n  *(undefined4 *)(param_2 + 0x4c) = uVar1;\n  lVar4 = *param_1;\n  *(undefined8 *)(param_2 + 0x10) = 0;\n  *(undefined8 *)(param_2 + 0x28) = 0;\n  *(undefined8 *)(param_2 + 0x38) = 0;\n  (**(code **)(lVar4 + 0x20))(&local_58,param_1);\n  lVar4 = local_50;\n                    \n  lVar2 = thunk_FUN_00337280(local_50 + 1);\n  FUN_00340ef0(&local_58,lVar2,lVar4,0);\n  *(undefined1 *)(lVar2 + lVar4) = 0;\n  *(long *)(param_2 + 0x10) = lVar2;\n  *(long *)(param_2 + 0x18) = lVar4;\n  if (local_58 != local_48) {\n    FUN_00338a50();\n  }\n  (**(code **)(*param_1 + 0x28))(&local_58,param_1);\n  lVar4 = local_50;\n  if (0x1ffffffffffffffe < local_50 + 1U) {\n                    \n                    \n    FUN_003384c0();\n  }\n  lVar2 = (local_50 + 1U) * 4;\n                    \n  lVar3 = thunk_FUN_00337280(lVar2);\n  FUN_0033e110(&local_58,lVar3,lVar4,0);\n  *(long *)(param_2 + 0x28) = lVar3;\n  *(undefined4 *)(lVar3 + -4 + lVar2) = 0;\n  *(long *)(param_2 + 0x30) = lVar4;\n  if (local_58 != local_48) {\n    FUN_00338a50();\n  }\n  (**(code **)(*param_1 + 0x30))(&local_58,param_1);\n  if (local_50 + 1U < 0x1fffffffffffffff) {\n    lVar2 = (local_50 + 1U) * 4;\n                    \n    lVar4 = thunk_FUN_00337280(lVar2);\n    FUN_0033e110(&local_58,lVar4,local_50,0);\n    *(long *)(param_2 + 0x38) = lVar4;\n    *(undefined4 *)(lVar4 + -4 + lVar2) = 0;\n    *(long *)(param_2 + 0x40) = local_50;\n    if (local_58 != local_48) {\n      FUN_00338a50();\n    }\n    return;\n  }\n                    \n                    \n  FUN_003384c0();\n}" ({ "{") (declaration "undefined4 uVar1;" (type_identifier "undefined4") (identifier "uVar1") (; ";")) (declaration "long lVar2;" (sized_type_specifier "long" (long "long")) (identifier "lVar2") (; ";")) (declaration "long lVar3;" (sized_type_specifier "long" (long "long")) (identifier "lVar3") (; ";")) (declaration "long lVar4;" (sized_type_specifier "long" (long "long")) (identifier "lVar4") (; ";")) (declaration "undefined1 *local_58;" (type_identifier "undefined1") (pointer_declarator "*local_58" (* "*") (identifier "local_58")) (; ";")) (declaration "long local_50;" (sized_type_specifier "long" (long "long")) (identifier "local_50") (; ";")) (declaration "undefined1 local_48 [24];" (type_identifier "undefined1") (array_declarator "local_48 [24]" (identifier "local_48") ([ "[") (number_literal "24") (] "]")) (; ";")) (expression_statement "uVar1 = (**(code **)(*param_1 + 0x10))();" (assignment_expression "uVar1 = (**(code **)(*param_1 + 0x10))()" (identifier "uVar1") (= "=") (call_expression "(**(code **)(*param_1 + 0x10))()" (parenthesized_expression "(**(code **)(*param_1 + 0x10))" (( "(") (pointer_expression "**(code **)(*param_1 + 0x10)" (* "*") (pointer_expression "*(code **)(*param_1 + 0x10)" (* "*") (cast_expression "(code **)(*param_1 + 0x10)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_1 + 0x10)" (( "(") (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x10")) () ")"))))) () ")")) (argument_list "()" (( "(") () ")")))) (; ";")) (expression_statement "*(undefined4 *)(param_2 + 0x48) = uVar1;" (assignment_expression "*(undefined4 *)(param_2 + 0x48) = uVar1" (pointer_expression "*(undefined4 *)(param_2 + 0x48)" (* "*") (cast_expression "(undefined4 *)(param_2 + 0x48)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x48)" (( "(") (binary_expression "param_2 + 0x48" (identifier "param_2") (+ "+") (number_literal "0x48")) () ")")))) (= "=") (identifier "uVar1")) (; ";")) (expression_statement "uVar1 = (**(code **)(*param_1 + 0x18))(param_1);" (assignment_expression "uVar1 = (**(code **)(*param_1 + 0x18))(param_1)" (identifier "uVar1") (= "=") (call_expression "(**(code **)(*param_1 + 0x18))(param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x18))" (( "(") (pointer_expression "**(code **)(*param_1 + 0x18)" (* "*") (pointer_expression "*(code **)(*param_1 + 0x18)" (* "*") (cast_expression "(code **)(*param_1 + 0x18)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_1 + 0x18)" (( "(") (binary_expression "*param_1 + 0x18" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x18")) () ")"))))) () ")")) (argument_list "(param_1)" (( "(") (identifier "param_1") () ")")))) (; ";")) (expression_statement "*(undefined1 *)(param_2 + 0x148) = 1;" (assignment_expression "*(undefined1 *)(param_2 + 0x148) = 1" (pointer_expression "*(undefined1 *)(param_2 + 0x148)" (* "*") (cast_expression "(undefined1 *)(param_2 + 0x148)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x148)" (( "(") (binary_expression "param_2 + 0x148" (identifier "param_2") (+ "+") (number_literal "0x148")) () ")")))) (= "=") (number_literal "1")) (; ";")) (expression_statement "*(undefined4 *)(param_2 + 0x4c) = uVar1;" (assignment_expression "*(undefined4 *)(param_2 + 0x4c) = uVar1" (pointer_expression "*(undefined4 *)(param_2 + 0x4c)" (* "*") (cast_expression "(undefined4 *)(param_2 + 0x4c)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x4c)" (( "(") (binary_expression "param_2 + 0x4c" (identifier "param_2") (+ "+") (number_literal "0x4c")) () ")")))) (= "=") (identifier "uVar1")) (; ";")) (expression_statement "lVar4 = *param_1;" (assignment_expression "lVar4 = *param_1" (identifier "lVar4") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (expression_statement "*(undefined8 *)(param_2 + 0x10) = 0;" (assignment_expression "*(undefined8 *)(param_2 + 0x10) = 0" (pointer_expression "*(undefined8 *)(param_2 + 0x10)" (* "*") (cast_expression "(undefined8 *)(param_2 + 0x10)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x10)" (( "(") (binary_expression "param_2 + 0x10" (identifier "param_2") (+ "+") (number_literal "0x10")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(undefined8 *)(param_2 + 0x28) = 0;" (assignment_expression "*(undefined8 *)(param_2 + 0x28) = 0" (pointer_expression "*(undefined8 *)(param_2 + 0x28)" (* "*") (cast_expression "(undefined8 *)(param_2 + 0x28)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x28)" (( "(") (binary_expression "param_2 + 0x28" (identifier "param_2") (+ "+") (number_literal "0x28")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(undefined8 *)(param_2 + 0x38) = 0;" (assignment_expression "*(undefined8 *)(param_2 + 0x38) = 0" (pointer_expression "*(undefined8 *)(param_2 + 0x38)" (* "*") (cast_expression "(undefined8 *)(param_2 + 0x38)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x38)" (( "(") (binary_expression "param_2 + 0x38" (identifier "param_2") (+ "+") (number_literal "0x38")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "(**(code **)(lVar4 + 0x20))(&local_58,param_1);" (call_expression "(**(code **)(lVar4 + 0x20))(&local_58,param_1)" (parenthesized_expression "(**(code **)(lVar4 + 0x20))" (( "(") (pointer_expression "**(code **)(lVar4 + 0x20)" (* "*") (pointer_expression "*(code **)(lVar4 + 0x20)" (* "*") (cast_expression "(code **)(lVar4 + 0x20)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(lVar4 + 0x20)" (( "(") (binary_expression "lVar4 + 0x20" (identifier "lVar4") (+ "+") (number_literal "0x20")) () ")"))))) () ")")) (argument_list "(&local_58,param_1)" (( "(") (pointer_expression "&local_58" (& "&") (identifier "local_58")) (, ",") (identifier "param_1") () ")"))) (; ";")) (expression_statement "lVar4 = local_50;" (assignment_expression "lVar4 = local_50" (identifier "lVar4") (= "=") (identifier "local_50")) (; ";")) (expression_statement "lVar2 = thunk_FUN_00337280(local_50 + 1);" (assignment_expression "lVar2 = thunk_FUN_00337280(local_50 + 1)" (identifier "lVar2") (= "=") (call_expression "thunk_FUN_00337280(local_50 + 1)" (identifier "thunk_FUN_00337280") (argument_list "(local_50 + 1)" (( "(") (binary_expression "local_50 + 1" (identifier "local_50") (+ "+") (number_literal "1")) () ")")))) (; ";")) (expression_statement "FUN_00340ef0(&local_58,lVar2,lVar4,0);" (call_expression "FUN_00340ef0(&local_58,lVar2,lVar4,0)" (identifier "FUN_00340ef0") (argument_list "(&local_58,lVar2,lVar4,0)" (( "(") (pointer_expression "&local_58" (& "&") (identifier "local_58")) (, ",") (identifier "lVar2") (, ",") (identifier "lVar4") (, ",") (number_literal "0") () ")"))) (; ";")) (expression_statement "*(undefined1 *)(lVar2 + lVar4) = 0;" (assignment_expression "*(undefined1 *)(lVar2 + lVar4) = 0" (pointer_expression "*(undefined1 *)(lVar2 + lVar4)" (* "*") (cast_expression "(undefined1 *)(lVar2 + lVar4)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar2 + lVar4)" (( "(") (binary_expression "lVar2 + lVar4" (identifier "lVar2") (+ "+") (identifier "lVar4")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(long *)(param_2 + 0x10) = lVar2;" (assignment_expression "*(long *)(param_2 + 0x10) = lVar2" (pointer_expression "*(long *)(param_2 + 0x10)" (* "*") (cast_expression "(long *)(param_2 + 0x10)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x10)" (( "(") (binary_expression "param_2 + 0x10" (identifier "param_2") (+ "+") (number_literal "0x10")) () ")")))) (= "=") (identifier "lVar2")) (; ";")) (expression_statement "*(long *)(param_2 + 0x18) = lVar4;" (assignment_expression "*(long *)(param_2 + 0x18) = lVar4" (pointer_expression "*(long *)(param_2 + 0x18)" (* "*") (cast_expression "(long *)(param_2 + 0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x18)" (( "(") (binary_expression "param_2 + 0x18" (identifier "param_2") (+ "+") (number_literal "0x18")) () ")")))) (= "=") (identifier "lVar4")) (; ";")) (if_statement "if (local_58 != local_48) {\n    FUN_00338a50();\n  }" (if "if") (parenthesized_expression "(local_58 != local_48)" (( "(") (binary_expression "local_58 != local_48" (identifier "local_58") (!= "!=") (identifier "local_48")) () ")")) (compound_statement "{\n    FUN_00338a50();\n  }" ({ "{") (expression_statement "FUN_00338a50();" (call_expression "FUN_00338a50()" (identifier "FUN_00338a50") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (expression_statement "(**(code **)(*param_1 + 0x28))(&local_58,param_1);" (call_expression "(**(code **)(*param_1 + 0x28))(&local_58,param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x28))" (( "(") (pointer_expression "**(code **)(*param_1 + 0x28)" (* "*") (pointer_expression "*(code **)(*param_1 + 0x28)" (* "*") (cast_expression "(code **)(*param_1 + 0x28)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_1 + 0x28)" (( "(") (binary_expression "*param_1 + 0x28" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x28")) () ")"))))) () ")")) (argument_list "(&local_58,param_1)" (( "(") (pointer_expression "&local_58" (& "&") (identifier "local_58")) (, ",") (identifier "param_1") () ")"))) (; ";")) (expression_statement "lVar4 = local_50;" (assignment_expression "lVar4 = local_50" (identifier "lVar4") (= "=") (identifier "local_50")) (; ";")) (if_statement "if (0x1ffffffffffffffe < local_50 + 1U) {\n                    \n                    \n    FUN_003384c0();\n  }" (if "if") (parenthesized_expression "(0x1ffffffffffffffe < local_50 + 1U)" (( "(") (binary_expression "0x1ffffffffffffffe < local_50 + 1U" (number_literal "0x1ffffffffffffffe") (< "<") (binary_expression "local_50 + 1U" (identifier "local_50") (+ "+") (number_literal "1U"))) () ")")) (compound_statement "{\n                    \n                    \n    FUN_003384c0();\n  }" ({ "{") (expression_statement "FUN_003384c0();" (call_expression "FUN_003384c0()" (identifier "FUN_003384c0") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (expression_statement "lVar2 = (local_50 + 1U) * 4;" (assignment_expression "lVar2 = (local_50 + 1U) * 4" (identifier "lVar2") (= "=") (binary_expression "(local_50 + 1U) * 4" (parenthesized_expression "(local_50 + 1U)" (( "(") (binary_expression "local_50 + 1U" (identifier "local_50") (+ "+") (number_literal "1U")) () ")")) (* "*") (number_literal "4"))) (; ";")) (expression_statement "lVar3 = thunk_FUN_00337280(lVar2);" (assignment_expression "lVar3 = thunk_FUN_00337280(lVar2)" (identifier "lVar3") (= "=") (call_expression "thunk_FUN_00337280(lVar2)" (identifier "thunk_FUN_00337280") (argument_list "(lVar2)" (( "(") (identifier "lVar2") () ")")))) (; ";")) (expression_statement "FUN_0033e110(&local_58,lVar3,lVar4,0);" (call_expression "FUN_0033e110(&local_58,lVar3,lVar4,0)" (identifier "FUN_0033e110") (argument_list "(&local_58,lVar3,lVar4,0)" (( "(") (pointer_expression "&local_58" (& "&") (identifier "local_58")) (, ",") (identifier "lVar3") (, ",") (identifier "lVar4") (, ",") (number_literal "0") () ")"))) (; ";")) (expression_statement "*(long *)(param_2 + 0x28) = lVar3;" (assignment_expression "*(long *)(param_2 + 0x28) = lVar3" (pointer_expression "*(long *)(param_2 + 0x28)" (* "*") (cast_expression "(long *)(param_2 + 0x28)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x28)" (( "(") (binary_expression "param_2 + 0x28" (identifier "param_2") (+ "+") (number_literal "0x28")) () ")")))) (= "=") (identifier "lVar3")) (; ";")) (expression_statement "*(undefined4 *)(lVar3 + -4 + lVar2) = 0;" (assignment_expression "*(undefined4 *)(lVar3 + -4 + lVar2) = 0" (pointer_expression "*(undefined4 *)(lVar3 + -4 + lVar2)" (* "*") (cast_expression "(undefined4 *)(lVar3 + -4 + lVar2)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar3 + -4 + lVar2)" (( "(") (binary_expression "lVar3 + -4 + lVar2" (binary_expression "lVar3 + -4" (identifier "lVar3") (+ "+") (number_literal "-4")) (+ "+") (identifier "lVar2")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(long *)(param_2 + 0x30) = lVar4;" (assignment_expression "*(long *)(param_2 + 0x30) = lVar4" (pointer_expression "*(long *)(param_2 + 0x30)" (* "*") (cast_expression "(long *)(param_2 + 0x30)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x30)" (( "(") (binary_expression "param_2 + 0x30" (identifier "param_2") (+ "+") (number_literal "0x30")) () ")")))) (= "=") (identifier "lVar4")) (; ";")) (if_statement "if (local_58 != local_48) {\n    FUN_00338a50();\n  }" (if "if") (parenthesized_expression "(local_58 != local_48)" (( "(") (binary_expression "local_58 != local_48" (identifier "local_58") (!= "!=") (identifier "local_48")) () ")")) (compound_statement "{\n    FUN_00338a50();\n  }" ({ "{") (expression_statement "FUN_00338a50();" (call_expression "FUN_00338a50()" (identifier "FUN_00338a50") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (expression_statement "(**(code **)(*param_1 + 0x30))(&local_58,param_1);" (call_expression "(**(code **)(*param_1 + 0x30))(&local_58,param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x30))" (( "(") (pointer_expression "**(code **)(*param_1 + 0x30)" (* "*") (pointer_expression "*(code **)(*param_1 + 0x30)" (* "*") (cast_expression "(code **)(*param_1 + 0x30)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_1 + 0x30)" (( "(") (binary_expression "*param_1 + 0x30" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x30")) () ")"))))) () ")")) (argument_list "(&local_58,param_1)" (( "(") (pointer_expression "&local_58" (& "&") (identifier "local_58")) (, ",") (identifier "param_1") () ")"))) (; ";")) (if_statement "if (local_50 + 1U < 0x1fffffffffffffff) {\n    lVar2 = (local_50 + 1U) * 4;\n                    \n    lVar4 = thunk_FUN_00337280(lVar2);\n    FUN_0033e110(&local_58,lVar4,local_50,0);\n    *(long *)(param_2 + 0x38) = lVar4;\n    *(undefined4 *)(lVar4 + -4 + lVar2) = 0;\n    *(long *)(param_2 + 0x40) = local_50;\n    if (local_58 != local_48) {\n      FUN_00338a50();\n    }\n    return;\n  }" (if "if") (parenthesized_expression "(local_50 + 1U < 0x1fffffffffffffff)" (( "(") (binary_expression "local_50 + 1U < 0x1fffffffffffffff" (binary_expression "local_50 + 1U" (identifier "local_50") (+ "+") (number_literal "1U")) (< "<") (number_literal "0x1fffffffffffffff")) () ")")) (compound_statement "{\n    lVar2 = (local_50 + 1U) * 4;\n                    \n    lVar4 = thunk_FUN_00337280(lVar2);\n    FUN_0033e110(&local_58,lVar4,local_50,0);\n    *(long *)(param_2 + 0x38) = lVar4;\n    *(undefined4 *)(lVar4 + -4 + lVar2) = 0;\n    *(long *)(param_2 + 0x40) = local_50;\n    if (local_58 != local_48) {\n      FUN_00338a50();\n    }\n    return;\n  }" ({ "{") (expression_statement "lVar2 = (local_50 + 1U) * 4;" (assignment_expression "lVar2 = (local_50 + 1U) * 4" (identifier "lVar2") (= "=") (binary_expression "(local_50 + 1U) * 4" (parenthesized_expression "(local_50 + 1U)" (( "(") (binary_expression "local_50 + 1U" (identifier "local_50") (+ "+") (number_literal "1U")) () ")")) (* "*") (number_literal "4"))) (; ";")) (expression_statement "lVar4 = thunk_FUN_00337280(lVar2);" (assignment_expression "lVar4 = thunk_FUN_00337280(lVar2)" (identifier "lVar4") (= "=") (call_expression "thunk_FUN_00337280(lVar2)" (identifier "thunk_FUN_00337280") (argument_list "(lVar2)" (( "(") (identifier "lVar2") () ")")))) (; ";")) (expression_statement "FUN_0033e110(&local_58,lVar4,local_50,0);" (call_expression "FUN_0033e110(&local_58,lVar4,local_50,0)" (identifier "FUN_0033e110") (argument_list "(&local_58,lVar4,local_50,0)" (( "(") (pointer_expression "&local_58" (& "&") (identifier "local_58")) (, ",") (identifier "lVar4") (, ",") (identifier "local_50") (, ",") (number_literal "0") () ")"))) (; ";")) (expression_statement "*(long *)(param_2 + 0x38) = lVar4;" (assignment_expression "*(long *)(param_2 + 0x38) = lVar4" (pointer_expression "*(long *)(param_2 + 0x38)" (* "*") (cast_expression "(long *)(param_2 + 0x38)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x38)" (( "(") (binary_expression "param_2 + 0x38" (identifier "param_2") (+ "+") (number_literal "0x38")) () ")")))) (= "=") (identifier "lVar4")) (; ";")) (expression_statement "*(undefined4 *)(lVar4 + -4 + lVar2) = 0;" (assignment_expression "*(undefined4 *)(lVar4 + -4 + lVar2) = 0" (pointer_expression "*(undefined4 *)(lVar4 + -4 + lVar2)" (* "*") (cast_expression "(undefined4 *)(lVar4 + -4 + lVar2)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar4 + -4 + lVar2)" (( "(") (binary_expression "lVar4 + -4 + lVar2" (binary_expression "lVar4 + -4" (identifier "lVar4") (+ "+") (number_literal "-4")) (+ "+") (identifier "lVar2")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(long *)(param_2 + 0x40) = local_50;" (assignment_expression "*(long *)(param_2 + 0x40) = local_50" (pointer_expression "*(long *)(param_2 + 0x40)" (* "*") (cast_expression "(long *)(param_2 + 0x40)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x40)" (( "(") (binary_expression "param_2 + 0x40" (identifier "param_2") (+ "+") (number_literal "0x40")) () ")")))) (= "=") (identifier "local_50")) (; ";")) (if_statement "if (local_58 != local_48) {\n      FUN_00338a50();\n    }" (if "if") (parenthesized_expression "(local_58 != local_48)" (( "(") (binary_expression "local_58 != local_48" (identifier "local_58") (!= "!=") (identifier "local_48")) () ")")) (compound_statement "{\n      FUN_00338a50();\n    }" ({ "{") (expression_statement "FUN_00338a50();" (call_expression "FUN_00338a50()" (identifier "FUN_00338a50") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (return_statement "return;" (return "return") (; ";")) (} "}"))) (expression_statement "FUN_003384c0();" (call_expression "FUN_003384c0()" (identifier "FUN_003384c0") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}")))

/* void std::__facet_shims::__numpunct_fill_cache<wchar_t>(std::integral_constant<bool, true>,
   std::locale::facet const*, std::__numpunct_cache<wchar_t>*) */

void std::__facet_shims::__numpunct_fill_cache<type_3>(long *param_1,long var_1)

{
  long var_2;
  type_1 uVar2;
  type_2 uVar3;
  char *pcVar4;
  type_3 *pwVar5;
  type_4 *var_6;
  type_1 var_4;
  type_4 var_7 [24];
  
  uVar3 = (**(type_5 **)(*param_1 + 0x10))();
  *(type_2 *)(var_1 + 0x48) = uVar3;
  uVar3 = (**(type_5 **)(*param_1 + 0x18))(param_1);
  *(type_4 *)(var_1 + 0x148) = 1;
  *(type_2 *)(var_1 + 0x4c) = uVar3;
  var_2 = *param_1;
  *(type_6 *)(var_1 + 0x10) = 0;
  *(type_6 *)(var_1 + 0x28) = 0;
  *(type_6 *)(var_1 + 0x38) = 0;
  (**(type_5 **)(var_2 + 0x20))(&var_6,param_1);
  uVar2 = var_4;
                    /* try { // try from 0036fa22 to 0036fa39 has its CatchHandler @ 0036fb3e */
  pcVar4 = (char *)var_3(var_4 + 1);
  std::string::var_5((type_7 *)&var_6,pcVar4,uVar2,0);
  pcVar4[uVar2] = '\0';
  *(char **)(var_1 + 0x10) = pcVar4;
  *(type_1 *)(var_1 + 0x18) = uVar2;
  if (var_6 != var_7) {
    var_8(var_6);
  }
  (**(type_5 **)(*param_1 + 0x28))(&var_6,param_1);
  uVar2 = var_4;
  if (0x1ffffffffffffffe < var_4 + 1) {
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 0036fb47 to 0036fb4b has its CatchHandler @ 0036fb45 */
    var_9();
  }
                    /* try { // try from 0036fa8d to 0036faa4 has its CatchHandler @ 0036fb45 */
  pwVar5 = (type_3 *)var_3((var_4 + 1) * 4);
  std::wstring::var_5((type_8 *)&var_6,pwVar5,uVar2,0);
  *(type_3 **)(var_1 + 0x28) = pwVar5;
  pwVar5[uVar2] = L'\0';
  *(type_1 *)(var_1 + 0x30) = uVar2;
  if (var_6 != var_7) {
    var_8(var_6);
  }
  (**(type_5 **)(*param_1 + 0x30))(&var_6,param_1);
  if (var_4 + 1 < 0x1fffffffffffffff) {
                    /* try { // try from 0036faf4 to 0036fb0b has its CatchHandler @ 0036fb43 */
    pwVar5 = (type_3 *)var_3((var_4 + 1) * 4);
    std::wstring::var_5((type_8 *)&var_6,pwVar5,var_4,0);
    *(type_3 **)(var_1 + 0x38) = pwVar5;
    pwVar5[var_4] = L'\0';
    *(type_1 *)(var_1 + 0x40) = var_4;
    if (var_6 != var_7) {
      var_8(var_6);
    }
    return;
  }
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 0036fb4c to 0036fb50 has its CatchHandler @ 0036fb43 */
  var_9();
}


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

void MASKED(long *param_1,long param_2)

{
  undefined4 uVar1;
  long lVar2;
  long lVar3;
  long lVar4;
  undefined1 *local_58;
  long local_50;
  undefined1 local_48 [24];
  
  uVar1 = (**(code **)(*param_1 + 0x10))();
  *(undefined4 *)(param_2 + 0x48) = uVar1;
  uVar1 = (**(code **)(*param_1 + 0x18))(param_1);
  *(undefined1 *)(param_2 + 0x148) = 1;
  *(undefined4 *)(param_2 + 0x4c) = uVar1;
  lVar4 = *param_1;
  *(undefined8 *)(param_2 + 0x10) = 0;
  *(undefined8 *)(param_2 + 0x28) = 0;
  *(undefined8 *)(param_2 + 0x38) = 0;
  (**(code **)(lVar4 + 0x20))(&local_58,param_1);
  lVar4 = local_50;
                    /* try { // try from 0036fa22 to 0036fa39 has its CatchHandler @ 0036fb3e */
  lVar2 = thunk_FUN_00337280(local_50 + 1);
  FUN_00340ef0(&local_58,lVar2,lVar4,0);
  *(undefined1 *)(lVar2 + lVar4) = 0;
  *(long *)(param_2 + 0x10) = lVar2;
  *(long *)(param_2 + 0x18) = lVar4;
  if (local_58 != local_48) {
    FUN_00338a50();
  }
  (**(code **)(*param_1 + 0x28))(&local_58,param_1);
  lVar4 = local_50;
  if (0x1ffffffffffffffe < local_50 + 1U) {
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 0036fb47 to 0036fb4b has its CatchHandler @ 0036fb45 */
    FUN_003384c0();
  }
  lVar2 = (local_50 + 1U) * 4;
                    /* try { // try from 0036fa8d to 0036faa4 has its CatchHandler @ 0036fb45 */
  lVar3 = thunk_FUN_00337280(lVar2);
  FUN_0033e110(&local_58,lVar3,lVar4,0);
  *(long *)(param_2 + 0x28) = lVar3;
  *(undefined4 *)(lVar3 + -4 + lVar2) = 0;
  *(long *)(param_2 + 0x30) = lVar4;
  if (local_58 != local_48) {
    FUN_00338a50();
  }
  (**(code **)(*param_1 + 0x30))(&local_58,param_1);
  if (local_50 + 1U < 0x1fffffffffffffff) {
    lVar2 = (local_50 + 1U) * 4;
                    /* try { // try from 0036faf4 to 0036fb0b has its CatchHandler @ 0036fb43 */
    lVar4 = thunk_FUN_00337280(lVar2);
    FUN_0033e110(&local_58,lVar4,local_50,0);
    *(long *)(param_2 + 0x38) = lVar4;
    *(undefined4 *)(lVar4 + -4 + lVar2) = 0;
    *(long *)(param_2 + 0x40) = local_50;
    if (local_58 != local_48) {
      FUN_00338a50();
    }
    return;
  }
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 0036fb4c to 0036fb50 has its CatchHandler @ 0036fb43 */
  FUN_003384c0();
}

