
/* DWARF original prototype: int compare(Output_reloc<9,_false,_32,_false> * this,
   Output_reloc<9,_false,_32,_false> * r2) */

int __thiscall
gold::Output_reloc<9,_false,_32,_false>::compare
          (Output_reloc<9,_false,_32,_false> *this,Output_reloc<9,_false,_32,_false> *r2)

{
  byte bVar1;
  Elf_Addr EVar2;
  Elf_Addr EVar3;
  uint uVar4;
  uint uVar5;
  
  bVar1 = (byte)r2->field_0x1b >> 4 & 1;
  if ((this->field_0x1b & 0x10) == 0) {
    if (bVar1 != 0) {
      return 1;
    }
    uVar4 = get_symbol_index(this);
    uVar5 = get_symbol_index(r2);
    if (uVar4 < uVar5) {
      return -1;
    }
    if (uVar5 < uVar4) {
      return 1;
    }
  }
  else if (bVar1 == 0) {
    return -1;
  }
  EVar2 = get_address(this);
  EVar3 = get_address(r2);
  if (EVar3 <= EVar2) {
    if (EVar3 < EVar2) {
      return 1;
    }
    uVar5 = *(uint *)&this->field_0x18 & 0xfffffff;
    uVar4 = *(uint *)&r2->field_0x18 & 0xfffffff;
    if (uVar4 <= uVar5) {
      return (int)(uVar4 < uVar5);
    }
  }
  return -1;
}



ulong FUN_001e3a20(long param_1,long param_2)

{
  byte bVar1;
  uint uVar2;
  uint uVar3;
  
  bVar1 = *(byte *)(param_2 + 0x1b) >> 4 & 1;
  if ((*(byte *)(param_1 + 0x1b) & 0x10) == 0) {
    if (bVar1 != 0) {
      return 1;
    }
    uVar2 = FUN_001ca8d0();
    uVar3 = FUN_001ca8d0(param_2);
    if (uVar2 < uVar3) {
      return 0xffffffff;
    }
    if (uVar3 < uVar2) {
      return 1;
    }
  }
  else if (bVar1 == 0) {
    return 0xffffffff;
  }
  uVar2 = FUN_001e3750(param_1);
  uVar3 = FUN_001e3750(param_2);
  if (uVar3 <= uVar2) {
    if (uVar3 < uVar2) {
      return 1;
    }
    uVar3 = *(uint *)(param_1 + 0x18) & 0xfffffff;
    uVar2 = *(uint *)(param_2 + 0x18) & 0xfffffff;
    if (uVar2 <= uVar3) {
      return (ulong)(uVar2 < uVar3);
    }
  }
  return 0xffffffff;
}


MOVZX EAX,byte ptr [RSI + 0x1b]
PUSH R12
PUSH RBP
MOV RBP,RDI
SHR AL,0x4
PUSH RBX
MOV RBX,RSI
AND EAX,0x1
TEST byte ptr [RDI + 0x1b],0x10
JZ 0x001e3a80
TEST AL,AL
JZ 0x001e3a99
MOV RDI,RBP
CALL 0x001e3750
MOV RDI,RBX
MOV R12D,EAX
CALL 0x001e3750
MOV EAX,EAX
CMP R12,RAX
JL 0x001e3a99
JG 0x001e3aaa
MOV EDX,dword ptr [RBP + 0x18]
MOV EAX,dword ptr [RBX + 0x18]
AND EDX,0xfffffff
AND EAX,0xfffffff
CMP EDX,EAX
JC 0x001e3a99
SETA AL
POP RBX
POP RBP
MOVZX EAX,AL
POP R12
RET
TEST AL,AL
JNZ 0x001e3aaa
CALL 0x001ca8d0
MOV RDI,RBX
MOV R12D,EAX
CALL 0x001ca8d0
CMP R12D,EAX
JNC 0x001e3aa8
POP RBX
MOV EAX,0xffffffff
POP RBP
POP R12
RET
JBE 0x001e3a3e
POP RBX
MOV EAX,0x1
POP RBP
POP R12
RET
(translation_unit "ulong FUN_001e3a20(long param_1,long param_2)\n\n{\n  byte bVar1;\n  uint uVar2;\n  uint uVar3;\n  \n  bVar1 = *(byte *)(param_2 + 0x1b) >> 4 & 1;\n  if ((*(byte *)(param_1 + 0x1b) & 0x10) == 0) {\n    if (bVar1 != 0) {\n      return 1;\n    }\n    uVar2 = FUN_001ca8d0();\n    uVar3 = FUN_001ca8d0(param_2);\n    if (uVar2 < uVar3) {\n      return 0xffffffff;\n    }\n    if (uVar3 < uVar2) {\n      return 1;\n    }\n  }\n  else if (bVar1 == 0) {\n    return 0xffffffff;\n  }\n  uVar2 = FUN_001e3750(param_1);\n  uVar3 = FUN_001e3750(param_2);\n  if (uVar3 <= uVar2) {\n    if (uVar3 < uVar2) {\n      return 1;\n    }\n    uVar3 = *(uint *)(param_1 + 0x18) & 0xfffffff;\n    uVar2 = *(uint *)(param_2 + 0x18) & 0xfffffff;\n    if (uVar2 <= uVar3) {\n      return (ulong)(uVar2 < uVar3);\n    }\n  }\n  return 0xffffffff;\n}\n\n" (function_definition "ulong FUN_001e3a20(long param_1,long param_2)\n\n{\n  byte bVar1;\n  uint uVar2;\n  uint uVar3;\n  \n  bVar1 = *(byte *)(param_2 + 0x1b) >> 4 & 1;\n  if ((*(byte *)(param_1 + 0x1b) & 0x10) == 0) {\n    if (bVar1 != 0) {\n      return 1;\n    }\n    uVar2 = FUN_001ca8d0();\n    uVar3 = FUN_001ca8d0(param_2);\n    if (uVar2 < uVar3) {\n      return 0xffffffff;\n    }\n    if (uVar3 < uVar2) {\n      return 1;\n    }\n  }\n  else if (bVar1 == 0) {\n    return 0xffffffff;\n  }\n  uVar2 = FUN_001e3750(param_1);\n  uVar3 = FUN_001e3750(param_2);\n  if (uVar3 <= uVar2) {\n    if (uVar3 < uVar2) {\n      return 1;\n    }\n    uVar3 = *(uint *)(param_1 + 0x18) & 0xfffffff;\n    uVar2 = *(uint *)(param_2 + 0x18) & 0xfffffff;\n    if (uVar2 <= uVar3) {\n      return (ulong)(uVar2 < uVar3);\n    }\n  }\n  return 0xffffffff;\n}" type_identifier (function_declarator "FUN_001e3a20(long param_1,long param_2)" identifier (parameter_list "(long param_1,long param_2)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "long param_2" (sized_type_specifier "long" long) identifier) ))) (compound_statement "{\n  byte bVar1;\n  uint uVar2;\n  uint uVar3;\n  \n  bVar1 = *(byte *)(param_2 + 0x1b) >> 4 & 1;\n  if ((*(byte *)(param_1 + 0x1b) & 0x10) == 0) {\n    if (bVar1 != 0) {\n      return 1;\n    }\n    uVar2 = FUN_001ca8d0();\n    uVar3 = FUN_001ca8d0(param_2);\n    if (uVar2 < uVar3) {\n      return 0xffffffff;\n    }\n    if (uVar3 < uVar2) {\n      return 1;\n    }\n  }\n  else if (bVar1 == 0) {\n    return 0xffffffff;\n  }\n  uVar2 = FUN_001e3750(param_1);\n  uVar3 = FUN_001e3750(param_2);\n  if (uVar3 <= uVar2) {\n    if (uVar3 < uVar2) {\n      return 1;\n    }\n    uVar3 = *(uint *)(param_1 + 0x18) & 0xfffffff;\n    uVar2 = *(uint *)(param_2 + 0x18) & 0xfffffff;\n    if (uVar2 <= uVar3) {\n      return (ulong)(uVar2 < uVar3);\n    }\n  }\n  return 0xffffffff;\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (expression_statement "bVar1 = *(byte *)(param_2 + 0x1b) >> 4 & 1;" (assignment_expression "bVar1 = *(byte *)(param_2 + 0x1b) >> 4 & 1" identifier = (binary_expression "*(byte *)(param_2 + 0x1b) >> 4 & 1" (binary_expression "*(byte *)(param_2 + 0x1b) >> 4" (pointer_expression "*(byte *)(param_2 + 0x1b)" * (cast_expression "(byte *)(param_2 + 0x1b)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x1b)" ( (binary_expression "param_2 + 0x1b" identifier + number_literal) )))) >> number_literal) & number_literal)) ;) (if_statement "if ((*(byte *)(param_1 + 0x1b) & 0x10) == 0) {\n    if (bVar1 != 0) {\n      return 1;\n    }\n    uVar2 = FUN_001ca8d0();\n    uVar3 = FUN_001ca8d0(param_2);\n    if (uVar2 < uVar3) {\n      return 0xffffffff;\n    }\n    if (uVar3 < uVar2) {\n      return 1;\n    }\n  }\n  else if (bVar1 == 0) {\n    return 0xffffffff;\n  }" if (parenthesized_expression "((*(byte *)(param_1 + 0x1b) & 0x10) == 0)" ( (binary_expression "(*(byte *)(param_1 + 0x1b) & 0x10) == 0" (parenthesized_expression "(*(byte *)(param_1 + 0x1b) & 0x10)" ( (binary_expression "*(byte *)(param_1 + 0x1b) & 0x10" (pointer_expression "*(byte *)(param_1 + 0x1b)" * (cast_expression "(byte *)(param_1 + 0x1b)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1b)" ( (binary_expression "param_1 + 0x1b" identifier + number_literal) )))) & number_literal) )) == number_literal) )) (compound_statement "{\n    if (bVar1 != 0) {\n      return 1;\n    }\n    uVar2 = FUN_001ca8d0();\n    uVar3 = FUN_001ca8d0(param_2);\n    if (uVar2 < uVar3) {\n      return 0xffffffff;\n    }\n    if (uVar3 < uVar2) {\n      return 1;\n    }\n  }" { (if_statement "if (bVar1 != 0) {\n      return 1;\n    }" if (parenthesized_expression "(bVar1 != 0)" ( (binary_expression "bVar1 != 0" identifier != number_literal) )) (compound_statement "{\n      return 1;\n    }" { (return_statement "return 1;" return number_literal ;) })) (expression_statement "uVar2 = FUN_001ca8d0();" (assignment_expression "uVar2 = FUN_001ca8d0()" identifier = (call_expression "FUN_001ca8d0()" identifier (argument_list "()" ( )))) ;) (expression_statement "uVar3 = FUN_001ca8d0(param_2);" (assignment_expression "uVar3 = FUN_001ca8d0(param_2)" identifier = (call_expression "FUN_001ca8d0(param_2)" identifier (argument_list "(param_2)" ( identifier )))) ;) (if_statement "if (uVar2 < uVar3) {\n      return 0xffffffff;\n    }" if (parenthesized_expression "(uVar2 < uVar3)" ( (binary_expression "uVar2 < uVar3" identifier < identifier) )) (compound_statement "{\n      return 0xffffffff;\n    }" { (return_statement "return 0xffffffff;" return number_literal ;) })) (if_statement "if (uVar3 < uVar2) {\n      return 1;\n    }" if (parenthesized_expression "(uVar3 < uVar2)" ( (binary_expression "uVar3 < uVar2" identifier < identifier) )) (compound_statement "{\n      return 1;\n    }" { (return_statement "return 1;" return number_literal ;) })) }) (else_clause "else if (bVar1 == 0) {\n    return 0xffffffff;\n  }" else (if_statement "if (bVar1 == 0) {\n    return 0xffffffff;\n  }" if (parenthesized_expression "(bVar1 == 0)" ( (binary_expression "bVar1 == 0" identifier == number_literal) )) (compound_statement "{\n    return 0xffffffff;\n  }" { (return_statement "return 0xffffffff;" return number_literal ;) })))) (expression_statement "uVar2 = FUN_001e3750(param_1);" (assignment_expression "uVar2 = FUN_001e3750(param_1)" identifier = (call_expression "FUN_001e3750(param_1)" identifier (argument_list "(param_1)" ( identifier )))) ;) (expression_statement "uVar3 = FUN_001e3750(param_2);" (assignment_expression "uVar3 = FUN_001e3750(param_2)" identifier = (call_expression "FUN_001e3750(param_2)" identifier (argument_list "(param_2)" ( identifier )))) ;) (if_statement "if (uVar3 <= uVar2) {\n    if (uVar3 < uVar2) {\n      return 1;\n    }\n    uVar3 = *(uint *)(param_1 + 0x18) & 0xfffffff;\n    uVar2 = *(uint *)(param_2 + 0x18) & 0xfffffff;\n    if (uVar2 <= uVar3) {\n      return (ulong)(uVar2 < uVar3);\n    }\n  }" if (parenthesized_expression "(uVar3 <= uVar2)" ( (binary_expression "uVar3 <= uVar2" identifier <= identifier) )) (compound_statement "{\n    if (uVar3 < uVar2) {\n      return 1;\n    }\n    uVar3 = *(uint *)(param_1 + 0x18) & 0xfffffff;\n    uVar2 = *(uint *)(param_2 + 0x18) & 0xfffffff;\n    if (uVar2 <= uVar3) {\n      return (ulong)(uVar2 < uVar3);\n    }\n  }" { (if_statement "if (uVar3 < uVar2) {\n      return 1;\n    }" if (parenthesized_expression "(uVar3 < uVar2)" ( (binary_expression "uVar3 < uVar2" identifier < identifier) )) (compound_statement "{\n      return 1;\n    }" { (return_statement "return 1;" return number_literal ;) })) (expression_statement "uVar3 = *(uint *)(param_1 + 0x18) & 0xfffffff;" (assignment_expression "uVar3 = *(uint *)(param_1 + 0x18) & 0xfffffff" identifier = (binary_expression "*(uint *)(param_1 + 0x18) & 0xfffffff" (pointer_expression "*(uint *)(param_1 + 0x18)" * (cast_expression "(uint *)(param_1 + 0x18)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) )))) & number_literal)) ;) (expression_statement "uVar2 = *(uint *)(param_2 + 0x18) & 0xfffffff;" (assignment_expression "uVar2 = *(uint *)(param_2 + 0x18) & 0xfffffff" identifier = (binary_expression "*(uint *)(param_2 + 0x18) & 0xfffffff" (pointer_expression "*(uint *)(param_2 + 0x18)" * (cast_expression "(uint *)(param_2 + 0x18)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x18)" ( (binary_expression "param_2 + 0x18" identifier + number_literal) )))) & number_literal)) ;) (if_statement "if (uVar2 <= uVar3) {\n      return (ulong)(uVar2 < uVar3);\n    }" if (parenthesized_expression "(uVar2 <= uVar3)" ( (binary_expression "uVar2 <= uVar3" identifier <= identifier) )) (compound_statement "{\n      return (ulong)(uVar2 < uVar3);\n    }" { (return_statement "return (ulong)(uVar2 < uVar3);" return (call_expression "(ulong)(uVar2 < uVar3)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(uVar2 < uVar3)" ( (binary_expression "uVar2 < uVar3" identifier < identifier) ))) ;) })) })) (return_statement "return 0xffffffff;" return number_literal ;) })))
(translation_unit "/* DWARF original prototype: int compare(Output_reloc<9,_false,_32,_false> * this,\n   Output_reloc<9,_false,_32,_false> * r2) */\n\nint __thiscall\ngold::Output_reloc<9,_false,_32,_false>::compare\n          (Output_reloc<9,_false,_32,_false> *this,Output_reloc<9,_false,_32,_false> *r2)\n\n{\n  byte bVar1;\n  Elf_Addr EVar2;\n  Elf_Addr EVar3;\n  uint uVar4;\n  uint uVar5;\n  \n  bVar1 = (byte)r2->field_0x1b >> 4 & 1;\n  if ((this->field_0x1b & 0x10) == 0) {\n    if (bVar1 != 0) {\n      return 1;\n    }\n    uVar4 = get_symbol_index(this);\n    uVar5 = get_symbol_index(r2);\n    if (uVar4 < uVar5) {\n      return -1;\n    }\n    if (uVar5 < uVar4) {\n      return 1;\n    }\n  }\n  else if (bVar1 == 0) {\n    return -1;\n  }\n  EVar2 = get_address(this);\n  EVar3 = get_address(r2);\n  if (EVar3 <= EVar2) {\n    if (EVar3 < EVar2) {\n      return 1;\n    }\n    uVar5 = *(uint *)&this->field_0x18 & 0xfffffff;\n    uVar4 = *(uint *)&r2->field_0x18 & 0xfffffff;\n    if (uVar4 <= uVar5) {\n      return (int)(uVar4 < uVar5);\n    }\n  }\n  return -1;\n}\n\n" comment (declaration "int __thiscall\ngold::Output_reloc<9,_false,_32,_false>::compare\n          (Output_reloc<9,_false,_32,_false> *this,Output_reloc<9,_false,_32,_false> *r2)\n\n{\n  byte bVar1;" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::" identifier : :) identifier (ERROR "<9" < number_literal) , identifier , identifier , (ERROR "_false>::compare\n          (Output_reloc<9,_false,_32,_false> *this,Output_reloc<9,_false,_32,_false> *r2)\n\n{\n  byte" identifier > : : (function_declarator "compare\n          (Output_reloc<9,_false,_32,_false> *this,Output_reloc<9,_false,_32,_false> *r2)" identifier (parameter_list "(Output_reloc<9,_false,_32,_false> *this,Output_reloc<9,_false,_32,_false> *r2)" ( (parameter_declaration "Output_reloc" type_identifier) (ERROR "<9" < number_literal) , (parameter_declaration "_false" type_identifier) , (parameter_declaration "_32" type_identifier) , (parameter_declaration "_false> *this" type_identifier (ERROR ">" >) (pointer_declarator "*this" * identifier)) , (parameter_declaration "Output_reloc" type_identifier) (ERROR "<9" < number_literal) , (parameter_declaration "_false" type_identifier) , (parameter_declaration "_32" type_identifier) , (parameter_declaration "_false> *r2" type_identifier (ERROR ">" >) (pointer_declarator "*r2" * identifier)) ))) { identifier) identifier ;) (declaration "Elf_Addr EVar2;" type_identifier identifier ;) (declaration "Elf_Addr EVar3;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (expression_statement "bVar1 = (byte)r2->field_0x1b >> 4 & 1;" (assignment_expression "bVar1 = (byte)r2->field_0x1b >> 4 & 1" identifier = (binary_expression "(byte)r2->field_0x1b >> 4 & 1" (binary_expression "(byte)r2->field_0x1b >> 4" (cast_expression "(byte)r2->field_0x1b" ( (type_descriptor "byte" type_identifier) ) (field_expression "r2->field_0x1b" identifier -> field_identifier)) >> number_literal) & number_literal)) ;) (if_statement "if ((this->field_0x1b & 0x10) == 0) {\n    if (bVar1 != 0) {\n      return 1;\n    }\n    uVar4 = get_symbol_index(this);\n    uVar5 = get_symbol_index(r2);\n    if (uVar4 < uVar5) {\n      return -1;\n    }\n    if (uVar5 < uVar4) {\n      return 1;\n    }\n  }\n  else if (bVar1 == 0) {\n    return -1;\n  }" if (parenthesized_expression "((this->field_0x1b & 0x10) == 0)" ( (binary_expression "(this->field_0x1b & 0x10) == 0" (parenthesized_expression "(this->field_0x1b & 0x10)" ( (binary_expression "this->field_0x1b & 0x10" (field_expression "this->field_0x1b" identifier -> field_identifier) & number_literal) )) == number_literal) )) (compound_statement "{\n    if (bVar1 != 0) {\n      return 1;\n    }\n    uVar4 = get_symbol_index(this);\n    uVar5 = get_symbol_index(r2);\n    if (uVar4 < uVar5) {\n      return -1;\n    }\n    if (uVar5 < uVar4) {\n      return 1;\n    }\n  }" { (if_statement "if (bVar1 != 0) {\n      return 1;\n    }" if (parenthesized_expression "(bVar1 != 0)" ( (binary_expression "bVar1 != 0" identifier != number_literal) )) (compound_statement "{\n      return 1;\n    }" { (return_statement "return 1;" return number_literal ;) })) (expression_statement "uVar4 = get_symbol_index(this);" (assignment_expression "uVar4 = get_symbol_index(this)" identifier = (call_expression "get_symbol_index(this)" identifier (argument_list "(this)" ( identifier )))) ;) (expression_statement "uVar5 = get_symbol_index(r2);" (assignment_expression "uVar5 = get_symbol_index(r2)" identifier = (call_expression "get_symbol_index(r2)" identifier (argument_list "(r2)" ( identifier )))) ;) (if_statement "if (uVar4 < uVar5) {\n      return -1;\n    }" if (parenthesized_expression "(uVar4 < uVar5)" ( (binary_expression "uVar4 < uVar5" identifier < identifier) )) (compound_statement "{\n      return -1;\n    }" { (return_statement "return -1;" return number_literal ;) })) (if_statement "if (uVar5 < uVar4) {\n      return 1;\n    }" if (parenthesized_expression "(uVar5 < uVar4)" ( (binary_expression "uVar5 < uVar4" identifier < identifier) )) (compound_statement "{\n      return 1;\n    }" { (return_statement "return 1;" return number_literal ;) })) }) (else_clause "else if (bVar1 == 0) {\n    return -1;\n  }" else (if_statement "if (bVar1 == 0) {\n    return -1;\n  }" if (parenthesized_expression "(bVar1 == 0)" ( (binary_expression "bVar1 == 0" identifier == number_literal) )) (compound_statement "{\n    return -1;\n  }" { (return_statement "return -1;" return number_literal ;) })))) (expression_statement "EVar2 = get_address(this);" (assignment_expression "EVar2 = get_address(this)" identifier = (call_expression "get_address(this)" identifier (argument_list "(this)" ( identifier )))) ;) (expression_statement "EVar3 = get_address(r2);" (assignment_expression "EVar3 = get_address(r2)" identifier = (call_expression "get_address(r2)" identifier (argument_list "(r2)" ( identifier )))) ;) (if_statement "if (EVar3 <= EVar2) {\n    if (EVar3 < EVar2) {\n      return 1;\n    }\n    uVar5 = *(uint *)&this->field_0x18 & 0xfffffff;\n    uVar4 = *(uint *)&r2->field_0x18 & 0xfffffff;\n    if (uVar4 <= uVar5) {\n      return (int)(uVar4 < uVar5);\n    }\n  }" if (parenthesized_expression "(EVar3 <= EVar2)" ( (binary_expression "EVar3 <= EVar2" identifier <= identifier) )) (compound_statement "{\n    if (EVar3 < EVar2) {\n      return 1;\n    }\n    uVar5 = *(uint *)&this->field_0x18 & 0xfffffff;\n    uVar4 = *(uint *)&r2->field_0x18 & 0xfffffff;\n    if (uVar4 <= uVar5) {\n      return (int)(uVar4 < uVar5);\n    }\n  }" { (if_statement "if (EVar3 < EVar2) {\n      return 1;\n    }" if (parenthesized_expression "(EVar3 < EVar2)" ( (binary_expression "EVar3 < EVar2" identifier < identifier) )) (compound_statement "{\n      return 1;\n    }" { (return_statement "return 1;" return number_literal ;) })) (expression_statement "uVar5 = *(uint *)&this->field_0x18 & 0xfffffff;" (assignment_expression "uVar5 = *(uint *)&this->field_0x18 & 0xfffffff" identifier = (binary_expression "*(uint *)&this->field_0x18 & 0xfffffff" (pointer_expression "*(uint *)&this->field_0x18" * (cast_expression "(uint *)&this->field_0x18" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&this->field_0x18" & (field_expression "this->field_0x18" identifier -> field_identifier)))) & number_literal)) ;) (expression_statement "uVar4 = *(uint *)&r2->field_0x18 & 0xfffffff;" (assignment_expression "uVar4 = *(uint *)&r2->field_0x18 & 0xfffffff" identifier = (binary_expression "*(uint *)&r2->field_0x18 & 0xfffffff" (pointer_expression "*(uint *)&r2->field_0x18" * (cast_expression "(uint *)&r2->field_0x18" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&r2->field_0x18" & (field_expression "r2->field_0x18" identifier -> field_identifier)))) & number_literal)) ;) (if_statement "if (uVar4 <= uVar5) {\n      return (int)(uVar4 < uVar5);\n    }" if (parenthesized_expression "(uVar4 <= uVar5)" ( (binary_expression "uVar4 <= uVar5" identifier <= identifier) )) (compound_statement "{\n      return (int)(uVar4 < uVar5);\n    }" { (return_statement "return (int)(uVar4 < uVar5);" return (cast_expression "(int)(uVar4 < uVar5)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar4 < uVar5)" ( (binary_expression "uVar4 < uVar5" identifier < identifier) ))) ;) })) })) (return_statement "return -1;" return number_literal ;) (ERROR "}" }))
(translation_unit "ulong FUN_001e3a20(long param_1,long param_2)\n\n{\n  byte bVar1;\n  uint uVar2;\n  uint uVar3;\n  \n  bVar1 = *(byte *)(param_2 + 0x1b) >> 4 & 1;\n  if ((*(byte *)(param_1 + 0x1b) & 0x10) == 0) {\n    if (bVar1 != 0) {\n      return 1;\n    }\n    uVar2 = FUN_001ca8d0();\n    uVar3 = FUN_001ca8d0(param_2);\n    if (uVar2 < uVar3) {\n      return 0xffffffff;\n    }\n    if (uVar3 < uVar2) {\n      return 1;\n    }\n  }\n  else if (bVar1 == 0) {\n    return 0xffffffff;\n  }\n  uVar2 = FUN_001e3750(param_1);\n  uVar3 = FUN_001e3750(param_2);\n  if (uVar3 <= uVar2) {\n    if (uVar3 < uVar2) {\n      return 1;\n    }\n    uVar3 = *(uint *)(param_1 + 0x18) & 0xfffffff;\n    uVar2 = *(uint *)(param_2 + 0x18) & 0xfffffff;\n    if (uVar2 <= uVar3) {\n      return (ulong)(uVar2 < uVar3);\n    }\n  }\n  return 0xffffffff;\n}\n\n" (function_definition "ulong FUN_001e3a20(long param_1,long param_2)\n\n{\n  byte bVar1;\n  uint uVar2;\n  uint uVar3;\n  \n  bVar1 = *(byte *)(param_2 + 0x1b) >> 4 & 1;\n  if ((*(byte *)(param_1 + 0x1b) & 0x10) == 0) {\n    if (bVar1 != 0) {\n      return 1;\n    }\n    uVar2 = FUN_001ca8d0();\n    uVar3 = FUN_001ca8d0(param_2);\n    if (uVar2 < uVar3) {\n      return 0xffffffff;\n    }\n    if (uVar3 < uVar2) {\n      return 1;\n    }\n  }\n  else if (bVar1 == 0) {\n    return 0xffffffff;\n  }\n  uVar2 = FUN_001e3750(param_1);\n  uVar3 = FUN_001e3750(param_2);\n  if (uVar3 <= uVar2) {\n    if (uVar3 < uVar2) {\n      return 1;\n    }\n    uVar3 = *(uint *)(param_1 + 0x18) & 0xfffffff;\n    uVar2 = *(uint *)(param_2 + 0x18) & 0xfffffff;\n    if (uVar2 <= uVar3) {\n      return (ulong)(uVar2 < uVar3);\n    }\n  }\n  return 0xffffffff;\n}" type_identifier (function_declarator "FUN_001e3a20(long param_1,long param_2)" identifier (parameter_list "(long param_1,long param_2)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "long param_2" (sized_type_specifier "long" long) identifier) ))) (compound_statement "{\n  byte bVar1;\n  uint uVar2;\n  uint uVar3;\n  \n  bVar1 = *(byte *)(param_2 + 0x1b) >> 4 & 1;\n  if ((*(byte *)(param_1 + 0x1b) & 0x10) == 0) {\n    if (bVar1 != 0) {\n      return 1;\n    }\n    uVar2 = FUN_001ca8d0();\n    uVar3 = FUN_001ca8d0(param_2);\n    if (uVar2 < uVar3) {\n      return 0xffffffff;\n    }\n    if (uVar3 < uVar2) {\n      return 1;\n    }\n  }\n  else if (bVar1 == 0) {\n    return 0xffffffff;\n  }\n  uVar2 = FUN_001e3750(param_1);\n  uVar3 = FUN_001e3750(param_2);\n  if (uVar3 <= uVar2) {\n    if (uVar3 < uVar2) {\n      return 1;\n    }\n    uVar3 = *(uint *)(param_1 + 0x18) & 0xfffffff;\n    uVar2 = *(uint *)(param_2 + 0x18) & 0xfffffff;\n    if (uVar2 <= uVar3) {\n      return (ulong)(uVar2 < uVar3);\n    }\n  }\n  return 0xffffffff;\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (expression_statement "bVar1 = *(byte *)(param_2 + 0x1b) >> 4 & 1;" (assignment_expression "bVar1 = *(byte *)(param_2 + 0x1b) >> 4 & 1" identifier = (binary_expression "*(byte *)(param_2 + 0x1b) >> 4 & 1" (binary_expression "*(byte *)(param_2 + 0x1b) >> 4" (pointer_expression "*(byte *)(param_2 + 0x1b)" * (cast_expression "(byte *)(param_2 + 0x1b)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x1b)" ( (binary_expression "param_2 + 0x1b" identifier + number_literal) )))) >> number_literal) & number_literal)) ;) (if_statement "if ((*(byte *)(param_1 + 0x1b) & 0x10) == 0) {\n    if (bVar1 != 0) {\n      return 1;\n    }\n    uVar2 = FUN_001ca8d0();\n    uVar3 = FUN_001ca8d0(param_2);\n    if (uVar2 < uVar3) {\n      return 0xffffffff;\n    }\n    if (uVar3 < uVar2) {\n      return 1;\n    }\n  }\n  else if (bVar1 == 0) {\n    return 0xffffffff;\n  }" if (parenthesized_expression "((*(byte *)(param_1 + 0x1b) & 0x10) == 0)" ( (binary_expression "(*(byte *)(param_1 + 0x1b) & 0x10) == 0" (parenthesized_expression "(*(byte *)(param_1 + 0x1b) & 0x10)" ( (binary_expression "*(byte *)(param_1 + 0x1b) & 0x10" (pointer_expression "*(byte *)(param_1 + 0x1b)" * (cast_expression "(byte *)(param_1 + 0x1b)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1b)" ( (binary_expression "param_1 + 0x1b" identifier + number_literal) )))) & number_literal) )) == number_literal) )) (compound_statement "{\n    if (bVar1 != 0) {\n      return 1;\n    }\n    uVar2 = FUN_001ca8d0();\n    uVar3 = FUN_001ca8d0(param_2);\n    if (uVar2 < uVar3) {\n      return 0xffffffff;\n    }\n    if (uVar3 < uVar2) {\n      return 1;\n    }\n  }" { (if_statement "if (bVar1 != 0) {\n      return 1;\n    }" if (parenthesized_expression "(bVar1 != 0)" ( (binary_expression "bVar1 != 0" identifier != number_literal) )) (compound_statement "{\n      return 1;\n    }" { (return_statement "return 1;" return number_literal ;) })) (expression_statement "uVar2 = FUN_001ca8d0();" (assignment_expression "uVar2 = FUN_001ca8d0()" identifier = (call_expression "FUN_001ca8d0()" identifier (argument_list "()" ( )))) ;) (expression_statement "uVar3 = FUN_001ca8d0(param_2);" (assignment_expression "uVar3 = FUN_001ca8d0(param_2)" identifier = (call_expression "FUN_001ca8d0(param_2)" identifier (argument_list "(param_2)" ( identifier )))) ;) (if_statement "if (uVar2 < uVar3) {\n      return 0xffffffff;\n    }" if (parenthesized_expression "(uVar2 < uVar3)" ( (binary_expression "uVar2 < uVar3" identifier < identifier) )) (compound_statement "{\n      return 0xffffffff;\n    }" { (return_statement "return 0xffffffff;" return number_literal ;) })) (if_statement "if (uVar3 < uVar2) {\n      return 1;\n    }" if (parenthesized_expression "(uVar3 < uVar2)" ( (binary_expression "uVar3 < uVar2" identifier < identifier) )) (compound_statement "{\n      return 1;\n    }" { (return_statement "return 1;" return number_literal ;) })) }) (else_clause "else if (bVar1 == 0) {\n    return 0xffffffff;\n  }" else (if_statement "if (bVar1 == 0) {\n    return 0xffffffff;\n  }" if (parenthesized_expression "(bVar1 == 0)" ( (binary_expression "bVar1 == 0" identifier == number_literal) )) (compound_statement "{\n    return 0xffffffff;\n  }" { (return_statement "return 0xffffffff;" return number_literal ;) })))) (expression_statement "uVar2 = FUN_001e3750(param_1);" (assignment_expression "uVar2 = FUN_001e3750(param_1)" identifier = (call_expression "FUN_001e3750(param_1)" identifier (argument_list "(param_1)" ( identifier )))) ;) (expression_statement "uVar3 = FUN_001e3750(param_2);" (assignment_expression "uVar3 = FUN_001e3750(param_2)" identifier = (call_expression "FUN_001e3750(param_2)" identifier (argument_list "(param_2)" ( identifier )))) ;) (if_statement "if (uVar3 <= uVar2) {\n    if (uVar3 < uVar2) {\n      return 1;\n    }\n    uVar3 = *(uint *)(param_1 + 0x18) & 0xfffffff;\n    uVar2 = *(uint *)(param_2 + 0x18) & 0xfffffff;\n    if (uVar2 <= uVar3) {\n      return (ulong)(uVar2 < uVar3);\n    }\n  }" if (parenthesized_expression "(uVar3 <= uVar2)" ( (binary_expression "uVar3 <= uVar2" identifier <= identifier) )) (compound_statement "{\n    if (uVar3 < uVar2) {\n      return 1;\n    }\n    uVar3 = *(uint *)(param_1 + 0x18) & 0xfffffff;\n    uVar2 = *(uint *)(param_2 + 0x18) & 0xfffffff;\n    if (uVar2 <= uVar3) {\n      return (ulong)(uVar2 < uVar3);\n    }\n  }" { (if_statement "if (uVar3 < uVar2) {\n      return 1;\n    }" if (parenthesized_expression "(uVar3 < uVar2)" ( (binary_expression "uVar3 < uVar2" identifier < identifier) )) (compound_statement "{\n      return 1;\n    }" { (return_statement "return 1;" return number_literal ;) })) (expression_statement "uVar3 = *(uint *)(param_1 + 0x18) & 0xfffffff;" (assignment_expression "uVar3 = *(uint *)(param_1 + 0x18) & 0xfffffff" identifier = (binary_expression "*(uint *)(param_1 + 0x18) & 0xfffffff" (pointer_expression "*(uint *)(param_1 + 0x18)" * (cast_expression "(uint *)(param_1 + 0x18)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) )))) & number_literal)) ;) (expression_statement "uVar2 = *(uint *)(param_2 + 0x18) & 0xfffffff;" (assignment_expression "uVar2 = *(uint *)(param_2 + 0x18) & 0xfffffff" identifier = (binary_expression "*(uint *)(param_2 + 0x18) & 0xfffffff" (pointer_expression "*(uint *)(param_2 + 0x18)" * (cast_expression "(uint *)(param_2 + 0x18)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x18)" ( (binary_expression "param_2 + 0x18" identifier + number_literal) )))) & number_literal)) ;) (if_statement "if (uVar2 <= uVar3) {\n      return (ulong)(uVar2 < uVar3);\n    }" if (parenthesized_expression "(uVar2 <= uVar3)" ( (binary_expression "uVar2 <= uVar3" identifier <= identifier) )) (compound_statement "{\n      return (ulong)(uVar2 < uVar3);\n    }" { (return_statement "return (ulong)(uVar2 < uVar3);" return (call_expression "(ulong)(uVar2 < uVar3)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(uVar2 < uVar3)" ( (binary_expression "uVar2 < uVar3" identifier < identifier) ))) ;) })) })) (return_statement "return 0xffffffff;" return number_literal ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration (sized_type_specifier long) IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) >> LIT) & 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 { (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (return_statement return LIT ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (return_statement return LIT ;) })) }) (else_clause else (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return LIT ;) })))) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (compound_statement { (return_statement return (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT < IDENT) ))) ;) })) })) (return_statement return LIT ;) })))
(function_definition "ulong FUN_001e3a20(long param_1,long param_2)\n\n{\n  byte bVar1;\n  uint uVar2;\n  uint uVar3;\n  \n  bVar1 = *(byte *)(param_2 + 0x1b) >> 4 & 1;\n  if ((*(byte *)(param_1 + 0x1b) & 0x10) == 0) {\n    if (bVar1 != 0) {\n      return 1;\n    }\n    uVar2 = FUN_001ca8d0();\n    uVar3 = FUN_001ca8d0(param_2);\n    if (uVar2 < uVar3) {\n      return 0xffffffff;\n    }\n    if (uVar3 < uVar2) {\n      return 1;\n    }\n  }\n  else if (bVar1 == 0) {\n    return 0xffffffff;\n  }\n  uVar2 = FUN_001e3750(param_1);\n  uVar3 = FUN_001e3750(param_2);\n  if (uVar3 <= uVar2) {\n    if (uVar3 < uVar2) {\n      return 1;\n    }\n    uVar3 = *(uint *)(param_1 + 0x18) & 0xfffffff;\n    uVar2 = *(uint *)(param_2 + 0x18) & 0xfffffff;\n    if (uVar2 <= uVar3) {\n      return (ulong)(uVar2 < uVar3);\n    }\n  }\n  return 0xffffffff;\n}" (type_identifier "ulong") (function_declarator "FUN_001e3a20(long param_1,long param_2)" (identifier "FUN_001e3a20") (parameter_list "(long param_1,long param_2)" (( "(") (parameter_declaration "long param_1" (sized_type_specifier "long" (long "long")) (identifier "param_1")) (, ",") (parameter_declaration "long param_2" (sized_type_specifier "long" (long "long")) (identifier "param_2")) () ")"))) (compound_statement "{\n  byte bVar1;\n  uint uVar2;\n  uint uVar3;\n  \n  bVar1 = *(byte *)(param_2 + 0x1b) >> 4 & 1;\n  if ((*(byte *)(param_1 + 0x1b) & 0x10) == 0) {\n    if (bVar1 != 0) {\n      return 1;\n    }\n    uVar2 = FUN_001ca8d0();\n    uVar3 = FUN_001ca8d0(param_2);\n    if (uVar2 < uVar3) {\n      return 0xffffffff;\n    }\n    if (uVar3 < uVar2) {\n      return 1;\n    }\n  }\n  else if (bVar1 == 0) {\n    return 0xffffffff;\n  }\n  uVar2 = FUN_001e3750(param_1);\n  uVar3 = FUN_001e3750(param_2);\n  if (uVar3 <= uVar2) {\n    if (uVar3 < uVar2) {\n      return 1;\n    }\n    uVar3 = *(uint *)(param_1 + 0x18) & 0xfffffff;\n    uVar2 = *(uint *)(param_2 + 0x18) & 0xfffffff;\n    if (uVar2 <= uVar3) {\n      return (ulong)(uVar2 < uVar3);\n    }\n  }\n  return 0xffffffff;\n}" ({ "{") (declaration "byte bVar1;" (type_identifier "byte") (identifier "bVar1") (; ";")) (declaration "uint uVar2;" (type_identifier "uint") (identifier "uVar2") (; ";")) (declaration "uint uVar3;" (type_identifier "uint") (identifier "uVar3") (; ";")) (expression_statement "bVar1 = *(byte *)(param_2 + 0x1b) >> 4 & 1;" (assignment_expression "bVar1 = *(byte *)(param_2 + 0x1b) >> 4 & 1" (identifier "bVar1") (= "=") (binary_expression "*(byte *)(param_2 + 0x1b) >> 4 & 1" (binary_expression "*(byte *)(param_2 + 0x1b) >> 4" (pointer_expression "*(byte *)(param_2 + 0x1b)" (* "*") (cast_expression "(byte *)(param_2 + 0x1b)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x1b)" (( "(") (binary_expression "param_2 + 0x1b" (identifier "param_2") (+ "+") (number_literal "0x1b")) () ")")))) (>> ">>") (number_literal "4")) (& "&") (number_literal "1"))) (; ";")) (if_statement "if ((*(byte *)(param_1 + 0x1b) & 0x10) == 0) {\n    if (bVar1 != 0) {\n      return 1;\n    }\n    uVar2 = FUN_001ca8d0();\n    uVar3 = FUN_001ca8d0(param_2);\n    if (uVar2 < uVar3) {\n      return 0xffffffff;\n    }\n    if (uVar3 < uVar2) {\n      return 1;\n    }\n  }\n  else if (bVar1 == 0) {\n    return 0xffffffff;\n  }" (if "if") (parenthesized_expression "((*(byte *)(param_1 + 0x1b) & 0x10) == 0)" (( "(") (binary_expression "(*(byte *)(param_1 + 0x1b) & 0x10) == 0" (parenthesized_expression "(*(byte *)(param_1 + 0x1b) & 0x10)" (( "(") (binary_expression "*(byte *)(param_1 + 0x1b) & 0x10" (pointer_expression "*(byte *)(param_1 + 0x1b)" (* "*") (cast_expression "(byte *)(param_1 + 0x1b)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x1b)" (( "(") (binary_expression "param_1 + 0x1b" (identifier "param_1") (+ "+") (number_literal "0x1b")) () ")")))) (& "&") (number_literal "0x10")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    if (bVar1 != 0) {\n      return 1;\n    }\n    uVar2 = FUN_001ca8d0();\n    uVar3 = FUN_001ca8d0(param_2);\n    if (uVar2 < uVar3) {\n      return 0xffffffff;\n    }\n    if (uVar3 < uVar2) {\n      return 1;\n    }\n  }" ({ "{") (if_statement "if (bVar1 != 0) {\n      return 1;\n    }" (if "if") (parenthesized_expression "(bVar1 != 0)" (( "(") (binary_expression "bVar1 != 0" (identifier "bVar1") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      return 1;\n    }" ({ "{") (return_statement "return 1;" (return "return") (number_literal "1") (; ";")) (} "}"))) (expression_statement "uVar2 = FUN_001ca8d0();" (assignment_expression "uVar2 = FUN_001ca8d0()" (identifier "uVar2") (= "=") (call_expression "FUN_001ca8d0()" (identifier "FUN_001ca8d0") (argument_list "()" (( "(") () ")")))) (; ";")) (expression_statement "uVar3 = FUN_001ca8d0(param_2);" (assignment_expression "uVar3 = FUN_001ca8d0(param_2)" (identifier "uVar3") (= "=") (call_expression "FUN_001ca8d0(param_2)" (identifier "FUN_001ca8d0") (argument_list "(param_2)" (( "(") (identifier "param_2") () ")")))) (; ";")) (if_statement "if (uVar2 < uVar3) {\n      return 0xffffffff;\n    }" (if "if") (parenthesized_expression "(uVar2 < uVar3)" (( "(") (binary_expression "uVar2 < uVar3" (identifier "uVar2") (< "<") (identifier "uVar3")) () ")")) (compound_statement "{\n      return 0xffffffff;\n    }" ({ "{") (return_statement "return 0xffffffff;" (return "return") (number_literal "0xffffffff") (; ";")) (} "}"))) (if_statement "if (uVar3 < uVar2) {\n      return 1;\n    }" (if "if") (parenthesized_expression "(uVar3 < uVar2)" (( "(") (binary_expression "uVar3 < uVar2" (identifier "uVar3") (< "<") (identifier "uVar2")) () ")")) (compound_statement "{\n      return 1;\n    }" ({ "{") (return_statement "return 1;" (return "return") (number_literal "1") (; ";")) (} "}"))) (} "}")) (else_clause "else if (bVar1 == 0) {\n    return 0xffffffff;\n  }" (else "else") (if_statement "if (bVar1 == 0) {\n    return 0xffffffff;\n  }" (if "if") (parenthesized_expression "(bVar1 == 0)" (( "(") (binary_expression "bVar1 == 0" (identifier "bVar1") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    return 0xffffffff;\n  }" ({ "{") (return_statement "return 0xffffffff;" (return "return") (number_literal "0xffffffff") (; ";")) (} "}"))))) (expression_statement "uVar2 = FUN_001e3750(param_1);" (assignment_expression "uVar2 = FUN_001e3750(param_1)" (identifier "uVar2") (= "=") (call_expression "FUN_001e3750(param_1)" (identifier "FUN_001e3750") (argument_list "(param_1)" (( "(") (identifier "param_1") () ")")))) (; ";")) (expression_statement "uVar3 = FUN_001e3750(param_2);" (assignment_expression "uVar3 = FUN_001e3750(param_2)" (identifier "uVar3") (= "=") (call_expression "FUN_001e3750(param_2)" (identifier "FUN_001e3750") (argument_list "(param_2)" (( "(") (identifier "param_2") () ")")))) (; ";")) (if_statement "if (uVar3 <= uVar2) {\n    if (uVar3 < uVar2) {\n      return 1;\n    }\n    uVar3 = *(uint *)(param_1 + 0x18) & 0xfffffff;\n    uVar2 = *(uint *)(param_2 + 0x18) & 0xfffffff;\n    if (uVar2 <= uVar3) {\n      return (ulong)(uVar2 < uVar3);\n    }\n  }" (if "if") (parenthesized_expression "(uVar3 <= uVar2)" (( "(") (binary_expression "uVar3 <= uVar2" (identifier "uVar3") (<= "<=") (identifier "uVar2")) () ")")) (compound_statement "{\n    if (uVar3 < uVar2) {\n      return 1;\n    }\n    uVar3 = *(uint *)(param_1 + 0x18) & 0xfffffff;\n    uVar2 = *(uint *)(param_2 + 0x18) & 0xfffffff;\n    if (uVar2 <= uVar3) {\n      return (ulong)(uVar2 < uVar3);\n    }\n  }" ({ "{") (if_statement "if (uVar3 < uVar2) {\n      return 1;\n    }" (if "if") (parenthesized_expression "(uVar3 < uVar2)" (( "(") (binary_expression "uVar3 < uVar2" (identifier "uVar3") (< "<") (identifier "uVar2")) () ")")) (compound_statement "{\n      return 1;\n    }" ({ "{") (return_statement "return 1;" (return "return") (number_literal "1") (; ";")) (} "}"))) (expression_statement "uVar3 = *(uint *)(param_1 + 0x18) & 0xfffffff;" (assignment_expression "uVar3 = *(uint *)(param_1 + 0x18) & 0xfffffff" (identifier "uVar3") (= "=") (binary_expression "*(uint *)(param_1 + 0x18) & 0xfffffff" (pointer_expression "*(uint *)(param_1 + 0x18)" (* "*") (cast_expression "(uint *)(param_1 + 0x18)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x18)" (( "(") (binary_expression "param_1 + 0x18" (identifier "param_1") (+ "+") (number_literal "0x18")) () ")")))) (& "&") (number_literal "0xfffffff"))) (; ";")) (expression_statement "uVar2 = *(uint *)(param_2 + 0x18) & 0xfffffff;" (assignment_expression "uVar2 = *(uint *)(param_2 + 0x18) & 0xfffffff" (identifier "uVar2") (= "=") (binary_expression "*(uint *)(param_2 + 0x18) & 0xfffffff" (pointer_expression "*(uint *)(param_2 + 0x18)" (* "*") (cast_expression "(uint *)(param_2 + 0x18)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x18)" (( "(") (binary_expression "param_2 + 0x18" (identifier "param_2") (+ "+") (number_literal "0x18")) () ")")))) (& "&") (number_literal "0xfffffff"))) (; ";")) (if_statement "if (uVar2 <= uVar3) {\n      return (ulong)(uVar2 < uVar3);\n    }" (if "if") (parenthesized_expression "(uVar2 <= uVar3)" (( "(") (binary_expression "uVar2 <= uVar3" (identifier "uVar2") (<= "<=") (identifier "uVar3")) () ")")) (compound_statement "{\n      return (ulong)(uVar2 < uVar3);\n    }" ({ "{") (return_statement "return (ulong)(uVar2 < uVar3);" (return "return") (call_expression "(ulong)(uVar2 < uVar3)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(uVar2 < uVar3)" (( "(") (binary_expression "uVar2 < uVar3" (identifier "uVar2") (< "<") (identifier "uVar3")) () ")"))) (; ";")) (} "}"))) (} "}"))) (return_statement "return 0xffffffff;" (return "return") (number_literal "0xffffffff") (; ";")) (} "}")))

/* DWARF original prototype: int compare(Output_reloc<9,_false,_32,_false> * this,
   Output_reloc<9,_false,_32,_false> * r2) */

int __thiscall
gold::Output_reloc<9,_false,_32,_false>::compare
          (Output_reloc<9,_false,_32,_false> *this,Output_reloc<9,_false,_32,_false> *r2)

{
  type_3 var_1;
  type_1 var_7;
  type_1 var_6;
  type_2 var_3;
  type_2 var_4;
  
  var_1 = (type_3)r2->field_0x1b >> 4 & 1;
  if ((this->field_0x1b & 0x10) == 0) {
    if (var_1 != 0) {
      return 1;
    }
    var_3 = var_2(this);
    var_4 = var_2(r2);
    if (var_3 < var_4) {
      return -1;
    }
    if (var_4 < var_3) {
      return 1;
    }
  }
  else if (var_1 == 0) {
    return -1;
  }
  var_7 = var_5(this);
  var_6 = var_5(r2);
  if (var_6 <= var_7) {
    if (var_6 < var_7) {
      return 1;
    }
    var_4 = *(type_2 *)&this->field_0x18 & 0xfffffff;
    var_3 = *(type_2 *)&r2->field_0x18 & 0xfffffff;
    if (var_3 <= var_4) {
      return (int)(var_3 < var_4);
    }
  }
  return -1;
}


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

ulong MASKED(long param_1,long param_2)

{
  byte bVar1;
  uint uVar2;
  uint uVar3;
  
  bVar1 = *(byte *)(param_2 + 0x1b) >> 4 & 1;
  if ((*(byte *)(param_1 + 0x1b) & 0x10) == 0) {
    if (bVar1 != 0) {
      return 1;
    }
    uVar2 = FUN_001ca8d0();
    uVar3 = FUN_001ca8d0(param_2);
    if (uVar2 < uVar3) {
      return 0xffffffff;
    }
    if (uVar3 < uVar2) {
      return 1;
    }
  }
  else if (bVar1 == 0) {
    return 0xffffffff;
  }
  uVar2 = FUN_001e3750(param_1);
  uVar3 = FUN_001e3750(param_2);
  if (uVar3 <= uVar2) {
    if (uVar3 < uVar2) {
      return 1;
    }
    uVar3 = *(uint *)(param_1 + 0x18) & 0xfffffff;
    uVar2 = *(uint *)(param_2 + 0x18) & 0xfffffff;
    if (uVar2 <= uVar3) {
      return (ulong)(uVar2 < uVar3);
    }
  }
  return 0xffffffff;
}

