
undefined4 __regparm3 d_bare_function_type(int param_1,int param_2)

{
  int iVar1;
  undefined4 uVar2;
  
  if (**(char **)(param_1 + 0xc) == 'J') {
    *(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;
  }
  else if (param_2 == 0) {
    iVar1 = d_parmlist();
    if (iVar1 == 0) {
      return 0;
    }
    goto LAB_0028a67b;
  }
  iVar1 = d_type();
  if ((iVar1 == 0) || (iVar1 = d_parmlist(), iVar1 == 0)) {
    return 0;
  }
LAB_0028a67b:
  uVar2 = d_make_comp(iVar1);
  return uVar2;
}



undefined4 __regparm3 FUN_0028a650(int param_1,int param_2)

{
  int iVar1;
  undefined4 uVar2;
  
  if (**(char **)(param_1 + 0xc) == 'J') {
    *(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;
  }
  else if (param_2 == 0) {
    iVar1 = FUN_0028a350();
    if (iVar1 == 0) {
      return 0;
    }
    goto LAB_0028a67b;
  }
  iVar1 = FUN_00289840();
  if ((iVar1 == 0) || (iVar1 = FUN_0028a350(), iVar1 == 0)) {
    return 0;
  }
LAB_0028a67b:
  uVar2 = FUN_00287e90(iVar1);
  return uVar2;
}


PUSH ESI
PUSH EBX
MOV EBX,EAX
SUB ESP,0x4
MOV EAX,dword ptr [EAX + 0xc]
CMP byte ptr [EAX],0x4a
JZ 0x0028a6b8
TEST EDX,EDX
JZ 0x0028a6a0
MOV EAX,EBX
CALL 0x00289840
MOV ESI,EAX
TEST EAX,EAX
JZ 0x0028a6ad
MOV EAX,EBX
CALL 0x0028a350
TEST EAX,EAX
JZ 0x0028a6ad
SUB ESP,0xc
MOV ECX,ESI
MOV EDX,0x29
PUSH EAX
MOV EAX,EBX
CALL 0x00287e90
ADD ESP,0x10
ADD ESP,0x4
POP EBX
POP ESI
RET
MOV EAX,EBX
XOR ESI,ESI
CALL 0x0028a350
TEST EAX,EAX
JNZ 0x0028a67b
ADD ESP,0x4
XOR EAX,EAX
POP EBX
POP ESI
RET
ADD EAX,0x1
MOV dword ptr [EBX + 0xc],EAX
JMP 0x0028a663
(translation_unit "undefined4 __regparm3 FUN_0028a650(int param_1,int param_2)\n\n{\n  int iVar1;\n  undefined4 uVar2;\n  \n  if (**(char **)(param_1 + 0xc) == 'J') {\n    *(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;\n  }\n  else if (param_2 == 0) {\n    iVar1 = FUN_0028a350();\n    if (iVar1 == 0) {\n      return 0;\n    }\n    goto LAB_0028a67b;\n  }\n  iVar1 = FUN_00289840();\n  if ((iVar1 == 0) || (iVar1 = FUN_0028a350(), iVar1 == 0)) {\n    return 0;\n  }\nLAB_0028a67b:\n  uVar2 = FUN_00287e90(iVar1);\n  return uVar2;\n}\n\n" (function_definition "undefined4 __regparm3 FUN_0028a650(int param_1,int param_2)\n\n{\n  int iVar1;\n  undefined4 uVar2;\n  \n  if (**(char **)(param_1 + 0xc) == 'J') {\n    *(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;\n  }\n  else if (param_2 == 0) {\n    iVar1 = FUN_0028a350();\n    if (iVar1 == 0) {\n      return 0;\n    }\n    goto LAB_0028a67b;\n  }\n  iVar1 = FUN_00289840();\n  if ((iVar1 == 0) || (iVar1 = FUN_0028a350(), iVar1 == 0)) {\n    return 0;\n  }\nLAB_0028a67b:\n  uVar2 = FUN_00287e90(iVar1);\n  return uVar2;\n}" type_identifier (ERROR "__regparm3" identifier) (function_declarator "FUN_0028a650(int param_1,int param_2)" identifier (parameter_list "(int param_1,int param_2)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "int param_2" primitive_type identifier) ))) (compound_statement "{\n  int iVar1;\n  undefined4 uVar2;\n  \n  if (**(char **)(param_1 + 0xc) == 'J') {\n    *(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;\n  }\n  else if (param_2 == 0) {\n    iVar1 = FUN_0028a350();\n    if (iVar1 == 0) {\n      return 0;\n    }\n    goto LAB_0028a67b;\n  }\n  iVar1 = FUN_00289840();\n  if ((iVar1 == 0) || (iVar1 = FUN_0028a350(), iVar1 == 0)) {\n    return 0;\n  }\nLAB_0028a67b:\n  uVar2 = FUN_00287e90(iVar1);\n  return uVar2;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "undefined4 uVar2;" type_identifier identifier ;) (if_statement "if (**(char **)(param_1 + 0xc) == 'J') {\n    *(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;\n  }\n  else if (param_2 == 0) {\n    iVar1 = FUN_0028a350();\n    if (iVar1 == 0) {\n      return 0;\n    }\n    goto LAB_0028a67b;\n  }" if (parenthesized_expression "(**(char **)(param_1 + 0xc) == 'J')" ( (binary_expression "**(char **)(param_1 + 0xc) == 'J'" (pointer_expression "**(char **)(param_1 + 0xc)" * (pointer_expression "*(char **)(param_1 + 0xc)" * (cast_expression "(char **)(param_1 + 0xc)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) ))))) == (char_literal "'J'" ' character ')) )) (compound_statement "{\n    *(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;\n  }" { (expression_statement "*(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;" (assignment_expression "*(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1" (pointer_expression "*(char **)(param_1 + 0xc)" * (cast_expression "(char **)(param_1 + 0xc)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) )))) = (binary_expression "*(char **)(param_1 + 0xc) + 1" (pointer_expression "*(char **)(param_1 + 0xc)" * (cast_expression "(char **)(param_1 + 0xc)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) )))) + number_literal)) ;) }) (else_clause "else if (param_2 == 0) {\n    iVar1 = FUN_0028a350();\n    if (iVar1 == 0) {\n      return 0;\n    }\n    goto LAB_0028a67b;\n  }" else (if_statement "if (param_2 == 0) {\n    iVar1 = FUN_0028a350();\n    if (iVar1 == 0) {\n      return 0;\n    }\n    goto LAB_0028a67b;\n  }" if (parenthesized_expression "(param_2 == 0)" ( (binary_expression "param_2 == 0" identifier == number_literal) )) (compound_statement "{\n    iVar1 = FUN_0028a350();\n    if (iVar1 == 0) {\n      return 0;\n    }\n    goto LAB_0028a67b;\n  }" { (expression_statement "iVar1 = FUN_0028a350();" (assignment_expression "iVar1 = FUN_0028a350()" identifier = (call_expression "FUN_0028a350()" identifier (argument_list "()" ( )))) ;) (if_statement "if (iVar1 == 0) {\n      return 0;\n    }" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (goto_statement "goto LAB_0028a67b;" goto statement_identifier ;) })))) (expression_statement "iVar1 = FUN_00289840();" (assignment_expression "iVar1 = FUN_00289840()" identifier = (call_expression "FUN_00289840()" identifier (argument_list "()" ( )))) ;) (if_statement "if ((iVar1 == 0) || (iVar1 = FUN_0028a350(), iVar1 == 0)) {\n    return 0;\n  }" if (parenthesized_expression "((iVar1 == 0) || (iVar1 = FUN_0028a350(), iVar1 == 0))" ( (binary_expression "(iVar1 == 0) || (iVar1 = FUN_0028a350(), iVar1 == 0)" (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) || (parenthesized_expression "(iVar1 = FUN_0028a350(), iVar1 == 0)" ( (comma_expression "iVar1 = FUN_0028a350(), iVar1 == 0" (assignment_expression "iVar1 = FUN_0028a350()" identifier = (call_expression "FUN_0028a350()" identifier (argument_list "()" ( )))) , (binary_expression "iVar1 == 0" identifier == number_literal)) ))) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (labeled_statement "LAB_0028a67b:\n  uVar2 = FUN_00287e90(iVar1);" statement_identifier : (expression_statement "uVar2 = FUN_00287e90(iVar1);" (assignment_expression "uVar2 = FUN_00287e90(iVar1)" identifier = (call_expression "FUN_00287e90(iVar1)" identifier (argument_list "(iVar1)" ( identifier )))) ;)) (return_statement "return uVar2;" return identifier ;) })))
(translation_unit "undefined4 __regparm3 d_bare_function_type(int param_1,int param_2)\n\n{\n  int iVar1;\n  undefined4 uVar2;\n  \n  if (**(char **)(param_1 + 0xc) == 'J') {\n    *(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;\n  }\n  else if (param_2 == 0) {\n    iVar1 = d_parmlist();\n    if (iVar1 == 0) {\n      return 0;\n    }\n    goto LAB_0028a67b;\n  }\n  iVar1 = d_type();\n  if ((iVar1 == 0) || (iVar1 = d_parmlist(), iVar1 == 0)) {\n    return 0;\n  }\nLAB_0028a67b:\n  uVar2 = d_make_comp(iVar1);\n  return uVar2;\n}\n\n" (function_definition "undefined4 __regparm3 d_bare_function_type(int param_1,int param_2)\n\n{\n  int iVar1;\n  undefined4 uVar2;\n  \n  if (**(char **)(param_1 + 0xc) == 'J') {\n    *(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;\n  }\n  else if (param_2 == 0) {\n    iVar1 = d_parmlist();\n    if (iVar1 == 0) {\n      return 0;\n    }\n    goto LAB_0028a67b;\n  }\n  iVar1 = d_type();\n  if ((iVar1 == 0) || (iVar1 = d_parmlist(), iVar1 == 0)) {\n    return 0;\n  }\nLAB_0028a67b:\n  uVar2 = d_make_comp(iVar1);\n  return uVar2;\n}" type_identifier (ERROR "__regparm3" identifier) (function_declarator "d_bare_function_type(int param_1,int param_2)" identifier (parameter_list "(int param_1,int param_2)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "int param_2" primitive_type identifier) ))) (compound_statement "{\n  int iVar1;\n  undefined4 uVar2;\n  \n  if (**(char **)(param_1 + 0xc) == 'J') {\n    *(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;\n  }\n  else if (param_2 == 0) {\n    iVar1 = d_parmlist();\n    if (iVar1 == 0) {\n      return 0;\n    }\n    goto LAB_0028a67b;\n  }\n  iVar1 = d_type();\n  if ((iVar1 == 0) || (iVar1 = d_parmlist(), iVar1 == 0)) {\n    return 0;\n  }\nLAB_0028a67b:\n  uVar2 = d_make_comp(iVar1);\n  return uVar2;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "undefined4 uVar2;" type_identifier identifier ;) (if_statement "if (**(char **)(param_1 + 0xc) == 'J') {\n    *(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;\n  }\n  else if (param_2 == 0) {\n    iVar1 = d_parmlist();\n    if (iVar1 == 0) {\n      return 0;\n    }\n    goto LAB_0028a67b;\n  }" if (parenthesized_expression "(**(char **)(param_1 + 0xc) == 'J')" ( (binary_expression "**(char **)(param_1 + 0xc) == 'J'" (pointer_expression "**(char **)(param_1 + 0xc)" * (pointer_expression "*(char **)(param_1 + 0xc)" * (cast_expression "(char **)(param_1 + 0xc)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) ))))) == (char_literal "'J'" ' character ')) )) (compound_statement "{\n    *(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;\n  }" { (expression_statement "*(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;" (assignment_expression "*(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1" (pointer_expression "*(char **)(param_1 + 0xc)" * (cast_expression "(char **)(param_1 + 0xc)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) )))) = (binary_expression "*(char **)(param_1 + 0xc) + 1" (pointer_expression "*(char **)(param_1 + 0xc)" * (cast_expression "(char **)(param_1 + 0xc)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) )))) + number_literal)) ;) }) (else_clause "else if (param_2 == 0) {\n    iVar1 = d_parmlist();\n    if (iVar1 == 0) {\n      return 0;\n    }\n    goto LAB_0028a67b;\n  }" else (if_statement "if (param_2 == 0) {\n    iVar1 = d_parmlist();\n    if (iVar1 == 0) {\n      return 0;\n    }\n    goto LAB_0028a67b;\n  }" if (parenthesized_expression "(param_2 == 0)" ( (binary_expression "param_2 == 0" identifier == number_literal) )) (compound_statement "{\n    iVar1 = d_parmlist();\n    if (iVar1 == 0) {\n      return 0;\n    }\n    goto LAB_0028a67b;\n  }" { (expression_statement "iVar1 = d_parmlist();" (assignment_expression "iVar1 = d_parmlist()" identifier = (call_expression "d_parmlist()" identifier (argument_list "()" ( )))) ;) (if_statement "if (iVar1 == 0) {\n      return 0;\n    }" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (goto_statement "goto LAB_0028a67b;" goto statement_identifier ;) })))) (expression_statement "iVar1 = d_type();" (assignment_expression "iVar1 = d_type()" identifier = (call_expression "d_type()" identifier (argument_list "()" ( )))) ;) (if_statement "if ((iVar1 == 0) || (iVar1 = d_parmlist(), iVar1 == 0)) {\n    return 0;\n  }" if (parenthesized_expression "((iVar1 == 0) || (iVar1 = d_parmlist(), iVar1 == 0))" ( (binary_expression "(iVar1 == 0) || (iVar1 = d_parmlist(), iVar1 == 0)" (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) || (parenthesized_expression "(iVar1 = d_parmlist(), iVar1 == 0)" ( (comma_expression "iVar1 = d_parmlist(), iVar1 == 0" (assignment_expression "iVar1 = d_parmlist()" identifier = (call_expression "d_parmlist()" identifier (argument_list "()" ( )))) , (binary_expression "iVar1 == 0" identifier == number_literal)) ))) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (labeled_statement "LAB_0028a67b:\n  uVar2 = d_make_comp(iVar1);" statement_identifier : (expression_statement "uVar2 = d_make_comp(iVar1);" (assignment_expression "uVar2 = d_make_comp(iVar1)" identifier = (call_expression "d_make_comp(iVar1)" identifier (argument_list "(iVar1)" ( identifier )))) ;)) (return_statement "return uVar2;" return identifier ;) })))
(translation_unit "undefined4 __regparm3 FUN_0028a650(int param_1,int param_2)\n\n{\n  int iVar1;\n  undefined4 uVar2;\n  \n  if (**(char **)(param_1 + 0xc) == 'J') {\n    *(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;\n  }\n  else if (param_2 == 0) {\n    iVar1 = FUN_0028a350();\n    if (iVar1 == 0) {\n      return 0;\n    }\n    goto LAB_0028a67b;\n  }\n  iVar1 = FUN_00289840();\n  if ((iVar1 == 0) || (iVar1 = FUN_0028a350(), iVar1 == 0)) {\n    return 0;\n  }\nLAB_0028a67b:\n  uVar2 = FUN_00287e90(iVar1);\n  return uVar2;\n}\n\n" (function_definition "undefined4 __regparm3 FUN_0028a650(int param_1,int param_2)\n\n{\n  int iVar1;\n  undefined4 uVar2;\n  \n  if (**(char **)(param_1 + 0xc) == 'J') {\n    *(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;\n  }\n  else if (param_2 == 0) {\n    iVar1 = FUN_0028a350();\n    if (iVar1 == 0) {\n      return 0;\n    }\n    goto LAB_0028a67b;\n  }\n  iVar1 = FUN_00289840();\n  if ((iVar1 == 0) || (iVar1 = FUN_0028a350(), iVar1 == 0)) {\n    return 0;\n  }\nLAB_0028a67b:\n  uVar2 = FUN_00287e90(iVar1);\n  return uVar2;\n}" type_identifier (ERROR "__regparm3" identifier) (function_declarator "FUN_0028a650(int param_1,int param_2)" identifier (parameter_list "(int param_1,int param_2)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "int param_2" primitive_type identifier) ))) (compound_statement "{\n  int iVar1;\n  undefined4 uVar2;\n  \n  if (**(char **)(param_1 + 0xc) == 'J') {\n    *(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;\n  }\n  else if (param_2 == 0) {\n    iVar1 = FUN_0028a350();\n    if (iVar1 == 0) {\n      return 0;\n    }\n    goto LAB_0028a67b;\n  }\n  iVar1 = FUN_00289840();\n  if ((iVar1 == 0) || (iVar1 = FUN_0028a350(), iVar1 == 0)) {\n    return 0;\n  }\nLAB_0028a67b:\n  uVar2 = FUN_00287e90(iVar1);\n  return uVar2;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "undefined4 uVar2;" type_identifier identifier ;) (if_statement "if (**(char **)(param_1 + 0xc) == 'J') {\n    *(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;\n  }\n  else if (param_2 == 0) {\n    iVar1 = FUN_0028a350();\n    if (iVar1 == 0) {\n      return 0;\n    }\n    goto LAB_0028a67b;\n  }" if (parenthesized_expression "(**(char **)(param_1 + 0xc) == 'J')" ( (binary_expression "**(char **)(param_1 + 0xc) == 'J'" (pointer_expression "**(char **)(param_1 + 0xc)" * (pointer_expression "*(char **)(param_1 + 0xc)" * (cast_expression "(char **)(param_1 + 0xc)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) ))))) == (char_literal "'J'" ' character ')) )) (compound_statement "{\n    *(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;\n  }" { (expression_statement "*(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;" (assignment_expression "*(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1" (pointer_expression "*(char **)(param_1 + 0xc)" * (cast_expression "(char **)(param_1 + 0xc)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) )))) = (binary_expression "*(char **)(param_1 + 0xc) + 1" (pointer_expression "*(char **)(param_1 + 0xc)" * (cast_expression "(char **)(param_1 + 0xc)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) )))) + number_literal)) ;) }) (else_clause "else if (param_2 == 0) {\n    iVar1 = FUN_0028a350();\n    if (iVar1 == 0) {\n      return 0;\n    }\n    goto LAB_0028a67b;\n  }" else (if_statement "if (param_2 == 0) {\n    iVar1 = FUN_0028a350();\n    if (iVar1 == 0) {\n      return 0;\n    }\n    goto LAB_0028a67b;\n  }" if (parenthesized_expression "(param_2 == 0)" ( (binary_expression "param_2 == 0" identifier == number_literal) )) (compound_statement "{\n    iVar1 = FUN_0028a350();\n    if (iVar1 == 0) {\n      return 0;\n    }\n    goto LAB_0028a67b;\n  }" { (expression_statement "iVar1 = FUN_0028a350();" (assignment_expression "iVar1 = FUN_0028a350()" identifier = (call_expression "FUN_0028a350()" identifier (argument_list "()" ( )))) ;) (if_statement "if (iVar1 == 0) {\n      return 0;\n    }" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (goto_statement "goto LAB_0028a67b;" goto statement_identifier ;) })))) (expression_statement "iVar1 = FUN_00289840();" (assignment_expression "iVar1 = FUN_00289840()" identifier = (call_expression "FUN_00289840()" identifier (argument_list "()" ( )))) ;) (if_statement "if ((iVar1 == 0) || (iVar1 = FUN_0028a350(), iVar1 == 0)) {\n    return 0;\n  }" if (parenthesized_expression "((iVar1 == 0) || (iVar1 = FUN_0028a350(), iVar1 == 0))" ( (binary_expression "(iVar1 == 0) || (iVar1 = FUN_0028a350(), iVar1 == 0)" (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) || (parenthesized_expression "(iVar1 = FUN_0028a350(), iVar1 == 0)" ( (comma_expression "iVar1 = FUN_0028a350(), iVar1 == 0" (assignment_expression "iVar1 = FUN_0028a350()" identifier = (call_expression "FUN_0028a350()" identifier (argument_list "()" ( )))) , (binary_expression "iVar1 == 0" identifier == number_literal)) ))) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (labeled_statement "LAB_0028a67b:\n  uVar2 = FUN_00287e90(iVar1);" statement_identifier : (expression_statement "uVar2 = FUN_00287e90(iVar1);" (assignment_expression "uVar2 = FUN_00287e90(iVar1)" identifier = (call_expression "FUN_00287e90(iVar1)" identifier (argument_list "(iVar1)" ( identifier )))) ;)) (return_statement "return uVar2;" return identifier ;) })))
(translation_unit (function_definition TYPE (ERROR IDENT) (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) == (char_literal ' character ')) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT)) ;) }) (else_clause else (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return LIT ;) })) (goto_statement goto statement_identifier ;) })))) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == LIT) )) || (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) , (binary_expression IDENT == LIT)) ))) )) (compound_statement { (return_statement return LIT ;) })) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;)) (return_statement return IDENT ;) })))
(function_definition "undefined4 __regparm3 FUN_0028a650(int param_1,int param_2)\n\n{\n  int iVar1;\n  undefined4 uVar2;\n  \n  if (**(char **)(param_1 + 0xc) == 'J') {\n    *(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;\n  }\n  else if (param_2 == 0) {\n    iVar1 = FUN_0028a350();\n    if (iVar1 == 0) {\n      return 0;\n    }\n    goto LAB_0028a67b;\n  }\n  iVar1 = FUN_00289840();\n  if ((iVar1 == 0) || (iVar1 = FUN_0028a350(), iVar1 == 0)) {\n    return 0;\n  }\nLAB_0028a67b:\n  uVar2 = FUN_00287e90(iVar1);\n  return uVar2;\n}" (type_identifier "undefined4") (ERROR "__regparm3" (identifier "__regparm3")) (function_declarator "FUN_0028a650(int param_1,int param_2)" (identifier "FUN_0028a650") (parameter_list "(int param_1,int param_2)" (( "(") (parameter_declaration "int param_1" (primitive_type "int") (identifier "param_1")) (, ",") (parameter_declaration "int param_2" (primitive_type "int") (identifier "param_2")) () ")"))) (compound_statement "{\n  int iVar1;\n  undefined4 uVar2;\n  \n  if (**(char **)(param_1 + 0xc) == 'J') {\n    *(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;\n  }\n  else if (param_2 == 0) {\n    iVar1 = FUN_0028a350();\n    if (iVar1 == 0) {\n      return 0;\n    }\n    goto LAB_0028a67b;\n  }\n  iVar1 = FUN_00289840();\n  if ((iVar1 == 0) || (iVar1 = FUN_0028a350(), iVar1 == 0)) {\n    return 0;\n  }\nLAB_0028a67b:\n  uVar2 = FUN_00287e90(iVar1);\n  return uVar2;\n}" ({ "{") (declaration "int iVar1;" (primitive_type "int") (identifier "iVar1") (; ";")) (declaration "undefined4 uVar2;" (type_identifier "undefined4") (identifier "uVar2") (; ";")) (if_statement "if (**(char **)(param_1 + 0xc) == 'J') {\n    *(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;\n  }\n  else if (param_2 == 0) {\n    iVar1 = FUN_0028a350();\n    if (iVar1 == 0) {\n      return 0;\n    }\n    goto LAB_0028a67b;\n  }" (if "if") (parenthesized_expression "(**(char **)(param_1 + 0xc) == 'J')" (( "(") (binary_expression "**(char **)(param_1 + 0xc) == 'J'" (pointer_expression "**(char **)(param_1 + 0xc)" (* "*") (pointer_expression "*(char **)(param_1 + 0xc)" (* "*") (cast_expression "(char **)(param_1 + 0xc)" (( "(") (type_descriptor "char **" (primitive_type "char") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0xc)" (( "(") (binary_expression "param_1 + 0xc" (identifier "param_1") (+ "+") (number_literal "0xc")) () ")"))))) (== "==") (char_literal "'J'" (' "'") (character "J") (' "'"))) () ")")) (compound_statement "{\n    *(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;\n  }" ({ "{") (expression_statement "*(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;" (assignment_expression "*(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1" (pointer_expression "*(char **)(param_1 + 0xc)" (* "*") (cast_expression "(char **)(param_1 + 0xc)" (( "(") (type_descriptor "char **" (primitive_type "char") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0xc)" (( "(") (binary_expression "param_1 + 0xc" (identifier "param_1") (+ "+") (number_literal "0xc")) () ")")))) (= "=") (binary_expression "*(char **)(param_1 + 0xc) + 1" (pointer_expression "*(char **)(param_1 + 0xc)" (* "*") (cast_expression "(char **)(param_1 + 0xc)" (( "(") (type_descriptor "char **" (primitive_type "char") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0xc)" (( "(") (binary_expression "param_1 + 0xc" (identifier "param_1") (+ "+") (number_literal "0xc")) () ")")))) (+ "+") (number_literal "1"))) (; ";")) (} "}")) (else_clause "else if (param_2 == 0) {\n    iVar1 = FUN_0028a350();\n    if (iVar1 == 0) {\n      return 0;\n    }\n    goto LAB_0028a67b;\n  }" (else "else") (if_statement "if (param_2 == 0) {\n    iVar1 = FUN_0028a350();\n    if (iVar1 == 0) {\n      return 0;\n    }\n    goto LAB_0028a67b;\n  }" (if "if") (parenthesized_expression "(param_2 == 0)" (( "(") (binary_expression "param_2 == 0" (identifier "param_2") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    iVar1 = FUN_0028a350();\n    if (iVar1 == 0) {\n      return 0;\n    }\n    goto LAB_0028a67b;\n  }" ({ "{") (expression_statement "iVar1 = FUN_0028a350();" (assignment_expression "iVar1 = FUN_0028a350()" (identifier "iVar1") (= "=") (call_expression "FUN_0028a350()" (identifier "FUN_0028a350") (argument_list "()" (( "(") () ")")))) (; ";")) (if_statement "if (iVar1 == 0) {\n      return 0;\n    }" (if "if") (parenthesized_expression "(iVar1 == 0)" (( "(") (binary_expression "iVar1 == 0" (identifier "iVar1") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      return 0;\n    }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (goto_statement "goto LAB_0028a67b;" (goto "goto") (statement_identifier "LAB_0028a67b") (; ";")) (} "}"))))) (expression_statement "iVar1 = FUN_00289840();" (assignment_expression "iVar1 = FUN_00289840()" (identifier "iVar1") (= "=") (call_expression "FUN_00289840()" (identifier "FUN_00289840") (argument_list "()" (( "(") () ")")))) (; ";")) (if_statement "if ((iVar1 == 0) || (iVar1 = FUN_0028a350(), iVar1 == 0)) {\n    return 0;\n  }" (if "if") (parenthesized_expression "((iVar1 == 0) || (iVar1 = FUN_0028a350(), iVar1 == 0))" (( "(") (binary_expression "(iVar1 == 0) || (iVar1 = FUN_0028a350(), iVar1 == 0)" (parenthesized_expression "(iVar1 == 0)" (( "(") (binary_expression "iVar1 == 0" (identifier "iVar1") (== "==") (number_literal "0")) () ")")) (|| "||") (parenthesized_expression "(iVar1 = FUN_0028a350(), iVar1 == 0)" (( "(") (comma_expression "iVar1 = FUN_0028a350(), iVar1 == 0" (assignment_expression "iVar1 = FUN_0028a350()" (identifier "iVar1") (= "=") (call_expression "FUN_0028a350()" (identifier "FUN_0028a350") (argument_list "()" (( "(") () ")")))) (, ",") (binary_expression "iVar1 == 0" (identifier "iVar1") (== "==") (number_literal "0"))) () ")"))) () ")")) (compound_statement "{\n    return 0;\n  }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (labeled_statement "LAB_0028a67b:\n  uVar2 = FUN_00287e90(iVar1);" (statement_identifier "LAB_0028a67b") (: ":") (expression_statement "uVar2 = FUN_00287e90(iVar1);" (assignment_expression "uVar2 = FUN_00287e90(iVar1)" (identifier "uVar2") (= "=") (call_expression "FUN_00287e90(iVar1)" (identifier "FUN_00287e90") (argument_list "(iVar1)" (( "(") (identifier "iVar1") () ")")))) (; ";"))) (return_statement "return uVar2;" (return "return") (identifier "uVar2") (; ";")) (} "}")))

type_1 __regparm3 function_1(int var_1,int var_2)

{
  int var_4;
  type_1 uVar2;
  
  if (**(char **)(var_1 + 0xc) == 'J') {
    *(char **)(var_1 + 0xc) = *(char **)(var_1 + 0xc) + 1;
  }
  else if (var_2 == 0) {
    var_4 = var_3();
    if (var_4 == 0) {
      return 0;
    }
    goto LAB_0028a67b;
  }
  var_4 = var_5();
  if ((var_4 == 0) || (var_4 = var_3(), var_4 == 0)) {
    return 0;
  }
LAB_0028a67b:
  uVar2 = var_6(var_4);
  return uVar2;
}


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

undefined4 __regparm3 MASKED(int param_1,int param_2)

{
  int iVar1;
  undefined4 uVar2;
  
  if (**(char **)(param_1 + 0xc) == 'J') {
    *(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;
  }
  else if (param_2 == 0) {
    iVar1 = FUN_0028a350();
    if (iVar1 == 0) {
      return 0;
    }
    goto LAB_0028a67b;
  }
  iVar1 = FUN_00289840();
  if ((iVar1 == 0) || (iVar1 = FUN_0028a350(), iVar1 == 0)) {
    return 0;
  }
LAB_0028a67b:
  uVar2 = FUN_00287e90(iVar1);
  return uVar2;
}

