
/* WARNING: Unknown calling convention */

int whereLoopCheaperProperSubset(WhereLoop *pX,WhereLoop *pY)

{
  WhereTerm **ppWVar1;
  uint uVar2;
  WhereTerm *pWVar3;
  int iVar4;
  uint uVar5;
  WhereTerm **ppWVar6;
  int iVar7;
  int iVar8;
  
  uVar5 = (uint)pX->nLTerm;
  uVar2 = (uint)pY->nLTerm;
  if ((((int)(uVar2 - pY->nSkip) <= (int)(uVar5 - pX->nSkip)) || ((uint)pX->nSkip < (uint)pY->nSkip)
      ) || ((pY->rRun <= pX->rRun && ((pY->rRun < pX->rRun || (pY->nOut < pX->nOut)))))) {
    return 0;
  }
  iVar7 = uVar5 - 1;
  if (uVar5 != 0) {
    iVar8 = uVar2 - 1;
    ppWVar6 = pX->aLTerm + iVar7;
    do {
      if (*ppWVar6 != (WhereTerm *)0x0) {
        if (iVar8 == -1) {
          return 0;
        }
        pWVar3 = pY->aLTerm[iVar8];
        iVar4 = iVar8;
        ppWVar1 = pY->aLTerm + (uVar2 - 2);
        while (*ppWVar6 != pWVar3) {
          iVar4 = iVar4 + -1;
          if (iVar4 == -1) {
            return 0;
          }
          pWVar3 = *ppWVar1;
          ppWVar1 = ppWVar1 + -1;
        }
      }
      iVar7 = iVar7 + -1;
      ppWVar6 = ppWVar6 + -1;
    } while (iVar7 != -1);
  }
  if ((pX->wsFlags & 0x40) == 0) {
    return 1;
  }
  return (pY->wsFlags << 0x19) >> 0x1f;
}



uint FUN_00020a0c(int param_1,int param_2)

{
  int *piVar1;
  uint uVar2;
  int iVar3;
  int iVar4;
  uint uVar5;
  int *piVar6;
  int iVar7;
  int iVar8;
  
  uVar5 = (uint)*(ushort *)(param_1 + 0x28);
  uVar2 = (uint)*(ushort *)(param_2 + 0x28);
  if ((((int)(uVar2 - *(ushort *)(param_2 + 0x2a)) <= (int)(uVar5 - *(ushort *)(param_1 + 0x2a))) ||
      ((uint)*(ushort *)(param_1 + 0x2a) < (uint)*(ushort *)(param_2 + 0x2a))) ||
     ((*(short *)(param_2 + 0x14) <= *(short *)(param_1 + 0x14) &&
      ((*(short *)(param_2 + 0x14) < *(short *)(param_1 + 0x14) ||
       (*(short *)(param_2 + 0x16) < *(short *)(param_1 + 0x16))))))) {
    return 0;
  }
  iVar7 = uVar5 - 1;
  if (uVar5 != 0) {
    iVar8 = uVar2 - 1;
    piVar6 = (int *)(*(int *)(param_1 + 0x30) + iVar7 * 4);
    do {
      if (*piVar6 != 0) {
        if (iVar8 == -1) {
          return 0;
        }
        iVar3 = *(int *)(*(int *)(param_2 + 0x30) + iVar8 * 4);
        iVar4 = iVar8;
        piVar1 = (int *)(*(int *)(param_2 + 0x30) + uVar2 * 4 + -8);
        while (*piVar6 != iVar3) {
          iVar4 = iVar4 + -1;
          if (iVar4 == -1) {
            return 0;
          }
          iVar3 = *piVar1;
          piVar1 = piVar1 + -1;
        }
      }
      iVar7 = iVar7 + -1;
      piVar6 = piVar6 + -1;
    } while (iVar7 != -1);
  }
  if ((*(uint *)(param_1 + 0x24) & 0x40) == 0) {
    return 1;
  }
  return (uint)(*(int *)(param_2 + 0x24) << 0x19) >> 0x1f;
}


lhu t0,0x28(a0)
lhu a2,0x2a(a0)
lhu v1,0x28(a1)
lhu a3,0x2a(a1)
subu v0,t0,a2
subu t1,v1,a3
slt v0,v0,t1
beq v0,zero,0x00020ad8
_sltu a2,a2,a3
bne a2,zero,0x00020ad8
_nop
lh v0,0x14(a0)
lh a2,0x14(a1)
slt a3,v0,a2
bne a3,zero,0x00020a68
_slt v0,a2,v0
bne v0,zero,0x00020ad8
_nop
lh v0,0x16(a0)
lh a2,0x16(a1)
slt v0,a2,v0
bne v0,zero,0x00020ad8
_nop
beq t0,zero,0x00020aec
_addiu t2,t0,-0x1
lw v0,0x30(a0)
addiu t4,v1,-0x1
sll t1,t2,0x2
sll v1,v1,0x2
sll t5,t4,0x2
addu t1,v0,t1
addiu t3,v1,-0x8
li t0,-0x1
lw a3,0x0(t1)
beq a3,zero,0x00020ae0
_nop
beq t4,t0,0x00020ad8
_nop
lw v0,0x30(a1)
addu v1,v0,t5
lw v1,0x0(v1)
beq a3,v1,0x00020ae0
_addu v0,v0,t3
b 0x00020acc
_or v1,t4,zero
lw a2,0x4(v0)
beq a3,a2,0x00020ae0
_nop
addiu v1,v1,-0x1
bne v1,t0,0x00020ac0
_addiu v0,v0,-0x4
jr ra
_or v0,zero,zero
addiu t2,t2,-0x1
bne t2,t0,0x00020a90
_addiu t1,t1,-0x4
lw v0,0x24(a0)
andi v0,v0,0x40
beq v0,zero,0x00020b08
_nop
lw v0,0x24(a1)
jr ra
_ext v0,v0,0x6,0x1
jr ra
_li v0,0x1
(translation_unit "uint FUN_00020a0c(int param_1,int param_2)\n\n{\n  int *piVar1;\n  uint uVar2;\n  int iVar3;\n  int iVar4;\n  uint uVar5;\n  int *piVar6;\n  int iVar7;\n  int iVar8;\n  \n  uVar5 = (uint)*(ushort *)(param_1 + 0x28);\n  uVar2 = (uint)*(ushort *)(param_2 + 0x28);\n  if ((((int)(uVar2 - *(ushort *)(param_2 + 0x2a)) <= (int)(uVar5 - *(ushort *)(param_1 + 0x2a))) ||\n      ((uint)*(ushort *)(param_1 + 0x2a) < (uint)*(ushort *)(param_2 + 0x2a))) ||\n     ((*(short *)(param_2 + 0x14) <= *(short *)(param_1 + 0x14) &&\n      ((*(short *)(param_2 + 0x14) < *(short *)(param_1 + 0x14) ||\n       (*(short *)(param_2 + 0x16) < *(short *)(param_1 + 0x16))))))) {\n    return 0;\n  }\n  iVar7 = uVar5 - 1;\n  if (uVar5 != 0) {\n    iVar8 = uVar2 - 1;\n    piVar6 = (int *)(*(int *)(param_1 + 0x30) + iVar7 * 4);\n    do {\n      if (*piVar6 != 0) {\n        if (iVar8 == -1) {\n          return 0;\n        }\n        iVar3 = *(int *)(*(int *)(param_2 + 0x30) + iVar8 * 4);\n        iVar4 = iVar8;\n        piVar1 = (int *)(*(int *)(param_2 + 0x30) + uVar2 * 4 + -8);\n        while (*piVar6 != iVar3) {\n          iVar4 = iVar4 + -1;\n          if (iVar4 == -1) {\n            return 0;\n          }\n          iVar3 = *piVar1;\n          piVar1 = piVar1 + -1;\n        }\n      }\n      iVar7 = iVar7 + -1;\n      piVar6 = piVar6 + -1;\n    } while (iVar7 != -1);\n  }\n  if ((*(uint *)(param_1 + 0x24) & 0x40) == 0) {\n    return 1;\n  }\n  return (uint)(*(int *)(param_2 + 0x24) << 0x19) >> 0x1f;\n}\n\n" (function_definition "uint FUN_00020a0c(int param_1,int param_2)\n\n{\n  int *piVar1;\n  uint uVar2;\n  int iVar3;\n  int iVar4;\n  uint uVar5;\n  int *piVar6;\n  int iVar7;\n  int iVar8;\n  \n  uVar5 = (uint)*(ushort *)(param_1 + 0x28);\n  uVar2 = (uint)*(ushort *)(param_2 + 0x28);\n  if ((((int)(uVar2 - *(ushort *)(param_2 + 0x2a)) <= (int)(uVar5 - *(ushort *)(param_1 + 0x2a))) ||\n      ((uint)*(ushort *)(param_1 + 0x2a) < (uint)*(ushort *)(param_2 + 0x2a))) ||\n     ((*(short *)(param_2 + 0x14) <= *(short *)(param_1 + 0x14) &&\n      ((*(short *)(param_2 + 0x14) < *(short *)(param_1 + 0x14) ||\n       (*(short *)(param_2 + 0x16) < *(short *)(param_1 + 0x16))))))) {\n    return 0;\n  }\n  iVar7 = uVar5 - 1;\n  if (uVar5 != 0) {\n    iVar8 = uVar2 - 1;\n    piVar6 = (int *)(*(int *)(param_1 + 0x30) + iVar7 * 4);\n    do {\n      if (*piVar6 != 0) {\n        if (iVar8 == -1) {\n          return 0;\n        }\n        iVar3 = *(int *)(*(int *)(param_2 + 0x30) + iVar8 * 4);\n        iVar4 = iVar8;\n        piVar1 = (int *)(*(int *)(param_2 + 0x30) + uVar2 * 4 + -8);\n        while (*piVar6 != iVar3) {\n          iVar4 = iVar4 + -1;\n          if (iVar4 == -1) {\n            return 0;\n          }\n          iVar3 = *piVar1;\n          piVar1 = piVar1 + -1;\n        }\n      }\n      iVar7 = iVar7 + -1;\n      piVar6 = piVar6 + -1;\n    } while (iVar7 != -1);\n  }\n  if ((*(uint *)(param_1 + 0x24) & 0x40) == 0) {\n    return 1;\n  }\n  return (uint)(*(int *)(param_2 + 0x24) << 0x19) >> 0x1f;\n}" type_identifier (function_declarator "FUN_00020a0c(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 *piVar1;\n  uint uVar2;\n  int iVar3;\n  int iVar4;\n  uint uVar5;\n  int *piVar6;\n  int iVar7;\n  int iVar8;\n  \n  uVar5 = (uint)*(ushort *)(param_1 + 0x28);\n  uVar2 = (uint)*(ushort *)(param_2 + 0x28);\n  if ((((int)(uVar2 - *(ushort *)(param_2 + 0x2a)) <= (int)(uVar5 - *(ushort *)(param_1 + 0x2a))) ||\n      ((uint)*(ushort *)(param_1 + 0x2a) < (uint)*(ushort *)(param_2 + 0x2a))) ||\n     ((*(short *)(param_2 + 0x14) <= *(short *)(param_1 + 0x14) &&\n      ((*(short *)(param_2 + 0x14) < *(short *)(param_1 + 0x14) ||\n       (*(short *)(param_2 + 0x16) < *(short *)(param_1 + 0x16))))))) {\n    return 0;\n  }\n  iVar7 = uVar5 - 1;\n  if (uVar5 != 0) {\n    iVar8 = uVar2 - 1;\n    piVar6 = (int *)(*(int *)(param_1 + 0x30) + iVar7 * 4);\n    do {\n      if (*piVar6 != 0) {\n        if (iVar8 == -1) {\n          return 0;\n        }\n        iVar3 = *(int *)(*(int *)(param_2 + 0x30) + iVar8 * 4);\n        iVar4 = iVar8;\n        piVar1 = (int *)(*(int *)(param_2 + 0x30) + uVar2 * 4 + -8);\n        while (*piVar6 != iVar3) {\n          iVar4 = iVar4 + -1;\n          if (iVar4 == -1) {\n            return 0;\n          }\n          iVar3 = *piVar1;\n          piVar1 = piVar1 + -1;\n        }\n      }\n      iVar7 = iVar7 + -1;\n      piVar6 = piVar6 + -1;\n    } while (iVar7 != -1);\n  }\n  if ((*(uint *)(param_1 + 0x24) & 0x40) == 0) {\n    return 1;\n  }\n  return (uint)(*(int *)(param_2 + 0x24) << 0x19) >> 0x1f;\n}" { (declaration "int *piVar1;" primitive_type (pointer_declarator "*piVar1" * identifier) ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "int *piVar6;" primitive_type (pointer_declarator "*piVar6" * identifier) ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "int iVar8;" primitive_type identifier ;) (expression_statement "uVar5 = (uint)*(ushort *)(param_1 + 0x28);" (assignment_expression "uVar5 = (uint)*(ushort *)(param_1 + 0x28)" identifier = (binary_expression "(uint)*(ushort *)(param_1 + 0x28)" (parenthesized_expression "(uint)" ( identifier )) * (cast_expression "(ushort *)(param_1 + 0x28)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) ))))) ;) (expression_statement "uVar2 = (uint)*(ushort *)(param_2 + 0x28);" (assignment_expression "uVar2 = (uint)*(ushort *)(param_2 + 0x28)" identifier = (binary_expression "(uint)*(ushort *)(param_2 + 0x28)" (parenthesized_expression "(uint)" ( identifier )) * (cast_expression "(ushort *)(param_2 + 0x28)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x28)" ( (binary_expression "param_2 + 0x28" identifier + number_literal) ))))) ;) (if_statement "if ((((int)(uVar2 - *(ushort *)(param_2 + 0x2a)) <= (int)(uVar5 - *(ushort *)(param_1 + 0x2a))) ||\n      ((uint)*(ushort *)(param_1 + 0x2a) < (uint)*(ushort *)(param_2 + 0x2a))) ||\n     ((*(short *)(param_2 + 0x14) <= *(short *)(param_1 + 0x14) &&\n      ((*(short *)(param_2 + 0x14) < *(short *)(param_1 + 0x14) ||\n       (*(short *)(param_2 + 0x16) < *(short *)(param_1 + 0x16))))))) {\n    return 0;\n  }" if (parenthesized_expression "((((int)(uVar2 - *(ushort *)(param_2 + 0x2a)) <= (int)(uVar5 - *(ushort *)(param_1 + 0x2a))) ||\n      ((uint)*(ushort *)(param_1 + 0x2a) < (uint)*(ushort *)(param_2 + 0x2a))) ||\n     ((*(short *)(param_2 + 0x14) <= *(short *)(param_1 + 0x14) &&\n      ((*(short *)(param_2 + 0x14) < *(short *)(param_1 + 0x14) ||\n       (*(short *)(param_2 + 0x16) < *(short *)(param_1 + 0x16)))))))" ( (binary_expression "(((int)(uVar2 - *(ushort *)(param_2 + 0x2a)) <= (int)(uVar5 - *(ushort *)(param_1 + 0x2a))) ||\n      ((uint)*(ushort *)(param_1 + 0x2a) < (uint)*(ushort *)(param_2 + 0x2a))) ||\n     ((*(short *)(param_2 + 0x14) <= *(short *)(param_1 + 0x14) &&\n      ((*(short *)(param_2 + 0x14) < *(short *)(param_1 + 0x14) ||\n       (*(short *)(param_2 + 0x16) < *(short *)(param_1 + 0x16))))))" (parenthesized_expression "(((int)(uVar2 - *(ushort *)(param_2 + 0x2a)) <= (int)(uVar5 - *(ushort *)(param_1 + 0x2a))) ||\n      ((uint)*(ushort *)(param_1 + 0x2a) < (uint)*(ushort *)(param_2 + 0x2a)))" ( (binary_expression "((int)(uVar2 - *(ushort *)(param_2 + 0x2a)) <= (int)(uVar5 - *(ushort *)(param_1 + 0x2a))) ||\n      ((uint)*(ushort *)(param_1 + 0x2a) < (uint)*(ushort *)(param_2 + 0x2a))" (parenthesized_expression "((int)(uVar2 - *(ushort *)(param_2 + 0x2a)) <= (int)(uVar5 - *(ushort *)(param_1 + 0x2a)))" ( (binary_expression "(int)(uVar2 - *(ushort *)(param_2 + 0x2a)) <= (int)(uVar5 - *(ushort *)(param_1 + 0x2a))" (cast_expression "(int)(uVar2 - *(ushort *)(param_2 + 0x2a))" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar2 - *(ushort *)(param_2 + 0x2a))" ( (binary_expression "uVar2 - *(ushort *)(param_2 + 0x2a)" identifier - (pointer_expression "*(ushort *)(param_2 + 0x2a)" * (cast_expression "(ushort *)(param_2 + 0x2a)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x2a)" ( (binary_expression "param_2 + 0x2a" identifier + number_literal) ))))) ))) <= (cast_expression "(int)(uVar5 - *(ushort *)(param_1 + 0x2a))" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar5 - *(ushort *)(param_1 + 0x2a))" ( (binary_expression "uVar5 - *(ushort *)(param_1 + 0x2a)" identifier - (pointer_expression "*(ushort *)(param_1 + 0x2a)" * (cast_expression "(ushort *)(param_1 + 0x2a)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x2a)" ( (binary_expression "param_1 + 0x2a" identifier + number_literal) ))))) )))) )) || (parenthesized_expression "((uint)*(ushort *)(param_1 + 0x2a) < (uint)*(ushort *)(param_2 + 0x2a))" ( (binary_expression "(uint)*(ushort *)(param_1 + 0x2a) < (uint)*(ushort *)(param_2 + 0x2a)" (binary_expression "(uint)*(ushort *)(param_1 + 0x2a)" (parenthesized_expression "(uint)" ( identifier )) * (cast_expression "(ushort *)(param_1 + 0x2a)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x2a)" ( (binary_expression "param_1 + 0x2a" identifier + number_literal) )))) < (binary_expression "(uint)*(ushort *)(param_2 + 0x2a)" (parenthesized_expression "(uint)" ( identifier )) * (cast_expression "(ushort *)(param_2 + 0x2a)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x2a)" ( (binary_expression "param_2 + 0x2a" identifier + number_literal) ))))) ))) )) || (parenthesized_expression "((*(short *)(param_2 + 0x14) <= *(short *)(param_1 + 0x14) &&\n      ((*(short *)(param_2 + 0x14) < *(short *)(param_1 + 0x14) ||\n       (*(short *)(param_2 + 0x16) < *(short *)(param_1 + 0x16))))))" ( (parenthesized_expression "(*(short *)(param_2 + 0x14) <= *(short *)(param_1 + 0x14) &&\n      ((*(short *)(param_2 + 0x14) < *(short *)(param_1 + 0x14) ||\n       (*(short *)(param_2 + 0x16) < *(short *)(param_1 + 0x16)))))" ( (binary_expression "*(short *)(param_2 + 0x14) <= *(short *)(param_1 + 0x14) &&\n      ((*(short *)(param_2 + 0x14) < *(short *)(param_1 + 0x14) ||\n       (*(short *)(param_2 + 0x16) < *(short *)(param_1 + 0x16))))" (binary_expression "*(short *)(param_2 + 0x14) <= *(short *)(param_1 + 0x14)" (pointer_expression "*(short *)(param_2 + 0x14)" * (cast_expression "(short *)(param_2 + 0x14)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x14)" ( (binary_expression "param_2 + 0x14" identifier + number_literal) )))) <= (pointer_expression "*(short *)(param_1 + 0x14)" * (cast_expression "(short *)(param_1 + 0x14)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) ))))) && (parenthesized_expression "((*(short *)(param_2 + 0x14) < *(short *)(param_1 + 0x14) ||\n       (*(short *)(param_2 + 0x16) < *(short *)(param_1 + 0x16))))" ( (parenthesized_expression "(*(short *)(param_2 + 0x14) < *(short *)(param_1 + 0x14) ||\n       (*(short *)(param_2 + 0x16) < *(short *)(param_1 + 0x16)))" ( (binary_expression "*(short *)(param_2 + 0x14) < *(short *)(param_1 + 0x14) ||\n       (*(short *)(param_2 + 0x16) < *(short *)(param_1 + 0x16))" (binary_expression "*(short *)(param_2 + 0x14) < *(short *)(param_1 + 0x14)" (pointer_expression "*(short *)(param_2 + 0x14)" * (cast_expression "(short *)(param_2 + 0x14)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x14)" ( (binary_expression "param_2 + 0x14" identifier + number_literal) )))) < (pointer_expression "*(short *)(param_1 + 0x14)" * (cast_expression "(short *)(param_1 + 0x14)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) ))))) || (parenthesized_expression "(*(short *)(param_2 + 0x16) < *(short *)(param_1 + 0x16))" ( (binary_expression "*(short *)(param_2 + 0x16) < *(short *)(param_1 + 0x16)" (pointer_expression "*(short *)(param_2 + 0x16)" * (cast_expression "(short *)(param_2 + 0x16)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x16)" ( (binary_expression "param_2 + 0x16" identifier + number_literal) )))) < (pointer_expression "*(short *)(param_1 + 0x16)" * (cast_expression "(short *)(param_1 + 0x16)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16)" ( (binary_expression "param_1 + 0x16" identifier + number_literal) ))))) ))) )) ))) )) ))) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "iVar7 = uVar5 - 1;" (assignment_expression "iVar7 = uVar5 - 1" identifier = (binary_expression "uVar5 - 1" identifier - number_literal)) ;) (if_statement "if (uVar5 != 0) {\n    iVar8 = uVar2 - 1;\n    piVar6 = (int *)(*(int *)(param_1 + 0x30) + iVar7 * 4);\n    do {\n      if (*piVar6 != 0) {\n        if (iVar8 == -1) {\n          return 0;\n        }\n        iVar3 = *(int *)(*(int *)(param_2 + 0x30) + iVar8 * 4);\n        iVar4 = iVar8;\n        piVar1 = (int *)(*(int *)(param_2 + 0x30) + uVar2 * 4 + -8);\n        while (*piVar6 != iVar3) {\n          iVar4 = iVar4 + -1;\n          if (iVar4 == -1) {\n            return 0;\n          }\n          iVar3 = *piVar1;\n          piVar1 = piVar1 + -1;\n        }\n      }\n      iVar7 = iVar7 + -1;\n      piVar6 = piVar6 + -1;\n    } while (iVar7 != -1);\n  }" if (parenthesized_expression "(uVar5 != 0)" ( (binary_expression "uVar5 != 0" identifier != number_literal) )) (compound_statement "{\n    iVar8 = uVar2 - 1;\n    piVar6 = (int *)(*(int *)(param_1 + 0x30) + iVar7 * 4);\n    do {\n      if (*piVar6 != 0) {\n        if (iVar8 == -1) {\n          return 0;\n        }\n        iVar3 = *(int *)(*(int *)(param_2 + 0x30) + iVar8 * 4);\n        iVar4 = iVar8;\n        piVar1 = (int *)(*(int *)(param_2 + 0x30) + uVar2 * 4 + -8);\n        while (*piVar6 != iVar3) {\n          iVar4 = iVar4 + -1;\n          if (iVar4 == -1) {\n            return 0;\n          }\n          iVar3 = *piVar1;\n          piVar1 = piVar1 + -1;\n        }\n      }\n      iVar7 = iVar7 + -1;\n      piVar6 = piVar6 + -1;\n    } while (iVar7 != -1);\n  }" { (expression_statement "iVar8 = uVar2 - 1;" (assignment_expression "iVar8 = uVar2 - 1" identifier = (binary_expression "uVar2 - 1" identifier - number_literal)) ;) (expression_statement "piVar6 = (int *)(*(int *)(param_1 + 0x30) + iVar7 * 4);" (assignment_expression "piVar6 = (int *)(*(int *)(param_1 + 0x30) + iVar7 * 4)" identifier = (cast_expression "(int *)(*(int *)(param_1 + 0x30) + iVar7 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 0x30) + iVar7 * 4)" ( (binary_expression "*(int *)(param_1 + 0x30) + iVar7 * 4" (pointer_expression "*(int *)(param_1 + 0x30)" * (cast_expression "(int *)(param_1 + 0x30)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x30)" ( (binary_expression "param_1 + 0x30" identifier + number_literal) )))) + (binary_expression "iVar7 * 4" identifier * number_literal)) )))) ;) (do_statement "do {\n      if (*piVar6 != 0) {\n        if (iVar8 == -1) {\n          return 0;\n        }\n        iVar3 = *(int *)(*(int *)(param_2 + 0x30) + iVar8 * 4);\n        iVar4 = iVar8;\n        piVar1 = (int *)(*(int *)(param_2 + 0x30) + uVar2 * 4 + -8);\n        while (*piVar6 != iVar3) {\n          iVar4 = iVar4 + -1;\n          if (iVar4 == -1) {\n            return 0;\n          }\n          iVar3 = *piVar1;\n          piVar1 = piVar1 + -1;\n        }\n      }\n      iVar7 = iVar7 + -1;\n      piVar6 = piVar6 + -1;\n    } while (iVar7 != -1);" do (compound_statement "{\n      if (*piVar6 != 0) {\n        if (iVar8 == -1) {\n          return 0;\n        }\n        iVar3 = *(int *)(*(int *)(param_2 + 0x30) + iVar8 * 4);\n        iVar4 = iVar8;\n        piVar1 = (int *)(*(int *)(param_2 + 0x30) + uVar2 * 4 + -8);\n        while (*piVar6 != iVar3) {\n          iVar4 = iVar4 + -1;\n          if (iVar4 == -1) {\n            return 0;\n          }\n          iVar3 = *piVar1;\n          piVar1 = piVar1 + -1;\n        }\n      }\n      iVar7 = iVar7 + -1;\n      piVar6 = piVar6 + -1;\n    }" { (if_statement "if (*piVar6 != 0) {\n        if (iVar8 == -1) {\n          return 0;\n        }\n        iVar3 = *(int *)(*(int *)(param_2 + 0x30) + iVar8 * 4);\n        iVar4 = iVar8;\n        piVar1 = (int *)(*(int *)(param_2 + 0x30) + uVar2 * 4 + -8);\n        while (*piVar6 != iVar3) {\n          iVar4 = iVar4 + -1;\n          if (iVar4 == -1) {\n            return 0;\n          }\n          iVar3 = *piVar1;\n          piVar1 = piVar1 + -1;\n        }\n      }" if (parenthesized_expression "(*piVar6 != 0)" ( (binary_expression "*piVar6 != 0" (pointer_expression "*piVar6" * identifier) != number_literal) )) (compound_statement "{\n        if (iVar8 == -1) {\n          return 0;\n        }\n        iVar3 = *(int *)(*(int *)(param_2 + 0x30) + iVar8 * 4);\n        iVar4 = iVar8;\n        piVar1 = (int *)(*(int *)(param_2 + 0x30) + uVar2 * 4 + -8);\n        while (*piVar6 != iVar3) {\n          iVar4 = iVar4 + -1;\n          if (iVar4 == -1) {\n            return 0;\n          }\n          iVar3 = *piVar1;\n          piVar1 = piVar1 + -1;\n        }\n      }" { (if_statement "if (iVar8 == -1) {\n          return 0;\n        }" if (parenthesized_expression "(iVar8 == -1)" ( (binary_expression "iVar8 == -1" identifier == number_literal) )) (compound_statement "{\n          return 0;\n        }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "iVar3 = *(int *)(*(int *)(param_2 + 0x30) + iVar8 * 4);" (assignment_expression "iVar3 = *(int *)(*(int *)(param_2 + 0x30) + iVar8 * 4)" identifier = (pointer_expression "*(int *)(*(int *)(param_2 + 0x30) + iVar8 * 4)" * (cast_expression "(int *)(*(int *)(param_2 + 0x30) + iVar8 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_2 + 0x30) + iVar8 * 4)" ( (binary_expression "*(int *)(param_2 + 0x30) + iVar8 * 4" (pointer_expression "*(int *)(param_2 + 0x30)" * (cast_expression "(int *)(param_2 + 0x30)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x30)" ( (binary_expression "param_2 + 0x30" identifier + number_literal) )))) + (binary_expression "iVar8 * 4" identifier * number_literal)) ))))) ;) (expression_statement "iVar4 = iVar8;" (assignment_expression "iVar4 = iVar8" identifier = identifier) ;) (expression_statement "piVar1 = (int *)(*(int *)(param_2 + 0x30) + uVar2 * 4 + -8);" (assignment_expression "piVar1 = (int *)(*(int *)(param_2 + 0x30) + uVar2 * 4 + -8)" identifier = (cast_expression "(int *)(*(int *)(param_2 + 0x30) + uVar2 * 4 + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_2 + 0x30) + uVar2 * 4 + -8)" ( (binary_expression "*(int *)(param_2 + 0x30) + uVar2 * 4 + -8" (binary_expression "*(int *)(param_2 + 0x30) + uVar2 * 4" (pointer_expression "*(int *)(param_2 + 0x30)" * (cast_expression "(int *)(param_2 + 0x30)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x30)" ( (binary_expression "param_2 + 0x30" identifier + number_literal) )))) + (binary_expression "uVar2 * 4" identifier * number_literal)) + number_literal) )))) ;) (while_statement "while (*piVar6 != iVar3) {\n          iVar4 = iVar4 + -1;\n          if (iVar4 == -1) {\n            return 0;\n          }\n          iVar3 = *piVar1;\n          piVar1 = piVar1 + -1;\n        }" while (parenthesized_expression "(*piVar6 != iVar3)" ( (binary_expression "*piVar6 != iVar3" (pointer_expression "*piVar6" * identifier) != identifier) )) (compound_statement "{\n          iVar4 = iVar4 + -1;\n          if (iVar4 == -1) {\n            return 0;\n          }\n          iVar3 = *piVar1;\n          piVar1 = piVar1 + -1;\n        }" { (expression_statement "iVar4 = iVar4 + -1;" (assignment_expression "iVar4 = iVar4 + -1" identifier = (binary_expression "iVar4 + -1" identifier + number_literal)) ;) (if_statement "if (iVar4 == -1) {\n            return 0;\n          }" if (parenthesized_expression "(iVar4 == -1)" ( (binary_expression "iVar4 == -1" identifier == number_literal) )) (compound_statement "{\n            return 0;\n          }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "iVar3 = *piVar1;" (assignment_expression "iVar3 = *piVar1" identifier = (pointer_expression "*piVar1" * identifier)) ;) (expression_statement "piVar1 = piVar1 + -1;" (assignment_expression "piVar1 = piVar1 + -1" identifier = (binary_expression "piVar1 + -1" identifier + number_literal)) ;) })) })) (expression_statement "iVar7 = iVar7 + -1;" (assignment_expression "iVar7 = iVar7 + -1" identifier = (binary_expression "iVar7 + -1" identifier + number_literal)) ;) (expression_statement "piVar6 = piVar6 + -1;" (assignment_expression "piVar6 = piVar6 + -1" identifier = (binary_expression "piVar6 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar7 != -1)" ( (binary_expression "iVar7 != -1" identifier != number_literal) )) ;) })) (if_statement "if ((*(uint *)(param_1 + 0x24) & 0x40) == 0) {\n    return 1;\n  }" if (parenthesized_expression "((*(uint *)(param_1 + 0x24) & 0x40) == 0)" ( (binary_expression "(*(uint *)(param_1 + 0x24) & 0x40) == 0" (parenthesized_expression "(*(uint *)(param_1 + 0x24) & 0x40)" ( (binary_expression "*(uint *)(param_1 + 0x24) & 0x40" (pointer_expression "*(uint *)(param_1 + 0x24)" * (cast_expression "(uint *)(param_1 + 0x24)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x24)" ( (binary_expression "param_1 + 0x24" identifier + number_literal) )))) & number_literal) )) == number_literal) )) (compound_statement "{\n    return 1;\n  }" { (return_statement "return 1;" return number_literal ;) })) (return_statement "return (uint)(*(int *)(param_2 + 0x24) << 0x19) >> 0x1f;" return (binary_expression "(uint)(*(int *)(param_2 + 0x24) << 0x19) >> 0x1f" (call_expression "(uint)(*(int *)(param_2 + 0x24) << 0x19)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(*(int *)(param_2 + 0x24) << 0x19)" ( (binary_expression "*(int *)(param_2 + 0x24) << 0x19" (pointer_expression "*(int *)(param_2 + 0x24)" * (cast_expression "(int *)(param_2 + 0x24)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x24)" ( (binary_expression "param_2 + 0x24" identifier + number_literal) )))) << number_literal) ))) >> number_literal) ;) })))
(translation_unit "/* WARNING: Unknown calling convention */\n\nint whereLoopCheaperProperSubset(WhereLoop *pX,WhereLoop *pY)\n\n{\n  WhereTerm **ppWVar1;\n  uint uVar2;\n  WhereTerm *pWVar3;\n  int iVar4;\n  uint uVar5;\n  WhereTerm **ppWVar6;\n  int iVar7;\n  int iVar8;\n  \n  uVar5 = (uint)pX->nLTerm;\n  uVar2 = (uint)pY->nLTerm;\n  if ((((int)(uVar2 - pY->nSkip) <= (int)(uVar5 - pX->nSkip)) || ((uint)pX->nSkip < (uint)pY->nSkip)\n      ) || ((pY->rRun <= pX->rRun && ((pY->rRun < pX->rRun || (pY->nOut < pX->nOut)))))) {\n    return 0;\n  }\n  iVar7 = uVar5 - 1;\n  if (uVar5 != 0) {\n    iVar8 = uVar2 - 1;\n    ppWVar6 = pX->aLTerm + iVar7;\n    do {\n      if (*ppWVar6 != (WhereTerm *)0x0) {\n        if (iVar8 == -1) {\n          return 0;\n        }\n        pWVar3 = pY->aLTerm[iVar8];\n        iVar4 = iVar8;\n        ppWVar1 = pY->aLTerm + (uVar2 - 2);\n        while (*ppWVar6 != pWVar3) {\n          iVar4 = iVar4 + -1;\n          if (iVar4 == -1) {\n            return 0;\n          }\n          pWVar3 = *ppWVar1;\n          ppWVar1 = ppWVar1 + -1;\n        }\n      }\n      iVar7 = iVar7 + -1;\n      ppWVar6 = ppWVar6 + -1;\n    } while (iVar7 != -1);\n  }\n  if ((pX->wsFlags & 0x40) == 0) {\n    return 1;\n  }\n  return (pY->wsFlags << 0x19) >> 0x1f;\n}\n\n" comment (function_definition "int whereLoopCheaperProperSubset(WhereLoop *pX,WhereLoop *pY)\n\n{\n  WhereTerm **ppWVar1;\n  uint uVar2;\n  WhereTerm *pWVar3;\n  int iVar4;\n  uint uVar5;\n  WhereTerm **ppWVar6;\n  int iVar7;\n  int iVar8;\n  \n  uVar5 = (uint)pX->nLTerm;\n  uVar2 = (uint)pY->nLTerm;\n  if ((((int)(uVar2 - pY->nSkip) <= (int)(uVar5 - pX->nSkip)) || ((uint)pX->nSkip < (uint)pY->nSkip)\n      ) || ((pY->rRun <= pX->rRun && ((pY->rRun < pX->rRun || (pY->nOut < pX->nOut)))))) {\n    return 0;\n  }\n  iVar7 = uVar5 - 1;\n  if (uVar5 != 0) {\n    iVar8 = uVar2 - 1;\n    ppWVar6 = pX->aLTerm + iVar7;\n    do {\n      if (*ppWVar6 != (WhereTerm *)0x0) {\n        if (iVar8 == -1) {\n          return 0;\n        }\n        pWVar3 = pY->aLTerm[iVar8];\n        iVar4 = iVar8;\n        ppWVar1 = pY->aLTerm + (uVar2 - 2);\n        while (*ppWVar6 != pWVar3) {\n          iVar4 = iVar4 + -1;\n          if (iVar4 == -1) {\n            return 0;\n          }\n          pWVar3 = *ppWVar1;\n          ppWVar1 = ppWVar1 + -1;\n        }\n      }\n      iVar7 = iVar7 + -1;\n      ppWVar6 = ppWVar6 + -1;\n    } while (iVar7 != -1);\n  }\n  if ((pX->wsFlags & 0x40) == 0) {\n    return 1;\n  }\n  return (pY->wsFlags << 0x19) >> 0x1f;\n}" primitive_type (function_declarator "whereLoopCheaperProperSubset(WhereLoop *pX,WhereLoop *pY)" identifier (parameter_list "(WhereLoop *pX,WhereLoop *pY)" ( (parameter_declaration "WhereLoop *pX" type_identifier (pointer_declarator "*pX" * identifier)) , (parameter_declaration "WhereLoop *pY" type_identifier (pointer_declarator "*pY" * identifier)) ))) (compound_statement "{\n  WhereTerm **ppWVar1;\n  uint uVar2;\n  WhereTerm *pWVar3;\n  int iVar4;\n  uint uVar5;\n  WhereTerm **ppWVar6;\n  int iVar7;\n  int iVar8;\n  \n  uVar5 = (uint)pX->nLTerm;\n  uVar2 = (uint)pY->nLTerm;\n  if ((((int)(uVar2 - pY->nSkip) <= (int)(uVar5 - pX->nSkip)) || ((uint)pX->nSkip < (uint)pY->nSkip)\n      ) || ((pY->rRun <= pX->rRun && ((pY->rRun < pX->rRun || (pY->nOut < pX->nOut)))))) {\n    return 0;\n  }\n  iVar7 = uVar5 - 1;\n  if (uVar5 != 0) {\n    iVar8 = uVar2 - 1;\n    ppWVar6 = pX->aLTerm + iVar7;\n    do {\n      if (*ppWVar6 != (WhereTerm *)0x0) {\n        if (iVar8 == -1) {\n          return 0;\n        }\n        pWVar3 = pY->aLTerm[iVar8];\n        iVar4 = iVar8;\n        ppWVar1 = pY->aLTerm + (uVar2 - 2);\n        while (*ppWVar6 != pWVar3) {\n          iVar4 = iVar4 + -1;\n          if (iVar4 == -1) {\n            return 0;\n          }\n          pWVar3 = *ppWVar1;\n          ppWVar1 = ppWVar1 + -1;\n        }\n      }\n      iVar7 = iVar7 + -1;\n      ppWVar6 = ppWVar6 + -1;\n    } while (iVar7 != -1);\n  }\n  if ((pX->wsFlags & 0x40) == 0) {\n    return 1;\n  }\n  return (pY->wsFlags << 0x19) >> 0x1f;\n}" { (declaration "WhereTerm **ppWVar1;" type_identifier (pointer_declarator "**ppWVar1" * (pointer_declarator "*ppWVar1" * identifier)) ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "WhereTerm *pWVar3;" type_identifier (pointer_declarator "*pWVar3" * identifier) ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "WhereTerm **ppWVar6;" type_identifier (pointer_declarator "**ppWVar6" * (pointer_declarator "*ppWVar6" * identifier)) ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "int iVar8;" primitive_type identifier ;) (expression_statement "uVar5 = (uint)pX->nLTerm;" (assignment_expression "uVar5 = (uint)pX->nLTerm" identifier = (cast_expression "(uint)pX->nLTerm" ( (type_descriptor "uint" type_identifier) ) (field_expression "pX->nLTerm" identifier -> field_identifier))) ;) (expression_statement "uVar2 = (uint)pY->nLTerm;" (assignment_expression "uVar2 = (uint)pY->nLTerm" identifier = (cast_expression "(uint)pY->nLTerm" ( (type_descriptor "uint" type_identifier) ) (field_expression "pY->nLTerm" identifier -> field_identifier))) ;) (if_statement "if ((((int)(uVar2 - pY->nSkip) <= (int)(uVar5 - pX->nSkip)) || ((uint)pX->nSkip < (uint)pY->nSkip)\n      ) || ((pY->rRun <= pX->rRun && ((pY->rRun < pX->rRun || (pY->nOut < pX->nOut)))))) {\n    return 0;\n  }" if (parenthesized_expression "((((int)(uVar2 - pY->nSkip) <= (int)(uVar5 - pX->nSkip)) || ((uint)pX->nSkip < (uint)pY->nSkip)\n      ) || ((pY->rRun <= pX->rRun && ((pY->rRun < pX->rRun || (pY->nOut < pX->nOut))))))" ( (binary_expression "(((int)(uVar2 - pY->nSkip) <= (int)(uVar5 - pX->nSkip)) || ((uint)pX->nSkip < (uint)pY->nSkip)\n      ) || ((pY->rRun <= pX->rRun && ((pY->rRun < pX->rRun || (pY->nOut < pX->nOut)))))" (parenthesized_expression "(((int)(uVar2 - pY->nSkip) <= (int)(uVar5 - pX->nSkip)) || ((uint)pX->nSkip < (uint)pY->nSkip)\n      )" ( (binary_expression "((int)(uVar2 - pY->nSkip) <= (int)(uVar5 - pX->nSkip)) || ((uint)pX->nSkip < (uint)pY->nSkip)" (parenthesized_expression "((int)(uVar2 - pY->nSkip) <= (int)(uVar5 - pX->nSkip))" ( (binary_expression "(int)(uVar2 - pY->nSkip) <= (int)(uVar5 - pX->nSkip)" (cast_expression "(int)(uVar2 - pY->nSkip)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar2 - pY->nSkip)" ( (binary_expression "uVar2 - pY->nSkip" identifier - (field_expression "pY->nSkip" identifier -> field_identifier)) ))) <= (cast_expression "(int)(uVar5 - pX->nSkip)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar5 - pX->nSkip)" ( (binary_expression "uVar5 - pX->nSkip" identifier - (field_expression "pX->nSkip" identifier -> field_identifier)) )))) )) || (parenthesized_expression "((uint)pX->nSkip < (uint)pY->nSkip)" ( (binary_expression "(uint)pX->nSkip < (uint)pY->nSkip" (cast_expression "(uint)pX->nSkip" ( (type_descriptor "uint" type_identifier) ) (field_expression "pX->nSkip" identifier -> field_identifier)) < (cast_expression "(uint)pY->nSkip" ( (type_descriptor "uint" type_identifier) ) (field_expression "pY->nSkip" identifier -> field_identifier))) ))) )) || (parenthesized_expression "((pY->rRun <= pX->rRun && ((pY->rRun < pX->rRun || (pY->nOut < pX->nOut)))))" ( (parenthesized_expression "(pY->rRun <= pX->rRun && ((pY->rRun < pX->rRun || (pY->nOut < pX->nOut))))" ( (binary_expression "pY->rRun <= pX->rRun && ((pY->rRun < pX->rRun || (pY->nOut < pX->nOut)))" (binary_expression "pY->rRun <= pX->rRun" (field_expression "pY->rRun" identifier -> field_identifier) <= (field_expression "pX->rRun" identifier -> field_identifier)) && (parenthesized_expression "((pY->rRun < pX->rRun || (pY->nOut < pX->nOut)))" ( (parenthesized_expression "(pY->rRun < pX->rRun || (pY->nOut < pX->nOut))" ( (binary_expression "pY->rRun < pX->rRun || (pY->nOut < pX->nOut)" (binary_expression "pY->rRun < pX->rRun" (field_expression "pY->rRun" identifier -> field_identifier) < (field_expression "pX->rRun" identifier -> field_identifier)) || (parenthesized_expression "(pY->nOut < pX->nOut)" ( (binary_expression "pY->nOut < pX->nOut" (field_expression "pY->nOut" identifier -> field_identifier) < (field_expression "pX->nOut" identifier -> field_identifier)) ))) )) ))) )) ))) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "iVar7 = uVar5 - 1;" (assignment_expression "iVar7 = uVar5 - 1" identifier = (binary_expression "uVar5 - 1" identifier - number_literal)) ;) (if_statement "if (uVar5 != 0) {\n    iVar8 = uVar2 - 1;\n    ppWVar6 = pX->aLTerm + iVar7;\n    do {\n      if (*ppWVar6 != (WhereTerm *)0x0) {\n        if (iVar8 == -1) {\n          return 0;\n        }\n        pWVar3 = pY->aLTerm[iVar8];\n        iVar4 = iVar8;\n        ppWVar1 = pY->aLTerm + (uVar2 - 2);\n        while (*ppWVar6 != pWVar3) {\n          iVar4 = iVar4 + -1;\n          if (iVar4 == -1) {\n            return 0;\n          }\n          pWVar3 = *ppWVar1;\n          ppWVar1 = ppWVar1 + -1;\n        }\n      }\n      iVar7 = iVar7 + -1;\n      ppWVar6 = ppWVar6 + -1;\n    } while (iVar7 != -1);\n  }" if (parenthesized_expression "(uVar5 != 0)" ( (binary_expression "uVar5 != 0" identifier != number_literal) )) (compound_statement "{\n    iVar8 = uVar2 - 1;\n    ppWVar6 = pX->aLTerm + iVar7;\n    do {\n      if (*ppWVar6 != (WhereTerm *)0x0) {\n        if (iVar8 == -1) {\n          return 0;\n        }\n        pWVar3 = pY->aLTerm[iVar8];\n        iVar4 = iVar8;\n        ppWVar1 = pY->aLTerm + (uVar2 - 2);\n        while (*ppWVar6 != pWVar3) {\n          iVar4 = iVar4 + -1;\n          if (iVar4 == -1) {\n            return 0;\n          }\n          pWVar3 = *ppWVar1;\n          ppWVar1 = ppWVar1 + -1;\n        }\n      }\n      iVar7 = iVar7 + -1;\n      ppWVar6 = ppWVar6 + -1;\n    } while (iVar7 != -1);\n  }" { (expression_statement "iVar8 = uVar2 - 1;" (assignment_expression "iVar8 = uVar2 - 1" identifier = (binary_expression "uVar2 - 1" identifier - number_literal)) ;) (expression_statement "ppWVar6 = pX->aLTerm + iVar7;" (assignment_expression "ppWVar6 = pX->aLTerm + iVar7" identifier = (binary_expression "pX->aLTerm + iVar7" (field_expression "pX->aLTerm" identifier -> field_identifier) + identifier)) ;) (do_statement "do {\n      if (*ppWVar6 != (WhereTerm *)0x0) {\n        if (iVar8 == -1) {\n          return 0;\n        }\n        pWVar3 = pY->aLTerm[iVar8];\n        iVar4 = iVar8;\n        ppWVar1 = pY->aLTerm + (uVar2 - 2);\n        while (*ppWVar6 != pWVar3) {\n          iVar4 = iVar4 + -1;\n          if (iVar4 == -1) {\n            return 0;\n          }\n          pWVar3 = *ppWVar1;\n          ppWVar1 = ppWVar1 + -1;\n        }\n      }\n      iVar7 = iVar7 + -1;\n      ppWVar6 = ppWVar6 + -1;\n    } while (iVar7 != -1);" do (compound_statement "{\n      if (*ppWVar6 != (WhereTerm *)0x0) {\n        if (iVar8 == -1) {\n          return 0;\n        }\n        pWVar3 = pY->aLTerm[iVar8];\n        iVar4 = iVar8;\n        ppWVar1 = pY->aLTerm + (uVar2 - 2);\n        while (*ppWVar6 != pWVar3) {\n          iVar4 = iVar4 + -1;\n          if (iVar4 == -1) {\n            return 0;\n          }\n          pWVar3 = *ppWVar1;\n          ppWVar1 = ppWVar1 + -1;\n        }\n      }\n      iVar7 = iVar7 + -1;\n      ppWVar6 = ppWVar6 + -1;\n    }" { (if_statement "if (*ppWVar6 != (WhereTerm *)0x0) {\n        if (iVar8 == -1) {\n          return 0;\n        }\n        pWVar3 = pY->aLTerm[iVar8];\n        iVar4 = iVar8;\n        ppWVar1 = pY->aLTerm + (uVar2 - 2);\n        while (*ppWVar6 != pWVar3) {\n          iVar4 = iVar4 + -1;\n          if (iVar4 == -1) {\n            return 0;\n          }\n          pWVar3 = *ppWVar1;\n          ppWVar1 = ppWVar1 + -1;\n        }\n      }" if (parenthesized_expression "(*ppWVar6 != (WhereTerm *)0x0)" ( (binary_expression "*ppWVar6 != (WhereTerm *)0x0" (pointer_expression "*ppWVar6" * identifier) != (cast_expression "(WhereTerm *)0x0" ( (type_descriptor "WhereTerm *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        if (iVar8 == -1) {\n          return 0;\n        }\n        pWVar3 = pY->aLTerm[iVar8];\n        iVar4 = iVar8;\n        ppWVar1 = pY->aLTerm + (uVar2 - 2);\n        while (*ppWVar6 != pWVar3) {\n          iVar4 = iVar4 + -1;\n          if (iVar4 == -1) {\n            return 0;\n          }\n          pWVar3 = *ppWVar1;\n          ppWVar1 = ppWVar1 + -1;\n        }\n      }" { (if_statement "if (iVar8 == -1) {\n          return 0;\n        }" if (parenthesized_expression "(iVar8 == -1)" ( (binary_expression "iVar8 == -1" identifier == number_literal) )) (compound_statement "{\n          return 0;\n        }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "pWVar3 = pY->aLTerm[iVar8];" (assignment_expression "pWVar3 = pY->aLTerm[iVar8]" identifier = (subscript_expression "pY->aLTerm[iVar8]" (field_expression "pY->aLTerm" identifier -> field_identifier) [ identifier ])) ;) (expression_statement "iVar4 = iVar8;" (assignment_expression "iVar4 = iVar8" identifier = identifier) ;) (expression_statement "ppWVar1 = pY->aLTerm + (uVar2 - 2);" (assignment_expression "ppWVar1 = pY->aLTerm + (uVar2 - 2)" identifier = (binary_expression "pY->aLTerm + (uVar2 - 2)" (field_expression "pY->aLTerm" identifier -> field_identifier) + (parenthesized_expression "(uVar2 - 2)" ( (binary_expression "uVar2 - 2" identifier - number_literal) )))) ;) (while_statement "while (*ppWVar6 != pWVar3) {\n          iVar4 = iVar4 + -1;\n          if (iVar4 == -1) {\n            return 0;\n          }\n          pWVar3 = *ppWVar1;\n          ppWVar1 = ppWVar1 + -1;\n        }" while (parenthesized_expression "(*ppWVar6 != pWVar3)" ( (binary_expression "*ppWVar6 != pWVar3" (pointer_expression "*ppWVar6" * identifier) != identifier) )) (compound_statement "{\n          iVar4 = iVar4 + -1;\n          if (iVar4 == -1) {\n            return 0;\n          }\n          pWVar3 = *ppWVar1;\n          ppWVar1 = ppWVar1 + -1;\n        }" { (expression_statement "iVar4 = iVar4 + -1;" (assignment_expression "iVar4 = iVar4 + -1" identifier = (binary_expression "iVar4 + -1" identifier + number_literal)) ;) (if_statement "if (iVar4 == -1) {\n            return 0;\n          }" if (parenthesized_expression "(iVar4 == -1)" ( (binary_expression "iVar4 == -1" identifier == number_literal) )) (compound_statement "{\n            return 0;\n          }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "pWVar3 = *ppWVar1;" (assignment_expression "pWVar3 = *ppWVar1" identifier = (pointer_expression "*ppWVar1" * identifier)) ;) (expression_statement "ppWVar1 = ppWVar1 + -1;" (assignment_expression "ppWVar1 = ppWVar1 + -1" identifier = (binary_expression "ppWVar1 + -1" identifier + number_literal)) ;) })) })) (expression_statement "iVar7 = iVar7 + -1;" (assignment_expression "iVar7 = iVar7 + -1" identifier = (binary_expression "iVar7 + -1" identifier + number_literal)) ;) (expression_statement "ppWVar6 = ppWVar6 + -1;" (assignment_expression "ppWVar6 = ppWVar6 + -1" identifier = (binary_expression "ppWVar6 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar7 != -1)" ( (binary_expression "iVar7 != -1" identifier != number_literal) )) ;) })) (if_statement "if ((pX->wsFlags & 0x40) == 0) {\n    return 1;\n  }" if (parenthesized_expression "((pX->wsFlags & 0x40) == 0)" ( (binary_expression "(pX->wsFlags & 0x40) == 0" (parenthesized_expression "(pX->wsFlags & 0x40)" ( (binary_expression "pX->wsFlags & 0x40" (field_expression "pX->wsFlags" identifier -> field_identifier) & number_literal) )) == number_literal) )) (compound_statement "{\n    return 1;\n  }" { (return_statement "return 1;" return number_literal ;) })) (return_statement "return (pY->wsFlags << 0x19) >> 0x1f;" return (binary_expression "(pY->wsFlags << 0x19) >> 0x1f" (parenthesized_expression "(pY->wsFlags << 0x19)" ( (binary_expression "pY->wsFlags << 0x19" (field_expression "pY->wsFlags" identifier -> field_identifier) << number_literal) )) >> number_literal) ;) })))
(translation_unit "uint FUN_00020a0c(int param_1,int param_2)\n\n{\n  int *piVar1;\n  uint uVar2;\n  int iVar3;\n  int iVar4;\n  uint uVar5;\n  int *piVar6;\n  int iVar7;\n  int iVar8;\n  \n  uVar5 = (uint)*(ushort *)(param_1 + 0x28);\n  uVar2 = (uint)*(ushort *)(param_2 + 0x28);\n  if ((((int)(uVar2 - *(ushort *)(param_2 + 0x2a)) <= (int)(uVar5 - *(ushort *)(param_1 + 0x2a))) ||\n      ((uint)*(ushort *)(param_1 + 0x2a) < (uint)*(ushort *)(param_2 + 0x2a))) ||\n     ((*(short *)(param_2 + 0x14) <= *(short *)(param_1 + 0x14) &&\n      ((*(short *)(param_2 + 0x14) < *(short *)(param_1 + 0x14) ||\n       (*(short *)(param_2 + 0x16) < *(short *)(param_1 + 0x16))))))) {\n    return 0;\n  }\n  iVar7 = uVar5 - 1;\n  if (uVar5 != 0) {\n    iVar8 = uVar2 - 1;\n    piVar6 = (int *)(*(int *)(param_1 + 0x30) + iVar7 * 4);\n    do {\n      if (*piVar6 != 0) {\n        if (iVar8 == -1) {\n          return 0;\n        }\n        iVar3 = *(int *)(*(int *)(param_2 + 0x30) + iVar8 * 4);\n        iVar4 = iVar8;\n        piVar1 = (int *)(*(int *)(param_2 + 0x30) + uVar2 * 4 + -8);\n        while (*piVar6 != iVar3) {\n          iVar4 = iVar4 + -1;\n          if (iVar4 == -1) {\n            return 0;\n          }\n          iVar3 = *piVar1;\n          piVar1 = piVar1 + -1;\n        }\n      }\n      iVar7 = iVar7 + -1;\n      piVar6 = piVar6 + -1;\n    } while (iVar7 != -1);\n  }\n  if ((*(uint *)(param_1 + 0x24) & 0x40) == 0) {\n    return 1;\n  }\n  return (uint)(*(int *)(param_2 + 0x24) << 0x19) >> 0x1f;\n}\n\n" (function_definition "uint FUN_00020a0c(int param_1,int param_2)\n\n{\n  int *piVar1;\n  uint uVar2;\n  int iVar3;\n  int iVar4;\n  uint uVar5;\n  int *piVar6;\n  int iVar7;\n  int iVar8;\n  \n  uVar5 = (uint)*(ushort *)(param_1 + 0x28);\n  uVar2 = (uint)*(ushort *)(param_2 + 0x28);\n  if ((((int)(uVar2 - *(ushort *)(param_2 + 0x2a)) <= (int)(uVar5 - *(ushort *)(param_1 + 0x2a))) ||\n      ((uint)*(ushort *)(param_1 + 0x2a) < (uint)*(ushort *)(param_2 + 0x2a))) ||\n     ((*(short *)(param_2 + 0x14) <= *(short *)(param_1 + 0x14) &&\n      ((*(short *)(param_2 + 0x14) < *(short *)(param_1 + 0x14) ||\n       (*(short *)(param_2 + 0x16) < *(short *)(param_1 + 0x16))))))) {\n    return 0;\n  }\n  iVar7 = uVar5 - 1;\n  if (uVar5 != 0) {\n    iVar8 = uVar2 - 1;\n    piVar6 = (int *)(*(int *)(param_1 + 0x30) + iVar7 * 4);\n    do {\n      if (*piVar6 != 0) {\n        if (iVar8 == -1) {\n          return 0;\n        }\n        iVar3 = *(int *)(*(int *)(param_2 + 0x30) + iVar8 * 4);\n        iVar4 = iVar8;\n        piVar1 = (int *)(*(int *)(param_2 + 0x30) + uVar2 * 4 + -8);\n        while (*piVar6 != iVar3) {\n          iVar4 = iVar4 + -1;\n          if (iVar4 == -1) {\n            return 0;\n          }\n          iVar3 = *piVar1;\n          piVar1 = piVar1 + -1;\n        }\n      }\n      iVar7 = iVar7 + -1;\n      piVar6 = piVar6 + -1;\n    } while (iVar7 != -1);\n  }\n  if ((*(uint *)(param_1 + 0x24) & 0x40) == 0) {\n    return 1;\n  }\n  return (uint)(*(int *)(param_2 + 0x24) << 0x19) >> 0x1f;\n}" type_identifier (function_declarator "FUN_00020a0c(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 *piVar1;\n  uint uVar2;\n  int iVar3;\n  int iVar4;\n  uint uVar5;\n  int *piVar6;\n  int iVar7;\n  int iVar8;\n  \n  uVar5 = (uint)*(ushort *)(param_1 + 0x28);\n  uVar2 = (uint)*(ushort *)(param_2 + 0x28);\n  if ((((int)(uVar2 - *(ushort *)(param_2 + 0x2a)) <= (int)(uVar5 - *(ushort *)(param_1 + 0x2a))) ||\n      ((uint)*(ushort *)(param_1 + 0x2a) < (uint)*(ushort *)(param_2 + 0x2a))) ||\n     ((*(short *)(param_2 + 0x14) <= *(short *)(param_1 + 0x14) &&\n      ((*(short *)(param_2 + 0x14) < *(short *)(param_1 + 0x14) ||\n       (*(short *)(param_2 + 0x16) < *(short *)(param_1 + 0x16))))))) {\n    return 0;\n  }\n  iVar7 = uVar5 - 1;\n  if (uVar5 != 0) {\n    iVar8 = uVar2 - 1;\n    piVar6 = (int *)(*(int *)(param_1 + 0x30) + iVar7 * 4);\n    do {\n      if (*piVar6 != 0) {\n        if (iVar8 == -1) {\n          return 0;\n        }\n        iVar3 = *(int *)(*(int *)(param_2 + 0x30) + iVar8 * 4);\n        iVar4 = iVar8;\n        piVar1 = (int *)(*(int *)(param_2 + 0x30) + uVar2 * 4 + -8);\n        while (*piVar6 != iVar3) {\n          iVar4 = iVar4 + -1;\n          if (iVar4 == -1) {\n            return 0;\n          }\n          iVar3 = *piVar1;\n          piVar1 = piVar1 + -1;\n        }\n      }\n      iVar7 = iVar7 + -1;\n      piVar6 = piVar6 + -1;\n    } while (iVar7 != -1);\n  }\n  if ((*(uint *)(param_1 + 0x24) & 0x40) == 0) {\n    return 1;\n  }\n  return (uint)(*(int *)(param_2 + 0x24) << 0x19) >> 0x1f;\n}" { (declaration "int *piVar1;" primitive_type (pointer_declarator "*piVar1" * identifier) ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "int *piVar6;" primitive_type (pointer_declarator "*piVar6" * identifier) ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "int iVar8;" primitive_type identifier ;) (expression_statement "uVar5 = (uint)*(ushort *)(param_1 + 0x28);" (assignment_expression "uVar5 = (uint)*(ushort *)(param_1 + 0x28)" identifier = (binary_expression "(uint)*(ushort *)(param_1 + 0x28)" (parenthesized_expression "(uint)" ( identifier )) * (cast_expression "(ushort *)(param_1 + 0x28)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) ))))) ;) (expression_statement "uVar2 = (uint)*(ushort *)(param_2 + 0x28);" (assignment_expression "uVar2 = (uint)*(ushort *)(param_2 + 0x28)" identifier = (binary_expression "(uint)*(ushort *)(param_2 + 0x28)" (parenthesized_expression "(uint)" ( identifier )) * (cast_expression "(ushort *)(param_2 + 0x28)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x28)" ( (binary_expression "param_2 + 0x28" identifier + number_literal) ))))) ;) (if_statement "if ((((int)(uVar2 - *(ushort *)(param_2 + 0x2a)) <= (int)(uVar5 - *(ushort *)(param_1 + 0x2a))) ||\n      ((uint)*(ushort *)(param_1 + 0x2a) < (uint)*(ushort *)(param_2 + 0x2a))) ||\n     ((*(short *)(param_2 + 0x14) <= *(short *)(param_1 + 0x14) &&\n      ((*(short *)(param_2 + 0x14) < *(short *)(param_1 + 0x14) ||\n       (*(short *)(param_2 + 0x16) < *(short *)(param_1 + 0x16))))))) {\n    return 0;\n  }" if (parenthesized_expression "((((int)(uVar2 - *(ushort *)(param_2 + 0x2a)) <= (int)(uVar5 - *(ushort *)(param_1 + 0x2a))) ||\n      ((uint)*(ushort *)(param_1 + 0x2a) < (uint)*(ushort *)(param_2 + 0x2a))) ||\n     ((*(short *)(param_2 + 0x14) <= *(short *)(param_1 + 0x14) &&\n      ((*(short *)(param_2 + 0x14) < *(short *)(param_1 + 0x14) ||\n       (*(short *)(param_2 + 0x16) < *(short *)(param_1 + 0x16)))))))" ( (binary_expression "(((int)(uVar2 - *(ushort *)(param_2 + 0x2a)) <= (int)(uVar5 - *(ushort *)(param_1 + 0x2a))) ||\n      ((uint)*(ushort *)(param_1 + 0x2a) < (uint)*(ushort *)(param_2 + 0x2a))) ||\n     ((*(short *)(param_2 + 0x14) <= *(short *)(param_1 + 0x14) &&\n      ((*(short *)(param_2 + 0x14) < *(short *)(param_1 + 0x14) ||\n       (*(short *)(param_2 + 0x16) < *(short *)(param_1 + 0x16))))))" (parenthesized_expression "(((int)(uVar2 - *(ushort *)(param_2 + 0x2a)) <= (int)(uVar5 - *(ushort *)(param_1 + 0x2a))) ||\n      ((uint)*(ushort *)(param_1 + 0x2a) < (uint)*(ushort *)(param_2 + 0x2a)))" ( (binary_expression "((int)(uVar2 - *(ushort *)(param_2 + 0x2a)) <= (int)(uVar5 - *(ushort *)(param_1 + 0x2a))) ||\n      ((uint)*(ushort *)(param_1 + 0x2a) < (uint)*(ushort *)(param_2 + 0x2a))" (parenthesized_expression "((int)(uVar2 - *(ushort *)(param_2 + 0x2a)) <= (int)(uVar5 - *(ushort *)(param_1 + 0x2a)))" ( (binary_expression "(int)(uVar2 - *(ushort *)(param_2 + 0x2a)) <= (int)(uVar5 - *(ushort *)(param_1 + 0x2a))" (cast_expression "(int)(uVar2 - *(ushort *)(param_2 + 0x2a))" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar2 - *(ushort *)(param_2 + 0x2a))" ( (binary_expression "uVar2 - *(ushort *)(param_2 + 0x2a)" identifier - (pointer_expression "*(ushort *)(param_2 + 0x2a)" * (cast_expression "(ushort *)(param_2 + 0x2a)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x2a)" ( (binary_expression "param_2 + 0x2a" identifier + number_literal) ))))) ))) <= (cast_expression "(int)(uVar5 - *(ushort *)(param_1 + 0x2a))" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar5 - *(ushort *)(param_1 + 0x2a))" ( (binary_expression "uVar5 - *(ushort *)(param_1 + 0x2a)" identifier - (pointer_expression "*(ushort *)(param_1 + 0x2a)" * (cast_expression "(ushort *)(param_1 + 0x2a)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x2a)" ( (binary_expression "param_1 + 0x2a" identifier + number_literal) ))))) )))) )) || (parenthesized_expression "((uint)*(ushort *)(param_1 + 0x2a) < (uint)*(ushort *)(param_2 + 0x2a))" ( (binary_expression "(uint)*(ushort *)(param_1 + 0x2a) < (uint)*(ushort *)(param_2 + 0x2a)" (binary_expression "(uint)*(ushort *)(param_1 + 0x2a)" (parenthesized_expression "(uint)" ( identifier )) * (cast_expression "(ushort *)(param_1 + 0x2a)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x2a)" ( (binary_expression "param_1 + 0x2a" identifier + number_literal) )))) < (binary_expression "(uint)*(ushort *)(param_2 + 0x2a)" (parenthesized_expression "(uint)" ( identifier )) * (cast_expression "(ushort *)(param_2 + 0x2a)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x2a)" ( (binary_expression "param_2 + 0x2a" identifier + number_literal) ))))) ))) )) || (parenthesized_expression "((*(short *)(param_2 + 0x14) <= *(short *)(param_1 + 0x14) &&\n      ((*(short *)(param_2 + 0x14) < *(short *)(param_1 + 0x14) ||\n       (*(short *)(param_2 + 0x16) < *(short *)(param_1 + 0x16))))))" ( (parenthesized_expression "(*(short *)(param_2 + 0x14) <= *(short *)(param_1 + 0x14) &&\n      ((*(short *)(param_2 + 0x14) < *(short *)(param_1 + 0x14) ||\n       (*(short *)(param_2 + 0x16) < *(short *)(param_1 + 0x16)))))" ( (binary_expression "*(short *)(param_2 + 0x14) <= *(short *)(param_1 + 0x14) &&\n      ((*(short *)(param_2 + 0x14) < *(short *)(param_1 + 0x14) ||\n       (*(short *)(param_2 + 0x16) < *(short *)(param_1 + 0x16))))" (binary_expression "*(short *)(param_2 + 0x14) <= *(short *)(param_1 + 0x14)" (pointer_expression "*(short *)(param_2 + 0x14)" * (cast_expression "(short *)(param_2 + 0x14)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x14)" ( (binary_expression "param_2 + 0x14" identifier + number_literal) )))) <= (pointer_expression "*(short *)(param_1 + 0x14)" * (cast_expression "(short *)(param_1 + 0x14)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) ))))) && (parenthesized_expression "((*(short *)(param_2 + 0x14) < *(short *)(param_1 + 0x14) ||\n       (*(short *)(param_2 + 0x16) < *(short *)(param_1 + 0x16))))" ( (parenthesized_expression "(*(short *)(param_2 + 0x14) < *(short *)(param_1 + 0x14) ||\n       (*(short *)(param_2 + 0x16) < *(short *)(param_1 + 0x16)))" ( (binary_expression "*(short *)(param_2 + 0x14) < *(short *)(param_1 + 0x14) ||\n       (*(short *)(param_2 + 0x16) < *(short *)(param_1 + 0x16))" (binary_expression "*(short *)(param_2 + 0x14) < *(short *)(param_1 + 0x14)" (pointer_expression "*(short *)(param_2 + 0x14)" * (cast_expression "(short *)(param_2 + 0x14)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x14)" ( (binary_expression "param_2 + 0x14" identifier + number_literal) )))) < (pointer_expression "*(short *)(param_1 + 0x14)" * (cast_expression "(short *)(param_1 + 0x14)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) ))))) || (parenthesized_expression "(*(short *)(param_2 + 0x16) < *(short *)(param_1 + 0x16))" ( (binary_expression "*(short *)(param_2 + 0x16) < *(short *)(param_1 + 0x16)" (pointer_expression "*(short *)(param_2 + 0x16)" * (cast_expression "(short *)(param_2 + 0x16)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x16)" ( (binary_expression "param_2 + 0x16" identifier + number_literal) )))) < (pointer_expression "*(short *)(param_1 + 0x16)" * (cast_expression "(short *)(param_1 + 0x16)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16)" ( (binary_expression "param_1 + 0x16" identifier + number_literal) ))))) ))) )) ))) )) ))) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "iVar7 = uVar5 - 1;" (assignment_expression "iVar7 = uVar5 - 1" identifier = (binary_expression "uVar5 - 1" identifier - number_literal)) ;) (if_statement "if (uVar5 != 0) {\n    iVar8 = uVar2 - 1;\n    piVar6 = (int *)(*(int *)(param_1 + 0x30) + iVar7 * 4);\n    do {\n      if (*piVar6 != 0) {\n        if (iVar8 == -1) {\n          return 0;\n        }\n        iVar3 = *(int *)(*(int *)(param_2 + 0x30) + iVar8 * 4);\n        iVar4 = iVar8;\n        piVar1 = (int *)(*(int *)(param_2 + 0x30) + uVar2 * 4 + -8);\n        while (*piVar6 != iVar3) {\n          iVar4 = iVar4 + -1;\n          if (iVar4 == -1) {\n            return 0;\n          }\n          iVar3 = *piVar1;\n          piVar1 = piVar1 + -1;\n        }\n      }\n      iVar7 = iVar7 + -1;\n      piVar6 = piVar6 + -1;\n    } while (iVar7 != -1);\n  }" if (parenthesized_expression "(uVar5 != 0)" ( (binary_expression "uVar5 != 0" identifier != number_literal) )) (compound_statement "{\n    iVar8 = uVar2 - 1;\n    piVar6 = (int *)(*(int *)(param_1 + 0x30) + iVar7 * 4);\n    do {\n      if (*piVar6 != 0) {\n        if (iVar8 == -1) {\n          return 0;\n        }\n        iVar3 = *(int *)(*(int *)(param_2 + 0x30) + iVar8 * 4);\n        iVar4 = iVar8;\n        piVar1 = (int *)(*(int *)(param_2 + 0x30) + uVar2 * 4 + -8);\n        while (*piVar6 != iVar3) {\n          iVar4 = iVar4 + -1;\n          if (iVar4 == -1) {\n            return 0;\n          }\n          iVar3 = *piVar1;\n          piVar1 = piVar1 + -1;\n        }\n      }\n      iVar7 = iVar7 + -1;\n      piVar6 = piVar6 + -1;\n    } while (iVar7 != -1);\n  }" { (expression_statement "iVar8 = uVar2 - 1;" (assignment_expression "iVar8 = uVar2 - 1" identifier = (binary_expression "uVar2 - 1" identifier - number_literal)) ;) (expression_statement "piVar6 = (int *)(*(int *)(param_1 + 0x30) + iVar7 * 4);" (assignment_expression "piVar6 = (int *)(*(int *)(param_1 + 0x30) + iVar7 * 4)" identifier = (cast_expression "(int *)(*(int *)(param_1 + 0x30) + iVar7 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 0x30) + iVar7 * 4)" ( (binary_expression "*(int *)(param_1 + 0x30) + iVar7 * 4" (pointer_expression "*(int *)(param_1 + 0x30)" * (cast_expression "(int *)(param_1 + 0x30)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x30)" ( (binary_expression "param_1 + 0x30" identifier + number_literal) )))) + (binary_expression "iVar7 * 4" identifier * number_literal)) )))) ;) (do_statement "do {\n      if (*piVar6 != 0) {\n        if (iVar8 == -1) {\n          return 0;\n        }\n        iVar3 = *(int *)(*(int *)(param_2 + 0x30) + iVar8 * 4);\n        iVar4 = iVar8;\n        piVar1 = (int *)(*(int *)(param_2 + 0x30) + uVar2 * 4 + -8);\n        while (*piVar6 != iVar3) {\n          iVar4 = iVar4 + -1;\n          if (iVar4 == -1) {\n            return 0;\n          }\n          iVar3 = *piVar1;\n          piVar1 = piVar1 + -1;\n        }\n      }\n      iVar7 = iVar7 + -1;\n      piVar6 = piVar6 + -1;\n    } while (iVar7 != -1);" do (compound_statement "{\n      if (*piVar6 != 0) {\n        if (iVar8 == -1) {\n          return 0;\n        }\n        iVar3 = *(int *)(*(int *)(param_2 + 0x30) + iVar8 * 4);\n        iVar4 = iVar8;\n        piVar1 = (int *)(*(int *)(param_2 + 0x30) + uVar2 * 4 + -8);\n        while (*piVar6 != iVar3) {\n          iVar4 = iVar4 + -1;\n          if (iVar4 == -1) {\n            return 0;\n          }\n          iVar3 = *piVar1;\n          piVar1 = piVar1 + -1;\n        }\n      }\n      iVar7 = iVar7 + -1;\n      piVar6 = piVar6 + -1;\n    }" { (if_statement "if (*piVar6 != 0) {\n        if (iVar8 == -1) {\n          return 0;\n        }\n        iVar3 = *(int *)(*(int *)(param_2 + 0x30) + iVar8 * 4);\n        iVar4 = iVar8;\n        piVar1 = (int *)(*(int *)(param_2 + 0x30) + uVar2 * 4 + -8);\n        while (*piVar6 != iVar3) {\n          iVar4 = iVar4 + -1;\n          if (iVar4 == -1) {\n            return 0;\n          }\n          iVar3 = *piVar1;\n          piVar1 = piVar1 + -1;\n        }\n      }" if (parenthesized_expression "(*piVar6 != 0)" ( (binary_expression "*piVar6 != 0" (pointer_expression "*piVar6" * identifier) != number_literal) )) (compound_statement "{\n        if (iVar8 == -1) {\n          return 0;\n        }\n        iVar3 = *(int *)(*(int *)(param_2 + 0x30) + iVar8 * 4);\n        iVar4 = iVar8;\n        piVar1 = (int *)(*(int *)(param_2 + 0x30) + uVar2 * 4 + -8);\n        while (*piVar6 != iVar3) {\n          iVar4 = iVar4 + -1;\n          if (iVar4 == -1) {\n            return 0;\n          }\n          iVar3 = *piVar1;\n          piVar1 = piVar1 + -1;\n        }\n      }" { (if_statement "if (iVar8 == -1) {\n          return 0;\n        }" if (parenthesized_expression "(iVar8 == -1)" ( (binary_expression "iVar8 == -1" identifier == number_literal) )) (compound_statement "{\n          return 0;\n        }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "iVar3 = *(int *)(*(int *)(param_2 + 0x30) + iVar8 * 4);" (assignment_expression "iVar3 = *(int *)(*(int *)(param_2 + 0x30) + iVar8 * 4)" identifier = (pointer_expression "*(int *)(*(int *)(param_2 + 0x30) + iVar8 * 4)" * (cast_expression "(int *)(*(int *)(param_2 + 0x30) + iVar8 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_2 + 0x30) + iVar8 * 4)" ( (binary_expression "*(int *)(param_2 + 0x30) + iVar8 * 4" (pointer_expression "*(int *)(param_2 + 0x30)" * (cast_expression "(int *)(param_2 + 0x30)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x30)" ( (binary_expression "param_2 + 0x30" identifier + number_literal) )))) + (binary_expression "iVar8 * 4" identifier * number_literal)) ))))) ;) (expression_statement "iVar4 = iVar8;" (assignment_expression "iVar4 = iVar8" identifier = identifier) ;) (expression_statement "piVar1 = (int *)(*(int *)(param_2 + 0x30) + uVar2 * 4 + -8);" (assignment_expression "piVar1 = (int *)(*(int *)(param_2 + 0x30) + uVar2 * 4 + -8)" identifier = (cast_expression "(int *)(*(int *)(param_2 + 0x30) + uVar2 * 4 + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_2 + 0x30) + uVar2 * 4 + -8)" ( (binary_expression "*(int *)(param_2 + 0x30) + uVar2 * 4 + -8" (binary_expression "*(int *)(param_2 + 0x30) + uVar2 * 4" (pointer_expression "*(int *)(param_2 + 0x30)" * (cast_expression "(int *)(param_2 + 0x30)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x30)" ( (binary_expression "param_2 + 0x30" identifier + number_literal) )))) + (binary_expression "uVar2 * 4" identifier * number_literal)) + number_literal) )))) ;) (while_statement "while (*piVar6 != iVar3) {\n          iVar4 = iVar4 + -1;\n          if (iVar4 == -1) {\n            return 0;\n          }\n          iVar3 = *piVar1;\n          piVar1 = piVar1 + -1;\n        }" while (parenthesized_expression "(*piVar6 != iVar3)" ( (binary_expression "*piVar6 != iVar3" (pointer_expression "*piVar6" * identifier) != identifier) )) (compound_statement "{\n          iVar4 = iVar4 + -1;\n          if (iVar4 == -1) {\n            return 0;\n          }\n          iVar3 = *piVar1;\n          piVar1 = piVar1 + -1;\n        }" { (expression_statement "iVar4 = iVar4 + -1;" (assignment_expression "iVar4 = iVar4 + -1" identifier = (binary_expression "iVar4 + -1" identifier + number_literal)) ;) (if_statement "if (iVar4 == -1) {\n            return 0;\n          }" if (parenthesized_expression "(iVar4 == -1)" ( (binary_expression "iVar4 == -1" identifier == number_literal) )) (compound_statement "{\n            return 0;\n          }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "iVar3 = *piVar1;" (assignment_expression "iVar3 = *piVar1" identifier = (pointer_expression "*piVar1" * identifier)) ;) (expression_statement "piVar1 = piVar1 + -1;" (assignment_expression "piVar1 = piVar1 + -1" identifier = (binary_expression "piVar1 + -1" identifier + number_literal)) ;) })) })) (expression_statement "iVar7 = iVar7 + -1;" (assignment_expression "iVar7 = iVar7 + -1" identifier = (binary_expression "iVar7 + -1" identifier + number_literal)) ;) (expression_statement "piVar6 = piVar6 + -1;" (assignment_expression "piVar6 = piVar6 + -1" identifier = (binary_expression "piVar6 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar7 != -1)" ( (binary_expression "iVar7 != -1" identifier != number_literal) )) ;) })) (if_statement "if ((*(uint *)(param_1 + 0x24) & 0x40) == 0) {\n    return 1;\n  }" if (parenthesized_expression "((*(uint *)(param_1 + 0x24) & 0x40) == 0)" ( (binary_expression "(*(uint *)(param_1 + 0x24) & 0x40) == 0" (parenthesized_expression "(*(uint *)(param_1 + 0x24) & 0x40)" ( (binary_expression "*(uint *)(param_1 + 0x24) & 0x40" (pointer_expression "*(uint *)(param_1 + 0x24)" * (cast_expression "(uint *)(param_1 + 0x24)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x24)" ( (binary_expression "param_1 + 0x24" identifier + number_literal) )))) & number_literal) )) == number_literal) )) (compound_statement "{\n    return 1;\n  }" { (return_statement "return 1;" return number_literal ;) })) (return_statement "return (uint)(*(int *)(param_2 + 0x24) << 0x19) >> 0x1f;" return (binary_expression "(uint)(*(int *)(param_2 + 0x24) << 0x19) >> 0x1f" (call_expression "(uint)(*(int *)(param_2 + 0x24) << 0x19)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(*(int *)(param_2 + 0x24) << 0x19)" ( (binary_expression "*(int *)(param_2 + 0x24) << 0x19" (pointer_expression "*(int *)(param_2 + 0x24)" * (cast_expression "(int *)(param_2 + 0x24)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x24)" ( (binary_expression "param_2 + 0x24" identifier + number_literal) )))) << number_literal) ))) >> number_literal) ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( IDENT )) * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( IDENT )) * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression IDENT - (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ))) <= (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression IDENT - (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )))) )) || (parenthesized_expression ( (binary_expression (binary_expression (parenthesized_expression ( IDENT )) * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) < (binary_expression (parenthesized_expression ( IDENT )) * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ))) )) || (parenthesized_expression ( (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier short) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) <= (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier short) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) && (parenthesized_expression ( (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier short) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) < (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier short) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) || (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier short) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) < (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier short) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ))) )) ))) )) ))) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + (binary_expression IDENT * LIT)) )))) ;) (do_statement do (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) != LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + (binary_expression IDENT * LIT)) ))))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + (binary_expression IDENT * LIT)) + LIT) )))) ;) (while_statement while (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) != IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) })) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != LIT) )) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) )) == LIT) )) (compound_statement { (return_statement return LIT ;) })) (return_statement return (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) << LIT) ))) >> LIT) ;) })))
(function_definition "uint FUN_00020a0c(int param_1,int param_2)\n\n{\n  int *piVar1;\n  uint uVar2;\n  int iVar3;\n  int iVar4;\n  uint uVar5;\n  int *piVar6;\n  int iVar7;\n  int iVar8;\n  \n  uVar5 = (uint)*(ushort *)(param_1 + 0x28);\n  uVar2 = (uint)*(ushort *)(param_2 + 0x28);\n  if ((((int)(uVar2 - *(ushort *)(param_2 + 0x2a)) <= (int)(uVar5 - *(ushort *)(param_1 + 0x2a))) ||\n      ((uint)*(ushort *)(param_1 + 0x2a) < (uint)*(ushort *)(param_2 + 0x2a))) ||\n     ((*(short *)(param_2 + 0x14) <= *(short *)(param_1 + 0x14) &&\n      ((*(short *)(param_2 + 0x14) < *(short *)(param_1 + 0x14) ||\n       (*(short *)(param_2 + 0x16) < *(short *)(param_1 + 0x16))))))) {\n    return 0;\n  }\n  iVar7 = uVar5 - 1;\n  if (uVar5 != 0) {\n    iVar8 = uVar2 - 1;\n    piVar6 = (int *)(*(int *)(param_1 + 0x30) + iVar7 * 4);\n    do {\n      if (*piVar6 != 0) {\n        if (iVar8 == -1) {\n          return 0;\n        }\n        iVar3 = *(int *)(*(int *)(param_2 + 0x30) + iVar8 * 4);\n        iVar4 = iVar8;\n        piVar1 = (int *)(*(int *)(param_2 + 0x30) + uVar2 * 4 + -8);\n        while (*piVar6 != iVar3) {\n          iVar4 = iVar4 + -1;\n          if (iVar4 == -1) {\n            return 0;\n          }\n          iVar3 = *piVar1;\n          piVar1 = piVar1 + -1;\n        }\n      }\n      iVar7 = iVar7 + -1;\n      piVar6 = piVar6 + -1;\n    } while (iVar7 != -1);\n  }\n  if ((*(uint *)(param_1 + 0x24) & 0x40) == 0) {\n    return 1;\n  }\n  return (uint)(*(int *)(param_2 + 0x24) << 0x19) >> 0x1f;\n}" (type_identifier "uint") (function_declarator "FUN_00020a0c(int param_1,int param_2)" (identifier "FUN_00020a0c") (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 *piVar1;\n  uint uVar2;\n  int iVar3;\n  int iVar4;\n  uint uVar5;\n  int *piVar6;\n  int iVar7;\n  int iVar8;\n  \n  uVar5 = (uint)*(ushort *)(param_1 + 0x28);\n  uVar2 = (uint)*(ushort *)(param_2 + 0x28);\n  if ((((int)(uVar2 - *(ushort *)(param_2 + 0x2a)) <= (int)(uVar5 - *(ushort *)(param_1 + 0x2a))) ||\n      ((uint)*(ushort *)(param_1 + 0x2a) < (uint)*(ushort *)(param_2 + 0x2a))) ||\n     ((*(short *)(param_2 + 0x14) <= *(short *)(param_1 + 0x14) &&\n      ((*(short *)(param_2 + 0x14) < *(short *)(param_1 + 0x14) ||\n       (*(short *)(param_2 + 0x16) < *(short *)(param_1 + 0x16))))))) {\n    return 0;\n  }\n  iVar7 = uVar5 - 1;\n  if (uVar5 != 0) {\n    iVar8 = uVar2 - 1;\n    piVar6 = (int *)(*(int *)(param_1 + 0x30) + iVar7 * 4);\n    do {\n      if (*piVar6 != 0) {\n        if (iVar8 == -1) {\n          return 0;\n        }\n        iVar3 = *(int *)(*(int *)(param_2 + 0x30) + iVar8 * 4);\n        iVar4 = iVar8;\n        piVar1 = (int *)(*(int *)(param_2 + 0x30) + uVar2 * 4 + -8);\n        while (*piVar6 != iVar3) {\n          iVar4 = iVar4 + -1;\n          if (iVar4 == -1) {\n            return 0;\n          }\n          iVar3 = *piVar1;\n          piVar1 = piVar1 + -1;\n        }\n      }\n      iVar7 = iVar7 + -1;\n      piVar6 = piVar6 + -1;\n    } while (iVar7 != -1);\n  }\n  if ((*(uint *)(param_1 + 0x24) & 0x40) == 0) {\n    return 1;\n  }\n  return (uint)(*(int *)(param_2 + 0x24) << 0x19) >> 0x1f;\n}" ({ "{") (declaration "int *piVar1;" (primitive_type "int") (pointer_declarator "*piVar1" (* "*") (identifier "piVar1")) (; ";")) (declaration "uint uVar2;" (type_identifier "uint") (identifier "uVar2") (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (declaration "int iVar4;" (primitive_type "int") (identifier "iVar4") (; ";")) (declaration "uint uVar5;" (type_identifier "uint") (identifier "uVar5") (; ";")) (declaration "int *piVar6;" (primitive_type "int") (pointer_declarator "*piVar6" (* "*") (identifier "piVar6")) (; ";")) (declaration "int iVar7;" (primitive_type "int") (identifier "iVar7") (; ";")) (declaration "int iVar8;" (primitive_type "int") (identifier "iVar8") (; ";")) (expression_statement "uVar5 = (uint)*(ushort *)(param_1 + 0x28);" (assignment_expression "uVar5 = (uint)*(ushort *)(param_1 + 0x28)" (identifier "uVar5") (= "=") (binary_expression "(uint)*(ushort *)(param_1 + 0x28)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (* "*") (cast_expression "(ushort *)(param_1 + 0x28)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x28)" (( "(") (binary_expression "param_1 + 0x28" (identifier "param_1") (+ "+") (number_literal "0x28")) () ")"))))) (; ";")) (expression_statement "uVar2 = (uint)*(ushort *)(param_2 + 0x28);" (assignment_expression "uVar2 = (uint)*(ushort *)(param_2 + 0x28)" (identifier "uVar2") (= "=") (binary_expression "(uint)*(ushort *)(param_2 + 0x28)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (* "*") (cast_expression "(ushort *)(param_2 + 0x28)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x28)" (( "(") (binary_expression "param_2 + 0x28" (identifier "param_2") (+ "+") (number_literal "0x28")) () ")"))))) (; ";")) (if_statement "if ((((int)(uVar2 - *(ushort *)(param_2 + 0x2a)) <= (int)(uVar5 - *(ushort *)(param_1 + 0x2a))) ||\n      ((uint)*(ushort *)(param_1 + 0x2a) < (uint)*(ushort *)(param_2 + 0x2a))) ||\n     ((*(short *)(param_2 + 0x14) <= *(short *)(param_1 + 0x14) &&\n      ((*(short *)(param_2 + 0x14) < *(short *)(param_1 + 0x14) ||\n       (*(short *)(param_2 + 0x16) < *(short *)(param_1 + 0x16))))))) {\n    return 0;\n  }" (if "if") (parenthesized_expression "((((int)(uVar2 - *(ushort *)(param_2 + 0x2a)) <= (int)(uVar5 - *(ushort *)(param_1 + 0x2a))) ||\n      ((uint)*(ushort *)(param_1 + 0x2a) < (uint)*(ushort *)(param_2 + 0x2a))) ||\n     ((*(short *)(param_2 + 0x14) <= *(short *)(param_1 + 0x14) &&\n      ((*(short *)(param_2 + 0x14) < *(short *)(param_1 + 0x14) ||\n       (*(short *)(param_2 + 0x16) < *(short *)(param_1 + 0x16)))))))" (( "(") (binary_expression "(((int)(uVar2 - *(ushort *)(param_2 + 0x2a)) <= (int)(uVar5 - *(ushort *)(param_1 + 0x2a))) ||\n      ((uint)*(ushort *)(param_1 + 0x2a) < (uint)*(ushort *)(param_2 + 0x2a))) ||\n     ((*(short *)(param_2 + 0x14) <= *(short *)(param_1 + 0x14) &&\n      ((*(short *)(param_2 + 0x14) < *(short *)(param_1 + 0x14) ||\n       (*(short *)(param_2 + 0x16) < *(short *)(param_1 + 0x16))))))" (parenthesized_expression "(((int)(uVar2 - *(ushort *)(param_2 + 0x2a)) <= (int)(uVar5 - *(ushort *)(param_1 + 0x2a))) ||\n      ((uint)*(ushort *)(param_1 + 0x2a) < (uint)*(ushort *)(param_2 + 0x2a)))" (( "(") (binary_expression "((int)(uVar2 - *(ushort *)(param_2 + 0x2a)) <= (int)(uVar5 - *(ushort *)(param_1 + 0x2a))) ||\n      ((uint)*(ushort *)(param_1 + 0x2a) < (uint)*(ushort *)(param_2 + 0x2a))" (parenthesized_expression "((int)(uVar2 - *(ushort *)(param_2 + 0x2a)) <= (int)(uVar5 - *(ushort *)(param_1 + 0x2a)))" (( "(") (binary_expression "(int)(uVar2 - *(ushort *)(param_2 + 0x2a)) <= (int)(uVar5 - *(ushort *)(param_1 + 0x2a))" (cast_expression "(int)(uVar2 - *(ushort *)(param_2 + 0x2a))" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(uVar2 - *(ushort *)(param_2 + 0x2a))" (( "(") (binary_expression "uVar2 - *(ushort *)(param_2 + 0x2a)" (identifier "uVar2") (- "-") (pointer_expression "*(ushort *)(param_2 + 0x2a)" (* "*") (cast_expression "(ushort *)(param_2 + 0x2a)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x2a)" (( "(") (binary_expression "param_2 + 0x2a" (identifier "param_2") (+ "+") (number_literal "0x2a")) () ")"))))) () ")"))) (<= "<=") (cast_expression "(int)(uVar5 - *(ushort *)(param_1 + 0x2a))" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(uVar5 - *(ushort *)(param_1 + 0x2a))" (( "(") (binary_expression "uVar5 - *(ushort *)(param_1 + 0x2a)" (identifier "uVar5") (- "-") (pointer_expression "*(ushort *)(param_1 + 0x2a)" (* "*") (cast_expression "(ushort *)(param_1 + 0x2a)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x2a)" (( "(") (binary_expression "param_1 + 0x2a" (identifier "param_1") (+ "+") (number_literal "0x2a")) () ")"))))) () ")")))) () ")")) (|| "||") (parenthesized_expression "((uint)*(ushort *)(param_1 + 0x2a) < (uint)*(ushort *)(param_2 + 0x2a))" (( "(") (binary_expression "(uint)*(ushort *)(param_1 + 0x2a) < (uint)*(ushort *)(param_2 + 0x2a)" (binary_expression "(uint)*(ushort *)(param_1 + 0x2a)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (* "*") (cast_expression "(ushort *)(param_1 + 0x2a)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x2a)" (( "(") (binary_expression "param_1 + 0x2a" (identifier "param_1") (+ "+") (number_literal "0x2a")) () ")")))) (< "<") (binary_expression "(uint)*(ushort *)(param_2 + 0x2a)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (* "*") (cast_expression "(ushort *)(param_2 + 0x2a)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x2a)" (( "(") (binary_expression "param_2 + 0x2a" (identifier "param_2") (+ "+") (number_literal "0x2a")) () ")"))))) () ")"))) () ")")) (|| "||") (parenthesized_expression "((*(short *)(param_2 + 0x14) <= *(short *)(param_1 + 0x14) &&\n      ((*(short *)(param_2 + 0x14) < *(short *)(param_1 + 0x14) ||\n       (*(short *)(param_2 + 0x16) < *(short *)(param_1 + 0x16))))))" (( "(") (parenthesized_expression "(*(short *)(param_2 + 0x14) <= *(short *)(param_1 + 0x14) &&\n      ((*(short *)(param_2 + 0x14) < *(short *)(param_1 + 0x14) ||\n       (*(short *)(param_2 + 0x16) < *(short *)(param_1 + 0x16)))))" (( "(") (binary_expression "*(short *)(param_2 + 0x14) <= *(short *)(param_1 + 0x14) &&\n      ((*(short *)(param_2 + 0x14) < *(short *)(param_1 + 0x14) ||\n       (*(short *)(param_2 + 0x16) < *(short *)(param_1 + 0x16))))" (binary_expression "*(short *)(param_2 + 0x14) <= *(short *)(param_1 + 0x14)" (pointer_expression "*(short *)(param_2 + 0x14)" (* "*") (cast_expression "(short *)(param_2 + 0x14)" (( "(") (type_descriptor "short *" (sized_type_specifier "short" (short "short")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x14)" (( "(") (binary_expression "param_2 + 0x14" (identifier "param_2") (+ "+") (number_literal "0x14")) () ")")))) (<= "<=") (pointer_expression "*(short *)(param_1 + 0x14)" (* "*") (cast_expression "(short *)(param_1 + 0x14)" (( "(") (type_descriptor "short *" (sized_type_specifier "short" (short "short")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x14)" (( "(") (binary_expression "param_1 + 0x14" (identifier "param_1") (+ "+") (number_literal "0x14")) () ")"))))) (&& "&&") (parenthesized_expression "((*(short *)(param_2 + 0x14) < *(short *)(param_1 + 0x14) ||\n       (*(short *)(param_2 + 0x16) < *(short *)(param_1 + 0x16))))" (( "(") (parenthesized_expression "(*(short *)(param_2 + 0x14) < *(short *)(param_1 + 0x14) ||\n       (*(short *)(param_2 + 0x16) < *(short *)(param_1 + 0x16)))" (( "(") (binary_expression "*(short *)(param_2 + 0x14) < *(short *)(param_1 + 0x14) ||\n       (*(short *)(param_2 + 0x16) < *(short *)(param_1 + 0x16))" (binary_expression "*(short *)(param_2 + 0x14) < *(short *)(param_1 + 0x14)" (pointer_expression "*(short *)(param_2 + 0x14)" (* "*") (cast_expression "(short *)(param_2 + 0x14)" (( "(") (type_descriptor "short *" (sized_type_specifier "short" (short "short")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x14)" (( "(") (binary_expression "param_2 + 0x14" (identifier "param_2") (+ "+") (number_literal "0x14")) () ")")))) (< "<") (pointer_expression "*(short *)(param_1 + 0x14)" (* "*") (cast_expression "(short *)(param_1 + 0x14)" (( "(") (type_descriptor "short *" (sized_type_specifier "short" (short "short")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x14)" (( "(") (binary_expression "param_1 + 0x14" (identifier "param_1") (+ "+") (number_literal "0x14")) () ")"))))) (|| "||") (parenthesized_expression "(*(short *)(param_2 + 0x16) < *(short *)(param_1 + 0x16))" (( "(") (binary_expression "*(short *)(param_2 + 0x16) < *(short *)(param_1 + 0x16)" (pointer_expression "*(short *)(param_2 + 0x16)" (* "*") (cast_expression "(short *)(param_2 + 0x16)" (( "(") (type_descriptor "short *" (sized_type_specifier "short" (short "short")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x16)" (( "(") (binary_expression "param_2 + 0x16" (identifier "param_2") (+ "+") (number_literal "0x16")) () ")")))) (< "<") (pointer_expression "*(short *)(param_1 + 0x16)" (* "*") (cast_expression "(short *)(param_1 + 0x16)" (( "(") (type_descriptor "short *" (sized_type_specifier "short" (short "short")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16)" (( "(") (binary_expression "param_1 + 0x16" (identifier "param_1") (+ "+") (number_literal "0x16")) () ")"))))) () ")"))) () ")")) () ")"))) () ")")) () ")"))) () ")")) (compound_statement "{\n    return 0;\n  }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "iVar7 = uVar5 - 1;" (assignment_expression "iVar7 = uVar5 - 1" (identifier "iVar7") (= "=") (binary_expression "uVar5 - 1" (identifier "uVar5") (- "-") (number_literal "1"))) (; ";")) (if_statement "if (uVar5 != 0) {\n    iVar8 = uVar2 - 1;\n    piVar6 = (int *)(*(int *)(param_1 + 0x30) + iVar7 * 4);\n    do {\n      if (*piVar6 != 0) {\n        if (iVar8 == -1) {\n          return 0;\n        }\n        iVar3 = *(int *)(*(int *)(param_2 + 0x30) + iVar8 * 4);\n        iVar4 = iVar8;\n        piVar1 = (int *)(*(int *)(param_2 + 0x30) + uVar2 * 4 + -8);\n        while (*piVar6 != iVar3) {\n          iVar4 = iVar4 + -1;\n          if (iVar4 == -1) {\n            return 0;\n          }\n          iVar3 = *piVar1;\n          piVar1 = piVar1 + -1;\n        }\n      }\n      iVar7 = iVar7 + -1;\n      piVar6 = piVar6 + -1;\n    } while (iVar7 != -1);\n  }" (if "if") (parenthesized_expression "(uVar5 != 0)" (( "(") (binary_expression "uVar5 != 0" (identifier "uVar5") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    iVar8 = uVar2 - 1;\n    piVar6 = (int *)(*(int *)(param_1 + 0x30) + iVar7 * 4);\n    do {\n      if (*piVar6 != 0) {\n        if (iVar8 == -1) {\n          return 0;\n        }\n        iVar3 = *(int *)(*(int *)(param_2 + 0x30) + iVar8 * 4);\n        iVar4 = iVar8;\n        piVar1 = (int *)(*(int *)(param_2 + 0x30) + uVar2 * 4 + -8);\n        while (*piVar6 != iVar3) {\n          iVar4 = iVar4 + -1;\n          if (iVar4 == -1) {\n            return 0;\n          }\n          iVar3 = *piVar1;\n          piVar1 = piVar1 + -1;\n        }\n      }\n      iVar7 = iVar7 + -1;\n      piVar6 = piVar6 + -1;\n    } while (iVar7 != -1);\n  }" ({ "{") (expression_statement "iVar8 = uVar2 - 1;" (assignment_expression "iVar8 = uVar2 - 1" (identifier "iVar8") (= "=") (binary_expression "uVar2 - 1" (identifier "uVar2") (- "-") (number_literal "1"))) (; ";")) (expression_statement "piVar6 = (int *)(*(int *)(param_1 + 0x30) + iVar7 * 4);" (assignment_expression "piVar6 = (int *)(*(int *)(param_1 + 0x30) + iVar7 * 4)" (identifier "piVar6") (= "=") (cast_expression "(int *)(*(int *)(param_1 + 0x30) + iVar7 * 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_1 + 0x30) + iVar7 * 4)" (( "(") (binary_expression "*(int *)(param_1 + 0x30) + iVar7 * 4" (pointer_expression "*(int *)(param_1 + 0x30)" (* "*") (cast_expression "(int *)(param_1 + 0x30)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x30)" (( "(") (binary_expression "param_1 + 0x30" (identifier "param_1") (+ "+") (number_literal "0x30")) () ")")))) (+ "+") (binary_expression "iVar7 * 4" (identifier "iVar7") (* "*") (number_literal "4"))) () ")")))) (; ";")) (do_statement "do {\n      if (*piVar6 != 0) {\n        if (iVar8 == -1) {\n          return 0;\n        }\n        iVar3 = *(int *)(*(int *)(param_2 + 0x30) + iVar8 * 4);\n        iVar4 = iVar8;\n        piVar1 = (int *)(*(int *)(param_2 + 0x30) + uVar2 * 4 + -8);\n        while (*piVar6 != iVar3) {\n          iVar4 = iVar4 + -1;\n          if (iVar4 == -1) {\n            return 0;\n          }\n          iVar3 = *piVar1;\n          piVar1 = piVar1 + -1;\n        }\n      }\n      iVar7 = iVar7 + -1;\n      piVar6 = piVar6 + -1;\n    } while (iVar7 != -1);" (do "do") (compound_statement "{\n      if (*piVar6 != 0) {\n        if (iVar8 == -1) {\n          return 0;\n        }\n        iVar3 = *(int *)(*(int *)(param_2 + 0x30) + iVar8 * 4);\n        iVar4 = iVar8;\n        piVar1 = (int *)(*(int *)(param_2 + 0x30) + uVar2 * 4 + -8);\n        while (*piVar6 != iVar3) {\n          iVar4 = iVar4 + -1;\n          if (iVar4 == -1) {\n            return 0;\n          }\n          iVar3 = *piVar1;\n          piVar1 = piVar1 + -1;\n        }\n      }\n      iVar7 = iVar7 + -1;\n      piVar6 = piVar6 + -1;\n    }" ({ "{") (if_statement "if (*piVar6 != 0) {\n        if (iVar8 == -1) {\n          return 0;\n        }\n        iVar3 = *(int *)(*(int *)(param_2 + 0x30) + iVar8 * 4);\n        iVar4 = iVar8;\n        piVar1 = (int *)(*(int *)(param_2 + 0x30) + uVar2 * 4 + -8);\n        while (*piVar6 != iVar3) {\n          iVar4 = iVar4 + -1;\n          if (iVar4 == -1) {\n            return 0;\n          }\n          iVar3 = *piVar1;\n          piVar1 = piVar1 + -1;\n        }\n      }" (if "if") (parenthesized_expression "(*piVar6 != 0)" (( "(") (binary_expression "*piVar6 != 0" (pointer_expression "*piVar6" (* "*") (identifier "piVar6")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        if (iVar8 == -1) {\n          return 0;\n        }\n        iVar3 = *(int *)(*(int *)(param_2 + 0x30) + iVar8 * 4);\n        iVar4 = iVar8;\n        piVar1 = (int *)(*(int *)(param_2 + 0x30) + uVar2 * 4 + -8);\n        while (*piVar6 != iVar3) {\n          iVar4 = iVar4 + -1;\n          if (iVar4 == -1) {\n            return 0;\n          }\n          iVar3 = *piVar1;\n          piVar1 = piVar1 + -1;\n        }\n      }" ({ "{") (if_statement "if (iVar8 == -1) {\n          return 0;\n        }" (if "if") (parenthesized_expression "(iVar8 == -1)" (( "(") (binary_expression "iVar8 == -1" (identifier "iVar8") (== "==") (number_literal "-1")) () ")")) (compound_statement "{\n          return 0;\n        }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "iVar3 = *(int *)(*(int *)(param_2 + 0x30) + iVar8 * 4);" (assignment_expression "iVar3 = *(int *)(*(int *)(param_2 + 0x30) + iVar8 * 4)" (identifier "iVar3") (= "=") (pointer_expression "*(int *)(*(int *)(param_2 + 0x30) + iVar8 * 4)" (* "*") (cast_expression "(int *)(*(int *)(param_2 + 0x30) + iVar8 * 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_2 + 0x30) + iVar8 * 4)" (( "(") (binary_expression "*(int *)(param_2 + 0x30) + iVar8 * 4" (pointer_expression "*(int *)(param_2 + 0x30)" (* "*") (cast_expression "(int *)(param_2 + 0x30)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x30)" (( "(") (binary_expression "param_2 + 0x30" (identifier "param_2") (+ "+") (number_literal "0x30")) () ")")))) (+ "+") (binary_expression "iVar8 * 4" (identifier "iVar8") (* "*") (number_literal "4"))) () ")"))))) (; ";")) (expression_statement "iVar4 = iVar8;" (assignment_expression "iVar4 = iVar8" (identifier "iVar4") (= "=") (identifier "iVar8")) (; ";")) (expression_statement "piVar1 = (int *)(*(int *)(param_2 + 0x30) + uVar2 * 4 + -8);" (assignment_expression "piVar1 = (int *)(*(int *)(param_2 + 0x30) + uVar2 * 4 + -8)" (identifier "piVar1") (= "=") (cast_expression "(int *)(*(int *)(param_2 + 0x30) + uVar2 * 4 + -8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_2 + 0x30) + uVar2 * 4 + -8)" (( "(") (binary_expression "*(int *)(param_2 + 0x30) + uVar2 * 4 + -8" (binary_expression "*(int *)(param_2 + 0x30) + uVar2 * 4" (pointer_expression "*(int *)(param_2 + 0x30)" (* "*") (cast_expression "(int *)(param_2 + 0x30)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x30)" (( "(") (binary_expression "param_2 + 0x30" (identifier "param_2") (+ "+") (number_literal "0x30")) () ")")))) (+ "+") (binary_expression "uVar2 * 4" (identifier "uVar2") (* "*") (number_literal "4"))) (+ "+") (number_literal "-8")) () ")")))) (; ";")) (while_statement "while (*piVar6 != iVar3) {\n          iVar4 = iVar4 + -1;\n          if (iVar4 == -1) {\n            return 0;\n          }\n          iVar3 = *piVar1;\n          piVar1 = piVar1 + -1;\n        }" (while "while") (parenthesized_expression "(*piVar6 != iVar3)" (( "(") (binary_expression "*piVar6 != iVar3" (pointer_expression "*piVar6" (* "*") (identifier "piVar6")) (!= "!=") (identifier "iVar3")) () ")")) (compound_statement "{\n          iVar4 = iVar4 + -1;\n          if (iVar4 == -1) {\n            return 0;\n          }\n          iVar3 = *piVar1;\n          piVar1 = piVar1 + -1;\n        }" ({ "{") (expression_statement "iVar4 = iVar4 + -1;" (assignment_expression "iVar4 = iVar4 + -1" (identifier "iVar4") (= "=") (binary_expression "iVar4 + -1" (identifier "iVar4") (+ "+") (number_literal "-1"))) (; ";")) (if_statement "if (iVar4 == -1) {\n            return 0;\n          }" (if "if") (parenthesized_expression "(iVar4 == -1)" (( "(") (binary_expression "iVar4 == -1" (identifier "iVar4") (== "==") (number_literal "-1")) () ")")) (compound_statement "{\n            return 0;\n          }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "iVar3 = *piVar1;" (assignment_expression "iVar3 = *piVar1" (identifier "iVar3") (= "=") (pointer_expression "*piVar1" (* "*") (identifier "piVar1"))) (; ";")) (expression_statement "piVar1 = piVar1 + -1;" (assignment_expression "piVar1 = piVar1 + -1" (identifier "piVar1") (= "=") (binary_expression "piVar1 + -1" (identifier "piVar1") (+ "+") (number_literal "-1"))) (; ";")) (} "}"))) (} "}"))) (expression_statement "iVar7 = iVar7 + -1;" (assignment_expression "iVar7 = iVar7 + -1" (identifier "iVar7") (= "=") (binary_expression "iVar7 + -1" (identifier "iVar7") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "piVar6 = piVar6 + -1;" (assignment_expression "piVar6 = piVar6 + -1" (identifier "piVar6") (= "=") (binary_expression "piVar6 + -1" (identifier "piVar6") (+ "+") (number_literal "-1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar7 != -1)" (( "(") (binary_expression "iVar7 != -1" (identifier "iVar7") (!= "!=") (number_literal "-1")) () ")")) (; ";")) (} "}"))) (if_statement "if ((*(uint *)(param_1 + 0x24) & 0x40) == 0) {\n    return 1;\n  }" (if "if") (parenthesized_expression "((*(uint *)(param_1 + 0x24) & 0x40) == 0)" (( "(") (binary_expression "(*(uint *)(param_1 + 0x24) & 0x40) == 0" (parenthesized_expression "(*(uint *)(param_1 + 0x24) & 0x40)" (( "(") (binary_expression "*(uint *)(param_1 + 0x24) & 0x40" (pointer_expression "*(uint *)(param_1 + 0x24)" (* "*") (cast_expression "(uint *)(param_1 + 0x24)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x24)" (( "(") (binary_expression "param_1 + 0x24" (identifier "param_1") (+ "+") (number_literal "0x24")) () ")")))) (& "&") (number_literal "0x40")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    return 1;\n  }" ({ "{") (return_statement "return 1;" (return "return") (number_literal "1") (; ";")) (} "}"))) (return_statement "return (uint)(*(int *)(param_2 + 0x24) << 0x19) >> 0x1f;" (return "return") (binary_expression "(uint)(*(int *)(param_2 + 0x24) << 0x19) >> 0x1f" (call_expression "(uint)(*(int *)(param_2 + 0x24) << 0x19)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(*(int *)(param_2 + 0x24) << 0x19)" (( "(") (binary_expression "*(int *)(param_2 + 0x24) << 0x19" (pointer_expression "*(int *)(param_2 + 0x24)" (* "*") (cast_expression "(int *)(param_2 + 0x24)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x24)" (( "(") (binary_expression "param_2 + 0x24" (identifier "param_2") (+ "+") (number_literal "0x24")) () ")")))) (<< "<<") (number_literal "0x19")) () ")"))) (>> ">>") (number_literal "0x1f")) (; ";")) (} "}")))
(translation_unit (function_definition type: (type_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: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (identifier)) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (identifier)) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (identifier) right: (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: (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (identifier) right: (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: (parenthesized_expression (binary_expression left: (binary_expression left: (parenthesized_expression (identifier)) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (binary_expression left: (parenthesized_expression (identifier)) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))))) right: (parenthesized_expression (parenthesized_expression (binary_expression left: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) right: (parenthesized_expression (parenthesized_expression (binary_expression left: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) right: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))))))))))) consequence: (compound_statement (return_statement (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (binary_expression left: (identifier) right: (number_literal))))))) (do_statement body: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (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 (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (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: (binary_expression left: (identifier) right: (number_literal)))))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (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: (binary_expression left: (identifier) right: (number_literal))) right: (number_literal)))))) (while_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (identifier))) body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (return_statement (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) right: (number_literal))) consequence: (compound_statement (return_statement (number_literal)))) (return_statement (binary_expression left: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (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: (number_literal)))) right: (number_literal))))))

uint MASKED(int param_1,int param_2)

{
  int *piVar1;
  uint uVar2;
  int iVar3;
  int iVar4;
  uint uVar5;
  int *piVar6;
  int iVar7;
  int iVar8;
  
  uVar5 = (uint)*(ushort *)(param_1 + 0x28);
  uVar2 = (uint)*(ushort *)(param_2 + 0x28);
  if ((((int)(uVar2 - *(ushort *)(param_2 + 0x2a)) <= (int)(uVar5 - *(ushort *)(param_1 + 0x2a))) ||
      ((uint)*(ushort *)(param_1 + 0x2a) < (uint)*(ushort *)(param_2 + 0x2a))) ||
     ((*(short *)(param_2 + 0x14) <= *(short *)(param_1 + 0x14) &&
      ((*(short *)(param_2 + 0x14) < *(short *)(param_1 + 0x14) ||
       (*(short *)(param_2 + 0x16) < *(short *)(param_1 + 0x16))))))) {
    return 0;
  }
  iVar7 = uVar5 - 1;
  if (uVar5 != 0) {
    iVar8 = uVar2 - 1;
    piVar6 = (int *)(*(int *)(param_1 + 0x30) + iVar7 * 4);
    do {
      if (*piVar6 != 0) {
        if (iVar8 == -1) {
          return 0;
        }
        iVar3 = *(int *)(*(int *)(param_2 + 0x30) + iVar8 * 4);
        iVar4 = iVar8;
        piVar1 = (int *)(*(int *)(param_2 + 0x30) + uVar2 * 4 + -8);
        while (*piVar6 != iVar3) {
          iVar4 = iVar4 + -1;
          if (iVar4 == -1) {
            return 0;
          }
          iVar3 = *piVar1;
          piVar1 = piVar1 + -1;
        }
      }
      iVar7 = iVar7 + -1;
      piVar6 = piVar6 + -1;
    } while (iVar7 != -1);
  }
  if ((*(uint *)(param_1 + 0x24) & 0x40) == 0) {
    return 1;
  }
  return (uint)(*(int *)(param_2 + 0x24) << 0x19) >> 0x1f;
}

