
/* std::collate<wchar_t>::do_compare(wchar_t const*, wchar_t const*, wchar_t const*, wchar_t const*)
   const */

int __thiscall
std::collate<wchar_t>::do_compare
          (collate<wchar_t> *this,wchar_t *param_1,wchar_t *param_2,wchar_t *param_3,
          wchar_t *param_4)

{
  long lVar1;
  long lVar2;
  int iVar3;
  wchar_t *pwVar4;
  wchar_t *pwVar5;
  size_t sVar6;
  wchar_t *pwVar7;
  wchar_t *pwVar8;
  undefined1 local_39 [9];
  
  pwVar4 = std::wstring::_S_construct<wchar_t_const*>(param_1,param_2,local_39);
                    /* try { // try from 002ed180 to 002ed184 has its CatchHandler @ 002ed26c */
  pwVar5 = std::wstring::_S_construct<wchar_t_const*>(param_3,param_4,local_39);
  lVar1 = *(long *)(pwVar4 + -6);
  lVar2 = *(long *)(pwVar5 + -6);
  pwVar7 = pwVar4;
  pwVar8 = pwVar5;
  do {
    iVar3 = _M_compare(this,pwVar7,pwVar8);
    if (iVar3 != 0) {
LAB_002ed1f2:
      if ((allocator *)(pwVar5 + -6) != (allocator *)&std::wstring::_Rep::_S_empty_rep_storage) {
        std::wstring::_Rep::_M_dispose((allocator *)(pwVar5 + -6));
      }
      if ((allocator *)(pwVar4 + -6) != (allocator *)&std::wstring::_Rep::_S_empty_rep_storage) {
        std::wstring::_Rep::_M_dispose((allocator *)(pwVar4 + -6));
      }
      return iVar3;
    }
    sVar6 = wcslen(pwVar7);
    pwVar7 = pwVar7 + sVar6;
    sVar6 = wcslen(pwVar8);
    pwVar8 = pwVar8 + sVar6;
    if ((pwVar4 + lVar1 == pwVar7) && (pwVar5 + lVar2 == pwVar8)) goto LAB_002ed1f2;
    if (pwVar4 + lVar1 == pwVar7) {
      iVar3 = -1;
      goto LAB_002ed1f2;
    }
    if (pwVar5 + lVar2 == pwVar8) {
      iVar3 = 1;
      goto LAB_002ed1f2;
    }
    pwVar7 = pwVar7 + 1;
    pwVar8 = pwVar8 + 1;
  } while( true );
}



int FUN_002ed140(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,
                undefined8 param_5)

{
  long lVar1;
  long lVar2;
  int iVar3;
  wchar_t *pwVar4;
  wchar_t *pwVar5;
  size_t sVar6;
  wchar_t *pwVar7;
  wchar_t *pwVar8;
  undefined1 local_39 [9];
  
  pwVar4 = (wchar_t *)FUN_0031f230(param_2,param_3,local_39);
                    /* try { // try from 002ed180 to 002ed184 has its CatchHandler @ 002ed26c */
  pwVar5 = (wchar_t *)FUN_0031f230(param_4,param_5,local_39);
  lVar1 = *(long *)(pwVar4 + -6);
  lVar2 = *(long *)(pwVar5 + -6);
  pwVar7 = pwVar4;
  pwVar8 = pwVar5;
  do {
    iVar3 = FUN_002e9730(param_1,pwVar7,pwVar8);
    if (iVar3 != 0) {
LAB_002ed1f2:
      if (pwVar5 + -6 != (wchar_t *)&DAT_00405f00) {
        FUN_002ed100(pwVar5 + -6,local_39);
      }
      if (pwVar4 + -6 != (wchar_t *)&DAT_00405f00) {
        FUN_002ed100(pwVar4 + -6,local_39);
      }
      return iVar3;
    }
    sVar6 = wcslen(pwVar7);
    pwVar7 = pwVar7 + sVar6;
    sVar6 = wcslen(pwVar8);
    pwVar8 = pwVar8 + sVar6;
    if ((pwVar4 + lVar1 == pwVar7) && (pwVar5 + lVar2 == pwVar8)) goto LAB_002ed1f2;
    if (pwVar4 + lVar1 == pwVar7) {
      iVar3 = -1;
      goto LAB_002ed1f2;
    }
    if (pwVar5 + lVar2 == pwVar8) {
      iVar3 = 1;
      goto LAB_002ed1f2;
    }
    pwVar7 = pwVar7 + 1;
    pwVar8 = pwVar8 + 1;
  } while( true );
}


PUSH R15
PUSH R14
MOV R14,RDI
MOV RDI,RSI
MOV RSI,RDX
PUSH R13
PUSH R12
PUSH RBP
MOV RBP,R8
PUSH RBX
MOV RBX,RCX
SUB RSP,0x38
LEA R13,[RSP + 0x2f]
MOV RDX,R13
MOV qword ptr [RSP + 0x18],R13
CALL 0x0031f230
MOV RDX,R13
MOV RSI,RBP
MOV RDI,RBX
MOV R15,RAX
MOV qword ptr [RSP + 0x8],RAX
CALL 0x0031f230
MOV RBP,RAX
MOV qword ptr [RSP + 0x10],RAX
MOV RAX,qword ptr [R15 + -0x18]
MOV RBX,R15
LEA R12,[R15 + RAX*0x4]
MOV RAX,qword ptr [RBP + -0x18]
LEA R13,[RBP + RAX*0x4]
JMP 0x002ed1dd
MOV RDI,RBX
CALL 0x00144150
MOV RDI,RBP
LEA RBX,[RBX + RAX*0x4]
CALL 0x00144150
LEA RBP,[RBP + RAX*0x4]
CMP R12,RBX
JNZ 0x002ed1cb
CMP R13,RBP
JZ 0x002ed1f2
CMP R12,RBX
JZ 0x002ed230
CMP R13,RBP
JZ 0x002ed240
ADD RBX,0x4
ADD RBP,0x4
MOV RDX,RBP
MOV RSI,RBX
MOV RDI,R14
CALL 0x002e9730
MOV R15D,EAX
TEST EAX,EAX
JZ 0x002ed1a8
MOV RDI,qword ptr [RSP + 0x10]
LEA RBX,[0x405f00]
SUB RDI,0x18
CMP RDI,RBX
JNZ 0x002ed250
MOV RDI,qword ptr [RSP + 0x8]
SUB RDI,0x18
CMP RDI,RBX
JNZ 0x002ed260
ADD RSP,0x38
MOV EAX,R15D
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
MOV R15D,0xffffffff
JMP 0x002ed1f2
MOV R15D,0x1
JMP 0x002ed1f2
MOV RSI,qword ptr [RSP + 0x18]
CALL 0x002ed100
JMP 0x002ed207
MOV RSI,qword ptr [RSP + 0x18]
CALL 0x002ed100
JMP 0x002ed215
(translation_unit "int FUN_002ed140(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,\n                undefined8 param_5)\n\n{\n  long lVar1;\n  long lVar2;\n  int iVar3;\n  wchar_t *pwVar4;\n  wchar_t *pwVar5;\n  size_t sVar6;\n  wchar_t *pwVar7;\n  wchar_t *pwVar8;\n  undefined1 local_39 [9];\n  \n  pwVar4 = (wchar_t *)FUN_0031f230(param_2,param_3,local_39);\n                    /* try { // try from 002ed180 to 002ed184 has its CatchHandler @ 002ed26c */\n  pwVar5 = (wchar_t *)FUN_0031f230(param_4,param_5,local_39);\n  lVar1 = *(long *)(pwVar4 + -6);\n  lVar2 = *(long *)(pwVar5 + -6);\n  pwVar7 = pwVar4;\n  pwVar8 = pwVar5;\n  do {\n    iVar3 = FUN_002e9730(param_1,pwVar7,pwVar8);\n    if (iVar3 != 0) {\nLAB_002ed1f2:\n      if (pwVar5 + -6 != (wchar_t *)&DAT_00405f00) {\n        FUN_002ed100(pwVar5 + -6,local_39);\n      }\n      if (pwVar4 + -6 != (wchar_t *)&DAT_00405f00) {\n        FUN_002ed100(pwVar4 + -6,local_39);\n      }\n      return iVar3;\n    }\n    sVar6 = wcslen(pwVar7);\n    pwVar7 = pwVar7 + sVar6;\n    sVar6 = wcslen(pwVar8);\n    pwVar8 = pwVar8 + sVar6;\n    if ((pwVar4 + lVar1 == pwVar7) && (pwVar5 + lVar2 == pwVar8)) goto LAB_002ed1f2;\n    if (pwVar4 + lVar1 == pwVar7) {\n      iVar3 = -1;\n      goto LAB_002ed1f2;\n    }\n    if (pwVar5 + lVar2 == pwVar8) {\n      iVar3 = 1;\n      goto LAB_002ed1f2;\n    }\n    pwVar7 = pwVar7 + 1;\n    pwVar8 = pwVar8 + 1;\n  } while( true );\n}\n\n" (function_definition "int FUN_002ed140(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,\n                undefined8 param_5)\n\n{\n  long lVar1;\n  long lVar2;\n  int iVar3;\n  wchar_t *pwVar4;\n  wchar_t *pwVar5;\n  size_t sVar6;\n  wchar_t *pwVar7;\n  wchar_t *pwVar8;\n  undefined1 local_39 [9];\n  \n  pwVar4 = (wchar_t *)FUN_0031f230(param_2,param_3,local_39);\n                    /* try { // try from 002ed180 to 002ed184 has its CatchHandler @ 002ed26c */\n  pwVar5 = (wchar_t *)FUN_0031f230(param_4,param_5,local_39);\n  lVar1 = *(long *)(pwVar4 + -6);\n  lVar2 = *(long *)(pwVar5 + -6);\n  pwVar7 = pwVar4;\n  pwVar8 = pwVar5;\n  do {\n    iVar3 = FUN_002e9730(param_1,pwVar7,pwVar8);\n    if (iVar3 != 0) {\nLAB_002ed1f2:\n      if (pwVar5 + -6 != (wchar_t *)&DAT_00405f00) {\n        FUN_002ed100(pwVar5 + -6,local_39);\n      }\n      if (pwVar4 + -6 != (wchar_t *)&DAT_00405f00) {\n        FUN_002ed100(pwVar4 + -6,local_39);\n      }\n      return iVar3;\n    }\n    sVar6 = wcslen(pwVar7);\n    pwVar7 = pwVar7 + sVar6;\n    sVar6 = wcslen(pwVar8);\n    pwVar8 = pwVar8 + sVar6;\n    if ((pwVar4 + lVar1 == pwVar7) && (pwVar5 + lVar2 == pwVar8)) goto LAB_002ed1f2;\n    if (pwVar4 + lVar1 == pwVar7) {\n      iVar3 = -1;\n      goto LAB_002ed1f2;\n    }\n    if (pwVar5 + lVar2 == pwVar8) {\n      iVar3 = 1;\n      goto LAB_002ed1f2;\n    }\n    pwVar7 = pwVar7 + 1;\n    pwVar8 = pwVar8 + 1;\n  } while( true );\n}" primitive_type (function_declarator "FUN_002ed140(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,\n                undefined8 param_5)" identifier (parameter_list "(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,\n                undefined8 param_5)" ( (parameter_declaration "undefined8 param_1" type_identifier identifier) , (parameter_declaration "undefined8 param_2" type_identifier identifier) , (parameter_declaration "undefined8 param_3" type_identifier identifier) , (parameter_declaration "undefined8 param_4" type_identifier identifier) , (parameter_declaration "undefined8 param_5" type_identifier identifier) ))) (compound_statement "{\n  long lVar1;\n  long lVar2;\n  int iVar3;\n  wchar_t *pwVar4;\n  wchar_t *pwVar5;\n  size_t sVar6;\n  wchar_t *pwVar7;\n  wchar_t *pwVar8;\n  undefined1 local_39 [9];\n  \n  pwVar4 = (wchar_t *)FUN_0031f230(param_2,param_3,local_39);\n                    /* try { // try from 002ed180 to 002ed184 has its CatchHandler @ 002ed26c */\n  pwVar5 = (wchar_t *)FUN_0031f230(param_4,param_5,local_39);\n  lVar1 = *(long *)(pwVar4 + -6);\n  lVar2 = *(long *)(pwVar5 + -6);\n  pwVar7 = pwVar4;\n  pwVar8 = pwVar5;\n  do {\n    iVar3 = FUN_002e9730(param_1,pwVar7,pwVar8);\n    if (iVar3 != 0) {\nLAB_002ed1f2:\n      if (pwVar5 + -6 != (wchar_t *)&DAT_00405f00) {\n        FUN_002ed100(pwVar5 + -6,local_39);\n      }\n      if (pwVar4 + -6 != (wchar_t *)&DAT_00405f00) {\n        FUN_002ed100(pwVar4 + -6,local_39);\n      }\n      return iVar3;\n    }\n    sVar6 = wcslen(pwVar7);\n    pwVar7 = pwVar7 + sVar6;\n    sVar6 = wcslen(pwVar8);\n    pwVar8 = pwVar8 + sVar6;\n    if ((pwVar4 + lVar1 == pwVar7) && (pwVar5 + lVar2 == pwVar8)) goto LAB_002ed1f2;\n    if (pwVar4 + lVar1 == pwVar7) {\n      iVar3 = -1;\n      goto LAB_002ed1f2;\n    }\n    if (pwVar5 + lVar2 == pwVar8) {\n      iVar3 = 1;\n      goto LAB_002ed1f2;\n    }\n    pwVar7 = pwVar7 + 1;\n    pwVar8 = pwVar8 + 1;\n  } while( true );\n}" { (declaration "long lVar1;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "wchar_t *pwVar4;" type_identifier (pointer_declarator "*pwVar4" * identifier) ;) (declaration "wchar_t *pwVar5;" type_identifier (pointer_declarator "*pwVar5" * identifier) ;) (declaration "size_t sVar6;" primitive_type identifier ;) (declaration "wchar_t *pwVar7;" type_identifier (pointer_declarator "*pwVar7" * identifier) ;) (declaration "wchar_t *pwVar8;" type_identifier (pointer_declarator "*pwVar8" * identifier) ;) (declaration "undefined1 local_39 [9];" type_identifier (array_declarator "local_39 [9]" identifier [ number_literal ]) ;) (expression_statement "pwVar4 = (wchar_t *)FUN_0031f230(param_2,param_3,local_39);" (assignment_expression "pwVar4 = (wchar_t *)FUN_0031f230(param_2,param_3,local_39)" identifier = (cast_expression "(wchar_t *)FUN_0031f230(param_2,param_3,local_39)" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0031f230(param_2,param_3,local_39)" identifier (argument_list "(param_2,param_3,local_39)" ( identifier , identifier , identifier ))))) ;) comment (expression_statement "pwVar5 = (wchar_t *)FUN_0031f230(param_4,param_5,local_39);" (assignment_expression "pwVar5 = (wchar_t *)FUN_0031f230(param_4,param_5,local_39)" identifier = (cast_expression "(wchar_t *)FUN_0031f230(param_4,param_5,local_39)" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0031f230(param_4,param_5,local_39)" identifier (argument_list "(param_4,param_5,local_39)" ( identifier , identifier , identifier ))))) ;) (expression_statement "lVar1 = *(long *)(pwVar4 + -6);" (assignment_expression "lVar1 = *(long *)(pwVar4 + -6)" identifier = (pointer_expression "*(long *)(pwVar4 + -6)" * (cast_expression "(long *)(pwVar4 + -6)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pwVar4 + -6)" ( (binary_expression "pwVar4 + -6" identifier + number_literal) ))))) ;) (expression_statement "lVar2 = *(long *)(pwVar5 + -6);" (assignment_expression "lVar2 = *(long *)(pwVar5 + -6)" identifier = (pointer_expression "*(long *)(pwVar5 + -6)" * (cast_expression "(long *)(pwVar5 + -6)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pwVar5 + -6)" ( (binary_expression "pwVar5 + -6" identifier + number_literal) ))))) ;) (expression_statement "pwVar7 = pwVar4;" (assignment_expression "pwVar7 = pwVar4" identifier = identifier) ;) (expression_statement "pwVar8 = pwVar5;" (assignment_expression "pwVar8 = pwVar5" identifier = identifier) ;) (do_statement "do {\n    iVar3 = FUN_002e9730(param_1,pwVar7,pwVar8);\n    if (iVar3 != 0) {\nLAB_002ed1f2:\n      if (pwVar5 + -6 != (wchar_t *)&DAT_00405f00) {\n        FUN_002ed100(pwVar5 + -6,local_39);\n      }\n      if (pwVar4 + -6 != (wchar_t *)&DAT_00405f00) {\n        FUN_002ed100(pwVar4 + -6,local_39);\n      }\n      return iVar3;\n    }\n    sVar6 = wcslen(pwVar7);\n    pwVar7 = pwVar7 + sVar6;\n    sVar6 = wcslen(pwVar8);\n    pwVar8 = pwVar8 + sVar6;\n    if ((pwVar4 + lVar1 == pwVar7) && (pwVar5 + lVar2 == pwVar8)) goto LAB_002ed1f2;\n    if (pwVar4 + lVar1 == pwVar7) {\n      iVar3 = -1;\n      goto LAB_002ed1f2;\n    }\n    if (pwVar5 + lVar2 == pwVar8) {\n      iVar3 = 1;\n      goto LAB_002ed1f2;\n    }\n    pwVar7 = pwVar7 + 1;\n    pwVar8 = pwVar8 + 1;\n  } while( true );" do (compound_statement "{\n    iVar3 = FUN_002e9730(param_1,pwVar7,pwVar8);\n    if (iVar3 != 0) {\nLAB_002ed1f2:\n      if (pwVar5 + -6 != (wchar_t *)&DAT_00405f00) {\n        FUN_002ed100(pwVar5 + -6,local_39);\n      }\n      if (pwVar4 + -6 != (wchar_t *)&DAT_00405f00) {\n        FUN_002ed100(pwVar4 + -6,local_39);\n      }\n      return iVar3;\n    }\n    sVar6 = wcslen(pwVar7);\n    pwVar7 = pwVar7 + sVar6;\n    sVar6 = wcslen(pwVar8);\n    pwVar8 = pwVar8 + sVar6;\n    if ((pwVar4 + lVar1 == pwVar7) && (pwVar5 + lVar2 == pwVar8)) goto LAB_002ed1f2;\n    if (pwVar4 + lVar1 == pwVar7) {\n      iVar3 = -1;\n      goto LAB_002ed1f2;\n    }\n    if (pwVar5 + lVar2 == pwVar8) {\n      iVar3 = 1;\n      goto LAB_002ed1f2;\n    }\n    pwVar7 = pwVar7 + 1;\n    pwVar8 = pwVar8 + 1;\n  }" { (expression_statement "iVar3 = FUN_002e9730(param_1,pwVar7,pwVar8);" (assignment_expression "iVar3 = FUN_002e9730(param_1,pwVar7,pwVar8)" identifier = (call_expression "FUN_002e9730(param_1,pwVar7,pwVar8)" identifier (argument_list "(param_1,pwVar7,pwVar8)" ( identifier , identifier , identifier )))) ;) (if_statement "if (iVar3 != 0) {\nLAB_002ed1f2:\n      if (pwVar5 + -6 != (wchar_t *)&DAT_00405f00) {\n        FUN_002ed100(pwVar5 + -6,local_39);\n      }\n      if (pwVar4 + -6 != (wchar_t *)&DAT_00405f00) {\n        FUN_002ed100(pwVar4 + -6,local_39);\n      }\n      return iVar3;\n    }" if (parenthesized_expression "(iVar3 != 0)" ( (binary_expression "iVar3 != 0" identifier != number_literal) )) (compound_statement "{\nLAB_002ed1f2:\n      if (pwVar5 + -6 != (wchar_t *)&DAT_00405f00) {\n        FUN_002ed100(pwVar5 + -6,local_39);\n      }\n      if (pwVar4 + -6 != (wchar_t *)&DAT_00405f00) {\n        FUN_002ed100(pwVar4 + -6,local_39);\n      }\n      return iVar3;\n    }" { (labeled_statement "LAB_002ed1f2:\n      if (pwVar5 + -6 != (wchar_t *)&DAT_00405f00) {\n        FUN_002ed100(pwVar5 + -6,local_39);\n      }" statement_identifier : (if_statement "if (pwVar5 + -6 != (wchar_t *)&DAT_00405f00) {\n        FUN_002ed100(pwVar5 + -6,local_39);\n      }" if (parenthesized_expression "(pwVar5 + -6 != (wchar_t *)&DAT_00405f00)" ( (binary_expression "pwVar5 + -6 != (wchar_t *)&DAT_00405f00" (binary_expression "pwVar5 + -6" identifier + number_literal) != (cast_expression "(wchar_t *)&DAT_00405f00" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&DAT_00405f00" & identifier))) )) (compound_statement "{\n        FUN_002ed100(pwVar5 + -6,local_39);\n      }" { (expression_statement "FUN_002ed100(pwVar5 + -6,local_39);" (call_expression "FUN_002ed100(pwVar5 + -6,local_39)" identifier (argument_list "(pwVar5 + -6,local_39)" ( (binary_expression "pwVar5 + -6" identifier + number_literal) , identifier ))) ;) }))) (if_statement "if (pwVar4 + -6 != (wchar_t *)&DAT_00405f00) {\n        FUN_002ed100(pwVar4 + -6,local_39);\n      }" if (parenthesized_expression "(pwVar4 + -6 != (wchar_t *)&DAT_00405f00)" ( (binary_expression "pwVar4 + -6 != (wchar_t *)&DAT_00405f00" (binary_expression "pwVar4 + -6" identifier + number_literal) != (cast_expression "(wchar_t *)&DAT_00405f00" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&DAT_00405f00" & identifier))) )) (compound_statement "{\n        FUN_002ed100(pwVar4 + -6,local_39);\n      }" { (expression_statement "FUN_002ed100(pwVar4 + -6,local_39);" (call_expression "FUN_002ed100(pwVar4 + -6,local_39)" identifier (argument_list "(pwVar4 + -6,local_39)" ( (binary_expression "pwVar4 + -6" identifier + number_literal) , identifier ))) ;) })) (return_statement "return iVar3;" return identifier ;) })) (expression_statement "sVar6 = wcslen(pwVar7);" (assignment_expression "sVar6 = wcslen(pwVar7)" identifier = (call_expression "wcslen(pwVar7)" identifier (argument_list "(pwVar7)" ( identifier )))) ;) (expression_statement "pwVar7 = pwVar7 + sVar6;" (assignment_expression "pwVar7 = pwVar7 + sVar6" identifier = (binary_expression "pwVar7 + sVar6" identifier + identifier)) ;) (expression_statement "sVar6 = wcslen(pwVar8);" (assignment_expression "sVar6 = wcslen(pwVar8)" identifier = (call_expression "wcslen(pwVar8)" identifier (argument_list "(pwVar8)" ( identifier )))) ;) (expression_statement "pwVar8 = pwVar8 + sVar6;" (assignment_expression "pwVar8 = pwVar8 + sVar6" identifier = (binary_expression "pwVar8 + sVar6" identifier + identifier)) ;) (if_statement "if ((pwVar4 + lVar1 == pwVar7) && (pwVar5 + lVar2 == pwVar8)) goto LAB_002ed1f2;" if (parenthesized_expression "((pwVar4 + lVar1 == pwVar7) && (pwVar5 + lVar2 == pwVar8))" ( (binary_expression "(pwVar4 + lVar1 == pwVar7) && (pwVar5 + lVar2 == pwVar8)" (parenthesized_expression "(pwVar4 + lVar1 == pwVar7)" ( (binary_expression "pwVar4 + lVar1 == pwVar7" (binary_expression "pwVar4 + lVar1" identifier + identifier) == identifier) )) && (parenthesized_expression "(pwVar5 + lVar2 == pwVar8)" ( (binary_expression "pwVar5 + lVar2 == pwVar8" (binary_expression "pwVar5 + lVar2" identifier + identifier) == identifier) ))) )) (goto_statement "goto LAB_002ed1f2;" goto statement_identifier ;)) (if_statement "if (pwVar4 + lVar1 == pwVar7) {\n      iVar3 = -1;\n      goto LAB_002ed1f2;\n    }" if (parenthesized_expression "(pwVar4 + lVar1 == pwVar7)" ( (binary_expression "pwVar4 + lVar1 == pwVar7" (binary_expression "pwVar4 + lVar1" identifier + identifier) == identifier) )) (compound_statement "{\n      iVar3 = -1;\n      goto LAB_002ed1f2;\n    }" { (expression_statement "iVar3 = -1;" (assignment_expression "iVar3 = -1" identifier = number_literal) ;) (goto_statement "goto LAB_002ed1f2;" goto statement_identifier ;) })) (if_statement "if (pwVar5 + lVar2 == pwVar8) {\n      iVar3 = 1;\n      goto LAB_002ed1f2;\n    }" if (parenthesized_expression "(pwVar5 + lVar2 == pwVar8)" ( (binary_expression "pwVar5 + lVar2 == pwVar8" (binary_expression "pwVar5 + lVar2" identifier + identifier) == identifier) )) (compound_statement "{\n      iVar3 = 1;\n      goto LAB_002ed1f2;\n    }" { (expression_statement "iVar3 = 1;" (assignment_expression "iVar3 = 1" identifier = number_literal) ;) (goto_statement "goto LAB_002ed1f2;" goto statement_identifier ;) })) (expression_statement "pwVar7 = pwVar7 + 1;" (assignment_expression "pwVar7 = pwVar7 + 1" identifier = (binary_expression "pwVar7 + 1" identifier + number_literal)) ;) (expression_statement "pwVar8 = pwVar8 + 1;" (assignment_expression "pwVar8 = pwVar8 + 1" identifier = (binary_expression "pwVar8 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "( true )" ( true )) ;) })))
(translation_unit "/* std::collate<wchar_t>::do_compare(wchar_t const*, wchar_t const*, wchar_t const*, wchar_t const*)\n   const */\n\nint __thiscall\nstd::collate<wchar_t>::do_compare\n          (collate<wchar_t> *this,wchar_t *param_1,wchar_t *param_2,wchar_t *param_3,\n          wchar_t *param_4)\n\n{\n  long lVar1;\n  long lVar2;\n  int iVar3;\n  wchar_t *pwVar4;\n  wchar_t *pwVar5;\n  size_t sVar6;\n  wchar_t *pwVar7;\n  wchar_t *pwVar8;\n  undefined1 local_39 [9];\n  \n  pwVar4 = std::wstring::_S_construct<wchar_t_const*>(param_1,param_2,local_39);\n                    /* try { // try from 002ed180 to 002ed184 has its CatchHandler @ 002ed26c */\n  pwVar5 = std::wstring::_S_construct<wchar_t_const*>(param_3,param_4,local_39);\n  lVar1 = *(long *)(pwVar4 + -6);\n  lVar2 = *(long *)(pwVar5 + -6);\n  pwVar7 = pwVar4;\n  pwVar8 = pwVar5;\n  do {\n    iVar3 = _M_compare(this,pwVar7,pwVar8);\n    if (iVar3 != 0) {\nLAB_002ed1f2:\n      if ((allocator *)(pwVar5 + -6) != (allocator *)&std::wstring::_Rep::_S_empty_rep_storage) {\n        std::wstring::_Rep::_M_dispose((allocator *)(pwVar5 + -6));\n      }\n      if ((allocator *)(pwVar4 + -6) != (allocator *)&std::wstring::_Rep::_S_empty_rep_storage) {\n        std::wstring::_Rep::_M_dispose((allocator *)(pwVar4 + -6));\n      }\n      return iVar3;\n    }\n    sVar6 = wcslen(pwVar7);\n    pwVar7 = pwVar7 + sVar6;\n    sVar6 = wcslen(pwVar8);\n    pwVar8 = pwVar8 + sVar6;\n    if ((pwVar4 + lVar1 == pwVar7) && (pwVar5 + lVar2 == pwVar8)) goto LAB_002ed1f2;\n    if (pwVar4 + lVar1 == pwVar7) {\n      iVar3 = -1;\n      goto LAB_002ed1f2;\n    }\n    if (pwVar5 + lVar2 == pwVar8) {\n      iVar3 = 1;\n      goto LAB_002ed1f2;\n    }\n    pwVar7 = pwVar7 + 1;\n    pwVar8 = pwVar8 + 1;\n  } while( true );\n}\n\n" comment (function_definition "int __thiscall\nstd::collate<wchar_t>::do_compare\n          (collate<wchar_t> *this,wchar_t *param_1,wchar_t *param_2,wchar_t *param_3,\n          wchar_t *param_4)\n\n{\n  long lVar1;\n  long lVar2;\n  int iVar3;\n  wchar_t *pwVar4;\n  wchar_t *pwVar5;\n  size_t sVar6;\n  wchar_t *pwVar7;\n  wchar_t *pwVar8;\n  undefined1 local_39 [9];\n  \n  pwVar4 = std::wstring::_S_construct<wchar_t_const*>(param_1,param_2,local_39);\n                    /* try { // try from 002ed180 to 002ed184 has its CatchHandler @ 002ed26c */\n  pwVar5 = std::wstring::_S_construct<wchar_t_const*>(param_3,param_4,local_39);\n  lVar1 = *(long *)(pwVar4 + -6);\n  lVar2 = *(long *)(pwVar5 + -6);\n  pwVar7 = pwVar4;\n  pwVar8 = pwVar5;\n  do {\n    iVar3 = _M_compare(this,pwVar7,pwVar8);\n    if (iVar3 != 0) {\nLAB_002ed1f2:\n      if ((allocator *)(pwVar5 + -6) != (allocator *)&std::wstring::_Rep::_S_empty_rep_storage) {\n        std::wstring::_Rep::_M_dispose((allocator *)(pwVar5 + -6));\n      }\n      if ((allocator *)(pwVar4 + -6) != (allocator *)&std::wstring::_Rep::_S_empty_rep_storage) {\n        std::wstring::_Rep::_M_dispose((allocator *)(pwVar4 + -6));\n      }\n      return iVar3;\n    }\n    sVar6 = wcslen(pwVar7);\n    pwVar7 = pwVar7 + sVar6;\n    sVar6 = wcslen(pwVar8);\n    pwVar8 = pwVar8 + sVar6;\n    if ((pwVar4 + lVar1 == pwVar7) && (pwVar5 + lVar2 == pwVar8)) goto LAB_002ed1f2;\n    if (pwVar4 + lVar1 == pwVar7) {\n      iVar3 = -1;\n      goto LAB_002ed1f2;\n    }\n    if (pwVar5 + lVar2 == pwVar8) {\n      iVar3 = 1;\n      goto LAB_002ed1f2;\n    }\n    pwVar7 = pwVar7 + 1;\n    pwVar8 = pwVar8 + 1;\n  } while( true );\n}" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "std::collate<wchar_t>::" identifier : : identifier < identifier > : :) (function_declarator "do_compare\n          (collate<wchar_t> *this,wchar_t *param_1,wchar_t *param_2,wchar_t *param_3,\n          wchar_t *param_4)" identifier (parameter_list "(collate<wchar_t> *this,wchar_t *param_1,wchar_t *param_2,wchar_t *param_3,\n          wchar_t *param_4)" ( (parameter_declaration "collate<wchar_t> *this" type_identifier (ERROR "<wchar_t>" < identifier >) (pointer_declarator "*this" * identifier)) , (parameter_declaration "wchar_t *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "wchar_t *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "wchar_t *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "wchar_t *param_4" type_identifier (pointer_declarator "*param_4" * identifier)) ))) (compound_statement "{\n  long lVar1;\n  long lVar2;\n  int iVar3;\n  wchar_t *pwVar4;\n  wchar_t *pwVar5;\n  size_t sVar6;\n  wchar_t *pwVar7;\n  wchar_t *pwVar8;\n  undefined1 local_39 [9];\n  \n  pwVar4 = std::wstring::_S_construct<wchar_t_const*>(param_1,param_2,local_39);\n                    /* try { // try from 002ed180 to 002ed184 has its CatchHandler @ 002ed26c */\n  pwVar5 = std::wstring::_S_construct<wchar_t_const*>(param_3,param_4,local_39);\n  lVar1 = *(long *)(pwVar4 + -6);\n  lVar2 = *(long *)(pwVar5 + -6);\n  pwVar7 = pwVar4;\n  pwVar8 = pwVar5;\n  do {\n    iVar3 = _M_compare(this,pwVar7,pwVar8);\n    if (iVar3 != 0) {\nLAB_002ed1f2:\n      if ((allocator *)(pwVar5 + -6) != (allocator *)&std::wstring::_Rep::_S_empty_rep_storage) {\n        std::wstring::_Rep::_M_dispose((allocator *)(pwVar5 + -6));\n      }\n      if ((allocator *)(pwVar4 + -6) != (allocator *)&std::wstring::_Rep::_S_empty_rep_storage) {\n        std::wstring::_Rep::_M_dispose((allocator *)(pwVar4 + -6));\n      }\n      return iVar3;\n    }\n    sVar6 = wcslen(pwVar7);\n    pwVar7 = pwVar7 + sVar6;\n    sVar6 = wcslen(pwVar8);\n    pwVar8 = pwVar8 + sVar6;\n    if ((pwVar4 + lVar1 == pwVar7) && (pwVar5 + lVar2 == pwVar8)) goto LAB_002ed1f2;\n    if (pwVar4 + lVar1 == pwVar7) {\n      iVar3 = -1;\n      goto LAB_002ed1f2;\n    }\n    if (pwVar5 + lVar2 == pwVar8) {\n      iVar3 = 1;\n      goto LAB_002ed1f2;\n    }\n    pwVar7 = pwVar7 + 1;\n    pwVar8 = pwVar8 + 1;\n  } while( true );\n}" { (declaration "long lVar1;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "wchar_t *pwVar4;" type_identifier (pointer_declarator "*pwVar4" * identifier) ;) (declaration "wchar_t *pwVar5;" type_identifier (pointer_declarator "*pwVar5" * identifier) ;) (declaration "size_t sVar6;" primitive_type identifier ;) (declaration "wchar_t *pwVar7;" type_identifier (pointer_declarator "*pwVar7" * identifier) ;) (declaration "wchar_t *pwVar8;" type_identifier (pointer_declarator "*pwVar8" * identifier) ;) (declaration "undefined1 local_39 [9];" type_identifier (array_declarator "local_39 [9]" identifier [ number_literal ]) ;) (ERROR "pwVar4 = std::" (assignment_expression "pwVar4 = std" identifier = identifier) : :) (labeled_statement "wstring::_S_construct<wchar_t_const*>(param_1,param_2,local_39);" statement_identifier : (ERROR ":" :) (expression_statement "_S_construct<wchar_t_const*>(param_1,param_2,local_39);" (binary_expression "_S_construct<wchar_t_const*>(param_1,param_2,local_39)" (binary_expression "_S_construct<wchar_t_const" identifier < identifier) (ERROR "*" *) > (parenthesized_expression "(param_1,param_2,local_39)" ( (comma_expression "param_1,param_2,local_39" identifier , (comma_expression "param_2,local_39" identifier , identifier)) ))) ;)) comment (ERROR "pwVar5 = std::" (assignment_expression "pwVar5 = std" identifier = identifier) : :) (labeled_statement "wstring::_S_construct<wchar_t_const*>(param_3,param_4,local_39);" statement_identifier : (ERROR ":" :) (expression_statement "_S_construct<wchar_t_const*>(param_3,param_4,local_39);" (binary_expression "_S_construct<wchar_t_const*>(param_3,param_4,local_39)" (binary_expression "_S_construct<wchar_t_const" identifier < identifier) (ERROR "*" *) > (parenthesized_expression "(param_3,param_4,local_39)" ( (comma_expression "param_3,param_4,local_39" identifier , (comma_expression "param_4,local_39" identifier , identifier)) ))) ;)) (expression_statement "lVar1 = *(long *)(pwVar4 + -6);" (assignment_expression "lVar1 = *(long *)(pwVar4 + -6)" identifier = (pointer_expression "*(long *)(pwVar4 + -6)" * (cast_expression "(long *)(pwVar4 + -6)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pwVar4 + -6)" ( (binary_expression "pwVar4 + -6" identifier + number_literal) ))))) ;) (expression_statement "lVar2 = *(long *)(pwVar5 + -6);" (assignment_expression "lVar2 = *(long *)(pwVar5 + -6)" identifier = (pointer_expression "*(long *)(pwVar5 + -6)" * (cast_expression "(long *)(pwVar5 + -6)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pwVar5 + -6)" ( (binary_expression "pwVar5 + -6" identifier + number_literal) ))))) ;) (expression_statement "pwVar7 = pwVar4;" (assignment_expression "pwVar7 = pwVar4" identifier = identifier) ;) (expression_statement "pwVar8 = pwVar5;" (assignment_expression "pwVar8 = pwVar5" identifier = identifier) ;) (do_statement "do {\n    iVar3 = _M_compare(this,pwVar7,pwVar8);\n    if (iVar3 != 0) {\nLAB_002ed1f2:\n      if ((allocator *)(pwVar5 + -6) != (allocator *)&std::wstring::_Rep::_S_empty_rep_storage) {\n        std::wstring::_Rep::_M_dispose((allocator *)(pwVar5 + -6));\n      }\n      if ((allocator *)(pwVar4 + -6) != (allocator *)&std::wstring::_Rep::_S_empty_rep_storage) {\n        std::wstring::_Rep::_M_dispose((allocator *)(pwVar4 + -6));\n      }\n      return iVar3;\n    }\n    sVar6 = wcslen(pwVar7);\n    pwVar7 = pwVar7 + sVar6;\n    sVar6 = wcslen(pwVar8);\n    pwVar8 = pwVar8 + sVar6;\n    if ((pwVar4 + lVar1 == pwVar7) && (pwVar5 + lVar2 == pwVar8)) goto LAB_002ed1f2;\n    if (pwVar4 + lVar1 == pwVar7) {\n      iVar3 = -1;\n      goto LAB_002ed1f2;\n    }\n    if (pwVar5 + lVar2 == pwVar8) {\n      iVar3 = 1;\n      goto LAB_002ed1f2;\n    }\n    pwVar7 = pwVar7 + 1;\n    pwVar8 = pwVar8 + 1;\n  } while( true );" do (compound_statement "{\n    iVar3 = _M_compare(this,pwVar7,pwVar8);\n    if (iVar3 != 0) {\nLAB_002ed1f2:\n      if ((allocator *)(pwVar5 + -6) != (allocator *)&std::wstring::_Rep::_S_empty_rep_storage) {\n        std::wstring::_Rep::_M_dispose((allocator *)(pwVar5 + -6));\n      }\n      if ((allocator *)(pwVar4 + -6) != (allocator *)&std::wstring::_Rep::_S_empty_rep_storage) {\n        std::wstring::_Rep::_M_dispose((allocator *)(pwVar4 + -6));\n      }\n      return iVar3;\n    }\n    sVar6 = wcslen(pwVar7);\n    pwVar7 = pwVar7 + sVar6;\n    sVar6 = wcslen(pwVar8);\n    pwVar8 = pwVar8 + sVar6;\n    if ((pwVar4 + lVar1 == pwVar7) && (pwVar5 + lVar2 == pwVar8)) goto LAB_002ed1f2;\n    if (pwVar4 + lVar1 == pwVar7) {\n      iVar3 = -1;\n      goto LAB_002ed1f2;\n    }\n    if (pwVar5 + lVar2 == pwVar8) {\n      iVar3 = 1;\n      goto LAB_002ed1f2;\n    }\n    pwVar7 = pwVar7 + 1;\n    pwVar8 = pwVar8 + 1;\n  }" { (expression_statement "iVar3 = _M_compare(this,pwVar7,pwVar8);" (assignment_expression "iVar3 = _M_compare(this,pwVar7,pwVar8)" identifier = (call_expression "_M_compare(this,pwVar7,pwVar8)" identifier (argument_list "(this,pwVar7,pwVar8)" ( identifier , identifier , identifier )))) ;) (if_statement "if (iVar3 != 0) {\nLAB_002ed1f2:\n      if ((allocator *)(pwVar5 + -6) != (allocator *)&std::wstring::_Rep::_S_empty_rep_storage) {\n        std::wstring::_Rep::_M_dispose((allocator *)(pwVar5 + -6));\n      }\n      if ((allocator *)(pwVar4 + -6) != (allocator *)&std::wstring::_Rep::_S_empty_rep_storage) {\n        std::wstring::_Rep::_M_dispose((allocator *)(pwVar4 + -6));\n      }\n      return iVar3;\n    }" if (parenthesized_expression "(iVar3 != 0)" ( (binary_expression "iVar3 != 0" identifier != number_literal) )) (compound_statement "{\nLAB_002ed1f2:\n      if ((allocator *)(pwVar5 + -6) != (allocator *)&std::wstring::_Rep::_S_empty_rep_storage) {\n        std::wstring::_Rep::_M_dispose((allocator *)(pwVar5 + -6));\n      }\n      if ((allocator *)(pwVar4 + -6) != (allocator *)&std::wstring::_Rep::_S_empty_rep_storage) {\n        std::wstring::_Rep::_M_dispose((allocator *)(pwVar4 + -6));\n      }\n      return iVar3;\n    }" { (labeled_statement "LAB_002ed1f2:\n      if ((allocator *)(pwVar5 + -6) != (allocator *)&std::wstring::_Rep::_S_empty_rep_storage) {\n        std::wstring::_Rep::_M_dispose((allocator *)(pwVar5 + -6));\n      }" statement_identifier : (if_statement "if ((allocator *)(pwVar5 + -6) != (allocator *)&std::wstring::_Rep::_S_empty_rep_storage) {\n        std::wstring::_Rep::_M_dispose((allocator *)(pwVar5 + -6));\n      }" if (parenthesized_expression "((allocator *)(pwVar5 + -6) != (allocator *)&std::wstring::_Rep::_S_empty_rep_storage)" ( (binary_expression "(allocator *)(pwVar5 + -6) != (allocator *)&std" (cast_expression "(allocator *)(pwVar5 + -6)" ( (type_descriptor "allocator *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pwVar5 + -6)" ( (binary_expression "pwVar5 + -6" identifier + number_literal) ))) != (cast_expression "(allocator *)&std" ( (type_descriptor "allocator *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&std" & identifier))) (ERROR "::wstring::_Rep::_S_empty_rep_storage" : : identifier : : identifier : : identifier) )) (compound_statement "{\n        std::wstring::_Rep::_M_dispose((allocator *)(pwVar5 + -6));\n      }" { (labeled_statement "std::wstring::_Rep::_M_dispose((allocator *)(pwVar5 + -6));" statement_identifier : (ERROR ":" :) (labeled_statement "wstring::_Rep::_M_dispose((allocator *)(pwVar5 + -6));" statement_identifier : (ERROR ":" :) (labeled_statement "_Rep::_M_dispose((allocator *)(pwVar5 + -6));" statement_identifier : (ERROR ":" :) (expression_statement "_M_dispose((allocator *)(pwVar5 + -6));" (call_expression "_M_dispose((allocator *)(pwVar5 + -6))" identifier (argument_list "((allocator *)(pwVar5 + -6))" ( (cast_expression "(allocator *)(pwVar5 + -6)" ( (type_descriptor "allocator *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pwVar5 + -6)" ( (binary_expression "pwVar5 + -6" identifier + number_literal) ))) ))) ;)))) }))) (if_statement "if ((allocator *)(pwVar4 + -6) != (allocator *)&std::wstring::_Rep::_S_empty_rep_storage) {\n        std::wstring::_Rep::_M_dispose((allocator *)(pwVar4 + -6));\n      }" if (parenthesized_expression "((allocator *)(pwVar4 + -6) != (allocator *)&std::wstring::_Rep::_S_empty_rep_storage)" ( (binary_expression "(allocator *)(pwVar4 + -6) != (allocator *)&std" (cast_expression "(allocator *)(pwVar4 + -6)" ( (type_descriptor "allocator *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pwVar4 + -6)" ( (binary_expression "pwVar4 + -6" identifier + number_literal) ))) != (cast_expression "(allocator *)&std" ( (type_descriptor "allocator *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&std" & identifier))) (ERROR "::wstring::_Rep::_S_empty_rep_storage" : : identifier : : identifier : : identifier) )) (compound_statement "{\n        std::wstring::_Rep::_M_dispose((allocator *)(pwVar4 + -6));\n      }" { (labeled_statement "std::wstring::_Rep::_M_dispose((allocator *)(pwVar4 + -6));" statement_identifier : (ERROR ":" :) (labeled_statement "wstring::_Rep::_M_dispose((allocator *)(pwVar4 + -6));" statement_identifier : (ERROR ":" :) (labeled_statement "_Rep::_M_dispose((allocator *)(pwVar4 + -6));" statement_identifier : (ERROR ":" :) (expression_statement "_M_dispose((allocator *)(pwVar4 + -6));" (call_expression "_M_dispose((allocator *)(pwVar4 + -6))" identifier (argument_list "((allocator *)(pwVar4 + -6))" ( (cast_expression "(allocator *)(pwVar4 + -6)" ( (type_descriptor "allocator *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pwVar4 + -6)" ( (binary_expression "pwVar4 + -6" identifier + number_literal) ))) ))) ;)))) })) (return_statement "return iVar3;" return identifier ;) })) (expression_statement "sVar6 = wcslen(pwVar7);" (assignment_expression "sVar6 = wcslen(pwVar7)" identifier = (call_expression "wcslen(pwVar7)" identifier (argument_list "(pwVar7)" ( identifier )))) ;) (expression_statement "pwVar7 = pwVar7 + sVar6;" (assignment_expression "pwVar7 = pwVar7 + sVar6" identifier = (binary_expression "pwVar7 + sVar6" identifier + identifier)) ;) (expression_statement "sVar6 = wcslen(pwVar8);" (assignment_expression "sVar6 = wcslen(pwVar8)" identifier = (call_expression "wcslen(pwVar8)" identifier (argument_list "(pwVar8)" ( identifier )))) ;) (expression_statement "pwVar8 = pwVar8 + sVar6;" (assignment_expression "pwVar8 = pwVar8 + sVar6" identifier = (binary_expression "pwVar8 + sVar6" identifier + identifier)) ;) (if_statement "if ((pwVar4 + lVar1 == pwVar7) && (pwVar5 + lVar2 == pwVar8)) goto LAB_002ed1f2;" if (parenthesized_expression "((pwVar4 + lVar1 == pwVar7) && (pwVar5 + lVar2 == pwVar8))" ( (binary_expression "(pwVar4 + lVar1 == pwVar7) && (pwVar5 + lVar2 == pwVar8)" (parenthesized_expression "(pwVar4 + lVar1 == pwVar7)" ( (binary_expression "pwVar4 + lVar1 == pwVar7" (binary_expression "pwVar4 + lVar1" identifier + identifier) == identifier) )) && (parenthesized_expression "(pwVar5 + lVar2 == pwVar8)" ( (binary_expression "pwVar5 + lVar2 == pwVar8" (binary_expression "pwVar5 + lVar2" identifier + identifier) == identifier) ))) )) (goto_statement "goto LAB_002ed1f2;" goto statement_identifier ;)) (if_statement "if (pwVar4 + lVar1 == pwVar7) {\n      iVar3 = -1;\n      goto LAB_002ed1f2;\n    }" if (parenthesized_expression "(pwVar4 + lVar1 == pwVar7)" ( (binary_expression "pwVar4 + lVar1 == pwVar7" (binary_expression "pwVar4 + lVar1" identifier + identifier) == identifier) )) (compound_statement "{\n      iVar3 = -1;\n      goto LAB_002ed1f2;\n    }" { (expression_statement "iVar3 = -1;" (assignment_expression "iVar3 = -1" identifier = number_literal) ;) (goto_statement "goto LAB_002ed1f2;" goto statement_identifier ;) })) (if_statement "if (pwVar5 + lVar2 == pwVar8) {\n      iVar3 = 1;\n      goto LAB_002ed1f2;\n    }" if (parenthesized_expression "(pwVar5 + lVar2 == pwVar8)" ( (binary_expression "pwVar5 + lVar2 == pwVar8" (binary_expression "pwVar5 + lVar2" identifier + identifier) == identifier) )) (compound_statement "{\n      iVar3 = 1;\n      goto LAB_002ed1f2;\n    }" { (expression_statement "iVar3 = 1;" (assignment_expression "iVar3 = 1" identifier = number_literal) ;) (goto_statement "goto LAB_002ed1f2;" goto statement_identifier ;) })) (expression_statement "pwVar7 = pwVar7 + 1;" (assignment_expression "pwVar7 = pwVar7 + 1" identifier = (binary_expression "pwVar7 + 1" identifier + number_literal)) ;) (expression_statement "pwVar8 = pwVar8 + 1;" (assignment_expression "pwVar8 = pwVar8 + 1" identifier = (binary_expression "pwVar8 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "( true )" ( true )) ;) })))
(translation_unit "int FUN_002ed140(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,\n                undefined8 param_5)\n\n{\n  long lVar1;\n  long lVar2;\n  int iVar3;\n  wchar_t *pwVar4;\n  wchar_t *pwVar5;\n  size_t sVar6;\n  wchar_t *pwVar7;\n  wchar_t *pwVar8;\n  undefined1 local_39 [9];\n  \n  pwVar4 = (wchar_t *)FUN_0031f230(param_2,param_3,local_39);\n                    \n  pwVar5 = (wchar_t *)FUN_0031f230(param_4,param_5,local_39);\n  lVar1 = *(long *)(pwVar4 + -6);\n  lVar2 = *(long *)(pwVar5 + -6);\n  pwVar7 = pwVar4;\n  pwVar8 = pwVar5;\n  do {\n    iVar3 = FUN_002e9730(param_1,pwVar7,pwVar8);\n    if (iVar3 != 0) {\nLAB_002ed1f2:\n      if (pwVar5 + -6 != (wchar_t *)&DAT_00405f00) {\n        FUN_002ed100(pwVar5 + -6,local_39);\n      }\n      if (pwVar4 + -6 != (wchar_t *)&DAT_00405f00) {\n        FUN_002ed100(pwVar4 + -6,local_39);\n      }\n      return iVar3;\n    }\n    sVar6 = wcslen(pwVar7);\n    pwVar7 = pwVar7 + sVar6;\n    sVar6 = wcslen(pwVar8);\n    pwVar8 = pwVar8 + sVar6;\n    if ((pwVar4 + lVar1 == pwVar7) && (pwVar5 + lVar2 == pwVar8)) goto LAB_002ed1f2;\n    if (pwVar4 + lVar1 == pwVar7) {\n      iVar3 = -1;\n      goto LAB_002ed1f2;\n    }\n    if (pwVar5 + lVar2 == pwVar8) {\n      iVar3 = 1;\n      goto LAB_002ed1f2;\n    }\n    pwVar7 = pwVar7 + 1;\n    pwVar8 = pwVar8 + 1;\n  } while( true );\n}\n\n" (function_definition "int FUN_002ed140(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,\n                undefined8 param_5)\n\n{\n  long lVar1;\n  long lVar2;\n  int iVar3;\n  wchar_t *pwVar4;\n  wchar_t *pwVar5;\n  size_t sVar6;\n  wchar_t *pwVar7;\n  wchar_t *pwVar8;\n  undefined1 local_39 [9];\n  \n  pwVar4 = (wchar_t *)FUN_0031f230(param_2,param_3,local_39);\n                    \n  pwVar5 = (wchar_t *)FUN_0031f230(param_4,param_5,local_39);\n  lVar1 = *(long *)(pwVar4 + -6);\n  lVar2 = *(long *)(pwVar5 + -6);\n  pwVar7 = pwVar4;\n  pwVar8 = pwVar5;\n  do {\n    iVar3 = FUN_002e9730(param_1,pwVar7,pwVar8);\n    if (iVar3 != 0) {\nLAB_002ed1f2:\n      if (pwVar5 + -6 != (wchar_t *)&DAT_00405f00) {\n        FUN_002ed100(pwVar5 + -6,local_39);\n      }\n      if (pwVar4 + -6 != (wchar_t *)&DAT_00405f00) {\n        FUN_002ed100(pwVar4 + -6,local_39);\n      }\n      return iVar3;\n    }\n    sVar6 = wcslen(pwVar7);\n    pwVar7 = pwVar7 + sVar6;\n    sVar6 = wcslen(pwVar8);\n    pwVar8 = pwVar8 + sVar6;\n    if ((pwVar4 + lVar1 == pwVar7) && (pwVar5 + lVar2 == pwVar8)) goto LAB_002ed1f2;\n    if (pwVar4 + lVar1 == pwVar7) {\n      iVar3 = -1;\n      goto LAB_002ed1f2;\n    }\n    if (pwVar5 + lVar2 == pwVar8) {\n      iVar3 = 1;\n      goto LAB_002ed1f2;\n    }\n    pwVar7 = pwVar7 + 1;\n    pwVar8 = pwVar8 + 1;\n  } while( true );\n}" primitive_type (function_declarator "FUN_002ed140(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,\n                undefined8 param_5)" identifier (parameter_list "(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,\n                undefined8 param_5)" ( (parameter_declaration "undefined8 param_1" type_identifier identifier) , (parameter_declaration "undefined8 param_2" type_identifier identifier) , (parameter_declaration "undefined8 param_3" type_identifier identifier) , (parameter_declaration "undefined8 param_4" type_identifier identifier) , (parameter_declaration "undefined8 param_5" type_identifier identifier) ))) (compound_statement "{\n  long lVar1;\n  long lVar2;\n  int iVar3;\n  wchar_t *pwVar4;\n  wchar_t *pwVar5;\n  size_t sVar6;\n  wchar_t *pwVar7;\n  wchar_t *pwVar8;\n  undefined1 local_39 [9];\n  \n  pwVar4 = (wchar_t *)FUN_0031f230(param_2,param_3,local_39);\n                    \n  pwVar5 = (wchar_t *)FUN_0031f230(param_4,param_5,local_39);\n  lVar1 = *(long *)(pwVar4 + -6);\n  lVar2 = *(long *)(pwVar5 + -6);\n  pwVar7 = pwVar4;\n  pwVar8 = pwVar5;\n  do {\n    iVar3 = FUN_002e9730(param_1,pwVar7,pwVar8);\n    if (iVar3 != 0) {\nLAB_002ed1f2:\n      if (pwVar5 + -6 != (wchar_t *)&DAT_00405f00) {\n        FUN_002ed100(pwVar5 + -6,local_39);\n      }\n      if (pwVar4 + -6 != (wchar_t *)&DAT_00405f00) {\n        FUN_002ed100(pwVar4 + -6,local_39);\n      }\n      return iVar3;\n    }\n    sVar6 = wcslen(pwVar7);\n    pwVar7 = pwVar7 + sVar6;\n    sVar6 = wcslen(pwVar8);\n    pwVar8 = pwVar8 + sVar6;\n    if ((pwVar4 + lVar1 == pwVar7) && (pwVar5 + lVar2 == pwVar8)) goto LAB_002ed1f2;\n    if (pwVar4 + lVar1 == pwVar7) {\n      iVar3 = -1;\n      goto LAB_002ed1f2;\n    }\n    if (pwVar5 + lVar2 == pwVar8) {\n      iVar3 = 1;\n      goto LAB_002ed1f2;\n    }\n    pwVar7 = pwVar7 + 1;\n    pwVar8 = pwVar8 + 1;\n  } while( true );\n}" { (declaration "long lVar1;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "wchar_t *pwVar4;" type_identifier (pointer_declarator "*pwVar4" * identifier) ;) (declaration "wchar_t *pwVar5;" type_identifier (pointer_declarator "*pwVar5" * identifier) ;) (declaration "size_t sVar6;" primitive_type identifier ;) (declaration "wchar_t *pwVar7;" type_identifier (pointer_declarator "*pwVar7" * identifier) ;) (declaration "wchar_t *pwVar8;" type_identifier (pointer_declarator "*pwVar8" * identifier) ;) (declaration "undefined1 local_39 [9];" type_identifier (array_declarator "local_39 [9]" identifier [ number_literal ]) ;) (expression_statement "pwVar4 = (wchar_t *)FUN_0031f230(param_2,param_3,local_39);" (assignment_expression "pwVar4 = (wchar_t *)FUN_0031f230(param_2,param_3,local_39)" identifier = (cast_expression "(wchar_t *)FUN_0031f230(param_2,param_3,local_39)" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0031f230(param_2,param_3,local_39)" identifier (argument_list "(param_2,param_3,local_39)" ( identifier , identifier , identifier ))))) ;) (expression_statement "pwVar5 = (wchar_t *)FUN_0031f230(param_4,param_5,local_39);" (assignment_expression "pwVar5 = (wchar_t *)FUN_0031f230(param_4,param_5,local_39)" identifier = (cast_expression "(wchar_t *)FUN_0031f230(param_4,param_5,local_39)" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0031f230(param_4,param_5,local_39)" identifier (argument_list "(param_4,param_5,local_39)" ( identifier , identifier , identifier ))))) ;) (expression_statement "lVar1 = *(long *)(pwVar4 + -6);" (assignment_expression "lVar1 = *(long *)(pwVar4 + -6)" identifier = (pointer_expression "*(long *)(pwVar4 + -6)" * (cast_expression "(long *)(pwVar4 + -6)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pwVar4 + -6)" ( (binary_expression "pwVar4 + -6" identifier + number_literal) ))))) ;) (expression_statement "lVar2 = *(long *)(pwVar5 + -6);" (assignment_expression "lVar2 = *(long *)(pwVar5 + -6)" identifier = (pointer_expression "*(long *)(pwVar5 + -6)" * (cast_expression "(long *)(pwVar5 + -6)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pwVar5 + -6)" ( (binary_expression "pwVar5 + -6" identifier + number_literal) ))))) ;) (expression_statement "pwVar7 = pwVar4;" (assignment_expression "pwVar7 = pwVar4" identifier = identifier) ;) (expression_statement "pwVar8 = pwVar5;" (assignment_expression "pwVar8 = pwVar5" identifier = identifier) ;) (do_statement "do {\n    iVar3 = FUN_002e9730(param_1,pwVar7,pwVar8);\n    if (iVar3 != 0) {\nLAB_002ed1f2:\n      if (pwVar5 + -6 != (wchar_t *)&DAT_00405f00) {\n        FUN_002ed100(pwVar5 + -6,local_39);\n      }\n      if (pwVar4 + -6 != (wchar_t *)&DAT_00405f00) {\n        FUN_002ed100(pwVar4 + -6,local_39);\n      }\n      return iVar3;\n    }\n    sVar6 = wcslen(pwVar7);\n    pwVar7 = pwVar7 + sVar6;\n    sVar6 = wcslen(pwVar8);\n    pwVar8 = pwVar8 + sVar6;\n    if ((pwVar4 + lVar1 == pwVar7) && (pwVar5 + lVar2 == pwVar8)) goto LAB_002ed1f2;\n    if (pwVar4 + lVar1 == pwVar7) {\n      iVar3 = -1;\n      goto LAB_002ed1f2;\n    }\n    if (pwVar5 + lVar2 == pwVar8) {\n      iVar3 = 1;\n      goto LAB_002ed1f2;\n    }\n    pwVar7 = pwVar7 + 1;\n    pwVar8 = pwVar8 + 1;\n  } while( true );" do (compound_statement "{\n    iVar3 = FUN_002e9730(param_1,pwVar7,pwVar8);\n    if (iVar3 != 0) {\nLAB_002ed1f2:\n      if (pwVar5 + -6 != (wchar_t *)&DAT_00405f00) {\n        FUN_002ed100(pwVar5 + -6,local_39);\n      }\n      if (pwVar4 + -6 != (wchar_t *)&DAT_00405f00) {\n        FUN_002ed100(pwVar4 + -6,local_39);\n      }\n      return iVar3;\n    }\n    sVar6 = wcslen(pwVar7);\n    pwVar7 = pwVar7 + sVar6;\n    sVar6 = wcslen(pwVar8);\n    pwVar8 = pwVar8 + sVar6;\n    if ((pwVar4 + lVar1 == pwVar7) && (pwVar5 + lVar2 == pwVar8)) goto LAB_002ed1f2;\n    if (pwVar4 + lVar1 == pwVar7) {\n      iVar3 = -1;\n      goto LAB_002ed1f2;\n    }\n    if (pwVar5 + lVar2 == pwVar8) {\n      iVar3 = 1;\n      goto LAB_002ed1f2;\n    }\n    pwVar7 = pwVar7 + 1;\n    pwVar8 = pwVar8 + 1;\n  }" { (expression_statement "iVar3 = FUN_002e9730(param_1,pwVar7,pwVar8);" (assignment_expression "iVar3 = FUN_002e9730(param_1,pwVar7,pwVar8)" identifier = (call_expression "FUN_002e9730(param_1,pwVar7,pwVar8)" identifier (argument_list "(param_1,pwVar7,pwVar8)" ( identifier , identifier , identifier )))) ;) (if_statement "if (iVar3 != 0) {\nLAB_002ed1f2:\n      if (pwVar5 + -6 != (wchar_t *)&DAT_00405f00) {\n        FUN_002ed100(pwVar5 + -6,local_39);\n      }\n      if (pwVar4 + -6 != (wchar_t *)&DAT_00405f00) {\n        FUN_002ed100(pwVar4 + -6,local_39);\n      }\n      return iVar3;\n    }" if (parenthesized_expression "(iVar3 != 0)" ( (binary_expression "iVar3 != 0" identifier != number_literal) )) (compound_statement "{\nLAB_002ed1f2:\n      if (pwVar5 + -6 != (wchar_t *)&DAT_00405f00) {\n        FUN_002ed100(pwVar5 + -6,local_39);\n      }\n      if (pwVar4 + -6 != (wchar_t *)&DAT_00405f00) {\n        FUN_002ed100(pwVar4 + -6,local_39);\n      }\n      return iVar3;\n    }" { (labeled_statement "LAB_002ed1f2:\n      if (pwVar5 + -6 != (wchar_t *)&DAT_00405f00) {\n        FUN_002ed100(pwVar5 + -6,local_39);\n      }" statement_identifier : (if_statement "if (pwVar5 + -6 != (wchar_t *)&DAT_00405f00) {\n        FUN_002ed100(pwVar5 + -6,local_39);\n      }" if (parenthesized_expression "(pwVar5 + -6 != (wchar_t *)&DAT_00405f00)" ( (binary_expression "pwVar5 + -6 != (wchar_t *)&DAT_00405f00" (binary_expression "pwVar5 + -6" identifier + number_literal) != (cast_expression "(wchar_t *)&DAT_00405f00" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&DAT_00405f00" & identifier))) )) (compound_statement "{\n        FUN_002ed100(pwVar5 + -6,local_39);\n      }" { (expression_statement "FUN_002ed100(pwVar5 + -6,local_39);" (call_expression "FUN_002ed100(pwVar5 + -6,local_39)" identifier (argument_list "(pwVar5 + -6,local_39)" ( (binary_expression "pwVar5 + -6" identifier + number_literal) , identifier ))) ;) }))) (if_statement "if (pwVar4 + -6 != (wchar_t *)&DAT_00405f00) {\n        FUN_002ed100(pwVar4 + -6,local_39);\n      }" if (parenthesized_expression "(pwVar4 + -6 != (wchar_t *)&DAT_00405f00)" ( (binary_expression "pwVar4 + -6 != (wchar_t *)&DAT_00405f00" (binary_expression "pwVar4 + -6" identifier + number_literal) != (cast_expression "(wchar_t *)&DAT_00405f00" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&DAT_00405f00" & identifier))) )) (compound_statement "{\n        FUN_002ed100(pwVar4 + -6,local_39);\n      }" { (expression_statement "FUN_002ed100(pwVar4 + -6,local_39);" (call_expression "FUN_002ed100(pwVar4 + -6,local_39)" identifier (argument_list "(pwVar4 + -6,local_39)" ( (binary_expression "pwVar4 + -6" identifier + number_literal) , identifier ))) ;) })) (return_statement "return iVar3;" return identifier ;) })) (expression_statement "sVar6 = wcslen(pwVar7);" (assignment_expression "sVar6 = wcslen(pwVar7)" identifier = (call_expression "wcslen(pwVar7)" identifier (argument_list "(pwVar7)" ( identifier )))) ;) (expression_statement "pwVar7 = pwVar7 + sVar6;" (assignment_expression "pwVar7 = pwVar7 + sVar6" identifier = (binary_expression "pwVar7 + sVar6" identifier + identifier)) ;) (expression_statement "sVar6 = wcslen(pwVar8);" (assignment_expression "sVar6 = wcslen(pwVar8)" identifier = (call_expression "wcslen(pwVar8)" identifier (argument_list "(pwVar8)" ( identifier )))) ;) (expression_statement "pwVar8 = pwVar8 + sVar6;" (assignment_expression "pwVar8 = pwVar8 + sVar6" identifier = (binary_expression "pwVar8 + sVar6" identifier + identifier)) ;) (if_statement "if ((pwVar4 + lVar1 == pwVar7) && (pwVar5 + lVar2 == pwVar8)) goto LAB_002ed1f2;" if (parenthesized_expression "((pwVar4 + lVar1 == pwVar7) && (pwVar5 + lVar2 == pwVar8))" ( (binary_expression "(pwVar4 + lVar1 == pwVar7) && (pwVar5 + lVar2 == pwVar8)" (parenthesized_expression "(pwVar4 + lVar1 == pwVar7)" ( (binary_expression "pwVar4 + lVar1 == pwVar7" (binary_expression "pwVar4 + lVar1" identifier + identifier) == identifier) )) && (parenthesized_expression "(pwVar5 + lVar2 == pwVar8)" ( (binary_expression "pwVar5 + lVar2 == pwVar8" (binary_expression "pwVar5 + lVar2" identifier + identifier) == identifier) ))) )) (goto_statement "goto LAB_002ed1f2;" goto statement_identifier ;)) (if_statement "if (pwVar4 + lVar1 == pwVar7) {\n      iVar3 = -1;\n      goto LAB_002ed1f2;\n    }" if (parenthesized_expression "(pwVar4 + lVar1 == pwVar7)" ( (binary_expression "pwVar4 + lVar1 == pwVar7" (binary_expression "pwVar4 + lVar1" identifier + identifier) == identifier) )) (compound_statement "{\n      iVar3 = -1;\n      goto LAB_002ed1f2;\n    }" { (expression_statement "iVar3 = -1;" (assignment_expression "iVar3 = -1" identifier = number_literal) ;) (goto_statement "goto LAB_002ed1f2;" goto statement_identifier ;) })) (if_statement "if (pwVar5 + lVar2 == pwVar8) {\n      iVar3 = 1;\n      goto LAB_002ed1f2;\n    }" if (parenthesized_expression "(pwVar5 + lVar2 == pwVar8)" ( (binary_expression "pwVar5 + lVar2 == pwVar8" (binary_expression "pwVar5 + lVar2" identifier + identifier) == identifier) )) (compound_statement "{\n      iVar3 = 1;\n      goto LAB_002ed1f2;\n    }" { (expression_statement "iVar3 = 1;" (assignment_expression "iVar3 = 1" identifier = number_literal) ;) (goto_statement "goto LAB_002ed1f2;" goto statement_identifier ;) })) (expression_statement "pwVar7 = pwVar7 + 1;" (assignment_expression "pwVar7 = pwVar7 + 1" identifier = (binary_expression "pwVar7 + 1" identifier + number_literal)) ;) (expression_statement "pwVar8 = pwVar8 + 1;" (assignment_expression "pwVar8 = pwVar8 + 1" identifier = (binary_expression "pwVar8 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "( true )" ( true )) ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT ))))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression & IDENT))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , IDENT ))) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression & IDENT))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , IDENT ))) ;) })) (return_statement return IDENT ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (binary_expression IDENT + IDENT) == IDENT) )) && (parenthesized_expression ( (binary_expression (binary_expression IDENT + IDENT) == IDENT) ))) )) (goto_statement goto statement_identifier ;)) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT + IDENT) == IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (goto_statement goto statement_identifier ;) })) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT + IDENT) == IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( BOOL )) ;) })))
(function_definition "int FUN_002ed140(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,\n                undefined8 param_5)\n\n{\n  long lVar1;\n  long lVar2;\n  int iVar3;\n  wchar_t *pwVar4;\n  wchar_t *pwVar5;\n  size_t sVar6;\n  wchar_t *pwVar7;\n  wchar_t *pwVar8;\n  undefined1 local_39 [9];\n  \n  pwVar4 = (wchar_t *)FUN_0031f230(param_2,param_3,local_39);\n                    \n  pwVar5 = (wchar_t *)FUN_0031f230(param_4,param_5,local_39);\n  lVar1 = *(long *)(pwVar4 + -6);\n  lVar2 = *(long *)(pwVar5 + -6);\n  pwVar7 = pwVar4;\n  pwVar8 = pwVar5;\n  do {\n    iVar3 = FUN_002e9730(param_1,pwVar7,pwVar8);\n    if (iVar3 != 0) {\nLAB_002ed1f2:\n      if (pwVar5 + -6 != (wchar_t *)&DAT_00405f00) {\n        FUN_002ed100(pwVar5 + -6,local_39);\n      }\n      if (pwVar4 + -6 != (wchar_t *)&DAT_00405f00) {\n        FUN_002ed100(pwVar4 + -6,local_39);\n      }\n      return iVar3;\n    }\n    sVar6 = wcslen(pwVar7);\n    pwVar7 = pwVar7 + sVar6;\n    sVar6 = wcslen(pwVar8);\n    pwVar8 = pwVar8 + sVar6;\n    if ((pwVar4 + lVar1 == pwVar7) && (pwVar5 + lVar2 == pwVar8)) goto LAB_002ed1f2;\n    if (pwVar4 + lVar1 == pwVar7) {\n      iVar3 = -1;\n      goto LAB_002ed1f2;\n    }\n    if (pwVar5 + lVar2 == pwVar8) {\n      iVar3 = 1;\n      goto LAB_002ed1f2;\n    }\n    pwVar7 = pwVar7 + 1;\n    pwVar8 = pwVar8 + 1;\n  } while( true );\n}" (primitive_type "int") (function_declarator "FUN_002ed140(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,\n                undefined8 param_5)" (identifier "FUN_002ed140") (parameter_list "(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,\n                undefined8 param_5)" (( "(") (parameter_declaration "undefined8 param_1" (type_identifier "undefined8") (identifier "param_1")) (, ",") (parameter_declaration "undefined8 param_2" (type_identifier "undefined8") (identifier "param_2")) (, ",") (parameter_declaration "undefined8 param_3" (type_identifier "undefined8") (identifier "param_3")) (, ",") (parameter_declaration "undefined8 param_4" (type_identifier "undefined8") (identifier "param_4")) (, ",") (parameter_declaration "undefined8 param_5" (type_identifier "undefined8") (identifier "param_5")) () ")"))) (compound_statement "{\n  long lVar1;\n  long lVar2;\n  int iVar3;\n  wchar_t *pwVar4;\n  wchar_t *pwVar5;\n  size_t sVar6;\n  wchar_t *pwVar7;\n  wchar_t *pwVar8;\n  undefined1 local_39 [9];\n  \n  pwVar4 = (wchar_t *)FUN_0031f230(param_2,param_3,local_39);\n                    \n  pwVar5 = (wchar_t *)FUN_0031f230(param_4,param_5,local_39);\n  lVar1 = *(long *)(pwVar4 + -6);\n  lVar2 = *(long *)(pwVar5 + -6);\n  pwVar7 = pwVar4;\n  pwVar8 = pwVar5;\n  do {\n    iVar3 = FUN_002e9730(param_1,pwVar7,pwVar8);\n    if (iVar3 != 0) {\nLAB_002ed1f2:\n      if (pwVar5 + -6 != (wchar_t *)&DAT_00405f00) {\n        FUN_002ed100(pwVar5 + -6,local_39);\n      }\n      if (pwVar4 + -6 != (wchar_t *)&DAT_00405f00) {\n        FUN_002ed100(pwVar4 + -6,local_39);\n      }\n      return iVar3;\n    }\n    sVar6 = wcslen(pwVar7);\n    pwVar7 = pwVar7 + sVar6;\n    sVar6 = wcslen(pwVar8);\n    pwVar8 = pwVar8 + sVar6;\n    if ((pwVar4 + lVar1 == pwVar7) && (pwVar5 + lVar2 == pwVar8)) goto LAB_002ed1f2;\n    if (pwVar4 + lVar1 == pwVar7) {\n      iVar3 = -1;\n      goto LAB_002ed1f2;\n    }\n    if (pwVar5 + lVar2 == pwVar8) {\n      iVar3 = 1;\n      goto LAB_002ed1f2;\n    }\n    pwVar7 = pwVar7 + 1;\n    pwVar8 = pwVar8 + 1;\n  } while( true );\n}" ({ "{") (declaration "long lVar1;" (sized_type_specifier "long" (long "long")) (identifier "lVar1") (; ";")) (declaration "long lVar2;" (sized_type_specifier "long" (long "long")) (identifier "lVar2") (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (declaration "wchar_t *pwVar4;" (type_identifier "wchar_t") (pointer_declarator "*pwVar4" (* "*") (identifier "pwVar4")) (; ";")) (declaration "wchar_t *pwVar5;" (type_identifier "wchar_t") (pointer_declarator "*pwVar5" (* "*") (identifier "pwVar5")) (; ";")) (declaration "size_t sVar6;" (primitive_type "size_t") (identifier "sVar6") (; ";")) (declaration "wchar_t *pwVar7;" (type_identifier "wchar_t") (pointer_declarator "*pwVar7" (* "*") (identifier "pwVar7")) (; ";")) (declaration "wchar_t *pwVar8;" (type_identifier "wchar_t") (pointer_declarator "*pwVar8" (* "*") (identifier "pwVar8")) (; ";")) (declaration "undefined1 local_39 [9];" (type_identifier "undefined1") (array_declarator "local_39 [9]" (identifier "local_39") ([ "[") (number_literal "9") (] "]")) (; ";")) (expression_statement "pwVar4 = (wchar_t *)FUN_0031f230(param_2,param_3,local_39);" (assignment_expression "pwVar4 = (wchar_t *)FUN_0031f230(param_2,param_3,local_39)" (identifier "pwVar4") (= "=") (cast_expression "(wchar_t *)FUN_0031f230(param_2,param_3,local_39)" (( "(") (type_descriptor "wchar_t *" (type_identifier "wchar_t") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_0031f230(param_2,param_3,local_39)" (identifier "FUN_0031f230") (argument_list "(param_2,param_3,local_39)" (( "(") (identifier "param_2") (, ",") (identifier "param_3") (, ",") (identifier "local_39") () ")"))))) (; ";")) (expression_statement "pwVar5 = (wchar_t *)FUN_0031f230(param_4,param_5,local_39);" (assignment_expression "pwVar5 = (wchar_t *)FUN_0031f230(param_4,param_5,local_39)" (identifier "pwVar5") (= "=") (cast_expression "(wchar_t *)FUN_0031f230(param_4,param_5,local_39)" (( "(") (type_descriptor "wchar_t *" (type_identifier "wchar_t") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_0031f230(param_4,param_5,local_39)" (identifier "FUN_0031f230") (argument_list "(param_4,param_5,local_39)" (( "(") (identifier "param_4") (, ",") (identifier "param_5") (, ",") (identifier "local_39") () ")"))))) (; ";")) (expression_statement "lVar1 = *(long *)(pwVar4 + -6);" (assignment_expression "lVar1 = *(long *)(pwVar4 + -6)" (identifier "lVar1") (= "=") (pointer_expression "*(long *)(pwVar4 + -6)" (* "*") (cast_expression "(long *)(pwVar4 + -6)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(pwVar4 + -6)" (( "(") (binary_expression "pwVar4 + -6" (identifier "pwVar4") (+ "+") (number_literal "-6")) () ")"))))) (; ";")) (expression_statement "lVar2 = *(long *)(pwVar5 + -6);" (assignment_expression "lVar2 = *(long *)(pwVar5 + -6)" (identifier "lVar2") (= "=") (pointer_expression "*(long *)(pwVar5 + -6)" (* "*") (cast_expression "(long *)(pwVar5 + -6)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(pwVar5 + -6)" (( "(") (binary_expression "pwVar5 + -6" (identifier "pwVar5") (+ "+") (number_literal "-6")) () ")"))))) (; ";")) (expression_statement "pwVar7 = pwVar4;" (assignment_expression "pwVar7 = pwVar4" (identifier "pwVar7") (= "=") (identifier "pwVar4")) (; ";")) (expression_statement "pwVar8 = pwVar5;" (assignment_expression "pwVar8 = pwVar5" (identifier "pwVar8") (= "=") (identifier "pwVar5")) (; ";")) (do_statement "do {\n    iVar3 = FUN_002e9730(param_1,pwVar7,pwVar8);\n    if (iVar3 != 0) {\nLAB_002ed1f2:\n      if (pwVar5 + -6 != (wchar_t *)&DAT_00405f00) {\n        FUN_002ed100(pwVar5 + -6,local_39);\n      }\n      if (pwVar4 + -6 != (wchar_t *)&DAT_00405f00) {\n        FUN_002ed100(pwVar4 + -6,local_39);\n      }\n      return iVar3;\n    }\n    sVar6 = wcslen(pwVar7);\n    pwVar7 = pwVar7 + sVar6;\n    sVar6 = wcslen(pwVar8);\n    pwVar8 = pwVar8 + sVar6;\n    if ((pwVar4 + lVar1 == pwVar7) && (pwVar5 + lVar2 == pwVar8)) goto LAB_002ed1f2;\n    if (pwVar4 + lVar1 == pwVar7) {\n      iVar3 = -1;\n      goto LAB_002ed1f2;\n    }\n    if (pwVar5 + lVar2 == pwVar8) {\n      iVar3 = 1;\n      goto LAB_002ed1f2;\n    }\n    pwVar7 = pwVar7 + 1;\n    pwVar8 = pwVar8 + 1;\n  } while( true );" (do "do") (compound_statement "{\n    iVar3 = FUN_002e9730(param_1,pwVar7,pwVar8);\n    if (iVar3 != 0) {\nLAB_002ed1f2:\n      if (pwVar5 + -6 != (wchar_t *)&DAT_00405f00) {\n        FUN_002ed100(pwVar5 + -6,local_39);\n      }\n      if (pwVar4 + -6 != (wchar_t *)&DAT_00405f00) {\n        FUN_002ed100(pwVar4 + -6,local_39);\n      }\n      return iVar3;\n    }\n    sVar6 = wcslen(pwVar7);\n    pwVar7 = pwVar7 + sVar6;\n    sVar6 = wcslen(pwVar8);\n    pwVar8 = pwVar8 + sVar6;\n    if ((pwVar4 + lVar1 == pwVar7) && (pwVar5 + lVar2 == pwVar8)) goto LAB_002ed1f2;\n    if (pwVar4 + lVar1 == pwVar7) {\n      iVar3 = -1;\n      goto LAB_002ed1f2;\n    }\n    if (pwVar5 + lVar2 == pwVar8) {\n      iVar3 = 1;\n      goto LAB_002ed1f2;\n    }\n    pwVar7 = pwVar7 + 1;\n    pwVar8 = pwVar8 + 1;\n  }" ({ "{") (expression_statement "iVar3 = FUN_002e9730(param_1,pwVar7,pwVar8);" (assignment_expression "iVar3 = FUN_002e9730(param_1,pwVar7,pwVar8)" (identifier "iVar3") (= "=") (call_expression "FUN_002e9730(param_1,pwVar7,pwVar8)" (identifier "FUN_002e9730") (argument_list "(param_1,pwVar7,pwVar8)" (( "(") (identifier "param_1") (, ",") (identifier "pwVar7") (, ",") (identifier "pwVar8") () ")")))) (; ";")) (if_statement "if (iVar3 != 0) {\nLAB_002ed1f2:\n      if (pwVar5 + -6 != (wchar_t *)&DAT_00405f00) {\n        FUN_002ed100(pwVar5 + -6,local_39);\n      }\n      if (pwVar4 + -6 != (wchar_t *)&DAT_00405f00) {\n        FUN_002ed100(pwVar4 + -6,local_39);\n      }\n      return iVar3;\n    }" (if "if") (parenthesized_expression "(iVar3 != 0)" (( "(") (binary_expression "iVar3 != 0" (identifier "iVar3") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\nLAB_002ed1f2:\n      if (pwVar5 + -6 != (wchar_t *)&DAT_00405f00) {\n        FUN_002ed100(pwVar5 + -6,local_39);\n      }\n      if (pwVar4 + -6 != (wchar_t *)&DAT_00405f00) {\n        FUN_002ed100(pwVar4 + -6,local_39);\n      }\n      return iVar3;\n    }" ({ "{") (labeled_statement "LAB_002ed1f2:\n      if (pwVar5 + -6 != (wchar_t *)&DAT_00405f00) {\n        FUN_002ed100(pwVar5 + -6,local_39);\n      }" (statement_identifier "LAB_002ed1f2") (: ":") (if_statement "if (pwVar5 + -6 != (wchar_t *)&DAT_00405f00) {\n        FUN_002ed100(pwVar5 + -6,local_39);\n      }" (if "if") (parenthesized_expression "(pwVar5 + -6 != (wchar_t *)&DAT_00405f00)" (( "(") (binary_expression "pwVar5 + -6 != (wchar_t *)&DAT_00405f00" (binary_expression "pwVar5 + -6" (identifier "pwVar5") (+ "+") (number_literal "-6")) (!= "!=") (cast_expression "(wchar_t *)&DAT_00405f00" (( "(") (type_descriptor "wchar_t *" (type_identifier "wchar_t") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "&DAT_00405f00" (& "&") (identifier "DAT_00405f00")))) () ")")) (compound_statement "{\n        FUN_002ed100(pwVar5 + -6,local_39);\n      }" ({ "{") (expression_statement "FUN_002ed100(pwVar5 + -6,local_39);" (call_expression "FUN_002ed100(pwVar5 + -6,local_39)" (identifier "FUN_002ed100") (argument_list "(pwVar5 + -6,local_39)" (( "(") (binary_expression "pwVar5 + -6" (identifier "pwVar5") (+ "+") (number_literal "-6")) (, ",") (identifier "local_39") () ")"))) (; ";")) (} "}")))) (if_statement "if (pwVar4 + -6 != (wchar_t *)&DAT_00405f00) {\n        FUN_002ed100(pwVar4 + -6,local_39);\n      }" (if "if") (parenthesized_expression "(pwVar4 + -6 != (wchar_t *)&DAT_00405f00)" (( "(") (binary_expression "pwVar4 + -6 != (wchar_t *)&DAT_00405f00" (binary_expression "pwVar4 + -6" (identifier "pwVar4") (+ "+") (number_literal "-6")) (!= "!=") (cast_expression "(wchar_t *)&DAT_00405f00" (( "(") (type_descriptor "wchar_t *" (type_identifier "wchar_t") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "&DAT_00405f00" (& "&") (identifier "DAT_00405f00")))) () ")")) (compound_statement "{\n        FUN_002ed100(pwVar4 + -6,local_39);\n      }" ({ "{") (expression_statement "FUN_002ed100(pwVar4 + -6,local_39);" (call_expression "FUN_002ed100(pwVar4 + -6,local_39)" (identifier "FUN_002ed100") (argument_list "(pwVar4 + -6,local_39)" (( "(") (binary_expression "pwVar4 + -6" (identifier "pwVar4") (+ "+") (number_literal "-6")) (, ",") (identifier "local_39") () ")"))) (; ";")) (} "}"))) (return_statement "return iVar3;" (return "return") (identifier "iVar3") (; ";")) (} "}"))) (expression_statement "sVar6 = wcslen(pwVar7);" (assignment_expression "sVar6 = wcslen(pwVar7)" (identifier "sVar6") (= "=") (call_expression "wcslen(pwVar7)" (identifier "wcslen") (argument_list "(pwVar7)" (( "(") (identifier "pwVar7") () ")")))) (; ";")) (expression_statement "pwVar7 = pwVar7 + sVar6;" (assignment_expression "pwVar7 = pwVar7 + sVar6" (identifier "pwVar7") (= "=") (binary_expression "pwVar7 + sVar6" (identifier "pwVar7") (+ "+") (identifier "sVar6"))) (; ";")) (expression_statement "sVar6 = wcslen(pwVar8);" (assignment_expression "sVar6 = wcslen(pwVar8)" (identifier "sVar6") (= "=") (call_expression "wcslen(pwVar8)" (identifier "wcslen") (argument_list "(pwVar8)" (( "(") (identifier "pwVar8") () ")")))) (; ";")) (expression_statement "pwVar8 = pwVar8 + sVar6;" (assignment_expression "pwVar8 = pwVar8 + sVar6" (identifier "pwVar8") (= "=") (binary_expression "pwVar8 + sVar6" (identifier "pwVar8") (+ "+") (identifier "sVar6"))) (; ";")) (if_statement "if ((pwVar4 + lVar1 == pwVar7) && (pwVar5 + lVar2 == pwVar8)) goto LAB_002ed1f2;" (if "if") (parenthesized_expression "((pwVar4 + lVar1 == pwVar7) && (pwVar5 + lVar2 == pwVar8))" (( "(") (binary_expression "(pwVar4 + lVar1 == pwVar7) && (pwVar5 + lVar2 == pwVar8)" (parenthesized_expression "(pwVar4 + lVar1 == pwVar7)" (( "(") (binary_expression "pwVar4 + lVar1 == pwVar7" (binary_expression "pwVar4 + lVar1" (identifier "pwVar4") (+ "+") (identifier "lVar1")) (== "==") (identifier "pwVar7")) () ")")) (&& "&&") (parenthesized_expression "(pwVar5 + lVar2 == pwVar8)" (( "(") (binary_expression "pwVar5 + lVar2 == pwVar8" (binary_expression "pwVar5 + lVar2" (identifier "pwVar5") (+ "+") (identifier "lVar2")) (== "==") (identifier "pwVar8")) () ")"))) () ")")) (goto_statement "goto LAB_002ed1f2;" (goto "goto") (statement_identifier "LAB_002ed1f2") (; ";"))) (if_statement "if (pwVar4 + lVar1 == pwVar7) {\n      iVar3 = -1;\n      goto LAB_002ed1f2;\n    }" (if "if") (parenthesized_expression "(pwVar4 + lVar1 == pwVar7)" (( "(") (binary_expression "pwVar4 + lVar1 == pwVar7" (binary_expression "pwVar4 + lVar1" (identifier "pwVar4") (+ "+") (identifier "lVar1")) (== "==") (identifier "pwVar7")) () ")")) (compound_statement "{\n      iVar3 = -1;\n      goto LAB_002ed1f2;\n    }" ({ "{") (expression_statement "iVar3 = -1;" (assignment_expression "iVar3 = -1" (identifier "iVar3") (= "=") (number_literal "-1")) (; ";")) (goto_statement "goto LAB_002ed1f2;" (goto "goto") (statement_identifier "LAB_002ed1f2") (; ";")) (} "}"))) (if_statement "if (pwVar5 + lVar2 == pwVar8) {\n      iVar3 = 1;\n      goto LAB_002ed1f2;\n    }" (if "if") (parenthesized_expression "(pwVar5 + lVar2 == pwVar8)" (( "(") (binary_expression "pwVar5 + lVar2 == pwVar8" (binary_expression "pwVar5 + lVar2" (identifier "pwVar5") (+ "+") (identifier "lVar2")) (== "==") (identifier "pwVar8")) () ")")) (compound_statement "{\n      iVar3 = 1;\n      goto LAB_002ed1f2;\n    }" ({ "{") (expression_statement "iVar3 = 1;" (assignment_expression "iVar3 = 1" (identifier "iVar3") (= "=") (number_literal "1")) (; ";")) (goto_statement "goto LAB_002ed1f2;" (goto "goto") (statement_identifier "LAB_002ed1f2") (; ";")) (} "}"))) (expression_statement "pwVar7 = pwVar7 + 1;" (assignment_expression "pwVar7 = pwVar7 + 1" (identifier "pwVar7") (= "=") (binary_expression "pwVar7 + 1" (identifier "pwVar7") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "pwVar8 = pwVar8 + 1;" (assignment_expression "pwVar8 = pwVar8 + 1" (identifier "pwVar8") (= "=") (binary_expression "pwVar8 + 1" (identifier "pwVar8") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (; ";")) (} "}")))

/* std::collate<wchar_t>::do_compare(wchar_t const*, wchar_t const*, wchar_t const*, wchar_t const*)
   const */

int __thiscall
std::type_1<type_2>::function_1
          (type_1<type_2> *this,type_2 *param_1,type_2 *param_2,type_2 *param_3,
          type_2 *param_4)

{
  long var_12;
  long var_13;
  int var_6;
  type_2 *var_3;
  type_2 *var_4;
  size_t var_10;
  type_2 *var_9;
  type_2 *var_11;
  type_3 local_39 [9];
  
  var_3 = std::wstring::var_1<var_2*>(param_1,param_2,local_39);
                    /* try { // try from 002ed180 to 002ed184 has its CatchHandler @ 002ed26c */
  var_4 = std::wstring::var_1<var_2*>(param_3,param_4,local_39);
  var_12 = *(long *)(var_3 + -6);
  var_13 = *(long *)(var_4 + -6);
  var_9 = var_3;
  var_11 = var_4;
  do {
    var_6 = var_5(this,var_9,var_11);
    if (var_6 != 0) {
LAB_002ed1f2:
      if ((type_4 *)(var_4 + -6) != (type_4 *)&std::wstring::_Rep::_S_empty_rep_storage) {
        std::wstring::_Rep::var_7((type_4 *)(var_4 + -6));
      }
      if ((type_4 *)(var_3 + -6) != (type_4 *)&std::wstring::_Rep::_S_empty_rep_storage) {
        std::wstring::_Rep::var_7((type_4 *)(var_3 + -6));
      }
      return var_6;
    }
    var_10 = var_8(var_9);
    var_9 = var_9 + var_10;
    var_10 = var_8(var_11);
    var_11 = var_11 + var_10;
    if ((var_3 + var_12 == var_9) && (var_4 + var_13 == var_11)) goto LAB_002ed1f2;
    if (var_3 + var_12 == var_9) {
      var_6 = -1;
      goto LAB_002ed1f2;
    }
    if (var_4 + var_13 == var_11) {
      var_6 = 1;
      goto LAB_002ed1f2;
    }
    var_9 = var_9 + 1;
    var_11 = var_11 + 1;
  } while( true );
}


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

int MASKED(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,
                undefined8 param_5)

{
  long lVar1;
  long lVar2;
  int iVar3;
  wchar_t *pwVar4;
  wchar_t *pwVar5;
  size_t sVar6;
  wchar_t *pwVar7;
  wchar_t *pwVar8;
  undefined1 local_39 [9];
  
  pwVar4 = (wchar_t *)FUN_0031f230(param_2,param_3,local_39);
                    /* try { // try from 002ed180 to 002ed184 has its CatchHandler @ 002ed26c */
  pwVar5 = (wchar_t *)FUN_0031f230(param_4,param_5,local_39);
  lVar1 = *(long *)(pwVar4 + -6);
  lVar2 = *(long *)(pwVar5 + -6);
  pwVar7 = pwVar4;
  pwVar8 = pwVar5;
  do {
    iVar3 = FUN_002e9730(param_1,pwVar7,pwVar8);
    if (iVar3 != 0) {
LAB_002ed1f2:
      if (pwVar5 + -6 != (wchar_t *)&DAT_00405f00) {
        FUN_002ed100(pwVar5 + -6,local_39);
      }
      if (pwVar4 + -6 != (wchar_t *)&DAT_00405f00) {
        FUN_002ed100(pwVar4 + -6,local_39);
      }
      return iVar3;
    }
    sVar6 = wcslen(pwVar7);
    pwVar7 = pwVar7 + sVar6;
    sVar6 = wcslen(pwVar8);
    pwVar8 = pwVar8 + sVar6;
    if ((pwVar4 + lVar1 == pwVar7) && (pwVar5 + lVar2 == pwVar8)) goto LAB_002ed1f2;
    if (pwVar4 + lVar1 == pwVar7) {
      iVar3 = -1;
      goto LAB_002ed1f2;
    }
    if (pwVar5 + lVar2 == pwVar8) {
      iVar3 = 1;
      goto LAB_002ed1f2;
    }
    pwVar7 = pwVar7 + 1;
    pwVar8 = pwVar8 + 1;
  } while( true );
}

