
int saveCursorsOnList(BtCursor *p,Pgno iRoot,BtCursor *pExcept)

{
  int iVar1;
  code *pcVar2;
  
  pcVar2 = (code *)(PTR_LAB_00190ba8 + 0x788c);
  do {
    if ((p == pExcept) || ((iRoot != 0 && (p->pgnoRoot != iRoot)))) {
LAB_000ce31c:
      p = p->pNext;
    }
    else {
      if ((p->eState & 0xfd) == 0) {
        iVar1 = saveCursorPosition(p);
        if (iVar1 != 0) {
          return iVar1;
        }
        goto LAB_000ce31c;
      }
      (*pcVar2)();
      p = p->pNext;
    }
    if (p == (BtCursor *)0x0) {
      return 0;
    }
  } while( true );
}



int FUN_000ce2bc(byte *param_1,int param_2,byte *param_3)

{
  int iVar1;
  code *pcVar2;
  
  pcVar2 = (code *)(PTR_LAB_00190ba8 + 0x788c);
  do {
    if ((param_1 == param_3) || ((param_2 != 0 && (*(int *)(param_1 + 0x40) != param_2)))) {
LAB_000ce31c:
      param_1 = *(byte **)(param_1 + 0x18);
    }
    else {
      if ((*param_1 & 0xfd) == 0) {
        iVar1 = FUN_000ce1e8(param_1);
        if (iVar1 != 0) {
          return iVar1;
        }
        goto LAB_000ce31c;
      }
      (*pcVar2)();
      param_1 = *(byte **)(param_1 + 0x18);
    }
    if (param_1 == (byte *)0x0) {
      return 0;
    }
  } while( true );
}


lui gp,0xd
addiu gp,gp,-0x599c
addu gp,gp,t9
addiu sp,sp,-0x38
sw s5,0x30(sp)
sw s4,0x2c(sp)
sw gp,0x10(sp)
sw s3,0x28(sp)
li s3,-0x3
sw s2,0x24(sp)
or s2,a2,zero
sw s1,0x20(sp)
or s1,a1,zero
sw s0,0x1c(sp)
or s0,a0,zero
sw ra,0x34(sp)
lw s5,-0x7d78(gp)
lw s4,-0x7d64(gp)
addiu s5,s5,0x788c
b 0x000ce328
_addiu s4,s4,-0x1e18
lw v0,0x40(s0)
beq v0,s1,0x000ce338
_nop
lw s0,0x18(s0)
beq s0,zero,0x000ce360
_lw ra,0x34(sp)
beq s0,s2,0x000ce31c
_nop
bne s1,zero,0x000ce310
_nop
lbu v0,0x0(s0)
and v0,s3,v0
beq v0,zero,0x000ce384
_or a0,s0,zero
or t9,s5,zero
jalr t9
_nop
lw s0,0x18(s0)
bne s0,zero,0x000ce328
_lw ra,0x34(sp)
or v0,zero,zero
lw s5,0x30(sp)
lw s4,0x2c(sp)
lw s3,0x28(sp)
lw s2,0x24(sp)
lw s1,0x20(sp)
lw s0,0x1c(sp)
jr ra
_addiu sp,sp,0x38
or t9,s4,zero
bal 0x000ce1e8
_nop
beq v0,zero,0x000ce31c
_lw ra,0x34(sp)
lw s5,0x30(sp)
lw s4,0x2c(sp)
lw s3,0x28(sp)
lw s2,0x24(sp)
lw s1,0x20(sp)
lw s0,0x1c(sp)
jr ra
_addiu sp,sp,0x38
(translation_unit "int FUN_000ce2bc(byte *param_1,int param_2,byte *param_3)\n\n{\n  int iVar1;\n  code *pcVar2;\n  \n  pcVar2 = (code *)(PTR_LAB_00190ba8 + 0x788c);\n  do {\n    if ((param_1 == param_3) || ((param_2 != 0 && (*(int *)(param_1 + 0x40) != param_2)))) {\nLAB_000ce31c:\n      param_1 = *(byte **)(param_1 + 0x18);\n    }\n    else {\n      if ((*param_1 & 0xfd) == 0) {\n        iVar1 = FUN_000ce1e8(param_1);\n        if (iVar1 != 0) {\n          return iVar1;\n        }\n        goto LAB_000ce31c;\n      }\n      (*pcVar2)();\n      param_1 = *(byte **)(param_1 + 0x18);\n    }\n    if (param_1 == (byte *)0x0) {\n      return 0;\n    }\n  } while( true );\n}\n\n" (function_definition "int FUN_000ce2bc(byte *param_1,int param_2,byte *param_3)\n\n{\n  int iVar1;\n  code *pcVar2;\n  \n  pcVar2 = (code *)(PTR_LAB_00190ba8 + 0x788c);\n  do {\n    if ((param_1 == param_3) || ((param_2 != 0 && (*(int *)(param_1 + 0x40) != param_2)))) {\nLAB_000ce31c:\n      param_1 = *(byte **)(param_1 + 0x18);\n    }\n    else {\n      if ((*param_1 & 0xfd) == 0) {\n        iVar1 = FUN_000ce1e8(param_1);\n        if (iVar1 != 0) {\n          return iVar1;\n        }\n        goto LAB_000ce31c;\n      }\n      (*pcVar2)();\n      param_1 = *(byte **)(param_1 + 0x18);\n    }\n    if (param_1 == (byte *)0x0) {\n      return 0;\n    }\n  } while( true );\n}" primitive_type (function_declarator "FUN_000ce2bc(byte *param_1,int param_2,byte *param_3)" identifier (parameter_list "(byte *param_1,int param_2,byte *param_3)" ( (parameter_declaration "byte *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "byte *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) ))) (compound_statement "{\n  int iVar1;\n  code *pcVar2;\n  \n  pcVar2 = (code *)(PTR_LAB_00190ba8 + 0x788c);\n  do {\n    if ((param_1 == param_3) || ((param_2 != 0 && (*(int *)(param_1 + 0x40) != param_2)))) {\nLAB_000ce31c:\n      param_1 = *(byte **)(param_1 + 0x18);\n    }\n    else {\n      if ((*param_1 & 0xfd) == 0) {\n        iVar1 = FUN_000ce1e8(param_1);\n        if (iVar1 != 0) {\n          return iVar1;\n        }\n        goto LAB_000ce31c;\n      }\n      (*pcVar2)();\n      param_1 = *(byte **)(param_1 + 0x18);\n    }\n    if (param_1 == (byte *)0x0) {\n      return 0;\n    }\n  } while( true );\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "code *pcVar2;" type_identifier (pointer_declarator "*pcVar2" * identifier) ;) (expression_statement "pcVar2 = (code *)(PTR_LAB_00190ba8 + 0x788c);" (assignment_expression "pcVar2 = (code *)(PTR_LAB_00190ba8 + 0x788c)" identifier = (cast_expression "(code *)(PTR_LAB_00190ba8 + 0x788c)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_00190ba8 + 0x788c)" ( (binary_expression "PTR_LAB_00190ba8 + 0x788c" identifier + number_literal) )))) ;) (do_statement "do {\n    if ((param_1 == param_3) || ((param_2 != 0 && (*(int *)(param_1 + 0x40) != param_2)))) {\nLAB_000ce31c:\n      param_1 = *(byte **)(param_1 + 0x18);\n    }\n    else {\n      if ((*param_1 & 0xfd) == 0) {\n        iVar1 = FUN_000ce1e8(param_1);\n        if (iVar1 != 0) {\n          return iVar1;\n        }\n        goto LAB_000ce31c;\n      }\n      (*pcVar2)();\n      param_1 = *(byte **)(param_1 + 0x18);\n    }\n    if (param_1 == (byte *)0x0) {\n      return 0;\n    }\n  } while( true );" do (compound_statement "{\n    if ((param_1 == param_3) || ((param_2 != 0 && (*(int *)(param_1 + 0x40) != param_2)))) {\nLAB_000ce31c:\n      param_1 = *(byte **)(param_1 + 0x18);\n    }\n    else {\n      if ((*param_1 & 0xfd) == 0) {\n        iVar1 = FUN_000ce1e8(param_1);\n        if (iVar1 != 0) {\n          return iVar1;\n        }\n        goto LAB_000ce31c;\n      }\n      (*pcVar2)();\n      param_1 = *(byte **)(param_1 + 0x18);\n    }\n    if (param_1 == (byte *)0x0) {\n      return 0;\n    }\n  }" { (if_statement "if ((param_1 == param_3) || ((param_2 != 0 && (*(int *)(param_1 + 0x40) != param_2)))) {\nLAB_000ce31c:\n      param_1 = *(byte **)(param_1 + 0x18);\n    }\n    else {\n      if ((*param_1 & 0xfd) == 0) {\n        iVar1 = FUN_000ce1e8(param_1);\n        if (iVar1 != 0) {\n          return iVar1;\n        }\n        goto LAB_000ce31c;\n      }\n      (*pcVar2)();\n      param_1 = *(byte **)(param_1 + 0x18);\n    }" if (parenthesized_expression "((param_1 == param_3) || ((param_2 != 0 && (*(int *)(param_1 + 0x40) != param_2))))" ( (binary_expression "(param_1 == param_3) || ((param_2 != 0 && (*(int *)(param_1 + 0x40) != param_2)))" (parenthesized_expression "(param_1 == param_3)" ( (binary_expression "param_1 == param_3" identifier == identifier) )) || (parenthesized_expression "((param_2 != 0 && (*(int *)(param_1 + 0x40) != param_2)))" ( (parenthesized_expression "(param_2 != 0 && (*(int *)(param_1 + 0x40) != param_2))" ( (binary_expression "param_2 != 0 && (*(int *)(param_1 + 0x40) != param_2)" (binary_expression "param_2 != 0" identifier != number_literal) && (parenthesized_expression "(*(int *)(param_1 + 0x40) != param_2)" ( (binary_expression "*(int *)(param_1 + 0x40) != param_2" (pointer_expression "*(int *)(param_1 + 0x40)" * (cast_expression "(int *)(param_1 + 0x40)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) )))) != identifier) ))) )) ))) )) (compound_statement "{\nLAB_000ce31c:\n      param_1 = *(byte **)(param_1 + 0x18);\n    }" { (labeled_statement "LAB_000ce31c:\n      param_1 = *(byte **)(param_1 + 0x18);" statement_identifier : (expression_statement "param_1 = *(byte **)(param_1 + 0x18);" (assignment_expression "param_1 = *(byte **)(param_1 + 0x18)" identifier = (pointer_expression "*(byte **)(param_1 + 0x18)" * (cast_expression "(byte **)(param_1 + 0x18)" ( (type_descriptor "byte **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) ))))) ;)) }) (else_clause "else {\n      if ((*param_1 & 0xfd) == 0) {\n        iVar1 = FUN_000ce1e8(param_1);\n        if (iVar1 != 0) {\n          return iVar1;\n        }\n        goto LAB_000ce31c;\n      }\n      (*pcVar2)();\n      param_1 = *(byte **)(param_1 + 0x18);\n    }" else (compound_statement "{\n      if ((*param_1 & 0xfd) == 0) {\n        iVar1 = FUN_000ce1e8(param_1);\n        if (iVar1 != 0) {\n          return iVar1;\n        }\n        goto LAB_000ce31c;\n      }\n      (*pcVar2)();\n      param_1 = *(byte **)(param_1 + 0x18);\n    }" { (if_statement "if ((*param_1 & 0xfd) == 0) {\n        iVar1 = FUN_000ce1e8(param_1);\n        if (iVar1 != 0) {\n          return iVar1;\n        }\n        goto LAB_000ce31c;\n      }" if (parenthesized_expression "((*param_1 & 0xfd) == 0)" ( (binary_expression "(*param_1 & 0xfd) == 0" (parenthesized_expression "(*param_1 & 0xfd)" ( (binary_expression "*param_1 & 0xfd" (pointer_expression "*param_1" * identifier) & number_literal) )) == number_literal) )) (compound_statement "{\n        iVar1 = FUN_000ce1e8(param_1);\n        if (iVar1 != 0) {\n          return iVar1;\n        }\n        goto LAB_000ce31c;\n      }" { (expression_statement "iVar1 = FUN_000ce1e8(param_1);" (assignment_expression "iVar1 = FUN_000ce1e8(param_1)" identifier = (call_expression "FUN_000ce1e8(param_1)" identifier (argument_list "(param_1)" ( identifier )))) ;) (if_statement "if (iVar1 != 0) {\n          return iVar1;\n        }" if (parenthesized_expression "(iVar1 != 0)" ( (binary_expression "iVar1 != 0" identifier != number_literal) )) (compound_statement "{\n          return iVar1;\n        }" { (return_statement "return iVar1;" return identifier ;) })) (goto_statement "goto LAB_000ce31c;" goto statement_identifier ;) })) (expression_statement "(*pcVar2)();" (call_expression "(*pcVar2)()" (parenthesized_expression "(*pcVar2)" ( (pointer_expression "*pcVar2" * identifier) )) (argument_list "()" ( ))) ;) (expression_statement "param_1 = *(byte **)(param_1 + 0x18);" (assignment_expression "param_1 = *(byte **)(param_1 + 0x18)" identifier = (pointer_expression "*(byte **)(param_1 + 0x18)" * (cast_expression "(byte **)(param_1 + 0x18)" ( (type_descriptor "byte **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) ))))) ;) }))) (if_statement "if (param_1 == (byte *)0x0) {\n      return 0;\n    }" if (parenthesized_expression "(param_1 == (byte *)0x0)" ( (binary_expression "param_1 == (byte *)0x0" identifier == (cast_expression "(byte *)0x0" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) }) while (parenthesized_expression "( true )" ( true )) ;) })))
(translation_unit "int saveCursorsOnList(BtCursor *p,Pgno iRoot,BtCursor *pExcept)\n\n{\n  int iVar1;\n  code *pcVar2;\n  \n  pcVar2 = (code *)(PTR_LAB_00190ba8 + 0x788c);\n  do {\n    if ((p == pExcept) || ((iRoot != 0 && (p->pgnoRoot != iRoot)))) {\nLAB_000ce31c:\n      p = p->pNext;\n    }\n    else {\n      if ((p->eState & 0xfd) == 0) {\n        iVar1 = saveCursorPosition(p);\n        if (iVar1 != 0) {\n          return iVar1;\n        }\n        goto LAB_000ce31c;\n      }\n      (*pcVar2)();\n      p = p->pNext;\n    }\n    if (p == (BtCursor *)0x0) {\n      return 0;\n    }\n  } while( true );\n}\n\n" (function_definition "int saveCursorsOnList(BtCursor *p,Pgno iRoot,BtCursor *pExcept)\n\n{\n  int iVar1;\n  code *pcVar2;\n  \n  pcVar2 = (code *)(PTR_LAB_00190ba8 + 0x788c);\n  do {\n    if ((p == pExcept) || ((iRoot != 0 && (p->pgnoRoot != iRoot)))) {\nLAB_000ce31c:\n      p = p->pNext;\n    }\n    else {\n      if ((p->eState & 0xfd) == 0) {\n        iVar1 = saveCursorPosition(p);\n        if (iVar1 != 0) {\n          return iVar1;\n        }\n        goto LAB_000ce31c;\n      }\n      (*pcVar2)();\n      p = p->pNext;\n    }\n    if (p == (BtCursor *)0x0) {\n      return 0;\n    }\n  } while( true );\n}" primitive_type (function_declarator "saveCursorsOnList(BtCursor *p,Pgno iRoot,BtCursor *pExcept)" identifier (parameter_list "(BtCursor *p,Pgno iRoot,BtCursor *pExcept)" ( (parameter_declaration "BtCursor *p" type_identifier (pointer_declarator "*p" * identifier)) , (parameter_declaration "Pgno iRoot" type_identifier identifier) , (parameter_declaration "BtCursor *pExcept" type_identifier (pointer_declarator "*pExcept" * identifier)) ))) (compound_statement "{\n  int iVar1;\n  code *pcVar2;\n  \n  pcVar2 = (code *)(PTR_LAB_00190ba8 + 0x788c);\n  do {\n    if ((p == pExcept) || ((iRoot != 0 && (p->pgnoRoot != iRoot)))) {\nLAB_000ce31c:\n      p = p->pNext;\n    }\n    else {\n      if ((p->eState & 0xfd) == 0) {\n        iVar1 = saveCursorPosition(p);\n        if (iVar1 != 0) {\n          return iVar1;\n        }\n        goto LAB_000ce31c;\n      }\n      (*pcVar2)();\n      p = p->pNext;\n    }\n    if (p == (BtCursor *)0x0) {\n      return 0;\n    }\n  } while( true );\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "code *pcVar2;" type_identifier (pointer_declarator "*pcVar2" * identifier) ;) (expression_statement "pcVar2 = (code *)(PTR_LAB_00190ba8 + 0x788c);" (assignment_expression "pcVar2 = (code *)(PTR_LAB_00190ba8 + 0x788c)" identifier = (cast_expression "(code *)(PTR_LAB_00190ba8 + 0x788c)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_00190ba8 + 0x788c)" ( (binary_expression "PTR_LAB_00190ba8 + 0x788c" identifier + number_literal) )))) ;) (do_statement "do {\n    if ((p == pExcept) || ((iRoot != 0 && (p->pgnoRoot != iRoot)))) {\nLAB_000ce31c:\n      p = p->pNext;\n    }\n    else {\n      if ((p->eState & 0xfd) == 0) {\n        iVar1 = saveCursorPosition(p);\n        if (iVar1 != 0) {\n          return iVar1;\n        }\n        goto LAB_000ce31c;\n      }\n      (*pcVar2)();\n      p = p->pNext;\n    }\n    if (p == (BtCursor *)0x0) {\n      return 0;\n    }\n  } while( true );" do (compound_statement "{\n    if ((p == pExcept) || ((iRoot != 0 && (p->pgnoRoot != iRoot)))) {\nLAB_000ce31c:\n      p = p->pNext;\n    }\n    else {\n      if ((p->eState & 0xfd) == 0) {\n        iVar1 = saveCursorPosition(p);\n        if (iVar1 != 0) {\n          return iVar1;\n        }\n        goto LAB_000ce31c;\n      }\n      (*pcVar2)();\n      p = p->pNext;\n    }\n    if (p == (BtCursor *)0x0) {\n      return 0;\n    }\n  }" { (if_statement "if ((p == pExcept) || ((iRoot != 0 && (p->pgnoRoot != iRoot)))) {\nLAB_000ce31c:\n      p = p->pNext;\n    }\n    else {\n      if ((p->eState & 0xfd) == 0) {\n        iVar1 = saveCursorPosition(p);\n        if (iVar1 != 0) {\n          return iVar1;\n        }\n        goto LAB_000ce31c;\n      }\n      (*pcVar2)();\n      p = p->pNext;\n    }" if (parenthesized_expression "((p == pExcept) || ((iRoot != 0 && (p->pgnoRoot != iRoot))))" ( (binary_expression "(p == pExcept) || ((iRoot != 0 && (p->pgnoRoot != iRoot)))" (parenthesized_expression "(p == pExcept)" ( (binary_expression "p == pExcept" identifier == identifier) )) || (parenthesized_expression "((iRoot != 0 && (p->pgnoRoot != iRoot)))" ( (parenthesized_expression "(iRoot != 0 && (p->pgnoRoot != iRoot))" ( (binary_expression "iRoot != 0 && (p->pgnoRoot != iRoot)" (binary_expression "iRoot != 0" identifier != number_literal) && (parenthesized_expression "(p->pgnoRoot != iRoot)" ( (binary_expression "p->pgnoRoot != iRoot" (field_expression "p->pgnoRoot" identifier -> field_identifier) != identifier) ))) )) ))) )) (compound_statement "{\nLAB_000ce31c:\n      p = p->pNext;\n    }" { (labeled_statement "LAB_000ce31c:\n      p = p->pNext;" statement_identifier : (expression_statement "p = p->pNext;" (assignment_expression "p = p->pNext" identifier = (field_expression "p->pNext" identifier -> field_identifier)) ;)) }) (else_clause "else {\n      if ((p->eState & 0xfd) == 0) {\n        iVar1 = saveCursorPosition(p);\n        if (iVar1 != 0) {\n          return iVar1;\n        }\n        goto LAB_000ce31c;\n      }\n      (*pcVar2)();\n      p = p->pNext;\n    }" else (compound_statement "{\n      if ((p->eState & 0xfd) == 0) {\n        iVar1 = saveCursorPosition(p);\n        if (iVar1 != 0) {\n          return iVar1;\n        }\n        goto LAB_000ce31c;\n      }\n      (*pcVar2)();\n      p = p->pNext;\n    }" { (if_statement "if ((p->eState & 0xfd) == 0) {\n        iVar1 = saveCursorPosition(p);\n        if (iVar1 != 0) {\n          return iVar1;\n        }\n        goto LAB_000ce31c;\n      }" if (parenthesized_expression "((p->eState & 0xfd) == 0)" ( (binary_expression "(p->eState & 0xfd) == 0" (parenthesized_expression "(p->eState & 0xfd)" ( (binary_expression "p->eState & 0xfd" (field_expression "p->eState" identifier -> field_identifier) & number_literal) )) == number_literal) )) (compound_statement "{\n        iVar1 = saveCursorPosition(p);\n        if (iVar1 != 0) {\n          return iVar1;\n        }\n        goto LAB_000ce31c;\n      }" { (expression_statement "iVar1 = saveCursorPosition(p);" (assignment_expression "iVar1 = saveCursorPosition(p)" identifier = (call_expression "saveCursorPosition(p)" identifier (argument_list "(p)" ( identifier )))) ;) (if_statement "if (iVar1 != 0) {\n          return iVar1;\n        }" if (parenthesized_expression "(iVar1 != 0)" ( (binary_expression "iVar1 != 0" identifier != number_literal) )) (compound_statement "{\n          return iVar1;\n        }" { (return_statement "return iVar1;" return identifier ;) })) (goto_statement "goto LAB_000ce31c;" goto statement_identifier ;) })) (expression_statement "(*pcVar2)();" (call_expression "(*pcVar2)()" (parenthesized_expression "(*pcVar2)" ( (pointer_expression "*pcVar2" * identifier) )) (argument_list "()" ( ))) ;) (expression_statement "p = p->pNext;" (assignment_expression "p = p->pNext" identifier = (field_expression "p->pNext" identifier -> field_identifier)) ;) }))) (if_statement "if (p == (BtCursor *)0x0) {\n      return 0;\n    }" if (parenthesized_expression "(p == (BtCursor *)0x0)" ( (binary_expression "p == (BtCursor *)0x0" identifier == (cast_expression "(BtCursor *)0x0" ( (type_descriptor "BtCursor *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) }) while (parenthesized_expression "( true )" ( true )) ;) })))
(translation_unit "int FUN_000ce2bc(byte *param_1,int param_2,byte *param_3)\n\n{\n  int iVar1;\n  code *pcVar2;\n  \n  pcVar2 = (code *)(PTR_LAB_00190ba8 + 0x788c);\n  do {\n    if ((param_1 == param_3) || ((param_2 != 0 && (*(int *)(param_1 + 0x40) != param_2)))) {\nLAB_000ce31c:\n      param_1 = *(byte **)(param_1 + 0x18);\n    }\n    else {\n      if ((*param_1 & 0xfd) == 0) {\n        iVar1 = FUN_000ce1e8(param_1);\n        if (iVar1 != 0) {\n          return iVar1;\n        }\n        goto LAB_000ce31c;\n      }\n      (*pcVar2)();\n      param_1 = *(byte **)(param_1 + 0x18);\n    }\n    if (param_1 == (byte *)0x0) {\n      return 0;\n    }\n  } while( true );\n}\n\n" (function_definition "int FUN_000ce2bc(byte *param_1,int param_2,byte *param_3)\n\n{\n  int iVar1;\n  code *pcVar2;\n  \n  pcVar2 = (code *)(PTR_LAB_00190ba8 + 0x788c);\n  do {\n    if ((param_1 == param_3) || ((param_2 != 0 && (*(int *)(param_1 + 0x40) != param_2)))) {\nLAB_000ce31c:\n      param_1 = *(byte **)(param_1 + 0x18);\n    }\n    else {\n      if ((*param_1 & 0xfd) == 0) {\n        iVar1 = FUN_000ce1e8(param_1);\n        if (iVar1 != 0) {\n          return iVar1;\n        }\n        goto LAB_000ce31c;\n      }\n      (*pcVar2)();\n      param_1 = *(byte **)(param_1 + 0x18);\n    }\n    if (param_1 == (byte *)0x0) {\n      return 0;\n    }\n  } while( true );\n}" primitive_type (function_declarator "FUN_000ce2bc(byte *param_1,int param_2,byte *param_3)" identifier (parameter_list "(byte *param_1,int param_2,byte *param_3)" ( (parameter_declaration "byte *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "byte *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) ))) (compound_statement "{\n  int iVar1;\n  code *pcVar2;\n  \n  pcVar2 = (code *)(PTR_LAB_00190ba8 + 0x788c);\n  do {\n    if ((param_1 == param_3) || ((param_2 != 0 && (*(int *)(param_1 + 0x40) != param_2)))) {\nLAB_000ce31c:\n      param_1 = *(byte **)(param_1 + 0x18);\n    }\n    else {\n      if ((*param_1 & 0xfd) == 0) {\n        iVar1 = FUN_000ce1e8(param_1);\n        if (iVar1 != 0) {\n          return iVar1;\n        }\n        goto LAB_000ce31c;\n      }\n      (*pcVar2)();\n      param_1 = *(byte **)(param_1 + 0x18);\n    }\n    if (param_1 == (byte *)0x0) {\n      return 0;\n    }\n  } while( true );\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "code *pcVar2;" type_identifier (pointer_declarator "*pcVar2" * identifier) ;) (expression_statement "pcVar2 = (code *)(PTR_LAB_00190ba8 + 0x788c);" (assignment_expression "pcVar2 = (code *)(PTR_LAB_00190ba8 + 0x788c)" identifier = (cast_expression "(code *)(PTR_LAB_00190ba8 + 0x788c)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_00190ba8 + 0x788c)" ( (binary_expression "PTR_LAB_00190ba8 + 0x788c" identifier + number_literal) )))) ;) (do_statement "do {\n    if ((param_1 == param_3) || ((param_2 != 0 && (*(int *)(param_1 + 0x40) != param_2)))) {\nLAB_000ce31c:\n      param_1 = *(byte **)(param_1 + 0x18);\n    }\n    else {\n      if ((*param_1 & 0xfd) == 0) {\n        iVar1 = FUN_000ce1e8(param_1);\n        if (iVar1 != 0) {\n          return iVar1;\n        }\n        goto LAB_000ce31c;\n      }\n      (*pcVar2)();\n      param_1 = *(byte **)(param_1 + 0x18);\n    }\n    if (param_1 == (byte *)0x0) {\n      return 0;\n    }\n  } while( true );" do (compound_statement "{\n    if ((param_1 == param_3) || ((param_2 != 0 && (*(int *)(param_1 + 0x40) != param_2)))) {\nLAB_000ce31c:\n      param_1 = *(byte **)(param_1 + 0x18);\n    }\n    else {\n      if ((*param_1 & 0xfd) == 0) {\n        iVar1 = FUN_000ce1e8(param_1);\n        if (iVar1 != 0) {\n          return iVar1;\n        }\n        goto LAB_000ce31c;\n      }\n      (*pcVar2)();\n      param_1 = *(byte **)(param_1 + 0x18);\n    }\n    if (param_1 == (byte *)0x0) {\n      return 0;\n    }\n  }" { (if_statement "if ((param_1 == param_3) || ((param_2 != 0 && (*(int *)(param_1 + 0x40) != param_2)))) {\nLAB_000ce31c:\n      param_1 = *(byte **)(param_1 + 0x18);\n    }\n    else {\n      if ((*param_1 & 0xfd) == 0) {\n        iVar1 = FUN_000ce1e8(param_1);\n        if (iVar1 != 0) {\n          return iVar1;\n        }\n        goto LAB_000ce31c;\n      }\n      (*pcVar2)();\n      param_1 = *(byte **)(param_1 + 0x18);\n    }" if (parenthesized_expression "((param_1 == param_3) || ((param_2 != 0 && (*(int *)(param_1 + 0x40) != param_2))))" ( (binary_expression "(param_1 == param_3) || ((param_2 != 0 && (*(int *)(param_1 + 0x40) != param_2)))" (parenthesized_expression "(param_1 == param_3)" ( (binary_expression "param_1 == param_3" identifier == identifier) )) || (parenthesized_expression "((param_2 != 0 && (*(int *)(param_1 + 0x40) != param_2)))" ( (parenthesized_expression "(param_2 != 0 && (*(int *)(param_1 + 0x40) != param_2))" ( (binary_expression "param_2 != 0 && (*(int *)(param_1 + 0x40) != param_2)" (binary_expression "param_2 != 0" identifier != number_literal) && (parenthesized_expression "(*(int *)(param_1 + 0x40) != param_2)" ( (binary_expression "*(int *)(param_1 + 0x40) != param_2" (pointer_expression "*(int *)(param_1 + 0x40)" * (cast_expression "(int *)(param_1 + 0x40)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) )))) != identifier) ))) )) ))) )) (compound_statement "{\nLAB_000ce31c:\n      param_1 = *(byte **)(param_1 + 0x18);\n    }" { (labeled_statement "LAB_000ce31c:\n      param_1 = *(byte **)(param_1 + 0x18);" statement_identifier : (expression_statement "param_1 = *(byte **)(param_1 + 0x18);" (assignment_expression "param_1 = *(byte **)(param_1 + 0x18)" identifier = (pointer_expression "*(byte **)(param_1 + 0x18)" * (cast_expression "(byte **)(param_1 + 0x18)" ( (type_descriptor "byte **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) ))))) ;)) }) (else_clause "else {\n      if ((*param_1 & 0xfd) == 0) {\n        iVar1 = FUN_000ce1e8(param_1);\n        if (iVar1 != 0) {\n          return iVar1;\n        }\n        goto LAB_000ce31c;\n      }\n      (*pcVar2)();\n      param_1 = *(byte **)(param_1 + 0x18);\n    }" else (compound_statement "{\n      if ((*param_1 & 0xfd) == 0) {\n        iVar1 = FUN_000ce1e8(param_1);\n        if (iVar1 != 0) {\n          return iVar1;\n        }\n        goto LAB_000ce31c;\n      }\n      (*pcVar2)();\n      param_1 = *(byte **)(param_1 + 0x18);\n    }" { (if_statement "if ((*param_1 & 0xfd) == 0) {\n        iVar1 = FUN_000ce1e8(param_1);\n        if (iVar1 != 0) {\n          return iVar1;\n        }\n        goto LAB_000ce31c;\n      }" if (parenthesized_expression "((*param_1 & 0xfd) == 0)" ( (binary_expression "(*param_1 & 0xfd) == 0" (parenthesized_expression "(*param_1 & 0xfd)" ( (binary_expression "*param_1 & 0xfd" (pointer_expression "*param_1" * identifier) & number_literal) )) == number_literal) )) (compound_statement "{\n        iVar1 = FUN_000ce1e8(param_1);\n        if (iVar1 != 0) {\n          return iVar1;\n        }\n        goto LAB_000ce31c;\n      }" { (expression_statement "iVar1 = FUN_000ce1e8(param_1);" (assignment_expression "iVar1 = FUN_000ce1e8(param_1)" identifier = (call_expression "FUN_000ce1e8(param_1)" identifier (argument_list "(param_1)" ( identifier )))) ;) (if_statement "if (iVar1 != 0) {\n          return iVar1;\n        }" if (parenthesized_expression "(iVar1 != 0)" ( (binary_expression "iVar1 != 0" identifier != number_literal) )) (compound_statement "{\n          return iVar1;\n        }" { (return_statement "return iVar1;" return identifier ;) })) (goto_statement "goto LAB_000ce31c;" goto statement_identifier ;) })) (expression_statement "(*pcVar2)();" (call_expression "(*pcVar2)()" (parenthesized_expression "(*pcVar2)" ( (pointer_expression "*pcVar2" * identifier) )) (argument_list "()" ( ))) ;) (expression_statement "param_1 = *(byte **)(param_1 + 0x18);" (assignment_expression "param_1 = *(byte **)(param_1 + 0x18)" identifier = (pointer_expression "*(byte **)(param_1 + 0x18)" * (cast_expression "(byte **)(param_1 + 0x18)" ( (type_descriptor "byte **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) ))))) ;) }))) (if_statement "if (param_1 == (byte *)0x0) {\n      return 0;\n    }" if (parenthesized_expression "(param_1 == (byte *)0x0)" ( (binary_expression "param_1 == (byte *)0x0" identifier == (cast_expression "(byte *)0x0" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) }) while (parenthesized_expression "( true )" ( true )) ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) (do_statement do (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == IDENT) )) || (parenthesized_expression ( (parenthesized_expression ( (binary_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) )))) != IDENT) ))) )) ))) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;)) }) (else_clause else (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) & LIT) )) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (return_statement return IDENT ;) })) (goto_statement goto statement_identifier ;) })) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( ))) ;) (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 == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (return_statement return LIT ;) })) }) while (parenthesized_expression ( BOOL )) ;) })))
(function_definition "int FUN_000ce2bc(byte *param_1,int param_2,byte *param_3)\n\n{\n  int iVar1;\n  code *pcVar2;\n  \n  pcVar2 = (code *)(PTR_LAB_00190ba8 + 0x788c);\n  do {\n    if ((param_1 == param_3) || ((param_2 != 0 && (*(int *)(param_1 + 0x40) != param_2)))) {\nLAB_000ce31c:\n      param_1 = *(byte **)(param_1 + 0x18);\n    }\n    else {\n      if ((*param_1 & 0xfd) == 0) {\n        iVar1 = FUN_000ce1e8(param_1);\n        if (iVar1 != 0) {\n          return iVar1;\n        }\n        goto LAB_000ce31c;\n      }\n      (*pcVar2)();\n      param_1 = *(byte **)(param_1 + 0x18);\n    }\n    if (param_1 == (byte *)0x0) {\n      return 0;\n    }\n  } while( true );\n}" (primitive_type "int") (function_declarator "FUN_000ce2bc(byte *param_1,int param_2,byte *param_3)" (identifier "FUN_000ce2bc") (parameter_list "(byte *param_1,int param_2,byte *param_3)" (( "(") (parameter_declaration "byte *param_1" (type_identifier "byte") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "int param_2" (primitive_type "int") (identifier "param_2")) (, ",") (parameter_declaration "byte *param_3" (type_identifier "byte") (pointer_declarator "*param_3" (* "*") (identifier "param_3"))) () ")"))) (compound_statement "{\n  int iVar1;\n  code *pcVar2;\n  \n  pcVar2 = (code *)(PTR_LAB_00190ba8 + 0x788c);\n  do {\n    if ((param_1 == param_3) || ((param_2 != 0 && (*(int *)(param_1 + 0x40) != param_2)))) {\nLAB_000ce31c:\n      param_1 = *(byte **)(param_1 + 0x18);\n    }\n    else {\n      if ((*param_1 & 0xfd) == 0) {\n        iVar1 = FUN_000ce1e8(param_1);\n        if (iVar1 != 0) {\n          return iVar1;\n        }\n        goto LAB_000ce31c;\n      }\n      (*pcVar2)();\n      param_1 = *(byte **)(param_1 + 0x18);\n    }\n    if (param_1 == (byte *)0x0) {\n      return 0;\n    }\n  } while( true );\n}" ({ "{") (declaration "int iVar1;" (primitive_type "int") (identifier "iVar1") (; ";")) (declaration "code *pcVar2;" (type_identifier "code") (pointer_declarator "*pcVar2" (* "*") (identifier "pcVar2")) (; ";")) (expression_statement "pcVar2 = (code *)(PTR_LAB_00190ba8 + 0x788c);" (assignment_expression "pcVar2 = (code *)(PTR_LAB_00190ba8 + 0x788c)" (identifier "pcVar2") (= "=") (cast_expression "(code *)(PTR_LAB_00190ba8 + 0x788c)" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_LAB_00190ba8 + 0x788c)" (( "(") (binary_expression "PTR_LAB_00190ba8 + 0x788c" (identifier "PTR_LAB_00190ba8") (+ "+") (number_literal "0x788c")) () ")")))) (; ";")) (do_statement "do {\n    if ((param_1 == param_3) || ((param_2 != 0 && (*(int *)(param_1 + 0x40) != param_2)))) {\nLAB_000ce31c:\n      param_1 = *(byte **)(param_1 + 0x18);\n    }\n    else {\n      if ((*param_1 & 0xfd) == 0) {\n        iVar1 = FUN_000ce1e8(param_1);\n        if (iVar1 != 0) {\n          return iVar1;\n        }\n        goto LAB_000ce31c;\n      }\n      (*pcVar2)();\n      param_1 = *(byte **)(param_1 + 0x18);\n    }\n    if (param_1 == (byte *)0x0) {\n      return 0;\n    }\n  } while( true );" (do "do") (compound_statement "{\n    if ((param_1 == param_3) || ((param_2 != 0 && (*(int *)(param_1 + 0x40) != param_2)))) {\nLAB_000ce31c:\n      param_1 = *(byte **)(param_1 + 0x18);\n    }\n    else {\n      if ((*param_1 & 0xfd) == 0) {\n        iVar1 = FUN_000ce1e8(param_1);\n        if (iVar1 != 0) {\n          return iVar1;\n        }\n        goto LAB_000ce31c;\n      }\n      (*pcVar2)();\n      param_1 = *(byte **)(param_1 + 0x18);\n    }\n    if (param_1 == (byte *)0x0) {\n      return 0;\n    }\n  }" ({ "{") (if_statement "if ((param_1 == param_3) || ((param_2 != 0 && (*(int *)(param_1 + 0x40) != param_2)))) {\nLAB_000ce31c:\n      param_1 = *(byte **)(param_1 + 0x18);\n    }\n    else {\n      if ((*param_1 & 0xfd) == 0) {\n        iVar1 = FUN_000ce1e8(param_1);\n        if (iVar1 != 0) {\n          return iVar1;\n        }\n        goto LAB_000ce31c;\n      }\n      (*pcVar2)();\n      param_1 = *(byte **)(param_1 + 0x18);\n    }" (if "if") (parenthesized_expression "((param_1 == param_3) || ((param_2 != 0 && (*(int *)(param_1 + 0x40) != param_2))))" (( "(") (binary_expression "(param_1 == param_3) || ((param_2 != 0 && (*(int *)(param_1 + 0x40) != param_2)))" (parenthesized_expression "(param_1 == param_3)" (( "(") (binary_expression "param_1 == param_3" (identifier "param_1") (== "==") (identifier "param_3")) () ")")) (|| "||") (parenthesized_expression "((param_2 != 0 && (*(int *)(param_1 + 0x40) != param_2)))" (( "(") (parenthesized_expression "(param_2 != 0 && (*(int *)(param_1 + 0x40) != param_2))" (( "(") (binary_expression "param_2 != 0 && (*(int *)(param_1 + 0x40) != param_2)" (binary_expression "param_2 != 0" (identifier "param_2") (!= "!=") (number_literal "0")) (&& "&&") (parenthesized_expression "(*(int *)(param_1 + 0x40) != param_2)" (( "(") (binary_expression "*(int *)(param_1 + 0x40) != param_2" (pointer_expression "*(int *)(param_1 + 0x40)" (* "*") (cast_expression "(int *)(param_1 + 0x40)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x40)" (( "(") (binary_expression "param_1 + 0x40" (identifier "param_1") (+ "+") (number_literal "0x40")) () ")")))) (!= "!=") (identifier "param_2")) () ")"))) () ")")) () ")"))) () ")")) (compound_statement "{\nLAB_000ce31c:\n      param_1 = *(byte **)(param_1 + 0x18);\n    }" ({ "{") (labeled_statement "LAB_000ce31c:\n      param_1 = *(byte **)(param_1 + 0x18);" (statement_identifier "LAB_000ce31c") (: ":") (expression_statement "param_1 = *(byte **)(param_1 + 0x18);" (assignment_expression "param_1 = *(byte **)(param_1 + 0x18)" (identifier "param_1") (= "=") (pointer_expression "*(byte **)(param_1 + 0x18)" (* "*") (cast_expression "(byte **)(param_1 + 0x18)" (( "(") (type_descriptor "byte **" (type_identifier "byte") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x18)" (( "(") (binary_expression "param_1 + 0x18" (identifier "param_1") (+ "+") (number_literal "0x18")) () ")"))))) (; ";"))) (} "}")) (else_clause "else {\n      if ((*param_1 & 0xfd) == 0) {\n        iVar1 = FUN_000ce1e8(param_1);\n        if (iVar1 != 0) {\n          return iVar1;\n        }\n        goto LAB_000ce31c;\n      }\n      (*pcVar2)();\n      param_1 = *(byte **)(param_1 + 0x18);\n    }" (else "else") (compound_statement "{\n      if ((*param_1 & 0xfd) == 0) {\n        iVar1 = FUN_000ce1e8(param_1);\n        if (iVar1 != 0) {\n          return iVar1;\n        }\n        goto LAB_000ce31c;\n      }\n      (*pcVar2)();\n      param_1 = *(byte **)(param_1 + 0x18);\n    }" ({ "{") (if_statement "if ((*param_1 & 0xfd) == 0) {\n        iVar1 = FUN_000ce1e8(param_1);\n        if (iVar1 != 0) {\n          return iVar1;\n        }\n        goto LAB_000ce31c;\n      }" (if "if") (parenthesized_expression "((*param_1 & 0xfd) == 0)" (( "(") (binary_expression "(*param_1 & 0xfd) == 0" (parenthesized_expression "(*param_1 & 0xfd)" (( "(") (binary_expression "*param_1 & 0xfd" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (& "&") (number_literal "0xfd")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        iVar1 = FUN_000ce1e8(param_1);\n        if (iVar1 != 0) {\n          return iVar1;\n        }\n        goto LAB_000ce31c;\n      }" ({ "{") (expression_statement "iVar1 = FUN_000ce1e8(param_1);" (assignment_expression "iVar1 = FUN_000ce1e8(param_1)" (identifier "iVar1") (= "=") (call_expression "FUN_000ce1e8(param_1)" (identifier "FUN_000ce1e8") (argument_list "(param_1)" (( "(") (identifier "param_1") () ")")))) (; ";")) (if_statement "if (iVar1 != 0) {\n          return iVar1;\n        }" (if "if") (parenthesized_expression "(iVar1 != 0)" (( "(") (binary_expression "iVar1 != 0" (identifier "iVar1") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n          return iVar1;\n        }" ({ "{") (return_statement "return iVar1;" (return "return") (identifier "iVar1") (; ";")) (} "}"))) (goto_statement "goto LAB_000ce31c;" (goto "goto") (statement_identifier "LAB_000ce31c") (; ";")) (} "}"))) (expression_statement "(*pcVar2)();" (call_expression "(*pcVar2)()" (parenthesized_expression "(*pcVar2)" (( "(") (pointer_expression "*pcVar2" (* "*") (identifier "pcVar2")) () ")")) (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "param_1 = *(byte **)(param_1 + 0x18);" (assignment_expression "param_1 = *(byte **)(param_1 + 0x18)" (identifier "param_1") (= "=") (pointer_expression "*(byte **)(param_1 + 0x18)" (* "*") (cast_expression "(byte **)(param_1 + 0x18)" (( "(") (type_descriptor "byte **" (type_identifier "byte") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x18)" (( "(") (binary_expression "param_1 + 0x18" (identifier "param_1") (+ "+") (number_literal "0x18")) () ")"))))) (; ";")) (} "}")))) (if_statement "if (param_1 == (byte *)0x0) {\n      return 0;\n    }" (if "if") (parenthesized_expression "(param_1 == (byte *)0x0)" (( "(") (binary_expression "param_1 == (byte *)0x0" (identifier "param_1") (== "==") (cast_expression "(byte *)0x0" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      return 0;\n    }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (} "}")) (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (; ";")) (} "}")))
(translation_unit (function_definition type: (primitive_type) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (primitive_type) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))))) body: (compound_statement (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator 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)))))) (do_statement body: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (parenthesized_expression (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (parenthesized_expression (binary_expression left: (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))))) right: (identifier)))))))) consequence: (compound_statement (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))))) alternative: (else_clause (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (return_statement (identifier)))) (goto_statement label: (statement_identifier)))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (identifier))) arguments: (argument_list))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (return_statement (number_literal))))) condition: (parenthesized_expression (true))))))

int MASKED(byte *param_1,int param_2,byte *param_3)

{
  int iVar1;
  code *pcVar2;
  
  pcVar2 = (code *)(PTR_LAB_00190ba8 + 0x788c);
  do {
    if ((param_1 == param_3) || ((param_2 != 0 && (*(int *)(param_1 + 0x40) != param_2)))) {
LAB_000ce31c:
      param_1 = *(byte **)(param_1 + 0x18);
    }
    else {
      if ((*param_1 & 0xfd) == 0) {
        iVar1 = FUN_000ce1e8(param_1);
        if (iVar1 != 0) {
          return iVar1;
        }
        goto LAB_000ce31c;
      }
      (*pcVar2)();
      param_1 = *(byte **)(param_1 + 0x18);
    }
    if (param_1 == (byte *)0x0) {
      return 0;
    }
  } while( true );
}

