
/* WARNING: Unknown calling convention -- yet parameter storage is locked */
/* std::wostream& std::TEMPNAMEPLACEHOLDERVALUE(std::wostream&, char const*) */

wostream * std::operator<<(wostream *param_1,char *param_2)

{
  char cVar1;
  wchar_t wVar2;
  size_t sVar3;
  wchar_t *pwVar4;
  wchar_t *pwVar5;
  char *pcVar6;
  long *plVar7;
  
  if (param_2 == (char *)0x0) {
    wios::clear((wios *)(param_1 + *(long *)(*(long *)param_1 + -0x18)),
                *(_Ios_Iostate *)((wios *)(param_1 + *(long *)(*(long *)param_1 + -0x18)) + 0x20) |
                _S_badbit);
  }
  else {
    sVar3 = strlen(param_2);
    if (0x1ffffffffffffffe < sVar3) {
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 002e8b41 to 002e8b45 has its CatchHandler @ 002e8b3c */
      __cxa_throw_bad_array_new_length();
    }
                    /* try { // try from 002e8a86 to 002e8a8a has its CatchHandler @ 002e8b3c */
    pwVar4 = (wchar_t *)operator_new__(sVar3 * 4);
    if (sVar3 != 0) {
      cVar1 = *param_2;
      plVar7 = *(long **)(param_1 + *(long *)(*(long *)param_1 + -0x18) + 0xf0);
      if (plVar7 != (long *)0x0) {
        pcVar6 = param_2 + 1;
        pwVar5 = pwVar4;
        do {
                    /* try { // try from 002e8ae4 to 002e8afb has its CatchHandler @ 002e8b46 */
          wVar2 = (**(code **)(*plVar7 + 0x50))(plVar7,(int)cVar1);
          *pwVar5 = wVar2;
          if (pwVar5 == pwVar4 + (sVar3 - 1)) goto LAB_002e8aee;
          cVar1 = *pcVar6;
          pwVar5 = pwVar5 + 1;
          pcVar6 = pcVar6 + 1;
          plVar7 = *(long **)(param_1 + *(long *)(*(long *)param_1 + -0x18) + 0xf0);
        } while (plVar7 != (long *)0x0);
      }
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 002e8b37 to 002e8b3b has its CatchHandler @ 002e8b46 */
      __throw_bad_cast();
    }
LAB_002e8aee:
    __ostream_insert<wchar_t,std::char_traits<wchar_t>>(param_1,pwVar4,sVar3);
    operator_delete__(pwVar4);
  }
  return param_1;
}



long * FUN_002e8a40(long *param_1,char *param_2)

{
  char cVar1;
  undefined4 uVar2;
  size_t sVar3;
  undefined4 *puVar4;
  undefined4 *puVar5;
  long *plVar6;
  long lVar7;
  
  if (param_2 == (char *)0x0) {
    lVar7 = *(long *)(*param_1 + -0x18) + (long)param_1;
    FUN_00301260(lVar7,*(uint *)(lVar7 + 0x20) | 1);
  }
  else {
    sVar3 = strlen(param_2);
    if (0x1ffffffffffffffe < sVar3) {
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 002e8b41 to 002e8b45 has its CatchHandler @ 002e8b3c */
      FUN_002da6d0();
    }
                    /* try { // try from 002e8a86 to 002e8a8a has its CatchHandler @ 002e8b3c */
    puVar4 = (undefined4 *)thunk_FUN_002d9490(sVar3 * 4);
    if (sVar3 != 0) {
      cVar1 = *param_2;
      plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);
      if (plVar6 != (long *)0x0) {
        param_2 = param_2 + 1;
        puVar5 = puVar4;
        do {
                    /* try { // try from 002e8ae4 to 002e8afb has its CatchHandler @ 002e8b46 */
          uVar2 = (**(code **)(*plVar6 + 0x50))(plVar6,(int)cVar1);
          *puVar5 = uVar2;
          if (puVar5 == puVar4 + (sVar3 - 1)) goto LAB_002e8aee;
          cVar1 = *param_2;
          puVar5 = puVar5 + 1;
          param_2 = param_2 + 1;
          plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);
        } while (plVar6 != (long *)0x0);
      }
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 002e8b37 to 002e8b3b has its CatchHandler @ 002e8b46 */
      FUN_00319450();
    }
LAB_002e8aee:
    FUN_002e8610(param_1,puVar4,sVar3);
    thunk_FUN_002dac60(puVar4);
  }
  return param_1;
}


PUSH R15
PUSH R14
PUSH R13
PUSH R12
MOV R12,RDI
PUSH RBP
PUSH RBX
SUB RSP,0x8
TEST RSI,RSI
JZ 0x002e8b20
MOV RDI,RSI
MOV RBP,RSI
CALL 0x00147490
MOV R14,RAX
MOV RAX,0x1ffffffffffffffe
CMP R14,RAX
JA 0x002e8b41
LEA R13,[R14*0x4]
MOV RDI,R13
CALL 0x002d9430
MOV R15,RAX
TEST R14,R14
JZ 0x002e8aee
MOV RAX,qword ptr [R12]
MOVSX ESI,byte ptr [RBP]
MOV RAX,qword ptr [RAX + -0x18]
MOV RDI,qword ptr [R12 + RAX*0x1 + 0xf0]
TEST RDI,RDI
JZ 0x002e8b37
MOV RBX,R15
ADD RBP,0x1
LEA R13,[R15 + R13*0x1 + -0x4]
JMP 0x002e8ae1
MOV RAX,qword ptr [R12]
MOVSX ESI,byte ptr [RBP]
ADD RBX,0x4
ADD RBP,0x1
MOV RAX,qword ptr [RAX + -0x18]
MOV RDI,qword ptr [R12 + RAX*0x1 + 0xf0]
TEST RDI,RDI
JZ 0x002e8b37
MOV RAX,qword ptr [RDI]
CALL qword ptr [RAX + 0x50]
MOV dword ptr [RBX],EAX
CMP RBX,R13
JNZ 0x002e8ac0
MOV RDX,R14
MOV RSI,R15
MOV RDI,R12
CALL 0x002e8610
MOV RDI,R15
CALL 0x002dac30
ADD RSP,0x8
MOV RAX,R12
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
MOV RAX,qword ptr [RDI]
MOV RDI,qword ptr [RAX + -0x18]
ADD RDI,R12
MOV ESI,dword ptr [RDI + 0x20]
OR ESI,0x1
CALL 0x00301260
JMP 0x002e8b04
CALL 0x00319450
CALL 0x002da6d0
(translation_unit "long * FUN_002e8a40(long *param_1,char *param_2)\n\n{\n  char cVar1;\n  undefined4 uVar2;\n  size_t sVar3;\n  undefined4 *puVar4;\n  undefined4 *puVar5;\n  long *plVar6;\n  long lVar7;\n  \n  if (param_2 == (char *)0x0) {\n    lVar7 = *(long *)(*param_1 + -0x18) + (long)param_1;\n    FUN_00301260(lVar7,*(uint *)(lVar7 + 0x20) | 1);\n  }\n  else {\n    sVar3 = strlen(param_2);\n    if (0x1ffffffffffffffe < sVar3) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002e8b41 to 002e8b45 has its CatchHandler @ 002e8b3c */\n      FUN_002da6d0();\n    }\n                    /* try { // try from 002e8a86 to 002e8a8a has its CatchHandler @ 002e8b3c */\n    puVar4 = (undefined4 *)thunk_FUN_002d9490(sVar3 * 4);\n    if (sVar3 != 0) {\n      cVar1 = *param_2;\n      plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);\n      if (plVar6 != (long *)0x0) {\n        param_2 = param_2 + 1;\n        puVar5 = puVar4;\n        do {\n                    /* try { // try from 002e8ae4 to 002e8afb has its CatchHandler @ 002e8b46 */\n          uVar2 = (**(code **)(*plVar6 + 0x50))(plVar6,(int)cVar1);\n          *puVar5 = uVar2;\n          if (puVar5 == puVar4 + (sVar3 - 1)) goto LAB_002e8aee;\n          cVar1 = *param_2;\n          puVar5 = puVar5 + 1;\n          param_2 = param_2 + 1;\n          plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);\n        } while (plVar6 != (long *)0x0);\n      }\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002e8b37 to 002e8b3b has its CatchHandler @ 002e8b46 */\n      FUN_00319450();\n    }\nLAB_002e8aee:\n    FUN_002e8610(param_1,puVar4,sVar3);\n    thunk_FUN_002dac60(puVar4);\n  }\n  return param_1;\n}\n\n" (function_definition "long * FUN_002e8a40(long *param_1,char *param_2)\n\n{\n  char cVar1;\n  undefined4 uVar2;\n  size_t sVar3;\n  undefined4 *puVar4;\n  undefined4 *puVar5;\n  long *plVar6;\n  long lVar7;\n  \n  if (param_2 == (char *)0x0) {\n    lVar7 = *(long *)(*param_1 + -0x18) + (long)param_1;\n    FUN_00301260(lVar7,*(uint *)(lVar7 + 0x20) | 1);\n  }\n  else {\n    sVar3 = strlen(param_2);\n    if (0x1ffffffffffffffe < sVar3) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002e8b41 to 002e8b45 has its CatchHandler @ 002e8b3c */\n      FUN_002da6d0();\n    }\n                    /* try { // try from 002e8a86 to 002e8a8a has its CatchHandler @ 002e8b3c */\n    puVar4 = (undefined4 *)thunk_FUN_002d9490(sVar3 * 4);\n    if (sVar3 != 0) {\n      cVar1 = *param_2;\n      plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);\n      if (plVar6 != (long *)0x0) {\n        param_2 = param_2 + 1;\n        puVar5 = puVar4;\n        do {\n                    /* try { // try from 002e8ae4 to 002e8afb has its CatchHandler @ 002e8b46 */\n          uVar2 = (**(code **)(*plVar6 + 0x50))(plVar6,(int)cVar1);\n          *puVar5 = uVar2;\n          if (puVar5 == puVar4 + (sVar3 - 1)) goto LAB_002e8aee;\n          cVar1 = *param_2;\n          puVar5 = puVar5 + 1;\n          param_2 = param_2 + 1;\n          plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);\n        } while (plVar6 != (long *)0x0);\n      }\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002e8b37 to 002e8b3b has its CatchHandler @ 002e8b46 */\n      FUN_00319450();\n    }\nLAB_002e8aee:\n    FUN_002e8610(param_1,puVar4,sVar3);\n    thunk_FUN_002dac60(puVar4);\n  }\n  return param_1;\n}" (sized_type_specifier "long" long) (pointer_declarator "* FUN_002e8a40(long *param_1,char *param_2)" * (function_declarator "FUN_002e8a40(long *param_1,char *param_2)" identifier (parameter_list "(long *param_1,char *param_2)" ( (parameter_declaration "long *param_1" (sized_type_specifier "long" long) (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "char *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) )))) (compound_statement "{\n  char cVar1;\n  undefined4 uVar2;\n  size_t sVar3;\n  undefined4 *puVar4;\n  undefined4 *puVar5;\n  long *plVar6;\n  long lVar7;\n  \n  if (param_2 == (char *)0x0) {\n    lVar7 = *(long *)(*param_1 + -0x18) + (long)param_1;\n    FUN_00301260(lVar7,*(uint *)(lVar7 + 0x20) | 1);\n  }\n  else {\n    sVar3 = strlen(param_2);\n    if (0x1ffffffffffffffe < sVar3) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002e8b41 to 002e8b45 has its CatchHandler @ 002e8b3c */\n      FUN_002da6d0();\n    }\n                    /* try { // try from 002e8a86 to 002e8a8a has its CatchHandler @ 002e8b3c */\n    puVar4 = (undefined4 *)thunk_FUN_002d9490(sVar3 * 4);\n    if (sVar3 != 0) {\n      cVar1 = *param_2;\n      plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);\n      if (plVar6 != (long *)0x0) {\n        param_2 = param_2 + 1;\n        puVar5 = puVar4;\n        do {\n                    /* try { // try from 002e8ae4 to 002e8afb has its CatchHandler @ 002e8b46 */\n          uVar2 = (**(code **)(*plVar6 + 0x50))(plVar6,(int)cVar1);\n          *puVar5 = uVar2;\n          if (puVar5 == puVar4 + (sVar3 - 1)) goto LAB_002e8aee;\n          cVar1 = *param_2;\n          puVar5 = puVar5 + 1;\n          param_2 = param_2 + 1;\n          plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);\n        } while (plVar6 != (long *)0x0);\n      }\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002e8b37 to 002e8b3b has its CatchHandler @ 002e8b46 */\n      FUN_00319450();\n    }\nLAB_002e8aee:\n    FUN_002e8610(param_1,puVar4,sVar3);\n    thunk_FUN_002dac60(puVar4);\n  }\n  return param_1;\n}" { (declaration "char cVar1;" primitive_type identifier ;) (declaration "undefined4 uVar2;" type_identifier identifier ;) (declaration "size_t sVar3;" primitive_type identifier ;) (declaration "undefined4 *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "undefined4 *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "long *plVar6;" (sized_type_specifier "long" long) (pointer_declarator "*plVar6" * identifier) ;) (declaration "long lVar7;" (sized_type_specifier "long" long) identifier ;) (if_statement "if (param_2 == (char *)0x0) {\n    lVar7 = *(long *)(*param_1 + -0x18) + (long)param_1;\n    FUN_00301260(lVar7,*(uint *)(lVar7 + 0x20) | 1);\n  }\n  else {\n    sVar3 = strlen(param_2);\n    if (0x1ffffffffffffffe < sVar3) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002e8b41 to 002e8b45 has its CatchHandler @ 002e8b3c */\n      FUN_002da6d0();\n    }\n                    /* try { // try from 002e8a86 to 002e8a8a has its CatchHandler @ 002e8b3c */\n    puVar4 = (undefined4 *)thunk_FUN_002d9490(sVar3 * 4);\n    if (sVar3 != 0) {\n      cVar1 = *param_2;\n      plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);\n      if (plVar6 != (long *)0x0) {\n        param_2 = param_2 + 1;\n        puVar5 = puVar4;\n        do {\n                    /* try { // try from 002e8ae4 to 002e8afb has its CatchHandler @ 002e8b46 */\n          uVar2 = (**(code **)(*plVar6 + 0x50))(plVar6,(int)cVar1);\n          *puVar5 = uVar2;\n          if (puVar5 == puVar4 + (sVar3 - 1)) goto LAB_002e8aee;\n          cVar1 = *param_2;\n          puVar5 = puVar5 + 1;\n          param_2 = param_2 + 1;\n          plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);\n        } while (plVar6 != (long *)0x0);\n      }\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002e8b37 to 002e8b3b has its CatchHandler @ 002e8b46 */\n      FUN_00319450();\n    }\nLAB_002e8aee:\n    FUN_002e8610(param_1,puVar4,sVar3);\n    thunk_FUN_002dac60(puVar4);\n  }" if (parenthesized_expression "(param_2 == (char *)0x0)" ( (binary_expression "param_2 == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    lVar7 = *(long *)(*param_1 + -0x18) + (long)param_1;\n    FUN_00301260(lVar7,*(uint *)(lVar7 + 0x20) | 1);\n  }" { (expression_statement "lVar7 = *(long *)(*param_1 + -0x18) + (long)param_1;" (assignment_expression "lVar7 = *(long *)(*param_1 + -0x18) + (long)param_1" identifier = (binary_expression "*(long *)(*param_1 + -0x18) + (long)param_1" (pointer_expression "*(long *)(*param_1 + -0x18)" * (cast_expression "(long *)(*param_1 + -0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + -0x18)" ( (binary_expression "*param_1 + -0x18" (pointer_expression "*param_1" * identifier) + number_literal) )))) + (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) (expression_statement "FUN_00301260(lVar7,*(uint *)(lVar7 + 0x20) | 1);" (call_expression "FUN_00301260(lVar7,*(uint *)(lVar7 + 0x20) | 1)" identifier (argument_list "(lVar7,*(uint *)(lVar7 + 0x20) | 1)" ( identifier , (binary_expression "*(uint *)(lVar7 + 0x20) | 1" (pointer_expression "*(uint *)(lVar7 + 0x20)" * (cast_expression "(uint *)(lVar7 + 0x20)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar7 + 0x20)" ( (binary_expression "lVar7 + 0x20" identifier + number_literal) )))) | number_literal) ))) ;) }) (else_clause "else {\n    sVar3 = strlen(param_2);\n    if (0x1ffffffffffffffe < sVar3) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002e8b41 to 002e8b45 has its CatchHandler @ 002e8b3c */\n      FUN_002da6d0();\n    }\n                    /* try { // try from 002e8a86 to 002e8a8a has its CatchHandler @ 002e8b3c */\n    puVar4 = (undefined4 *)thunk_FUN_002d9490(sVar3 * 4);\n    if (sVar3 != 0) {\n      cVar1 = *param_2;\n      plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);\n      if (plVar6 != (long *)0x0) {\n        param_2 = param_2 + 1;\n        puVar5 = puVar4;\n        do {\n                    /* try { // try from 002e8ae4 to 002e8afb has its CatchHandler @ 002e8b46 */\n          uVar2 = (**(code **)(*plVar6 + 0x50))(plVar6,(int)cVar1);\n          *puVar5 = uVar2;\n          if (puVar5 == puVar4 + (sVar3 - 1)) goto LAB_002e8aee;\n          cVar1 = *param_2;\n          puVar5 = puVar5 + 1;\n          param_2 = param_2 + 1;\n          plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);\n        } while (plVar6 != (long *)0x0);\n      }\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002e8b37 to 002e8b3b has its CatchHandler @ 002e8b46 */\n      FUN_00319450();\n    }\nLAB_002e8aee:\n    FUN_002e8610(param_1,puVar4,sVar3);\n    thunk_FUN_002dac60(puVar4);\n  }" else (compound_statement "{\n    sVar3 = strlen(param_2);\n    if (0x1ffffffffffffffe < sVar3) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002e8b41 to 002e8b45 has its CatchHandler @ 002e8b3c */\n      FUN_002da6d0();\n    }\n                    /* try { // try from 002e8a86 to 002e8a8a has its CatchHandler @ 002e8b3c */\n    puVar4 = (undefined4 *)thunk_FUN_002d9490(sVar3 * 4);\n    if (sVar3 != 0) {\n      cVar1 = *param_2;\n      plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);\n      if (plVar6 != (long *)0x0) {\n        param_2 = param_2 + 1;\n        puVar5 = puVar4;\n        do {\n                    /* try { // try from 002e8ae4 to 002e8afb has its CatchHandler @ 002e8b46 */\n          uVar2 = (**(code **)(*plVar6 + 0x50))(plVar6,(int)cVar1);\n          *puVar5 = uVar2;\n          if (puVar5 == puVar4 + (sVar3 - 1)) goto LAB_002e8aee;\n          cVar1 = *param_2;\n          puVar5 = puVar5 + 1;\n          param_2 = param_2 + 1;\n          plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);\n        } while (plVar6 != (long *)0x0);\n      }\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002e8b37 to 002e8b3b has its CatchHandler @ 002e8b46 */\n      FUN_00319450();\n    }\nLAB_002e8aee:\n    FUN_002e8610(param_1,puVar4,sVar3);\n    thunk_FUN_002dac60(puVar4);\n  }" { (expression_statement "sVar3 = strlen(param_2);" (assignment_expression "sVar3 = strlen(param_2)" identifier = (call_expression "strlen(param_2)" identifier (argument_list "(param_2)" ( identifier )))) ;) (if_statement "if (0x1ffffffffffffffe < sVar3) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002e8b41 to 002e8b45 has its CatchHandler @ 002e8b3c */\n      FUN_002da6d0();\n    }" if (parenthesized_expression "(0x1ffffffffffffffe < sVar3)" ( (binary_expression "0x1ffffffffffffffe < sVar3" number_literal < identifier) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002e8b41 to 002e8b45 has its CatchHandler @ 002e8b3c */\n      FUN_002da6d0();\n    }" { comment comment (expression_statement "FUN_002da6d0();" (call_expression "FUN_002da6d0()" identifier (argument_list "()" ( ))) ;) })) comment (expression_statement "puVar4 = (undefined4 *)thunk_FUN_002d9490(sVar3 * 4);" (assignment_expression "puVar4 = (undefined4 *)thunk_FUN_002d9490(sVar3 * 4)" identifier = (cast_expression "(undefined4 *)thunk_FUN_002d9490(sVar3 * 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "thunk_FUN_002d9490(sVar3 * 4)" identifier (argument_list "(sVar3 * 4)" ( (binary_expression "sVar3 * 4" identifier * number_literal) ))))) ;) (if_statement "if (sVar3 != 0) {\n      cVar1 = *param_2;\n      plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);\n      if (plVar6 != (long *)0x0) {\n        param_2 = param_2 + 1;\n        puVar5 = puVar4;\n        do {\n                    /* try { // try from 002e8ae4 to 002e8afb has its CatchHandler @ 002e8b46 */\n          uVar2 = (**(code **)(*plVar6 + 0x50))(plVar6,(int)cVar1);\n          *puVar5 = uVar2;\n          if (puVar5 == puVar4 + (sVar3 - 1)) goto LAB_002e8aee;\n          cVar1 = *param_2;\n          puVar5 = puVar5 + 1;\n          param_2 = param_2 + 1;\n          plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);\n        } while (plVar6 != (long *)0x0);\n      }\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002e8b37 to 002e8b3b has its CatchHandler @ 002e8b46 */\n      FUN_00319450();\n    }" if (parenthesized_expression "(sVar3 != 0)" ( (binary_expression "sVar3 != 0" identifier != number_literal) )) (compound_statement "{\n      cVar1 = *param_2;\n      plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);\n      if (plVar6 != (long *)0x0) {\n        param_2 = param_2 + 1;\n        puVar5 = puVar4;\n        do {\n                    /* try { // try from 002e8ae4 to 002e8afb has its CatchHandler @ 002e8b46 */\n          uVar2 = (**(code **)(*plVar6 + 0x50))(plVar6,(int)cVar1);\n          *puVar5 = uVar2;\n          if (puVar5 == puVar4 + (sVar3 - 1)) goto LAB_002e8aee;\n          cVar1 = *param_2;\n          puVar5 = puVar5 + 1;\n          param_2 = param_2 + 1;\n          plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);\n        } while (plVar6 != (long *)0x0);\n      }\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002e8b37 to 002e8b3b has its CatchHandler @ 002e8b46 */\n      FUN_00319450();\n    }" { (expression_statement "cVar1 = *param_2;" (assignment_expression "cVar1 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);" (assignment_expression "plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0)" identifier = (pointer_expression "*(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0)" * (cast_expression "(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0)" ( (binary_expression "(long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0" (binary_expression "(long)param_1 + *(long *)(*param_1 + -0x18)" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (pointer_expression "*(long *)(*param_1 + -0x18)" * (cast_expression "(long *)(*param_1 + -0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + -0x18)" ( (binary_expression "*param_1 + -0x18" (pointer_expression "*param_1" * identifier) + number_literal) ))))) + number_literal) ))))) ;) (if_statement "if (plVar6 != (long *)0x0) {\n        param_2 = param_2 + 1;\n        puVar5 = puVar4;\n        do {\n                    /* try { // try from 002e8ae4 to 002e8afb has its CatchHandler @ 002e8b46 */\n          uVar2 = (**(code **)(*plVar6 + 0x50))(plVar6,(int)cVar1);\n          *puVar5 = uVar2;\n          if (puVar5 == puVar4 + (sVar3 - 1)) goto LAB_002e8aee;\n          cVar1 = *param_2;\n          puVar5 = puVar5 + 1;\n          param_2 = param_2 + 1;\n          plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);\n        } while (plVar6 != (long *)0x0);\n      }" if (parenthesized_expression "(plVar6 != (long *)0x0)" ( (binary_expression "plVar6 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        param_2 = param_2 + 1;\n        puVar5 = puVar4;\n        do {\n                    /* try { // try from 002e8ae4 to 002e8afb has its CatchHandler @ 002e8b46 */\n          uVar2 = (**(code **)(*plVar6 + 0x50))(plVar6,(int)cVar1);\n          *puVar5 = uVar2;\n          if (puVar5 == puVar4 + (sVar3 - 1)) goto LAB_002e8aee;\n          cVar1 = *param_2;\n          puVar5 = puVar5 + 1;\n          param_2 = param_2 + 1;\n          plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);\n        } while (plVar6 != (long *)0x0);\n      }" { (expression_statement "param_2 = param_2 + 1;" (assignment_expression "param_2 = param_2 + 1" identifier = (binary_expression "param_2 + 1" identifier + number_literal)) ;) (expression_statement "puVar5 = puVar4;" (assignment_expression "puVar5 = puVar4" identifier = identifier) ;) (do_statement "do {\n                    /* try { // try from 002e8ae4 to 002e8afb has its CatchHandler @ 002e8b46 */\n          uVar2 = (**(code **)(*plVar6 + 0x50))(plVar6,(int)cVar1);\n          *puVar5 = uVar2;\n          if (puVar5 == puVar4 + (sVar3 - 1)) goto LAB_002e8aee;\n          cVar1 = *param_2;\n          puVar5 = puVar5 + 1;\n          param_2 = param_2 + 1;\n          plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);\n        } while (plVar6 != (long *)0x0);" do (compound_statement "{\n                    /* try { // try from 002e8ae4 to 002e8afb has its CatchHandler @ 002e8b46 */\n          uVar2 = (**(code **)(*plVar6 + 0x50))(plVar6,(int)cVar1);\n          *puVar5 = uVar2;\n          if (puVar5 == puVar4 + (sVar3 - 1)) goto LAB_002e8aee;\n          cVar1 = *param_2;\n          puVar5 = puVar5 + 1;\n          param_2 = param_2 + 1;\n          plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);\n        }" { comment (expression_statement "uVar2 = (**(code **)(*plVar6 + 0x50))(plVar6,(int)cVar1);" (assignment_expression "uVar2 = (**(code **)(*plVar6 + 0x50))(plVar6,(int)cVar1)" identifier = (call_expression "(**(code **)(*plVar6 + 0x50))(plVar6,(int)cVar1)" (parenthesized_expression "(**(code **)(*plVar6 + 0x50))" ( (pointer_expression "**(code **)(*plVar6 + 0x50)" * (pointer_expression "*(code **)(*plVar6 + 0x50)" * (cast_expression "(code **)(*plVar6 + 0x50)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar6 + 0x50)" ( (binary_expression "*plVar6 + 0x50" (pointer_expression "*plVar6" * identifier) + number_literal) ))))) )) (argument_list "(plVar6,(int)cVar1)" ( identifier , (cast_expression "(int)cVar1" ( (type_descriptor "int" primitive_type) ) identifier) )))) ;) (expression_statement "*puVar5 = uVar2;" (assignment_expression "*puVar5 = uVar2" (pointer_expression "*puVar5" * identifier) = identifier) ;) (if_statement "if (puVar5 == puVar4 + (sVar3 - 1)) goto LAB_002e8aee;" if (parenthesized_expression "(puVar5 == puVar4 + (sVar3 - 1))" ( (binary_expression "puVar5 == puVar4 + (sVar3 - 1)" identifier == (binary_expression "puVar4 + (sVar3 - 1)" identifier + (parenthesized_expression "(sVar3 - 1)" ( (binary_expression "sVar3 - 1" identifier - number_literal) )))) )) (goto_statement "goto LAB_002e8aee;" goto statement_identifier ;)) (expression_statement "cVar1 = *param_2;" (assignment_expression "cVar1 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "puVar5 = puVar5 + 1;" (assignment_expression "puVar5 = puVar5 + 1" identifier = (binary_expression "puVar5 + 1" identifier + number_literal)) ;) (expression_statement "param_2 = param_2 + 1;" (assignment_expression "param_2 = param_2 + 1" identifier = (binary_expression "param_2 + 1" identifier + number_literal)) ;) (expression_statement "plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);" (assignment_expression "plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0)" identifier = (pointer_expression "*(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0)" * (cast_expression "(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0)" ( (binary_expression "(long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0" (binary_expression "(long)param_1 + *(long *)(*param_1 + -0x18)" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (pointer_expression "*(long *)(*param_1 + -0x18)" * (cast_expression "(long *)(*param_1 + -0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + -0x18)" ( (binary_expression "*param_1 + -0x18" (pointer_expression "*param_1" * identifier) + number_literal) ))))) + number_literal) ))))) ;) }) while (parenthesized_expression "(plVar6 != (long *)0x0)" ( (binary_expression "plVar6 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) ;) })) comment comment (expression_statement "FUN_00319450();" (call_expression "FUN_00319450()" identifier (argument_list "()" ( ))) ;) })) (labeled_statement "LAB_002e8aee:\n    FUN_002e8610(param_1,puVar4,sVar3);" statement_identifier : (expression_statement "FUN_002e8610(param_1,puVar4,sVar3);" (call_expression "FUN_002e8610(param_1,puVar4,sVar3)" identifier (argument_list "(param_1,puVar4,sVar3)" ( identifier , identifier , identifier ))) ;)) (expression_statement "thunk_FUN_002dac60(puVar4);" (call_expression "thunk_FUN_002dac60(puVar4)" identifier (argument_list "(puVar4)" ( identifier ))) ;) }))) (return_statement "return param_1;" return identifier ;) })))
(translation_unit "/* WARNING: Unknown calling convention -- yet parameter storage is locked */\n/* std::wostream& std::TEMPNAMEPLACEHOLDERVALUE(std::wostream&, char const*) */\n\nwostream * std::operator<<(wostream *param_1,char *param_2)\n\n{\n  char cVar1;\n  wchar_t wVar2;\n  size_t sVar3;\n  wchar_t *pwVar4;\n  wchar_t *pwVar5;\n  char *pcVar6;\n  long *plVar7;\n  \n  if (param_2 == (char *)0x0) {\n    wios::clear((wios *)(param_1 + *(long *)(*(long *)param_1 + -0x18)),\n                *(_Ios_Iostate *)((wios *)(param_1 + *(long *)(*(long *)param_1 + -0x18)) + 0x20) |\n                _S_badbit);\n  }\n  else {\n    sVar3 = strlen(param_2);\n    if (0x1ffffffffffffffe < sVar3) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002e8b41 to 002e8b45 has its CatchHandler @ 002e8b3c */\n      __cxa_throw_bad_array_new_length();\n    }\n                    /* try { // try from 002e8a86 to 002e8a8a has its CatchHandler @ 002e8b3c */\n    pwVar4 = (wchar_t *)operator_new__(sVar3 * 4);\n    if (sVar3 != 0) {\n      cVar1 = *param_2;\n      plVar7 = *(long **)(param_1 + *(long *)(*(long *)param_1 + -0x18) + 0xf0);\n      if (plVar7 != (long *)0x0) {\n        pcVar6 = param_2 + 1;\n        pwVar5 = pwVar4;\n        do {\n                    /* try { // try from 002e8ae4 to 002e8afb has its CatchHandler @ 002e8b46 */\n          wVar2 = (**(code **)(*plVar7 + 0x50))(plVar7,(int)cVar1);\n          *pwVar5 = wVar2;\n          if (pwVar5 == pwVar4 + (sVar3 - 1)) goto LAB_002e8aee;\n          cVar1 = *pcVar6;\n          pwVar5 = pwVar5 + 1;\n          pcVar6 = pcVar6 + 1;\n          plVar7 = *(long **)(param_1 + *(long *)(*(long *)param_1 + -0x18) + 0xf0);\n        } while (plVar7 != (long *)0x0);\n      }\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002e8b37 to 002e8b3b has its CatchHandler @ 002e8b46 */\n      __throw_bad_cast();\n    }\nLAB_002e8aee:\n    __ostream_insert<wchar_t,std::char_traits<wchar_t>>(param_1,pwVar4,sVar3);\n    operator_delete__(pwVar4);\n  }\n  return param_1;\n}\n\n" comment comment (ERROR "wostream * std::operator<<(wostream *param_1,char *param_2)" (binary_expression "wostream * std::operator<<(wostream *param_1,char *param_2)" (binary_expression "wostream * std" identifier * identifier) (ERROR "::operator" : : identifier) << (parenthesized_expression "(wostream *param_1,char *param_2)" ( (comma_expression "wostream *param_1,char *param_2" (binary_expression "wostream *param_1" identifier * identifier) , (binary_expression "char *param_2" identifier * identifier)) )))) (compound_statement "{\n  char cVar1;\n  wchar_t wVar2;\n  size_t sVar3;\n  wchar_t *pwVar4;\n  wchar_t *pwVar5;\n  char *pcVar6;\n  long *plVar7;\n  \n  if (param_2 == (char *)0x0) {\n    wios::clear((wios *)(param_1 + *(long *)(*(long *)param_1 + -0x18)),\n                *(_Ios_Iostate *)((wios *)(param_1 + *(long *)(*(long *)param_1 + -0x18)) + 0x20) |\n                _S_badbit);\n  }\n  else {\n    sVar3 = strlen(param_2);\n    if (0x1ffffffffffffffe < sVar3) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002e8b41 to 002e8b45 has its CatchHandler @ 002e8b3c */\n      __cxa_throw_bad_array_new_length();\n    }\n                    /* try { // try from 002e8a86 to 002e8a8a has its CatchHandler @ 002e8b3c */\n    pwVar4 = (wchar_t *)operator_new__(sVar3 * 4);\n    if (sVar3 != 0) {\n      cVar1 = *param_2;\n      plVar7 = *(long **)(param_1 + *(long *)(*(long *)param_1 + -0x18) + 0xf0);\n      if (plVar7 != (long *)0x0) {\n        pcVar6 = param_2 + 1;\n        pwVar5 = pwVar4;\n        do {\n                    /* try { // try from 002e8ae4 to 002e8afb has its CatchHandler @ 002e8b46 */\n          wVar2 = (**(code **)(*plVar7 + 0x50))(plVar7,(int)cVar1);\n          *pwVar5 = wVar2;\n          if (pwVar5 == pwVar4 + (sVar3 - 1)) goto LAB_002e8aee;\n          cVar1 = *pcVar6;\n          pwVar5 = pwVar5 + 1;\n          pcVar6 = pcVar6 + 1;\n          plVar7 = *(long **)(param_1 + *(long *)(*(long *)param_1 + -0x18) + 0xf0);\n        } while (plVar7 != (long *)0x0);\n      }\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002e8b37 to 002e8b3b has its CatchHandler @ 002e8b46 */\n      __throw_bad_cast();\n    }\nLAB_002e8aee:\n    __ostream_insert<wchar_t,std::char_traits<wchar_t>>(param_1,pwVar4,sVar3);\n    operator_delete__(pwVar4);\n  }\n  return param_1;\n}" { (declaration "char cVar1;" primitive_type identifier ;) (declaration "wchar_t wVar2;" type_identifier identifier ;) (declaration "size_t sVar3;" primitive_type identifier ;) (declaration "wchar_t *pwVar4;" type_identifier (pointer_declarator "*pwVar4" * identifier) ;) (declaration "wchar_t *pwVar5;" type_identifier (pointer_declarator "*pwVar5" * identifier) ;) (declaration "char *pcVar6;" primitive_type (pointer_declarator "*pcVar6" * identifier) ;) (declaration "long *plVar7;" (sized_type_specifier "long" long) (pointer_declarator "*plVar7" * identifier) ;) (if_statement "if (param_2 == (char *)0x0) {\n    wios::clear((wios *)(param_1 + *(long *)(*(long *)param_1 + -0x18)),\n                *(_Ios_Iostate *)((wios *)(param_1 + *(long *)(*(long *)param_1 + -0x18)) + 0x20) |\n                _S_badbit);\n  }\n  else {\n    sVar3 = strlen(param_2);\n    if (0x1ffffffffffffffe < sVar3) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002e8b41 to 002e8b45 has its CatchHandler @ 002e8b3c */\n      __cxa_throw_bad_array_new_length();\n    }\n                    /* try { // try from 002e8a86 to 002e8a8a has its CatchHandler @ 002e8b3c */\n    pwVar4 = (wchar_t *)operator_new__(sVar3 * 4);\n    if (sVar3 != 0) {\n      cVar1 = *param_2;\n      plVar7 = *(long **)(param_1 + *(long *)(*(long *)param_1 + -0x18) + 0xf0);\n      if (plVar7 != (long *)0x0) {\n        pcVar6 = param_2 + 1;\n        pwVar5 = pwVar4;\n        do {\n                    /* try { // try from 002e8ae4 to 002e8afb has its CatchHandler @ 002e8b46 */\n          wVar2 = (**(code **)(*plVar7 + 0x50))(plVar7,(int)cVar1);\n          *pwVar5 = wVar2;\n          if (pwVar5 == pwVar4 + (sVar3 - 1)) goto LAB_002e8aee;\n          cVar1 = *pcVar6;\n          pwVar5 = pwVar5 + 1;\n          pcVar6 = pcVar6 + 1;\n          plVar7 = *(long **)(param_1 + *(long *)(*(long *)param_1 + -0x18) + 0xf0);\n        } while (plVar7 != (long *)0x0);\n      }\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002e8b37 to 002e8b3b has its CatchHandler @ 002e8b46 */\n      __throw_bad_cast();\n    }\nLAB_002e8aee:\n    __ostream_insert<wchar_t,std::char_traits<wchar_t>>(param_1,pwVar4,sVar3);\n    operator_delete__(pwVar4);\n  }" if (parenthesized_expression "(param_2 == (char *)0x0)" ( (binary_expression "param_2 == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    wios::clear((wios *)(param_1 + *(long *)(*(long *)param_1 + -0x18)),\n                *(_Ios_Iostate *)((wios *)(param_1 + *(long *)(*(long *)param_1 + -0x18)) + 0x20) |\n                _S_badbit);\n  }" { (labeled_statement "wios::clear((wios *)(param_1 + *(long *)(*(long *)param_1 + -0x18)),\n                *(_Ios_Iostate *)((wios *)(param_1 + *(long *)(*(long *)param_1 + -0x18)) + 0x20) |\n                _S_badbit);" statement_identifier : (ERROR ":" :) (expression_statement "clear((wios *)(param_1 + *(long *)(*(long *)param_1 + -0x18)),\n                *(_Ios_Iostate *)((wios *)(param_1 + *(long *)(*(long *)param_1 + -0x18)) + 0x20) |\n                _S_badbit);" (call_expression "clear((wios *)(param_1 + *(long *)(*(long *)param_1 + -0x18)),\n                *(_Ios_Iostate *)((wios *)(param_1 + *(long *)(*(long *)param_1 + -0x18)) + 0x20) |\n                _S_badbit)" identifier (argument_list "((wios *)(param_1 + *(long *)(*(long *)param_1 + -0x18)),\n                *(_Ios_Iostate *)((wios *)(param_1 + *(long *)(*(long *)param_1 + -0x18)) + 0x20) |\n                _S_badbit)" ( (cast_expression "(wios *)(param_1 + *(long *)(*(long *)param_1 + -0x18))" ( (type_descriptor "wios *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + *(long *)(*(long *)param_1 + -0x18))" ( (binary_expression "param_1 + *(long *)(*(long *)param_1 + -0x18)" identifier + (pointer_expression "*(long *)(*(long *)param_1 + -0x18)" * (cast_expression "(long *)(*(long *)param_1 + -0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)param_1 + -0x18)" ( (binary_expression "*(long *)param_1 + -0x18" (pointer_expression "*(long *)param_1" * (cast_expression "(long *)param_1" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) identifier)) + number_literal) ))))) ))) , (binary_expression "*(_Ios_Iostate *)((wios *)(param_1 + *(long *)(*(long *)param_1 + -0x18)) + 0x20) |\n                _S_badbit" (pointer_expression "*(_Ios_Iostate *)((wios *)(param_1 + *(long *)(*(long *)param_1 + -0x18)) + 0x20)" * (cast_expression "(_Ios_Iostate *)((wios *)(param_1 + *(long *)(*(long *)param_1 + -0x18)) + 0x20)" ( (type_descriptor "_Ios_Iostate *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((wios *)(param_1 + *(long *)(*(long *)param_1 + -0x18)) + 0x20)" ( (binary_expression "(wios *)(param_1 + *(long *)(*(long *)param_1 + -0x18)) + 0x20" (cast_expression "(wios *)(param_1 + *(long *)(*(long *)param_1 + -0x18))" ( (type_descriptor "wios *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + *(long *)(*(long *)param_1 + -0x18))" ( (binary_expression "param_1 + *(long *)(*(long *)param_1 + -0x18)" identifier + (pointer_expression "*(long *)(*(long *)param_1 + -0x18)" * (cast_expression "(long *)(*(long *)param_1 + -0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)param_1 + -0x18)" ( (binary_expression "*(long *)param_1 + -0x18" (pointer_expression "*(long *)param_1" * (cast_expression "(long *)param_1" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) identifier)) + number_literal) ))))) ))) + number_literal) )))) | identifier) ))) ;)) }) (else_clause "else {\n    sVar3 = strlen(param_2);\n    if (0x1ffffffffffffffe < sVar3) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002e8b41 to 002e8b45 has its CatchHandler @ 002e8b3c */\n      __cxa_throw_bad_array_new_length();\n    }\n                    /* try { // try from 002e8a86 to 002e8a8a has its CatchHandler @ 002e8b3c */\n    pwVar4 = (wchar_t *)operator_new__(sVar3 * 4);\n    if (sVar3 != 0) {\n      cVar1 = *param_2;\n      plVar7 = *(long **)(param_1 + *(long *)(*(long *)param_1 + -0x18) + 0xf0);\n      if (plVar7 != (long *)0x0) {\n        pcVar6 = param_2 + 1;\n        pwVar5 = pwVar4;\n        do {\n                    /* try { // try from 002e8ae4 to 002e8afb has its CatchHandler @ 002e8b46 */\n          wVar2 = (**(code **)(*plVar7 + 0x50))(plVar7,(int)cVar1);\n          *pwVar5 = wVar2;\n          if (pwVar5 == pwVar4 + (sVar3 - 1)) goto LAB_002e8aee;\n          cVar1 = *pcVar6;\n          pwVar5 = pwVar5 + 1;\n          pcVar6 = pcVar6 + 1;\n          plVar7 = *(long **)(param_1 + *(long *)(*(long *)param_1 + -0x18) + 0xf0);\n        } while (plVar7 != (long *)0x0);\n      }\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002e8b37 to 002e8b3b has its CatchHandler @ 002e8b46 */\n      __throw_bad_cast();\n    }\nLAB_002e8aee:\n    __ostream_insert<wchar_t,std::char_traits<wchar_t>>(param_1,pwVar4,sVar3);\n    operator_delete__(pwVar4);\n  }" else (compound_statement "{\n    sVar3 = strlen(param_2);\n    if (0x1ffffffffffffffe < sVar3) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002e8b41 to 002e8b45 has its CatchHandler @ 002e8b3c */\n      __cxa_throw_bad_array_new_length();\n    }\n                    /* try { // try from 002e8a86 to 002e8a8a has its CatchHandler @ 002e8b3c */\n    pwVar4 = (wchar_t *)operator_new__(sVar3 * 4);\n    if (sVar3 != 0) {\n      cVar1 = *param_2;\n      plVar7 = *(long **)(param_1 + *(long *)(*(long *)param_1 + -0x18) + 0xf0);\n      if (plVar7 != (long *)0x0) {\n        pcVar6 = param_2 + 1;\n        pwVar5 = pwVar4;\n        do {\n                    /* try { // try from 002e8ae4 to 002e8afb has its CatchHandler @ 002e8b46 */\n          wVar2 = (**(code **)(*plVar7 + 0x50))(plVar7,(int)cVar1);\n          *pwVar5 = wVar2;\n          if (pwVar5 == pwVar4 + (sVar3 - 1)) goto LAB_002e8aee;\n          cVar1 = *pcVar6;\n          pwVar5 = pwVar5 + 1;\n          pcVar6 = pcVar6 + 1;\n          plVar7 = *(long **)(param_1 + *(long *)(*(long *)param_1 + -0x18) + 0xf0);\n        } while (plVar7 != (long *)0x0);\n      }\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002e8b37 to 002e8b3b has its CatchHandler @ 002e8b46 */\n      __throw_bad_cast();\n    }\nLAB_002e8aee:\n    __ostream_insert<wchar_t,std::char_traits<wchar_t>>(param_1,pwVar4,sVar3);\n    operator_delete__(pwVar4);\n  }" { (expression_statement "sVar3 = strlen(param_2);" (assignment_expression "sVar3 = strlen(param_2)" identifier = (call_expression "strlen(param_2)" identifier (argument_list "(param_2)" ( identifier )))) ;) (if_statement "if (0x1ffffffffffffffe < sVar3) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002e8b41 to 002e8b45 has its CatchHandler @ 002e8b3c */\n      __cxa_throw_bad_array_new_length();\n    }" if (parenthesized_expression "(0x1ffffffffffffffe < sVar3)" ( (binary_expression "0x1ffffffffffffffe < sVar3" number_literal < identifier) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002e8b41 to 002e8b45 has its CatchHandler @ 002e8b3c */\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 "pwVar4 = (wchar_t *)operator_new__(sVar3 * 4);" (assignment_expression "pwVar4 = (wchar_t *)operator_new__(sVar3 * 4)" identifier = (cast_expression "(wchar_t *)operator_new__(sVar3 * 4)" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "operator_new__(sVar3 * 4)" identifier (argument_list "(sVar3 * 4)" ( (binary_expression "sVar3 * 4" identifier * number_literal) ))))) ;) (if_statement "if (sVar3 != 0) {\n      cVar1 = *param_2;\n      plVar7 = *(long **)(param_1 + *(long *)(*(long *)param_1 + -0x18) + 0xf0);\n      if (plVar7 != (long *)0x0) {\n        pcVar6 = param_2 + 1;\n        pwVar5 = pwVar4;\n        do {\n                    /* try { // try from 002e8ae4 to 002e8afb has its CatchHandler @ 002e8b46 */\n          wVar2 = (**(code **)(*plVar7 + 0x50))(plVar7,(int)cVar1);\n          *pwVar5 = wVar2;\n          if (pwVar5 == pwVar4 + (sVar3 - 1)) goto LAB_002e8aee;\n          cVar1 = *pcVar6;\n          pwVar5 = pwVar5 + 1;\n          pcVar6 = pcVar6 + 1;\n          plVar7 = *(long **)(param_1 + *(long *)(*(long *)param_1 + -0x18) + 0xf0);\n        } while (plVar7 != (long *)0x0);\n      }\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002e8b37 to 002e8b3b has its CatchHandler @ 002e8b46 */\n      __throw_bad_cast();\n    }" if (parenthesized_expression "(sVar3 != 0)" ( (binary_expression "sVar3 != 0" identifier != number_literal) )) (compound_statement "{\n      cVar1 = *param_2;\n      plVar7 = *(long **)(param_1 + *(long *)(*(long *)param_1 + -0x18) + 0xf0);\n      if (plVar7 != (long *)0x0) {\n        pcVar6 = param_2 + 1;\n        pwVar5 = pwVar4;\n        do {\n                    /* try { // try from 002e8ae4 to 002e8afb has its CatchHandler @ 002e8b46 */\n          wVar2 = (**(code **)(*plVar7 + 0x50))(plVar7,(int)cVar1);\n          *pwVar5 = wVar2;\n          if (pwVar5 == pwVar4 + (sVar3 - 1)) goto LAB_002e8aee;\n          cVar1 = *pcVar6;\n          pwVar5 = pwVar5 + 1;\n          pcVar6 = pcVar6 + 1;\n          plVar7 = *(long **)(param_1 + *(long *)(*(long *)param_1 + -0x18) + 0xf0);\n        } while (plVar7 != (long *)0x0);\n      }\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002e8b37 to 002e8b3b has its CatchHandler @ 002e8b46 */\n      __throw_bad_cast();\n    }" { (expression_statement "cVar1 = *param_2;" (assignment_expression "cVar1 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "plVar7 = *(long **)(param_1 + *(long *)(*(long *)param_1 + -0x18) + 0xf0);" (assignment_expression "plVar7 = *(long **)(param_1 + *(long *)(*(long *)param_1 + -0x18) + 0xf0)" identifier = (pointer_expression "*(long **)(param_1 + *(long *)(*(long *)param_1 + -0x18) + 0xf0)" * (cast_expression "(long **)(param_1 + *(long *)(*(long *)param_1 + -0x18) + 0xf0)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + *(long *)(*(long *)param_1 + -0x18) + 0xf0)" ( (binary_expression "param_1 + *(long *)(*(long *)param_1 + -0x18) + 0xf0" (binary_expression "param_1 + *(long *)(*(long *)param_1 + -0x18)" identifier + (pointer_expression "*(long *)(*(long *)param_1 + -0x18)" * (cast_expression "(long *)(*(long *)param_1 + -0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)param_1 + -0x18)" ( (binary_expression "*(long *)param_1 + -0x18" (pointer_expression "*(long *)param_1" * (cast_expression "(long *)param_1" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) identifier)) + number_literal) ))))) + number_literal) ))))) ;) (if_statement "if (plVar7 != (long *)0x0) {\n        pcVar6 = param_2 + 1;\n        pwVar5 = pwVar4;\n        do {\n                    /* try { // try from 002e8ae4 to 002e8afb has its CatchHandler @ 002e8b46 */\n          wVar2 = (**(code **)(*plVar7 + 0x50))(plVar7,(int)cVar1);\n          *pwVar5 = wVar2;\n          if (pwVar5 == pwVar4 + (sVar3 - 1)) goto LAB_002e8aee;\n          cVar1 = *pcVar6;\n          pwVar5 = pwVar5 + 1;\n          pcVar6 = pcVar6 + 1;\n          plVar7 = *(long **)(param_1 + *(long *)(*(long *)param_1 + -0x18) + 0xf0);\n        } while (plVar7 != (long *)0x0);\n      }" if (parenthesized_expression "(plVar7 != (long *)0x0)" ( (binary_expression "plVar7 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        pcVar6 = param_2 + 1;\n        pwVar5 = pwVar4;\n        do {\n                    /* try { // try from 002e8ae4 to 002e8afb has its CatchHandler @ 002e8b46 */\n          wVar2 = (**(code **)(*plVar7 + 0x50))(plVar7,(int)cVar1);\n          *pwVar5 = wVar2;\n          if (pwVar5 == pwVar4 + (sVar3 - 1)) goto LAB_002e8aee;\n          cVar1 = *pcVar6;\n          pwVar5 = pwVar5 + 1;\n          pcVar6 = pcVar6 + 1;\n          plVar7 = *(long **)(param_1 + *(long *)(*(long *)param_1 + -0x18) + 0xf0);\n        } while (plVar7 != (long *)0x0);\n      }" { (expression_statement "pcVar6 = param_2 + 1;" (assignment_expression "pcVar6 = param_2 + 1" identifier = (binary_expression "param_2 + 1" identifier + number_literal)) ;) (expression_statement "pwVar5 = pwVar4;" (assignment_expression "pwVar5 = pwVar4" identifier = identifier) ;) (do_statement "do {\n                    /* try { // try from 002e8ae4 to 002e8afb has its CatchHandler @ 002e8b46 */\n          wVar2 = (**(code **)(*plVar7 + 0x50))(plVar7,(int)cVar1);\n          *pwVar5 = wVar2;\n          if (pwVar5 == pwVar4 + (sVar3 - 1)) goto LAB_002e8aee;\n          cVar1 = *pcVar6;\n          pwVar5 = pwVar5 + 1;\n          pcVar6 = pcVar6 + 1;\n          plVar7 = *(long **)(param_1 + *(long *)(*(long *)param_1 + -0x18) + 0xf0);\n        } while (plVar7 != (long *)0x0);" do (compound_statement "{\n                    /* try { // try from 002e8ae4 to 002e8afb has its CatchHandler @ 002e8b46 */\n          wVar2 = (**(code **)(*plVar7 + 0x50))(plVar7,(int)cVar1);\n          *pwVar5 = wVar2;\n          if (pwVar5 == pwVar4 + (sVar3 - 1)) goto LAB_002e8aee;\n          cVar1 = *pcVar6;\n          pwVar5 = pwVar5 + 1;\n          pcVar6 = pcVar6 + 1;\n          plVar7 = *(long **)(param_1 + *(long *)(*(long *)param_1 + -0x18) + 0xf0);\n        }" { comment (expression_statement "wVar2 = (**(code **)(*plVar7 + 0x50))(plVar7,(int)cVar1);" (assignment_expression "wVar2 = (**(code **)(*plVar7 + 0x50))(plVar7,(int)cVar1)" identifier = (call_expression "(**(code **)(*plVar7 + 0x50))(plVar7,(int)cVar1)" (parenthesized_expression "(**(code **)(*plVar7 + 0x50))" ( (pointer_expression "**(code **)(*plVar7 + 0x50)" * (pointer_expression "*(code **)(*plVar7 + 0x50)" * (cast_expression "(code **)(*plVar7 + 0x50)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar7 + 0x50)" ( (binary_expression "*plVar7 + 0x50" (pointer_expression "*plVar7" * identifier) + number_literal) ))))) )) (argument_list "(plVar7,(int)cVar1)" ( identifier , (cast_expression "(int)cVar1" ( (type_descriptor "int" primitive_type) ) identifier) )))) ;) (expression_statement "*pwVar5 = wVar2;" (assignment_expression "*pwVar5 = wVar2" (pointer_expression "*pwVar5" * identifier) = identifier) ;) (if_statement "if (pwVar5 == pwVar4 + (sVar3 - 1)) goto LAB_002e8aee;" if (parenthesized_expression "(pwVar5 == pwVar4 + (sVar3 - 1))" ( (binary_expression "pwVar5 == pwVar4 + (sVar3 - 1)" identifier == (binary_expression "pwVar4 + (sVar3 - 1)" identifier + (parenthesized_expression "(sVar3 - 1)" ( (binary_expression "sVar3 - 1" identifier - number_literal) )))) )) (goto_statement "goto LAB_002e8aee;" goto statement_identifier ;)) (expression_statement "cVar1 = *pcVar6;" (assignment_expression "cVar1 = *pcVar6" identifier = (pointer_expression "*pcVar6" * identifier)) ;) (expression_statement "pwVar5 = pwVar5 + 1;" (assignment_expression "pwVar5 = pwVar5 + 1" identifier = (binary_expression "pwVar5 + 1" identifier + number_literal)) ;) (expression_statement "pcVar6 = pcVar6 + 1;" (assignment_expression "pcVar6 = pcVar6 + 1" identifier = (binary_expression "pcVar6 + 1" identifier + number_literal)) ;) (expression_statement "plVar7 = *(long **)(param_1 + *(long *)(*(long *)param_1 + -0x18) + 0xf0);" (assignment_expression "plVar7 = *(long **)(param_1 + *(long *)(*(long *)param_1 + -0x18) + 0xf0)" identifier = (pointer_expression "*(long **)(param_1 + *(long *)(*(long *)param_1 + -0x18) + 0xf0)" * (cast_expression "(long **)(param_1 + *(long *)(*(long *)param_1 + -0x18) + 0xf0)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + *(long *)(*(long *)param_1 + -0x18) + 0xf0)" ( (binary_expression "param_1 + *(long *)(*(long *)param_1 + -0x18) + 0xf0" (binary_expression "param_1 + *(long *)(*(long *)param_1 + -0x18)" identifier + (pointer_expression "*(long *)(*(long *)param_1 + -0x18)" * (cast_expression "(long *)(*(long *)param_1 + -0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)param_1 + -0x18)" ( (binary_expression "*(long *)param_1 + -0x18" (pointer_expression "*(long *)param_1" * (cast_expression "(long *)param_1" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) identifier)) + number_literal) ))))) + number_literal) ))))) ;) }) while (parenthesized_expression "(plVar7 != (long *)0x0)" ( (binary_expression "plVar7 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) ;) })) comment comment (expression_statement "__throw_bad_cast();" (call_expression "__throw_bad_cast()" identifier (argument_list "()" ( ))) ;) })) (labeled_statement "LAB_002e8aee:\n    __ostream_insert<wchar_t,std::char_traits<wchar_t>>(param_1,pwVar4,sVar3);" statement_identifier : (ERROR "__ostream_insert<wchar_t,std::" (comma_expression "__ostream_insert<wchar_t,std" (binary_expression "__ostream_insert<wchar_t" identifier < identifier) , identifier) : :) (expression_statement "char_traits<wchar_t>>(param_1,pwVar4,sVar3);" (binary_expression "char_traits<wchar_t>>(param_1,pwVar4,sVar3)" identifier < (binary_expression "wchar_t>>(param_1,pwVar4,sVar3)" identifier >> (parenthesized_expression "(param_1,pwVar4,sVar3)" ( (comma_expression "param_1,pwVar4,sVar3" identifier , (comma_expression "pwVar4,sVar3" identifier , identifier)) )))) ;)) (expression_statement "operator_delete__(pwVar4);" (call_expression "operator_delete__(pwVar4)" identifier (argument_list "(pwVar4)" ( identifier ))) ;) }))) (return_statement "return param_1;" return identifier ;) }))
(translation_unit "long * FUN_002e8a40(long *param_1,char *param_2)\n\n{\n  char cVar1;\n  undefined4 uVar2;\n  size_t sVar3;\n  undefined4 *puVar4;\n  undefined4 *puVar5;\n  long *plVar6;\n  long lVar7;\n  \n  if (param_2 == (char *)0x0) {\n    lVar7 = *(long *)(*param_1 + -0x18) + (long)param_1;\n    FUN_00301260(lVar7,*(uint *)(lVar7 + 0x20) | 1);\n  }\n  else {\n    sVar3 = strlen(param_2);\n    if (0x1ffffffffffffffe < sVar3) {\n                    \n                    \n      FUN_002da6d0();\n    }\n                    \n    puVar4 = (undefined4 *)thunk_FUN_002d9490(sVar3 * 4);\n    if (sVar3 != 0) {\n      cVar1 = *param_2;\n      plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);\n      if (plVar6 != (long *)0x0) {\n        param_2 = param_2 + 1;\n        puVar5 = puVar4;\n        do {\n                    \n          uVar2 = (**(code **)(*plVar6 + 0x50))(plVar6,(int)cVar1);\n          *puVar5 = uVar2;\n          if (puVar5 == puVar4 + (sVar3 - 1)) goto LAB_002e8aee;\n          cVar1 = *param_2;\n          puVar5 = puVar5 + 1;\n          param_2 = param_2 + 1;\n          plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);\n        } while (plVar6 != (long *)0x0);\n      }\n                    \n                    \n      FUN_00319450();\n    }\nLAB_002e8aee:\n    FUN_002e8610(param_1,puVar4,sVar3);\n    thunk_FUN_002dac60(puVar4);\n  }\n  return param_1;\n}\n\n" (function_definition "long * FUN_002e8a40(long *param_1,char *param_2)\n\n{\n  char cVar1;\n  undefined4 uVar2;\n  size_t sVar3;\n  undefined4 *puVar4;\n  undefined4 *puVar5;\n  long *plVar6;\n  long lVar7;\n  \n  if (param_2 == (char *)0x0) {\n    lVar7 = *(long *)(*param_1 + -0x18) + (long)param_1;\n    FUN_00301260(lVar7,*(uint *)(lVar7 + 0x20) | 1);\n  }\n  else {\n    sVar3 = strlen(param_2);\n    if (0x1ffffffffffffffe < sVar3) {\n                    \n                    \n      FUN_002da6d0();\n    }\n                    \n    puVar4 = (undefined4 *)thunk_FUN_002d9490(sVar3 * 4);\n    if (sVar3 != 0) {\n      cVar1 = *param_2;\n      plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);\n      if (plVar6 != (long *)0x0) {\n        param_2 = param_2 + 1;\n        puVar5 = puVar4;\n        do {\n                    \n          uVar2 = (**(code **)(*plVar6 + 0x50))(plVar6,(int)cVar1);\n          *puVar5 = uVar2;\n          if (puVar5 == puVar4 + (sVar3 - 1)) goto LAB_002e8aee;\n          cVar1 = *param_2;\n          puVar5 = puVar5 + 1;\n          param_2 = param_2 + 1;\n          plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);\n        } while (plVar6 != (long *)0x0);\n      }\n                    \n                    \n      FUN_00319450();\n    }\nLAB_002e8aee:\n    FUN_002e8610(param_1,puVar4,sVar3);\n    thunk_FUN_002dac60(puVar4);\n  }\n  return param_1;\n}" (sized_type_specifier "long" long) (pointer_declarator "* FUN_002e8a40(long *param_1,char *param_2)" * (function_declarator "FUN_002e8a40(long *param_1,char *param_2)" identifier (parameter_list "(long *param_1,char *param_2)" ( (parameter_declaration "long *param_1" (sized_type_specifier "long" long) (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "char *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) )))) (compound_statement "{\n  char cVar1;\n  undefined4 uVar2;\n  size_t sVar3;\n  undefined4 *puVar4;\n  undefined4 *puVar5;\n  long *plVar6;\n  long lVar7;\n  \n  if (param_2 == (char *)0x0) {\n    lVar7 = *(long *)(*param_1 + -0x18) + (long)param_1;\n    FUN_00301260(lVar7,*(uint *)(lVar7 + 0x20) | 1);\n  }\n  else {\n    sVar3 = strlen(param_2);\n    if (0x1ffffffffffffffe < sVar3) {\n                    \n                    \n      FUN_002da6d0();\n    }\n                    \n    puVar4 = (undefined4 *)thunk_FUN_002d9490(sVar3 * 4);\n    if (sVar3 != 0) {\n      cVar1 = *param_2;\n      plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);\n      if (plVar6 != (long *)0x0) {\n        param_2 = param_2 + 1;\n        puVar5 = puVar4;\n        do {\n                    \n          uVar2 = (**(code **)(*plVar6 + 0x50))(plVar6,(int)cVar1);\n          *puVar5 = uVar2;\n          if (puVar5 == puVar4 + (sVar3 - 1)) goto LAB_002e8aee;\n          cVar1 = *param_2;\n          puVar5 = puVar5 + 1;\n          param_2 = param_2 + 1;\n          plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);\n        } while (plVar6 != (long *)0x0);\n      }\n                    \n                    \n      FUN_00319450();\n    }\nLAB_002e8aee:\n    FUN_002e8610(param_1,puVar4,sVar3);\n    thunk_FUN_002dac60(puVar4);\n  }\n  return param_1;\n}" { (declaration "char cVar1;" primitive_type identifier ;) (declaration "undefined4 uVar2;" type_identifier identifier ;) (declaration "size_t sVar3;" primitive_type identifier ;) (declaration "undefined4 *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "undefined4 *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "long *plVar6;" (sized_type_specifier "long" long) (pointer_declarator "*plVar6" * identifier) ;) (declaration "long lVar7;" (sized_type_specifier "long" long) identifier ;) (if_statement "if (param_2 == (char *)0x0) {\n    lVar7 = *(long *)(*param_1 + -0x18) + (long)param_1;\n    FUN_00301260(lVar7,*(uint *)(lVar7 + 0x20) | 1);\n  }\n  else {\n    sVar3 = strlen(param_2);\n    if (0x1ffffffffffffffe < sVar3) {\n                    \n                    \n      FUN_002da6d0();\n    }\n                    \n    puVar4 = (undefined4 *)thunk_FUN_002d9490(sVar3 * 4);\n    if (sVar3 != 0) {\n      cVar1 = *param_2;\n      plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);\n      if (plVar6 != (long *)0x0) {\n        param_2 = param_2 + 1;\n        puVar5 = puVar4;\n        do {\n                    \n          uVar2 = (**(code **)(*plVar6 + 0x50))(plVar6,(int)cVar1);\n          *puVar5 = uVar2;\n          if (puVar5 == puVar4 + (sVar3 - 1)) goto LAB_002e8aee;\n          cVar1 = *param_2;\n          puVar5 = puVar5 + 1;\n          param_2 = param_2 + 1;\n          plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);\n        } while (plVar6 != (long *)0x0);\n      }\n                    \n                    \n      FUN_00319450();\n    }\nLAB_002e8aee:\n    FUN_002e8610(param_1,puVar4,sVar3);\n    thunk_FUN_002dac60(puVar4);\n  }" if (parenthesized_expression "(param_2 == (char *)0x0)" ( (binary_expression "param_2 == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    lVar7 = *(long *)(*param_1 + -0x18) + (long)param_1;\n    FUN_00301260(lVar7,*(uint *)(lVar7 + 0x20) | 1);\n  }" { (expression_statement "lVar7 = *(long *)(*param_1 + -0x18) + (long)param_1;" (assignment_expression "lVar7 = *(long *)(*param_1 + -0x18) + (long)param_1" identifier = (binary_expression "*(long *)(*param_1 + -0x18) + (long)param_1" (pointer_expression "*(long *)(*param_1 + -0x18)" * (cast_expression "(long *)(*param_1 + -0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + -0x18)" ( (binary_expression "*param_1 + -0x18" (pointer_expression "*param_1" * identifier) + number_literal) )))) + (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) (expression_statement "FUN_00301260(lVar7,*(uint *)(lVar7 + 0x20) | 1);" (call_expression "FUN_00301260(lVar7,*(uint *)(lVar7 + 0x20) | 1)" identifier (argument_list "(lVar7,*(uint *)(lVar7 + 0x20) | 1)" ( identifier , (binary_expression "*(uint *)(lVar7 + 0x20) | 1" (pointer_expression "*(uint *)(lVar7 + 0x20)" * (cast_expression "(uint *)(lVar7 + 0x20)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar7 + 0x20)" ( (binary_expression "lVar7 + 0x20" identifier + number_literal) )))) | number_literal) ))) ;) }) (else_clause "else {\n    sVar3 = strlen(param_2);\n    if (0x1ffffffffffffffe < sVar3) {\n                    \n                    \n      FUN_002da6d0();\n    }\n                    \n    puVar4 = (undefined4 *)thunk_FUN_002d9490(sVar3 * 4);\n    if (sVar3 != 0) {\n      cVar1 = *param_2;\n      plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);\n      if (plVar6 != (long *)0x0) {\n        param_2 = param_2 + 1;\n        puVar5 = puVar4;\n        do {\n                    \n          uVar2 = (**(code **)(*plVar6 + 0x50))(plVar6,(int)cVar1);\n          *puVar5 = uVar2;\n          if (puVar5 == puVar4 + (sVar3 - 1)) goto LAB_002e8aee;\n          cVar1 = *param_2;\n          puVar5 = puVar5 + 1;\n          param_2 = param_2 + 1;\n          plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);\n        } while (plVar6 != (long *)0x0);\n      }\n                    \n                    \n      FUN_00319450();\n    }\nLAB_002e8aee:\n    FUN_002e8610(param_1,puVar4,sVar3);\n    thunk_FUN_002dac60(puVar4);\n  }" else (compound_statement "{\n    sVar3 = strlen(param_2);\n    if (0x1ffffffffffffffe < sVar3) {\n                    \n                    \n      FUN_002da6d0();\n    }\n                    \n    puVar4 = (undefined4 *)thunk_FUN_002d9490(sVar3 * 4);\n    if (sVar3 != 0) {\n      cVar1 = *param_2;\n      plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);\n      if (plVar6 != (long *)0x0) {\n        param_2 = param_2 + 1;\n        puVar5 = puVar4;\n        do {\n                    \n          uVar2 = (**(code **)(*plVar6 + 0x50))(plVar6,(int)cVar1);\n          *puVar5 = uVar2;\n          if (puVar5 == puVar4 + (sVar3 - 1)) goto LAB_002e8aee;\n          cVar1 = *param_2;\n          puVar5 = puVar5 + 1;\n          param_2 = param_2 + 1;\n          plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);\n        } while (plVar6 != (long *)0x0);\n      }\n                    \n                    \n      FUN_00319450();\n    }\nLAB_002e8aee:\n    FUN_002e8610(param_1,puVar4,sVar3);\n    thunk_FUN_002dac60(puVar4);\n  }" { (expression_statement "sVar3 = strlen(param_2);" (assignment_expression "sVar3 = strlen(param_2)" identifier = (call_expression "strlen(param_2)" identifier (argument_list "(param_2)" ( identifier )))) ;) (if_statement "if (0x1ffffffffffffffe < sVar3) {\n                    \n                    \n      FUN_002da6d0();\n    }" if (parenthesized_expression "(0x1ffffffffffffffe < sVar3)" ( (binary_expression "0x1ffffffffffffffe < sVar3" number_literal < identifier) )) (compound_statement "{\n                    \n                    \n      FUN_002da6d0();\n    }" { (expression_statement "FUN_002da6d0();" (call_expression "FUN_002da6d0()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "puVar4 = (undefined4 *)thunk_FUN_002d9490(sVar3 * 4);" (assignment_expression "puVar4 = (undefined4 *)thunk_FUN_002d9490(sVar3 * 4)" identifier = (cast_expression "(undefined4 *)thunk_FUN_002d9490(sVar3 * 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "thunk_FUN_002d9490(sVar3 * 4)" identifier (argument_list "(sVar3 * 4)" ( (binary_expression "sVar3 * 4" identifier * number_literal) ))))) ;) (if_statement "if (sVar3 != 0) {\n      cVar1 = *param_2;\n      plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);\n      if (plVar6 != (long *)0x0) {\n        param_2 = param_2 + 1;\n        puVar5 = puVar4;\n        do {\n                    \n          uVar2 = (**(code **)(*plVar6 + 0x50))(plVar6,(int)cVar1);\n          *puVar5 = uVar2;\n          if (puVar5 == puVar4 + (sVar3 - 1)) goto LAB_002e8aee;\n          cVar1 = *param_2;\n          puVar5 = puVar5 + 1;\n          param_2 = param_2 + 1;\n          plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);\n        } while (plVar6 != (long *)0x0);\n      }\n                    \n                    \n      FUN_00319450();\n    }" if (parenthesized_expression "(sVar3 != 0)" ( (binary_expression "sVar3 != 0" identifier != number_literal) )) (compound_statement "{\n      cVar1 = *param_2;\n      plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);\n      if (plVar6 != (long *)0x0) {\n        param_2 = param_2 + 1;\n        puVar5 = puVar4;\n        do {\n                    \n          uVar2 = (**(code **)(*plVar6 + 0x50))(plVar6,(int)cVar1);\n          *puVar5 = uVar2;\n          if (puVar5 == puVar4 + (sVar3 - 1)) goto LAB_002e8aee;\n          cVar1 = *param_2;\n          puVar5 = puVar5 + 1;\n          param_2 = param_2 + 1;\n          plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);\n        } while (plVar6 != (long *)0x0);\n      }\n                    \n                    \n      FUN_00319450();\n    }" { (expression_statement "cVar1 = *param_2;" (assignment_expression "cVar1 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);" (assignment_expression "plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0)" identifier = (pointer_expression "*(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0)" * (cast_expression "(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0)" ( (binary_expression "(long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0" (binary_expression "(long)param_1 + *(long *)(*param_1 + -0x18)" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (pointer_expression "*(long *)(*param_1 + -0x18)" * (cast_expression "(long *)(*param_1 + -0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + -0x18)" ( (binary_expression "*param_1 + -0x18" (pointer_expression "*param_1" * identifier) + number_literal) ))))) + number_literal) ))))) ;) (if_statement "if (plVar6 != (long *)0x0) {\n        param_2 = param_2 + 1;\n        puVar5 = puVar4;\n        do {\n                    \n          uVar2 = (**(code **)(*plVar6 + 0x50))(plVar6,(int)cVar1);\n          *puVar5 = uVar2;\n          if (puVar5 == puVar4 + (sVar3 - 1)) goto LAB_002e8aee;\n          cVar1 = *param_2;\n          puVar5 = puVar5 + 1;\n          param_2 = param_2 + 1;\n          plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);\n        } while (plVar6 != (long *)0x0);\n      }" if (parenthesized_expression "(plVar6 != (long *)0x0)" ( (binary_expression "plVar6 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        param_2 = param_2 + 1;\n        puVar5 = puVar4;\n        do {\n                    \n          uVar2 = (**(code **)(*plVar6 + 0x50))(plVar6,(int)cVar1);\n          *puVar5 = uVar2;\n          if (puVar5 == puVar4 + (sVar3 - 1)) goto LAB_002e8aee;\n          cVar1 = *param_2;\n          puVar5 = puVar5 + 1;\n          param_2 = param_2 + 1;\n          plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);\n        } while (plVar6 != (long *)0x0);\n      }" { (expression_statement "param_2 = param_2 + 1;" (assignment_expression "param_2 = param_2 + 1" identifier = (binary_expression "param_2 + 1" identifier + number_literal)) ;) (expression_statement "puVar5 = puVar4;" (assignment_expression "puVar5 = puVar4" identifier = identifier) ;) (do_statement "do {\n                    \n          uVar2 = (**(code **)(*plVar6 + 0x50))(plVar6,(int)cVar1);\n          *puVar5 = uVar2;\n          if (puVar5 == puVar4 + (sVar3 - 1)) goto LAB_002e8aee;\n          cVar1 = *param_2;\n          puVar5 = puVar5 + 1;\n          param_2 = param_2 + 1;\n          plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);\n        } while (plVar6 != (long *)0x0);" do (compound_statement "{\n                    \n          uVar2 = (**(code **)(*plVar6 + 0x50))(plVar6,(int)cVar1);\n          *puVar5 = uVar2;\n          if (puVar5 == puVar4 + (sVar3 - 1)) goto LAB_002e8aee;\n          cVar1 = *param_2;\n          puVar5 = puVar5 + 1;\n          param_2 = param_2 + 1;\n          plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);\n        }" { (expression_statement "uVar2 = (**(code **)(*plVar6 + 0x50))(plVar6,(int)cVar1);" (assignment_expression "uVar2 = (**(code **)(*plVar6 + 0x50))(plVar6,(int)cVar1)" identifier = (call_expression "(**(code **)(*plVar6 + 0x50))(plVar6,(int)cVar1)" (parenthesized_expression "(**(code **)(*plVar6 + 0x50))" ( (pointer_expression "**(code **)(*plVar6 + 0x50)" * (pointer_expression "*(code **)(*plVar6 + 0x50)" * (cast_expression "(code **)(*plVar6 + 0x50)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar6 + 0x50)" ( (binary_expression "*plVar6 + 0x50" (pointer_expression "*plVar6" * identifier) + number_literal) ))))) )) (argument_list "(plVar6,(int)cVar1)" ( identifier , (cast_expression "(int)cVar1" ( (type_descriptor "int" primitive_type) ) identifier) )))) ;) (expression_statement "*puVar5 = uVar2;" (assignment_expression "*puVar5 = uVar2" (pointer_expression "*puVar5" * identifier) = identifier) ;) (if_statement "if (puVar5 == puVar4 + (sVar3 - 1)) goto LAB_002e8aee;" if (parenthesized_expression "(puVar5 == puVar4 + (sVar3 - 1))" ( (binary_expression "puVar5 == puVar4 + (sVar3 - 1)" identifier == (binary_expression "puVar4 + (sVar3 - 1)" identifier + (parenthesized_expression "(sVar3 - 1)" ( (binary_expression "sVar3 - 1" identifier - number_literal) )))) )) (goto_statement "goto LAB_002e8aee;" goto statement_identifier ;)) (expression_statement "cVar1 = *param_2;" (assignment_expression "cVar1 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "puVar5 = puVar5 + 1;" (assignment_expression "puVar5 = puVar5 + 1" identifier = (binary_expression "puVar5 + 1" identifier + number_literal)) ;) (expression_statement "param_2 = param_2 + 1;" (assignment_expression "param_2 = param_2 + 1" identifier = (binary_expression "param_2 + 1" identifier + number_literal)) ;) (expression_statement "plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);" (assignment_expression "plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0)" identifier = (pointer_expression "*(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0)" * (cast_expression "(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0)" ( (binary_expression "(long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0" (binary_expression "(long)param_1 + *(long *)(*param_1 + -0x18)" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (pointer_expression "*(long *)(*param_1 + -0x18)" * (cast_expression "(long *)(*param_1 + -0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + -0x18)" ( (binary_expression "*param_1 + -0x18" (pointer_expression "*param_1" * identifier) + number_literal) ))))) + number_literal) ))))) ;) }) while (parenthesized_expression "(plVar6 != (long *)0x0)" ( (binary_expression "plVar6 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) ;) })) (expression_statement "FUN_00319450();" (call_expression "FUN_00319450()" identifier (argument_list "()" ( ))) ;) })) (labeled_statement "LAB_002e8aee:\n    FUN_002e8610(param_1,puVar4,sVar3);" statement_identifier : (expression_statement "FUN_002e8610(param_1,puVar4,sVar3);" (call_expression "FUN_002e8610(param_1,puVar4,sVar3)" identifier (argument_list "(param_1,puVar4,sVar3)" ( identifier , identifier , identifier ))) ;)) (expression_statement "thunk_FUN_002dac60(puVar4);" (call_expression "thunk_FUN_002dac60(puVar4)" identifier (argument_list "(puVar4)" ( identifier ))) ;) }))) (return_statement "return param_1;" return identifier ;) })))
(translation_unit (function_definition (sized_type_specifier long) (pointer_declarator * (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) )))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) IDENT ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) + (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) | LIT) ))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( (binary_expression IDENT * LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (do_statement do (compound_statement { (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 , (cast_expression ( (type_descriptor TYPE) ) IDENT) )))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (binary_expression IDENT + (parenthesized_expression ( (binary_expression IDENT - LIT) )))) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) + LIT) ))))) ;) }) while (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) )) ;) })) (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) (labeled_statement statement_identifier : (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT ))) ;)) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) }))) (return_statement return IDENT ;) })))
(function_definition "long * FUN_002e8a40(long *param_1,char *param_2)\n\n{\n  char cVar1;\n  undefined4 uVar2;\n  size_t sVar3;\n  undefined4 *puVar4;\n  undefined4 *puVar5;\n  long *plVar6;\n  long lVar7;\n  \n  if (param_2 == (char *)0x0) {\n    lVar7 = *(long *)(*param_1 + -0x18) + (long)param_1;\n    FUN_00301260(lVar7,*(uint *)(lVar7 + 0x20) | 1);\n  }\n  else {\n    sVar3 = strlen(param_2);\n    if (0x1ffffffffffffffe < sVar3) {\n                    \n                    \n      FUN_002da6d0();\n    }\n                    \n    puVar4 = (undefined4 *)thunk_FUN_002d9490(sVar3 * 4);\n    if (sVar3 != 0) {\n      cVar1 = *param_2;\n      plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);\n      if (plVar6 != (long *)0x0) {\n        param_2 = param_2 + 1;\n        puVar5 = puVar4;\n        do {\n                    \n          uVar2 = (**(code **)(*plVar6 + 0x50))(plVar6,(int)cVar1);\n          *puVar5 = uVar2;\n          if (puVar5 == puVar4 + (sVar3 - 1)) goto LAB_002e8aee;\n          cVar1 = *param_2;\n          puVar5 = puVar5 + 1;\n          param_2 = param_2 + 1;\n          plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);\n        } while (plVar6 != (long *)0x0);\n      }\n                    \n                    \n      FUN_00319450();\n    }\nLAB_002e8aee:\n    FUN_002e8610(param_1,puVar4,sVar3);\n    thunk_FUN_002dac60(puVar4);\n  }\n  return param_1;\n}" (sized_type_specifier "long" (long "long")) (pointer_declarator "* FUN_002e8a40(long *param_1,char *param_2)" (* "*") (function_declarator "FUN_002e8a40(long *param_1,char *param_2)" (identifier "FUN_002e8a40") (parameter_list "(long *param_1,char *param_2)" (( "(") (parameter_declaration "long *param_1" (sized_type_specifier "long" (long "long")) (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "char *param_2" (primitive_type "char") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) () ")")))) (compound_statement "{\n  char cVar1;\n  undefined4 uVar2;\n  size_t sVar3;\n  undefined4 *puVar4;\n  undefined4 *puVar5;\n  long *plVar6;\n  long lVar7;\n  \n  if (param_2 == (char *)0x0) {\n    lVar7 = *(long *)(*param_1 + -0x18) + (long)param_1;\n    FUN_00301260(lVar7,*(uint *)(lVar7 + 0x20) | 1);\n  }\n  else {\n    sVar3 = strlen(param_2);\n    if (0x1ffffffffffffffe < sVar3) {\n                    \n                    \n      FUN_002da6d0();\n    }\n                    \n    puVar4 = (undefined4 *)thunk_FUN_002d9490(sVar3 * 4);\n    if (sVar3 != 0) {\n      cVar1 = *param_2;\n      plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);\n      if (plVar6 != (long *)0x0) {\n        param_2 = param_2 + 1;\n        puVar5 = puVar4;\n        do {\n                    \n          uVar2 = (**(code **)(*plVar6 + 0x50))(plVar6,(int)cVar1);\n          *puVar5 = uVar2;\n          if (puVar5 == puVar4 + (sVar3 - 1)) goto LAB_002e8aee;\n          cVar1 = *param_2;\n          puVar5 = puVar5 + 1;\n          param_2 = param_2 + 1;\n          plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);\n        } while (plVar6 != (long *)0x0);\n      }\n                    \n                    \n      FUN_00319450();\n    }\nLAB_002e8aee:\n    FUN_002e8610(param_1,puVar4,sVar3);\n    thunk_FUN_002dac60(puVar4);\n  }\n  return param_1;\n}" ({ "{") (declaration "char cVar1;" (primitive_type "char") (identifier "cVar1") (; ";")) (declaration "undefined4 uVar2;" (type_identifier "undefined4") (identifier "uVar2") (; ";")) (declaration "size_t sVar3;" (primitive_type "size_t") (identifier "sVar3") (; ";")) (declaration "undefined4 *puVar4;" (type_identifier "undefined4") (pointer_declarator "*puVar4" (* "*") (identifier "puVar4")) (; ";")) (declaration "undefined4 *puVar5;" (type_identifier "undefined4") (pointer_declarator "*puVar5" (* "*") (identifier "puVar5")) (; ";")) (declaration "long *plVar6;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar6" (* "*") (identifier "plVar6")) (; ";")) (declaration "long lVar7;" (sized_type_specifier "long" (long "long")) (identifier "lVar7") (; ";")) (if_statement "if (param_2 == (char *)0x0) {\n    lVar7 = *(long *)(*param_1 + -0x18) + (long)param_1;\n    FUN_00301260(lVar7,*(uint *)(lVar7 + 0x20) | 1);\n  }\n  else {\n    sVar3 = strlen(param_2);\n    if (0x1ffffffffffffffe < sVar3) {\n                    \n                    \n      FUN_002da6d0();\n    }\n                    \n    puVar4 = (undefined4 *)thunk_FUN_002d9490(sVar3 * 4);\n    if (sVar3 != 0) {\n      cVar1 = *param_2;\n      plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);\n      if (plVar6 != (long *)0x0) {\n        param_2 = param_2 + 1;\n        puVar5 = puVar4;\n        do {\n                    \n          uVar2 = (**(code **)(*plVar6 + 0x50))(plVar6,(int)cVar1);\n          *puVar5 = uVar2;\n          if (puVar5 == puVar4 + (sVar3 - 1)) goto LAB_002e8aee;\n          cVar1 = *param_2;\n          puVar5 = puVar5 + 1;\n          param_2 = param_2 + 1;\n          plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);\n        } while (plVar6 != (long *)0x0);\n      }\n                    \n                    \n      FUN_00319450();\n    }\nLAB_002e8aee:\n    FUN_002e8610(param_1,puVar4,sVar3);\n    thunk_FUN_002dac60(puVar4);\n  }" (if "if") (parenthesized_expression "(param_2 == (char *)0x0)" (( "(") (binary_expression "param_2 == (char *)0x0" (identifier "param_2") (== "==") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    lVar7 = *(long *)(*param_1 + -0x18) + (long)param_1;\n    FUN_00301260(lVar7,*(uint *)(lVar7 + 0x20) | 1);\n  }" ({ "{") (expression_statement "lVar7 = *(long *)(*param_1 + -0x18) + (long)param_1;" (assignment_expression "lVar7 = *(long *)(*param_1 + -0x18) + (long)param_1" (identifier "lVar7") (= "=") (binary_expression "*(long *)(*param_1 + -0x18) + (long)param_1" (pointer_expression "*(long *)(*param_1 + -0x18)" (* "*") (cast_expression "(long *)(*param_1 + -0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_1 + -0x18)" (( "(") (binary_expression "*param_1 + -0x18" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "-0x18")) () ")")))) (+ "+") (cast_expression "(long)param_1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_1")))) (; ";")) (expression_statement "FUN_00301260(lVar7,*(uint *)(lVar7 + 0x20) | 1);" (call_expression "FUN_00301260(lVar7,*(uint *)(lVar7 + 0x20) | 1)" (identifier "FUN_00301260") (argument_list "(lVar7,*(uint *)(lVar7 + 0x20) | 1)" (( "(") (identifier "lVar7") (, ",") (binary_expression "*(uint *)(lVar7 + 0x20) | 1" (pointer_expression "*(uint *)(lVar7 + 0x20)" (* "*") (cast_expression "(uint *)(lVar7 + 0x20)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar7 + 0x20)" (( "(") (binary_expression "lVar7 + 0x20" (identifier "lVar7") (+ "+") (number_literal "0x20")) () ")")))) (| "|") (number_literal "1")) () ")"))) (; ";")) (} "}")) (else_clause "else {\n    sVar3 = strlen(param_2);\n    if (0x1ffffffffffffffe < sVar3) {\n                    \n                    \n      FUN_002da6d0();\n    }\n                    \n    puVar4 = (undefined4 *)thunk_FUN_002d9490(sVar3 * 4);\n    if (sVar3 != 0) {\n      cVar1 = *param_2;\n      plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);\n      if (plVar6 != (long *)0x0) {\n        param_2 = param_2 + 1;\n        puVar5 = puVar4;\n        do {\n                    \n          uVar2 = (**(code **)(*plVar6 + 0x50))(plVar6,(int)cVar1);\n          *puVar5 = uVar2;\n          if (puVar5 == puVar4 + (sVar3 - 1)) goto LAB_002e8aee;\n          cVar1 = *param_2;\n          puVar5 = puVar5 + 1;\n          param_2 = param_2 + 1;\n          plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);\n        } while (plVar6 != (long *)0x0);\n      }\n                    \n                    \n      FUN_00319450();\n    }\nLAB_002e8aee:\n    FUN_002e8610(param_1,puVar4,sVar3);\n    thunk_FUN_002dac60(puVar4);\n  }" (else "else") (compound_statement "{\n    sVar3 = strlen(param_2);\n    if (0x1ffffffffffffffe < sVar3) {\n                    \n                    \n      FUN_002da6d0();\n    }\n                    \n    puVar4 = (undefined4 *)thunk_FUN_002d9490(sVar3 * 4);\n    if (sVar3 != 0) {\n      cVar1 = *param_2;\n      plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);\n      if (plVar6 != (long *)0x0) {\n        param_2 = param_2 + 1;\n        puVar5 = puVar4;\n        do {\n                    \n          uVar2 = (**(code **)(*plVar6 + 0x50))(plVar6,(int)cVar1);\n          *puVar5 = uVar2;\n          if (puVar5 == puVar4 + (sVar3 - 1)) goto LAB_002e8aee;\n          cVar1 = *param_2;\n          puVar5 = puVar5 + 1;\n          param_2 = param_2 + 1;\n          plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);\n        } while (plVar6 != (long *)0x0);\n      }\n                    \n                    \n      FUN_00319450();\n    }\nLAB_002e8aee:\n    FUN_002e8610(param_1,puVar4,sVar3);\n    thunk_FUN_002dac60(puVar4);\n  }" ({ "{") (expression_statement "sVar3 = strlen(param_2);" (assignment_expression "sVar3 = strlen(param_2)" (identifier "sVar3") (= "=") (call_expression "strlen(param_2)" (identifier "strlen") (argument_list "(param_2)" (( "(") (identifier "param_2") () ")")))) (; ";")) (if_statement "if (0x1ffffffffffffffe < sVar3) {\n                    \n                    \n      FUN_002da6d0();\n    }" (if "if") (parenthesized_expression "(0x1ffffffffffffffe < sVar3)" (( "(") (binary_expression "0x1ffffffffffffffe < sVar3" (number_literal "0x1ffffffffffffffe") (< "<") (identifier "sVar3")) () ")")) (compound_statement "{\n                    \n                    \n      FUN_002da6d0();\n    }" ({ "{") (expression_statement "FUN_002da6d0();" (call_expression "FUN_002da6d0()" (identifier "FUN_002da6d0") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (expression_statement "puVar4 = (undefined4 *)thunk_FUN_002d9490(sVar3 * 4);" (assignment_expression "puVar4 = (undefined4 *)thunk_FUN_002d9490(sVar3 * 4)" (identifier "puVar4") (= "=") (cast_expression "(undefined4 *)thunk_FUN_002d9490(sVar3 * 4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "thunk_FUN_002d9490(sVar3 * 4)" (identifier "thunk_FUN_002d9490") (argument_list "(sVar3 * 4)" (( "(") (binary_expression "sVar3 * 4" (identifier "sVar3") (* "*") (number_literal "4")) () ")"))))) (; ";")) (if_statement "if (sVar3 != 0) {\n      cVar1 = *param_2;\n      plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);\n      if (plVar6 != (long *)0x0) {\n        param_2 = param_2 + 1;\n        puVar5 = puVar4;\n        do {\n                    \n          uVar2 = (**(code **)(*plVar6 + 0x50))(plVar6,(int)cVar1);\n          *puVar5 = uVar2;\n          if (puVar5 == puVar4 + (sVar3 - 1)) goto LAB_002e8aee;\n          cVar1 = *param_2;\n          puVar5 = puVar5 + 1;\n          param_2 = param_2 + 1;\n          plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);\n        } while (plVar6 != (long *)0x0);\n      }\n                    \n                    \n      FUN_00319450();\n    }" (if "if") (parenthesized_expression "(sVar3 != 0)" (( "(") (binary_expression "sVar3 != 0" (identifier "sVar3") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      cVar1 = *param_2;\n      plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);\n      if (plVar6 != (long *)0x0) {\n        param_2 = param_2 + 1;\n        puVar5 = puVar4;\n        do {\n                    \n          uVar2 = (**(code **)(*plVar6 + 0x50))(plVar6,(int)cVar1);\n          *puVar5 = uVar2;\n          if (puVar5 == puVar4 + (sVar3 - 1)) goto LAB_002e8aee;\n          cVar1 = *param_2;\n          puVar5 = puVar5 + 1;\n          param_2 = param_2 + 1;\n          plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);\n        } while (plVar6 != (long *)0x0);\n      }\n                    \n                    \n      FUN_00319450();\n    }" ({ "{") (expression_statement "cVar1 = *param_2;" (assignment_expression "cVar1 = *param_2" (identifier "cVar1") (= "=") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) (; ";")) (expression_statement "plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);" (assignment_expression "plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0)" (identifier "plVar6") (= "=") (pointer_expression "*(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0)" (* "*") (cast_expression "(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0)" (( "(") (type_descriptor "long **" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0)" (( "(") (binary_expression "(long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0" (binary_expression "(long)param_1 + *(long *)(*param_1 + -0x18)" (cast_expression "(long)param_1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_1")) (+ "+") (pointer_expression "*(long *)(*param_1 + -0x18)" (* "*") (cast_expression "(long *)(*param_1 + -0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_1 + -0x18)" (( "(") (binary_expression "*param_1 + -0x18" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "-0x18")) () ")"))))) (+ "+") (number_literal "0xf0")) () ")"))))) (; ";")) (if_statement "if (plVar6 != (long *)0x0) {\n        param_2 = param_2 + 1;\n        puVar5 = puVar4;\n        do {\n                    \n          uVar2 = (**(code **)(*plVar6 + 0x50))(plVar6,(int)cVar1);\n          *puVar5 = uVar2;\n          if (puVar5 == puVar4 + (sVar3 - 1)) goto LAB_002e8aee;\n          cVar1 = *param_2;\n          puVar5 = puVar5 + 1;\n          param_2 = param_2 + 1;\n          plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);\n        } while (plVar6 != (long *)0x0);\n      }" (if "if") (parenthesized_expression "(plVar6 != (long *)0x0)" (( "(") (binary_expression "plVar6 != (long *)0x0" (identifier "plVar6") (!= "!=") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n        param_2 = param_2 + 1;\n        puVar5 = puVar4;\n        do {\n                    \n          uVar2 = (**(code **)(*plVar6 + 0x50))(plVar6,(int)cVar1);\n          *puVar5 = uVar2;\n          if (puVar5 == puVar4 + (sVar3 - 1)) goto LAB_002e8aee;\n          cVar1 = *param_2;\n          puVar5 = puVar5 + 1;\n          param_2 = param_2 + 1;\n          plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);\n        } while (plVar6 != (long *)0x0);\n      }" ({ "{") (expression_statement "param_2 = param_2 + 1;" (assignment_expression "param_2 = param_2 + 1" (identifier "param_2") (= "=") (binary_expression "param_2 + 1" (identifier "param_2") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "puVar5 = puVar4;" (assignment_expression "puVar5 = puVar4" (identifier "puVar5") (= "=") (identifier "puVar4")) (; ";")) (do_statement "do {\n                    \n          uVar2 = (**(code **)(*plVar6 + 0x50))(plVar6,(int)cVar1);\n          *puVar5 = uVar2;\n          if (puVar5 == puVar4 + (sVar3 - 1)) goto LAB_002e8aee;\n          cVar1 = *param_2;\n          puVar5 = puVar5 + 1;\n          param_2 = param_2 + 1;\n          plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);\n        } while (plVar6 != (long *)0x0);" (do "do") (compound_statement "{\n                    \n          uVar2 = (**(code **)(*plVar6 + 0x50))(plVar6,(int)cVar1);\n          *puVar5 = uVar2;\n          if (puVar5 == puVar4 + (sVar3 - 1)) goto LAB_002e8aee;\n          cVar1 = *param_2;\n          puVar5 = puVar5 + 1;\n          param_2 = param_2 + 1;\n          plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);\n        }" ({ "{") (expression_statement "uVar2 = (**(code **)(*plVar6 + 0x50))(plVar6,(int)cVar1);" (assignment_expression "uVar2 = (**(code **)(*plVar6 + 0x50))(plVar6,(int)cVar1)" (identifier "uVar2") (= "=") (call_expression "(**(code **)(*plVar6 + 0x50))(plVar6,(int)cVar1)" (parenthesized_expression "(**(code **)(*plVar6 + 0x50))" (( "(") (pointer_expression "**(code **)(*plVar6 + 0x50)" (* "*") (pointer_expression "*(code **)(*plVar6 + 0x50)" (* "*") (cast_expression "(code **)(*plVar6 + 0x50)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*plVar6 + 0x50)" (( "(") (binary_expression "*plVar6 + 0x50" (pointer_expression "*plVar6" (* "*") (identifier "plVar6")) (+ "+") (number_literal "0x50")) () ")"))))) () ")")) (argument_list "(plVar6,(int)cVar1)" (( "(") (identifier "plVar6") (, ",") (cast_expression "(int)cVar1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "cVar1")) () ")")))) (; ";")) (expression_statement "*puVar5 = uVar2;" (assignment_expression "*puVar5 = uVar2" (pointer_expression "*puVar5" (* "*") (identifier "puVar5")) (= "=") (identifier "uVar2")) (; ";")) (if_statement "if (puVar5 == puVar4 + (sVar3 - 1)) goto LAB_002e8aee;" (if "if") (parenthesized_expression "(puVar5 == puVar4 + (sVar3 - 1))" (( "(") (binary_expression "puVar5 == puVar4 + (sVar3 - 1)" (identifier "puVar5") (== "==") (binary_expression "puVar4 + (sVar3 - 1)" (identifier "puVar4") (+ "+") (parenthesized_expression "(sVar3 - 1)" (( "(") (binary_expression "sVar3 - 1" (identifier "sVar3") (- "-") (number_literal "1")) () ")")))) () ")")) (goto_statement "goto LAB_002e8aee;" (goto "goto") (statement_identifier "LAB_002e8aee") (; ";"))) (expression_statement "cVar1 = *param_2;" (assignment_expression "cVar1 = *param_2" (identifier "cVar1") (= "=") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) (; ";")) (expression_statement "puVar5 = puVar5 + 1;" (assignment_expression "puVar5 = puVar5 + 1" (identifier "puVar5") (= "=") (binary_expression "puVar5 + 1" (identifier "puVar5") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "param_2 = param_2 + 1;" (assignment_expression "param_2 = param_2 + 1" (identifier "param_2") (= "=") (binary_expression "param_2 + 1" (identifier "param_2") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);" (assignment_expression "plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0)" (identifier "plVar6") (= "=") (pointer_expression "*(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0)" (* "*") (cast_expression "(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0)" (( "(") (type_descriptor "long **" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0)" (( "(") (binary_expression "(long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0" (binary_expression "(long)param_1 + *(long *)(*param_1 + -0x18)" (cast_expression "(long)param_1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_1")) (+ "+") (pointer_expression "*(long *)(*param_1 + -0x18)" (* "*") (cast_expression "(long *)(*param_1 + -0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_1 + -0x18)" (( "(") (binary_expression "*param_1 + -0x18" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "-0x18")) () ")"))))) (+ "+") (number_literal "0xf0")) () ")"))))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(plVar6 != (long *)0x0)" (( "(") (binary_expression "plVar6 != (long *)0x0" (identifier "plVar6") (!= "!=") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (; ";")) (} "}"))) (expression_statement "FUN_00319450();" (call_expression "FUN_00319450()" (identifier "FUN_00319450") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (labeled_statement "LAB_002e8aee:\n    FUN_002e8610(param_1,puVar4,sVar3);" (statement_identifier "LAB_002e8aee") (: ":") (expression_statement "FUN_002e8610(param_1,puVar4,sVar3);" (call_expression "FUN_002e8610(param_1,puVar4,sVar3)" (identifier "FUN_002e8610") (argument_list "(param_1,puVar4,sVar3)" (( "(") (identifier "param_1") (, ",") (identifier "puVar4") (, ",") (identifier "sVar3") () ")"))) (; ";"))) (expression_statement "thunk_FUN_002dac60(puVar4);" (call_expression "thunk_FUN_002dac60(puVar4)" (identifier "thunk_FUN_002dac60") (argument_list "(puVar4)" (( "(") (identifier "puVar4") () ")"))) (; ";")) (} "}")))) (return_statement "return param_1;" (return "return") (identifier "param_1") (; ";")) (} "}")))

/* WARNING: Unknown calling convention -- yet parameter storage is locked */
/* std::wostream& std::TEMPNAMEPLACEHOLDERVALUE(std::wostream&, char const*) */

wostream * std::operator<<(wostream *var_3,char *var_1)

{
  char cVar1;
  type_1 wVar2;
  size_t var_6;
  type_1 *var_11;
  type_1 *var_10;
  char *var_12;
  long *var_9;
  
  if (var_1 == (char *)0x0) {
    wios::var_2((type_2 *)(var_3 + *(long *)(*(long *)var_3 + -0x18)),
                *(type_3 *)((type_2 *)(var_3 + *(long *)(*(long *)var_3 + -0x18)) + 0x20) |
                var_4);
  }
  else {
    var_6 = var_5(var_1);
    if (0x1ffffffffffffffe < var_6) {
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 002e8b41 to 002e8b45 has its CatchHandler @ 002e8b3c */
      var_7();
    }
                    /* try { // try from 002e8a86 to 002e8a8a has its CatchHandler @ 002e8b3c */
    var_11 = (type_1 *)var_8(var_6 * 4);
    if (var_6 != 0) {
      cVar1 = *var_1;
      var_9 = *(long **)(var_3 + *(long *)(*(long *)var_3 + -0x18) + 0xf0);
      if (var_9 != (long *)0x0) {
        var_12 = var_1 + 1;
        var_10 = var_11;
        do {
                    /* try { // try from 002e8ae4 to 002e8afb has its CatchHandler @ 002e8b46 */
          wVar2 = (**(type_4 **)(*var_9 + 0x50))(var_9,(int)cVar1);
          *var_10 = wVar2;
          if (var_10 == var_11 + (var_6 - 1)) goto LAB_002e8aee;
          cVar1 = *var_12;
          var_10 = var_10 + 1;
          var_12 = var_12 + 1;
          var_9 = *(long **)(var_3 + *(long *)(*(long *)var_3 + -0x18) + 0xf0);
        } while (var_9 != (long *)0x0);
      }
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 002e8b37 to 002e8b3b has its CatchHandler @ 002e8b46 */
      var_13();
    }
LAB_002e8aee:
    __ostream_insert<type_1,std::var_14<type_1>>(var_3,var_11,var_6);
    var_15(var_11);
  }
  return var_3;
}


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

long * MASKED(long *param_1,char *param_2)

{
  char cVar1;
  undefined4 uVar2;
  size_t sVar3;
  undefined4 *puVar4;
  undefined4 *puVar5;
  long *plVar6;
  long lVar7;
  
  if (param_2 == (char *)0x0) {
    lVar7 = *(long *)(*param_1 + -0x18) + (long)param_1;
    FUN_00301260(lVar7,*(uint *)(lVar7 + 0x20) | 1);
  }
  else {
    sVar3 = strlen(param_2);
    if (0x1ffffffffffffffe < sVar3) {
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 002e8b41 to 002e8b45 has its CatchHandler @ 002e8b3c */
      FUN_002da6d0();
    }
                    /* try { // try from 002e8a86 to 002e8a8a has its CatchHandler @ 002e8b3c */
    puVar4 = (undefined4 *)thunk_FUN_002d9490(sVar3 * 4);
    if (sVar3 != 0) {
      cVar1 = *param_2;
      plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);
      if (plVar6 != (long *)0x0) {
        param_2 = param_2 + 1;
        puVar5 = puVar4;
        do {
                    /* try { // try from 002e8ae4 to 002e8afb has its CatchHandler @ 002e8b46 */
          uVar2 = (**(code **)(*plVar6 + 0x50))(plVar6,(int)cVar1);
          *puVar5 = uVar2;
          if (puVar5 == puVar4 + (sVar3 - 1)) goto LAB_002e8aee;
          cVar1 = *param_2;
          puVar5 = puVar5 + 1;
          param_2 = param_2 + 1;
          plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);
        } while (plVar6 != (long *)0x0);
      }
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 002e8b37 to 002e8b3b has its CatchHandler @ 002e8b46 */
      FUN_00319450();
    }
LAB_002e8aee:
    FUN_002e8610(param_1,puVar4,sVar3);
    thunk_FUN_002dac60(puVar4);
  }
  return param_1;
}

