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

{
  undefined3 extraout_var;
  undefined3 extraout_var_00;
  code *pcVar1;
  Idx IVar2;
  _Bool _Var5;
  Idx *pIVar3;
  reg_errcode_t rVar4;
  int iVar6;
  
  pcVar1 = (code *)(PTR_LAB_000401f4 + -0x26a4);
  while( true ) {
    IVar2 = re_node_set_contains
                      ((re_node_set *)dst_nodes->nelem,(Idx)&dst_nodes->elems,(re_node_set *)target)
    ;
    if (IVar2 != 0) {
      return _REG_NOERROR;
    }
    if (((uint)(byte)dfa->nodes[target].field_0x4 == type) &&
       (dfa->nodes[target].opr.sbcset == (re_bitset_ptr_t)ex_subexp)) {
      if (type != 9) {
        return _REG_NOERROR;
      }
      _Var5 = re_node_set_insert(dst_nodes,target);
      if (CONCAT31(extraout_var_00,_Var5) == 0) {
        return _REG_ESPACE;
      }
      return _REG_NOERROR;
    }
    _Var5 = re_node_set_insert(dst_nodes,target);
    if (CONCAT31(extraout_var,_Var5) == 0) {
      return _REG_ESPACE;
    }
    iVar6 = dfa->edests[target].nelem;
    if (iVar6 == 0) break;
    pIVar3 = dfa->edests[target].elems;
    if (iVar6 == 2) {
      rVar4 = (*pcVar1)(dfa,dst_nodes,pIVar3[1],ex_subexp,type);
      if (rVar4 != _REG_NOERROR) {
        return rVar4;
      }
      target = *dfa->edests[target].elems;
    }
    else {
      target = *pIVar3;
    }
  }
  return _REG_NOERROR;
}



int FUN_0001d95c(int *param_1,int param_2,int param_3,int param_4,uint param_5)

{
  code *pcVar1;
  int iVar2;
  int *piVar3;
  int iVar4;
  
  pcVar1 = (code *)(PTR_LAB_000401f4 + -0x26a4);
  while( true ) {
    iVar2 = FUN_0001d8b0(*(undefined4 *)(param_2 + 4),param_2 + 8,param_3);
    if (iVar2 != 0) {
      return 0;
    }
    piVar3 = (int *)(*param_1 + param_3 * 8);
    if ((*(byte *)(piVar3 + 1) == param_5) && (*piVar3 == param_4)) {
      if (param_5 != 9) {
        return 0;
      }
      iVar2 = FUN_0001baa8(param_2,param_3);
      if (iVar2 == 0) {
        return 0xc;
      }
      return 0;
    }
    iVar2 = FUN_0001baa8(param_2,param_3);
    if (iVar2 == 0) {
      return 0xc;
    }
    iVar2 = param_1[5] + param_3 * 0xc;
    iVar4 = *(int *)(iVar2 + 4);
    if (iVar4 == 0) break;
    piVar3 = *(int **)(iVar2 + 8);
    if (iVar4 == 2) {
      iVar2 = (*pcVar1)(param_1,param_2,piVar3[1],param_4,param_5);
      if (iVar2 != 0) {
        return iVar2;
      }
      param_3 = **(int **)(param_1[5] + param_3 * 0xc + 8);
    }
    else {
      param_3 = *piVar3;
    }
  }
  return 0;
}


lui gp,0x3
addiu gp,gp,-0x588c
addu gp,gp,t9
addiu sp,sp,-0x50
lw v0,-0x7edc(gp)
sw s3,0x34(sp)
addiu v0,v0,-0x26a4
sw s2,0x30(sp)
sw s4,0x38(sp)
sw s6,0x40(sp)
li s6,0x2
sw s5,0x3c(sp)
addiu s5,a1,0x8
sw s8,0x48(sp)
or s8,a0,zero
sw s7,0x44(sp)
or s7,a3,zero
sw s1,0x2c(sp)
or s1,a1,zero
sw s0,0x28(sp)
or s0,a2,zero
sw gp,0x18(sp)
sw ra,0x4c(sp)
sw v0,0x24(sp)
lw s2,-0x7edc(gp)
lw s3,-0x7edc(gp)
lw s4,0x60(sp)
addiu s2,s2,-0x2750
addiu s3,s3,-0x4558
lw a0,0x4(s1)
or a1,s5,zero
or t9,s2,zero
bal 0x0001d8b0
_or a2,s0,zero
sll v1,s0,0x3
lw gp,0x18(sp)
bne v0,zero,0x0001dae0
_or a1,s0,zero
lw v0,0x0(s8)
addu v0,v0,v1
lbu v1,0x4(v0)
bne v1,s4,0x0001da14
_or a0,s1,zero
lw v0,0x0(v0)
beq v0,s7,0x0001da8c
_li v0,0x9
or t9,s3,zero
bal 0x0001baa8
_nop
beq v0,zero,0x0001daac
_sll v1,s0,0x1
addu s0,v1,s0
lw v0,0x14(s8)
sll s0,s0,0x2
addu v0,v0,s0
lw v1,0x4(v0)
beq v1,zero,0x0001dae4
_lw ra,0x4c(sp)
beq v1,s6,0x0001da54
_lw v0,0x8(v0)
b 0x0001d9d0
_lw s0,0x0(v0)
lw a2,0x4(v0)
or a3,s7,zero
lw t9,0x24(sp)
or a1,s1,zero
or a0,s8,zero
jalr t9
_sw s4,0x10(sp)
bne v0,zero,0x0001dab4
_lw ra,0x4c(sp)
lw v0,0x14(s8)
addu s0,v0,s0
lw v0,0x8(s0)
b 0x0001d9d0
_lw s0,0x0(v0)
bne s4,v0,0x0001dae4
_lw ra,0x4c(sp)
lw t9,-0x7edc(gp)
addiu t9,t9,-0x4558
bal 0x0001baa8
_or a1,s0,zero
bne v0,zero,0x0001dae4
_lw ra,0x4c(sp)
li v0,0xc
lw ra,0x4c(sp)
lw s8,0x48(sp)
lw s7,0x44(sp)
lw s6,0x40(sp)
lw s5,0x3c(sp)
lw s4,0x38(sp)
lw s3,0x34(sp)
lw s2,0x30(sp)
lw s1,0x2c(sp)
lw s0,0x28(sp)
jr ra
_addiu sp,sp,0x50
lw ra,0x4c(sp)
or v0,zero,zero
lw s8,0x48(sp)
lw s7,0x44(sp)
lw s6,0x40(sp)
lw s5,0x3c(sp)
lw s4,0x38(sp)
lw s3,0x34(sp)
lw s2,0x30(sp)
lw s1,0x2c(sp)
lw s0,0x28(sp)
jr ra
_addiu sp,sp,0x50
(translation_unit "int FUN_0001d95c(int *param_1,int param_2,int param_3,int param_4,uint param_5)\n\n{\n  code *pcVar1;\n  int iVar2;\n  int *piVar3;\n  int iVar4;\n  \n  pcVar1 = (code *)(PTR_LAB_000401f4 + -0x26a4);\n  while( true ) {\n    iVar2 = FUN_0001d8b0(*(undefined4 *)(param_2 + 4),param_2 + 8,param_3);\n    if (iVar2 != 0) {\n      return 0;\n    }\n    piVar3 = (int *)(*param_1 + param_3 * 8);\n    if ((*(byte *)(piVar3 + 1) == param_5) && (*piVar3 == param_4)) {\n      if (param_5 != 9) {\n        return 0;\n      }\n      iVar2 = FUN_0001baa8(param_2,param_3);\n      if (iVar2 == 0) {\n        return 0xc;\n      }\n      return 0;\n    }\n    iVar2 = FUN_0001baa8(param_2,param_3);\n    if (iVar2 == 0) {\n      return 0xc;\n    }\n    iVar2 = param_1[5] + param_3 * 0xc;\n    iVar4 = *(int *)(iVar2 + 4);\n    if (iVar4 == 0) break;\n    piVar3 = *(int **)(iVar2 + 8);\n    if (iVar4 == 2) {\n      iVar2 = (*pcVar1)(param_1,param_2,piVar3[1],param_4,param_5);\n      if (iVar2 != 0) {\n        return iVar2;\n      }\n      param_3 = **(int **)(param_1[5] + param_3 * 0xc + 8);\n    }\n    else {\n      param_3 = *piVar3;\n    }\n  }\n  return 0;\n}\n\n" (function_definition "int FUN_0001d95c(int *param_1,int param_2,int param_3,int param_4,uint param_5)\n\n{\n  code *pcVar1;\n  int iVar2;\n  int *piVar3;\n  int iVar4;\n  \n  pcVar1 = (code *)(PTR_LAB_000401f4 + -0x26a4);\n  while( true ) {\n    iVar2 = FUN_0001d8b0(*(undefined4 *)(param_2 + 4),param_2 + 8,param_3);\n    if (iVar2 != 0) {\n      return 0;\n    }\n    piVar3 = (int *)(*param_1 + param_3 * 8);\n    if ((*(byte *)(piVar3 + 1) == param_5) && (*piVar3 == param_4)) {\n      if (param_5 != 9) {\n        return 0;\n      }\n      iVar2 = FUN_0001baa8(param_2,param_3);\n      if (iVar2 == 0) {\n        return 0xc;\n      }\n      return 0;\n    }\n    iVar2 = FUN_0001baa8(param_2,param_3);\n    if (iVar2 == 0) {\n      return 0xc;\n    }\n    iVar2 = param_1[5] + param_3 * 0xc;\n    iVar4 = *(int *)(iVar2 + 4);\n    if (iVar4 == 0) break;\n    piVar3 = *(int **)(iVar2 + 8);\n    if (iVar4 == 2) {\n      iVar2 = (*pcVar1)(param_1,param_2,piVar3[1],param_4,param_5);\n      if (iVar2 != 0) {\n        return iVar2;\n      }\n      param_3 = **(int **)(param_1[5] + param_3 * 0xc + 8);\n    }\n    else {\n      param_3 = *piVar3;\n    }\n  }\n  return 0;\n}" primitive_type (function_declarator "FUN_0001d95c(int *param_1,int param_2,int param_3,int param_4,uint param_5)" identifier (parameter_list "(int *param_1,int param_2,int param_3,int param_4,uint param_5)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "int param_3" primitive_type identifier) , (parameter_declaration "int param_4" primitive_type identifier) , (parameter_declaration "uint param_5" type_identifier identifier) ))) (compound_statement "{\n  code *pcVar1;\n  int iVar2;\n  int *piVar3;\n  int iVar4;\n  \n  pcVar1 = (code *)(PTR_LAB_000401f4 + -0x26a4);\n  while( true ) {\n    iVar2 = FUN_0001d8b0(*(undefined4 *)(param_2 + 4),param_2 + 8,param_3);\n    if (iVar2 != 0) {\n      return 0;\n    }\n    piVar3 = (int *)(*param_1 + param_3 * 8);\n    if ((*(byte *)(piVar3 + 1) == param_5) && (*piVar3 == param_4)) {\n      if (param_5 != 9) {\n        return 0;\n      }\n      iVar2 = FUN_0001baa8(param_2,param_3);\n      if (iVar2 == 0) {\n        return 0xc;\n      }\n      return 0;\n    }\n    iVar2 = FUN_0001baa8(param_2,param_3);\n    if (iVar2 == 0) {\n      return 0xc;\n    }\n    iVar2 = param_1[5] + param_3 * 0xc;\n    iVar4 = *(int *)(iVar2 + 4);\n    if (iVar4 == 0) break;\n    piVar3 = *(int **)(iVar2 + 8);\n    if (iVar4 == 2) {\n      iVar2 = (*pcVar1)(param_1,param_2,piVar3[1],param_4,param_5);\n      if (iVar2 != 0) {\n        return iVar2;\n      }\n      param_3 = **(int **)(param_1[5] + param_3 * 0xc + 8);\n    }\n    else {\n      param_3 = *piVar3;\n    }\n  }\n  return 0;\n}" { (declaration "code *pcVar1;" type_identifier (pointer_declarator "*pcVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int *piVar3;" primitive_type (pointer_declarator "*piVar3" * identifier) ;) (declaration "int iVar4;" primitive_type identifier ;) (expression_statement "pcVar1 = (code *)(PTR_LAB_000401f4 + -0x26a4);" (assignment_expression "pcVar1 = (code *)(PTR_LAB_000401f4 + -0x26a4)" identifier = (cast_expression "(code *)(PTR_LAB_000401f4 + -0x26a4)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_000401f4 + -0x26a4)" ( (binary_expression "PTR_LAB_000401f4 + -0x26a4" identifier + number_literal) )))) ;) (while_statement "while( true ) {\n    iVar2 = FUN_0001d8b0(*(undefined4 *)(param_2 + 4),param_2 + 8,param_3);\n    if (iVar2 != 0) {\n      return 0;\n    }\n    piVar3 = (int *)(*param_1 + param_3 * 8);\n    if ((*(byte *)(piVar3 + 1) == param_5) && (*piVar3 == param_4)) {\n      if (param_5 != 9) {\n        return 0;\n      }\n      iVar2 = FUN_0001baa8(param_2,param_3);\n      if (iVar2 == 0) {\n        return 0xc;\n      }\n      return 0;\n    }\n    iVar2 = FUN_0001baa8(param_2,param_3);\n    if (iVar2 == 0) {\n      return 0xc;\n    }\n    iVar2 = param_1[5] + param_3 * 0xc;\n    iVar4 = *(int *)(iVar2 + 4);\n    if (iVar4 == 0) break;\n    piVar3 = *(int **)(iVar2 + 8);\n    if (iVar4 == 2) {\n      iVar2 = (*pcVar1)(param_1,param_2,piVar3[1],param_4,param_5);\n      if (iVar2 != 0) {\n        return iVar2;\n      }\n      param_3 = **(int **)(param_1[5] + param_3 * 0xc + 8);\n    }\n    else {\n      param_3 = *piVar3;\n    }\n  }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n    iVar2 = FUN_0001d8b0(*(undefined4 *)(param_2 + 4),param_2 + 8,param_3);\n    if (iVar2 != 0) {\n      return 0;\n    }\n    piVar3 = (int *)(*param_1 + param_3 * 8);\n    if ((*(byte *)(piVar3 + 1) == param_5) && (*piVar3 == param_4)) {\n      if (param_5 != 9) {\n        return 0;\n      }\n      iVar2 = FUN_0001baa8(param_2,param_3);\n      if (iVar2 == 0) {\n        return 0xc;\n      }\n      return 0;\n    }\n    iVar2 = FUN_0001baa8(param_2,param_3);\n    if (iVar2 == 0) {\n      return 0xc;\n    }\n    iVar2 = param_1[5] + param_3 * 0xc;\n    iVar4 = *(int *)(iVar2 + 4);\n    if (iVar4 == 0) break;\n    piVar3 = *(int **)(iVar2 + 8);\n    if (iVar4 == 2) {\n      iVar2 = (*pcVar1)(param_1,param_2,piVar3[1],param_4,param_5);\n      if (iVar2 != 0) {\n        return iVar2;\n      }\n      param_3 = **(int **)(param_1[5] + param_3 * 0xc + 8);\n    }\n    else {\n      param_3 = *piVar3;\n    }\n  }" { (expression_statement "iVar2 = FUN_0001d8b0(*(undefined4 *)(param_2 + 4),param_2 + 8,param_3);" (assignment_expression "iVar2 = FUN_0001d8b0(*(undefined4 *)(param_2 + 4),param_2 + 8,param_3)" identifier = (call_expression "FUN_0001d8b0(*(undefined4 *)(param_2 + 4),param_2 + 8,param_3)" identifier (argument_list "(*(undefined4 *)(param_2 + 4),param_2 + 8,param_3)" ( (pointer_expression "*(undefined4 *)(param_2 + 4)" * (cast_expression "(undefined4 *)(param_2 + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) )))) , (binary_expression "param_2 + 8" identifier + number_literal) , identifier )))) ;) (if_statement "if (iVar2 != 0) {\n      return 0;\n    }" if (parenthesized_expression "(iVar2 != 0)" ( (binary_expression "iVar2 != 0" identifier != number_literal) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "piVar3 = (int *)(*param_1 + param_3 * 8);" (assignment_expression "piVar3 = (int *)(*param_1 + param_3 * 8)" identifier = (cast_expression "(int *)(*param_1 + param_3 * 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + param_3 * 8)" ( (binary_expression "*param_1 + param_3 * 8" (pointer_expression "*param_1" * identifier) + (binary_expression "param_3 * 8" identifier * number_literal)) )))) ;) (if_statement "if ((*(byte *)(piVar3 + 1) == param_5) && (*piVar3 == param_4)) {\n      if (param_5 != 9) {\n        return 0;\n      }\n      iVar2 = FUN_0001baa8(param_2,param_3);\n      if (iVar2 == 0) {\n        return 0xc;\n      }\n      return 0;\n    }" if (parenthesized_expression "((*(byte *)(piVar3 + 1) == param_5) && (*piVar3 == param_4))" ( (binary_expression "(*(byte *)(piVar3 + 1) == param_5) && (*piVar3 == param_4)" (parenthesized_expression "(*(byte *)(piVar3 + 1) == param_5)" ( (binary_expression "*(byte *)(piVar3 + 1) == param_5" (pointer_expression "*(byte *)(piVar3 + 1)" * (cast_expression "(byte *)(piVar3 + 1)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(piVar3 + 1)" ( (binary_expression "piVar3 + 1" identifier + number_literal) )))) == identifier) )) && (parenthesized_expression "(*piVar3 == param_4)" ( (binary_expression "*piVar3 == param_4" (pointer_expression "*piVar3" * identifier) == identifier) ))) )) (compound_statement "{\n      if (param_5 != 9) {\n        return 0;\n      }\n      iVar2 = FUN_0001baa8(param_2,param_3);\n      if (iVar2 == 0) {\n        return 0xc;\n      }\n      return 0;\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 "iVar2 = FUN_0001baa8(param_2,param_3);" (assignment_expression "iVar2 = FUN_0001baa8(param_2,param_3)" identifier = (call_expression "FUN_0001baa8(param_2,param_3)" identifier (argument_list "(param_2,param_3)" ( identifier , identifier )))) ;) (if_statement "if (iVar2 == 0) {\n        return 0xc;\n      }" if (parenthesized_expression "(iVar2 == 0)" ( (binary_expression "iVar2 == 0" identifier == number_literal) )) (compound_statement "{\n        return 0xc;\n      }" { (return_statement "return 0xc;" return number_literal ;) })) (return_statement "return 0;" return number_literal ;) })) (expression_statement "iVar2 = FUN_0001baa8(param_2,param_3);" (assignment_expression "iVar2 = FUN_0001baa8(param_2,param_3)" identifier = (call_expression "FUN_0001baa8(param_2,param_3)" identifier (argument_list "(param_2,param_3)" ( identifier , identifier )))) ;) (if_statement "if (iVar2 == 0) {\n      return 0xc;\n    }" if (parenthesized_expression "(iVar2 == 0)" ( (binary_expression "iVar2 == 0" identifier == number_literal) )) (compound_statement "{\n      return 0xc;\n    }" { (return_statement "return 0xc;" return number_literal ;) })) (expression_statement "iVar2 = param_1[5] + param_3 * 0xc;" (assignment_expression "iVar2 = param_1[5] + param_3 * 0xc" identifier = (binary_expression "param_1[5] + param_3 * 0xc" (subscript_expression "param_1[5]" identifier [ number_literal ]) + (binary_expression "param_3 * 0xc" identifier * number_literal))) ;) (expression_statement "iVar4 = *(int *)(iVar2 + 4);" (assignment_expression "iVar4 = *(int *)(iVar2 + 4)" identifier = (pointer_expression "*(int *)(iVar2 + 4)" * (cast_expression "(int *)(iVar2 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 4)" ( (binary_expression "iVar2 + 4" identifier + number_literal) ))))) ;) (if_statement "if (iVar4 == 0) break;" if (parenthesized_expression "(iVar4 == 0)" ( (binary_expression "iVar4 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "piVar3 = *(int **)(iVar2 + 8);" (assignment_expression "piVar3 = *(int **)(iVar2 + 8)" identifier = (pointer_expression "*(int **)(iVar2 + 8)" * (cast_expression "(int **)(iVar2 + 8)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar2 + 8)" ( (binary_expression "iVar2 + 8" identifier + number_literal) ))))) ;) (if_statement "if (iVar4 == 2) {\n      iVar2 = (*pcVar1)(param_1,param_2,piVar3[1],param_4,param_5);\n      if (iVar2 != 0) {\n        return iVar2;\n      }\n      param_3 = **(int **)(param_1[5] + param_3 * 0xc + 8);\n    }\n    else {\n      param_3 = *piVar3;\n    }" if (parenthesized_expression "(iVar4 == 2)" ( (binary_expression "iVar4 == 2" identifier == number_literal) )) (compound_statement "{\n      iVar2 = (*pcVar1)(param_1,param_2,piVar3[1],param_4,param_5);\n      if (iVar2 != 0) {\n        return iVar2;\n      }\n      param_3 = **(int **)(param_1[5] + param_3 * 0xc + 8);\n    }" { (expression_statement "iVar2 = (*pcVar1)(param_1,param_2,piVar3[1],param_4,param_5);" (assignment_expression "iVar2 = (*pcVar1)(param_1,param_2,piVar3[1],param_4,param_5)" identifier = (call_expression "(*pcVar1)(param_1,param_2,piVar3[1],param_4,param_5)" (parenthesized_expression "(*pcVar1)" ( (pointer_expression "*pcVar1" * identifier) )) (argument_list "(param_1,param_2,piVar3[1],param_4,param_5)" ( identifier , identifier , (subscript_expression "piVar3[1]" identifier [ number_literal ]) , identifier , identifier )))) ;) (if_statement "if (iVar2 != 0) {\n        return iVar2;\n      }" if (parenthesized_expression "(iVar2 != 0)" ( (binary_expression "iVar2 != 0" identifier != number_literal) )) (compound_statement "{\n        return iVar2;\n      }" { (return_statement "return iVar2;" return identifier ;) })) (expression_statement "param_3 = **(int **)(param_1[5] + param_3 * 0xc + 8);" (assignment_expression "param_3 = **(int **)(param_1[5] + param_3 * 0xc + 8)" identifier = (pointer_expression "**(int **)(param_1[5] + param_3 * 0xc + 8)" * (pointer_expression "*(int **)(param_1[5] + param_3 * 0xc + 8)" * (cast_expression "(int **)(param_1[5] + param_3 * 0xc + 8)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1[5] + param_3 * 0xc + 8)" ( (binary_expression "param_1[5] + param_3 * 0xc + 8" (binary_expression "param_1[5] + param_3 * 0xc" (subscript_expression "param_1[5]" identifier [ number_literal ]) + (binary_expression "param_3 * 0xc" identifier * number_literal)) + number_literal) )))))) ;) }) (else_clause "else {\n      param_3 = *piVar3;\n    }" else (compound_statement "{\n      param_3 = *piVar3;\n    }" { (expression_statement "param_3 = *piVar3;" (assignment_expression "param_3 = *piVar3" identifier = (pointer_expression "*piVar3" * identifier)) ;) }))) })) (return_statement "return 0;" return number_literal ;) })))
(translation_unit "reg_errcode_t\ncheck_arrival_expand_ecl_sub(re_dfa_t *dfa,re_node_set *dst_nodes,Idx target,Idx ex_subexp,int type)\n\n{\n  undefined3 extraout_var;\n  undefined3 extraout_var_00;\n  code *pcVar1;\n  Idx IVar2;\n  _Bool _Var5;\n  Idx *pIVar3;\n  reg_errcode_t rVar4;\n  int iVar6;\n  \n  pcVar1 = (code *)(PTR_LAB_000401f4 + -0x26a4);\n  while( true ) {\n    IVar2 = re_node_set_contains\n                      ((re_node_set *)dst_nodes->nelem,(Idx)&dst_nodes->elems,(re_node_set *)target)\n    ;\n    if (IVar2 != 0) {\n      return _REG_NOERROR;\n    }\n    if (((uint)(byte)dfa->nodes[target].field_0x4 == type) &&\n       (dfa->nodes[target].opr.sbcset == (re_bitset_ptr_t)ex_subexp)) {\n      if (type != 9) {\n        return _REG_NOERROR;\n      }\n      _Var5 = re_node_set_insert(dst_nodes,target);\n      if (CONCAT31(extraout_var_00,_Var5) == 0) {\n        return _REG_ESPACE;\n      }\n      return _REG_NOERROR;\n    }\n    _Var5 = re_node_set_insert(dst_nodes,target);\n    if (CONCAT31(extraout_var,_Var5) == 0) {\n      return _REG_ESPACE;\n    }\n    iVar6 = dfa->edests[target].nelem;\n    if (iVar6 == 0) break;\n    pIVar3 = dfa->edests[target].elems;\n    if (iVar6 == 2) {\n      rVar4 = (*pcVar1)(dfa,dst_nodes,pIVar3[1],ex_subexp,type);\n      if (rVar4 != _REG_NOERROR) {\n        return rVar4;\n      }\n      target = *dfa->edests[target].elems;\n    }\n    else {\n      target = *pIVar3;\n    }\n  }\n  return _REG_NOERROR;\n}\n\n" (function_definition "reg_errcode_t\ncheck_arrival_expand_ecl_sub(re_dfa_t *dfa,re_node_set *dst_nodes,Idx target,Idx ex_subexp,int type)\n\n{\n  undefined3 extraout_var;\n  undefined3 extraout_var_00;\n  code *pcVar1;\n  Idx IVar2;\n  _Bool _Var5;\n  Idx *pIVar3;\n  reg_errcode_t rVar4;\n  int iVar6;\n  \n  pcVar1 = (code *)(PTR_LAB_000401f4 + -0x26a4);\n  while( true ) {\n    IVar2 = re_node_set_contains\n                      ((re_node_set *)dst_nodes->nelem,(Idx)&dst_nodes->elems,(re_node_set *)target)\n    ;\n    if (IVar2 != 0) {\n      return _REG_NOERROR;\n    }\n    if (((uint)(byte)dfa->nodes[target].field_0x4 == type) &&\n       (dfa->nodes[target].opr.sbcset == (re_bitset_ptr_t)ex_subexp)) {\n      if (type != 9) {\n        return _REG_NOERROR;\n      }\n      _Var5 = re_node_set_insert(dst_nodes,target);\n      if (CONCAT31(extraout_var_00,_Var5) == 0) {\n        return _REG_ESPACE;\n      }\n      return _REG_NOERROR;\n    }\n    _Var5 = re_node_set_insert(dst_nodes,target);\n    if (CONCAT31(extraout_var,_Var5) == 0) {\n      return _REG_ESPACE;\n    }\n    iVar6 = dfa->edests[target].nelem;\n    if (iVar6 == 0) break;\n    pIVar3 = dfa->edests[target].elems;\n    if (iVar6 == 2) {\n      rVar4 = (*pcVar1)(dfa,dst_nodes,pIVar3[1],ex_subexp,type);\n      if (rVar4 != _REG_NOERROR) {\n        return rVar4;\n      }\n      target = *dfa->edests[target].elems;\n    }\n    else {\n      target = *pIVar3;\n    }\n  }\n  return _REG_NOERROR;\n}" type_identifier (function_declarator "check_arrival_expand_ecl_sub(re_dfa_t *dfa,re_node_set *dst_nodes,Idx target,Idx ex_subexp,int type)" identifier (parameter_list "(re_dfa_t *dfa,re_node_set *dst_nodes,Idx target,Idx ex_subexp,int 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 "int type" primitive_type identifier) ))) (compound_statement "{\n  undefined3 extraout_var;\n  undefined3 extraout_var_00;\n  code *pcVar1;\n  Idx IVar2;\n  _Bool _Var5;\n  Idx *pIVar3;\n  reg_errcode_t rVar4;\n  int iVar6;\n  \n  pcVar1 = (code *)(PTR_LAB_000401f4 + -0x26a4);\n  while( true ) {\n    IVar2 = re_node_set_contains\n                      ((re_node_set *)dst_nodes->nelem,(Idx)&dst_nodes->elems,(re_node_set *)target)\n    ;\n    if (IVar2 != 0) {\n      return _REG_NOERROR;\n    }\n    if (((uint)(byte)dfa->nodes[target].field_0x4 == type) &&\n       (dfa->nodes[target].opr.sbcset == (re_bitset_ptr_t)ex_subexp)) {\n      if (type != 9) {\n        return _REG_NOERROR;\n      }\n      _Var5 = re_node_set_insert(dst_nodes,target);\n      if (CONCAT31(extraout_var_00,_Var5) == 0) {\n        return _REG_ESPACE;\n      }\n      return _REG_NOERROR;\n    }\n    _Var5 = re_node_set_insert(dst_nodes,target);\n    if (CONCAT31(extraout_var,_Var5) == 0) {\n      return _REG_ESPACE;\n    }\n    iVar6 = dfa->edests[target].nelem;\n    if (iVar6 == 0) break;\n    pIVar3 = dfa->edests[target].elems;\n    if (iVar6 == 2) {\n      rVar4 = (*pcVar1)(dfa,dst_nodes,pIVar3[1],ex_subexp,type);\n      if (rVar4 != _REG_NOERROR) {\n        return rVar4;\n      }\n      target = *dfa->edests[target].elems;\n    }\n    else {\n      target = *pIVar3;\n    }\n  }\n  return _REG_NOERROR;\n}" { (declaration "undefined3 extraout_var;" type_identifier identifier ;) (declaration "undefined3 extraout_var_00;" type_identifier identifier ;) (declaration "code *pcVar1;" type_identifier (pointer_declarator "*pcVar1" * identifier) ;) (declaration "Idx IVar2;" type_identifier identifier ;) (declaration "_Bool _Var5;" type_identifier identifier ;) (declaration "Idx *pIVar3;" type_identifier (pointer_declarator "*pIVar3" * identifier) ;) (declaration "reg_errcode_t rVar4;" type_identifier identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (expression_statement "pcVar1 = (code *)(PTR_LAB_000401f4 + -0x26a4);" (assignment_expression "pcVar1 = (code *)(PTR_LAB_000401f4 + -0x26a4)" identifier = (cast_expression "(code *)(PTR_LAB_000401f4 + -0x26a4)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_000401f4 + -0x26a4)" ( (binary_expression "PTR_LAB_000401f4 + -0x26a4" identifier + number_literal) )))) ;) (while_statement "while( true ) {\n    IVar2 = re_node_set_contains\n                      ((re_node_set *)dst_nodes->nelem,(Idx)&dst_nodes->elems,(re_node_set *)target)\n    ;\n    if (IVar2 != 0) {\n      return _REG_NOERROR;\n    }\n    if (((uint)(byte)dfa->nodes[target].field_0x4 == type) &&\n       (dfa->nodes[target].opr.sbcset == (re_bitset_ptr_t)ex_subexp)) {\n      if (type != 9) {\n        return _REG_NOERROR;\n      }\n      _Var5 = re_node_set_insert(dst_nodes,target);\n      if (CONCAT31(extraout_var_00,_Var5) == 0) {\n        return _REG_ESPACE;\n      }\n      return _REG_NOERROR;\n    }\n    _Var5 = re_node_set_insert(dst_nodes,target);\n    if (CONCAT31(extraout_var,_Var5) == 0) {\n      return _REG_ESPACE;\n    }\n    iVar6 = dfa->edests[target].nelem;\n    if (iVar6 == 0) break;\n    pIVar3 = dfa->edests[target].elems;\n    if (iVar6 == 2) {\n      rVar4 = (*pcVar1)(dfa,dst_nodes,pIVar3[1],ex_subexp,type);\n      if (rVar4 != _REG_NOERROR) {\n        return rVar4;\n      }\n      target = *dfa->edests[target].elems;\n    }\n    else {\n      target = *pIVar3;\n    }\n  }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n    IVar2 = re_node_set_contains\n                      ((re_node_set *)dst_nodes->nelem,(Idx)&dst_nodes->elems,(re_node_set *)target)\n    ;\n    if (IVar2 != 0) {\n      return _REG_NOERROR;\n    }\n    if (((uint)(byte)dfa->nodes[target].field_0x4 == type) &&\n       (dfa->nodes[target].opr.sbcset == (re_bitset_ptr_t)ex_subexp)) {\n      if (type != 9) {\n        return _REG_NOERROR;\n      }\n      _Var5 = re_node_set_insert(dst_nodes,target);\n      if (CONCAT31(extraout_var_00,_Var5) == 0) {\n        return _REG_ESPACE;\n      }\n      return _REG_NOERROR;\n    }\n    _Var5 = re_node_set_insert(dst_nodes,target);\n    if (CONCAT31(extraout_var,_Var5) == 0) {\n      return _REG_ESPACE;\n    }\n    iVar6 = dfa->edests[target].nelem;\n    if (iVar6 == 0) break;\n    pIVar3 = dfa->edests[target].elems;\n    if (iVar6 == 2) {\n      rVar4 = (*pcVar1)(dfa,dst_nodes,pIVar3[1],ex_subexp,type);\n      if (rVar4 != _REG_NOERROR) {\n        return rVar4;\n      }\n      target = *dfa->edests[target].elems;\n    }\n    else {\n      target = *pIVar3;\n    }\n  }" { (expression_statement "IVar2 = re_node_set_contains\n                      ((re_node_set *)dst_nodes->nelem,(Idx)&dst_nodes->elems,(re_node_set *)target)\n    ;" (assignment_expression "IVar2 = re_node_set_contains\n                      ((re_node_set *)dst_nodes->nelem,(Idx)&dst_nodes->elems,(re_node_set *)target)" identifier = (call_expression "re_node_set_contains\n                      ((re_node_set *)dst_nodes->nelem,(Idx)&dst_nodes->elems,(re_node_set *)target)" identifier (argument_list "((re_node_set *)dst_nodes->nelem,(Idx)&dst_nodes->elems,(re_node_set *)target)" ( (cast_expression "(re_node_set *)dst_nodes->nelem" ( (type_descriptor "re_node_set *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "dst_nodes->nelem" identifier -> field_identifier)) , (binary_expression "(Idx)&dst_nodes->elems" (parenthesized_expression "(Idx)" ( identifier )) & (field_expression "dst_nodes->elems" identifier -> field_identifier)) , (cast_expression "(re_node_set *)target" ( (type_descriptor "re_node_set *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) )))) ;) (if_statement "if (IVar2 != 0) {\n      return _REG_NOERROR;\n    }" if (parenthesized_expression "(IVar2 != 0)" ( (binary_expression "IVar2 != 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_0x4 == type) &&\n       (dfa->nodes[target].opr.sbcset == (re_bitset_ptr_t)ex_subexp)) {\n      if (type != 9) {\n        return _REG_NOERROR;\n      }\n      _Var5 = re_node_set_insert(dst_nodes,target);\n      if (CONCAT31(extraout_var_00,_Var5) == 0) {\n        return _REG_ESPACE;\n      }\n      return _REG_NOERROR;\n    }" if (parenthesized_expression "(((uint)(byte)dfa->nodes[target].field_0x4 == type) &&\n       (dfa->nodes[target].opr.sbcset == (re_bitset_ptr_t)ex_subexp))" ( (binary_expression "((uint)(byte)dfa->nodes[target].field_0x4 == type) &&\n       (dfa->nodes[target].opr.sbcset == (re_bitset_ptr_t)ex_subexp)" (parenthesized_expression "((uint)(byte)dfa->nodes[target].field_0x4 == type)" ( (binary_expression "(uint)(byte)dfa->nodes[target].field_0x4 == type" (cast_expression "(uint)(byte)dfa->nodes[target].field_0x4" ( (type_descriptor "uint" type_identifier) ) (cast_expression "(byte)dfa->nodes[target].field_0x4" ( (type_descriptor "byte" type_identifier) ) (field_expression "dfa->nodes[target].field_0x4" (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 != 9) {\n        return _REG_NOERROR;\n      }\n      _Var5 = re_node_set_insert(dst_nodes,target);\n      if (CONCAT31(extraout_var_00,_Var5) == 0) {\n        return _REG_ESPACE;\n      }\n      return _REG_NOERROR;\n    }" { (if_statement "if (type != 9) {\n        return _REG_NOERROR;\n      }" if (parenthesized_expression "(type != 9)" ( (binary_expression "type != 9" identifier != number_literal) )) (compound_statement "{\n        return _REG_NOERROR;\n      }" { (return_statement "return _REG_NOERROR;" return identifier ;) })) (expression_statement "_Var5 = re_node_set_insert(dst_nodes,target);" (assignment_expression "_Var5 = 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 (CONCAT31(extraout_var_00,_Var5) == 0) {\n        return _REG_ESPACE;\n      }" if (parenthesized_expression "(CONCAT31(extraout_var_00,_Var5) == 0)" ( (binary_expression "CONCAT31(extraout_var_00,_Var5) == 0" (call_expression "CONCAT31(extraout_var_00,_Var5)" identifier (argument_list "(extraout_var_00,_Var5)" ( identifier , identifier ))) == number_literal) )) (compound_statement "{\n        return _REG_ESPACE;\n      }" { (return_statement "return _REG_ESPACE;" return identifier ;) })) (return_statement "return _REG_NOERROR;" return identifier ;) })) (expression_statement "_Var5 = re_node_set_insert(dst_nodes,target);" (assignment_expression "_Var5 = 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 (CONCAT31(extraout_var,_Var5) == 0) {\n      return _REG_ESPACE;\n    }" if (parenthesized_expression "(CONCAT31(extraout_var,_Var5) == 0)" ( (binary_expression "CONCAT31(extraout_var,_Var5) == 0" (call_expression "CONCAT31(extraout_var,_Var5)" identifier (argument_list "(extraout_var,_Var5)" ( identifier , identifier ))) == number_literal) )) (compound_statement "{\n      return _REG_ESPACE;\n    }" { (return_statement "return _REG_ESPACE;" return identifier ;) })) (expression_statement "iVar6 = dfa->edests[target].nelem;" (assignment_expression "iVar6 = 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 (iVar6 == 0) break;" if (parenthesized_expression "(iVar6 == 0)" ( (binary_expression "iVar6 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "pIVar3 = dfa->edests[target].elems;" (assignment_expression "pIVar3 = dfa->edests[target].elems" identifier = (field_expression "dfa->edests[target].elems" (subscript_expression "dfa->edests[target]" (field_expression "dfa->edests" identifier -> field_identifier) [ identifier ]) . field_identifier)) ;) (if_statement "if (iVar6 == 2) {\n      rVar4 = (*pcVar1)(dfa,dst_nodes,pIVar3[1],ex_subexp,type);\n      if (rVar4 != _REG_NOERROR) {\n        return rVar4;\n      }\n      target = *dfa->edests[target].elems;\n    }\n    else {\n      target = *pIVar3;\n    }" if (parenthesized_expression "(iVar6 == 2)" ( (binary_expression "iVar6 == 2" identifier == number_literal) )) (compound_statement "{\n      rVar4 = (*pcVar1)(dfa,dst_nodes,pIVar3[1],ex_subexp,type);\n      if (rVar4 != _REG_NOERROR) {\n        return rVar4;\n      }\n      target = *dfa->edests[target].elems;\n    }" { (expression_statement "rVar4 = (*pcVar1)(dfa,dst_nodes,pIVar3[1],ex_subexp,type);" (assignment_expression "rVar4 = (*pcVar1)(dfa,dst_nodes,pIVar3[1],ex_subexp,type)" identifier = (call_expression "(*pcVar1)(dfa,dst_nodes,pIVar3[1],ex_subexp,type)" (parenthesized_expression "(*pcVar1)" ( (pointer_expression "*pcVar1" * identifier) )) (argument_list "(dfa,dst_nodes,pIVar3[1],ex_subexp,type)" ( identifier , identifier , (subscript_expression "pIVar3[1]" identifier [ number_literal ]) , identifier , identifier )))) ;) (if_statement "if (rVar4 != _REG_NOERROR) {\n        return rVar4;\n      }" if (parenthesized_expression "(rVar4 != _REG_NOERROR)" ( (binary_expression "rVar4 != _REG_NOERROR" identifier != identifier) )) (compound_statement "{\n        return rVar4;\n      }" { (return_statement "return rVar4;" 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))) ;) }) (else_clause "else {\n      target = *pIVar3;\n    }" else (compound_statement "{\n      target = *pIVar3;\n    }" { (expression_statement "target = *pIVar3;" (assignment_expression "target = *pIVar3" identifier = (pointer_expression "*pIVar3" * identifier)) ;) }))) })) (return_statement "return _REG_NOERROR;" return identifier ;) })))
(translation_unit "int FUN_0001d95c(int *param_1,int param_2,int param_3,int param_4,uint param_5)\n\n{\n  code *pcVar1;\n  int iVar2;\n  int *piVar3;\n  int iVar4;\n  \n  pcVar1 = (code *)(PTR_LAB_000401f4 + -0x26a4);\n  while( true ) {\n    iVar2 = FUN_0001d8b0(*(undefined4 *)(param_2 + 4),param_2 + 8,param_3);\n    if (iVar2 != 0) {\n      return 0;\n    }\n    piVar3 = (int *)(*param_1 + param_3 * 8);\n    if ((*(byte *)(piVar3 + 1) == param_5) && (*piVar3 == param_4)) {\n      if (param_5 != 9) {\n        return 0;\n      }\n      iVar2 = FUN_0001baa8(param_2,param_3);\n      if (iVar2 == 0) {\n        return 0xc;\n      }\n      return 0;\n    }\n    iVar2 = FUN_0001baa8(param_2,param_3);\n    if (iVar2 == 0) {\n      return 0xc;\n    }\n    iVar2 = param_1[5] + param_3 * 0xc;\n    iVar4 = *(int *)(iVar2 + 4);\n    if (iVar4 == 0) break;\n    piVar3 = *(int **)(iVar2 + 8);\n    if (iVar4 == 2) {\n      iVar2 = (*pcVar1)(param_1,param_2,piVar3[1],param_4,param_5);\n      if (iVar2 != 0) {\n        return iVar2;\n      }\n      param_3 = **(int **)(param_1[5] + param_3 * 0xc + 8);\n    }\n    else {\n      param_3 = *piVar3;\n    }\n  }\n  return 0;\n}\n\n" (function_definition "int FUN_0001d95c(int *param_1,int param_2,int param_3,int param_4,uint param_5)\n\n{\n  code *pcVar1;\n  int iVar2;\n  int *piVar3;\n  int iVar4;\n  \n  pcVar1 = (code *)(PTR_LAB_000401f4 + -0x26a4);\n  while( true ) {\n    iVar2 = FUN_0001d8b0(*(undefined4 *)(param_2 + 4),param_2 + 8,param_3);\n    if (iVar2 != 0) {\n      return 0;\n    }\n    piVar3 = (int *)(*param_1 + param_3 * 8);\n    if ((*(byte *)(piVar3 + 1) == param_5) && (*piVar3 == param_4)) {\n      if (param_5 != 9) {\n        return 0;\n      }\n      iVar2 = FUN_0001baa8(param_2,param_3);\n      if (iVar2 == 0) {\n        return 0xc;\n      }\n      return 0;\n    }\n    iVar2 = FUN_0001baa8(param_2,param_3);\n    if (iVar2 == 0) {\n      return 0xc;\n    }\n    iVar2 = param_1[5] + param_3 * 0xc;\n    iVar4 = *(int *)(iVar2 + 4);\n    if (iVar4 == 0) break;\n    piVar3 = *(int **)(iVar2 + 8);\n    if (iVar4 == 2) {\n      iVar2 = (*pcVar1)(param_1,param_2,piVar3[1],param_4,param_5);\n      if (iVar2 != 0) {\n        return iVar2;\n      }\n      param_3 = **(int **)(param_1[5] + param_3 * 0xc + 8);\n    }\n    else {\n      param_3 = *piVar3;\n    }\n  }\n  return 0;\n}" primitive_type (function_declarator "FUN_0001d95c(int *param_1,int param_2,int param_3,int param_4,uint param_5)" identifier (parameter_list "(int *param_1,int param_2,int param_3,int param_4,uint param_5)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "int param_3" primitive_type identifier) , (parameter_declaration "int param_4" primitive_type identifier) , (parameter_declaration "uint param_5" type_identifier identifier) ))) (compound_statement "{\n  code *pcVar1;\n  int iVar2;\n  int *piVar3;\n  int iVar4;\n  \n  pcVar1 = (code *)(PTR_LAB_000401f4 + -0x26a4);\n  while( true ) {\n    iVar2 = FUN_0001d8b0(*(undefined4 *)(param_2 + 4),param_2 + 8,param_3);\n    if (iVar2 != 0) {\n      return 0;\n    }\n    piVar3 = (int *)(*param_1 + param_3 * 8);\n    if ((*(byte *)(piVar3 + 1) == param_5) && (*piVar3 == param_4)) {\n      if (param_5 != 9) {\n        return 0;\n      }\n      iVar2 = FUN_0001baa8(param_2,param_3);\n      if (iVar2 == 0) {\n        return 0xc;\n      }\n      return 0;\n    }\n    iVar2 = FUN_0001baa8(param_2,param_3);\n    if (iVar2 == 0) {\n      return 0xc;\n    }\n    iVar2 = param_1[5] + param_3 * 0xc;\n    iVar4 = *(int *)(iVar2 + 4);\n    if (iVar4 == 0) break;\n    piVar3 = *(int **)(iVar2 + 8);\n    if (iVar4 == 2) {\n      iVar2 = (*pcVar1)(param_1,param_2,piVar3[1],param_4,param_5);\n      if (iVar2 != 0) {\n        return iVar2;\n      }\n      param_3 = **(int **)(param_1[5] + param_3 * 0xc + 8);\n    }\n    else {\n      param_3 = *piVar3;\n    }\n  }\n  return 0;\n}" { (declaration "code *pcVar1;" type_identifier (pointer_declarator "*pcVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int *piVar3;" primitive_type (pointer_declarator "*piVar3" * identifier) ;) (declaration "int iVar4;" primitive_type identifier ;) (expression_statement "pcVar1 = (code *)(PTR_LAB_000401f4 + -0x26a4);" (assignment_expression "pcVar1 = (code *)(PTR_LAB_000401f4 + -0x26a4)" identifier = (cast_expression "(code *)(PTR_LAB_000401f4 + -0x26a4)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_000401f4 + -0x26a4)" ( (binary_expression "PTR_LAB_000401f4 + -0x26a4" identifier + number_literal) )))) ;) (while_statement "while( true ) {\n    iVar2 = FUN_0001d8b0(*(undefined4 *)(param_2 + 4),param_2 + 8,param_3);\n    if (iVar2 != 0) {\n      return 0;\n    }\n    piVar3 = (int *)(*param_1 + param_3 * 8);\n    if ((*(byte *)(piVar3 + 1) == param_5) && (*piVar3 == param_4)) {\n      if (param_5 != 9) {\n        return 0;\n      }\n      iVar2 = FUN_0001baa8(param_2,param_3);\n      if (iVar2 == 0) {\n        return 0xc;\n      }\n      return 0;\n    }\n    iVar2 = FUN_0001baa8(param_2,param_3);\n    if (iVar2 == 0) {\n      return 0xc;\n    }\n    iVar2 = param_1[5] + param_3 * 0xc;\n    iVar4 = *(int *)(iVar2 + 4);\n    if (iVar4 == 0) break;\n    piVar3 = *(int **)(iVar2 + 8);\n    if (iVar4 == 2) {\n      iVar2 = (*pcVar1)(param_1,param_2,piVar3[1],param_4,param_5);\n      if (iVar2 != 0) {\n        return iVar2;\n      }\n      param_3 = **(int **)(param_1[5] + param_3 * 0xc + 8);\n    }\n    else {\n      param_3 = *piVar3;\n    }\n  }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n    iVar2 = FUN_0001d8b0(*(undefined4 *)(param_2 + 4),param_2 + 8,param_3);\n    if (iVar2 != 0) {\n      return 0;\n    }\n    piVar3 = (int *)(*param_1 + param_3 * 8);\n    if ((*(byte *)(piVar3 + 1) == param_5) && (*piVar3 == param_4)) {\n      if (param_5 != 9) {\n        return 0;\n      }\n      iVar2 = FUN_0001baa8(param_2,param_3);\n      if (iVar2 == 0) {\n        return 0xc;\n      }\n      return 0;\n    }\n    iVar2 = FUN_0001baa8(param_2,param_3);\n    if (iVar2 == 0) {\n      return 0xc;\n    }\n    iVar2 = param_1[5] + param_3 * 0xc;\n    iVar4 = *(int *)(iVar2 + 4);\n    if (iVar4 == 0) break;\n    piVar3 = *(int **)(iVar2 + 8);\n    if (iVar4 == 2) {\n      iVar2 = (*pcVar1)(param_1,param_2,piVar3[1],param_4,param_5);\n      if (iVar2 != 0) {\n        return iVar2;\n      }\n      param_3 = **(int **)(param_1[5] + param_3 * 0xc + 8);\n    }\n    else {\n      param_3 = *piVar3;\n    }\n  }" { (expression_statement "iVar2 = FUN_0001d8b0(*(undefined4 *)(param_2 + 4),param_2 + 8,param_3);" (assignment_expression "iVar2 = FUN_0001d8b0(*(undefined4 *)(param_2 + 4),param_2 + 8,param_3)" identifier = (call_expression "FUN_0001d8b0(*(undefined4 *)(param_2 + 4),param_2 + 8,param_3)" identifier (argument_list "(*(undefined4 *)(param_2 + 4),param_2 + 8,param_3)" ( (pointer_expression "*(undefined4 *)(param_2 + 4)" * (cast_expression "(undefined4 *)(param_2 + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) )))) , (binary_expression "param_2 + 8" identifier + number_literal) , identifier )))) ;) (if_statement "if (iVar2 != 0) {\n      return 0;\n    }" if (parenthesized_expression "(iVar2 != 0)" ( (binary_expression "iVar2 != 0" identifier != number_literal) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "piVar3 = (int *)(*param_1 + param_3 * 8);" (assignment_expression "piVar3 = (int *)(*param_1 + param_3 * 8)" identifier = (cast_expression "(int *)(*param_1 + param_3 * 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + param_3 * 8)" ( (binary_expression "*param_1 + param_3 * 8" (pointer_expression "*param_1" * identifier) + (binary_expression "param_3 * 8" identifier * number_literal)) )))) ;) (if_statement "if ((*(byte *)(piVar3 + 1) == param_5) && (*piVar3 == param_4)) {\n      if (param_5 != 9) {\n        return 0;\n      }\n      iVar2 = FUN_0001baa8(param_2,param_3);\n      if (iVar2 == 0) {\n        return 0xc;\n      }\n      return 0;\n    }" if (parenthesized_expression "((*(byte *)(piVar3 + 1) == param_5) && (*piVar3 == param_4))" ( (binary_expression "(*(byte *)(piVar3 + 1) == param_5) && (*piVar3 == param_4)" (parenthesized_expression "(*(byte *)(piVar3 + 1) == param_5)" ( (binary_expression "*(byte *)(piVar3 + 1) == param_5" (pointer_expression "*(byte *)(piVar3 + 1)" * (cast_expression "(byte *)(piVar3 + 1)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(piVar3 + 1)" ( (binary_expression "piVar3 + 1" identifier + number_literal) )))) == identifier) )) && (parenthesized_expression "(*piVar3 == param_4)" ( (binary_expression "*piVar3 == param_4" (pointer_expression "*piVar3" * identifier) == identifier) ))) )) (compound_statement "{\n      if (param_5 != 9) {\n        return 0;\n      }\n      iVar2 = FUN_0001baa8(param_2,param_3);\n      if (iVar2 == 0) {\n        return 0xc;\n      }\n      return 0;\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 "iVar2 = FUN_0001baa8(param_2,param_3);" (assignment_expression "iVar2 = FUN_0001baa8(param_2,param_3)" identifier = (call_expression "FUN_0001baa8(param_2,param_3)" identifier (argument_list "(param_2,param_3)" ( identifier , identifier )))) ;) (if_statement "if (iVar2 == 0) {\n        return 0xc;\n      }" if (parenthesized_expression "(iVar2 == 0)" ( (binary_expression "iVar2 == 0" identifier == number_literal) )) (compound_statement "{\n        return 0xc;\n      }" { (return_statement "return 0xc;" return number_literal ;) })) (return_statement "return 0;" return number_literal ;) })) (expression_statement "iVar2 = FUN_0001baa8(param_2,param_3);" (assignment_expression "iVar2 = FUN_0001baa8(param_2,param_3)" identifier = (call_expression "FUN_0001baa8(param_2,param_3)" identifier (argument_list "(param_2,param_3)" ( identifier , identifier )))) ;) (if_statement "if (iVar2 == 0) {\n      return 0xc;\n    }" if (parenthesized_expression "(iVar2 == 0)" ( (binary_expression "iVar2 == 0" identifier == number_literal) )) (compound_statement "{\n      return 0xc;\n    }" { (return_statement "return 0xc;" return number_literal ;) })) (expression_statement "iVar2 = param_1[5] + param_3 * 0xc;" (assignment_expression "iVar2 = param_1[5] + param_3 * 0xc" identifier = (binary_expression "param_1[5] + param_3 * 0xc" (subscript_expression "param_1[5]" identifier [ number_literal ]) + (binary_expression "param_3 * 0xc" identifier * number_literal))) ;) (expression_statement "iVar4 = *(int *)(iVar2 + 4);" (assignment_expression "iVar4 = *(int *)(iVar2 + 4)" identifier = (pointer_expression "*(int *)(iVar2 + 4)" * (cast_expression "(int *)(iVar2 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 4)" ( (binary_expression "iVar2 + 4" identifier + number_literal) ))))) ;) (if_statement "if (iVar4 == 0) break;" if (parenthesized_expression "(iVar4 == 0)" ( (binary_expression "iVar4 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "piVar3 = *(int **)(iVar2 + 8);" (assignment_expression "piVar3 = *(int **)(iVar2 + 8)" identifier = (pointer_expression "*(int **)(iVar2 + 8)" * (cast_expression "(int **)(iVar2 + 8)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar2 + 8)" ( (binary_expression "iVar2 + 8" identifier + number_literal) ))))) ;) (if_statement "if (iVar4 == 2) {\n      iVar2 = (*pcVar1)(param_1,param_2,piVar3[1],param_4,param_5);\n      if (iVar2 != 0) {\n        return iVar2;\n      }\n      param_3 = **(int **)(param_1[5] + param_3 * 0xc + 8);\n    }\n    else {\n      param_3 = *piVar3;\n    }" if (parenthesized_expression "(iVar4 == 2)" ( (binary_expression "iVar4 == 2" identifier == number_literal) )) (compound_statement "{\n      iVar2 = (*pcVar1)(param_1,param_2,piVar3[1],param_4,param_5);\n      if (iVar2 != 0) {\n        return iVar2;\n      }\n      param_3 = **(int **)(param_1[5] + param_3 * 0xc + 8);\n    }" { (expression_statement "iVar2 = (*pcVar1)(param_1,param_2,piVar3[1],param_4,param_5);" (assignment_expression "iVar2 = (*pcVar1)(param_1,param_2,piVar3[1],param_4,param_5)" identifier = (call_expression "(*pcVar1)(param_1,param_2,piVar3[1],param_4,param_5)" (parenthesized_expression "(*pcVar1)" ( (pointer_expression "*pcVar1" * identifier) )) (argument_list "(param_1,param_2,piVar3[1],param_4,param_5)" ( identifier , identifier , (subscript_expression "piVar3[1]" identifier [ number_literal ]) , identifier , identifier )))) ;) (if_statement "if (iVar2 != 0) {\n        return iVar2;\n      }" if (parenthesized_expression "(iVar2 != 0)" ( (binary_expression "iVar2 != 0" identifier != number_literal) )) (compound_statement "{\n        return iVar2;\n      }" { (return_statement "return iVar2;" return identifier ;) })) (expression_statement "param_3 = **(int **)(param_1[5] + param_3 * 0xc + 8);" (assignment_expression "param_3 = **(int **)(param_1[5] + param_3 * 0xc + 8)" identifier = (pointer_expression "**(int **)(param_1[5] + param_3 * 0xc + 8)" * (pointer_expression "*(int **)(param_1[5] + param_3 * 0xc + 8)" * (cast_expression "(int **)(param_1[5] + param_3 * 0xc + 8)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1[5] + param_3 * 0xc + 8)" ( (binary_expression "param_1[5] + param_3 * 0xc + 8" (binary_expression "param_1[5] + param_3 * 0xc" (subscript_expression "param_1[5]" identifier [ number_literal ]) + (binary_expression "param_3 * 0xc" identifier * number_literal)) + number_literal) )))))) ;) }) (else_clause "else {\n      param_3 = *piVar3;\n    }" else (compound_statement "{\n      param_3 = *piVar3;\n    }" { (expression_statement "param_3 = *piVar3;" (assignment_expression "param_3 = *piVar3" identifier = (pointer_expression "*piVar3" * identifier)) ;) }))) })) (return_statement "return 0;" return number_literal ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) , (binary_expression IDENT + LIT) , 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 TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + (binary_expression IDENT * LIT)) )))) ;) (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 )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return LIT ;) })) (return_statement return LIT ;) })) (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 = (binary_expression (subscript_expression IDENT [ LIT ]) + (binary_expression IDENT * LIT))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( IDENT , IDENT , (subscript_expression IDENT [ LIT ]) , IDENT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (return_statement return IDENT ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (binary_expression (subscript_expression IDENT [ LIT ]) + (binary_expression IDENT * LIT)) + LIT) )))))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) }))) })) (return_statement return LIT ;) })))
(function_definition "int FUN_0001d95c(int *param_1,int param_2,int param_3,int param_4,uint param_5)\n\n{\n  code *pcVar1;\n  int iVar2;\n  int *piVar3;\n  int iVar4;\n  \n  pcVar1 = (code *)(PTR_LAB_000401f4 + -0x26a4);\n  while( true ) {\n    iVar2 = FUN_0001d8b0(*(undefined4 *)(param_2 + 4),param_2 + 8,param_3);\n    if (iVar2 != 0) {\n      return 0;\n    }\n    piVar3 = (int *)(*param_1 + param_3 * 8);\n    if ((*(byte *)(piVar3 + 1) == param_5) && (*piVar3 == param_4)) {\n      if (param_5 != 9) {\n        return 0;\n      }\n      iVar2 = FUN_0001baa8(param_2,param_3);\n      if (iVar2 == 0) {\n        return 0xc;\n      }\n      return 0;\n    }\n    iVar2 = FUN_0001baa8(param_2,param_3);\n    if (iVar2 == 0) {\n      return 0xc;\n    }\n    iVar2 = param_1[5] + param_3 * 0xc;\n    iVar4 = *(int *)(iVar2 + 4);\n    if (iVar4 == 0) break;\n    piVar3 = *(int **)(iVar2 + 8);\n    if (iVar4 == 2) {\n      iVar2 = (*pcVar1)(param_1,param_2,piVar3[1],param_4,param_5);\n      if (iVar2 != 0) {\n        return iVar2;\n      }\n      param_3 = **(int **)(param_1[5] + param_3 * 0xc + 8);\n    }\n    else {\n      param_3 = *piVar3;\n    }\n  }\n  return 0;\n}" (primitive_type "int") (function_declarator "FUN_0001d95c(int *param_1,int param_2,int param_3,int param_4,uint param_5)" (identifier "FUN_0001d95c") (parameter_list "(int *param_1,int param_2,int param_3,int param_4,uint param_5)" (( "(") (parameter_declaration "int *param_1" (primitive_type "int") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "int param_2" (primitive_type "int") (identifier "param_2")) (, ",") (parameter_declaration "int param_3" (primitive_type "int") (identifier "param_3")) (, ",") (parameter_declaration "int param_4" (primitive_type "int") (identifier "param_4")) (, ",") (parameter_declaration "uint param_5" (type_identifier "uint") (identifier "param_5")) () ")"))) (compound_statement "{\n  code *pcVar1;\n  int iVar2;\n  int *piVar3;\n  int iVar4;\n  \n  pcVar1 = (code *)(PTR_LAB_000401f4 + -0x26a4);\n  while( true ) {\n    iVar2 = FUN_0001d8b0(*(undefined4 *)(param_2 + 4),param_2 + 8,param_3);\n    if (iVar2 != 0) {\n      return 0;\n    }\n    piVar3 = (int *)(*param_1 + param_3 * 8);\n    if ((*(byte *)(piVar3 + 1) == param_5) && (*piVar3 == param_4)) {\n      if (param_5 != 9) {\n        return 0;\n      }\n      iVar2 = FUN_0001baa8(param_2,param_3);\n      if (iVar2 == 0) {\n        return 0xc;\n      }\n      return 0;\n    }\n    iVar2 = FUN_0001baa8(param_2,param_3);\n    if (iVar2 == 0) {\n      return 0xc;\n    }\n    iVar2 = param_1[5] + param_3 * 0xc;\n    iVar4 = *(int *)(iVar2 + 4);\n    if (iVar4 == 0) break;\n    piVar3 = *(int **)(iVar2 + 8);\n    if (iVar4 == 2) {\n      iVar2 = (*pcVar1)(param_1,param_2,piVar3[1],param_4,param_5);\n      if (iVar2 != 0) {\n        return iVar2;\n      }\n      param_3 = **(int **)(param_1[5] + param_3 * 0xc + 8);\n    }\n    else {\n      param_3 = *piVar3;\n    }\n  }\n  return 0;\n}" ({ "{") (declaration "code *pcVar1;" (type_identifier "code") (pointer_declarator "*pcVar1" (* "*") (identifier "pcVar1")) (; ";")) (declaration "int iVar2;" (primitive_type "int") (identifier "iVar2") (; ";")) (declaration "int *piVar3;" (primitive_type "int") (pointer_declarator "*piVar3" (* "*") (identifier "piVar3")) (; ";")) (declaration "int iVar4;" (primitive_type "int") (identifier "iVar4") (; ";")) (expression_statement "pcVar1 = (code *)(PTR_LAB_000401f4 + -0x26a4);" (assignment_expression "pcVar1 = (code *)(PTR_LAB_000401f4 + -0x26a4)" (identifier "pcVar1") (= "=") (cast_expression "(code *)(PTR_LAB_000401f4 + -0x26a4)" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_LAB_000401f4 + -0x26a4)" (( "(") (binary_expression "PTR_LAB_000401f4 + -0x26a4" (identifier "PTR_LAB_000401f4") (+ "+") (number_literal "-0x26a4")) () ")")))) (; ";")) (while_statement "while( true ) {\n    iVar2 = FUN_0001d8b0(*(undefined4 *)(param_2 + 4),param_2 + 8,param_3);\n    if (iVar2 != 0) {\n      return 0;\n    }\n    piVar3 = (int *)(*param_1 + param_3 * 8);\n    if ((*(byte *)(piVar3 + 1) == param_5) && (*piVar3 == param_4)) {\n      if (param_5 != 9) {\n        return 0;\n      }\n      iVar2 = FUN_0001baa8(param_2,param_3);\n      if (iVar2 == 0) {\n        return 0xc;\n      }\n      return 0;\n    }\n    iVar2 = FUN_0001baa8(param_2,param_3);\n    if (iVar2 == 0) {\n      return 0xc;\n    }\n    iVar2 = param_1[5] + param_3 * 0xc;\n    iVar4 = *(int *)(iVar2 + 4);\n    if (iVar4 == 0) break;\n    piVar3 = *(int **)(iVar2 + 8);\n    if (iVar4 == 2) {\n      iVar2 = (*pcVar1)(param_1,param_2,piVar3[1],param_4,param_5);\n      if (iVar2 != 0) {\n        return iVar2;\n      }\n      param_3 = **(int **)(param_1[5] + param_3 * 0xc + 8);\n    }\n    else {\n      param_3 = *piVar3;\n    }\n  }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n    iVar2 = FUN_0001d8b0(*(undefined4 *)(param_2 + 4),param_2 + 8,param_3);\n    if (iVar2 != 0) {\n      return 0;\n    }\n    piVar3 = (int *)(*param_1 + param_3 * 8);\n    if ((*(byte *)(piVar3 + 1) == param_5) && (*piVar3 == param_4)) {\n      if (param_5 != 9) {\n        return 0;\n      }\n      iVar2 = FUN_0001baa8(param_2,param_3);\n      if (iVar2 == 0) {\n        return 0xc;\n      }\n      return 0;\n    }\n    iVar2 = FUN_0001baa8(param_2,param_3);\n    if (iVar2 == 0) {\n      return 0xc;\n    }\n    iVar2 = param_1[5] + param_3 * 0xc;\n    iVar4 = *(int *)(iVar2 + 4);\n    if (iVar4 == 0) break;\n    piVar3 = *(int **)(iVar2 + 8);\n    if (iVar4 == 2) {\n      iVar2 = (*pcVar1)(param_1,param_2,piVar3[1],param_4,param_5);\n      if (iVar2 != 0) {\n        return iVar2;\n      }\n      param_3 = **(int **)(param_1[5] + param_3 * 0xc + 8);\n    }\n    else {\n      param_3 = *piVar3;\n    }\n  }" ({ "{") (expression_statement "iVar2 = FUN_0001d8b0(*(undefined4 *)(param_2 + 4),param_2 + 8,param_3);" (assignment_expression "iVar2 = FUN_0001d8b0(*(undefined4 *)(param_2 + 4),param_2 + 8,param_3)" (identifier "iVar2") (= "=") (call_expression "FUN_0001d8b0(*(undefined4 *)(param_2 + 4),param_2 + 8,param_3)" (identifier "FUN_0001d8b0") (argument_list "(*(undefined4 *)(param_2 + 4),param_2 + 8,param_3)" (( "(") (pointer_expression "*(undefined4 *)(param_2 + 4)" (* "*") (cast_expression "(undefined4 *)(param_2 + 4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 4)" (( "(") (binary_expression "param_2 + 4" (identifier "param_2") (+ "+") (number_literal "4")) () ")")))) (, ",") (binary_expression "param_2 + 8" (identifier "param_2") (+ "+") (number_literal "8")) (, ",") (identifier "param_3") () ")")))) (; ";")) (if_statement "if (iVar2 != 0) {\n      return 0;\n    }" (if "if") (parenthesized_expression "(iVar2 != 0)" (( "(") (binary_expression "iVar2 != 0" (identifier "iVar2") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      return 0;\n    }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "piVar3 = (int *)(*param_1 + param_3 * 8);" (assignment_expression "piVar3 = (int *)(*param_1 + param_3 * 8)" (identifier "piVar3") (= "=") (cast_expression "(int *)(*param_1 + param_3 * 8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_1 + param_3 * 8)" (( "(") (binary_expression "*param_1 + param_3 * 8" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (binary_expression "param_3 * 8" (identifier "param_3") (* "*") (number_literal "8"))) () ")")))) (; ";")) (if_statement "if ((*(byte *)(piVar3 + 1) == param_5) && (*piVar3 == param_4)) {\n      if (param_5 != 9) {\n        return 0;\n      }\n      iVar2 = FUN_0001baa8(param_2,param_3);\n      if (iVar2 == 0) {\n        return 0xc;\n      }\n      return 0;\n    }" (if "if") (parenthesized_expression "((*(byte *)(piVar3 + 1) == param_5) && (*piVar3 == param_4))" (( "(") (binary_expression "(*(byte *)(piVar3 + 1) == param_5) && (*piVar3 == param_4)" (parenthesized_expression "(*(byte *)(piVar3 + 1) == param_5)" (( "(") (binary_expression "*(byte *)(piVar3 + 1) == param_5" (pointer_expression "*(byte *)(piVar3 + 1)" (* "*") (cast_expression "(byte *)(piVar3 + 1)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(piVar3 + 1)" (( "(") (binary_expression "piVar3 + 1" (identifier "piVar3") (+ "+") (number_literal "1")) () ")")))) (== "==") (identifier "param_5")) () ")")) (&& "&&") (parenthesized_expression "(*piVar3 == param_4)" (( "(") (binary_expression "*piVar3 == param_4" (pointer_expression "*piVar3" (* "*") (identifier "piVar3")) (== "==") (identifier "param_4")) () ")"))) () ")")) (compound_statement "{\n      if (param_5 != 9) {\n        return 0;\n      }\n      iVar2 = FUN_0001baa8(param_2,param_3);\n      if (iVar2 == 0) {\n        return 0xc;\n      }\n      return 0;\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 "iVar2 = FUN_0001baa8(param_2,param_3);" (assignment_expression "iVar2 = FUN_0001baa8(param_2,param_3)" (identifier "iVar2") (= "=") (call_expression "FUN_0001baa8(param_2,param_3)" (identifier "FUN_0001baa8") (argument_list "(param_2,param_3)" (( "(") (identifier "param_2") (, ",") (identifier "param_3") () ")")))) (; ";")) (if_statement "if (iVar2 == 0) {\n        return 0xc;\n      }" (if "if") (parenthesized_expression "(iVar2 == 0)" (( "(") (binary_expression "iVar2 == 0" (identifier "iVar2") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        return 0xc;\n      }" ({ "{") (return_statement "return 0xc;" (return "return") (number_literal "0xc") (; ";")) (} "}"))) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "iVar2 = FUN_0001baa8(param_2,param_3);" (assignment_expression "iVar2 = FUN_0001baa8(param_2,param_3)" (identifier "iVar2") (= "=") (call_expression "FUN_0001baa8(param_2,param_3)" (identifier "FUN_0001baa8") (argument_list "(param_2,param_3)" (( "(") (identifier "param_2") (, ",") (identifier "param_3") () ")")))) (; ";")) (if_statement "if (iVar2 == 0) {\n      return 0xc;\n    }" (if "if") (parenthesized_expression "(iVar2 == 0)" (( "(") (binary_expression "iVar2 == 0" (identifier "iVar2") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      return 0xc;\n    }" ({ "{") (return_statement "return 0xc;" (return "return") (number_literal "0xc") (; ";")) (} "}"))) (expression_statement "iVar2 = param_1[5] + param_3 * 0xc;" (assignment_expression "iVar2 = param_1[5] + param_3 * 0xc" (identifier "iVar2") (= "=") (binary_expression "param_1[5] + param_3 * 0xc" (subscript_expression "param_1[5]" (identifier "param_1") ([ "[") (number_literal "5") (] "]")) (+ "+") (binary_expression "param_3 * 0xc" (identifier "param_3") (* "*") (number_literal "0xc")))) (; ";")) (expression_statement "iVar4 = *(int *)(iVar2 + 4);" (assignment_expression "iVar4 = *(int *)(iVar2 + 4)" (identifier "iVar4") (= "=") (pointer_expression "*(int *)(iVar2 + 4)" (* "*") (cast_expression "(int *)(iVar2 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar2 + 4)" (( "(") (binary_expression "iVar2 + 4" (identifier "iVar2") (+ "+") (number_literal "4")) () ")"))))) (; ";")) (if_statement "if (iVar4 == 0) break;" (if "if") (parenthesized_expression "(iVar4 == 0)" (( "(") (binary_expression "iVar4 == 0" (identifier "iVar4") (== "==") (number_literal "0")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "piVar3 = *(int **)(iVar2 + 8);" (assignment_expression "piVar3 = *(int **)(iVar2 + 8)" (identifier "piVar3") (= "=") (pointer_expression "*(int **)(iVar2 + 8)" (* "*") (cast_expression "(int **)(iVar2 + 8)" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(iVar2 + 8)" (( "(") (binary_expression "iVar2 + 8" (identifier "iVar2") (+ "+") (number_literal "8")) () ")"))))) (; ";")) (if_statement "if (iVar4 == 2) {\n      iVar2 = (*pcVar1)(param_1,param_2,piVar3[1],param_4,param_5);\n      if (iVar2 != 0) {\n        return iVar2;\n      }\n      param_3 = **(int **)(param_1[5] + param_3 * 0xc + 8);\n    }\n    else {\n      param_3 = *piVar3;\n    }" (if "if") (parenthesized_expression "(iVar4 == 2)" (( "(") (binary_expression "iVar4 == 2" (identifier "iVar4") (== "==") (number_literal "2")) () ")")) (compound_statement "{\n      iVar2 = (*pcVar1)(param_1,param_2,piVar3[1],param_4,param_5);\n      if (iVar2 != 0) {\n        return iVar2;\n      }\n      param_3 = **(int **)(param_1[5] + param_3 * 0xc + 8);\n    }" ({ "{") (expression_statement "iVar2 = (*pcVar1)(param_1,param_2,piVar3[1],param_4,param_5);" (assignment_expression "iVar2 = (*pcVar1)(param_1,param_2,piVar3[1],param_4,param_5)" (identifier "iVar2") (= "=") (call_expression "(*pcVar1)(param_1,param_2,piVar3[1],param_4,param_5)" (parenthesized_expression "(*pcVar1)" (( "(") (pointer_expression "*pcVar1" (* "*") (identifier "pcVar1")) () ")")) (argument_list "(param_1,param_2,piVar3[1],param_4,param_5)" (( "(") (identifier "param_1") (, ",") (identifier "param_2") (, ",") (subscript_expression "piVar3[1]" (identifier "piVar3") ([ "[") (number_literal "1") (] "]")) (, ",") (identifier "param_4") (, ",") (identifier "param_5") () ")")))) (; ";")) (if_statement "if (iVar2 != 0) {\n        return iVar2;\n      }" (if "if") (parenthesized_expression "(iVar2 != 0)" (( "(") (binary_expression "iVar2 != 0" (identifier "iVar2") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        return iVar2;\n      }" ({ "{") (return_statement "return iVar2;" (return "return") (identifier "iVar2") (; ";")) (} "}"))) (expression_statement "param_3 = **(int **)(param_1[5] + param_3 * 0xc + 8);" (assignment_expression "param_3 = **(int **)(param_1[5] + param_3 * 0xc + 8)" (identifier "param_3") (= "=") (pointer_expression "**(int **)(param_1[5] + param_3 * 0xc + 8)" (* "*") (pointer_expression "*(int **)(param_1[5] + param_3 * 0xc + 8)" (* "*") (cast_expression "(int **)(param_1[5] + param_3 * 0xc + 8)" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1[5] + param_3 * 0xc + 8)" (( "(") (binary_expression "param_1[5] + param_3 * 0xc + 8" (binary_expression "param_1[5] + param_3 * 0xc" (subscript_expression "param_1[5]" (identifier "param_1") ([ "[") (number_literal "5") (] "]")) (+ "+") (binary_expression "param_3 * 0xc" (identifier "param_3") (* "*") (number_literal "0xc"))) (+ "+") (number_literal "8")) () ")")))))) (; ";")) (} "}")) (else_clause "else {\n      param_3 = *piVar3;\n    }" (else "else") (compound_statement "{\n      param_3 = *piVar3;\n    }" ({ "{") (expression_statement "param_3 = *piVar3;" (assignment_expression "param_3 = *piVar3" (identifier "param_3") (= "=") (pointer_expression "*piVar3" (* "*") (identifier "piVar3"))) (; ";")) (} "}")))) (} "}"))) (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,int var_4)

{
  type_5 extraout_var;
  type_5 extraout_var_00;
  type_6 *pcVar1;
  type_4 var_3;
  type_7 _Var5;
  type_4 *pIVar3;
  type_1 var_8;
  int var_7;
  
  pcVar1 = (type_6 *)(var_1 + -0x26a4);
  while( true ) {
    var_3 = var_2
                      ((type_3 *)dst_nodes->nelem,(type_4)&dst_nodes->elems,(type_3 *)target)
    ;
    if (var_3 != 0) {
      return var_9;
    }
    if (((type_8)(type_9)dfa->nodes[target].field_0x4 == var_4) &&
       (dfa->nodes[target].opr.sbcset == (type_10)ex_subexp)) {
      if (var_4 != 9) {
        return var_9;
      }
      _Var5 = var_5(dst_nodes,target);
      if (var_6(extraout_var_00,_Var5) == 0) {
        return _REG_ESPACE;
      }
      return var_9;
    }
    _Var5 = var_5(dst_nodes,target);
    if (var_6(extraout_var,_Var5) == 0) {
      return _REG_ESPACE;
    }
    var_7 = dfa->edests[target].nelem;
    if (var_7 == 0) break;
    pIVar3 = dfa->edests[target].elems;
    if (var_7 == 2) {
      var_8 = (*pcVar1)(dfa,dst_nodes,pIVar3[1],ex_subexp,var_4);
      if (var_8 != var_9) {
        return var_8;
      }
      target = *dfa->edests[target].elems;
    }
    else {
      target = *pIVar3;
    }
  }
  return var_9;
}


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

int MASKED(int *param_1,int param_2,int param_3,int param_4,uint param_5)

{
  code *pcVar1;
  int iVar2;
  int *piVar3;
  int iVar4;
  
  pcVar1 = (code *)(PTR_LAB_000401f4 + -0x26a4);
  while( true ) {
    iVar2 = FUN_0001d8b0(*(undefined4 *)(param_2 + 4),param_2 + 8,param_3);
    if (iVar2 != 0) {
      return 0;
    }
    piVar3 = (int *)(*param_1 + param_3 * 8);
    if ((*(byte *)(piVar3 + 1) == param_5) && (*piVar3 == param_4)) {
      if (param_5 != 9) {
        return 0;
      }
      iVar2 = FUN_0001baa8(param_2,param_3);
      if (iVar2 == 0) {
        return 0xc;
      }
      return 0;
    }
    iVar2 = FUN_0001baa8(param_2,param_3);
    if (iVar2 == 0) {
      return 0xc;
    }
    iVar2 = param_1[5] + param_3 * 0xc;
    iVar4 = *(int *)(iVar2 + 4);
    if (iVar4 == 0) break;
    piVar3 = *(int **)(iVar2 + 8);
    if (iVar4 == 2) {
      iVar2 = (*pcVar1)(param_1,param_2,piVar3[1],param_4,param_5);
      if (iVar2 != 0) {
        return iVar2;
      }
      param_3 = **(int **)(param_1[5] + param_3 * 0xc + 8);
    }
    else {
      param_3 = *piVar3;
    }
  }
  return 0;
}

