
reg_errcode_t
check_arrival_expand_ecl_sub
          (re_dfa_t *dfa,re_node_set *dst_nodes,Idx target,Idx ex_subexp,wchar_t type)

{
  long lVar1;
  _Bool _Var2;
  reg_errcode_t rVar3;
  Idx IVar4;
  
  while( true ) {
    IVar4 = re_node_set_contains(dst_nodes,target);
    if (IVar4 != 0) {
      return _REG_NOERROR;
    }
    if (((uint)(byte)dfa->nodes[target].field_0x8 == type) &&
       (dfa->nodes[target].opr.sbcset == (re_bitset_ptr_t)ex_subexp)) {
      if (type != L'\t') {
        return _REG_NOERROR;
      }
      _Var2 = re_node_set_insert(dst_nodes,target);
      return -(uint)!_Var2 & _REG_ESPACE;
    }
    _Var2 = re_node_set_insert(dst_nodes,target);
    if (!_Var2) {
      return _REG_ESPACE;
    }
    lVar1 = dfa->edests[target].nelem;
    if (lVar1 == 0) break;
    if ((lVar1 == 2) &&
       (rVar3 = check_arrival_expand_ecl_sub
                          (dfa,dst_nodes,dfa->edests[target].elems[1],ex_subexp,type),
       rVar3 != _REG_NOERROR)) {
      return rVar3;
    }
    target = *dfa->edests[target].elems;
  }
  return _REG_NOERROR;
}



ulong FUN_0010f161(long *param_1,undefined8 param_2,long param_3,long param_4,uint param_5)

{
  char cVar1;
  long lVar2;
  long *plVar3;
  ulong uVar4;
  long lVar5;
  
  while( true ) {
    lVar2 = FUN_0010e1c8(param_2,param_3);
    if (lVar2 != 0) {
      return 0;
    }
    plVar3 = (long *)(param_3 * 0x10 + *param_1);
    if ((*(byte *)(plVar3 + 1) == param_5) && (*plVar3 == param_4)) {
      if (param_5 != 9) {
        return 0;
      }
      cVar1 = FUN_0010f079(param_2,param_3);
      return (ulong)(-(uint)(cVar1 == '\0') & 0xc);
    }
    cVar1 = FUN_0010f079(param_2,param_3);
    if (cVar1 == '\0') {
      return 0xc;
    }
    lVar5 = param_3 * 0x18 + param_1[5];
    lVar2 = *(long *)(lVar5 + 8);
    if (lVar2 == 0) break;
    if ((lVar2 == 2) &&
       (uVar4 = FUN_0010f161(param_1,param_2,*(undefined8 *)(*(long *)(lVar5 + 0x10) + 8),param_4,
                             param_5), (int)uVar4 != 0)) {
      return uVar4;
    }
    param_3 = **(long **)(param_1[5] + 0x10 + param_3 * 0x18);
  }
  return 0;
}


PUSH R15
PUSH R14
PUSH R13
PUSH R12
PUSH RBP
PUSH RBX
SUB RSP,0x8
MOV RBP,RDI
MOV R13,RSI
MOV RBX,RDX
MOV R15,RCX
MOV R14D,R8D
JMP 0x0010f1c1
MOV RSI,RBX
MOV RDI,R13
CALL 0x0010f079
TEST AL,AL
JZ 0x0010f232
LEA RBX,[R12 + R12*0x2]
SHL RBX,0x3
MOV RDX,RBX
ADD RDX,qword ptr [RBP + 0x28]
MOV RAX,qword ptr [RDX + 0x8]
TEST RAX,RAX
JZ 0x0010f246
CMP RAX,0x2
JZ 0x0010f20c
MOV RAX,qword ptr [RBP + 0x28]
MOV RAX,qword ptr [RAX + RBX*0x1 + 0x10]
MOV RBX,qword ptr [RAX]
MOV RSI,RBX
MOV RDI,R13
CALL 0x0010e1c8
TEST RAX,RAX
JNZ 0x0010f22b
MOV R12,RBX
MOV RAX,RBX
SHL RAX,0x4
ADD RAX,qword ptr [RBP]
MOVZX EDX,byte ptr [RAX + 0x8]
CMP EDX,R14D
JNZ 0x0010f180
CMP qword ptr [RAX],R15
JNZ 0x0010f180
MOV EAX,0x0
CMP R14D,0x9
JNZ 0x0010f237
MOV RSI,RBX
MOV RDI,R13
CALL 0x0010f079
CMP AL,0x1
SBB EAX,EAX
AND EAX,0xc
JMP 0x0010f237
MOV RAX,qword ptr [RDX + 0x10]
MOV RDX,qword ptr [RAX + 0x8]
MOV R8D,R14D
MOV RCX,R15
MOV RSI,R13
MOV RDI,RBP
CALL 0x0010f161
TEST EAX,EAX
JZ 0x0010f1b5
JMP 0x0010f237
MOV EAX,0x0
JMP 0x0010f237
MOV EAX,0xc
ADD RSP,0x8
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
MOV EAX,0x0
JMP 0x0010f237
(translation_unit "ulong FUN_0010f161(long *param_1,undefined8 param_2,long param_3,long param_4,uint param_5)\n\n{\n  char cVar1;\n  long lVar2;\n  long *plVar3;\n  ulong uVar4;\n  long lVar5;\n  \n  while( true ) {\n    lVar2 = FUN_0010e1c8(param_2,param_3);\n    if (lVar2 != 0) {\n      return 0;\n    }\n    plVar3 = (long *)(param_3 * 0x10 + *param_1);\n    if ((*(byte *)(plVar3 + 1) == param_5) && (*plVar3 == param_4)) {\n      if (param_5 != 9) {\n        return 0;\n      }\n      cVar1 = FUN_0010f079(param_2,param_3);\n      return (ulong)(-(uint)(cVar1 == '\0') & 0xc);\n    }\n    cVar1 = FUN_0010f079(param_2,param_3);\n    if (cVar1 == '\0') {\n      return 0xc;\n    }\n    lVar5 = param_3 * 0x18 + param_1[5];\n    lVar2 = *(long *)(lVar5 + 8);\n    if (lVar2 == 0) break;\n    if ((lVar2 == 2) &&\n       (uVar4 = FUN_0010f161(param_1,param_2,*(undefined8 *)(*(long *)(lVar5 + 0x10) + 8),param_4,\n                             param_5), (int)uVar4 != 0)) {\n      return uVar4;\n    }\n    param_3 = **(long **)(param_1[5] + 0x10 + param_3 * 0x18);\n  }\n  return 0;\n}\n\n" (function_definition "ulong FUN_0010f161(long *param_1,undefined8 param_2,long param_3,long param_4,uint param_5)\n\n{\n  char cVar1;\n  long lVar2;\n  long *plVar3;\n  ulong uVar4;\n  long lVar5;\n  \n  while( true ) {\n    lVar2 = FUN_0010e1c8(param_2,param_3);\n    if (lVar2 != 0) {\n      return 0;\n    }\n    plVar3 = (long *)(param_3 * 0x10 + *param_1);\n    if ((*(byte *)(plVar3 + 1) == param_5) && (*plVar3 == param_4)) {\n      if (param_5 != 9) {\n        return 0;\n      }\n      cVar1 = FUN_0010f079(param_2,param_3);\n      return (ulong)(-(uint)(cVar1 == '\0') & 0xc);\n    }\n    cVar1 = FUN_0010f079(param_2,param_3);\n    if (cVar1 == '\0') {\n      return 0xc;\n    }\n    lVar5 = param_3 * 0x18 + param_1[5];\n    lVar2 = *(long *)(lVar5 + 8);\n    if (lVar2 == 0) break;\n    if ((lVar2 == 2) &&\n       (uVar4 = FUN_0010f161(param_1,param_2,*(undefined8 *)(*(long *)(lVar5 + 0x10) + 8),param_4,\n                             param_5), (int)uVar4 != 0)) {\n      return uVar4;\n    }\n    param_3 = **(long **)(param_1[5] + 0x10 + param_3 * 0x18);\n  }\n  return 0;\n}" type_identifier (function_declarator "FUN_0010f161(long *param_1,undefined8 param_2,long param_3,long param_4,uint param_5)" identifier (parameter_list "(long *param_1,undefined8 param_2,long param_3,long param_4,uint param_5)" ( (parameter_declaration "long *param_1" (sized_type_specifier "long" long) (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "undefined8 param_2" type_identifier identifier) , (parameter_declaration "long param_3" (sized_type_specifier "long" long) identifier) , (parameter_declaration "long param_4" (sized_type_specifier "long" long) identifier) , (parameter_declaration "uint param_5" type_identifier identifier) ))) (compound_statement "{\n  char cVar1;\n  long lVar2;\n  long *plVar3;\n  ulong uVar4;\n  long lVar5;\n  \n  while( true ) {\n    lVar2 = FUN_0010e1c8(param_2,param_3);\n    if (lVar2 != 0) {\n      return 0;\n    }\n    plVar3 = (long *)(param_3 * 0x10 + *param_1);\n    if ((*(byte *)(plVar3 + 1) == param_5) && (*plVar3 == param_4)) {\n      if (param_5 != 9) {\n        return 0;\n      }\n      cVar1 = FUN_0010f079(param_2,param_3);\n      return (ulong)(-(uint)(cVar1 == '\0') & 0xc);\n    }\n    cVar1 = FUN_0010f079(param_2,param_3);\n    if (cVar1 == '\0') {\n      return 0xc;\n    }\n    lVar5 = param_3 * 0x18 + param_1[5];\n    lVar2 = *(long *)(lVar5 + 8);\n    if (lVar2 == 0) break;\n    if ((lVar2 == 2) &&\n       (uVar4 = FUN_0010f161(param_1,param_2,*(undefined8 *)(*(long *)(lVar5 + 0x10) + 8),param_4,\n                             param_5), (int)uVar4 != 0)) {\n      return uVar4;\n    }\n    param_3 = **(long **)(param_1[5] + 0x10 + param_3 * 0x18);\n  }\n  return 0;\n}" { (declaration "char cVar1;" primitive_type identifier ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (declaration "long *plVar3;" (sized_type_specifier "long" long) (pointer_declarator "*plVar3" * identifier) ;) (declaration "ulong uVar4;" type_identifier identifier ;) (declaration "long lVar5;" (sized_type_specifier "long" long) identifier ;) (while_statement "while( true ) {\n    lVar2 = FUN_0010e1c8(param_2,param_3);\n    if (lVar2 != 0) {\n      return 0;\n    }\n    plVar3 = (long *)(param_3 * 0x10 + *param_1);\n    if ((*(byte *)(plVar3 + 1) == param_5) && (*plVar3 == param_4)) {\n      if (param_5 != 9) {\n        return 0;\n      }\n      cVar1 = FUN_0010f079(param_2,param_3);\n      return (ulong)(-(uint)(cVar1 == '\0') & 0xc);\n    }\n    cVar1 = FUN_0010f079(param_2,param_3);\n    if (cVar1 == '\0') {\n      return 0xc;\n    }\n    lVar5 = param_3 * 0x18 + param_1[5];\n    lVar2 = *(long *)(lVar5 + 8);\n    if (lVar2 == 0) break;\n    if ((lVar2 == 2) &&\n       (uVar4 = FUN_0010f161(param_1,param_2,*(undefined8 *)(*(long *)(lVar5 + 0x10) + 8),param_4,\n                             param_5), (int)uVar4 != 0)) {\n      return uVar4;\n    }\n    param_3 = **(long **)(param_1[5] + 0x10 + param_3 * 0x18);\n  }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n    lVar2 = FUN_0010e1c8(param_2,param_3);\n    if (lVar2 != 0) {\n      return 0;\n    }\n    plVar3 = (long *)(param_3 * 0x10 + *param_1);\n    if ((*(byte *)(plVar3 + 1) == param_5) && (*plVar3 == param_4)) {\n      if (param_5 != 9) {\n        return 0;\n      }\n      cVar1 = FUN_0010f079(param_2,param_3);\n      return (ulong)(-(uint)(cVar1 == '\0') & 0xc);\n    }\n    cVar1 = FUN_0010f079(param_2,param_3);\n    if (cVar1 == '\0') {\n      return 0xc;\n    }\n    lVar5 = param_3 * 0x18 + param_1[5];\n    lVar2 = *(long *)(lVar5 + 8);\n    if (lVar2 == 0) break;\n    if ((lVar2 == 2) &&\n       (uVar4 = FUN_0010f161(param_1,param_2,*(undefined8 *)(*(long *)(lVar5 + 0x10) + 8),param_4,\n                             param_5), (int)uVar4 != 0)) {\n      return uVar4;\n    }\n    param_3 = **(long **)(param_1[5] + 0x10 + param_3 * 0x18);\n  }" { (expression_statement "lVar2 = FUN_0010e1c8(param_2,param_3);" (assignment_expression "lVar2 = FUN_0010e1c8(param_2,param_3)" identifier = (call_expression "FUN_0010e1c8(param_2,param_3)" identifier (argument_list "(param_2,param_3)" ( identifier , identifier )))) ;) (if_statement "if (lVar2 != 0) {\n      return 0;\n    }" if (parenthesized_expression "(lVar2 != 0)" ( (binary_expression "lVar2 != 0" identifier != number_literal) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "plVar3 = (long *)(param_3 * 0x10 + *param_1);" (assignment_expression "plVar3 = (long *)(param_3 * 0x10 + *param_1)" identifier = (cast_expression "(long *)(param_3 * 0x10 + *param_1)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 * 0x10 + *param_1)" ( (binary_expression "param_3 * 0x10 + *param_1" (binary_expression "param_3 * 0x10" identifier * number_literal) + (pointer_expression "*param_1" * identifier)) )))) ;) (if_statement "if ((*(byte *)(plVar3 + 1) == param_5) && (*plVar3 == param_4)) {\n      if (param_5 != 9) {\n        return 0;\n      }\n      cVar1 = FUN_0010f079(param_2,param_3);\n      return (ulong)(-(uint)(cVar1 == '\0') & 0xc);\n    }" if (parenthesized_expression "((*(byte *)(plVar3 + 1) == param_5) && (*plVar3 == param_4))" ( (binary_expression "(*(byte *)(plVar3 + 1) == param_5) && (*plVar3 == param_4)" (parenthesized_expression "(*(byte *)(plVar3 + 1) == param_5)" ( (binary_expression "*(byte *)(plVar3 + 1) == param_5" (pointer_expression "*(byte *)(plVar3 + 1)" * (cast_expression "(byte *)(plVar3 + 1)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(plVar3 + 1)" ( (binary_expression "plVar3 + 1" identifier + number_literal) )))) == identifier) )) && (parenthesized_expression "(*plVar3 == param_4)" ( (binary_expression "*plVar3 == param_4" (pointer_expression "*plVar3" * identifier) == identifier) ))) )) (compound_statement "{\n      if (param_5 != 9) {\n        return 0;\n      }\n      cVar1 = FUN_0010f079(param_2,param_3);\n      return (ulong)(-(uint)(cVar1 == '\0') & 0xc);\n    }" { (if_statement "if (param_5 != 9) {\n        return 0;\n      }" if (parenthesized_expression "(param_5 != 9)" ( (binary_expression "param_5 != 9" identifier != number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "cVar1 = FUN_0010f079(param_2,param_3);" (assignment_expression "cVar1 = FUN_0010f079(param_2,param_3)" identifier = (call_expression "FUN_0010f079(param_2,param_3)" identifier (argument_list "(param_2,param_3)" ( identifier , identifier )))) ;) (return_statement "return (ulong)(-(uint)(cVar1 == '\0') & 0xc);" return (call_expression "(ulong)(-(uint)(cVar1 == '\0') & 0xc)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(-(uint)(cVar1 == '\0') & 0xc)" ( (binary_expression "-(uint)(cVar1 == '\0') & 0xc" (unary_expression "-(uint)(cVar1 == '\0')" - (call_expression "(uint)(cVar1 == '\0')" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(cVar1 == '\0')" ( (binary_expression "cVar1 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )))) & number_literal) ))) ;) })) (expression_statement "cVar1 = FUN_0010f079(param_2,param_3);" (assignment_expression "cVar1 = FUN_0010f079(param_2,param_3)" identifier = (call_expression "FUN_0010f079(param_2,param_3)" identifier (argument_list "(param_2,param_3)" ( identifier , identifier )))) ;) (if_statement "if (cVar1 == '\0') {\n      return 0xc;\n    }" if (parenthesized_expression "(cVar1 == '\0')" ( (binary_expression "cVar1 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      return 0xc;\n    }" { (return_statement "return 0xc;" return number_literal ;) })) (expression_statement "lVar5 = param_3 * 0x18 + param_1[5];" (assignment_expression "lVar5 = param_3 * 0x18 + param_1[5]" identifier = (binary_expression "param_3 * 0x18 + param_1[5]" (binary_expression "param_3 * 0x18" identifier * number_literal) + (subscript_expression "param_1[5]" identifier [ number_literal ]))) ;) (expression_statement "lVar2 = *(long *)(lVar5 + 8);" (assignment_expression "lVar2 = *(long *)(lVar5 + 8)" identifier = (pointer_expression "*(long *)(lVar5 + 8)" * (cast_expression "(long *)(lVar5 + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 8)" ( (binary_expression "lVar5 + 8" identifier + number_literal) ))))) ;) (if_statement "if (lVar2 == 0) break;" if (parenthesized_expression "(lVar2 == 0)" ( (binary_expression "lVar2 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (if_statement "if ((lVar2 == 2) &&\n       (uVar4 = FUN_0010f161(param_1,param_2,*(undefined8 *)(*(long *)(lVar5 + 0x10) + 8),param_4,\n                             param_5), (int)uVar4 != 0)) {\n      return uVar4;\n    }" if (parenthesized_expression "((lVar2 == 2) &&\n       (uVar4 = FUN_0010f161(param_1,param_2,*(undefined8 *)(*(long *)(lVar5 + 0x10) + 8),param_4,\n                             param_5), (int)uVar4 != 0))" ( (binary_expression "(lVar2 == 2) &&\n       (uVar4 = FUN_0010f161(param_1,param_2,*(undefined8 *)(*(long *)(lVar5 + 0x10) + 8),param_4,\n                             param_5), (int)uVar4 != 0)" (parenthesized_expression "(lVar2 == 2)" ( (binary_expression "lVar2 == 2" identifier == number_literal) )) && (parenthesized_expression "(uVar4 = FUN_0010f161(param_1,param_2,*(undefined8 *)(*(long *)(lVar5 + 0x10) + 8),param_4,\n                             param_5), (int)uVar4 != 0)" ( (comma_expression "uVar4 = FUN_0010f161(param_1,param_2,*(undefined8 *)(*(long *)(lVar5 + 0x10) + 8),param_4,\n                             param_5), (int)uVar4 != 0" (assignment_expression "uVar4 = FUN_0010f161(param_1,param_2,*(undefined8 *)(*(long *)(lVar5 + 0x10) + 8),param_4,\n                             param_5)" identifier = (call_expression "FUN_0010f161(param_1,param_2,*(undefined8 *)(*(long *)(lVar5 + 0x10) + 8),param_4,\n                             param_5)" identifier (argument_list "(param_1,param_2,*(undefined8 *)(*(long *)(lVar5 + 0x10) + 8),param_4,\n                             param_5)" ( identifier , identifier , (pointer_expression "*(undefined8 *)(*(long *)(lVar5 + 0x10) + 8)" * (cast_expression "(undefined8 *)(*(long *)(lVar5 + 0x10) + 8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(lVar5 + 0x10) + 8)" ( (binary_expression "*(long *)(lVar5 + 0x10) + 8" (pointer_expression "*(long *)(lVar5 + 0x10)" * (cast_expression "(long *)(lVar5 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 0x10)" ( (binary_expression "lVar5 + 0x10" identifier + number_literal) )))) + number_literal) )))) , identifier , identifier )))) , (binary_expression "(int)uVar4 != 0" (cast_expression "(int)uVar4" ( (type_descriptor "int" primitive_type) ) identifier) != number_literal)) ))) )) (compound_statement "{\n      return uVar4;\n    }" { (return_statement "return uVar4;" return identifier ;) })) (expression_statement "param_3 = **(long **)(param_1[5] + 0x10 + param_3 * 0x18);" (assignment_expression "param_3 = **(long **)(param_1[5] + 0x10 + param_3 * 0x18)" identifier = (pointer_expression "**(long **)(param_1[5] + 0x10 + param_3 * 0x18)" * (pointer_expression "*(long **)(param_1[5] + 0x10 + param_3 * 0x18)" * (cast_expression "(long **)(param_1[5] + 0x10 + param_3 * 0x18)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1[5] + 0x10 + param_3 * 0x18)" ( (binary_expression "param_1[5] + 0x10 + param_3 * 0x18" (binary_expression "param_1[5] + 0x10" (subscript_expression "param_1[5]" identifier [ number_literal ]) + number_literal) + (binary_expression "param_3 * 0x18" identifier * number_literal)) )))))) ;) })) (return_statement "return 0;" return number_literal ;) })))
(translation_unit "reg_errcode_t\ncheck_arrival_expand_ecl_sub\n          (re_dfa_t *dfa,re_node_set *dst_nodes,Idx target,Idx ex_subexp,wchar_t type)\n\n{\n  long lVar1;\n  _Bool _Var2;\n  reg_errcode_t rVar3;\n  Idx IVar4;\n  \n  while( true ) {\n    IVar4 = re_node_set_contains(dst_nodes,target);\n    if (IVar4 != 0) {\n      return _REG_NOERROR;\n    }\n    if (((uint)(byte)dfa->nodes[target].field_0x8 == type) &&\n       (dfa->nodes[target].opr.sbcset == (re_bitset_ptr_t)ex_subexp)) {\n      if (type != L'\t') {\n        return _REG_NOERROR;\n      }\n      _Var2 = re_node_set_insert(dst_nodes,target);\n      return -(uint)!_Var2 & _REG_ESPACE;\n    }\n    _Var2 = re_node_set_insert(dst_nodes,target);\n    if (!_Var2) {\n      return _REG_ESPACE;\n    }\n    lVar1 = dfa->edests[target].nelem;\n    if (lVar1 == 0) break;\n    if ((lVar1 == 2) &&\n       (rVar3 = check_arrival_expand_ecl_sub\n                          (dfa,dst_nodes,dfa->edests[target].elems[1],ex_subexp,type),\n       rVar3 != _REG_NOERROR)) {\n      return rVar3;\n    }\n    target = *dfa->edests[target].elems;\n  }\n  return _REG_NOERROR;\n}\n\n" (function_definition "reg_errcode_t\ncheck_arrival_expand_ecl_sub\n          (re_dfa_t *dfa,re_node_set *dst_nodes,Idx target,Idx ex_subexp,wchar_t type)\n\n{\n  long lVar1;\n  _Bool _Var2;\n  reg_errcode_t rVar3;\n  Idx IVar4;\n  \n  while( true ) {\n    IVar4 = re_node_set_contains(dst_nodes,target);\n    if (IVar4 != 0) {\n      return _REG_NOERROR;\n    }\n    if (((uint)(byte)dfa->nodes[target].field_0x8 == type) &&\n       (dfa->nodes[target].opr.sbcset == (re_bitset_ptr_t)ex_subexp)) {\n      if (type != L'\t') {\n        return _REG_NOERROR;\n      }\n      _Var2 = re_node_set_insert(dst_nodes,target);\n      return -(uint)!_Var2 & _REG_ESPACE;\n    }\n    _Var2 = re_node_set_insert(dst_nodes,target);\n    if (!_Var2) {\n      return _REG_ESPACE;\n    }\n    lVar1 = dfa->edests[target].nelem;\n    if (lVar1 == 0) break;\n    if ((lVar1 == 2) &&\n       (rVar3 = check_arrival_expand_ecl_sub\n                          (dfa,dst_nodes,dfa->edests[target].elems[1],ex_subexp,type),\n       rVar3 != _REG_NOERROR)) {\n      return rVar3;\n    }\n    target = *dfa->edests[target].elems;\n  }\n  return _REG_NOERROR;\n}" type_identifier (function_declarator "check_arrival_expand_ecl_sub\n          (re_dfa_t *dfa,re_node_set *dst_nodes,Idx target,Idx ex_subexp,wchar_t type)" identifier (parameter_list "(re_dfa_t *dfa,re_node_set *dst_nodes,Idx target,Idx ex_subexp,wchar_t type)" ( (parameter_declaration "re_dfa_t *dfa" type_identifier (pointer_declarator "*dfa" * identifier)) , (parameter_declaration "re_node_set *dst_nodes" type_identifier (pointer_declarator "*dst_nodes" * identifier)) , (parameter_declaration "Idx target" type_identifier identifier) , (parameter_declaration "Idx ex_subexp" type_identifier identifier) , (parameter_declaration "wchar_t type" type_identifier identifier) ))) (compound_statement "{\n  long lVar1;\n  _Bool _Var2;\n  reg_errcode_t rVar3;\n  Idx IVar4;\n  \n  while( true ) {\n    IVar4 = re_node_set_contains(dst_nodes,target);\n    if (IVar4 != 0) {\n      return _REG_NOERROR;\n    }\n    if (((uint)(byte)dfa->nodes[target].field_0x8 == type) &&\n       (dfa->nodes[target].opr.sbcset == (re_bitset_ptr_t)ex_subexp)) {\n      if (type != L'\t') {\n        return _REG_NOERROR;\n      }\n      _Var2 = re_node_set_insert(dst_nodes,target);\n      return -(uint)!_Var2 & _REG_ESPACE;\n    }\n    _Var2 = re_node_set_insert(dst_nodes,target);\n    if (!_Var2) {\n      return _REG_ESPACE;\n    }\n    lVar1 = dfa->edests[target].nelem;\n    if (lVar1 == 0) break;\n    if ((lVar1 == 2) &&\n       (rVar3 = check_arrival_expand_ecl_sub\n                          (dfa,dst_nodes,dfa->edests[target].elems[1],ex_subexp,type),\n       rVar3 != _REG_NOERROR)) {\n      return rVar3;\n    }\n    target = *dfa->edests[target].elems;\n  }\n  return _REG_NOERROR;\n}" { (declaration "long lVar1;" (sized_type_specifier "long" long) identifier ;) (declaration "_Bool _Var2;" type_identifier identifier ;) (declaration "reg_errcode_t rVar3;" type_identifier identifier ;) (declaration "Idx IVar4;" type_identifier identifier ;) (while_statement "while( true ) {\n    IVar4 = re_node_set_contains(dst_nodes,target);\n    if (IVar4 != 0) {\n      return _REG_NOERROR;\n    }\n    if (((uint)(byte)dfa->nodes[target].field_0x8 == type) &&\n       (dfa->nodes[target].opr.sbcset == (re_bitset_ptr_t)ex_subexp)) {\n      if (type != L'\t') {\n        return _REG_NOERROR;\n      }\n      _Var2 = re_node_set_insert(dst_nodes,target);\n      return -(uint)!_Var2 & _REG_ESPACE;\n    }\n    _Var2 = re_node_set_insert(dst_nodes,target);\n    if (!_Var2) {\n      return _REG_ESPACE;\n    }\n    lVar1 = dfa->edests[target].nelem;\n    if (lVar1 == 0) break;\n    if ((lVar1 == 2) &&\n       (rVar3 = check_arrival_expand_ecl_sub\n                          (dfa,dst_nodes,dfa->edests[target].elems[1],ex_subexp,type),\n       rVar3 != _REG_NOERROR)) {\n      return rVar3;\n    }\n    target = *dfa->edests[target].elems;\n  }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n    IVar4 = re_node_set_contains(dst_nodes,target);\n    if (IVar4 != 0) {\n      return _REG_NOERROR;\n    }\n    if (((uint)(byte)dfa->nodes[target].field_0x8 == type) &&\n       (dfa->nodes[target].opr.sbcset == (re_bitset_ptr_t)ex_subexp)) {\n      if (type != L'\t') {\n        return _REG_NOERROR;\n      }\n      _Var2 = re_node_set_insert(dst_nodes,target);\n      return -(uint)!_Var2 & _REG_ESPACE;\n    }\n    _Var2 = re_node_set_insert(dst_nodes,target);\n    if (!_Var2) {\n      return _REG_ESPACE;\n    }\n    lVar1 = dfa->edests[target].nelem;\n    if (lVar1 == 0) break;\n    if ((lVar1 == 2) &&\n       (rVar3 = check_arrival_expand_ecl_sub\n                          (dfa,dst_nodes,dfa->edests[target].elems[1],ex_subexp,type),\n       rVar3 != _REG_NOERROR)) {\n      return rVar3;\n    }\n    target = *dfa->edests[target].elems;\n  }" { (expression_statement "IVar4 = re_node_set_contains(dst_nodes,target);" (assignment_expression "IVar4 = re_node_set_contains(dst_nodes,target)" identifier = (call_expression "re_node_set_contains(dst_nodes,target)" identifier (argument_list "(dst_nodes,target)" ( identifier , identifier )))) ;) (if_statement "if (IVar4 != 0) {\n      return _REG_NOERROR;\n    }" if (parenthesized_expression "(IVar4 != 0)" ( (binary_expression "IVar4 != 0" identifier != number_literal) )) (compound_statement "{\n      return _REG_NOERROR;\n    }" { (return_statement "return _REG_NOERROR;" return identifier ;) })) (if_statement "if (((uint)(byte)dfa->nodes[target].field_0x8 == type) &&\n       (dfa->nodes[target].opr.sbcset == (re_bitset_ptr_t)ex_subexp)) {\n      if (type != L'\t') {\n        return _REG_NOERROR;\n      }\n      _Var2 = re_node_set_insert(dst_nodes,target);\n      return -(uint)!_Var2 & _REG_ESPACE;\n    }" if (parenthesized_expression "(((uint)(byte)dfa->nodes[target].field_0x8 == type) &&\n       (dfa->nodes[target].opr.sbcset == (re_bitset_ptr_t)ex_subexp))" ( (binary_expression "((uint)(byte)dfa->nodes[target].field_0x8 == type) &&\n       (dfa->nodes[target].opr.sbcset == (re_bitset_ptr_t)ex_subexp)" (parenthesized_expression "((uint)(byte)dfa->nodes[target].field_0x8 == type)" ( (binary_expression "(uint)(byte)dfa->nodes[target].field_0x8 == type" (cast_expression "(uint)(byte)dfa->nodes[target].field_0x8" ( (type_descriptor "uint" type_identifier) ) (cast_expression "(byte)dfa->nodes[target].field_0x8" ( (type_descriptor "byte" type_identifier) ) (field_expression "dfa->nodes[target].field_0x8" (subscript_expression "dfa->nodes[target]" (field_expression "dfa->nodes" identifier -> field_identifier) [ identifier ]) . field_identifier))) == identifier) )) && (parenthesized_expression "(dfa->nodes[target].opr.sbcset == (re_bitset_ptr_t)ex_subexp)" ( (binary_expression "dfa->nodes[target].opr.sbcset == (re_bitset_ptr_t)ex_subexp" (field_expression "dfa->nodes[target].opr.sbcset" (field_expression "dfa->nodes[target].opr" (subscript_expression "dfa->nodes[target]" (field_expression "dfa->nodes" identifier -> field_identifier) [ identifier ]) . field_identifier) . field_identifier) == (cast_expression "(re_bitset_ptr_t)ex_subexp" ( (type_descriptor "re_bitset_ptr_t" type_identifier) ) identifier)) ))) )) (compound_statement "{\n      if (type != L'\t') {\n        return _REG_NOERROR;\n      }\n      _Var2 = re_node_set_insert(dst_nodes,target);\n      return -(uint)!_Var2 & _REG_ESPACE;\n    }" { (if_statement "if (type != L'\t') {\n        return _REG_NOERROR;\n      }" if (parenthesized_expression "(type != L'\t')" ( (binary_expression "type != L'\t'" identifier != (char_literal "L'\t'" L' escape_sequence ')) )) (compound_statement "{\n        return _REG_NOERROR;\n      }" { (return_statement "return _REG_NOERROR;" return identifier ;) })) (expression_statement "_Var2 = re_node_set_insert(dst_nodes,target);" (assignment_expression "_Var2 = re_node_set_insert(dst_nodes,target)" identifier = (call_expression "re_node_set_insert(dst_nodes,target)" identifier (argument_list "(dst_nodes,target)" ( identifier , identifier )))) ;) (return_statement "return -(uint)!_Var2 & _REG_ESPACE;" return (binary_expression "-(uint)!_Var2 & _REG_ESPACE" (unary_expression "-(uint)!_Var2" - (cast_expression "(uint)!_Var2" ( (type_descriptor "uint" type_identifier) ) (unary_expression "!_Var2" ! identifier))) & identifier) ;) })) (expression_statement "_Var2 = re_node_set_insert(dst_nodes,target);" (assignment_expression "_Var2 = re_node_set_insert(dst_nodes,target)" identifier = (call_expression "re_node_set_insert(dst_nodes,target)" identifier (argument_list "(dst_nodes,target)" ( identifier , identifier )))) ;) (if_statement "if (!_Var2) {\n      return _REG_ESPACE;\n    }" if (parenthesized_expression "(!_Var2)" ( (unary_expression "!_Var2" ! identifier) )) (compound_statement "{\n      return _REG_ESPACE;\n    }" { (return_statement "return _REG_ESPACE;" return identifier ;) })) (expression_statement "lVar1 = dfa->edests[target].nelem;" (assignment_expression "lVar1 = dfa->edests[target].nelem" identifier = (field_expression "dfa->edests[target].nelem" (subscript_expression "dfa->edests[target]" (field_expression "dfa->edests" identifier -> field_identifier) [ identifier ]) . field_identifier)) ;) (if_statement "if (lVar1 == 0) break;" if (parenthesized_expression "(lVar1 == 0)" ( (binary_expression "lVar1 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (if_statement "if ((lVar1 == 2) &&\n       (rVar3 = check_arrival_expand_ecl_sub\n                          (dfa,dst_nodes,dfa->edests[target].elems[1],ex_subexp,type),\n       rVar3 != _REG_NOERROR)) {\n      return rVar3;\n    }" if (parenthesized_expression "((lVar1 == 2) &&\n       (rVar3 = check_arrival_expand_ecl_sub\n                          (dfa,dst_nodes,dfa->edests[target].elems[1],ex_subexp,type),\n       rVar3 != _REG_NOERROR))" ( (binary_expression "(lVar1 == 2) &&\n       (rVar3 = check_arrival_expand_ecl_sub\n                          (dfa,dst_nodes,dfa->edests[target].elems[1],ex_subexp,type),\n       rVar3 != _REG_NOERROR)" (parenthesized_expression "(lVar1 == 2)" ( (binary_expression "lVar1 == 2" identifier == number_literal) )) && (parenthesized_expression "(rVar3 = check_arrival_expand_ecl_sub\n                          (dfa,dst_nodes,dfa->edests[target].elems[1],ex_subexp,type),\n       rVar3 != _REG_NOERROR)" ( (comma_expression "rVar3 = check_arrival_expand_ecl_sub\n                          (dfa,dst_nodes,dfa->edests[target].elems[1],ex_subexp,type),\n       rVar3 != _REG_NOERROR" (assignment_expression "rVar3 = check_arrival_expand_ecl_sub\n                          (dfa,dst_nodes,dfa->edests[target].elems[1],ex_subexp,type)" identifier = (call_expression "check_arrival_expand_ecl_sub\n                          (dfa,dst_nodes,dfa->edests[target].elems[1],ex_subexp,type)" identifier (argument_list "(dfa,dst_nodes,dfa->edests[target].elems[1],ex_subexp,type)" ( identifier , identifier , (subscript_expression "dfa->edests[target].elems[1]" (field_expression "dfa->edests[target].elems" (subscript_expression "dfa->edests[target]" (field_expression "dfa->edests" identifier -> field_identifier) [ identifier ]) . field_identifier) [ number_literal ]) , identifier , identifier )))) , (binary_expression "rVar3 != _REG_NOERROR" identifier != identifier)) ))) )) (compound_statement "{\n      return rVar3;\n    }" { (return_statement "return rVar3;" return identifier ;) })) (expression_statement "target = *dfa->edests[target].elems;" (assignment_expression "target = *dfa->edests[target].elems" identifier = (pointer_expression "*dfa->edests[target].elems" * (field_expression "dfa->edests[target].elems" (subscript_expression "dfa->edests[target]" (field_expression "dfa->edests" identifier -> field_identifier) [ identifier ]) . field_identifier))) ;) })) (return_statement "return _REG_NOERROR;" return identifier ;) })))
(translation_unit "ulong FUN_0010f161(long *param_1,undefined8 param_2,long param_3,long param_4,uint param_5)\n\n{\n  char cVar1;\n  long lVar2;\n  long *plVar3;\n  ulong uVar4;\n  long lVar5;\n  \n  while( true ) {\n    lVar2 = FUN_0010e1c8(param_2,param_3);\n    if (lVar2 != 0) {\n      return 0;\n    }\n    plVar3 = (long *)(param_3 * 0x10 + *param_1);\n    if ((*(byte *)(plVar3 + 1) == param_5) && (*plVar3 == param_4)) {\n      if (param_5 != 9) {\n        return 0;\n      }\n      cVar1 = FUN_0010f079(param_2,param_3);\n      return (ulong)(-(uint)(cVar1 == '\0') & 0xc);\n    }\n    cVar1 = FUN_0010f079(param_2,param_3);\n    if (cVar1 == '\0') {\n      return 0xc;\n    }\n    lVar5 = param_3 * 0x18 + param_1[5];\n    lVar2 = *(long *)(lVar5 + 8);\n    if (lVar2 == 0) break;\n    if ((lVar2 == 2) &&\n       (uVar4 = FUN_0010f161(param_1,param_2,*(undefined8 *)(*(long *)(lVar5 + 0x10) + 8),param_4,\n                             param_5), (int)uVar4 != 0)) {\n      return uVar4;\n    }\n    param_3 = **(long **)(param_1[5] + 0x10 + param_3 * 0x18);\n  }\n  return 0;\n}\n\n" (function_definition "ulong FUN_0010f161(long *param_1,undefined8 param_2,long param_3,long param_4,uint param_5)\n\n{\n  char cVar1;\n  long lVar2;\n  long *plVar3;\n  ulong uVar4;\n  long lVar5;\n  \n  while( true ) {\n    lVar2 = FUN_0010e1c8(param_2,param_3);\n    if (lVar2 != 0) {\n      return 0;\n    }\n    plVar3 = (long *)(param_3 * 0x10 + *param_1);\n    if ((*(byte *)(plVar3 + 1) == param_5) && (*plVar3 == param_4)) {\n      if (param_5 != 9) {\n        return 0;\n      }\n      cVar1 = FUN_0010f079(param_2,param_3);\n      return (ulong)(-(uint)(cVar1 == '\0') & 0xc);\n    }\n    cVar1 = FUN_0010f079(param_2,param_3);\n    if (cVar1 == '\0') {\n      return 0xc;\n    }\n    lVar5 = param_3 * 0x18 + param_1[5];\n    lVar2 = *(long *)(lVar5 + 8);\n    if (lVar2 == 0) break;\n    if ((lVar2 == 2) &&\n       (uVar4 = FUN_0010f161(param_1,param_2,*(undefined8 *)(*(long *)(lVar5 + 0x10) + 8),param_4,\n                             param_5), (int)uVar4 != 0)) {\n      return uVar4;\n    }\n    param_3 = **(long **)(param_1[5] + 0x10 + param_3 * 0x18);\n  }\n  return 0;\n}" type_identifier (function_declarator "FUN_0010f161(long *param_1,undefined8 param_2,long param_3,long param_4,uint param_5)" identifier (parameter_list "(long *param_1,undefined8 param_2,long param_3,long param_4,uint param_5)" ( (parameter_declaration "long *param_1" (sized_type_specifier "long" long) (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "undefined8 param_2" type_identifier identifier) , (parameter_declaration "long param_3" (sized_type_specifier "long" long) identifier) , (parameter_declaration "long param_4" (sized_type_specifier "long" long) identifier) , (parameter_declaration "uint param_5" type_identifier identifier) ))) (compound_statement "{\n  char cVar1;\n  long lVar2;\n  long *plVar3;\n  ulong uVar4;\n  long lVar5;\n  \n  while( true ) {\n    lVar2 = FUN_0010e1c8(param_2,param_3);\n    if (lVar2 != 0) {\n      return 0;\n    }\n    plVar3 = (long *)(param_3 * 0x10 + *param_1);\n    if ((*(byte *)(plVar3 + 1) == param_5) && (*plVar3 == param_4)) {\n      if (param_5 != 9) {\n        return 0;\n      }\n      cVar1 = FUN_0010f079(param_2,param_3);\n      return (ulong)(-(uint)(cVar1 == '\0') & 0xc);\n    }\n    cVar1 = FUN_0010f079(param_2,param_3);\n    if (cVar1 == '\0') {\n      return 0xc;\n    }\n    lVar5 = param_3 * 0x18 + param_1[5];\n    lVar2 = *(long *)(lVar5 + 8);\n    if (lVar2 == 0) break;\n    if ((lVar2 == 2) &&\n       (uVar4 = FUN_0010f161(param_1,param_2,*(undefined8 *)(*(long *)(lVar5 + 0x10) + 8),param_4,\n                             param_5), (int)uVar4 != 0)) {\n      return uVar4;\n    }\n    param_3 = **(long **)(param_1[5] + 0x10 + param_3 * 0x18);\n  }\n  return 0;\n}" { (declaration "char cVar1;" primitive_type identifier ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (declaration "long *plVar3;" (sized_type_specifier "long" long) (pointer_declarator "*plVar3" * identifier) ;) (declaration "ulong uVar4;" type_identifier identifier ;) (declaration "long lVar5;" (sized_type_specifier "long" long) identifier ;) (while_statement "while( true ) {\n    lVar2 = FUN_0010e1c8(param_2,param_3);\n    if (lVar2 != 0) {\n      return 0;\n    }\n    plVar3 = (long *)(param_3 * 0x10 + *param_1);\n    if ((*(byte *)(plVar3 + 1) == param_5) && (*plVar3 == param_4)) {\n      if (param_5 != 9) {\n        return 0;\n      }\n      cVar1 = FUN_0010f079(param_2,param_3);\n      return (ulong)(-(uint)(cVar1 == '\0') & 0xc);\n    }\n    cVar1 = FUN_0010f079(param_2,param_3);\n    if (cVar1 == '\0') {\n      return 0xc;\n    }\n    lVar5 = param_3 * 0x18 + param_1[5];\n    lVar2 = *(long *)(lVar5 + 8);\n    if (lVar2 == 0) break;\n    if ((lVar2 == 2) &&\n       (uVar4 = FUN_0010f161(param_1,param_2,*(undefined8 *)(*(long *)(lVar5 + 0x10) + 8),param_4,\n                             param_5), (int)uVar4 != 0)) {\n      return uVar4;\n    }\n    param_3 = **(long **)(param_1[5] + 0x10 + param_3 * 0x18);\n  }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n    lVar2 = FUN_0010e1c8(param_2,param_3);\n    if (lVar2 != 0) {\n      return 0;\n    }\n    plVar3 = (long *)(param_3 * 0x10 + *param_1);\n    if ((*(byte *)(plVar3 + 1) == param_5) && (*plVar3 == param_4)) {\n      if (param_5 != 9) {\n        return 0;\n      }\n      cVar1 = FUN_0010f079(param_2,param_3);\n      return (ulong)(-(uint)(cVar1 == '\0') & 0xc);\n    }\n    cVar1 = FUN_0010f079(param_2,param_3);\n    if (cVar1 == '\0') {\n      return 0xc;\n    }\n    lVar5 = param_3 * 0x18 + param_1[5];\n    lVar2 = *(long *)(lVar5 + 8);\n    if (lVar2 == 0) break;\n    if ((lVar2 == 2) &&\n       (uVar4 = FUN_0010f161(param_1,param_2,*(undefined8 *)(*(long *)(lVar5 + 0x10) + 8),param_4,\n                             param_5), (int)uVar4 != 0)) {\n      return uVar4;\n    }\n    param_3 = **(long **)(param_1[5] + 0x10 + param_3 * 0x18);\n  }" { (expression_statement "lVar2 = FUN_0010e1c8(param_2,param_3);" (assignment_expression "lVar2 = FUN_0010e1c8(param_2,param_3)" identifier = (call_expression "FUN_0010e1c8(param_2,param_3)" identifier (argument_list "(param_2,param_3)" ( identifier , identifier )))) ;) (if_statement "if (lVar2 != 0) {\n      return 0;\n    }" if (parenthesized_expression "(lVar2 != 0)" ( (binary_expression "lVar2 != 0" identifier != number_literal) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "plVar3 = (long *)(param_3 * 0x10 + *param_1);" (assignment_expression "plVar3 = (long *)(param_3 * 0x10 + *param_1)" identifier = (cast_expression "(long *)(param_3 * 0x10 + *param_1)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 * 0x10 + *param_1)" ( (binary_expression "param_3 * 0x10 + *param_1" (binary_expression "param_3 * 0x10" identifier * number_literal) + (pointer_expression "*param_1" * identifier)) )))) ;) (if_statement "if ((*(byte *)(plVar3 + 1) == param_5) && (*plVar3 == param_4)) {\n      if (param_5 != 9) {\n        return 0;\n      }\n      cVar1 = FUN_0010f079(param_2,param_3);\n      return (ulong)(-(uint)(cVar1 == '\0') & 0xc);\n    }" if (parenthesized_expression "((*(byte *)(plVar3 + 1) == param_5) && (*plVar3 == param_4))" ( (binary_expression "(*(byte *)(plVar3 + 1) == param_5) && (*plVar3 == param_4)" (parenthesized_expression "(*(byte *)(plVar3 + 1) == param_5)" ( (binary_expression "*(byte *)(plVar3 + 1) == param_5" (pointer_expression "*(byte *)(plVar3 + 1)" * (cast_expression "(byte *)(plVar3 + 1)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(plVar3 + 1)" ( (binary_expression "plVar3 + 1" identifier + number_literal) )))) == identifier) )) && (parenthesized_expression "(*plVar3 == param_4)" ( (binary_expression "*plVar3 == param_4" (pointer_expression "*plVar3" * identifier) == identifier) ))) )) (compound_statement "{\n      if (param_5 != 9) {\n        return 0;\n      }\n      cVar1 = FUN_0010f079(param_2,param_3);\n      return (ulong)(-(uint)(cVar1 == '\0') & 0xc);\n    }" { (if_statement "if (param_5 != 9) {\n        return 0;\n      }" if (parenthesized_expression "(param_5 != 9)" ( (binary_expression "param_5 != 9" identifier != number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "cVar1 = FUN_0010f079(param_2,param_3);" (assignment_expression "cVar1 = FUN_0010f079(param_2,param_3)" identifier = (call_expression "FUN_0010f079(param_2,param_3)" identifier (argument_list "(param_2,param_3)" ( identifier , identifier )))) ;) (return_statement "return (ulong)(-(uint)(cVar1 == '\0') & 0xc);" return (call_expression "(ulong)(-(uint)(cVar1 == '\0') & 0xc)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(-(uint)(cVar1 == '\0') & 0xc)" ( (binary_expression "-(uint)(cVar1 == '\0') & 0xc" (unary_expression "-(uint)(cVar1 == '\0')" - (call_expression "(uint)(cVar1 == '\0')" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(cVar1 == '\0')" ( (binary_expression "cVar1 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )))) & number_literal) ))) ;) })) (expression_statement "cVar1 = FUN_0010f079(param_2,param_3);" (assignment_expression "cVar1 = FUN_0010f079(param_2,param_3)" identifier = (call_expression "FUN_0010f079(param_2,param_3)" identifier (argument_list "(param_2,param_3)" ( identifier , identifier )))) ;) (if_statement "if (cVar1 == '\0') {\n      return 0xc;\n    }" if (parenthesized_expression "(cVar1 == '\0')" ( (binary_expression "cVar1 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      return 0xc;\n    }" { (return_statement "return 0xc;" return number_literal ;) })) (expression_statement "lVar5 = param_3 * 0x18 + param_1[5];" (assignment_expression "lVar5 = param_3 * 0x18 + param_1[5]" identifier = (binary_expression "param_3 * 0x18 + param_1[5]" (binary_expression "param_3 * 0x18" identifier * number_literal) + (subscript_expression "param_1[5]" identifier [ number_literal ]))) ;) (expression_statement "lVar2 = *(long *)(lVar5 + 8);" (assignment_expression "lVar2 = *(long *)(lVar5 + 8)" identifier = (pointer_expression "*(long *)(lVar5 + 8)" * (cast_expression "(long *)(lVar5 + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 8)" ( (binary_expression "lVar5 + 8" identifier + number_literal) ))))) ;) (if_statement "if (lVar2 == 0) break;" if (parenthesized_expression "(lVar2 == 0)" ( (binary_expression "lVar2 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (if_statement "if ((lVar2 == 2) &&\n       (uVar4 = FUN_0010f161(param_1,param_2,*(undefined8 *)(*(long *)(lVar5 + 0x10) + 8),param_4,\n                             param_5), (int)uVar4 != 0)) {\n      return uVar4;\n    }" if (parenthesized_expression "((lVar2 == 2) &&\n       (uVar4 = FUN_0010f161(param_1,param_2,*(undefined8 *)(*(long *)(lVar5 + 0x10) + 8),param_4,\n                             param_5), (int)uVar4 != 0))" ( (binary_expression "(lVar2 == 2) &&\n       (uVar4 = FUN_0010f161(param_1,param_2,*(undefined8 *)(*(long *)(lVar5 + 0x10) + 8),param_4,\n                             param_5), (int)uVar4 != 0)" (parenthesized_expression "(lVar2 == 2)" ( (binary_expression "lVar2 == 2" identifier == number_literal) )) && (parenthesized_expression "(uVar4 = FUN_0010f161(param_1,param_2,*(undefined8 *)(*(long *)(lVar5 + 0x10) + 8),param_4,\n                             param_5), (int)uVar4 != 0)" ( (comma_expression "uVar4 = FUN_0010f161(param_1,param_2,*(undefined8 *)(*(long *)(lVar5 + 0x10) + 8),param_4,\n                             param_5), (int)uVar4 != 0" (assignment_expression "uVar4 = FUN_0010f161(param_1,param_2,*(undefined8 *)(*(long *)(lVar5 + 0x10) + 8),param_4,\n                             param_5)" identifier = (call_expression "FUN_0010f161(param_1,param_2,*(undefined8 *)(*(long *)(lVar5 + 0x10) + 8),param_4,\n                             param_5)" identifier (argument_list "(param_1,param_2,*(undefined8 *)(*(long *)(lVar5 + 0x10) + 8),param_4,\n                             param_5)" ( identifier , identifier , (pointer_expression "*(undefined8 *)(*(long *)(lVar5 + 0x10) + 8)" * (cast_expression "(undefined8 *)(*(long *)(lVar5 + 0x10) + 8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(lVar5 + 0x10) + 8)" ( (binary_expression "*(long *)(lVar5 + 0x10) + 8" (pointer_expression "*(long *)(lVar5 + 0x10)" * (cast_expression "(long *)(lVar5 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 0x10)" ( (binary_expression "lVar5 + 0x10" identifier + number_literal) )))) + number_literal) )))) , identifier , identifier )))) , (binary_expression "(int)uVar4 != 0" (cast_expression "(int)uVar4" ( (type_descriptor "int" primitive_type) ) identifier) != number_literal)) ))) )) (compound_statement "{\n      return uVar4;\n    }" { (return_statement "return uVar4;" return identifier ;) })) (expression_statement "param_3 = **(long **)(param_1[5] + 0x10 + param_3 * 0x18);" (assignment_expression "param_3 = **(long **)(param_1[5] + 0x10 + param_3 * 0x18)" identifier = (pointer_expression "**(long **)(param_1[5] + 0x10 + param_3 * 0x18)" * (pointer_expression "*(long **)(param_1[5] + 0x10 + param_3 * 0x18)" * (cast_expression "(long **)(param_1[5] + 0x10 + param_3 * 0x18)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1[5] + 0x10 + param_3 * 0x18)" ( (binary_expression "param_1[5] + 0x10 + param_3 * 0x18" (binary_expression "param_1[5] + 0x10" (subscript_expression "param_1[5]" identifier [ number_literal ]) + number_literal) + (binary_expression "param_3 * 0x18" identifier * number_literal)) )))))) ;) })) (return_statement "return 0;" return number_literal ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT * LIT) + (pointer_expression * IDENT)) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == IDENT) )) && (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) == IDENT) ))) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) (return_statement return (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (unary_expression - (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT == (char_literal ' escape_sequence ')) )))) & LIT) ))) ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (char_literal ' escape_sequence ')) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT * LIT) + (subscript_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) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (break_statement break ;)) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == LIT) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) )))) , IDENT , IDENT )))) , (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) != LIT)) ))) )) (compound_statement { (return_statement return IDENT ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) + (binary_expression IDENT * LIT)) )))))) ;) })) (return_statement return LIT ;) })))
(function_definition "ulong FUN_0010f161(long *param_1,undefined8 param_2,long param_3,long param_4,uint param_5)\n\n{\n  char cVar1;\n  long lVar2;\n  long *plVar3;\n  ulong uVar4;\n  long lVar5;\n  \n  while( true ) {\n    lVar2 = FUN_0010e1c8(param_2,param_3);\n    if (lVar2 != 0) {\n      return 0;\n    }\n    plVar3 = (long *)(param_3 * 0x10 + *param_1);\n    if ((*(byte *)(plVar3 + 1) == param_5) && (*plVar3 == param_4)) {\n      if (param_5 != 9) {\n        return 0;\n      }\n      cVar1 = FUN_0010f079(param_2,param_3);\n      return (ulong)(-(uint)(cVar1 == '\0') & 0xc);\n    }\n    cVar1 = FUN_0010f079(param_2,param_3);\n    if (cVar1 == '\0') {\n      return 0xc;\n    }\n    lVar5 = param_3 * 0x18 + param_1[5];\n    lVar2 = *(long *)(lVar5 + 8);\n    if (lVar2 == 0) break;\n    if ((lVar2 == 2) &&\n       (uVar4 = FUN_0010f161(param_1,param_2,*(undefined8 *)(*(long *)(lVar5 + 0x10) + 8),param_4,\n                             param_5), (int)uVar4 != 0)) {\n      return uVar4;\n    }\n    param_3 = **(long **)(param_1[5] + 0x10 + param_3 * 0x18);\n  }\n  return 0;\n}" (type_identifier "ulong") (function_declarator "FUN_0010f161(long *param_1,undefined8 param_2,long param_3,long param_4,uint param_5)" (identifier "FUN_0010f161") (parameter_list "(long *param_1,undefined8 param_2,long param_3,long param_4,uint param_5)" (( "(") (parameter_declaration "long *param_1" (sized_type_specifier "long" (long "long")) (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "undefined8 param_2" (type_identifier "undefined8") (identifier "param_2")) (, ",") (parameter_declaration "long param_3" (sized_type_specifier "long" (long "long")) (identifier "param_3")) (, ",") (parameter_declaration "long param_4" (sized_type_specifier "long" (long "long")) (identifier "param_4")) (, ",") (parameter_declaration "uint param_5" (type_identifier "uint") (identifier "param_5")) () ")"))) (compound_statement "{\n  char cVar1;\n  long lVar2;\n  long *plVar3;\n  ulong uVar4;\n  long lVar5;\n  \n  while( true ) {\n    lVar2 = FUN_0010e1c8(param_2,param_3);\n    if (lVar2 != 0) {\n      return 0;\n    }\n    plVar3 = (long *)(param_3 * 0x10 + *param_1);\n    if ((*(byte *)(plVar3 + 1) == param_5) && (*plVar3 == param_4)) {\n      if (param_5 != 9) {\n        return 0;\n      }\n      cVar1 = FUN_0010f079(param_2,param_3);\n      return (ulong)(-(uint)(cVar1 == '\0') & 0xc);\n    }\n    cVar1 = FUN_0010f079(param_2,param_3);\n    if (cVar1 == '\0') {\n      return 0xc;\n    }\n    lVar5 = param_3 * 0x18 + param_1[5];\n    lVar2 = *(long *)(lVar5 + 8);\n    if (lVar2 == 0) break;\n    if ((lVar2 == 2) &&\n       (uVar4 = FUN_0010f161(param_1,param_2,*(undefined8 *)(*(long *)(lVar5 + 0x10) + 8),param_4,\n                             param_5), (int)uVar4 != 0)) {\n      return uVar4;\n    }\n    param_3 = **(long **)(param_1[5] + 0x10 + param_3 * 0x18);\n  }\n  return 0;\n}" ({ "{") (declaration "char cVar1;" (primitive_type "char") (identifier "cVar1") (; ";")) (declaration "long lVar2;" (sized_type_specifier "long" (long "long")) (identifier "lVar2") (; ";")) (declaration "long *plVar3;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar3" (* "*") (identifier "plVar3")) (; ";")) (declaration "ulong uVar4;" (type_identifier "ulong") (identifier "uVar4") (; ";")) (declaration "long lVar5;" (sized_type_specifier "long" (long "long")) (identifier "lVar5") (; ";")) (while_statement "while( true ) {\n    lVar2 = FUN_0010e1c8(param_2,param_3);\n    if (lVar2 != 0) {\n      return 0;\n    }\n    plVar3 = (long *)(param_3 * 0x10 + *param_1);\n    if ((*(byte *)(plVar3 + 1) == param_5) && (*plVar3 == param_4)) {\n      if (param_5 != 9) {\n        return 0;\n      }\n      cVar1 = FUN_0010f079(param_2,param_3);\n      return (ulong)(-(uint)(cVar1 == '\0') & 0xc);\n    }\n    cVar1 = FUN_0010f079(param_2,param_3);\n    if (cVar1 == '\0') {\n      return 0xc;\n    }\n    lVar5 = param_3 * 0x18 + param_1[5];\n    lVar2 = *(long *)(lVar5 + 8);\n    if (lVar2 == 0) break;\n    if ((lVar2 == 2) &&\n       (uVar4 = FUN_0010f161(param_1,param_2,*(undefined8 *)(*(long *)(lVar5 + 0x10) + 8),param_4,\n                             param_5), (int)uVar4 != 0)) {\n      return uVar4;\n    }\n    param_3 = **(long **)(param_1[5] + 0x10 + param_3 * 0x18);\n  }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n    lVar2 = FUN_0010e1c8(param_2,param_3);\n    if (lVar2 != 0) {\n      return 0;\n    }\n    plVar3 = (long *)(param_3 * 0x10 + *param_1);\n    if ((*(byte *)(plVar3 + 1) == param_5) && (*plVar3 == param_4)) {\n      if (param_5 != 9) {\n        return 0;\n      }\n      cVar1 = FUN_0010f079(param_2,param_3);\n      return (ulong)(-(uint)(cVar1 == '\0') & 0xc);\n    }\n    cVar1 = FUN_0010f079(param_2,param_3);\n    if (cVar1 == '\0') {\n      return 0xc;\n    }\n    lVar5 = param_3 * 0x18 + param_1[5];\n    lVar2 = *(long *)(lVar5 + 8);\n    if (lVar2 == 0) break;\n    if ((lVar2 == 2) &&\n       (uVar4 = FUN_0010f161(param_1,param_2,*(undefined8 *)(*(long *)(lVar5 + 0x10) + 8),param_4,\n                             param_5), (int)uVar4 != 0)) {\n      return uVar4;\n    }\n    param_3 = **(long **)(param_1[5] + 0x10 + param_3 * 0x18);\n  }" ({ "{") (expression_statement "lVar2 = FUN_0010e1c8(param_2,param_3);" (assignment_expression "lVar2 = FUN_0010e1c8(param_2,param_3)" (identifier "lVar2") (= "=") (call_expression "FUN_0010e1c8(param_2,param_3)" (identifier "FUN_0010e1c8") (argument_list "(param_2,param_3)" (( "(") (identifier "param_2") (, ",") (identifier "param_3") () ")")))) (; ";")) (if_statement "if (lVar2 != 0) {\n      return 0;\n    }" (if "if") (parenthesized_expression "(lVar2 != 0)" (( "(") (binary_expression "lVar2 != 0" (identifier "lVar2") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      return 0;\n    }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "plVar3 = (long *)(param_3 * 0x10 + *param_1);" (assignment_expression "plVar3 = (long *)(param_3 * 0x10 + *param_1)" (identifier "plVar3") (= "=") (cast_expression "(long *)(param_3 * 0x10 + *param_1)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 * 0x10 + *param_1)" (( "(") (binary_expression "param_3 * 0x10 + *param_1" (binary_expression "param_3 * 0x10" (identifier "param_3") (* "*") (number_literal "0x10")) (+ "+") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) () ")")))) (; ";")) (if_statement "if ((*(byte *)(plVar3 + 1) == param_5) && (*plVar3 == param_4)) {\n      if (param_5 != 9) {\n        return 0;\n      }\n      cVar1 = FUN_0010f079(param_2,param_3);\n      return (ulong)(-(uint)(cVar1 == '\0') & 0xc);\n    }" (if "if") (parenthesized_expression "((*(byte *)(plVar3 + 1) == param_5) && (*plVar3 == param_4))" (( "(") (binary_expression "(*(byte *)(plVar3 + 1) == param_5) && (*plVar3 == param_4)" (parenthesized_expression "(*(byte *)(plVar3 + 1) == param_5)" (( "(") (binary_expression "*(byte *)(plVar3 + 1) == param_5" (pointer_expression "*(byte *)(plVar3 + 1)" (* "*") (cast_expression "(byte *)(plVar3 + 1)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(plVar3 + 1)" (( "(") (binary_expression "plVar3 + 1" (identifier "plVar3") (+ "+") (number_literal "1")) () ")")))) (== "==") (identifier "param_5")) () ")")) (&& "&&") (parenthesized_expression "(*plVar3 == param_4)" (( "(") (binary_expression "*plVar3 == param_4" (pointer_expression "*plVar3" (* "*") (identifier "plVar3")) (== "==") (identifier "param_4")) () ")"))) () ")")) (compound_statement "{\n      if (param_5 != 9) {\n        return 0;\n      }\n      cVar1 = FUN_0010f079(param_2,param_3);\n      return (ulong)(-(uint)(cVar1 == '\0') & 0xc);\n    }" ({ "{") (if_statement "if (param_5 != 9) {\n        return 0;\n      }" (if "if") (parenthesized_expression "(param_5 != 9)" (( "(") (binary_expression "param_5 != 9" (identifier "param_5") (!= "!=") (number_literal "9")) () ")")) (compound_statement "{\n        return 0;\n      }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "cVar1 = FUN_0010f079(param_2,param_3);" (assignment_expression "cVar1 = FUN_0010f079(param_2,param_3)" (identifier "cVar1") (= "=") (call_expression "FUN_0010f079(param_2,param_3)" (identifier "FUN_0010f079") (argument_list "(param_2,param_3)" (( "(") (identifier "param_2") (, ",") (identifier "param_3") () ")")))) (; ";")) (return_statement "return (ulong)(-(uint)(cVar1 == '\0') & 0xc);" (return "return") (call_expression "(ulong)(-(uint)(cVar1 == '\0') & 0xc)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(-(uint)(cVar1 == '\0') & 0xc)" (( "(") (binary_expression "-(uint)(cVar1 == '\0') & 0xc" (unary_expression "-(uint)(cVar1 == '\0')" (- "-") (call_expression "(uint)(cVar1 == '\0')" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(cVar1 == '\0')" (( "(") (binary_expression "cVar1 == '\0'" (identifier "cVar1") (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")))) (& "&") (number_literal "0xc")) () ")"))) (; ";")) (} "}"))) (expression_statement "cVar1 = FUN_0010f079(param_2,param_3);" (assignment_expression "cVar1 = FUN_0010f079(param_2,param_3)" (identifier "cVar1") (= "=") (call_expression "FUN_0010f079(param_2,param_3)" (identifier "FUN_0010f079") (argument_list "(param_2,param_3)" (( "(") (identifier "param_2") (, ",") (identifier "param_3") () ")")))) (; ";")) (if_statement "if (cVar1 == '\0') {\n      return 0xc;\n    }" (if "if") (parenthesized_expression "(cVar1 == '\0')" (( "(") (binary_expression "cVar1 == '\0'" (identifier "cVar1") (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n      return 0xc;\n    }" ({ "{") (return_statement "return 0xc;" (return "return") (number_literal "0xc") (; ";")) (} "}"))) (expression_statement "lVar5 = param_3 * 0x18 + param_1[5];" (assignment_expression "lVar5 = param_3 * 0x18 + param_1[5]" (identifier "lVar5") (= "=") (binary_expression "param_3 * 0x18 + param_1[5]" (binary_expression "param_3 * 0x18" (identifier "param_3") (* "*") (number_literal "0x18")) (+ "+") (subscript_expression "param_1[5]" (identifier "param_1") ([ "[") (number_literal "5") (] "]")))) (; ";")) (expression_statement "lVar2 = *(long *)(lVar5 + 8);" (assignment_expression "lVar2 = *(long *)(lVar5 + 8)" (identifier "lVar2") (= "=") (pointer_expression "*(long *)(lVar5 + 8)" (* "*") (cast_expression "(long *)(lVar5 + 8)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar5 + 8)" (( "(") (binary_expression "lVar5 + 8" (identifier "lVar5") (+ "+") (number_literal "8")) () ")"))))) (; ";")) (if_statement "if (lVar2 == 0) break;" (if "if") (parenthesized_expression "(lVar2 == 0)" (( "(") (binary_expression "lVar2 == 0" (identifier "lVar2") (== "==") (number_literal "0")) () ")")) (break_statement "break;" (break "break") (; ";"))) (if_statement "if ((lVar2 == 2) &&\n       (uVar4 = FUN_0010f161(param_1,param_2,*(undefined8 *)(*(long *)(lVar5 + 0x10) + 8),param_4,\n                             param_5), (int)uVar4 != 0)) {\n      return uVar4;\n    }" (if "if") (parenthesized_expression "((lVar2 == 2) &&\n       (uVar4 = FUN_0010f161(param_1,param_2,*(undefined8 *)(*(long *)(lVar5 + 0x10) + 8),param_4,\n                             param_5), (int)uVar4 != 0))" (( "(") (binary_expression "(lVar2 == 2) &&\n       (uVar4 = FUN_0010f161(param_1,param_2,*(undefined8 *)(*(long *)(lVar5 + 0x10) + 8),param_4,\n                             param_5), (int)uVar4 != 0)" (parenthesized_expression "(lVar2 == 2)" (( "(") (binary_expression "lVar2 == 2" (identifier "lVar2") (== "==") (number_literal "2")) () ")")) (&& "&&") (parenthesized_expression "(uVar4 = FUN_0010f161(param_1,param_2,*(undefined8 *)(*(long *)(lVar5 + 0x10) + 8),param_4,\n                             param_5), (int)uVar4 != 0)" (( "(") (comma_expression "uVar4 = FUN_0010f161(param_1,param_2,*(undefined8 *)(*(long *)(lVar5 + 0x10) + 8),param_4,\n                             param_5), (int)uVar4 != 0" (assignment_expression "uVar4 = FUN_0010f161(param_1,param_2,*(undefined8 *)(*(long *)(lVar5 + 0x10) + 8),param_4,\n                             param_5)" (identifier "uVar4") (= "=") (call_expression "FUN_0010f161(param_1,param_2,*(undefined8 *)(*(long *)(lVar5 + 0x10) + 8),param_4,\n                             param_5)" (identifier "FUN_0010f161") (argument_list "(param_1,param_2,*(undefined8 *)(*(long *)(lVar5 + 0x10) + 8),param_4,\n                             param_5)" (( "(") (identifier "param_1") (, ",") (identifier "param_2") (, ",") (pointer_expression "*(undefined8 *)(*(long *)(lVar5 + 0x10) + 8)" (* "*") (cast_expression "(undefined8 *)(*(long *)(lVar5 + 0x10) + 8)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(long *)(lVar5 + 0x10) + 8)" (( "(") (binary_expression "*(long *)(lVar5 + 0x10) + 8" (pointer_expression "*(long *)(lVar5 + 0x10)" (* "*") (cast_expression "(long *)(lVar5 + 0x10)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar5 + 0x10)" (( "(") (binary_expression "lVar5 + 0x10" (identifier "lVar5") (+ "+") (number_literal "0x10")) () ")")))) (+ "+") (number_literal "8")) () ")")))) (, ",") (identifier "param_4") (, ",") (identifier "param_5") () ")")))) (, ",") (binary_expression "(int)uVar4 != 0" (cast_expression "(int)uVar4" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar4")) (!= "!=") (number_literal "0"))) () ")"))) () ")")) (compound_statement "{\n      return uVar4;\n    }" ({ "{") (return_statement "return uVar4;" (return "return") (identifier "uVar4") (; ";")) (} "}"))) (expression_statement "param_3 = **(long **)(param_1[5] + 0x10 + param_3 * 0x18);" (assignment_expression "param_3 = **(long **)(param_1[5] + 0x10 + param_3 * 0x18)" (identifier "param_3") (= "=") (pointer_expression "**(long **)(param_1[5] + 0x10 + param_3 * 0x18)" (* "*") (pointer_expression "*(long **)(param_1[5] + 0x10 + param_3 * 0x18)" (* "*") (cast_expression "(long **)(param_1[5] + 0x10 + param_3 * 0x18)" (( "(") (type_descriptor "long **" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1[5] + 0x10 + param_3 * 0x18)" (( "(") (binary_expression "param_1[5] + 0x10 + param_3 * 0x18" (binary_expression "param_1[5] + 0x10" (subscript_expression "param_1[5]" (identifier "param_1") ([ "[") (number_literal "5") (] "]")) (+ "+") (number_literal "0x10")) (+ "+") (binary_expression "param_3 * 0x18" (identifier "param_3") (* "*") (number_literal "0x18"))) () ")")))))) (; ";")) (} "}"))) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}")))

type_1
function_1
          (type_2 *dfa,type_3 *dst_nodes,type_4 target,type_4 ex_subexp,type_5 var_3)

{
  long var_6;
  type_6 _Var2;
  type_1 var_7;
  type_4 var_2;
  
  while( true ) {
    var_2 = var_1(dst_nodes,target);
    if (var_2 != 0) {
      return var_8;
    }
    if (((type_7)(type_8)dfa->nodes[target].field_0x8 == var_3) &&
       (dfa->nodes[target].opr.sbcset == (type_9)ex_subexp)) {
      if (var_3 != L'\t') {
        return var_8;
      }
      _Var2 = var_4(dst_nodes,target);
      return -(type_7)!_Var2 & var_5;
    }
    _Var2 = var_4(dst_nodes,target);
    if (!_Var2) {
      return var_5;
    }
    var_6 = dfa->edests[target].nelem;
    if (var_6 == 0) break;
    if ((var_6 == 2) &&
       (var_7 = function_1
                          (dfa,dst_nodes,dfa->edests[target].elems[1],ex_subexp,var_3),
       var_7 != var_8)) {
      return var_7;
    }
    target = *dfa->edests[target].elems;
  }
  return var_8;
}


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

ulong MASKED(long *param_1,undefined8 param_2,long param_3,long param_4,uint param_5)

{
  char cVar1;
  long lVar2;
  long *plVar3;
  ulong uVar4;
  long lVar5;
  
  while( true ) {
    lVar2 = FUN_0010e1c8(param_2,param_3);
    if (lVar2 != 0) {
      return 0;
    }
    plVar3 = (long *)(param_3 * 0x10 + *param_1);
    if ((*(byte *)(plVar3 + 1) == param_5) && (*plVar3 == param_4)) {
      if (param_5 != 9) {
        return 0;
      }
      cVar1 = FUN_0010f079(param_2,param_3);
      return (ulong)(-(uint)(cVar1 == '\0') & 0xc);
    }
    cVar1 = FUN_0010f079(param_2,param_3);
    if (cVar1 == '\0') {
      return 0xc;
    }
    lVar5 = param_3 * 0x18 + param_1[5];
    lVar2 = *(long *)(lVar5 + 8);
    if (lVar2 == 0) break;
    if ((lVar2 == 2) &&
       (uVar4 = MASKED(param_1,param_2,*(undefined8 *)(*(long *)(lVar5 + 0x10) + 8),param_4,
                             param_5), (int)uVar4 != 0)) {
      return uVar4;
    }
    param_3 = **(long **)(param_1[5] + 0x10 + param_3 * 0x18);
  }
  return 0;
}

