
/* WARNING: Unknown calling convention */

bin_tree_t *
parse_branch(re_string_t *regexp,regex_t *preg,re_token_t *token,reg_syntax_t syntax,Idx nest,
            reg_errcode_t *err)

{
  bin_tree_t *pbVar1;
  bin_tree_t *pbVar2;
  re_dfa_t *dfa;
  bin_tree_t *pbVar3;
  bin_tree_t *right;
  bin_tree_t *root;
  
  dfa = preg->buffer;
  pbVar3 = parse_expression(regexp,preg,token,syntax,nest,err);
  if ((*err == _REG_NOERROR) || (pbVar3 != (bin_tree_t *)0x0)) {
LAB_00498e20:
    do {
      root = pbVar3;
      if ((token->field_0x4 & 0xf7) == 2) {
        return root;
      }
      if ((nest != 0) && (token->field_0x4 == 9)) {
        return root;
      }
      right = parse_expression(regexp,preg,token,syntax,nest,err);
      if (*err == _REG_NOERROR) {
        pbVar3 = right;
        pbVar1 = root;
        pbVar2 = right;
        if (root == (bin_tree_t *)0x0) goto LAB_00498e20;
      }
      else {
        pbVar1 = right;
        pbVar2 = root;
        if (right == (bin_tree_t *)0x0) {
          if (root == (bin_tree_t *)0x0) {
            return (bin_tree_t *)0x0;
          }
          postorder(root,free_tree,(void *)0x0);
          return (bin_tree_t *)0x0;
        }
      }
      pbVar3 = pbVar1;
    } while ((pbVar2 == (bin_tree_t *)0x0) ||
            (pbVar3 = create_tree(dfa,root,right,CONCAT), pbVar3 != (bin_tree_t *)0x0));
    postorder(right,free_tree,(void *)0x0);
    postorder(root,free_tree,(void *)0x0);
    *err = _REG_ESPACE;
    pbVar3 = (bin_tree_t *)0x0;
  }
  return pbVar3;
}



int FUN_00498d68(undefined4 param_1,undefined4 *param_2,int param_3,undefined4 param_4,int param_5,
                int *param_6)

{
  int iVar1;
  int iVar2;
  undefined4 uVar3;
  int iVar4;
  int iVar5;
  int iVar6;
  
  uVar3 = *param_2;
  iVar4 = FUN_00497680();
  if ((*param_6 == 0) || (iVar4 != 0)) {
LAB_00498e20:
    do {
      iVar6 = iVar4;
      if ((*(byte *)(param_3 + 4) & 0xf7) == 2) {
        return iVar6;
      }
      if ((param_5 != 0) && (*(byte *)(param_3 + 4) == 9)) {
        return iVar6;
      }
      iVar5 = FUN_00497680(param_1,param_2,param_3,param_4,param_5,param_6);
      if (*param_6 == 0) {
        iVar4 = iVar5;
        iVar1 = iVar6;
        iVar2 = iVar5;
        if (iVar6 == 0) goto LAB_00498e20;
      }
      else {
        iVar1 = iVar5;
        iVar2 = iVar6;
        if (iVar5 == 0) {
          if (iVar6 == 0) {
            return 0;
          }
          FUN_0048ab0c(iVar6,&DAT_0048d874,0);
          return 0;
        }
      }
      iVar4 = iVar1;
    } while ((iVar2 == 0) || (iVar4 = FUN_0048aff8(uVar3,iVar6,iVar5,0x10), iVar4 != 0));
    FUN_0048ab0c(iVar5,&DAT_0048d874,0);
    FUN_0048ab0c(iVar6,&DAT_0048d874,0);
    *param_6 = 0xc;
    iVar4 = 0;
  }
  return iVar4;
}


addiu sp,sp,-0x50
sw ra,0x4c(sp)
sw s8,0x48(sp)
sw s7,0x44(sp)
sw s6,0x40(sp)
sw s5,0x3c(sp)
sw s4,0x38(sp)
sw s3,0x34(sp)
sw s2,0x30(sp)
sw s1,0x2c(sp)
sw s0,0x28(sp)
sw a0,0x50(sp)
sw a1,0x54(sp)
or s4,a2,zero
sw a3,0x5c(sp)
lw s3,0x60(sp)
lw s1,0x64(sp)
lw v0,0x0(a1)
sw v0,0x24(sp)
sw s1,0x14(sp)
sw s3,0x10(sp)
jal 0x00497680
_nop
or s2,v0,zero
lw v0,0x0(s1)
bne v0,zero,0x00498de0
_li s6,-0x9
li s5,0x2
b 0x00498e20
_li s8,0x9
bne s2,zero,0x00498dd4
_nop
b 0x00498ee8
_or v0,s2,zero
beq s0,zero,0x00498e88
_nop
beq s2,zero,0x00498f20
_li a3,0x10
or a2,s0,zero
or a1,s2,zero
lw a0,0x24(sp)
jal 0x0048aff8
_nop
beq v0,zero,0x00498eac
_or s7,v0,zero
or s2,v0,zero
lbu v0,0x4(s4)
and v1,v0,s6
beq v1,s5,0x00498ee4
_nop
beq s3,zero,0x00498e40
_nop
beq v0,s8,0x00498ee8
_or v0,s2,zero
sw s1,0x14(sp)
sw s3,0x10(sp)
lw a3,0x5c(sp)
or a2,s4,zero
lw a1,0x54(sp)
lw a0,0x50(sp)
jal 0x00497680
_nop
or s0,v0,zero
lw v0,0x0(s1)
bne v0,zero,0x00498df0
_nop
beq s2,zero,0x00498f18
_nop
beq s0,zero,0x00498e20
_li a3,0x10
b 0x00498e04
_or a2,s0,zero
beq s2,zero,0x00498ee4
_or a2,zero,zero
lui a1,0x49
addiu a1,a1,-0x278c
or a0,s2,zero
jal 0x0048ab0c
_nop
b 0x00498ee4
_or s2,s0,zero
or a2,zero,zero
lui s3,0x49
addiu a1,s3,-0x278c
or a0,s0,zero
jal 0x0048ab0c
_nop
or a2,zero,zero
addiu a1,s3,-0x278c
or a0,s2,zero
jal 0x0048ab0c
_nop
li v0,0xc
sw v0,0x0(s1)
or s2,s7,zero
or v0,s2,zero
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
b 0x00498e20
_or s2,s0,zero
b 0x00498e20
_or s2,s0,zero
(translation_unit "int FUN_00498d68(undefined4 param_1,undefined4 *param_2,int param_3,undefined4 param_4,int param_5,\n                int *param_6)\n\n{\n  int iVar1;\n  int iVar2;\n  undefined4 uVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  \n  uVar3 = *param_2;\n  iVar4 = FUN_00497680();\n  if ((*param_6 == 0) || (iVar4 != 0)) {\nLAB_00498e20:\n    do {\n      iVar6 = iVar4;\n      if ((*(byte *)(param_3 + 4) & 0xf7) == 2) {\n        return iVar6;\n      }\n      if ((param_5 != 0) && (*(byte *)(param_3 + 4) == 9)) {\n        return iVar6;\n      }\n      iVar5 = FUN_00497680(param_1,param_2,param_3,param_4,param_5,param_6);\n      if (*param_6 == 0) {\n        iVar4 = iVar5;\n        iVar1 = iVar6;\n        iVar2 = iVar5;\n        if (iVar6 == 0) goto LAB_00498e20;\n      }\n      else {\n        iVar1 = iVar5;\n        iVar2 = iVar6;\n        if (iVar5 == 0) {\n          if (iVar6 == 0) {\n            return 0;\n          }\n          FUN_0048ab0c(iVar6,&DAT_0048d874,0);\n          return 0;\n        }\n      }\n      iVar4 = iVar1;\n    } while ((iVar2 == 0) || (iVar4 = FUN_0048aff8(uVar3,iVar6,iVar5,0x10), iVar4 != 0));\n    FUN_0048ab0c(iVar5,&DAT_0048d874,0);\n    FUN_0048ab0c(iVar6,&DAT_0048d874,0);\n    *param_6 = 0xc;\n    iVar4 = 0;\n  }\n  return iVar4;\n}\n\n" (function_definition "int FUN_00498d68(undefined4 param_1,undefined4 *param_2,int param_3,undefined4 param_4,int param_5,\n                int *param_6)\n\n{\n  int iVar1;\n  int iVar2;\n  undefined4 uVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  \n  uVar3 = *param_2;\n  iVar4 = FUN_00497680();\n  if ((*param_6 == 0) || (iVar4 != 0)) {\nLAB_00498e20:\n    do {\n      iVar6 = iVar4;\n      if ((*(byte *)(param_3 + 4) & 0xf7) == 2) {\n        return iVar6;\n      }\n      if ((param_5 != 0) && (*(byte *)(param_3 + 4) == 9)) {\n        return iVar6;\n      }\n      iVar5 = FUN_00497680(param_1,param_2,param_3,param_4,param_5,param_6);\n      if (*param_6 == 0) {\n        iVar4 = iVar5;\n        iVar1 = iVar6;\n        iVar2 = iVar5;\n        if (iVar6 == 0) goto LAB_00498e20;\n      }\n      else {\n        iVar1 = iVar5;\n        iVar2 = iVar6;\n        if (iVar5 == 0) {\n          if (iVar6 == 0) {\n            return 0;\n          }\n          FUN_0048ab0c(iVar6,&DAT_0048d874,0);\n          return 0;\n        }\n      }\n      iVar4 = iVar1;\n    } while ((iVar2 == 0) || (iVar4 = FUN_0048aff8(uVar3,iVar6,iVar5,0x10), iVar4 != 0));\n    FUN_0048ab0c(iVar5,&DAT_0048d874,0);\n    FUN_0048ab0c(iVar6,&DAT_0048d874,0);\n    *param_6 = 0xc;\n    iVar4 = 0;\n  }\n  return iVar4;\n}" primitive_type (function_declarator "FUN_00498d68(undefined4 param_1,undefined4 *param_2,int param_3,undefined4 param_4,int param_5,\n                int *param_6)" identifier (parameter_list "(undefined4 param_1,undefined4 *param_2,int param_3,undefined4 param_4,int param_5,\n                int *param_6)" ( (parameter_declaration "undefined4 param_1" type_identifier identifier) , (parameter_declaration "undefined4 *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "int param_3" primitive_type identifier) , (parameter_declaration "undefined4 param_4" type_identifier identifier) , (parameter_declaration "int param_5" primitive_type identifier) , (parameter_declaration "int *param_6" primitive_type (pointer_declarator "*param_6" * identifier)) ))) (compound_statement "{\n  int iVar1;\n  int iVar2;\n  undefined4 uVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  \n  uVar3 = *param_2;\n  iVar4 = FUN_00497680();\n  if ((*param_6 == 0) || (iVar4 != 0)) {\nLAB_00498e20:\n    do {\n      iVar6 = iVar4;\n      if ((*(byte *)(param_3 + 4) & 0xf7) == 2) {\n        return iVar6;\n      }\n      if ((param_5 != 0) && (*(byte *)(param_3 + 4) == 9)) {\n        return iVar6;\n      }\n      iVar5 = FUN_00497680(param_1,param_2,param_3,param_4,param_5,param_6);\n      if (*param_6 == 0) {\n        iVar4 = iVar5;\n        iVar1 = iVar6;\n        iVar2 = iVar5;\n        if (iVar6 == 0) goto LAB_00498e20;\n      }\n      else {\n        iVar1 = iVar5;\n        iVar2 = iVar6;\n        if (iVar5 == 0) {\n          if (iVar6 == 0) {\n            return 0;\n          }\n          FUN_0048ab0c(iVar6,&DAT_0048d874,0);\n          return 0;\n        }\n      }\n      iVar4 = iVar1;\n    } while ((iVar2 == 0) || (iVar4 = FUN_0048aff8(uVar3,iVar6,iVar5,0x10), iVar4 != 0));\n    FUN_0048ab0c(iVar5,&DAT_0048d874,0);\n    FUN_0048ab0c(iVar6,&DAT_0048d874,0);\n    *param_6 = 0xc;\n    iVar4 = 0;\n  }\n  return iVar4;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "undefined4 uVar3;" type_identifier identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (expression_statement "uVar3 = *param_2;" (assignment_expression "uVar3 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "iVar4 = FUN_00497680();" (assignment_expression "iVar4 = FUN_00497680()" identifier = (call_expression "FUN_00497680()" identifier (argument_list "()" ( )))) ;) (if_statement "if ((*param_6 == 0) || (iVar4 != 0)) {\nLAB_00498e20:\n    do {\n      iVar6 = iVar4;\n      if ((*(byte *)(param_3 + 4) & 0xf7) == 2) {\n        return iVar6;\n      }\n      if ((param_5 != 0) && (*(byte *)(param_3 + 4) == 9)) {\n        return iVar6;\n      }\n      iVar5 = FUN_00497680(param_1,param_2,param_3,param_4,param_5,param_6);\n      if (*param_6 == 0) {\n        iVar4 = iVar5;\n        iVar1 = iVar6;\n        iVar2 = iVar5;\n        if (iVar6 == 0) goto LAB_00498e20;\n      }\n      else {\n        iVar1 = iVar5;\n        iVar2 = iVar6;\n        if (iVar5 == 0) {\n          if (iVar6 == 0) {\n            return 0;\n          }\n          FUN_0048ab0c(iVar6,&DAT_0048d874,0);\n          return 0;\n        }\n      }\n      iVar4 = iVar1;\n    } while ((iVar2 == 0) || (iVar4 = FUN_0048aff8(uVar3,iVar6,iVar5,0x10), iVar4 != 0));\n    FUN_0048ab0c(iVar5,&DAT_0048d874,0);\n    FUN_0048ab0c(iVar6,&DAT_0048d874,0);\n    *param_6 = 0xc;\n    iVar4 = 0;\n  }" if (parenthesized_expression "((*param_6 == 0) || (iVar4 != 0))" ( (binary_expression "(*param_6 == 0) || (iVar4 != 0)" (parenthesized_expression "(*param_6 == 0)" ( (binary_expression "*param_6 == 0" (pointer_expression "*param_6" * identifier) == number_literal) )) || (parenthesized_expression "(iVar4 != 0)" ( (binary_expression "iVar4 != 0" identifier != number_literal) ))) )) (compound_statement "{\nLAB_00498e20:\n    do {\n      iVar6 = iVar4;\n      if ((*(byte *)(param_3 + 4) & 0xf7) == 2) {\n        return iVar6;\n      }\n      if ((param_5 != 0) && (*(byte *)(param_3 + 4) == 9)) {\n        return iVar6;\n      }\n      iVar5 = FUN_00497680(param_1,param_2,param_3,param_4,param_5,param_6);\n      if (*param_6 == 0) {\n        iVar4 = iVar5;\n        iVar1 = iVar6;\n        iVar2 = iVar5;\n        if (iVar6 == 0) goto LAB_00498e20;\n      }\n      else {\n        iVar1 = iVar5;\n        iVar2 = iVar6;\n        if (iVar5 == 0) {\n          if (iVar6 == 0) {\n            return 0;\n          }\n          FUN_0048ab0c(iVar6,&DAT_0048d874,0);\n          return 0;\n        }\n      }\n      iVar4 = iVar1;\n    } while ((iVar2 == 0) || (iVar4 = FUN_0048aff8(uVar3,iVar6,iVar5,0x10), iVar4 != 0));\n    FUN_0048ab0c(iVar5,&DAT_0048d874,0);\n    FUN_0048ab0c(iVar6,&DAT_0048d874,0);\n    *param_6 = 0xc;\n    iVar4 = 0;\n  }" { (labeled_statement "LAB_00498e20:\n    do {\n      iVar6 = iVar4;\n      if ((*(byte *)(param_3 + 4) & 0xf7) == 2) {\n        return iVar6;\n      }\n      if ((param_5 != 0) && (*(byte *)(param_3 + 4) == 9)) {\n        return iVar6;\n      }\n      iVar5 = FUN_00497680(param_1,param_2,param_3,param_4,param_5,param_6);\n      if (*param_6 == 0) {\n        iVar4 = iVar5;\n        iVar1 = iVar6;\n        iVar2 = iVar5;\n        if (iVar6 == 0) goto LAB_00498e20;\n      }\n      else {\n        iVar1 = iVar5;\n        iVar2 = iVar6;\n        if (iVar5 == 0) {\n          if (iVar6 == 0) {\n            return 0;\n          }\n          FUN_0048ab0c(iVar6,&DAT_0048d874,0);\n          return 0;\n        }\n      }\n      iVar4 = iVar1;\n    } while ((iVar2 == 0) || (iVar4 = FUN_0048aff8(uVar3,iVar6,iVar5,0x10), iVar4 != 0));" statement_identifier : (do_statement "do {\n      iVar6 = iVar4;\n      if ((*(byte *)(param_3 + 4) & 0xf7) == 2) {\n        return iVar6;\n      }\n      if ((param_5 != 0) && (*(byte *)(param_3 + 4) == 9)) {\n        return iVar6;\n      }\n      iVar5 = FUN_00497680(param_1,param_2,param_3,param_4,param_5,param_6);\n      if (*param_6 == 0) {\n        iVar4 = iVar5;\n        iVar1 = iVar6;\n        iVar2 = iVar5;\n        if (iVar6 == 0) goto LAB_00498e20;\n      }\n      else {\n        iVar1 = iVar5;\n        iVar2 = iVar6;\n        if (iVar5 == 0) {\n          if (iVar6 == 0) {\n            return 0;\n          }\n          FUN_0048ab0c(iVar6,&DAT_0048d874,0);\n          return 0;\n        }\n      }\n      iVar4 = iVar1;\n    } while ((iVar2 == 0) || (iVar4 = FUN_0048aff8(uVar3,iVar6,iVar5,0x10), iVar4 != 0));" do (compound_statement "{\n      iVar6 = iVar4;\n      if ((*(byte *)(param_3 + 4) & 0xf7) == 2) {\n        return iVar6;\n      }\n      if ((param_5 != 0) && (*(byte *)(param_3 + 4) == 9)) {\n        return iVar6;\n      }\n      iVar5 = FUN_00497680(param_1,param_2,param_3,param_4,param_5,param_6);\n      if (*param_6 == 0) {\n        iVar4 = iVar5;\n        iVar1 = iVar6;\n        iVar2 = iVar5;\n        if (iVar6 == 0) goto LAB_00498e20;\n      }\n      else {\n        iVar1 = iVar5;\n        iVar2 = iVar6;\n        if (iVar5 == 0) {\n          if (iVar6 == 0) {\n            return 0;\n          }\n          FUN_0048ab0c(iVar6,&DAT_0048d874,0);\n          return 0;\n        }\n      }\n      iVar4 = iVar1;\n    }" { (expression_statement "iVar6 = iVar4;" (assignment_expression "iVar6 = iVar4" identifier = identifier) ;) (if_statement "if ((*(byte *)(param_3 + 4) & 0xf7) == 2) {\n        return iVar6;\n      }" if (parenthesized_expression "((*(byte *)(param_3 + 4) & 0xf7) == 2)" ( (binary_expression "(*(byte *)(param_3 + 4) & 0xf7) == 2" (parenthesized_expression "(*(byte *)(param_3 + 4) & 0xf7)" ( (binary_expression "*(byte *)(param_3 + 4) & 0xf7" (pointer_expression "*(byte *)(param_3 + 4)" * (cast_expression "(byte *)(param_3 + 4)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 4)" ( (binary_expression "param_3 + 4" identifier + number_literal) )))) & number_literal) )) == number_literal) )) (compound_statement "{\n        return iVar6;\n      }" { (return_statement "return iVar6;" return identifier ;) })) (if_statement "if ((param_5 != 0) && (*(byte *)(param_3 + 4) == 9)) {\n        return iVar6;\n      }" if (parenthesized_expression "((param_5 != 0) && (*(byte *)(param_3 + 4) == 9))" ( (binary_expression "(param_5 != 0) && (*(byte *)(param_3 + 4) == 9)" (parenthesized_expression "(param_5 != 0)" ( (binary_expression "param_5 != 0" identifier != number_literal) )) && (parenthesized_expression "(*(byte *)(param_3 + 4) == 9)" ( (binary_expression "*(byte *)(param_3 + 4) == 9" (pointer_expression "*(byte *)(param_3 + 4)" * (cast_expression "(byte *)(param_3 + 4)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 4)" ( (binary_expression "param_3 + 4" identifier + number_literal) )))) == number_literal) ))) )) (compound_statement "{\n        return iVar6;\n      }" { (return_statement "return iVar6;" return identifier ;) })) (expression_statement "iVar5 = FUN_00497680(param_1,param_2,param_3,param_4,param_5,param_6);" (assignment_expression "iVar5 = FUN_00497680(param_1,param_2,param_3,param_4,param_5,param_6)" identifier = (call_expression "FUN_00497680(param_1,param_2,param_3,param_4,param_5,param_6)" identifier (argument_list "(param_1,param_2,param_3,param_4,param_5,param_6)" ( identifier , identifier , identifier , identifier , identifier , identifier )))) ;) (if_statement "if (*param_6 == 0) {\n        iVar4 = iVar5;\n        iVar1 = iVar6;\n        iVar2 = iVar5;\n        if (iVar6 == 0) goto LAB_00498e20;\n      }\n      else {\n        iVar1 = iVar5;\n        iVar2 = iVar6;\n        if (iVar5 == 0) {\n          if (iVar6 == 0) {\n            return 0;\n          }\n          FUN_0048ab0c(iVar6,&DAT_0048d874,0);\n          return 0;\n        }\n      }" if (parenthesized_expression "(*param_6 == 0)" ( (binary_expression "*param_6 == 0" (pointer_expression "*param_6" * identifier) == number_literal) )) (compound_statement "{\n        iVar4 = iVar5;\n        iVar1 = iVar6;\n        iVar2 = iVar5;\n        if (iVar6 == 0) goto LAB_00498e20;\n      }" { (expression_statement "iVar4 = iVar5;" (assignment_expression "iVar4 = iVar5" identifier = identifier) ;) (expression_statement "iVar1 = iVar6;" (assignment_expression "iVar1 = iVar6" identifier = identifier) ;) (expression_statement "iVar2 = iVar5;" (assignment_expression "iVar2 = iVar5" identifier = identifier) ;) (if_statement "if (iVar6 == 0) goto LAB_00498e20;" if (parenthesized_expression "(iVar6 == 0)" ( (binary_expression "iVar6 == 0" identifier == number_literal) )) (goto_statement "goto LAB_00498e20;" goto statement_identifier ;)) }) (else_clause "else {\n        iVar1 = iVar5;\n        iVar2 = iVar6;\n        if (iVar5 == 0) {\n          if (iVar6 == 0) {\n            return 0;\n          }\n          FUN_0048ab0c(iVar6,&DAT_0048d874,0);\n          return 0;\n        }\n      }" else (compound_statement "{\n        iVar1 = iVar5;\n        iVar2 = iVar6;\n        if (iVar5 == 0) {\n          if (iVar6 == 0) {\n            return 0;\n          }\n          FUN_0048ab0c(iVar6,&DAT_0048d874,0);\n          return 0;\n        }\n      }" { (expression_statement "iVar1 = iVar5;" (assignment_expression "iVar1 = iVar5" identifier = identifier) ;) (expression_statement "iVar2 = iVar6;" (assignment_expression "iVar2 = iVar6" identifier = identifier) ;) (if_statement "if (iVar5 == 0) {\n          if (iVar6 == 0) {\n            return 0;\n          }\n          FUN_0048ab0c(iVar6,&DAT_0048d874,0);\n          return 0;\n        }" if (parenthesized_expression "(iVar5 == 0)" ( (binary_expression "iVar5 == 0" identifier == number_literal) )) (compound_statement "{\n          if (iVar6 == 0) {\n            return 0;\n          }\n          FUN_0048ab0c(iVar6,&DAT_0048d874,0);\n          return 0;\n        }" { (if_statement "if (iVar6 == 0) {\n            return 0;\n          }" if (parenthesized_expression "(iVar6 == 0)" ( (binary_expression "iVar6 == 0" identifier == number_literal) )) (compound_statement "{\n            return 0;\n          }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "FUN_0048ab0c(iVar6,&DAT_0048d874,0);" (call_expression "FUN_0048ab0c(iVar6,&DAT_0048d874,0)" identifier (argument_list "(iVar6,&DAT_0048d874,0)" ( identifier , (pointer_expression "&DAT_0048d874" & identifier) , number_literal ))) ;) (return_statement "return 0;" return number_literal ;) })) }))) (expression_statement "iVar4 = iVar1;" (assignment_expression "iVar4 = iVar1" identifier = identifier) ;) }) while (parenthesized_expression "((iVar2 == 0) || (iVar4 = FUN_0048aff8(uVar3,iVar6,iVar5,0x10), iVar4 != 0))" ( (binary_expression "(iVar2 == 0) || (iVar4 = FUN_0048aff8(uVar3,iVar6,iVar5,0x10), iVar4 != 0)" (parenthesized_expression "(iVar2 == 0)" ( (binary_expression "iVar2 == 0" identifier == number_literal) )) || (parenthesized_expression "(iVar4 = FUN_0048aff8(uVar3,iVar6,iVar5,0x10), iVar4 != 0)" ( (comma_expression "iVar4 = FUN_0048aff8(uVar3,iVar6,iVar5,0x10), iVar4 != 0" (assignment_expression "iVar4 = FUN_0048aff8(uVar3,iVar6,iVar5,0x10)" identifier = (call_expression "FUN_0048aff8(uVar3,iVar6,iVar5,0x10)" identifier (argument_list "(uVar3,iVar6,iVar5,0x10)" ( identifier , identifier , identifier , number_literal )))) , (binary_expression "iVar4 != 0" identifier != number_literal)) ))) )) ;)) (expression_statement "FUN_0048ab0c(iVar5,&DAT_0048d874,0);" (call_expression "FUN_0048ab0c(iVar5,&DAT_0048d874,0)" identifier (argument_list "(iVar5,&DAT_0048d874,0)" ( identifier , (pointer_expression "&DAT_0048d874" & identifier) , number_literal ))) ;) (expression_statement "FUN_0048ab0c(iVar6,&DAT_0048d874,0);" (call_expression "FUN_0048ab0c(iVar6,&DAT_0048d874,0)" identifier (argument_list "(iVar6,&DAT_0048d874,0)" ( identifier , (pointer_expression "&DAT_0048d874" & identifier) , number_literal ))) ;) (expression_statement "*param_6 = 0xc;" (assignment_expression "*param_6 = 0xc" (pointer_expression "*param_6" * identifier) = number_literal) ;) (expression_statement "iVar4 = 0;" (assignment_expression "iVar4 = 0" identifier = number_literal) ;) })) (return_statement "return iVar4;" return identifier ;) })))
(translation_unit "/* WARNING: Unknown calling convention */\n\nbin_tree_t *\nparse_branch(re_string_t *regexp,regex_t *preg,re_token_t *token,reg_syntax_t syntax,Idx nest,\n            reg_errcode_t *err)\n\n{\n  bin_tree_t *pbVar1;\n  bin_tree_t *pbVar2;\n  re_dfa_t *dfa;\n  bin_tree_t *pbVar3;\n  bin_tree_t *right;\n  bin_tree_t *root;\n  \n  dfa = preg->buffer;\n  pbVar3 = parse_expression(regexp,preg,token,syntax,nest,err);\n  if ((*err == _REG_NOERROR) || (pbVar3 != (bin_tree_t *)0x0)) {\nLAB_00498e20:\n    do {\n      root = pbVar3;\n      if ((token->field_0x4 & 0xf7) == 2) {\n        return root;\n      }\n      if ((nest != 0) && (token->field_0x4 == 9)) {\n        return root;\n      }\n      right = parse_expression(regexp,preg,token,syntax,nest,err);\n      if (*err == _REG_NOERROR) {\n        pbVar3 = right;\n        pbVar1 = root;\n        pbVar2 = right;\n        if (root == (bin_tree_t *)0x0) goto LAB_00498e20;\n      }\n      else {\n        pbVar1 = right;\n        pbVar2 = root;\n        if (right == (bin_tree_t *)0x0) {\n          if (root == (bin_tree_t *)0x0) {\n            return (bin_tree_t *)0x0;\n          }\n          postorder(root,free_tree,(void *)0x0);\n          return (bin_tree_t *)0x0;\n        }\n      }\n      pbVar3 = pbVar1;\n    } while ((pbVar2 == (bin_tree_t *)0x0) ||\n            (pbVar3 = create_tree(dfa,root,right,CONCAT), pbVar3 != (bin_tree_t *)0x0));\n    postorder(right,free_tree,(void *)0x0);\n    postorder(root,free_tree,(void *)0x0);\n    *err = _REG_ESPACE;\n    pbVar3 = (bin_tree_t *)0x0;\n  }\n  return pbVar3;\n}\n\n" comment (function_definition "bin_tree_t *\nparse_branch(re_string_t *regexp,regex_t *preg,re_token_t *token,reg_syntax_t syntax,Idx nest,\n            reg_errcode_t *err)\n\n{\n  bin_tree_t *pbVar1;\n  bin_tree_t *pbVar2;\n  re_dfa_t *dfa;\n  bin_tree_t *pbVar3;\n  bin_tree_t *right;\n  bin_tree_t *root;\n  \n  dfa = preg->buffer;\n  pbVar3 = parse_expression(regexp,preg,token,syntax,nest,err);\n  if ((*err == _REG_NOERROR) || (pbVar3 != (bin_tree_t *)0x0)) {\nLAB_00498e20:\n    do {\n      root = pbVar3;\n      if ((token->field_0x4 & 0xf7) == 2) {\n        return root;\n      }\n      if ((nest != 0) && (token->field_0x4 == 9)) {\n        return root;\n      }\n      right = parse_expression(regexp,preg,token,syntax,nest,err);\n      if (*err == _REG_NOERROR) {\n        pbVar3 = right;\n        pbVar1 = root;\n        pbVar2 = right;\n        if (root == (bin_tree_t *)0x0) goto LAB_00498e20;\n      }\n      else {\n        pbVar1 = right;\n        pbVar2 = root;\n        if (right == (bin_tree_t *)0x0) {\n          if (root == (bin_tree_t *)0x0) {\n            return (bin_tree_t *)0x0;\n          }\n          postorder(root,free_tree,(void *)0x0);\n          return (bin_tree_t *)0x0;\n        }\n      }\n      pbVar3 = pbVar1;\n    } while ((pbVar2 == (bin_tree_t *)0x0) ||\n            (pbVar3 = create_tree(dfa,root,right,CONCAT), pbVar3 != (bin_tree_t *)0x0));\n    postorder(right,free_tree,(void *)0x0);\n    postorder(root,free_tree,(void *)0x0);\n    *err = _REG_ESPACE;\n    pbVar3 = (bin_tree_t *)0x0;\n  }\n  return pbVar3;\n}" type_identifier (pointer_declarator "*\nparse_branch(re_string_t *regexp,regex_t *preg,re_token_t *token,reg_syntax_t syntax,Idx nest,\n            reg_errcode_t *err)" * (function_declarator "parse_branch(re_string_t *regexp,regex_t *preg,re_token_t *token,reg_syntax_t syntax,Idx nest,\n            reg_errcode_t *err)" identifier (parameter_list "(re_string_t *regexp,regex_t *preg,re_token_t *token,reg_syntax_t syntax,Idx nest,\n            reg_errcode_t *err)" ( (parameter_declaration "re_string_t *regexp" type_identifier (pointer_declarator "*regexp" * identifier)) , (parameter_declaration "regex_t *preg" type_identifier (pointer_declarator "*preg" * identifier)) , (parameter_declaration "re_token_t *token" type_identifier (pointer_declarator "*token" * identifier)) , (parameter_declaration "reg_syntax_t syntax" type_identifier identifier) , (parameter_declaration "Idx nest" type_identifier identifier) , (parameter_declaration "reg_errcode_t *err" type_identifier (pointer_declarator "*err" * identifier)) )))) (compound_statement "{\n  bin_tree_t *pbVar1;\n  bin_tree_t *pbVar2;\n  re_dfa_t *dfa;\n  bin_tree_t *pbVar3;\n  bin_tree_t *right;\n  bin_tree_t *root;\n  \n  dfa = preg->buffer;\n  pbVar3 = parse_expression(regexp,preg,token,syntax,nest,err);\n  if ((*err == _REG_NOERROR) || (pbVar3 != (bin_tree_t *)0x0)) {\nLAB_00498e20:\n    do {\n      root = pbVar3;\n      if ((token->field_0x4 & 0xf7) == 2) {\n        return root;\n      }\n      if ((nest != 0) && (token->field_0x4 == 9)) {\n        return root;\n      }\n      right = parse_expression(regexp,preg,token,syntax,nest,err);\n      if (*err == _REG_NOERROR) {\n        pbVar3 = right;\n        pbVar1 = root;\n        pbVar2 = right;\n        if (root == (bin_tree_t *)0x0) goto LAB_00498e20;\n      }\n      else {\n        pbVar1 = right;\n        pbVar2 = root;\n        if (right == (bin_tree_t *)0x0) {\n          if (root == (bin_tree_t *)0x0) {\n            return (bin_tree_t *)0x0;\n          }\n          postorder(root,free_tree,(void *)0x0);\n          return (bin_tree_t *)0x0;\n        }\n      }\n      pbVar3 = pbVar1;\n    } while ((pbVar2 == (bin_tree_t *)0x0) ||\n            (pbVar3 = create_tree(dfa,root,right,CONCAT), pbVar3 != (bin_tree_t *)0x0));\n    postorder(right,free_tree,(void *)0x0);\n    postorder(root,free_tree,(void *)0x0);\n    *err = _REG_ESPACE;\n    pbVar3 = (bin_tree_t *)0x0;\n  }\n  return pbVar3;\n}" { (declaration "bin_tree_t *pbVar1;" type_identifier (pointer_declarator "*pbVar1" * identifier) ;) (declaration "bin_tree_t *pbVar2;" type_identifier (pointer_declarator "*pbVar2" * identifier) ;) (declaration "re_dfa_t *dfa;" type_identifier (pointer_declarator "*dfa" * identifier) ;) (declaration "bin_tree_t *pbVar3;" type_identifier (pointer_declarator "*pbVar3" * identifier) ;) (declaration "bin_tree_t *right;" type_identifier (pointer_declarator "*right" * identifier) ;) (declaration "bin_tree_t *root;" type_identifier (pointer_declarator "*root" * identifier) ;) (expression_statement "dfa = preg->buffer;" (assignment_expression "dfa = preg->buffer" identifier = (field_expression "preg->buffer" identifier -> field_identifier)) ;) (expression_statement "pbVar3 = parse_expression(regexp,preg,token,syntax,nest,err);" (assignment_expression "pbVar3 = parse_expression(regexp,preg,token,syntax,nest,err)" identifier = (call_expression "parse_expression(regexp,preg,token,syntax,nest,err)" identifier (argument_list "(regexp,preg,token,syntax,nest,err)" ( identifier , identifier , identifier , identifier , identifier , identifier )))) ;) (if_statement "if ((*err == _REG_NOERROR) || (pbVar3 != (bin_tree_t *)0x0)) {\nLAB_00498e20:\n    do {\n      root = pbVar3;\n      if ((token->field_0x4 & 0xf7) == 2) {\n        return root;\n      }\n      if ((nest != 0) && (token->field_0x4 == 9)) {\n        return root;\n      }\n      right = parse_expression(regexp,preg,token,syntax,nest,err);\n      if (*err == _REG_NOERROR) {\n        pbVar3 = right;\n        pbVar1 = root;\n        pbVar2 = right;\n        if (root == (bin_tree_t *)0x0) goto LAB_00498e20;\n      }\n      else {\n        pbVar1 = right;\n        pbVar2 = root;\n        if (right == (bin_tree_t *)0x0) {\n          if (root == (bin_tree_t *)0x0) {\n            return (bin_tree_t *)0x0;\n          }\n          postorder(root,free_tree,(void *)0x0);\n          return (bin_tree_t *)0x0;\n        }\n      }\n      pbVar3 = pbVar1;\n    } while ((pbVar2 == (bin_tree_t *)0x0) ||\n            (pbVar3 = create_tree(dfa,root,right,CONCAT), pbVar3 != (bin_tree_t *)0x0));\n    postorder(right,free_tree,(void *)0x0);\n    postorder(root,free_tree,(void *)0x0);\n    *err = _REG_ESPACE;\n    pbVar3 = (bin_tree_t *)0x0;\n  }" if (parenthesized_expression "((*err == _REG_NOERROR) || (pbVar3 != (bin_tree_t *)0x0))" ( (binary_expression "(*err == _REG_NOERROR) || (pbVar3 != (bin_tree_t *)0x0)" (parenthesized_expression "(*err == _REG_NOERROR)" ( (binary_expression "*err == _REG_NOERROR" (pointer_expression "*err" * identifier) == identifier) )) || (parenthesized_expression "(pbVar3 != (bin_tree_t *)0x0)" ( (binary_expression "pbVar3 != (bin_tree_t *)0x0" identifier != (cast_expression "(bin_tree_t *)0x0" ( (type_descriptor "bin_tree_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ))) )) (compound_statement "{\nLAB_00498e20:\n    do {\n      root = pbVar3;\n      if ((token->field_0x4 & 0xf7) == 2) {\n        return root;\n      }\n      if ((nest != 0) && (token->field_0x4 == 9)) {\n        return root;\n      }\n      right = parse_expression(regexp,preg,token,syntax,nest,err);\n      if (*err == _REG_NOERROR) {\n        pbVar3 = right;\n        pbVar1 = root;\n        pbVar2 = right;\n        if (root == (bin_tree_t *)0x0) goto LAB_00498e20;\n      }\n      else {\n        pbVar1 = right;\n        pbVar2 = root;\n        if (right == (bin_tree_t *)0x0) {\n          if (root == (bin_tree_t *)0x0) {\n            return (bin_tree_t *)0x0;\n          }\n          postorder(root,free_tree,(void *)0x0);\n          return (bin_tree_t *)0x0;\n        }\n      }\n      pbVar3 = pbVar1;\n    } while ((pbVar2 == (bin_tree_t *)0x0) ||\n            (pbVar3 = create_tree(dfa,root,right,CONCAT), pbVar3 != (bin_tree_t *)0x0));\n    postorder(right,free_tree,(void *)0x0);\n    postorder(root,free_tree,(void *)0x0);\n    *err = _REG_ESPACE;\n    pbVar3 = (bin_tree_t *)0x0;\n  }" { (labeled_statement "LAB_00498e20:\n    do {\n      root = pbVar3;\n      if ((token->field_0x4 & 0xf7) == 2) {\n        return root;\n      }\n      if ((nest != 0) && (token->field_0x4 == 9)) {\n        return root;\n      }\n      right = parse_expression(regexp,preg,token,syntax,nest,err);\n      if (*err == _REG_NOERROR) {\n        pbVar3 = right;\n        pbVar1 = root;\n        pbVar2 = right;\n        if (root == (bin_tree_t *)0x0) goto LAB_00498e20;\n      }\n      else {\n        pbVar1 = right;\n        pbVar2 = root;\n        if (right == (bin_tree_t *)0x0) {\n          if (root == (bin_tree_t *)0x0) {\n            return (bin_tree_t *)0x0;\n          }\n          postorder(root,free_tree,(void *)0x0);\n          return (bin_tree_t *)0x0;\n        }\n      }\n      pbVar3 = pbVar1;\n    } while ((pbVar2 == (bin_tree_t *)0x0) ||\n            (pbVar3 = create_tree(dfa,root,right,CONCAT), pbVar3 != (bin_tree_t *)0x0));" statement_identifier : (do_statement "do {\n      root = pbVar3;\n      if ((token->field_0x4 & 0xf7) == 2) {\n        return root;\n      }\n      if ((nest != 0) && (token->field_0x4 == 9)) {\n        return root;\n      }\n      right = parse_expression(regexp,preg,token,syntax,nest,err);\n      if (*err == _REG_NOERROR) {\n        pbVar3 = right;\n        pbVar1 = root;\n        pbVar2 = right;\n        if (root == (bin_tree_t *)0x0) goto LAB_00498e20;\n      }\n      else {\n        pbVar1 = right;\n        pbVar2 = root;\n        if (right == (bin_tree_t *)0x0) {\n          if (root == (bin_tree_t *)0x0) {\n            return (bin_tree_t *)0x0;\n          }\n          postorder(root,free_tree,(void *)0x0);\n          return (bin_tree_t *)0x0;\n        }\n      }\n      pbVar3 = pbVar1;\n    } while ((pbVar2 == (bin_tree_t *)0x0) ||\n            (pbVar3 = create_tree(dfa,root,right,CONCAT), pbVar3 != (bin_tree_t *)0x0));" do (compound_statement "{\n      root = pbVar3;\n      if ((token->field_0x4 & 0xf7) == 2) {\n        return root;\n      }\n      if ((nest != 0) && (token->field_0x4 == 9)) {\n        return root;\n      }\n      right = parse_expression(regexp,preg,token,syntax,nest,err);\n      if (*err == _REG_NOERROR) {\n        pbVar3 = right;\n        pbVar1 = root;\n        pbVar2 = right;\n        if (root == (bin_tree_t *)0x0) goto LAB_00498e20;\n      }\n      else {\n        pbVar1 = right;\n        pbVar2 = root;\n        if (right == (bin_tree_t *)0x0) {\n          if (root == (bin_tree_t *)0x0) {\n            return (bin_tree_t *)0x0;\n          }\n          postorder(root,free_tree,(void *)0x0);\n          return (bin_tree_t *)0x0;\n        }\n      }\n      pbVar3 = pbVar1;\n    }" { (expression_statement "root = pbVar3;" (assignment_expression "root = pbVar3" identifier = identifier) ;) (if_statement "if ((token->field_0x4 & 0xf7) == 2) {\n        return root;\n      }" if (parenthesized_expression "((token->field_0x4 & 0xf7) == 2)" ( (binary_expression "(token->field_0x4 & 0xf7) == 2" (parenthesized_expression "(token->field_0x4 & 0xf7)" ( (binary_expression "token->field_0x4 & 0xf7" (field_expression "token->field_0x4" identifier -> field_identifier) & number_literal) )) == number_literal) )) (compound_statement "{\n        return root;\n      }" { (return_statement "return root;" return identifier ;) })) (if_statement "if ((nest != 0) && (token->field_0x4 == 9)) {\n        return root;\n      }" if (parenthesized_expression "((nest != 0) && (token->field_0x4 == 9))" ( (binary_expression "(nest != 0) && (token->field_0x4 == 9)" (parenthesized_expression "(nest != 0)" ( (binary_expression "nest != 0" identifier != number_literal) )) && (parenthesized_expression "(token->field_0x4 == 9)" ( (binary_expression "token->field_0x4 == 9" (field_expression "token->field_0x4" identifier -> field_identifier) == number_literal) ))) )) (compound_statement "{\n        return root;\n      }" { (return_statement "return root;" return identifier ;) })) (expression_statement "right = parse_expression(regexp,preg,token,syntax,nest,err);" (assignment_expression "right = parse_expression(regexp,preg,token,syntax,nest,err)" identifier = (call_expression "parse_expression(regexp,preg,token,syntax,nest,err)" identifier (argument_list "(regexp,preg,token,syntax,nest,err)" ( identifier , identifier , identifier , identifier , identifier , identifier )))) ;) (if_statement "if (*err == _REG_NOERROR) {\n        pbVar3 = right;\n        pbVar1 = root;\n        pbVar2 = right;\n        if (root == (bin_tree_t *)0x0) goto LAB_00498e20;\n      }\n      else {\n        pbVar1 = right;\n        pbVar2 = root;\n        if (right == (bin_tree_t *)0x0) {\n          if (root == (bin_tree_t *)0x0) {\n            return (bin_tree_t *)0x0;\n          }\n          postorder(root,free_tree,(void *)0x0);\n          return (bin_tree_t *)0x0;\n        }\n      }" if (parenthesized_expression "(*err == _REG_NOERROR)" ( (binary_expression "*err == _REG_NOERROR" (pointer_expression "*err" * identifier) == identifier) )) (compound_statement "{\n        pbVar3 = right;\n        pbVar1 = root;\n        pbVar2 = right;\n        if (root == (bin_tree_t *)0x0) goto LAB_00498e20;\n      }" { (expression_statement "pbVar3 = right;" (assignment_expression "pbVar3 = right" identifier = identifier) ;) (expression_statement "pbVar1 = root;" (assignment_expression "pbVar1 = root" identifier = identifier) ;) (expression_statement "pbVar2 = right;" (assignment_expression "pbVar2 = right" identifier = identifier) ;) (if_statement "if (root == (bin_tree_t *)0x0) goto LAB_00498e20;" if (parenthesized_expression "(root == (bin_tree_t *)0x0)" ( (binary_expression "root == (bin_tree_t *)0x0" identifier == (cast_expression "(bin_tree_t *)0x0" ( (type_descriptor "bin_tree_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_00498e20;" goto statement_identifier ;)) }) (else_clause "else {\n        pbVar1 = right;\n        pbVar2 = root;\n        if (right == (bin_tree_t *)0x0) {\n          if (root == (bin_tree_t *)0x0) {\n            return (bin_tree_t *)0x0;\n          }\n          postorder(root,free_tree,(void *)0x0);\n          return (bin_tree_t *)0x0;\n        }\n      }" else (compound_statement "{\n        pbVar1 = right;\n        pbVar2 = root;\n        if (right == (bin_tree_t *)0x0) {\n          if (root == (bin_tree_t *)0x0) {\n            return (bin_tree_t *)0x0;\n          }\n          postorder(root,free_tree,(void *)0x0);\n          return (bin_tree_t *)0x0;\n        }\n      }" { (expression_statement "pbVar1 = right;" (assignment_expression "pbVar1 = right" identifier = identifier) ;) (expression_statement "pbVar2 = root;" (assignment_expression "pbVar2 = root" identifier = identifier) ;) (if_statement "if (right == (bin_tree_t *)0x0) {\n          if (root == (bin_tree_t *)0x0) {\n            return (bin_tree_t *)0x0;\n          }\n          postorder(root,free_tree,(void *)0x0);\n          return (bin_tree_t *)0x0;\n        }" if (parenthesized_expression "(right == (bin_tree_t *)0x0)" ( (binary_expression "right == (bin_tree_t *)0x0" identifier == (cast_expression "(bin_tree_t *)0x0" ( (type_descriptor "bin_tree_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          if (root == (bin_tree_t *)0x0) {\n            return (bin_tree_t *)0x0;\n          }\n          postorder(root,free_tree,(void *)0x0);\n          return (bin_tree_t *)0x0;\n        }" { (if_statement "if (root == (bin_tree_t *)0x0) {\n            return (bin_tree_t *)0x0;\n          }" if (parenthesized_expression "(root == (bin_tree_t *)0x0)" ( (binary_expression "root == (bin_tree_t *)0x0" identifier == (cast_expression "(bin_tree_t *)0x0" ( (type_descriptor "bin_tree_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n            return (bin_tree_t *)0x0;\n          }" { (return_statement "return (bin_tree_t *)0x0;" return (cast_expression "(bin_tree_t *)0x0" ( (type_descriptor "bin_tree_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (expression_statement "postorder(root,free_tree,(void *)0x0);" (call_expression "postorder(root,free_tree,(void *)0x0)" identifier (argument_list "(root,free_tree,(void *)0x0)" ( identifier , identifier , (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ))) ;) (return_statement "return (bin_tree_t *)0x0;" return (cast_expression "(bin_tree_t *)0x0" ( (type_descriptor "bin_tree_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) }))) (expression_statement "pbVar3 = pbVar1;" (assignment_expression "pbVar3 = pbVar1" identifier = identifier) ;) }) while (parenthesized_expression "((pbVar2 == (bin_tree_t *)0x0) ||\n            (pbVar3 = create_tree(dfa,root,right,CONCAT), pbVar3 != (bin_tree_t *)0x0))" ( (binary_expression "(pbVar2 == (bin_tree_t *)0x0) ||\n            (pbVar3 = create_tree(dfa,root,right,CONCAT), pbVar3 != (bin_tree_t *)0x0)" (parenthesized_expression "(pbVar2 == (bin_tree_t *)0x0)" ( (binary_expression "pbVar2 == (bin_tree_t *)0x0" identifier == (cast_expression "(bin_tree_t *)0x0" ( (type_descriptor "bin_tree_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) || (parenthesized_expression "(pbVar3 = create_tree(dfa,root,right,CONCAT), pbVar3 != (bin_tree_t *)0x0)" ( (comma_expression "pbVar3 = create_tree(dfa,root,right,CONCAT), pbVar3 != (bin_tree_t *)0x0" (assignment_expression "pbVar3 = create_tree(dfa,root,right,CONCAT)" identifier = (call_expression "create_tree(dfa,root,right,CONCAT)" identifier (argument_list "(dfa,root,right,CONCAT)" ( identifier , identifier , identifier , identifier )))) , (binary_expression "pbVar3 != (bin_tree_t *)0x0" identifier != (cast_expression "(bin_tree_t *)0x0" ( (type_descriptor "bin_tree_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal))) ))) )) ;)) (expression_statement "postorder(right,free_tree,(void *)0x0);" (call_expression "postorder(right,free_tree,(void *)0x0)" identifier (argument_list "(right,free_tree,(void *)0x0)" ( identifier , identifier , (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ))) ;) (expression_statement "postorder(root,free_tree,(void *)0x0);" (call_expression "postorder(root,free_tree,(void *)0x0)" identifier (argument_list "(root,free_tree,(void *)0x0)" ( identifier , identifier , (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ))) ;) (expression_statement "*err = _REG_ESPACE;" (assignment_expression "*err = _REG_ESPACE" (pointer_expression "*err" * identifier) = identifier) ;) (expression_statement "pbVar3 = (bin_tree_t *)0x0;" (assignment_expression "pbVar3 = (bin_tree_t *)0x0" identifier = (cast_expression "(bin_tree_t *)0x0" ( (type_descriptor "bin_tree_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) })) (return_statement "return pbVar3;" return identifier ;) })))
(translation_unit "int FUN_00498d68(undefined4 param_1,undefined4 *param_2,int param_3,undefined4 param_4,int param_5,\n                int *param_6)\n\n{\n  int iVar1;\n  int iVar2;\n  undefined4 uVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  \n  uVar3 = *param_2;\n  iVar4 = FUN_00497680();\n  if ((*param_6 == 0) || (iVar4 != 0)) {\nLAB_00498e20:\n    do {\n      iVar6 = iVar4;\n      if ((*(byte *)(param_3 + 4) & 0xf7) == 2) {\n        return iVar6;\n      }\n      if ((param_5 != 0) && (*(byte *)(param_3 + 4) == 9)) {\n        return iVar6;\n      }\n      iVar5 = FUN_00497680(param_1,param_2,param_3,param_4,param_5,param_6);\n      if (*param_6 == 0) {\n        iVar4 = iVar5;\n        iVar1 = iVar6;\n        iVar2 = iVar5;\n        if (iVar6 == 0) goto LAB_00498e20;\n      }\n      else {\n        iVar1 = iVar5;\n        iVar2 = iVar6;\n        if (iVar5 == 0) {\n          if (iVar6 == 0) {\n            return 0;\n          }\n          FUN_0048ab0c(iVar6,&DAT_0048d874,0);\n          return 0;\n        }\n      }\n      iVar4 = iVar1;\n    } while ((iVar2 == 0) || (iVar4 = FUN_0048aff8(uVar3,iVar6,iVar5,0x10), iVar4 != 0));\n    FUN_0048ab0c(iVar5,&DAT_0048d874,0);\n    FUN_0048ab0c(iVar6,&DAT_0048d874,0);\n    *param_6 = 0xc;\n    iVar4 = 0;\n  }\n  return iVar4;\n}\n\n" (function_definition "int FUN_00498d68(undefined4 param_1,undefined4 *param_2,int param_3,undefined4 param_4,int param_5,\n                int *param_6)\n\n{\n  int iVar1;\n  int iVar2;\n  undefined4 uVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  \n  uVar3 = *param_2;\n  iVar4 = FUN_00497680();\n  if ((*param_6 == 0) || (iVar4 != 0)) {\nLAB_00498e20:\n    do {\n      iVar6 = iVar4;\n      if ((*(byte *)(param_3 + 4) & 0xf7) == 2) {\n        return iVar6;\n      }\n      if ((param_5 != 0) && (*(byte *)(param_3 + 4) == 9)) {\n        return iVar6;\n      }\n      iVar5 = FUN_00497680(param_1,param_2,param_3,param_4,param_5,param_6);\n      if (*param_6 == 0) {\n        iVar4 = iVar5;\n        iVar1 = iVar6;\n        iVar2 = iVar5;\n        if (iVar6 == 0) goto LAB_00498e20;\n      }\n      else {\n        iVar1 = iVar5;\n        iVar2 = iVar6;\n        if (iVar5 == 0) {\n          if (iVar6 == 0) {\n            return 0;\n          }\n          FUN_0048ab0c(iVar6,&DAT_0048d874,0);\n          return 0;\n        }\n      }\n      iVar4 = iVar1;\n    } while ((iVar2 == 0) || (iVar4 = FUN_0048aff8(uVar3,iVar6,iVar5,0x10), iVar4 != 0));\n    FUN_0048ab0c(iVar5,&DAT_0048d874,0);\n    FUN_0048ab0c(iVar6,&DAT_0048d874,0);\n    *param_6 = 0xc;\n    iVar4 = 0;\n  }\n  return iVar4;\n}" primitive_type (function_declarator "FUN_00498d68(undefined4 param_1,undefined4 *param_2,int param_3,undefined4 param_4,int param_5,\n                int *param_6)" identifier (parameter_list "(undefined4 param_1,undefined4 *param_2,int param_3,undefined4 param_4,int param_5,\n                int *param_6)" ( (parameter_declaration "undefined4 param_1" type_identifier identifier) , (parameter_declaration "undefined4 *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "int param_3" primitive_type identifier) , (parameter_declaration "undefined4 param_4" type_identifier identifier) , (parameter_declaration "int param_5" primitive_type identifier) , (parameter_declaration "int *param_6" primitive_type (pointer_declarator "*param_6" * identifier)) ))) (compound_statement "{\n  int iVar1;\n  int iVar2;\n  undefined4 uVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  \n  uVar3 = *param_2;\n  iVar4 = FUN_00497680();\n  if ((*param_6 == 0) || (iVar4 != 0)) {\nLAB_00498e20:\n    do {\n      iVar6 = iVar4;\n      if ((*(byte *)(param_3 + 4) & 0xf7) == 2) {\n        return iVar6;\n      }\n      if ((param_5 != 0) && (*(byte *)(param_3 + 4) == 9)) {\n        return iVar6;\n      }\n      iVar5 = FUN_00497680(param_1,param_2,param_3,param_4,param_5,param_6);\n      if (*param_6 == 0) {\n        iVar4 = iVar5;\n        iVar1 = iVar6;\n        iVar2 = iVar5;\n        if (iVar6 == 0) goto LAB_00498e20;\n      }\n      else {\n        iVar1 = iVar5;\n        iVar2 = iVar6;\n        if (iVar5 == 0) {\n          if (iVar6 == 0) {\n            return 0;\n          }\n          FUN_0048ab0c(iVar6,&DAT_0048d874,0);\n          return 0;\n        }\n      }\n      iVar4 = iVar1;\n    } while ((iVar2 == 0) || (iVar4 = FUN_0048aff8(uVar3,iVar6,iVar5,0x10), iVar4 != 0));\n    FUN_0048ab0c(iVar5,&DAT_0048d874,0);\n    FUN_0048ab0c(iVar6,&DAT_0048d874,0);\n    *param_6 = 0xc;\n    iVar4 = 0;\n  }\n  return iVar4;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "undefined4 uVar3;" type_identifier identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (expression_statement "uVar3 = *param_2;" (assignment_expression "uVar3 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "iVar4 = FUN_00497680();" (assignment_expression "iVar4 = FUN_00497680()" identifier = (call_expression "FUN_00497680()" identifier (argument_list "()" ( )))) ;) (if_statement "if ((*param_6 == 0) || (iVar4 != 0)) {\nLAB_00498e20:\n    do {\n      iVar6 = iVar4;\n      if ((*(byte *)(param_3 + 4) & 0xf7) == 2) {\n        return iVar6;\n      }\n      if ((param_5 != 0) && (*(byte *)(param_3 + 4) == 9)) {\n        return iVar6;\n      }\n      iVar5 = FUN_00497680(param_1,param_2,param_3,param_4,param_5,param_6);\n      if (*param_6 == 0) {\n        iVar4 = iVar5;\n        iVar1 = iVar6;\n        iVar2 = iVar5;\n        if (iVar6 == 0) goto LAB_00498e20;\n      }\n      else {\n        iVar1 = iVar5;\n        iVar2 = iVar6;\n        if (iVar5 == 0) {\n          if (iVar6 == 0) {\n            return 0;\n          }\n          FUN_0048ab0c(iVar6,&DAT_0048d874,0);\n          return 0;\n        }\n      }\n      iVar4 = iVar1;\n    } while ((iVar2 == 0) || (iVar4 = FUN_0048aff8(uVar3,iVar6,iVar5,0x10), iVar4 != 0));\n    FUN_0048ab0c(iVar5,&DAT_0048d874,0);\n    FUN_0048ab0c(iVar6,&DAT_0048d874,0);\n    *param_6 = 0xc;\n    iVar4 = 0;\n  }" if (parenthesized_expression "((*param_6 == 0) || (iVar4 != 0))" ( (binary_expression "(*param_6 == 0) || (iVar4 != 0)" (parenthesized_expression "(*param_6 == 0)" ( (binary_expression "*param_6 == 0" (pointer_expression "*param_6" * identifier) == number_literal) )) || (parenthesized_expression "(iVar4 != 0)" ( (binary_expression "iVar4 != 0" identifier != number_literal) ))) )) (compound_statement "{\nLAB_00498e20:\n    do {\n      iVar6 = iVar4;\n      if ((*(byte *)(param_3 + 4) & 0xf7) == 2) {\n        return iVar6;\n      }\n      if ((param_5 != 0) && (*(byte *)(param_3 + 4) == 9)) {\n        return iVar6;\n      }\n      iVar5 = FUN_00497680(param_1,param_2,param_3,param_4,param_5,param_6);\n      if (*param_6 == 0) {\n        iVar4 = iVar5;\n        iVar1 = iVar6;\n        iVar2 = iVar5;\n        if (iVar6 == 0) goto LAB_00498e20;\n      }\n      else {\n        iVar1 = iVar5;\n        iVar2 = iVar6;\n        if (iVar5 == 0) {\n          if (iVar6 == 0) {\n            return 0;\n          }\n          FUN_0048ab0c(iVar6,&DAT_0048d874,0);\n          return 0;\n        }\n      }\n      iVar4 = iVar1;\n    } while ((iVar2 == 0) || (iVar4 = FUN_0048aff8(uVar3,iVar6,iVar5,0x10), iVar4 != 0));\n    FUN_0048ab0c(iVar5,&DAT_0048d874,0);\n    FUN_0048ab0c(iVar6,&DAT_0048d874,0);\n    *param_6 = 0xc;\n    iVar4 = 0;\n  }" { (labeled_statement "LAB_00498e20:\n    do {\n      iVar6 = iVar4;\n      if ((*(byte *)(param_3 + 4) & 0xf7) == 2) {\n        return iVar6;\n      }\n      if ((param_5 != 0) && (*(byte *)(param_3 + 4) == 9)) {\n        return iVar6;\n      }\n      iVar5 = FUN_00497680(param_1,param_2,param_3,param_4,param_5,param_6);\n      if (*param_6 == 0) {\n        iVar4 = iVar5;\n        iVar1 = iVar6;\n        iVar2 = iVar5;\n        if (iVar6 == 0) goto LAB_00498e20;\n      }\n      else {\n        iVar1 = iVar5;\n        iVar2 = iVar6;\n        if (iVar5 == 0) {\n          if (iVar6 == 0) {\n            return 0;\n          }\n          FUN_0048ab0c(iVar6,&DAT_0048d874,0);\n          return 0;\n        }\n      }\n      iVar4 = iVar1;\n    } while ((iVar2 == 0) || (iVar4 = FUN_0048aff8(uVar3,iVar6,iVar5,0x10), iVar4 != 0));" statement_identifier : (do_statement "do {\n      iVar6 = iVar4;\n      if ((*(byte *)(param_3 + 4) & 0xf7) == 2) {\n        return iVar6;\n      }\n      if ((param_5 != 0) && (*(byte *)(param_3 + 4) == 9)) {\n        return iVar6;\n      }\n      iVar5 = FUN_00497680(param_1,param_2,param_3,param_4,param_5,param_6);\n      if (*param_6 == 0) {\n        iVar4 = iVar5;\n        iVar1 = iVar6;\n        iVar2 = iVar5;\n        if (iVar6 == 0) goto LAB_00498e20;\n      }\n      else {\n        iVar1 = iVar5;\n        iVar2 = iVar6;\n        if (iVar5 == 0) {\n          if (iVar6 == 0) {\n            return 0;\n          }\n          FUN_0048ab0c(iVar6,&DAT_0048d874,0);\n          return 0;\n        }\n      }\n      iVar4 = iVar1;\n    } while ((iVar2 == 0) || (iVar4 = FUN_0048aff8(uVar3,iVar6,iVar5,0x10), iVar4 != 0));" do (compound_statement "{\n      iVar6 = iVar4;\n      if ((*(byte *)(param_3 + 4) & 0xf7) == 2) {\n        return iVar6;\n      }\n      if ((param_5 != 0) && (*(byte *)(param_3 + 4) == 9)) {\n        return iVar6;\n      }\n      iVar5 = FUN_00497680(param_1,param_2,param_3,param_4,param_5,param_6);\n      if (*param_6 == 0) {\n        iVar4 = iVar5;\n        iVar1 = iVar6;\n        iVar2 = iVar5;\n        if (iVar6 == 0) goto LAB_00498e20;\n      }\n      else {\n        iVar1 = iVar5;\n        iVar2 = iVar6;\n        if (iVar5 == 0) {\n          if (iVar6 == 0) {\n            return 0;\n          }\n          FUN_0048ab0c(iVar6,&DAT_0048d874,0);\n          return 0;\n        }\n      }\n      iVar4 = iVar1;\n    }" { (expression_statement "iVar6 = iVar4;" (assignment_expression "iVar6 = iVar4" identifier = identifier) ;) (if_statement "if ((*(byte *)(param_3 + 4) & 0xf7) == 2) {\n        return iVar6;\n      }" if (parenthesized_expression "((*(byte *)(param_3 + 4) & 0xf7) == 2)" ( (binary_expression "(*(byte *)(param_3 + 4) & 0xf7) == 2" (parenthesized_expression "(*(byte *)(param_3 + 4) & 0xf7)" ( (binary_expression "*(byte *)(param_3 + 4) & 0xf7" (pointer_expression "*(byte *)(param_3 + 4)" * (cast_expression "(byte *)(param_3 + 4)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 4)" ( (binary_expression "param_3 + 4" identifier + number_literal) )))) & number_literal) )) == number_literal) )) (compound_statement "{\n        return iVar6;\n      }" { (return_statement "return iVar6;" return identifier ;) })) (if_statement "if ((param_5 != 0) && (*(byte *)(param_3 + 4) == 9)) {\n        return iVar6;\n      }" if (parenthesized_expression "((param_5 != 0) && (*(byte *)(param_3 + 4) == 9))" ( (binary_expression "(param_5 != 0) && (*(byte *)(param_3 + 4) == 9)" (parenthesized_expression "(param_5 != 0)" ( (binary_expression "param_5 != 0" identifier != number_literal) )) && (parenthesized_expression "(*(byte *)(param_3 + 4) == 9)" ( (binary_expression "*(byte *)(param_3 + 4) == 9" (pointer_expression "*(byte *)(param_3 + 4)" * (cast_expression "(byte *)(param_3 + 4)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 4)" ( (binary_expression "param_3 + 4" identifier + number_literal) )))) == number_literal) ))) )) (compound_statement "{\n        return iVar6;\n      }" { (return_statement "return iVar6;" return identifier ;) })) (expression_statement "iVar5 = FUN_00497680(param_1,param_2,param_3,param_4,param_5,param_6);" (assignment_expression "iVar5 = FUN_00497680(param_1,param_2,param_3,param_4,param_5,param_6)" identifier = (call_expression "FUN_00497680(param_1,param_2,param_3,param_4,param_5,param_6)" identifier (argument_list "(param_1,param_2,param_3,param_4,param_5,param_6)" ( identifier , identifier , identifier , identifier , identifier , identifier )))) ;) (if_statement "if (*param_6 == 0) {\n        iVar4 = iVar5;\n        iVar1 = iVar6;\n        iVar2 = iVar5;\n        if (iVar6 == 0) goto LAB_00498e20;\n      }\n      else {\n        iVar1 = iVar5;\n        iVar2 = iVar6;\n        if (iVar5 == 0) {\n          if (iVar6 == 0) {\n            return 0;\n          }\n          FUN_0048ab0c(iVar6,&DAT_0048d874,0);\n          return 0;\n        }\n      }" if (parenthesized_expression "(*param_6 == 0)" ( (binary_expression "*param_6 == 0" (pointer_expression "*param_6" * identifier) == number_literal) )) (compound_statement "{\n        iVar4 = iVar5;\n        iVar1 = iVar6;\n        iVar2 = iVar5;\n        if (iVar6 == 0) goto LAB_00498e20;\n      }" { (expression_statement "iVar4 = iVar5;" (assignment_expression "iVar4 = iVar5" identifier = identifier) ;) (expression_statement "iVar1 = iVar6;" (assignment_expression "iVar1 = iVar6" identifier = identifier) ;) (expression_statement "iVar2 = iVar5;" (assignment_expression "iVar2 = iVar5" identifier = identifier) ;) (if_statement "if (iVar6 == 0) goto LAB_00498e20;" if (parenthesized_expression "(iVar6 == 0)" ( (binary_expression "iVar6 == 0" identifier == number_literal) )) (goto_statement "goto LAB_00498e20;" goto statement_identifier ;)) }) (else_clause "else {\n        iVar1 = iVar5;\n        iVar2 = iVar6;\n        if (iVar5 == 0) {\n          if (iVar6 == 0) {\n            return 0;\n          }\n          FUN_0048ab0c(iVar6,&DAT_0048d874,0);\n          return 0;\n        }\n      }" else (compound_statement "{\n        iVar1 = iVar5;\n        iVar2 = iVar6;\n        if (iVar5 == 0) {\n          if (iVar6 == 0) {\n            return 0;\n          }\n          FUN_0048ab0c(iVar6,&DAT_0048d874,0);\n          return 0;\n        }\n      }" { (expression_statement "iVar1 = iVar5;" (assignment_expression "iVar1 = iVar5" identifier = identifier) ;) (expression_statement "iVar2 = iVar6;" (assignment_expression "iVar2 = iVar6" identifier = identifier) ;) (if_statement "if (iVar5 == 0) {\n          if (iVar6 == 0) {\n            return 0;\n          }\n          FUN_0048ab0c(iVar6,&DAT_0048d874,0);\n          return 0;\n        }" if (parenthesized_expression "(iVar5 == 0)" ( (binary_expression "iVar5 == 0" identifier == number_literal) )) (compound_statement "{\n          if (iVar6 == 0) {\n            return 0;\n          }\n          FUN_0048ab0c(iVar6,&DAT_0048d874,0);\n          return 0;\n        }" { (if_statement "if (iVar6 == 0) {\n            return 0;\n          }" if (parenthesized_expression "(iVar6 == 0)" ( (binary_expression "iVar6 == 0" identifier == number_literal) )) (compound_statement "{\n            return 0;\n          }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "FUN_0048ab0c(iVar6,&DAT_0048d874,0);" (call_expression "FUN_0048ab0c(iVar6,&DAT_0048d874,0)" identifier (argument_list "(iVar6,&DAT_0048d874,0)" ( identifier , (pointer_expression "&DAT_0048d874" & identifier) , number_literal ))) ;) (return_statement "return 0;" return number_literal ;) })) }))) (expression_statement "iVar4 = iVar1;" (assignment_expression "iVar4 = iVar1" identifier = identifier) ;) }) while (parenthesized_expression "((iVar2 == 0) || (iVar4 = FUN_0048aff8(uVar3,iVar6,iVar5,0x10), iVar4 != 0))" ( (binary_expression "(iVar2 == 0) || (iVar4 = FUN_0048aff8(uVar3,iVar6,iVar5,0x10), iVar4 != 0)" (parenthesized_expression "(iVar2 == 0)" ( (binary_expression "iVar2 == 0" identifier == number_literal) )) || (parenthesized_expression "(iVar4 = FUN_0048aff8(uVar3,iVar6,iVar5,0x10), iVar4 != 0)" ( (comma_expression "iVar4 = FUN_0048aff8(uVar3,iVar6,iVar5,0x10), iVar4 != 0" (assignment_expression "iVar4 = FUN_0048aff8(uVar3,iVar6,iVar5,0x10)" identifier = (call_expression "FUN_0048aff8(uVar3,iVar6,iVar5,0x10)" identifier (argument_list "(uVar3,iVar6,iVar5,0x10)" ( identifier , identifier , identifier , number_literal )))) , (binary_expression "iVar4 != 0" identifier != number_literal)) ))) )) ;)) (expression_statement "FUN_0048ab0c(iVar5,&DAT_0048d874,0);" (call_expression "FUN_0048ab0c(iVar5,&DAT_0048d874,0)" identifier (argument_list "(iVar5,&DAT_0048d874,0)" ( identifier , (pointer_expression "&DAT_0048d874" & identifier) , number_literal ))) ;) (expression_statement "FUN_0048ab0c(iVar6,&DAT_0048d874,0);" (call_expression "FUN_0048ab0c(iVar6,&DAT_0048d874,0)" identifier (argument_list "(iVar6,&DAT_0048d874,0)" ( identifier , (pointer_expression "&DAT_0048d874" & identifier) , number_literal ))) ;) (expression_statement "*param_6 = 0xc;" (assignment_expression "*param_6 = 0xc" (pointer_expression "*param_6" * identifier) = number_literal) ;) (expression_statement "iVar4 = 0;" (assignment_expression "iVar4 = 0" identifier = number_literal) ;) })) (return_statement "return iVar4;" return identifier ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) == LIT) )) || (parenthesized_expression ( (binary_expression IDENT != LIT) ))) )) (compound_statement { (labeled_statement statement_identifier : (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = 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) )))) & LIT) )) == LIT) )) (compound_statement { (return_statement return IDENT ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != LIT) )) && (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == LIT) ))) )) (compound_statement { (return_statement return IDENT ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , IDENT , IDENT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (goto_statement goto statement_identifier ;)) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (call_expression IDENT (argument_list ( IDENT , (pointer_expression & IDENT) , LIT ))) ;) (return_statement return LIT ;) })) }))) (expression_statement (assignment_expression IDENT = IDENT) ;) }) while (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == LIT) )) || (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , LIT )))) , (binary_expression IDENT != LIT)) ))) )) ;)) (expression_statement (call_expression IDENT (argument_list ( IDENT , (pointer_expression & IDENT) , LIT ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , (pointer_expression & IDENT) , LIT ))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) })) (return_statement return IDENT ;) })))
(function_definition "int FUN_00498d68(undefined4 param_1,undefined4 *param_2,int param_3,undefined4 param_4,int param_5,\n                int *param_6)\n\n{\n  int iVar1;\n  int iVar2;\n  undefined4 uVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  \n  uVar3 = *param_2;\n  iVar4 = FUN_00497680();\n  if ((*param_6 == 0) || (iVar4 != 0)) {\nLAB_00498e20:\n    do {\n      iVar6 = iVar4;\n      if ((*(byte *)(param_3 + 4) & 0xf7) == 2) {\n        return iVar6;\n      }\n      if ((param_5 != 0) && (*(byte *)(param_3 + 4) == 9)) {\n        return iVar6;\n      }\n      iVar5 = FUN_00497680(param_1,param_2,param_3,param_4,param_5,param_6);\n      if (*param_6 == 0) {\n        iVar4 = iVar5;\n        iVar1 = iVar6;\n        iVar2 = iVar5;\n        if (iVar6 == 0) goto LAB_00498e20;\n      }\n      else {\n        iVar1 = iVar5;\n        iVar2 = iVar6;\n        if (iVar5 == 0) {\n          if (iVar6 == 0) {\n            return 0;\n          }\n          FUN_0048ab0c(iVar6,&DAT_0048d874,0);\n          return 0;\n        }\n      }\n      iVar4 = iVar1;\n    } while ((iVar2 == 0) || (iVar4 = FUN_0048aff8(uVar3,iVar6,iVar5,0x10), iVar4 != 0));\n    FUN_0048ab0c(iVar5,&DAT_0048d874,0);\n    FUN_0048ab0c(iVar6,&DAT_0048d874,0);\n    *param_6 = 0xc;\n    iVar4 = 0;\n  }\n  return iVar4;\n}" (primitive_type "int") (function_declarator "FUN_00498d68(undefined4 param_1,undefined4 *param_2,int param_3,undefined4 param_4,int param_5,\n                int *param_6)" (identifier "FUN_00498d68") (parameter_list "(undefined4 param_1,undefined4 *param_2,int param_3,undefined4 param_4,int param_5,\n                int *param_6)" (( "(") (parameter_declaration "undefined4 param_1" (type_identifier "undefined4") (identifier "param_1")) (, ",") (parameter_declaration "undefined4 *param_2" (type_identifier "undefined4") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "int param_3" (primitive_type "int") (identifier "param_3")) (, ",") (parameter_declaration "undefined4 param_4" (type_identifier "undefined4") (identifier "param_4")) (, ",") (parameter_declaration "int param_5" (primitive_type "int") (identifier "param_5")) (, ",") (parameter_declaration "int *param_6" (primitive_type "int") (pointer_declarator "*param_6" (* "*") (identifier "param_6"))) () ")"))) (compound_statement "{\n  int iVar1;\n  int iVar2;\n  undefined4 uVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  \n  uVar3 = *param_2;\n  iVar4 = FUN_00497680();\n  if ((*param_6 == 0) || (iVar4 != 0)) {\nLAB_00498e20:\n    do {\n      iVar6 = iVar4;\n      if ((*(byte *)(param_3 + 4) & 0xf7) == 2) {\n        return iVar6;\n      }\n      if ((param_5 != 0) && (*(byte *)(param_3 + 4) == 9)) {\n        return iVar6;\n      }\n      iVar5 = FUN_00497680(param_1,param_2,param_3,param_4,param_5,param_6);\n      if (*param_6 == 0) {\n        iVar4 = iVar5;\n        iVar1 = iVar6;\n        iVar2 = iVar5;\n        if (iVar6 == 0) goto LAB_00498e20;\n      }\n      else {\n        iVar1 = iVar5;\n        iVar2 = iVar6;\n        if (iVar5 == 0) {\n          if (iVar6 == 0) {\n            return 0;\n          }\n          FUN_0048ab0c(iVar6,&DAT_0048d874,0);\n          return 0;\n        }\n      }\n      iVar4 = iVar1;\n    } while ((iVar2 == 0) || (iVar4 = FUN_0048aff8(uVar3,iVar6,iVar5,0x10), iVar4 != 0));\n    FUN_0048ab0c(iVar5,&DAT_0048d874,0);\n    FUN_0048ab0c(iVar6,&DAT_0048d874,0);\n    *param_6 = 0xc;\n    iVar4 = 0;\n  }\n  return iVar4;\n}" ({ "{") (declaration "int iVar1;" (primitive_type "int") (identifier "iVar1") (; ";")) (declaration "int iVar2;" (primitive_type "int") (identifier "iVar2") (; ";")) (declaration "undefined4 uVar3;" (type_identifier "undefined4") (identifier "uVar3") (; ";")) (declaration "int iVar4;" (primitive_type "int") (identifier "iVar4") (; ";")) (declaration "int iVar5;" (primitive_type "int") (identifier "iVar5") (; ";")) (declaration "int iVar6;" (primitive_type "int") (identifier "iVar6") (; ";")) (expression_statement "uVar3 = *param_2;" (assignment_expression "uVar3 = *param_2" (identifier "uVar3") (= "=") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) (; ";")) (expression_statement "iVar4 = FUN_00497680();" (assignment_expression "iVar4 = FUN_00497680()" (identifier "iVar4") (= "=") (call_expression "FUN_00497680()" (identifier "FUN_00497680") (argument_list "()" (( "(") () ")")))) (; ";")) (if_statement "if ((*param_6 == 0) || (iVar4 != 0)) {\nLAB_00498e20:\n    do {\n      iVar6 = iVar4;\n      if ((*(byte *)(param_3 + 4) & 0xf7) == 2) {\n        return iVar6;\n      }\n      if ((param_5 != 0) && (*(byte *)(param_3 + 4) == 9)) {\n        return iVar6;\n      }\n      iVar5 = FUN_00497680(param_1,param_2,param_3,param_4,param_5,param_6);\n      if (*param_6 == 0) {\n        iVar4 = iVar5;\n        iVar1 = iVar6;\n        iVar2 = iVar5;\n        if (iVar6 == 0) goto LAB_00498e20;\n      }\n      else {\n        iVar1 = iVar5;\n        iVar2 = iVar6;\n        if (iVar5 == 0) {\n          if (iVar6 == 0) {\n            return 0;\n          }\n          FUN_0048ab0c(iVar6,&DAT_0048d874,0);\n          return 0;\n        }\n      }\n      iVar4 = iVar1;\n    } while ((iVar2 == 0) || (iVar4 = FUN_0048aff8(uVar3,iVar6,iVar5,0x10), iVar4 != 0));\n    FUN_0048ab0c(iVar5,&DAT_0048d874,0);\n    FUN_0048ab0c(iVar6,&DAT_0048d874,0);\n    *param_6 = 0xc;\n    iVar4 = 0;\n  }" (if "if") (parenthesized_expression "((*param_6 == 0) || (iVar4 != 0))" (( "(") (binary_expression "(*param_6 == 0) || (iVar4 != 0)" (parenthesized_expression "(*param_6 == 0)" (( "(") (binary_expression "*param_6 == 0" (pointer_expression "*param_6" (* "*") (identifier "param_6")) (== "==") (number_literal "0")) () ")")) (|| "||") (parenthesized_expression "(iVar4 != 0)" (( "(") (binary_expression "iVar4 != 0" (identifier "iVar4") (!= "!=") (number_literal "0")) () ")"))) () ")")) (compound_statement "{\nLAB_00498e20:\n    do {\n      iVar6 = iVar4;\n      if ((*(byte *)(param_3 + 4) & 0xf7) == 2) {\n        return iVar6;\n      }\n      if ((param_5 != 0) && (*(byte *)(param_3 + 4) == 9)) {\n        return iVar6;\n      }\n      iVar5 = FUN_00497680(param_1,param_2,param_3,param_4,param_5,param_6);\n      if (*param_6 == 0) {\n        iVar4 = iVar5;\n        iVar1 = iVar6;\n        iVar2 = iVar5;\n        if (iVar6 == 0) goto LAB_00498e20;\n      }\n      else {\n        iVar1 = iVar5;\n        iVar2 = iVar6;\n        if (iVar5 == 0) {\n          if (iVar6 == 0) {\n            return 0;\n          }\n          FUN_0048ab0c(iVar6,&DAT_0048d874,0);\n          return 0;\n        }\n      }\n      iVar4 = iVar1;\n    } while ((iVar2 == 0) || (iVar4 = FUN_0048aff8(uVar3,iVar6,iVar5,0x10), iVar4 != 0));\n    FUN_0048ab0c(iVar5,&DAT_0048d874,0);\n    FUN_0048ab0c(iVar6,&DAT_0048d874,0);\n    *param_6 = 0xc;\n    iVar4 = 0;\n  }" ({ "{") (labeled_statement "LAB_00498e20:\n    do {\n      iVar6 = iVar4;\n      if ((*(byte *)(param_3 + 4) & 0xf7) == 2) {\n        return iVar6;\n      }\n      if ((param_5 != 0) && (*(byte *)(param_3 + 4) == 9)) {\n        return iVar6;\n      }\n      iVar5 = FUN_00497680(param_1,param_2,param_3,param_4,param_5,param_6);\n      if (*param_6 == 0) {\n        iVar4 = iVar5;\n        iVar1 = iVar6;\n        iVar2 = iVar5;\n        if (iVar6 == 0) goto LAB_00498e20;\n      }\n      else {\n        iVar1 = iVar5;\n        iVar2 = iVar6;\n        if (iVar5 == 0) {\n          if (iVar6 == 0) {\n            return 0;\n          }\n          FUN_0048ab0c(iVar6,&DAT_0048d874,0);\n          return 0;\n        }\n      }\n      iVar4 = iVar1;\n    } while ((iVar2 == 0) || (iVar4 = FUN_0048aff8(uVar3,iVar6,iVar5,0x10), iVar4 != 0));" (statement_identifier "LAB_00498e20") (: ":") (do_statement "do {\n      iVar6 = iVar4;\n      if ((*(byte *)(param_3 + 4) & 0xf7) == 2) {\n        return iVar6;\n      }\n      if ((param_5 != 0) && (*(byte *)(param_3 + 4) == 9)) {\n        return iVar6;\n      }\n      iVar5 = FUN_00497680(param_1,param_2,param_3,param_4,param_5,param_6);\n      if (*param_6 == 0) {\n        iVar4 = iVar5;\n        iVar1 = iVar6;\n        iVar2 = iVar5;\n        if (iVar6 == 0) goto LAB_00498e20;\n      }\n      else {\n        iVar1 = iVar5;\n        iVar2 = iVar6;\n        if (iVar5 == 0) {\n          if (iVar6 == 0) {\n            return 0;\n          }\n          FUN_0048ab0c(iVar6,&DAT_0048d874,0);\n          return 0;\n        }\n      }\n      iVar4 = iVar1;\n    } while ((iVar2 == 0) || (iVar4 = FUN_0048aff8(uVar3,iVar6,iVar5,0x10), iVar4 != 0));" (do "do") (compound_statement "{\n      iVar6 = iVar4;\n      if ((*(byte *)(param_3 + 4) & 0xf7) == 2) {\n        return iVar6;\n      }\n      if ((param_5 != 0) && (*(byte *)(param_3 + 4) == 9)) {\n        return iVar6;\n      }\n      iVar5 = FUN_00497680(param_1,param_2,param_3,param_4,param_5,param_6);\n      if (*param_6 == 0) {\n        iVar4 = iVar5;\n        iVar1 = iVar6;\n        iVar2 = iVar5;\n        if (iVar6 == 0) goto LAB_00498e20;\n      }\n      else {\n        iVar1 = iVar5;\n        iVar2 = iVar6;\n        if (iVar5 == 0) {\n          if (iVar6 == 0) {\n            return 0;\n          }\n          FUN_0048ab0c(iVar6,&DAT_0048d874,0);\n          return 0;\n        }\n      }\n      iVar4 = iVar1;\n    }" ({ "{") (expression_statement "iVar6 = iVar4;" (assignment_expression "iVar6 = iVar4" (identifier "iVar6") (= "=") (identifier "iVar4")) (; ";")) (if_statement "if ((*(byte *)(param_3 + 4) & 0xf7) == 2) {\n        return iVar6;\n      }" (if "if") (parenthesized_expression "((*(byte *)(param_3 + 4) & 0xf7) == 2)" (( "(") (binary_expression "(*(byte *)(param_3 + 4) & 0xf7) == 2" (parenthesized_expression "(*(byte *)(param_3 + 4) & 0xf7)" (( "(") (binary_expression "*(byte *)(param_3 + 4) & 0xf7" (pointer_expression "*(byte *)(param_3 + 4)" (* "*") (cast_expression "(byte *)(param_3 + 4)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 4)" (( "(") (binary_expression "param_3 + 4" (identifier "param_3") (+ "+") (number_literal "4")) () ")")))) (& "&") (number_literal "0xf7")) () ")")) (== "==") (number_literal "2")) () ")")) (compound_statement "{\n        return iVar6;\n      }" ({ "{") (return_statement "return iVar6;" (return "return") (identifier "iVar6") (; ";")) (} "}"))) (if_statement "if ((param_5 != 0) && (*(byte *)(param_3 + 4) == 9)) {\n        return iVar6;\n      }" (if "if") (parenthesized_expression "((param_5 != 0) && (*(byte *)(param_3 + 4) == 9))" (( "(") (binary_expression "(param_5 != 0) && (*(byte *)(param_3 + 4) == 9)" (parenthesized_expression "(param_5 != 0)" (( "(") (binary_expression "param_5 != 0" (identifier "param_5") (!= "!=") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "(*(byte *)(param_3 + 4) == 9)" (( "(") (binary_expression "*(byte *)(param_3 + 4) == 9" (pointer_expression "*(byte *)(param_3 + 4)" (* "*") (cast_expression "(byte *)(param_3 + 4)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 4)" (( "(") (binary_expression "param_3 + 4" (identifier "param_3") (+ "+") (number_literal "4")) () ")")))) (== "==") (number_literal "9")) () ")"))) () ")")) (compound_statement "{\n        return iVar6;\n      }" ({ "{") (return_statement "return iVar6;" (return "return") (identifier "iVar6") (; ";")) (} "}"))) (expression_statement "iVar5 = FUN_00497680(param_1,param_2,param_3,param_4,param_5,param_6);" (assignment_expression "iVar5 = FUN_00497680(param_1,param_2,param_3,param_4,param_5,param_6)" (identifier "iVar5") (= "=") (call_expression "FUN_00497680(param_1,param_2,param_3,param_4,param_5,param_6)" (identifier "FUN_00497680") (argument_list "(param_1,param_2,param_3,param_4,param_5,param_6)" (( "(") (identifier "param_1") (, ",") (identifier "param_2") (, ",") (identifier "param_3") (, ",") (identifier "param_4") (, ",") (identifier "param_5") (, ",") (identifier "param_6") () ")")))) (; ";")) (if_statement "if (*param_6 == 0) {\n        iVar4 = iVar5;\n        iVar1 = iVar6;\n        iVar2 = iVar5;\n        if (iVar6 == 0) goto LAB_00498e20;\n      }\n      else {\n        iVar1 = iVar5;\n        iVar2 = iVar6;\n        if (iVar5 == 0) {\n          if (iVar6 == 0) {\n            return 0;\n          }\n          FUN_0048ab0c(iVar6,&DAT_0048d874,0);\n          return 0;\n        }\n      }" (if "if") (parenthesized_expression "(*param_6 == 0)" (( "(") (binary_expression "*param_6 == 0" (pointer_expression "*param_6" (* "*") (identifier "param_6")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        iVar4 = iVar5;\n        iVar1 = iVar6;\n        iVar2 = iVar5;\n        if (iVar6 == 0) goto LAB_00498e20;\n      }" ({ "{") (expression_statement "iVar4 = iVar5;" (assignment_expression "iVar4 = iVar5" (identifier "iVar4") (= "=") (identifier "iVar5")) (; ";")) (expression_statement "iVar1 = iVar6;" (assignment_expression "iVar1 = iVar6" (identifier "iVar1") (= "=") (identifier "iVar6")) (; ";")) (expression_statement "iVar2 = iVar5;" (assignment_expression "iVar2 = iVar5" (identifier "iVar2") (= "=") (identifier "iVar5")) (; ";")) (if_statement "if (iVar6 == 0) goto LAB_00498e20;" (if "if") (parenthesized_expression "(iVar6 == 0)" (( "(") (binary_expression "iVar6 == 0" (identifier "iVar6") (== "==") (number_literal "0")) () ")")) (goto_statement "goto LAB_00498e20;" (goto "goto") (statement_identifier "LAB_00498e20") (; ";"))) (} "}")) (else_clause "else {\n        iVar1 = iVar5;\n        iVar2 = iVar6;\n        if (iVar5 == 0) {\n          if (iVar6 == 0) {\n            return 0;\n          }\n          FUN_0048ab0c(iVar6,&DAT_0048d874,0);\n          return 0;\n        }\n      }" (else "else") (compound_statement "{\n        iVar1 = iVar5;\n        iVar2 = iVar6;\n        if (iVar5 == 0) {\n          if (iVar6 == 0) {\n            return 0;\n          }\n          FUN_0048ab0c(iVar6,&DAT_0048d874,0);\n          return 0;\n        }\n      }" ({ "{") (expression_statement "iVar1 = iVar5;" (assignment_expression "iVar1 = iVar5" (identifier "iVar1") (= "=") (identifier "iVar5")) (; ";")) (expression_statement "iVar2 = iVar6;" (assignment_expression "iVar2 = iVar6" (identifier "iVar2") (= "=") (identifier "iVar6")) (; ";")) (if_statement "if (iVar5 == 0) {\n          if (iVar6 == 0) {\n            return 0;\n          }\n          FUN_0048ab0c(iVar6,&DAT_0048d874,0);\n          return 0;\n        }" (if "if") (parenthesized_expression "(iVar5 == 0)" (( "(") (binary_expression "iVar5 == 0" (identifier "iVar5") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n          if (iVar6 == 0) {\n            return 0;\n          }\n          FUN_0048ab0c(iVar6,&DAT_0048d874,0);\n          return 0;\n        }" ({ "{") (if_statement "if (iVar6 == 0) {\n            return 0;\n          }" (if "if") (parenthesized_expression "(iVar6 == 0)" (( "(") (binary_expression "iVar6 == 0" (identifier "iVar6") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n            return 0;\n          }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "FUN_0048ab0c(iVar6,&DAT_0048d874,0);" (call_expression "FUN_0048ab0c(iVar6,&DAT_0048d874,0)" (identifier "FUN_0048ab0c") (argument_list "(iVar6,&DAT_0048d874,0)" (( "(") (identifier "iVar6") (, ",") (pointer_expression "&DAT_0048d874" (& "&") (identifier "DAT_0048d874")) (, ",") (number_literal "0") () ")"))) (; ";")) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (} "}")))) (expression_statement "iVar4 = iVar1;" (assignment_expression "iVar4 = iVar1" (identifier "iVar4") (= "=") (identifier "iVar1")) (; ";")) (} "}")) (while "while") (parenthesized_expression "((iVar2 == 0) || (iVar4 = FUN_0048aff8(uVar3,iVar6,iVar5,0x10), iVar4 != 0))" (( "(") (binary_expression "(iVar2 == 0) || (iVar4 = FUN_0048aff8(uVar3,iVar6,iVar5,0x10), iVar4 != 0)" (parenthesized_expression "(iVar2 == 0)" (( "(") (binary_expression "iVar2 == 0" (identifier "iVar2") (== "==") (number_literal "0")) () ")")) (|| "||") (parenthesized_expression "(iVar4 = FUN_0048aff8(uVar3,iVar6,iVar5,0x10), iVar4 != 0)" (( "(") (comma_expression "iVar4 = FUN_0048aff8(uVar3,iVar6,iVar5,0x10), iVar4 != 0" (assignment_expression "iVar4 = FUN_0048aff8(uVar3,iVar6,iVar5,0x10)" (identifier "iVar4") (= "=") (call_expression "FUN_0048aff8(uVar3,iVar6,iVar5,0x10)" (identifier "FUN_0048aff8") (argument_list "(uVar3,iVar6,iVar5,0x10)" (( "(") (identifier "uVar3") (, ",") (identifier "iVar6") (, ",") (identifier "iVar5") (, ",") (number_literal "0x10") () ")")))) (, ",") (binary_expression "iVar4 != 0" (identifier "iVar4") (!= "!=") (number_literal "0"))) () ")"))) () ")")) (; ";"))) (expression_statement "FUN_0048ab0c(iVar5,&DAT_0048d874,0);" (call_expression "FUN_0048ab0c(iVar5,&DAT_0048d874,0)" (identifier "FUN_0048ab0c") (argument_list "(iVar5,&DAT_0048d874,0)" (( "(") (identifier "iVar5") (, ",") (pointer_expression "&DAT_0048d874" (& "&") (identifier "DAT_0048d874")) (, ",") (number_literal "0") () ")"))) (; ";")) (expression_statement "FUN_0048ab0c(iVar6,&DAT_0048d874,0);" (call_expression "FUN_0048ab0c(iVar6,&DAT_0048d874,0)" (identifier "FUN_0048ab0c") (argument_list "(iVar6,&DAT_0048d874,0)" (( "(") (identifier "iVar6") (, ",") (pointer_expression "&DAT_0048d874" (& "&") (identifier "DAT_0048d874")) (, ",") (number_literal "0") () ")"))) (; ";")) (expression_statement "*param_6 = 0xc;" (assignment_expression "*param_6 = 0xc" (pointer_expression "*param_6" (* "*") (identifier "param_6")) (= "=") (number_literal "0xc")) (; ";")) (expression_statement "iVar4 = 0;" (assignment_expression "iVar4 = 0" (identifier "iVar4") (= "=") (number_literal "0")) (; ";")) (} "}"))) (return_statement "return iVar4;" (return "return") (identifier "iVar4") (; ";")) (} "}")))

/* WARNING: Unknown calling convention */

type_1 *
function_1(type_2 *regexp,type_3 *preg,type_4 *token,type_5 syntax,type_6 var_4,
            type_7 *err)

{
  type_1 *pbVar1;
  type_1 *var_8;
  type_8 *dfa;
  type_1 *var_3;
  type_1 *var_6;
  type_1 *var_5;
  
  dfa = preg->buffer;
  var_3 = var_1(regexp,preg,token,syntax,var_4,err);
  if ((*err == var_2) || (var_3 != (type_1 *)0x0)) {
LAB_00498e20:
    do {
      var_5 = var_3;
      if ((token->field_0x4 & 0xf7) == 2) {
        return var_5;
      }
      if ((var_4 != 0) && (token->field_0x4 == 9)) {
        return var_5;
      }
      var_6 = var_1(regexp,preg,token,syntax,var_4,err);
      if (*err == var_2) {
        var_3 = var_6;
        pbVar1 = var_5;
        var_8 = var_6;
        if (var_5 == (type_1 *)0x0) goto LAB_00498e20;
      }
      else {
        pbVar1 = var_6;
        var_8 = var_5;
        if (var_6 == (type_1 *)0x0) {
          if (var_5 == (type_1 *)0x0) {
            return (type_1 *)0x0;
          }
          var_7(var_5,free_tree,(void *)0x0);
          return (type_1 *)0x0;
        }
      }
      var_3 = pbVar1;
    } while ((var_8 == (type_1 *)0x0) ||
            (var_3 = var_9(dfa,var_5,var_6,CONCAT), var_3 != (type_1 *)0x0));
    var_7(var_6,free_tree,(void *)0x0);
    var_7(var_5,free_tree,(void *)0x0);
    *err = _REG_ESPACE;
    var_3 = (type_1 *)0x0;
  }
  return var_3;
}


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

int MASKED(undefined4 param_1,undefined4 *param_2,int param_3,undefined4 param_4,int param_5,
                int *param_6)

{
  int iVar1;
  int iVar2;
  undefined4 uVar3;
  int iVar4;
  int iVar5;
  int iVar6;
  
  uVar3 = *param_2;
  iVar4 = FUN_00497680();
  if ((*param_6 == 0) || (iVar4 != 0)) {
LAB_00498e20:
    do {
      iVar6 = iVar4;
      if ((*(byte *)(param_3 + 4) & 0xf7) == 2) {
        return iVar6;
      }
      if ((param_5 != 0) && (*(byte *)(param_3 + 4) == 9)) {
        return iVar6;
      }
      iVar5 = FUN_00497680(param_1,param_2,param_3,param_4,param_5,param_6);
      if (*param_6 == 0) {
        iVar4 = iVar5;
        iVar1 = iVar6;
        iVar2 = iVar5;
        if (iVar6 == 0) goto LAB_00498e20;
      }
      else {
        iVar1 = iVar5;
        iVar2 = iVar6;
        if (iVar5 == 0) {
          if (iVar6 == 0) {
            return 0;
          }
          FUN_0048ab0c(iVar6,&DAT_0048d874,0);
          return 0;
        }
      }
      iVar4 = iVar1;
    } while ((iVar2 == 0) || (iVar4 = FUN_0048aff8(uVar3,iVar6,iVar5,0x10), iVar4 != 0));
    FUN_0048ab0c(iVar5,&DAT_0048d874,0);
    FUN_0048ab0c(iVar6,&DAT_0048d874,0);
    *param_6 = 0xc;
    iVar4 = 0;
  }
  return iVar4;
}

