
/* DWARF original prototype: pair<std::_Rb_tree_node_base*,_std::_Rb_tree_node_base*>
   _M_get_insert_hint_unique_pos(_Rb_tree<std::pair<gold::Relobj*,_unsigned_int>,_std::pair<const_std::pair<gold::Relobj*,_unsigned_int>,_unsigned_int>,_std::_Select1st<std::pair<const_std::pair<gold::Relobj*,_unsigned_int>,_unsigned_int>_>,_std::less<std::pair<gold::Relobj*,_unsigned_int>_>,_std::allocator<std::pair<const_std::pair<gold::Relobj*,_unsigned_int>,_unsigned_int>_>_>
   * this, const_iterator __position, key_type * __k) */

pair<std::_Rb_tree_node_base*,_std::_Rb_tree_node_base*> __thiscall
std::
_Rb_tree<std::pair<gold::Relobj*,_unsigned_int>,_std::pair<const_std::pair<gold::Relobj*,_unsigned_int>,_unsigned_int>,_std::_Select1st<std::pair<const_std::pair<gold::Relobj*,_unsigned_int>,_unsigned_int>_>,_std::less<std::pair<gold::Relobj*,_unsigned_int>_>,_std::allocator<std::pair<const_std::pair<gold::Relobj*,_unsigned_int>,_unsigned_int>_>_>
::_M_get_insert_hint_unique_pos
          (_Rb_tree<std::pair<gold::Relobj*,_unsigned_int>,_std::pair<const_std::pair<gold::Relobj*,_unsigned_int>,_unsigned_int>,_std::_Select1st<std::pair<const_std::pair<gold::Relobj*,_unsigned_int>,_unsigned_int>_>,_std::less<std::pair<gold::Relobj*,_unsigned_int>_>,_std::allocator<std::pair<const_std::pair<gold::Relobj*,_unsigned_int>,_unsigned_int>_>_>
           *this,const_iterator __position,key_type *__k)

{
  Relobj *pRVar1;
  Relobj *pRVar2;
  undefined1 auVar3 [16];
  uint uVar4;
  _Base_ptr p_Var5;
  const_iterator cVar6;
  uint uVar7;
  pair<std::_Rb_tree_node_base*,_std::_Rb_tree_node_base*> pVar8;
  
  if ((_Rb_tree_header *)__position._M_node == &(this->_M_impl).super__Rb_tree_header) {
    if ((this->_M_impl).super__Rb_tree_header._M_node_count != 0) {
      __position._M_node = (this->_M_impl).super__Rb_tree_header._M_header._M_right;
      if ((__k->first <= *(Relobj **)(__position._M_node + 1)) &&
         ((__k->first != *(Relobj **)(__position._M_node + 1) ||
          (__k->second <= *(uint *)&__position._M_node[1]._M_parent)))) goto LAB_0023dd58;
      goto LAB_0023dd3e;
    }
    goto LAB_0023dd58;
  }
  pRVar1 = __k->first;
  pRVar2 = *(Relobj **)(__position._M_node + 1);
  cVar6._M_node = __position._M_node;
  if (pRVar1 < pRVar2) {
LAB_0023dc79:
    if ((this->_M_impl).super__Rb_tree_header._M_header._M_left != __position._M_node) {
      p_Var5 = (_Base_ptr)_Rb_tree_decrement(__position._M_node);
      if ((pRVar1 <= *(Relobj **)(p_Var5 + 1)) &&
         ((pRVar1 != *(Relobj **)(p_Var5 + 1) || (__k->second <= *(uint *)&p_Var5[1]._M_parent)))) {
LAB_0023dd58:
        pVar8 = _M_get_insert_unique_pos(this,__k);
        return pVar8;
      }
      if (p_Var5->_M_right == (_Base_ptr)0x0) {
        cVar6._M_node = (_Base_ptr)0x0;
        __position._M_node = p_Var5;
      }
    }
  }
  else {
    if (pRVar2 == pRVar1) {
      uVar4 = __k->second;
      uVar7 = *(uint *)&__position._M_node[1]._M_parent;
      if (uVar4 < uVar7) goto LAB_0023dc79;
LAB_0023dd7e:
      if (uVar4 <= uVar7) {
        __position._M_node = (_Base_ptr)0x0;
        goto LAB_0023dcc5;
      }
    }
    else if (pRVar1 <= pRVar2) {
      uVar7 = *(uint *)&__position._M_node[1]._M_parent;
      uVar4 = __k->second;
      goto LAB_0023dd7e;
    }
    if ((this->_M_impl).super__Rb_tree_header._M_header._M_right == __position._M_node) {
LAB_0023dd3e:
      auVar3._8_8_ = 0;
      auVar3._0_8_ = __position._M_node;
      return (pair<std::_Rb_tree_node_base*,_std::_Rb_tree_node_base*>)(auVar3 << 0x40);
    }
    p_Var5 = (_Base_ptr)_Rb_tree_increment(__position._M_node);
    if ((*(Relobj **)(p_Var5 + 1) <= pRVar1) &&
       ((pRVar1 != *(Relobj **)(p_Var5 + 1) || (*(uint *)&p_Var5[1]._M_parent <= __k->second))))
    goto LAB_0023dd58;
    cVar6._M_node = (_Base_ptr)0x0;
    if ((__position._M_node)->_M_right != (_Base_ptr)0x0) {
      cVar6._M_node = p_Var5;
      __position._M_node = p_Var5;
    }
  }
LAB_0023dcc5:
  pVar8.second = __position._M_node;
  pVar8.first = cVar6._M_node;
  return pVar8;
}



undefined1  [16] FUN_0023dc50(long param_1,ulong param_2,ulong *param_3)

{
  uint uVar1;
  ulong uVar2;
  uint uVar3;
  ulong uVar4;
  ulong uVar5;
  undefined1 auVar6 [16];
  undefined1 auVar7 [16];
  
  if (param_2 == param_1 + 8U) {
    if (*(long *)(param_1 + 0x28) != 0) {
      param_2 = *(ulong *)(param_1 + 0x20);
      if ((*param_3 <= *(ulong *)(param_2 + 0x20)) &&
         ((*param_3 != *(ulong *)(param_2 + 0x20) || ((uint)param_3[1] <= *(uint *)(param_2 + 0x28))
          ))) goto LAB_0023dd58;
      goto LAB_0023dd3e;
    }
    goto LAB_0023dd58;
  }
  uVar2 = *param_3;
  uVar4 = *(ulong *)(param_2 + 0x20);
  uVar5 = param_2;
  if (uVar2 < uVar4) {
LAB_0023dc79:
    if (*(ulong *)(param_1 + 0x18) != param_2) {
      uVar4 = thunk_FUN_002dbfd0(param_2,param_2,param_2);
      if ((uVar2 <= *(ulong *)(uVar4 + 0x20)) &&
         ((uVar2 != *(ulong *)(uVar4 + 0x20) || ((uint)param_3[1] <= *(uint *)(uVar4 + 0x28))))) {
LAB_0023dd58:
        auVar7 = FUN_0023db90(param_1,param_3);
        return auVar7;
      }
      if (*(long *)(uVar4 + 0x18) == 0) {
        uVar5 = 0;
        param_2 = uVar4;
      }
    }
  }
  else {
    if (uVar4 == uVar2) {
      uVar3 = (uint)param_3[1];
      uVar1 = *(uint *)(param_2 + 0x28);
      if (uVar3 < uVar1) goto LAB_0023dc79;
LAB_0023dd7e:
      if (uVar3 <= uVar1) {
        param_2 = 0;
        goto LAB_0023dcc5;
      }
    }
    else if (uVar2 <= uVar4) {
      uVar1 = *(uint *)(param_2 + 0x28);
      uVar3 = (uint)param_3[1];
      goto LAB_0023dd7e;
    }
    if (*(ulong *)(param_1 + 0x20) == param_2) {
LAB_0023dd3e:
      auVar7._8_8_ = 0;
      auVar7._0_8_ = param_2;
      return auVar7 << 0x40;
    }
    uVar4 = FUN_002dc030(param_2);
    if ((*(ulong *)(uVar4 + 0x20) <= uVar2) &&
       ((uVar2 != *(ulong *)(uVar4 + 0x20) || (*(uint *)(uVar4 + 0x28) <= (uint)param_3[1]))))
    goto LAB_0023dd58;
    uVar5 = 0;
    if (*(long *)(param_2 + 0x18) != 0) {
      uVar5 = uVar4;
      param_2 = uVar4;
    }
  }
LAB_0023dcc5:
  auVar6._8_8_ = param_2;
  auVar6._0_8_ = uVar5;
  return auVar6;
}


PUSH R13
LEA RAX,[RDI + 0x8]
PUSH R12
MOV R12,RDX
PUSH RBP
MOV RBP,RDI
PUSH RBX
SUB RSP,0x8
CMP RSI,RAX
JZ 0x0023dd20
MOV RBX,RSI
MOV R13,qword ptr [RDX]
CMP qword ptr [RSI + 0x20],R13
JBE 0x0023dcd8
MOV RCX,RBX
MOV RDX,RBX
CMP qword ptr [RBP + 0x18],RBX
JZ 0x0023dcc5
MOV RDI,RBX
CALL 0x002dc090
CMP R13,qword ptr [RAX + 0x20]
JA 0x0023dcb0
JNZ 0x0023dd58
MOV ESI,dword ptr [R12 + 0x8]
CMP dword ptr [RAX + 0x28],ESI
JNC 0x0023dd58
NOP word ptr [RAX + RAX*0x1]
CMP qword ptr [RAX + 0x18],0x0
MOV ECX,0x0
MOV RDX,RBX
CMOVNZ RCX,RBX
CMOVZ RDX,RAX
ADD RSP,0x8
MOV RAX,RCX
POP RBX
POP RBP
POP R12
POP R13
RET
JZ 0x0023dd70
JNC 0x0023dd90
CMP qword ptr [RBP + 0x20],RBX
JZ 0x0023dd3e
MOV RDI,RBX
CALL 0x002dc030
CMP R13,qword ptr [RAX + 0x20]
JC 0x0023dd04
JNZ 0x0023dd58
MOV ESI,dword ptr [RAX + 0x28]
CMP dword ptr [R12 + 0x8],ESI
JNC 0x0023dd58
CMP qword ptr [RBX + 0x18],0x0
MOV ECX,0x0
MOV RDX,RBX
CMOVNZ RCX,RAX
CMOVNZ RDX,RAX
JMP 0x0023dcc5
CMP qword ptr [RDI + 0x28],0x0
JZ 0x0023dd58
MOV RBX,qword ptr [RDI + 0x20]
MOV RAX,qword ptr [RBX + 0x20]
CMP qword ptr [RDX],RAX
JA 0x0023dd3e
JNZ 0x0023dd58
MOV EAX,dword ptr [RBX + 0x28]
CMP dword ptr [RDX + 0x8],EAX
JBE 0x0023dd58
ADD RSP,0x8
XOR ECX,ECX
MOV RDX,RBX
MOV RAX,RCX
POP RBX
POP RBP
POP R12
POP R13
RET
ADD RSP,0x8
MOV RSI,R12
MOV RDI,RBP
POP RBX
POP RBP
POP R12
POP R13
JMP 0x0023db90
MOV EAX,dword ptr [RDX + 0x8]
MOV EDX,dword ptr [RSI + 0x28]
CMP EDX,EAX
JA 0x0023dc79
CMP EDX,EAX
JC 0x0023dce4
MOV RCX,RBX
XOR EDX,EDX
JMP 0x0023dcc5
MOV EDX,dword ptr [RSI + 0x28]
MOV EAX,dword ptr [R12 + 0x8]
JMP 0x0023dd7e
(translation_unit "undefined1  [16] FUN_0023dc50(long param_1,ulong param_2,ulong *param_3)\n\n{\n  uint uVar1;\n  ulong uVar2;\n  uint uVar3;\n  ulong uVar4;\n  ulong uVar5;\n  undefined1 auVar6 [16];\n  undefined1 auVar7 [16];\n  \n  if (param_2 == param_1 + 8U) {\n    if (*(long *)(param_1 + 0x28) != 0) {\n      param_2 = *(ulong *)(param_1 + 0x20);\n      if ((*param_3 <= *(ulong *)(param_2 + 0x20)) &&\n         ((*param_3 != *(ulong *)(param_2 + 0x20) || ((uint)param_3[1] <= *(uint *)(param_2 + 0x28))\n          ))) goto LAB_0023dd58;\n      goto LAB_0023dd3e;\n    }\n    goto LAB_0023dd58;\n  }\n  uVar2 = *param_3;\n  uVar4 = *(ulong *)(param_2 + 0x20);\n  uVar5 = param_2;\n  if (uVar2 < uVar4) {\nLAB_0023dc79:\n    if (*(ulong *)(param_1 + 0x18) != param_2) {\n      uVar4 = thunk_FUN_002dbfd0(param_2,param_2,param_2);\n      if ((uVar2 <= *(ulong *)(uVar4 + 0x20)) &&\n         ((uVar2 != *(ulong *)(uVar4 + 0x20) || ((uint)param_3[1] <= *(uint *)(uVar4 + 0x28))))) {\nLAB_0023dd58:\n        auVar7 = FUN_0023db90(param_1,param_3);\n        return auVar7;\n      }\n      if (*(long *)(uVar4 + 0x18) == 0) {\n        uVar5 = 0;\n        param_2 = uVar4;\n      }\n    }\n  }\n  else {\n    if (uVar4 == uVar2) {\n      uVar3 = (uint)param_3[1];\n      uVar1 = *(uint *)(param_2 + 0x28);\n      if (uVar3 < uVar1) goto LAB_0023dc79;\nLAB_0023dd7e:\n      if (uVar3 <= uVar1) {\n        param_2 = 0;\n        goto LAB_0023dcc5;\n      }\n    }\n    else if (uVar2 <= uVar4) {\n      uVar1 = *(uint *)(param_2 + 0x28);\n      uVar3 = (uint)param_3[1];\n      goto LAB_0023dd7e;\n    }\n    if (*(ulong *)(param_1 + 0x20) == param_2) {\nLAB_0023dd3e:\n      auVar7._8_8_ = 0;\n      auVar7._0_8_ = param_2;\n      return auVar7 << 0x40;\n    }\n    uVar4 = FUN_002dc030(param_2);\n    if ((*(ulong *)(uVar4 + 0x20) <= uVar2) &&\n       ((uVar2 != *(ulong *)(uVar4 + 0x20) || (*(uint *)(uVar4 + 0x28) <= (uint)param_3[1]))))\n    goto LAB_0023dd58;\n    uVar5 = 0;\n    if (*(long *)(param_2 + 0x18) != 0) {\n      uVar5 = uVar4;\n      param_2 = uVar4;\n    }\n  }\nLAB_0023dcc5:\n  auVar6._8_8_ = param_2;\n  auVar6._0_8_ = uVar5;\n  return auVar6;\n}\n\n" (expression_statement "undefined1  [16]" (subscript_expression "undefined1  [16]" identifier [ number_literal ]) ;) (macro_type_specifier "FUN_0023dc50(long param_1,ulong param_2,ulong *param_3)" identifier ( (ERROR "long param_1,ulong param_2,ulong *" (type_descriptor "long param_1" (sized_type_specifier "long param_1" long type_identifier)) , identifier identifier , (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *))) (type_descriptor "param_3" type_identifier) )) ; (compound_statement "{\n  uint uVar1;\n  ulong uVar2;\n  uint uVar3;\n  ulong uVar4;\n  ulong uVar5;\n  undefined1 auVar6 [16];\n  undefined1 auVar7 [16];\n  \n  if (param_2 == param_1 + 8U) {\n    if (*(long *)(param_1 + 0x28) != 0) {\n      param_2 = *(ulong *)(param_1 + 0x20);\n      if ((*param_3 <= *(ulong *)(param_2 + 0x20)) &&\n         ((*param_3 != *(ulong *)(param_2 + 0x20) || ((uint)param_3[1] <= *(uint *)(param_2 + 0x28))\n          ))) goto LAB_0023dd58;\n      goto LAB_0023dd3e;\n    }\n    goto LAB_0023dd58;\n  }\n  uVar2 = *param_3;\n  uVar4 = *(ulong *)(param_2 + 0x20);\n  uVar5 = param_2;\n  if (uVar2 < uVar4) {\nLAB_0023dc79:\n    if (*(ulong *)(param_1 + 0x18) != param_2) {\n      uVar4 = thunk_FUN_002dbfd0(param_2,param_2,param_2);\n      if ((uVar2 <= *(ulong *)(uVar4 + 0x20)) &&\n         ((uVar2 != *(ulong *)(uVar4 + 0x20) || ((uint)param_3[1] <= *(uint *)(uVar4 + 0x28))))) {\nLAB_0023dd58:\n        auVar7 = FUN_0023db90(param_1,param_3);\n        return auVar7;\n      }\n      if (*(long *)(uVar4 + 0x18) == 0) {\n        uVar5 = 0;\n        param_2 = uVar4;\n      }\n    }\n  }\n  else {\n    if (uVar4 == uVar2) {\n      uVar3 = (uint)param_3[1];\n      uVar1 = *(uint *)(param_2 + 0x28);\n      if (uVar3 < uVar1) goto LAB_0023dc79;\nLAB_0023dd7e:\n      if (uVar3 <= uVar1) {\n        param_2 = 0;\n        goto LAB_0023dcc5;\n      }\n    }\n    else if (uVar2 <= uVar4) {\n      uVar1 = *(uint *)(param_2 + 0x28);\n      uVar3 = (uint)param_3[1];\n      goto LAB_0023dd7e;\n    }\n    if (*(ulong *)(param_1 + 0x20) == param_2) {\nLAB_0023dd3e:\n      auVar7._8_8_ = 0;\n      auVar7._0_8_ = param_2;\n      return auVar7 << 0x40;\n    }\n    uVar4 = FUN_002dc030(param_2);\n    if ((*(ulong *)(uVar4 + 0x20) <= uVar2) &&\n       ((uVar2 != *(ulong *)(uVar4 + 0x20) || (*(uint *)(uVar4 + 0x28) <= (uint)param_3[1]))))\n    goto LAB_0023dd58;\n    uVar5 = 0;\n    if (*(long *)(param_2 + 0x18) != 0) {\n      uVar5 = uVar4;\n      param_2 = uVar4;\n    }\n  }\nLAB_0023dcc5:\n  auVar6._8_8_ = param_2;\n  auVar6._0_8_ = uVar5;\n  return auVar6;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "ulong uVar2;" type_identifier identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "ulong uVar4;" type_identifier identifier ;) (declaration "ulong uVar5;" type_identifier identifier ;) (declaration "undefined1 auVar6 [16];" type_identifier (array_declarator "auVar6 [16]" identifier [ number_literal ]) ;) (declaration "undefined1 auVar7 [16];" type_identifier (array_declarator "auVar7 [16]" identifier [ number_literal ]) ;) (if_statement "if (param_2 == param_1 + 8U) {\n    if (*(long *)(param_1 + 0x28) != 0) {\n      param_2 = *(ulong *)(param_1 + 0x20);\n      if ((*param_3 <= *(ulong *)(param_2 + 0x20)) &&\n         ((*param_3 != *(ulong *)(param_2 + 0x20) || ((uint)param_3[1] <= *(uint *)(param_2 + 0x28))\n          ))) goto LAB_0023dd58;\n      goto LAB_0023dd3e;\n    }\n    goto LAB_0023dd58;\n  }" if (parenthesized_expression "(param_2 == param_1 + 8U)" ( (binary_expression "param_2 == param_1 + 8U" identifier == (binary_expression "param_1 + 8U" identifier + number_literal)) )) (compound_statement "{\n    if (*(long *)(param_1 + 0x28) != 0) {\n      param_2 = *(ulong *)(param_1 + 0x20);\n      if ((*param_3 <= *(ulong *)(param_2 + 0x20)) &&\n         ((*param_3 != *(ulong *)(param_2 + 0x20) || ((uint)param_3[1] <= *(uint *)(param_2 + 0x28))\n          ))) goto LAB_0023dd58;\n      goto LAB_0023dd3e;\n    }\n    goto LAB_0023dd58;\n  }" { (if_statement "if (*(long *)(param_1 + 0x28) != 0) {\n      param_2 = *(ulong *)(param_1 + 0x20);\n      if ((*param_3 <= *(ulong *)(param_2 + 0x20)) &&\n         ((*param_3 != *(ulong *)(param_2 + 0x20) || ((uint)param_3[1] <= *(uint *)(param_2 + 0x28))\n          ))) goto LAB_0023dd58;\n      goto LAB_0023dd3e;\n    }" if (parenthesized_expression "(*(long *)(param_1 + 0x28) != 0)" ( (binary_expression "*(long *)(param_1 + 0x28) != 0" (pointer_expression "*(long *)(param_1 + 0x28)" * (cast_expression "(long *)(param_1 + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n      param_2 = *(ulong *)(param_1 + 0x20);\n      if ((*param_3 <= *(ulong *)(param_2 + 0x20)) &&\n         ((*param_3 != *(ulong *)(param_2 + 0x20) || ((uint)param_3[1] <= *(uint *)(param_2 + 0x28))\n          ))) goto LAB_0023dd58;\n      goto LAB_0023dd3e;\n    }" { (expression_statement "param_2 = *(ulong *)(param_1 + 0x20);" (assignment_expression "param_2 = *(ulong *)(param_1 + 0x20)" identifier = (pointer_expression "*(ulong *)(param_1 + 0x20)" * (cast_expression "(ulong *)(param_1 + 0x20)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x20)" ( (binary_expression "param_1 + 0x20" identifier + number_literal) ))))) ;) (if_statement "if ((*param_3 <= *(ulong *)(param_2 + 0x20)) &&\n         ((*param_3 != *(ulong *)(param_2 + 0x20) || ((uint)param_3[1] <= *(uint *)(param_2 + 0x28))\n          ))) goto LAB_0023dd58;" if (parenthesized_expression "((*param_3 <= *(ulong *)(param_2 + 0x20)) &&\n         ((*param_3 != *(ulong *)(param_2 + 0x20) || ((uint)param_3[1] <= *(uint *)(param_2 + 0x28))\n          )))" ( (binary_expression "(*param_3 <= *(ulong *)(param_2 + 0x20)) &&\n         ((*param_3 != *(ulong *)(param_2 + 0x20) || ((uint)param_3[1] <= *(uint *)(param_2 + 0x28))\n          ))" (parenthesized_expression "(*param_3 <= *(ulong *)(param_2 + 0x20))" ( (binary_expression "*param_3 <= *(ulong *)(param_2 + 0x20)" (pointer_expression "*param_3" * identifier) <= (pointer_expression "*(ulong *)(param_2 + 0x20)" * (cast_expression "(ulong *)(param_2 + 0x20)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x20)" ( (binary_expression "param_2 + 0x20" identifier + number_literal) ))))) )) && (parenthesized_expression "((*param_3 != *(ulong *)(param_2 + 0x20) || ((uint)param_3[1] <= *(uint *)(param_2 + 0x28))\n          ))" ( (parenthesized_expression "(*param_3 != *(ulong *)(param_2 + 0x20) || ((uint)param_3[1] <= *(uint *)(param_2 + 0x28))\n          )" ( (binary_expression "*param_3 != *(ulong *)(param_2 + 0x20) || ((uint)param_3[1] <= *(uint *)(param_2 + 0x28))" (binary_expression "*param_3 != *(ulong *)(param_2 + 0x20)" (pointer_expression "*param_3" * identifier) != (pointer_expression "*(ulong *)(param_2 + 0x20)" * (cast_expression "(ulong *)(param_2 + 0x20)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x20)" ( (binary_expression "param_2 + 0x20" identifier + number_literal) ))))) || (parenthesized_expression "((uint)param_3[1] <= *(uint *)(param_2 + 0x28))" ( (binary_expression "(uint)param_3[1] <= *(uint *)(param_2 + 0x28)" (cast_expression "(uint)param_3[1]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_3[1]" identifier [ number_literal ])) <= (pointer_expression "*(uint *)(param_2 + 0x28)" * (cast_expression "(uint *)(param_2 + 0x28)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x28)" ( (binary_expression "param_2 + 0x28" identifier + number_literal) ))))) ))) )) ))) )) (goto_statement "goto LAB_0023dd58;" goto statement_identifier ;)) (goto_statement "goto LAB_0023dd3e;" goto statement_identifier ;) })) (goto_statement "goto LAB_0023dd58;" goto statement_identifier ;) })) (expression_statement "uVar2 = *param_3;" (assignment_expression "uVar2 = *param_3" identifier = (pointer_expression "*param_3" * identifier)) ;) (expression_statement "uVar4 = *(ulong *)(param_2 + 0x20);" (assignment_expression "uVar4 = *(ulong *)(param_2 + 0x20)" identifier = (pointer_expression "*(ulong *)(param_2 + 0x20)" * (cast_expression "(ulong *)(param_2 + 0x20)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x20)" ( (binary_expression "param_2 + 0x20" identifier + number_literal) ))))) ;) (expression_statement "uVar5 = param_2;" (assignment_expression "uVar5 = param_2" identifier = identifier) ;) (if_statement "if (uVar2 < uVar4) {\nLAB_0023dc79:\n    if (*(ulong *)(param_1 + 0x18) != param_2) {\n      uVar4 = thunk_FUN_002dbfd0(param_2,param_2,param_2);\n      if ((uVar2 <= *(ulong *)(uVar4 + 0x20)) &&\n         ((uVar2 != *(ulong *)(uVar4 + 0x20) || ((uint)param_3[1] <= *(uint *)(uVar4 + 0x28))))) {\nLAB_0023dd58:\n        auVar7 = FUN_0023db90(param_1,param_3);\n        return auVar7;\n      }\n      if (*(long *)(uVar4 + 0x18) == 0) {\n        uVar5 = 0;\n        param_2 = uVar4;\n      }\n    }\n  }\n  else {\n    if (uVar4 == uVar2) {\n      uVar3 = (uint)param_3[1];\n      uVar1 = *(uint *)(param_2 + 0x28);\n      if (uVar3 < uVar1) goto LAB_0023dc79;\nLAB_0023dd7e:\n      if (uVar3 <= uVar1) {\n        param_2 = 0;\n        goto LAB_0023dcc5;\n      }\n    }\n    else if (uVar2 <= uVar4) {\n      uVar1 = *(uint *)(param_2 + 0x28);\n      uVar3 = (uint)param_3[1];\n      goto LAB_0023dd7e;\n    }\n    if (*(ulong *)(param_1 + 0x20) == param_2) {\nLAB_0023dd3e:\n      auVar7._8_8_ = 0;\n      auVar7._0_8_ = param_2;\n      return auVar7 << 0x40;\n    }\n    uVar4 = FUN_002dc030(param_2);\n    if ((*(ulong *)(uVar4 + 0x20) <= uVar2) &&\n       ((uVar2 != *(ulong *)(uVar4 + 0x20) || (*(uint *)(uVar4 + 0x28) <= (uint)param_3[1]))))\n    goto LAB_0023dd58;\n    uVar5 = 0;\n    if (*(long *)(param_2 + 0x18) != 0) {\n      uVar5 = uVar4;\n      param_2 = uVar4;\n    }\n  }" if (parenthesized_expression "(uVar2 < uVar4)" ( (binary_expression "uVar2 < uVar4" identifier < identifier) )) (compound_statement "{\nLAB_0023dc79:\n    if (*(ulong *)(param_1 + 0x18) != param_2) {\n      uVar4 = thunk_FUN_002dbfd0(param_2,param_2,param_2);\n      if ((uVar2 <= *(ulong *)(uVar4 + 0x20)) &&\n         ((uVar2 != *(ulong *)(uVar4 + 0x20) || ((uint)param_3[1] <= *(uint *)(uVar4 + 0x28))))) {\nLAB_0023dd58:\n        auVar7 = FUN_0023db90(param_1,param_3);\n        return auVar7;\n      }\n      if (*(long *)(uVar4 + 0x18) == 0) {\n        uVar5 = 0;\n        param_2 = uVar4;\n      }\n    }\n  }" { (labeled_statement "LAB_0023dc79:\n    if (*(ulong *)(param_1 + 0x18) != param_2) {\n      uVar4 = thunk_FUN_002dbfd0(param_2,param_2,param_2);\n      if ((uVar2 <= *(ulong *)(uVar4 + 0x20)) &&\n         ((uVar2 != *(ulong *)(uVar4 + 0x20) || ((uint)param_3[1] <= *(uint *)(uVar4 + 0x28))))) {\nLAB_0023dd58:\n        auVar7 = FUN_0023db90(param_1,param_3);\n        return auVar7;\n      }\n      if (*(long *)(uVar4 + 0x18) == 0) {\n        uVar5 = 0;\n        param_2 = uVar4;\n      }\n    }" statement_identifier : (if_statement "if (*(ulong *)(param_1 + 0x18) != param_2) {\n      uVar4 = thunk_FUN_002dbfd0(param_2,param_2,param_2);\n      if ((uVar2 <= *(ulong *)(uVar4 + 0x20)) &&\n         ((uVar2 != *(ulong *)(uVar4 + 0x20) || ((uint)param_3[1] <= *(uint *)(uVar4 + 0x28))))) {\nLAB_0023dd58:\n        auVar7 = FUN_0023db90(param_1,param_3);\n        return auVar7;\n      }\n      if (*(long *)(uVar4 + 0x18) == 0) {\n        uVar5 = 0;\n        param_2 = uVar4;\n      }\n    }" if (parenthesized_expression "(*(ulong *)(param_1 + 0x18) != param_2)" ( (binary_expression "*(ulong *)(param_1 + 0x18) != param_2" (pointer_expression "*(ulong *)(param_1 + 0x18)" * (cast_expression "(ulong *)(param_1 + 0x18)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) )))) != identifier) )) (compound_statement "{\n      uVar4 = thunk_FUN_002dbfd0(param_2,param_2,param_2);\n      if ((uVar2 <= *(ulong *)(uVar4 + 0x20)) &&\n         ((uVar2 != *(ulong *)(uVar4 + 0x20) || ((uint)param_3[1] <= *(uint *)(uVar4 + 0x28))))) {\nLAB_0023dd58:\n        auVar7 = FUN_0023db90(param_1,param_3);\n        return auVar7;\n      }\n      if (*(long *)(uVar4 + 0x18) == 0) {\n        uVar5 = 0;\n        param_2 = uVar4;\n      }\n    }" { (expression_statement "uVar4 = thunk_FUN_002dbfd0(param_2,param_2,param_2);" (assignment_expression "uVar4 = thunk_FUN_002dbfd0(param_2,param_2,param_2)" identifier = (call_expression "thunk_FUN_002dbfd0(param_2,param_2,param_2)" identifier (argument_list "(param_2,param_2,param_2)" ( identifier , identifier , identifier )))) ;) (if_statement "if ((uVar2 <= *(ulong *)(uVar4 + 0x20)) &&\n         ((uVar2 != *(ulong *)(uVar4 + 0x20) || ((uint)param_3[1] <= *(uint *)(uVar4 + 0x28))))) {\nLAB_0023dd58:\n        auVar7 = FUN_0023db90(param_1,param_3);\n        return auVar7;\n      }" if (parenthesized_expression "((uVar2 <= *(ulong *)(uVar4 + 0x20)) &&\n         ((uVar2 != *(ulong *)(uVar4 + 0x20) || ((uint)param_3[1] <= *(uint *)(uVar4 + 0x28)))))" ( (binary_expression "(uVar2 <= *(ulong *)(uVar4 + 0x20)) &&\n         ((uVar2 != *(ulong *)(uVar4 + 0x20) || ((uint)param_3[1] <= *(uint *)(uVar4 + 0x28))))" (parenthesized_expression "(uVar2 <= *(ulong *)(uVar4 + 0x20))" ( (binary_expression "uVar2 <= *(ulong *)(uVar4 + 0x20)" identifier <= (pointer_expression "*(ulong *)(uVar4 + 0x20)" * (cast_expression "(ulong *)(uVar4 + 0x20)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar4 + 0x20)" ( (binary_expression "uVar4 + 0x20" identifier + number_literal) ))))) )) && (parenthesized_expression "((uVar2 != *(ulong *)(uVar4 + 0x20) || ((uint)param_3[1] <= *(uint *)(uVar4 + 0x28))))" ( (parenthesized_expression "(uVar2 != *(ulong *)(uVar4 + 0x20) || ((uint)param_3[1] <= *(uint *)(uVar4 + 0x28)))" ( (binary_expression "uVar2 != *(ulong *)(uVar4 + 0x20) || ((uint)param_3[1] <= *(uint *)(uVar4 + 0x28))" (binary_expression "uVar2 != *(ulong *)(uVar4 + 0x20)" identifier != (pointer_expression "*(ulong *)(uVar4 + 0x20)" * (cast_expression "(ulong *)(uVar4 + 0x20)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar4 + 0x20)" ( (binary_expression "uVar4 + 0x20" identifier + number_literal) ))))) || (parenthesized_expression "((uint)param_3[1] <= *(uint *)(uVar4 + 0x28))" ( (binary_expression "(uint)param_3[1] <= *(uint *)(uVar4 + 0x28)" (cast_expression "(uint)param_3[1]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_3[1]" identifier [ number_literal ])) <= (pointer_expression "*(uint *)(uVar4 + 0x28)" * (cast_expression "(uint *)(uVar4 + 0x28)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar4 + 0x28)" ( (binary_expression "uVar4 + 0x28" identifier + number_literal) ))))) ))) )) ))) )) (compound_statement "{\nLAB_0023dd58:\n        auVar7 = FUN_0023db90(param_1,param_3);\n        return auVar7;\n      }" { (labeled_statement "LAB_0023dd58:\n        auVar7 = FUN_0023db90(param_1,param_3);" statement_identifier : (expression_statement "auVar7 = FUN_0023db90(param_1,param_3);" (assignment_expression "auVar7 = FUN_0023db90(param_1,param_3)" identifier = (call_expression "FUN_0023db90(param_1,param_3)" identifier (argument_list "(param_1,param_3)" ( identifier , identifier )))) ;)) (return_statement "return auVar7;" return identifier ;) })) (if_statement "if (*(long *)(uVar4 + 0x18) == 0) {\n        uVar5 = 0;\n        param_2 = uVar4;\n      }" if (parenthesized_expression "(*(long *)(uVar4 + 0x18) == 0)" ( (binary_expression "*(long *)(uVar4 + 0x18) == 0" (pointer_expression "*(long *)(uVar4 + 0x18)" * (cast_expression "(long *)(uVar4 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar4 + 0x18)" ( (binary_expression "uVar4 + 0x18" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n        uVar5 = 0;\n        param_2 = uVar4;\n      }" { (expression_statement "uVar5 = 0;" (assignment_expression "uVar5 = 0" identifier = number_literal) ;) (expression_statement "param_2 = uVar4;" (assignment_expression "param_2 = uVar4" identifier = identifier) ;) })) }))) }) (else_clause "else {\n    if (uVar4 == uVar2) {\n      uVar3 = (uint)param_3[1];\n      uVar1 = *(uint *)(param_2 + 0x28);\n      if (uVar3 < uVar1) goto LAB_0023dc79;\nLAB_0023dd7e:\n      if (uVar3 <= uVar1) {\n        param_2 = 0;\n        goto LAB_0023dcc5;\n      }\n    }\n    else if (uVar2 <= uVar4) {\n      uVar1 = *(uint *)(param_2 + 0x28);\n      uVar3 = (uint)param_3[1];\n      goto LAB_0023dd7e;\n    }\n    if (*(ulong *)(param_1 + 0x20) == param_2) {\nLAB_0023dd3e:\n      auVar7._8_8_ = 0;\n      auVar7._0_8_ = param_2;\n      return auVar7 << 0x40;\n    }\n    uVar4 = FUN_002dc030(param_2);\n    if ((*(ulong *)(uVar4 + 0x20) <= uVar2) &&\n       ((uVar2 != *(ulong *)(uVar4 + 0x20) || (*(uint *)(uVar4 + 0x28) <= (uint)param_3[1]))))\n    goto LAB_0023dd58;\n    uVar5 = 0;\n    if (*(long *)(param_2 + 0x18) != 0) {\n      uVar5 = uVar4;\n      param_2 = uVar4;\n    }\n  }" else (compound_statement "{\n    if (uVar4 == uVar2) {\n      uVar3 = (uint)param_3[1];\n      uVar1 = *(uint *)(param_2 + 0x28);\n      if (uVar3 < uVar1) goto LAB_0023dc79;\nLAB_0023dd7e:\n      if (uVar3 <= uVar1) {\n        param_2 = 0;\n        goto LAB_0023dcc5;\n      }\n    }\n    else if (uVar2 <= uVar4) {\n      uVar1 = *(uint *)(param_2 + 0x28);\n      uVar3 = (uint)param_3[1];\n      goto LAB_0023dd7e;\n    }\n    if (*(ulong *)(param_1 + 0x20) == param_2) {\nLAB_0023dd3e:\n      auVar7._8_8_ = 0;\n      auVar7._0_8_ = param_2;\n      return auVar7 << 0x40;\n    }\n    uVar4 = FUN_002dc030(param_2);\n    if ((*(ulong *)(uVar4 + 0x20) <= uVar2) &&\n       ((uVar2 != *(ulong *)(uVar4 + 0x20) || (*(uint *)(uVar4 + 0x28) <= (uint)param_3[1]))))\n    goto LAB_0023dd58;\n    uVar5 = 0;\n    if (*(long *)(param_2 + 0x18) != 0) {\n      uVar5 = uVar4;\n      param_2 = uVar4;\n    }\n  }" { (if_statement "if (uVar4 == uVar2) {\n      uVar3 = (uint)param_3[1];\n      uVar1 = *(uint *)(param_2 + 0x28);\n      if (uVar3 < uVar1) goto LAB_0023dc79;\nLAB_0023dd7e:\n      if (uVar3 <= uVar1) {\n        param_2 = 0;\n        goto LAB_0023dcc5;\n      }\n    }\n    else if (uVar2 <= uVar4) {\n      uVar1 = *(uint *)(param_2 + 0x28);\n      uVar3 = (uint)param_3[1];\n      goto LAB_0023dd7e;\n    }" if (parenthesized_expression "(uVar4 == uVar2)" ( (binary_expression "uVar4 == uVar2" identifier == identifier) )) (compound_statement "{\n      uVar3 = (uint)param_3[1];\n      uVar1 = *(uint *)(param_2 + 0x28);\n      if (uVar3 < uVar1) goto LAB_0023dc79;\nLAB_0023dd7e:\n      if (uVar3 <= uVar1) {\n        param_2 = 0;\n        goto LAB_0023dcc5;\n      }\n    }" { (expression_statement "uVar3 = (uint)param_3[1];" (assignment_expression "uVar3 = (uint)param_3[1]" identifier = (cast_expression "(uint)param_3[1]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_3[1]" identifier [ number_literal ]))) ;) (expression_statement "uVar1 = *(uint *)(param_2 + 0x28);" (assignment_expression "uVar1 = *(uint *)(param_2 + 0x28)" identifier = (pointer_expression "*(uint *)(param_2 + 0x28)" * (cast_expression "(uint *)(param_2 + 0x28)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x28)" ( (binary_expression "param_2 + 0x28" identifier + number_literal) ))))) ;) (if_statement "if (uVar3 < uVar1) goto LAB_0023dc79;" if (parenthesized_expression "(uVar3 < uVar1)" ( (binary_expression "uVar3 < uVar1" identifier < identifier) )) (goto_statement "goto LAB_0023dc79;" goto statement_identifier ;)) (labeled_statement "LAB_0023dd7e:\n      if (uVar3 <= uVar1) {\n        param_2 = 0;\n        goto LAB_0023dcc5;\n      }" statement_identifier : (if_statement "if (uVar3 <= uVar1) {\n        param_2 = 0;\n        goto LAB_0023dcc5;\n      }" if (parenthesized_expression "(uVar3 <= uVar1)" ( (binary_expression "uVar3 <= uVar1" identifier <= identifier) )) (compound_statement "{\n        param_2 = 0;\n        goto LAB_0023dcc5;\n      }" { (expression_statement "param_2 = 0;" (assignment_expression "param_2 = 0" identifier = number_literal) ;) (goto_statement "goto LAB_0023dcc5;" goto statement_identifier ;) }))) }) (else_clause "else if (uVar2 <= uVar4) {\n      uVar1 = *(uint *)(param_2 + 0x28);\n      uVar3 = (uint)param_3[1];\n      goto LAB_0023dd7e;\n    }" else (if_statement "if (uVar2 <= uVar4) {\n      uVar1 = *(uint *)(param_2 + 0x28);\n      uVar3 = (uint)param_3[1];\n      goto LAB_0023dd7e;\n    }" if (parenthesized_expression "(uVar2 <= uVar4)" ( (binary_expression "uVar2 <= uVar4" identifier <= identifier) )) (compound_statement "{\n      uVar1 = *(uint *)(param_2 + 0x28);\n      uVar3 = (uint)param_3[1];\n      goto LAB_0023dd7e;\n    }" { (expression_statement "uVar1 = *(uint *)(param_2 + 0x28);" (assignment_expression "uVar1 = *(uint *)(param_2 + 0x28)" identifier = (pointer_expression "*(uint *)(param_2 + 0x28)" * (cast_expression "(uint *)(param_2 + 0x28)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x28)" ( (binary_expression "param_2 + 0x28" identifier + number_literal) ))))) ;) (expression_statement "uVar3 = (uint)param_3[1];" (assignment_expression "uVar3 = (uint)param_3[1]" identifier = (cast_expression "(uint)param_3[1]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_3[1]" identifier [ number_literal ]))) ;) (goto_statement "goto LAB_0023dd7e;" goto statement_identifier ;) })))) (if_statement "if (*(ulong *)(param_1 + 0x20) == param_2) {\nLAB_0023dd3e:\n      auVar7._8_8_ = 0;\n      auVar7._0_8_ = param_2;\n      return auVar7 << 0x40;\n    }" if (parenthesized_expression "(*(ulong *)(param_1 + 0x20) == param_2)" ( (binary_expression "*(ulong *)(param_1 + 0x20) == param_2" (pointer_expression "*(ulong *)(param_1 + 0x20)" * (cast_expression "(ulong *)(param_1 + 0x20)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x20)" ( (binary_expression "param_1 + 0x20" identifier + number_literal) )))) == identifier) )) (compound_statement "{\nLAB_0023dd3e:\n      auVar7._8_8_ = 0;\n      auVar7._0_8_ = param_2;\n      return auVar7 << 0x40;\n    }" { (labeled_statement "LAB_0023dd3e:\n      auVar7._8_8_ = 0;" statement_identifier : (expression_statement "auVar7._8_8_ = 0;" (assignment_expression "auVar7._8_8_ = 0" (field_expression "auVar7._8_8_" identifier . field_identifier) = number_literal) ;)) (expression_statement "auVar7._0_8_ = param_2;" (assignment_expression "auVar7._0_8_ = param_2" (field_expression "auVar7._0_8_" identifier . field_identifier) = identifier) ;) (return_statement "return auVar7 << 0x40;" return (binary_expression "auVar7 << 0x40" identifier << number_literal) ;) })) (expression_statement "uVar4 = FUN_002dc030(param_2);" (assignment_expression "uVar4 = FUN_002dc030(param_2)" identifier = (call_expression "FUN_002dc030(param_2)" identifier (argument_list "(param_2)" ( identifier )))) ;) (if_statement "if ((*(ulong *)(uVar4 + 0x20) <= uVar2) &&\n       ((uVar2 != *(ulong *)(uVar4 + 0x20) || (*(uint *)(uVar4 + 0x28) <= (uint)param_3[1]))))\n    goto LAB_0023dd58;" if (parenthesized_expression "((*(ulong *)(uVar4 + 0x20) <= uVar2) &&\n       ((uVar2 != *(ulong *)(uVar4 + 0x20) || (*(uint *)(uVar4 + 0x28) <= (uint)param_3[1]))))" ( (binary_expression "(*(ulong *)(uVar4 + 0x20) <= uVar2) &&\n       ((uVar2 != *(ulong *)(uVar4 + 0x20) || (*(uint *)(uVar4 + 0x28) <= (uint)param_3[1])))" (parenthesized_expression "(*(ulong *)(uVar4 + 0x20) <= uVar2)" ( (binary_expression "*(ulong *)(uVar4 + 0x20) <= uVar2" (pointer_expression "*(ulong *)(uVar4 + 0x20)" * (cast_expression "(ulong *)(uVar4 + 0x20)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar4 + 0x20)" ( (binary_expression "uVar4 + 0x20" identifier + number_literal) )))) <= identifier) )) && (parenthesized_expression "((uVar2 != *(ulong *)(uVar4 + 0x20) || (*(uint *)(uVar4 + 0x28) <= (uint)param_3[1])))" ( (parenthesized_expression "(uVar2 != *(ulong *)(uVar4 + 0x20) || (*(uint *)(uVar4 + 0x28) <= (uint)param_3[1]))" ( (binary_expression "uVar2 != *(ulong *)(uVar4 + 0x20) || (*(uint *)(uVar4 + 0x28) <= (uint)param_3[1])" (binary_expression "uVar2 != *(ulong *)(uVar4 + 0x20)" identifier != (pointer_expression "*(ulong *)(uVar4 + 0x20)" * (cast_expression "(ulong *)(uVar4 + 0x20)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar4 + 0x20)" ( (binary_expression "uVar4 + 0x20" identifier + number_literal) ))))) || (parenthesized_expression "(*(uint *)(uVar4 + 0x28) <= (uint)param_3[1])" ( (binary_expression "*(uint *)(uVar4 + 0x28) <= (uint)param_3[1]" (pointer_expression "*(uint *)(uVar4 + 0x28)" * (cast_expression "(uint *)(uVar4 + 0x28)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar4 + 0x28)" ( (binary_expression "uVar4 + 0x28" identifier + number_literal) )))) <= (cast_expression "(uint)param_3[1]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_3[1]" identifier [ number_literal ]))) ))) )) ))) )) (goto_statement "goto LAB_0023dd58;" goto statement_identifier ;)) (expression_statement "uVar5 = 0;" (assignment_expression "uVar5 = 0" identifier = number_literal) ;) (if_statement "if (*(long *)(param_2 + 0x18) != 0) {\n      uVar5 = uVar4;\n      param_2 = uVar4;\n    }" if (parenthesized_expression "(*(long *)(param_2 + 0x18) != 0)" ( (binary_expression "*(long *)(param_2 + 0x18) != 0" (pointer_expression "*(long *)(param_2 + 0x18)" * (cast_expression "(long *)(param_2 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x18)" ( (binary_expression "param_2 + 0x18" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n      uVar5 = uVar4;\n      param_2 = uVar4;\n    }" { (expression_statement "uVar5 = uVar4;" (assignment_expression "uVar5 = uVar4" identifier = identifier) ;) (expression_statement "param_2 = uVar4;" (assignment_expression "param_2 = uVar4" identifier = identifier) ;) })) }))) (labeled_statement "LAB_0023dcc5:\n  auVar6._8_8_ = param_2;" statement_identifier : (expression_statement "auVar6._8_8_ = param_2;" (assignment_expression "auVar6._8_8_ = param_2" (field_expression "auVar6._8_8_" identifier . field_identifier) = identifier) ;)) (expression_statement "auVar6._0_8_ = uVar5;" (assignment_expression "auVar6._0_8_ = uVar5" (field_expression "auVar6._0_8_" identifier . field_identifier) = identifier) ;) (return_statement "return auVar6;" return identifier ;) }))
(translation_unit "/* DWARF original prototype: pair<std::_Rb_tree_node_base*,_std::_Rb_tree_node_base*>\n   _M_get_insert_hint_unique_pos(_Rb_tree<std::pair<gold::Relobj*,_unsigned_int>,_std::pair<const_std::pair<gold::Relobj*,_unsigned_int>,_unsigned_int>,_std::_Select1st<std::pair<const_std::pair<gold::Relobj*,_unsigned_int>,_unsigned_int>_>,_std::less<std::pair<gold::Relobj*,_unsigned_int>_>,_std::allocator<std::pair<const_std::pair<gold::Relobj*,_unsigned_int>,_unsigned_int>_>_>\n   * this, const_iterator __position, key_type * __k) */\n\npair<std::_Rb_tree_node_base*,_std::_Rb_tree_node_base*> __thiscall\nstd::\n_Rb_tree<std::pair<gold::Relobj*,_unsigned_int>,_std::pair<const_std::pair<gold::Relobj*,_unsigned_int>,_unsigned_int>,_std::_Select1st<std::pair<const_std::pair<gold::Relobj*,_unsigned_int>,_unsigned_int>_>,_std::less<std::pair<gold::Relobj*,_unsigned_int>_>,_std::allocator<std::pair<const_std::pair<gold::Relobj*,_unsigned_int>,_unsigned_int>_>_>\n::_M_get_insert_hint_unique_pos\n          (_Rb_tree<std::pair<gold::Relobj*,_unsigned_int>,_std::pair<const_std::pair<gold::Relobj*,_unsigned_int>,_unsigned_int>,_std::_Select1st<std::pair<const_std::pair<gold::Relobj*,_unsigned_int>,_unsigned_int>_>,_std::less<std::pair<gold::Relobj*,_unsigned_int>_>,_std::allocator<std::pair<const_std::pair<gold::Relobj*,_unsigned_int>,_unsigned_int>_>_>\n           *this,const_iterator __position,key_type *__k)\n\n{\n  Relobj *pRVar1;\n  Relobj *pRVar2;\n  undefined1 auVar3 [16];\n  uint uVar4;\n  _Base_ptr p_Var5;\n  const_iterator cVar6;\n  uint uVar7;\n  pair<std::_Rb_tree_node_base*,_std::_Rb_tree_node_base*> pVar8;\n  \n  if ((_Rb_tree_header *)__position._M_node == &(this->_M_impl).super__Rb_tree_header) {\n    if ((this->_M_impl).super__Rb_tree_header._M_node_count != 0) {\n      __position._M_node = (this->_M_impl).super__Rb_tree_header._M_header._M_right;\n      if ((__k->first <= *(Relobj **)(__position._M_node + 1)) &&\n         ((__k->first != *(Relobj **)(__position._M_node + 1) ||\n          (__k->second <= *(uint *)&__position._M_node[1]._M_parent)))) goto LAB_0023dd58;\n      goto LAB_0023dd3e;\n    }\n    goto LAB_0023dd58;\n  }\n  pRVar1 = __k->first;\n  pRVar2 = *(Relobj **)(__position._M_node + 1);\n  cVar6._M_node = __position._M_node;\n  if (pRVar1 < pRVar2) {\nLAB_0023dc79:\n    if ((this->_M_impl).super__Rb_tree_header._M_header._M_left != __position._M_node) {\n      p_Var5 = (_Base_ptr)_Rb_tree_decrement(__position._M_node);\n      if ((pRVar1 <= *(Relobj **)(p_Var5 + 1)) &&\n         ((pRVar1 != *(Relobj **)(p_Var5 + 1) || (__k->second <= *(uint *)&p_Var5[1]._M_parent)))) {\nLAB_0023dd58:\n        pVar8 = _M_get_insert_unique_pos(this,__k);\n        return pVar8;\n      }\n      if (p_Var5->_M_right == (_Base_ptr)0x0) {\n        cVar6._M_node = (_Base_ptr)0x0;\n        __position._M_node = p_Var5;\n      }\n    }\n  }\n  else {\n    if (pRVar2 == pRVar1) {\n      uVar4 = __k->second;\n      uVar7 = *(uint *)&__position._M_node[1]._M_parent;\n      if (uVar4 < uVar7) goto LAB_0023dc79;\nLAB_0023dd7e:\n      if (uVar4 <= uVar7) {\n        __position._M_node = (_Base_ptr)0x0;\n        goto LAB_0023dcc5;\n      }\n    }\n    else if (pRVar1 <= pRVar2) {\n      uVar7 = *(uint *)&__position._M_node[1]._M_parent;\n      uVar4 = __k->second;\n      goto LAB_0023dd7e;\n    }\n    if ((this->_M_impl).super__Rb_tree_header._M_header._M_right == __position._M_node) {\nLAB_0023dd3e:\n      auVar3._8_8_ = 0;\n      auVar3._0_8_ = __position._M_node;\n      return (pair<std::_Rb_tree_node_base*,_std::_Rb_tree_node_base*>)(auVar3 << 0x40);\n    }\n    p_Var5 = (_Base_ptr)_Rb_tree_increment(__position._M_node);\n    if ((*(Relobj **)(p_Var5 + 1) <= pRVar1) &&\n       ((pRVar1 != *(Relobj **)(p_Var5 + 1) || (*(uint *)&p_Var5[1]._M_parent <= __k->second))))\n    goto LAB_0023dd58;\n    cVar6._M_node = (_Base_ptr)0x0;\n    if ((__position._M_node)->_M_right != (_Base_ptr)0x0) {\n      cVar6._M_node = p_Var5;\n      __position._M_node = p_Var5;\n    }\n  }\nLAB_0023dcc5:\n  pVar8.second = __position._M_node;\n  pVar8.first = cVar6._M_node;\n  return pVar8;\n}\n\n" comment (ERROR "pair<std::_Rb_tree_node_base*,_std::_Rb_tree_node_base*>" (binary_expression "pair<std" identifier < identifier) : : (binary_expression "_Rb_tree_node_base*,_std" identifier * (ERROR "," ,) identifier) : : identifier * >) (function_definition "__thiscall\nstd::\n_Rb_tree<std::pair<gold::Relobj*,_unsigned_int>,_std::pair<const_std::pair<gold::Relobj*,_unsigned_int>,_unsigned_int>,_std::_Select1st<std::pair<const_std::pair<gold::Relobj*,_unsigned_int>,_unsigned_int>_>,_std::less<std::pair<gold::Relobj*,_unsigned_int>_>,_std::allocator<std::pair<const_std::pair<gold::Relobj*,_unsigned_int>,_unsigned_int>_>_>\n::_M_get_insert_hint_unique_pos\n          (_Rb_tree<std::pair<gold::Relobj*,_unsigned_int>,_std::pair<const_std::pair<gold::Relobj*,_unsigned_int>,_unsigned_int>,_std::_Select1st<std::pair<const_std::pair<gold::Relobj*,_unsigned_int>,_unsigned_int>_>,_std::less<std::pair<gold::Relobj*,_unsigned_int>_>,_std::allocator<std::pair<const_std::pair<gold::Relobj*,_unsigned_int>,_unsigned_int>_>_>\n           *this,const_iterator __position,key_type *__k)\n\n{\n  Relobj *pRVar1;\n  Relobj *pRVar2;\n  undefined1 auVar3 [16];\n  uint uVar4;\n  _Base_ptr p_Var5;\n  const_iterator cVar6;\n  uint uVar7;\n  pair<std::_Rb_tree_node_base*,_std::_Rb_tree_node_base*> pVar8;\n  \n  if ((_Rb_tree_header *)__position._M_node == &(this->_M_impl).super__Rb_tree_header) {\n    if ((this->_M_impl).super__Rb_tree_header._M_node_count != 0) {\n      __position._M_node = (this->_M_impl).super__Rb_tree_header._M_header._M_right;\n      if ((__k->first <= *(Relobj **)(__position._M_node + 1)) &&\n         ((__k->first != *(Relobj **)(__position._M_node + 1) ||\n          (__k->second <= *(uint *)&__position._M_node[1]._M_parent)))) goto LAB_0023dd58;\n      goto LAB_0023dd3e;\n    }\n    goto LAB_0023dd58;\n  }\n  pRVar1 = __k->first;\n  pRVar2 = *(Relobj **)(__position._M_node + 1);\n  cVar6._M_node = __position._M_node;\n  if (pRVar1 < pRVar2) {\nLAB_0023dc79:\n    if ((this->_M_impl).super__Rb_tree_header._M_header._M_left != __position._M_node) {\n      p_Var5 = (_Base_ptr)_Rb_tree_decrement(__position._M_node);\n      if ((pRVar1 <= *(Relobj **)(p_Var5 + 1)) &&\n         ((pRVar1 != *(Relobj **)(p_Var5 + 1) || (__k->second <= *(uint *)&p_Var5[1]._M_parent)))) {\nLAB_0023dd58:\n        pVar8 = _M_get_insert_unique_pos(this,__k);\n        return pVar8;\n      }\n      if (p_Var5->_M_right == (_Base_ptr)0x0) {\n        cVar6._M_node = (_Base_ptr)0x0;\n        __position._M_node = p_Var5;\n      }\n    }\n  }\n  else {\n    if (pRVar2 == pRVar1) {\n      uVar4 = __k->second;\n      uVar7 = *(uint *)&__position._M_node[1]._M_parent;\n      if (uVar4 < uVar7) goto LAB_0023dc79;\nLAB_0023dd7e:\n      if (uVar4 <= uVar7) {\n        __position._M_node = (_Base_ptr)0x0;\n        goto LAB_0023dcc5;\n      }\n    }\n    else if (pRVar1 <= pRVar2) {\n      uVar7 = *(uint *)&__position._M_node[1]._M_parent;\n      uVar4 = __k->second;\n      goto LAB_0023dd7e;\n    }\n    if ((this->_M_impl).super__Rb_tree_header._M_header._M_right == __position._M_node) {\nLAB_0023dd3e:\n      auVar3._8_8_ = 0;\n      auVar3._0_8_ = __position._M_node;\n      return (pair<std::_Rb_tree_node_base*,_std::_Rb_tree_node_base*>)(auVar3 << 0x40);\n    }\n    p_Var5 = (_Base_ptr)_Rb_tree_increment(__position._M_node);\n    if ((*(Relobj **)(p_Var5 + 1) <= pRVar1) &&\n       ((pRVar1 != *(Relobj **)(p_Var5 + 1) || (*(uint *)&p_Var5[1]._M_parent <= __k->second))))\n    goto LAB_0023dd58;\n    cVar6._M_node = (_Base_ptr)0x0;\n    if ((__position._M_node)->_M_right != (_Base_ptr)0x0) {\n      cVar6._M_node = p_Var5;\n      __position._M_node = p_Var5;\n    }\n  }\nLAB_0023dcc5:\n  pVar8.second = __position._M_node;\n  pVar8.first = cVar6._M_node;\n  return pVar8;\n}" (ms_call_modifier "__thiscall" __thiscall) type_identifier (ERROR "::\n_Rb_tree<std::pair<gold::Relobj*,_unsigned_int>,_std::pair<const_std::pair<gold::Relobj*,_unsigned_int>,_unsigned_int>,_std::_Select1st<std::pair<const_std::pair<gold::Relobj*,_unsigned_int>,_unsigned_int>_>,_std::less<std::pair<gold::Relobj*,_unsigned_int>_>,_std::allocator<std::pair<const_std::pair<gold::Relobj*,_unsigned_int>,_unsigned_int>_>_>\n::" : : identifier < identifier : : identifier < identifier : : identifier * , identifier > , identifier : : identifier < identifier : : identifier < identifier : : identifier * , identifier > , identifier > , identifier : : identifier < identifier : : identifier < identifier : : identifier < identifier : : identifier * , identifier > , identifier > identifier > , identifier : : identifier < identifier : : identifier < identifier : : identifier * , identifier > identifier > , identifier : : identifier < identifier : : identifier < identifier : : identifier < identifier : : identifier * , identifier > , identifier > identifier > identifier > : :) (function_declarator "_M_get_insert_hint_unique_pos\n          (_Rb_tree<std::pair<gold::Relobj*,_unsigned_int>,_std::pair<const_std::pair<gold::Relobj*,_unsigned_int>,_unsigned_int>,_std::_Select1st<std::pair<const_std::pair<gold::Relobj*,_unsigned_int>,_unsigned_int>_>,_std::less<std::pair<gold::Relobj*,_unsigned_int>_>,_std::allocator<std::pair<const_std::pair<gold::Relobj*,_unsigned_int>,_unsigned_int>_>_>\n           *this,const_iterator __position,key_type *__k)" identifier (parameter_list "(_Rb_tree<std::pair<gold::Relobj*,_unsigned_int>,_std::pair<const_std::pair<gold::Relobj*,_unsigned_int>,_unsigned_int>,_std::_Select1st<std::pair<const_std::pair<gold::Relobj*,_unsigned_int>,_unsigned_int>_>,_std::less<std::pair<gold::Relobj*,_unsigned_int>_>,_std::allocator<std::pair<const_std::pair<gold::Relobj*,_unsigned_int>,_unsigned_int>_>_>\n           *this,const_iterator __position,key_type *__k)" ( (parameter_declaration "_Rb_tree<std::pair<gold::Relobj*" type_identifier (ERROR "<std::pair<gold::Relobj" < identifier : : identifier < identifier : : identifier) (abstract_pointer_declarator "*" *)) , (parameter_declaration "_unsigned_int" type_identifier) (ERROR ">" >) , (parameter_declaration "_std::pair<const_std::pair<gold::Relobj*" type_identifier (ERROR "::pair<const_std::pair<gold::Relobj" : : identifier < identifier : : identifier < identifier : : identifier) (abstract_pointer_declarator "*" *)) , (parameter_declaration "_unsigned_int" type_identifier) (ERROR ">" >) , (parameter_declaration "_unsigned_int" type_identifier) (ERROR ">" >) , (parameter_declaration "_std::_Select1st<std::pair<const_std::pair<gold::Relobj*" type_identifier (ERROR "::_Select1st<std::pair<const_std::pair<gold::Relobj" : : identifier < identifier : : identifier < identifier : : identifier < identifier : : identifier) (abstract_pointer_declarator "*" *)) , (parameter_declaration "_unsigned_int" type_identifier) (ERROR ">" >) , (parameter_declaration "_unsigned_int>_" type_identifier (ERROR ">" >) identifier) (ERROR ">" >) , (parameter_declaration "_std::less<std::pair<gold::Relobj*" type_identifier (ERROR "::less<std::pair<gold::Relobj" : : identifier < identifier : : identifier < identifier : : identifier) (abstract_pointer_declarator "*" *)) , (parameter_declaration "_unsigned_int>_" type_identifier (ERROR ">" >) identifier) (ERROR ">" >) , (parameter_declaration "_std::allocator<std::pair<const_std::pair<gold::Relobj*" type_identifier (ERROR "::allocator<std::pair<const_std::pair<gold::Relobj" : : identifier < identifier : : identifier < identifier : : identifier < identifier : : identifier) (abstract_pointer_declarator "*" *)) , (parameter_declaration "_unsigned_int" type_identifier) (ERROR ">" >) , (parameter_declaration "_unsigned_int>_>_>\n           *this" type_identifier (ERROR ">_>_>" > identifier > identifier >) (pointer_declarator "*this" * identifier)) , (parameter_declaration "const_iterator __position" type_identifier identifier) , (parameter_declaration "key_type *__k" type_identifier (pointer_declarator "*__k" * identifier)) ))) (compound_statement "{\n  Relobj *pRVar1;\n  Relobj *pRVar2;\n  undefined1 auVar3 [16];\n  uint uVar4;\n  _Base_ptr p_Var5;\n  const_iterator cVar6;\n  uint uVar7;\n  pair<std::_Rb_tree_node_base*,_std::_Rb_tree_node_base*> pVar8;\n  \n  if ((_Rb_tree_header *)__position._M_node == &(this->_M_impl).super__Rb_tree_header) {\n    if ((this->_M_impl).super__Rb_tree_header._M_node_count != 0) {\n      __position._M_node = (this->_M_impl).super__Rb_tree_header._M_header._M_right;\n      if ((__k->first <= *(Relobj **)(__position._M_node + 1)) &&\n         ((__k->first != *(Relobj **)(__position._M_node + 1) ||\n          (__k->second <= *(uint *)&__position._M_node[1]._M_parent)))) goto LAB_0023dd58;\n      goto LAB_0023dd3e;\n    }\n    goto LAB_0023dd58;\n  }\n  pRVar1 = __k->first;\n  pRVar2 = *(Relobj **)(__position._M_node + 1);\n  cVar6._M_node = __position._M_node;\n  if (pRVar1 < pRVar2) {\nLAB_0023dc79:\n    if ((this->_M_impl).super__Rb_tree_header._M_header._M_left != __position._M_node) {\n      p_Var5 = (_Base_ptr)_Rb_tree_decrement(__position._M_node);\n      if ((pRVar1 <= *(Relobj **)(p_Var5 + 1)) &&\n         ((pRVar1 != *(Relobj **)(p_Var5 + 1) || (__k->second <= *(uint *)&p_Var5[1]._M_parent)))) {\nLAB_0023dd58:\n        pVar8 = _M_get_insert_unique_pos(this,__k);\n        return pVar8;\n      }\n      if (p_Var5->_M_right == (_Base_ptr)0x0) {\n        cVar6._M_node = (_Base_ptr)0x0;\n        __position._M_node = p_Var5;\n      }\n    }\n  }\n  else {\n    if (pRVar2 == pRVar1) {\n      uVar4 = __k->second;\n      uVar7 = *(uint *)&__position._M_node[1]._M_parent;\n      if (uVar4 < uVar7) goto LAB_0023dc79;\nLAB_0023dd7e:\n      if (uVar4 <= uVar7) {\n        __position._M_node = (_Base_ptr)0x0;\n        goto LAB_0023dcc5;\n      }\n    }\n    else if (pRVar1 <= pRVar2) {\n      uVar7 = *(uint *)&__position._M_node[1]._M_parent;\n      uVar4 = __k->second;\n      goto LAB_0023dd7e;\n    }\n    if ((this->_M_impl).super__Rb_tree_header._M_header._M_right == __position._M_node) {\nLAB_0023dd3e:\n      auVar3._8_8_ = 0;\n      auVar3._0_8_ = __position._M_node;\n      return (pair<std::_Rb_tree_node_base*,_std::_Rb_tree_node_base*>)(auVar3 << 0x40);\n    }\n    p_Var5 = (_Base_ptr)_Rb_tree_increment(__position._M_node);\n    if ((*(Relobj **)(p_Var5 + 1) <= pRVar1) &&\n       ((pRVar1 != *(Relobj **)(p_Var5 + 1) || (*(uint *)&p_Var5[1]._M_parent <= __k->second))))\n    goto LAB_0023dd58;\n    cVar6._M_node = (_Base_ptr)0x0;\n    if ((__position._M_node)->_M_right != (_Base_ptr)0x0) {\n      cVar6._M_node = p_Var5;\n      __position._M_node = p_Var5;\n    }\n  }\nLAB_0023dcc5:\n  pVar8.second = __position._M_node;\n  pVar8.first = cVar6._M_node;\n  return pVar8;\n}" { (declaration "Relobj *pRVar1;" type_identifier (pointer_declarator "*pRVar1" * identifier) ;) (declaration "Relobj *pRVar2;" type_identifier (pointer_declarator "*pRVar2" * identifier) ;) (declaration "undefined1 auVar3 [16];" type_identifier (array_declarator "auVar3 [16]" identifier [ number_literal ]) ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "_Base_ptr p_Var5;" type_identifier identifier ;) (declaration "const_iterator cVar6;" type_identifier identifier ;) (declaration "uint uVar7;" type_identifier identifier ;) (ERROR "pair<std::_Rb_tree_node_base*,_std::" (binary_expression "pair<std" identifier < identifier) : : (binary_expression "_Rb_tree_node_base*,_std" identifier * (ERROR "," ,) identifier) : :) (expression_statement "_Rb_tree_node_base*> pVar8;" (binary_expression "_Rb_tree_node_base*> pVar8" identifier * (ERROR ">" >) identifier) ;) (if_statement "if ((_Rb_tree_header *)__position._M_node == &(this->_M_impl).super__Rb_tree_header) {\n    if ((this->_M_impl).super__Rb_tree_header._M_node_count != 0) {\n      __position._M_node = (this->_M_impl).super__Rb_tree_header._M_header._M_right;\n      if ((__k->first <= *(Relobj **)(__position._M_node + 1)) &&\n         ((__k->first != *(Relobj **)(__position._M_node + 1) ||\n          (__k->second <= *(uint *)&__position._M_node[1]._M_parent)))) goto LAB_0023dd58;\n      goto LAB_0023dd3e;\n    }\n    goto LAB_0023dd58;\n  }" if (parenthesized_expression "((_Rb_tree_header *)__position._M_node == &(this->_M_impl).super__Rb_tree_header)" ( (binary_expression "(_Rb_tree_header *)__position._M_node == &(this->_M_impl).super__Rb_tree_header" (cast_expression "(_Rb_tree_header *)__position._M_node" ( (type_descriptor "_Rb_tree_header *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "__position._M_node" identifier . field_identifier)) == (pointer_expression "&(this->_M_impl).super__Rb_tree_header" & (field_expression "(this->_M_impl).super__Rb_tree_header" (parenthesized_expression "(this->_M_impl)" ( (field_expression "this->_M_impl" identifier -> field_identifier) )) . field_identifier))) )) (compound_statement "{\n    if ((this->_M_impl).super__Rb_tree_header._M_node_count != 0) {\n      __position._M_node = (this->_M_impl).super__Rb_tree_header._M_header._M_right;\n      if ((__k->first <= *(Relobj **)(__position._M_node + 1)) &&\n         ((__k->first != *(Relobj **)(__position._M_node + 1) ||\n          (__k->second <= *(uint *)&__position._M_node[1]._M_parent)))) goto LAB_0023dd58;\n      goto LAB_0023dd3e;\n    }\n    goto LAB_0023dd58;\n  }" { (if_statement "if ((this->_M_impl).super__Rb_tree_header._M_node_count != 0) {\n      __position._M_node = (this->_M_impl).super__Rb_tree_header._M_header._M_right;\n      if ((__k->first <= *(Relobj **)(__position._M_node + 1)) &&\n         ((__k->first != *(Relobj **)(__position._M_node + 1) ||\n          (__k->second <= *(uint *)&__position._M_node[1]._M_parent)))) goto LAB_0023dd58;\n      goto LAB_0023dd3e;\n    }" if (parenthesized_expression "((this->_M_impl).super__Rb_tree_header._M_node_count != 0)" ( (binary_expression "(this->_M_impl).super__Rb_tree_header._M_node_count != 0" (field_expression "(this->_M_impl).super__Rb_tree_header._M_node_count" (field_expression "(this->_M_impl).super__Rb_tree_header" (parenthesized_expression "(this->_M_impl)" ( (field_expression "this->_M_impl" identifier -> field_identifier) )) . field_identifier) . field_identifier) != number_literal) )) (compound_statement "{\n      __position._M_node = (this->_M_impl).super__Rb_tree_header._M_header._M_right;\n      if ((__k->first <= *(Relobj **)(__position._M_node + 1)) &&\n         ((__k->first != *(Relobj **)(__position._M_node + 1) ||\n          (__k->second <= *(uint *)&__position._M_node[1]._M_parent)))) goto LAB_0023dd58;\n      goto LAB_0023dd3e;\n    }" { (expression_statement "__position._M_node = (this->_M_impl).super__Rb_tree_header._M_header._M_right;" (assignment_expression "__position._M_node = (this->_M_impl).super__Rb_tree_header._M_header._M_right" (field_expression "__position._M_node" identifier . field_identifier) = (field_expression "(this->_M_impl).super__Rb_tree_header._M_header._M_right" (field_expression "(this->_M_impl).super__Rb_tree_header._M_header" (field_expression "(this->_M_impl).super__Rb_tree_header" (parenthesized_expression "(this->_M_impl)" ( (field_expression "this->_M_impl" identifier -> field_identifier) )) . field_identifier) . field_identifier) . field_identifier)) ;) (if_statement "if ((__k->first <= *(Relobj **)(__position._M_node + 1)) &&\n         ((__k->first != *(Relobj **)(__position._M_node + 1) ||\n          (__k->second <= *(uint *)&__position._M_node[1]._M_parent)))) goto LAB_0023dd58;" if (parenthesized_expression "((__k->first <= *(Relobj **)(__position._M_node + 1)) &&\n         ((__k->first != *(Relobj **)(__position._M_node + 1) ||\n          (__k->second <= *(uint *)&__position._M_node[1]._M_parent))))" ( (binary_expression "(__k->first <= *(Relobj **)(__position._M_node + 1)) &&\n         ((__k->first != *(Relobj **)(__position._M_node + 1) ||\n          (__k->second <= *(uint *)&__position._M_node[1]._M_parent)))" (parenthesized_expression "(__k->first <= *(Relobj **)(__position._M_node + 1))" ( (binary_expression "__k->first <= *(Relobj **)(__position._M_node + 1)" (field_expression "__k->first" identifier -> field_identifier) <= (pointer_expression "*(Relobj **)(__position._M_node + 1)" * (cast_expression "(Relobj **)(__position._M_node + 1)" ( (type_descriptor "Relobj **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(__position._M_node + 1)" ( (binary_expression "__position._M_node + 1" (field_expression "__position._M_node" identifier . field_identifier) + number_literal) ))))) )) && (parenthesized_expression "((__k->first != *(Relobj **)(__position._M_node + 1) ||\n          (__k->second <= *(uint *)&__position._M_node[1]._M_parent)))" ( (parenthesized_expression "(__k->first != *(Relobj **)(__position._M_node + 1) ||\n          (__k->second <= *(uint *)&__position._M_node[1]._M_parent))" ( (binary_expression "__k->first != *(Relobj **)(__position._M_node + 1) ||\n          (__k->second <= *(uint *)&__position._M_node[1]._M_parent)" (binary_expression "__k->first != *(Relobj **)(__position._M_node + 1)" (field_expression "__k->first" identifier -> field_identifier) != (pointer_expression "*(Relobj **)(__position._M_node + 1)" * (cast_expression "(Relobj **)(__position._M_node + 1)" ( (type_descriptor "Relobj **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(__position._M_node + 1)" ( (binary_expression "__position._M_node + 1" (field_expression "__position._M_node" identifier . field_identifier) + number_literal) ))))) || (parenthesized_expression "(__k->second <= *(uint *)&__position._M_node[1]._M_parent)" ( (binary_expression "__k->second <= *(uint *)&__position._M_node[1]._M_parent" (field_expression "__k->second" identifier -> field_identifier) <= (pointer_expression "*(uint *)&__position._M_node[1]._M_parent" * (cast_expression "(uint *)&__position._M_node[1]._M_parent" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&__position._M_node[1]._M_parent" & (field_expression "__position._M_node[1]._M_parent" (subscript_expression "__position._M_node[1]" (field_expression "__position._M_node" identifier . field_identifier) [ number_literal ]) . field_identifier))))) ))) )) ))) )) (goto_statement "goto LAB_0023dd58;" goto statement_identifier ;)) (goto_statement "goto LAB_0023dd3e;" goto statement_identifier ;) })) (goto_statement "goto LAB_0023dd58;" goto statement_identifier ;) })) (expression_statement "pRVar1 = __k->first;" (assignment_expression "pRVar1 = __k->first" identifier = (field_expression "__k->first" identifier -> field_identifier)) ;) (expression_statement "pRVar2 = *(Relobj **)(__position._M_node + 1);" (assignment_expression "pRVar2 = *(Relobj **)(__position._M_node + 1)" identifier = (pointer_expression "*(Relobj **)(__position._M_node + 1)" * (cast_expression "(Relobj **)(__position._M_node + 1)" ( (type_descriptor "Relobj **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(__position._M_node + 1)" ( (binary_expression "__position._M_node + 1" (field_expression "__position._M_node" identifier . field_identifier) + number_literal) ))))) ;) (expression_statement "cVar6._M_node = __position._M_node;" (assignment_expression "cVar6._M_node = __position._M_node" (field_expression "cVar6._M_node" identifier . field_identifier) = (field_expression "__position._M_node" identifier . field_identifier)) ;) (if_statement "if (pRVar1 < pRVar2) {\nLAB_0023dc79:\n    if ((this->_M_impl).super__Rb_tree_header._M_header._M_left != __position._M_node) {\n      p_Var5 = (_Base_ptr)_Rb_tree_decrement(__position._M_node);\n      if ((pRVar1 <= *(Relobj **)(p_Var5 + 1)) &&\n         ((pRVar1 != *(Relobj **)(p_Var5 + 1) || (__k->second <= *(uint *)&p_Var5[1]._M_parent)))) {\nLAB_0023dd58:\n        pVar8 = _M_get_insert_unique_pos(this,__k);\n        return pVar8;\n      }\n      if (p_Var5->_M_right == (_Base_ptr)0x0) {\n        cVar6._M_node = (_Base_ptr)0x0;\n        __position._M_node = p_Var5;\n      }\n    }\n  }\n  else {\n    if (pRVar2 == pRVar1) {\n      uVar4 = __k->second;\n      uVar7 = *(uint *)&__position._M_node[1]._M_parent;\n      if (uVar4 < uVar7) goto LAB_0023dc79;\nLAB_0023dd7e:\n      if (uVar4 <= uVar7) {\n        __position._M_node = (_Base_ptr)0x0;\n        goto LAB_0023dcc5;\n      }\n    }\n    else if (pRVar1 <= pRVar2) {\n      uVar7 = *(uint *)&__position._M_node[1]._M_parent;\n      uVar4 = __k->second;\n      goto LAB_0023dd7e;\n    }\n    if ((this->_M_impl).super__Rb_tree_header._M_header._M_right == __position._M_node) {\nLAB_0023dd3e:\n      auVar3._8_8_ = 0;\n      auVar3._0_8_ = __position._M_node;\n      return (pair<std::_Rb_tree_node_base*,_std::_Rb_tree_node_base*>)(auVar3 << 0x40);\n    }\n    p_Var5 = (_Base_ptr)_Rb_tree_increment(__position._M_node);\n    if ((*(Relobj **)(p_Var5 + 1) <= pRVar1) &&\n       ((pRVar1 != *(Relobj **)(p_Var5 + 1) || (*(uint *)&p_Var5[1]._M_parent <= __k->second))))\n    goto LAB_0023dd58;\n    cVar6._M_node = (_Base_ptr)0x0;\n    if ((__position._M_node)->_M_right != (_Base_ptr)0x0) {\n      cVar6._M_node = p_Var5;\n      __position._M_node = p_Var5;\n    }\n  }" if (parenthesized_expression "(pRVar1 < pRVar2)" ( (binary_expression "pRVar1 < pRVar2" identifier < identifier) )) (compound_statement "{\nLAB_0023dc79:\n    if ((this->_M_impl).super__Rb_tree_header._M_header._M_left != __position._M_node) {\n      p_Var5 = (_Base_ptr)_Rb_tree_decrement(__position._M_node);\n      if ((pRVar1 <= *(Relobj **)(p_Var5 + 1)) &&\n         ((pRVar1 != *(Relobj **)(p_Var5 + 1) || (__k->second <= *(uint *)&p_Var5[1]._M_parent)))) {\nLAB_0023dd58:\n        pVar8 = _M_get_insert_unique_pos(this,__k);\n        return pVar8;\n      }\n      if (p_Var5->_M_right == (_Base_ptr)0x0) {\n        cVar6._M_node = (_Base_ptr)0x0;\n        __position._M_node = p_Var5;\n      }\n    }\n  }" { (labeled_statement "LAB_0023dc79:\n    if ((this->_M_impl).super__Rb_tree_header._M_header._M_left != __position._M_node) {\n      p_Var5 = (_Base_ptr)_Rb_tree_decrement(__position._M_node);\n      if ((pRVar1 <= *(Relobj **)(p_Var5 + 1)) &&\n         ((pRVar1 != *(Relobj **)(p_Var5 + 1) || (__k->second <= *(uint *)&p_Var5[1]._M_parent)))) {\nLAB_0023dd58:\n        pVar8 = _M_get_insert_unique_pos(this,__k);\n        return pVar8;\n      }\n      if (p_Var5->_M_right == (_Base_ptr)0x0) {\n        cVar6._M_node = (_Base_ptr)0x0;\n        __position._M_node = p_Var5;\n      }\n    }" statement_identifier : (if_statement "if ((this->_M_impl).super__Rb_tree_header._M_header._M_left != __position._M_node) {\n      p_Var5 = (_Base_ptr)_Rb_tree_decrement(__position._M_node);\n      if ((pRVar1 <= *(Relobj **)(p_Var5 + 1)) &&\n         ((pRVar1 != *(Relobj **)(p_Var5 + 1) || (__k->second <= *(uint *)&p_Var5[1]._M_parent)))) {\nLAB_0023dd58:\n        pVar8 = _M_get_insert_unique_pos(this,__k);\n        return pVar8;\n      }\n      if (p_Var5->_M_right == (_Base_ptr)0x0) {\n        cVar6._M_node = (_Base_ptr)0x0;\n        __position._M_node = p_Var5;\n      }\n    }" if (parenthesized_expression "((this->_M_impl).super__Rb_tree_header._M_header._M_left != __position._M_node)" ( (binary_expression "(this->_M_impl).super__Rb_tree_header._M_header._M_left != __position._M_node" (field_expression "(this->_M_impl).super__Rb_tree_header._M_header._M_left" (field_expression "(this->_M_impl).super__Rb_tree_header._M_header" (field_expression "(this->_M_impl).super__Rb_tree_header" (parenthesized_expression "(this->_M_impl)" ( (field_expression "this->_M_impl" identifier -> field_identifier) )) . field_identifier) . field_identifier) . field_identifier) != (field_expression "__position._M_node" identifier . field_identifier)) )) (compound_statement "{\n      p_Var5 = (_Base_ptr)_Rb_tree_decrement(__position._M_node);\n      if ((pRVar1 <= *(Relobj **)(p_Var5 + 1)) &&\n         ((pRVar1 != *(Relobj **)(p_Var5 + 1) || (__k->second <= *(uint *)&p_Var5[1]._M_parent)))) {\nLAB_0023dd58:\n        pVar8 = _M_get_insert_unique_pos(this,__k);\n        return pVar8;\n      }\n      if (p_Var5->_M_right == (_Base_ptr)0x0) {\n        cVar6._M_node = (_Base_ptr)0x0;\n        __position._M_node = p_Var5;\n      }\n    }" { (expression_statement "p_Var5 = (_Base_ptr)_Rb_tree_decrement(__position._M_node);" (assignment_expression "p_Var5 = (_Base_ptr)_Rb_tree_decrement(__position._M_node)" identifier = (cast_expression "(_Base_ptr)_Rb_tree_decrement(__position._M_node)" ( (type_descriptor "_Base_ptr" type_identifier) ) (call_expression "_Rb_tree_decrement(__position._M_node)" identifier (argument_list "(__position._M_node)" ( (field_expression "__position._M_node" identifier . field_identifier) ))))) ;) (if_statement "if ((pRVar1 <= *(Relobj **)(p_Var5 + 1)) &&\n         ((pRVar1 != *(Relobj **)(p_Var5 + 1) || (__k->second <= *(uint *)&p_Var5[1]._M_parent)))) {\nLAB_0023dd58:\n        pVar8 = _M_get_insert_unique_pos(this,__k);\n        return pVar8;\n      }" if (parenthesized_expression "((pRVar1 <= *(Relobj **)(p_Var5 + 1)) &&\n         ((pRVar1 != *(Relobj **)(p_Var5 + 1) || (__k->second <= *(uint *)&p_Var5[1]._M_parent))))" ( (binary_expression "(pRVar1 <= *(Relobj **)(p_Var5 + 1)) &&\n         ((pRVar1 != *(Relobj **)(p_Var5 + 1) || (__k->second <= *(uint *)&p_Var5[1]._M_parent)))" (parenthesized_expression "(pRVar1 <= *(Relobj **)(p_Var5 + 1))" ( (binary_expression "pRVar1 <= *(Relobj **)(p_Var5 + 1)" identifier <= (pointer_expression "*(Relobj **)(p_Var5 + 1)" * (cast_expression "(Relobj **)(p_Var5 + 1)" ( (type_descriptor "Relobj **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(p_Var5 + 1)" ( (binary_expression "p_Var5 + 1" identifier + number_literal) ))))) )) && (parenthesized_expression "((pRVar1 != *(Relobj **)(p_Var5 + 1) || (__k->second <= *(uint *)&p_Var5[1]._M_parent)))" ( (parenthesized_expression "(pRVar1 != *(Relobj **)(p_Var5 + 1) || (__k->second <= *(uint *)&p_Var5[1]._M_parent))" ( (binary_expression "pRVar1 != *(Relobj **)(p_Var5 + 1) || (__k->second <= *(uint *)&p_Var5[1]._M_parent)" (binary_expression "pRVar1 != *(Relobj **)(p_Var5 + 1)" identifier != (pointer_expression "*(Relobj **)(p_Var5 + 1)" * (cast_expression "(Relobj **)(p_Var5 + 1)" ( (type_descriptor "Relobj **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(p_Var5 + 1)" ( (binary_expression "p_Var5 + 1" identifier + number_literal) ))))) || (parenthesized_expression "(__k->second <= *(uint *)&p_Var5[1]._M_parent)" ( (binary_expression "__k->second <= *(uint *)&p_Var5[1]._M_parent" (field_expression "__k->second" identifier -> field_identifier) <= (pointer_expression "*(uint *)&p_Var5[1]._M_parent" * (cast_expression "(uint *)&p_Var5[1]._M_parent" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&p_Var5[1]._M_parent" & (field_expression "p_Var5[1]._M_parent" (subscript_expression "p_Var5[1]" identifier [ number_literal ]) . field_identifier))))) ))) )) ))) )) (compound_statement "{\nLAB_0023dd58:\n        pVar8 = _M_get_insert_unique_pos(this,__k);\n        return pVar8;\n      }" { (labeled_statement "LAB_0023dd58:\n        pVar8 = _M_get_insert_unique_pos(this,__k);" statement_identifier : (expression_statement "pVar8 = _M_get_insert_unique_pos(this,__k);" (assignment_expression "pVar8 = _M_get_insert_unique_pos(this,__k)" identifier = (call_expression "_M_get_insert_unique_pos(this,__k)" identifier (argument_list "(this,__k)" ( identifier , identifier )))) ;)) (return_statement "return pVar8;" return identifier ;) })) (if_statement "if (p_Var5->_M_right == (_Base_ptr)0x0) {\n        cVar6._M_node = (_Base_ptr)0x0;\n        __position._M_node = p_Var5;\n      }" if (parenthesized_expression "(p_Var5->_M_right == (_Base_ptr)0x0)" ( (binary_expression "p_Var5->_M_right == (_Base_ptr)0x0" (field_expression "p_Var5->_M_right" identifier -> field_identifier) == (cast_expression "(_Base_ptr)0x0" ( (type_descriptor "_Base_ptr" type_identifier) ) number_literal)) )) (compound_statement "{\n        cVar6._M_node = (_Base_ptr)0x0;\n        __position._M_node = p_Var5;\n      }" { (expression_statement "cVar6._M_node = (_Base_ptr)0x0;" (assignment_expression "cVar6._M_node = (_Base_ptr)0x0" (field_expression "cVar6._M_node" identifier . field_identifier) = (cast_expression "(_Base_ptr)0x0" ( (type_descriptor "_Base_ptr" type_identifier) ) number_literal)) ;) (expression_statement "__position._M_node = p_Var5;" (assignment_expression "__position._M_node = p_Var5" (field_expression "__position._M_node" identifier . field_identifier) = identifier) ;) })) }))) }) (else_clause "else {\n    if (pRVar2 == pRVar1) {\n      uVar4 = __k->second;\n      uVar7 = *(uint *)&__position._M_node[1]._M_parent;\n      if (uVar4 < uVar7) goto LAB_0023dc79;\nLAB_0023dd7e:\n      if (uVar4 <= uVar7) {\n        __position._M_node = (_Base_ptr)0x0;\n        goto LAB_0023dcc5;\n      }\n    }\n    else if (pRVar1 <= pRVar2) {\n      uVar7 = *(uint *)&__position._M_node[1]._M_parent;\n      uVar4 = __k->second;\n      goto LAB_0023dd7e;\n    }\n    if ((this->_M_impl).super__Rb_tree_header._M_header._M_right == __position._M_node) {\nLAB_0023dd3e:\n      auVar3._8_8_ = 0;\n      auVar3._0_8_ = __position._M_node;\n      return (pair<std::_Rb_tree_node_base*,_std::_Rb_tree_node_base*>)(auVar3 << 0x40);\n    }\n    p_Var5 = (_Base_ptr)_Rb_tree_increment(__position._M_node);\n    if ((*(Relobj **)(p_Var5 + 1) <= pRVar1) &&\n       ((pRVar1 != *(Relobj **)(p_Var5 + 1) || (*(uint *)&p_Var5[1]._M_parent <= __k->second))))\n    goto LAB_0023dd58;\n    cVar6._M_node = (_Base_ptr)0x0;\n    if ((__position._M_node)->_M_right != (_Base_ptr)0x0) {\n      cVar6._M_node = p_Var5;\n      __position._M_node = p_Var5;\n    }\n  }" else (compound_statement "{\n    if (pRVar2 == pRVar1) {\n      uVar4 = __k->second;\n      uVar7 = *(uint *)&__position._M_node[1]._M_parent;\n      if (uVar4 < uVar7) goto LAB_0023dc79;\nLAB_0023dd7e:\n      if (uVar4 <= uVar7) {\n        __position._M_node = (_Base_ptr)0x0;\n        goto LAB_0023dcc5;\n      }\n    }\n    else if (pRVar1 <= pRVar2) {\n      uVar7 = *(uint *)&__position._M_node[1]._M_parent;\n      uVar4 = __k->second;\n      goto LAB_0023dd7e;\n    }\n    if ((this->_M_impl).super__Rb_tree_header._M_header._M_right == __position._M_node) {\nLAB_0023dd3e:\n      auVar3._8_8_ = 0;\n      auVar3._0_8_ = __position._M_node;\n      return (pair<std::_Rb_tree_node_base*,_std::_Rb_tree_node_base*>)(auVar3 << 0x40);\n    }\n    p_Var5 = (_Base_ptr)_Rb_tree_increment(__position._M_node);\n    if ((*(Relobj **)(p_Var5 + 1) <= pRVar1) &&\n       ((pRVar1 != *(Relobj **)(p_Var5 + 1) || (*(uint *)&p_Var5[1]._M_parent <= __k->second))))\n    goto LAB_0023dd58;\n    cVar6._M_node = (_Base_ptr)0x0;\n    if ((__position._M_node)->_M_right != (_Base_ptr)0x0) {\n      cVar6._M_node = p_Var5;\n      __position._M_node = p_Var5;\n    }\n  }" { (if_statement "if (pRVar2 == pRVar1) {\n      uVar4 = __k->second;\n      uVar7 = *(uint *)&__position._M_node[1]._M_parent;\n      if (uVar4 < uVar7) goto LAB_0023dc79;\nLAB_0023dd7e:\n      if (uVar4 <= uVar7) {\n        __position._M_node = (_Base_ptr)0x0;\n        goto LAB_0023dcc5;\n      }\n    }\n    else if (pRVar1 <= pRVar2) {\n      uVar7 = *(uint *)&__position._M_node[1]._M_parent;\n      uVar4 = __k->second;\n      goto LAB_0023dd7e;\n    }" if (parenthesized_expression "(pRVar2 == pRVar1)" ( (binary_expression "pRVar2 == pRVar1" identifier == identifier) )) (compound_statement "{\n      uVar4 = __k->second;\n      uVar7 = *(uint *)&__position._M_node[1]._M_parent;\n      if (uVar4 < uVar7) goto LAB_0023dc79;\nLAB_0023dd7e:\n      if (uVar4 <= uVar7) {\n        __position._M_node = (_Base_ptr)0x0;\n        goto LAB_0023dcc5;\n      }\n    }" { (expression_statement "uVar4 = __k->second;" (assignment_expression "uVar4 = __k->second" identifier = (field_expression "__k->second" identifier -> field_identifier)) ;) (expression_statement "uVar7 = *(uint *)&__position._M_node[1]._M_parent;" (assignment_expression "uVar7 = *(uint *)&__position._M_node[1]._M_parent" identifier = (pointer_expression "*(uint *)&__position._M_node[1]._M_parent" * (cast_expression "(uint *)&__position._M_node[1]._M_parent" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&__position._M_node[1]._M_parent" & (field_expression "__position._M_node[1]._M_parent" (subscript_expression "__position._M_node[1]" (field_expression "__position._M_node" identifier . field_identifier) [ number_literal ]) . field_identifier))))) ;) (if_statement "if (uVar4 < uVar7) goto LAB_0023dc79;" if (parenthesized_expression "(uVar4 < uVar7)" ( (binary_expression "uVar4 < uVar7" identifier < identifier) )) (goto_statement "goto LAB_0023dc79;" goto statement_identifier ;)) (labeled_statement "LAB_0023dd7e:\n      if (uVar4 <= uVar7) {\n        __position._M_node = (_Base_ptr)0x0;\n        goto LAB_0023dcc5;\n      }" statement_identifier : (if_statement "if (uVar4 <= uVar7) {\n        __position._M_node = (_Base_ptr)0x0;\n        goto LAB_0023dcc5;\n      }" if (parenthesized_expression "(uVar4 <= uVar7)" ( (binary_expression "uVar4 <= uVar7" identifier <= identifier) )) (compound_statement "{\n        __position._M_node = (_Base_ptr)0x0;\n        goto LAB_0023dcc5;\n      }" { (expression_statement "__position._M_node = (_Base_ptr)0x0;" (assignment_expression "__position._M_node = (_Base_ptr)0x0" (field_expression "__position._M_node" identifier . field_identifier) = (cast_expression "(_Base_ptr)0x0" ( (type_descriptor "_Base_ptr" type_identifier) ) number_literal)) ;) (goto_statement "goto LAB_0023dcc5;" goto statement_identifier ;) }))) }) (else_clause "else if (pRVar1 <= pRVar2) {\n      uVar7 = *(uint *)&__position._M_node[1]._M_parent;\n      uVar4 = __k->second;\n      goto LAB_0023dd7e;\n    }" else (if_statement "if (pRVar1 <= pRVar2) {\n      uVar7 = *(uint *)&__position._M_node[1]._M_parent;\n      uVar4 = __k->second;\n      goto LAB_0023dd7e;\n    }" if (parenthesized_expression "(pRVar1 <= pRVar2)" ( (binary_expression "pRVar1 <= pRVar2" identifier <= identifier) )) (compound_statement "{\n      uVar7 = *(uint *)&__position._M_node[1]._M_parent;\n      uVar4 = __k->second;\n      goto LAB_0023dd7e;\n    }" { (expression_statement "uVar7 = *(uint *)&__position._M_node[1]._M_parent;" (assignment_expression "uVar7 = *(uint *)&__position._M_node[1]._M_parent" identifier = (pointer_expression "*(uint *)&__position._M_node[1]._M_parent" * (cast_expression "(uint *)&__position._M_node[1]._M_parent" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&__position._M_node[1]._M_parent" & (field_expression "__position._M_node[1]._M_parent" (subscript_expression "__position._M_node[1]" (field_expression "__position._M_node" identifier . field_identifier) [ number_literal ]) . field_identifier))))) ;) (expression_statement "uVar4 = __k->second;" (assignment_expression "uVar4 = __k->second" identifier = (field_expression "__k->second" identifier -> field_identifier)) ;) (goto_statement "goto LAB_0023dd7e;" goto statement_identifier ;) })))) (if_statement "if ((this->_M_impl).super__Rb_tree_header._M_header._M_right == __position._M_node) {\nLAB_0023dd3e:\n      auVar3._8_8_ = 0;\n      auVar3._0_8_ = __position._M_node;\n      return (pair<std::_Rb_tree_node_base*,_std::_Rb_tree_node_base*>)(auVar3 << 0x40);\n    }" if (parenthesized_expression "((this->_M_impl).super__Rb_tree_header._M_header._M_right == __position._M_node)" ( (binary_expression "(this->_M_impl).super__Rb_tree_header._M_header._M_right == __position._M_node" (field_expression "(this->_M_impl).super__Rb_tree_header._M_header._M_right" (field_expression "(this->_M_impl).super__Rb_tree_header._M_header" (field_expression "(this->_M_impl).super__Rb_tree_header" (parenthesized_expression "(this->_M_impl)" ( (field_expression "this->_M_impl" identifier -> field_identifier) )) . field_identifier) . field_identifier) . field_identifier) == (field_expression "__position._M_node" identifier . field_identifier)) )) (compound_statement "{\nLAB_0023dd3e:\n      auVar3._8_8_ = 0;\n      auVar3._0_8_ = __position._M_node;\n      return (pair<std::_Rb_tree_node_base*,_std::_Rb_tree_node_base*>)(auVar3 << 0x40);\n    }" { (labeled_statement "LAB_0023dd3e:\n      auVar3._8_8_ = 0;" statement_identifier : (expression_statement "auVar3._8_8_ = 0;" (assignment_expression "auVar3._8_8_ = 0" (field_expression "auVar3._8_8_" identifier . field_identifier) = number_literal) ;)) (expression_statement "auVar3._0_8_ = __position._M_node;" (assignment_expression "auVar3._0_8_ = __position._M_node" (field_expression "auVar3._0_8_" identifier . field_identifier) = (field_expression "__position._M_node" identifier . field_identifier)) ;) (return_statement "return (pair<std::_Rb_tree_node_base*,_std::_Rb_tree_node_base*>)(auVar3 << 0x40);" return (call_expression "(pair<std::_Rb_tree_node_base*,_std::_Rb_tree_node_base*>)(auVar3 << 0x40)" (parenthesized_expression "(pair<std::_Rb_tree_node_base*,_std::_Rb_tree_node_base*>)" ( (ERROR "pair<std::_Rb_tree_node_base*,_std::" (binary_expression "pair<std" identifier < identifier) : : (type_descriptor "_Rb_tree_node_base*" type_identifier (abstract_pointer_declarator "*" *)) , identifier : :) identifier (ERROR "*>" * >) )) (argument_list "(auVar3 << 0x40)" ( (binary_expression "auVar3 << 0x40" identifier << number_literal) ))) ;) })) (expression_statement "p_Var5 = (_Base_ptr)_Rb_tree_increment(__position._M_node);" (assignment_expression "p_Var5 = (_Base_ptr)_Rb_tree_increment(__position._M_node)" identifier = (cast_expression "(_Base_ptr)_Rb_tree_increment(__position._M_node)" ( (type_descriptor "_Base_ptr" type_identifier) ) (call_expression "_Rb_tree_increment(__position._M_node)" identifier (argument_list "(__position._M_node)" ( (field_expression "__position._M_node" identifier . field_identifier) ))))) ;) (if_statement "if ((*(Relobj **)(p_Var5 + 1) <= pRVar1) &&\n       ((pRVar1 != *(Relobj **)(p_Var5 + 1) || (*(uint *)&p_Var5[1]._M_parent <= __k->second))))\n    goto LAB_0023dd58;" if (parenthesized_expression "((*(Relobj **)(p_Var5 + 1) <= pRVar1) &&\n       ((pRVar1 != *(Relobj **)(p_Var5 + 1) || (*(uint *)&p_Var5[1]._M_parent <= __k->second))))" ( (binary_expression "(*(Relobj **)(p_Var5 + 1) <= pRVar1) &&\n       ((pRVar1 != *(Relobj **)(p_Var5 + 1) || (*(uint *)&p_Var5[1]._M_parent <= __k->second)))" (parenthesized_expression "(*(Relobj **)(p_Var5 + 1) <= pRVar1)" ( (binary_expression "*(Relobj **)(p_Var5 + 1) <= pRVar1" (pointer_expression "*(Relobj **)(p_Var5 + 1)" * (cast_expression "(Relobj **)(p_Var5 + 1)" ( (type_descriptor "Relobj **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(p_Var5 + 1)" ( (binary_expression "p_Var5 + 1" identifier + number_literal) )))) <= identifier) )) && (parenthesized_expression "((pRVar1 != *(Relobj **)(p_Var5 + 1) || (*(uint *)&p_Var5[1]._M_parent <= __k->second)))" ( (parenthesized_expression "(pRVar1 != *(Relobj **)(p_Var5 + 1) || (*(uint *)&p_Var5[1]._M_parent <= __k->second))" ( (binary_expression "pRVar1 != *(Relobj **)(p_Var5 + 1) || (*(uint *)&p_Var5[1]._M_parent <= __k->second)" (binary_expression "pRVar1 != *(Relobj **)(p_Var5 + 1)" identifier != (pointer_expression "*(Relobj **)(p_Var5 + 1)" * (cast_expression "(Relobj **)(p_Var5 + 1)" ( (type_descriptor "Relobj **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(p_Var5 + 1)" ( (binary_expression "p_Var5 + 1" identifier + number_literal) ))))) || (parenthesized_expression "(*(uint *)&p_Var5[1]._M_parent <= __k->second)" ( (binary_expression "*(uint *)&p_Var5[1]._M_parent <= __k->second" (pointer_expression "*(uint *)&p_Var5[1]._M_parent" * (cast_expression "(uint *)&p_Var5[1]._M_parent" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&p_Var5[1]._M_parent" & (field_expression "p_Var5[1]._M_parent" (subscript_expression "p_Var5[1]" identifier [ number_literal ]) . field_identifier)))) <= (field_expression "__k->second" identifier -> field_identifier)) ))) )) ))) )) (goto_statement "goto LAB_0023dd58;" goto statement_identifier ;)) (expression_statement "cVar6._M_node = (_Base_ptr)0x0;" (assignment_expression "cVar6._M_node = (_Base_ptr)0x0" (field_expression "cVar6._M_node" identifier . field_identifier) = (cast_expression "(_Base_ptr)0x0" ( (type_descriptor "_Base_ptr" type_identifier) ) number_literal)) ;) (if_statement "if ((__position._M_node)->_M_right != (_Base_ptr)0x0) {\n      cVar6._M_node = p_Var5;\n      __position._M_node = p_Var5;\n    }" if (parenthesized_expression "((__position._M_node)->_M_right != (_Base_ptr)0x0)" ( (binary_expression "(__position._M_node)->_M_right != (_Base_ptr)0x0" (field_expression "(__position._M_node)->_M_right" (parenthesized_expression "(__position._M_node)" ( (field_expression "__position._M_node" identifier . field_identifier) )) -> field_identifier) != (cast_expression "(_Base_ptr)0x0" ( (type_descriptor "_Base_ptr" type_identifier) ) number_literal)) )) (compound_statement "{\n      cVar6._M_node = p_Var5;\n      __position._M_node = p_Var5;\n    }" { (expression_statement "cVar6._M_node = p_Var5;" (assignment_expression "cVar6._M_node = p_Var5" (field_expression "cVar6._M_node" identifier . field_identifier) = identifier) ;) (expression_statement "__position._M_node = p_Var5;" (assignment_expression "__position._M_node = p_Var5" (field_expression "__position._M_node" identifier . field_identifier) = identifier) ;) })) }))) (labeled_statement "LAB_0023dcc5:\n  pVar8.second = __position._M_node;" statement_identifier : (expression_statement "pVar8.second = __position._M_node;" (assignment_expression "pVar8.second = __position._M_node" (field_expression "pVar8.second" identifier . field_identifier) = (field_expression "__position._M_node" identifier . field_identifier)) ;)) (expression_statement "pVar8.first = cVar6._M_node;" (assignment_expression "pVar8.first = cVar6._M_node" (field_expression "pVar8.first" identifier . field_identifier) = (field_expression "cVar6._M_node" identifier . field_identifier)) ;) (return_statement "return pVar8;" return identifier ;) })))
(translation_unit "undefined1  [16] FUN_0023dc50(long param_1,ulong param_2,ulong *param_3)\n\n{\n  uint uVar1;\n  ulong uVar2;\n  uint uVar3;\n  ulong uVar4;\n  ulong uVar5;\n  undefined1 auVar6 [16];\n  undefined1 auVar7 [16];\n  \n  if (param_2 == param_1 + 8U) {\n    if (*(long *)(param_1 + 0x28) != 0) {\n      param_2 = *(ulong *)(param_1 + 0x20);\n      if ((*param_3 <= *(ulong *)(param_2 + 0x20)) &&\n         ((*param_3 != *(ulong *)(param_2 + 0x20) || ((uint)param_3[1] <= *(uint *)(param_2 + 0x28))\n          ))) goto LAB_0023dd58;\n      goto LAB_0023dd3e;\n    }\n    goto LAB_0023dd58;\n  }\n  uVar2 = *param_3;\n  uVar4 = *(ulong *)(param_2 + 0x20);\n  uVar5 = param_2;\n  if (uVar2 < uVar4) {\nLAB_0023dc79:\n    if (*(ulong *)(param_1 + 0x18) != param_2) {\n      uVar4 = thunk_FUN_002dbfd0(param_2,param_2,param_2);\n      if ((uVar2 <= *(ulong *)(uVar4 + 0x20)) &&\n         ((uVar2 != *(ulong *)(uVar4 + 0x20) || ((uint)param_3[1] <= *(uint *)(uVar4 + 0x28))))) {\nLAB_0023dd58:\n        auVar7 = FUN_0023db90(param_1,param_3);\n        return auVar7;\n      }\n      if (*(long *)(uVar4 + 0x18) == 0) {\n        uVar5 = 0;\n        param_2 = uVar4;\n      }\n    }\n  }\n  else {\n    if (uVar4 == uVar2) {\n      uVar3 = (uint)param_3[1];\n      uVar1 = *(uint *)(param_2 + 0x28);\n      if (uVar3 < uVar1) goto LAB_0023dc79;\nLAB_0023dd7e:\n      if (uVar3 <= uVar1) {\n        param_2 = 0;\n        goto LAB_0023dcc5;\n      }\n    }\n    else if (uVar2 <= uVar4) {\n      uVar1 = *(uint *)(param_2 + 0x28);\n      uVar3 = (uint)param_3[1];\n      goto LAB_0023dd7e;\n    }\n    if (*(ulong *)(param_1 + 0x20) == param_2) {\nLAB_0023dd3e:\n      auVar7._8_8_ = 0;\n      auVar7._0_8_ = param_2;\n      return auVar7 << 0x40;\n    }\n    uVar4 = FUN_002dc030(param_2);\n    if ((*(ulong *)(uVar4 + 0x20) <= uVar2) &&\n       ((uVar2 != *(ulong *)(uVar4 + 0x20) || (*(uint *)(uVar4 + 0x28) <= (uint)param_3[1]))))\n    goto LAB_0023dd58;\n    uVar5 = 0;\n    if (*(long *)(param_2 + 0x18) != 0) {\n      uVar5 = uVar4;\n      param_2 = uVar4;\n    }\n  }\nLAB_0023dcc5:\n  auVar6._8_8_ = param_2;\n  auVar6._0_8_ = uVar5;\n  return auVar6;\n}\n\n" (expression_statement "undefined1  [16]" (subscript_expression "undefined1  [16]" identifier [ number_literal ]) ;) (macro_type_specifier "FUN_0023dc50(long param_1,ulong param_2,ulong *param_3)" identifier ( (ERROR "long param_1,ulong param_2,ulong *" (type_descriptor "long param_1" (sized_type_specifier "long param_1" long type_identifier)) , identifier identifier , (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *))) (type_descriptor "param_3" type_identifier) )) ; (compound_statement "{\n  uint uVar1;\n  ulong uVar2;\n  uint uVar3;\n  ulong uVar4;\n  ulong uVar5;\n  undefined1 auVar6 [16];\n  undefined1 auVar7 [16];\n  \n  if (param_2 == param_1 + 8U) {\n    if (*(long *)(param_1 + 0x28) != 0) {\n      param_2 = *(ulong *)(param_1 + 0x20);\n      if ((*param_3 <= *(ulong *)(param_2 + 0x20)) &&\n         ((*param_3 != *(ulong *)(param_2 + 0x20) || ((uint)param_3[1] <= *(uint *)(param_2 + 0x28))\n          ))) goto LAB_0023dd58;\n      goto LAB_0023dd3e;\n    }\n    goto LAB_0023dd58;\n  }\n  uVar2 = *param_3;\n  uVar4 = *(ulong *)(param_2 + 0x20);\n  uVar5 = param_2;\n  if (uVar2 < uVar4) {\nLAB_0023dc79:\n    if (*(ulong *)(param_1 + 0x18) != param_2) {\n      uVar4 = thunk_FUN_002dbfd0(param_2,param_2,param_2);\n      if ((uVar2 <= *(ulong *)(uVar4 + 0x20)) &&\n         ((uVar2 != *(ulong *)(uVar4 + 0x20) || ((uint)param_3[1] <= *(uint *)(uVar4 + 0x28))))) {\nLAB_0023dd58:\n        auVar7 = FUN_0023db90(param_1,param_3);\n        return auVar7;\n      }\n      if (*(long *)(uVar4 + 0x18) == 0) {\n        uVar5 = 0;\n        param_2 = uVar4;\n      }\n    }\n  }\n  else {\n    if (uVar4 == uVar2) {\n      uVar3 = (uint)param_3[1];\n      uVar1 = *(uint *)(param_2 + 0x28);\n      if (uVar3 < uVar1) goto LAB_0023dc79;\nLAB_0023dd7e:\n      if (uVar3 <= uVar1) {\n        param_2 = 0;\n        goto LAB_0023dcc5;\n      }\n    }\n    else if (uVar2 <= uVar4) {\n      uVar1 = *(uint *)(param_2 + 0x28);\n      uVar3 = (uint)param_3[1];\n      goto LAB_0023dd7e;\n    }\n    if (*(ulong *)(param_1 + 0x20) == param_2) {\nLAB_0023dd3e:\n      auVar7._8_8_ = 0;\n      auVar7._0_8_ = param_2;\n      return auVar7 << 0x40;\n    }\n    uVar4 = FUN_002dc030(param_2);\n    if ((*(ulong *)(uVar4 + 0x20) <= uVar2) &&\n       ((uVar2 != *(ulong *)(uVar4 + 0x20) || (*(uint *)(uVar4 + 0x28) <= (uint)param_3[1]))))\n    goto LAB_0023dd58;\n    uVar5 = 0;\n    if (*(long *)(param_2 + 0x18) != 0) {\n      uVar5 = uVar4;\n      param_2 = uVar4;\n    }\n  }\nLAB_0023dcc5:\n  auVar6._8_8_ = param_2;\n  auVar6._0_8_ = uVar5;\n  return auVar6;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "ulong uVar2;" type_identifier identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "ulong uVar4;" type_identifier identifier ;) (declaration "ulong uVar5;" type_identifier identifier ;) (declaration "undefined1 auVar6 [16];" type_identifier (array_declarator "auVar6 [16]" identifier [ number_literal ]) ;) (declaration "undefined1 auVar7 [16];" type_identifier (array_declarator "auVar7 [16]" identifier [ number_literal ]) ;) (if_statement "if (param_2 == param_1 + 8U) {\n    if (*(long *)(param_1 + 0x28) != 0) {\n      param_2 = *(ulong *)(param_1 + 0x20);\n      if ((*param_3 <= *(ulong *)(param_2 + 0x20)) &&\n         ((*param_3 != *(ulong *)(param_2 + 0x20) || ((uint)param_3[1] <= *(uint *)(param_2 + 0x28))\n          ))) goto LAB_0023dd58;\n      goto LAB_0023dd3e;\n    }\n    goto LAB_0023dd58;\n  }" if (parenthesized_expression "(param_2 == param_1 + 8U)" ( (binary_expression "param_2 == param_1 + 8U" identifier == (binary_expression "param_1 + 8U" identifier + number_literal)) )) (compound_statement "{\n    if (*(long *)(param_1 + 0x28) != 0) {\n      param_2 = *(ulong *)(param_1 + 0x20);\n      if ((*param_3 <= *(ulong *)(param_2 + 0x20)) &&\n         ((*param_3 != *(ulong *)(param_2 + 0x20) || ((uint)param_3[1] <= *(uint *)(param_2 + 0x28))\n          ))) goto LAB_0023dd58;\n      goto LAB_0023dd3e;\n    }\n    goto LAB_0023dd58;\n  }" { (if_statement "if (*(long *)(param_1 + 0x28) != 0) {\n      param_2 = *(ulong *)(param_1 + 0x20);\n      if ((*param_3 <= *(ulong *)(param_2 + 0x20)) &&\n         ((*param_3 != *(ulong *)(param_2 + 0x20) || ((uint)param_3[1] <= *(uint *)(param_2 + 0x28))\n          ))) goto LAB_0023dd58;\n      goto LAB_0023dd3e;\n    }" if (parenthesized_expression "(*(long *)(param_1 + 0x28) != 0)" ( (binary_expression "*(long *)(param_1 + 0x28) != 0" (pointer_expression "*(long *)(param_1 + 0x28)" * (cast_expression "(long *)(param_1 + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n      param_2 = *(ulong *)(param_1 + 0x20);\n      if ((*param_3 <= *(ulong *)(param_2 + 0x20)) &&\n         ((*param_3 != *(ulong *)(param_2 + 0x20) || ((uint)param_3[1] <= *(uint *)(param_2 + 0x28))\n          ))) goto LAB_0023dd58;\n      goto LAB_0023dd3e;\n    }" { (expression_statement "param_2 = *(ulong *)(param_1 + 0x20);" (assignment_expression "param_2 = *(ulong *)(param_1 + 0x20)" identifier = (pointer_expression "*(ulong *)(param_1 + 0x20)" * (cast_expression "(ulong *)(param_1 + 0x20)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x20)" ( (binary_expression "param_1 + 0x20" identifier + number_literal) ))))) ;) (if_statement "if ((*param_3 <= *(ulong *)(param_2 + 0x20)) &&\n         ((*param_3 != *(ulong *)(param_2 + 0x20) || ((uint)param_3[1] <= *(uint *)(param_2 + 0x28))\n          ))) goto LAB_0023dd58;" if (parenthesized_expression "((*param_3 <= *(ulong *)(param_2 + 0x20)) &&\n         ((*param_3 != *(ulong *)(param_2 + 0x20) || ((uint)param_3[1] <= *(uint *)(param_2 + 0x28))\n          )))" ( (binary_expression "(*param_3 <= *(ulong *)(param_2 + 0x20)) &&\n         ((*param_3 != *(ulong *)(param_2 + 0x20) || ((uint)param_3[1] <= *(uint *)(param_2 + 0x28))\n          ))" (parenthesized_expression "(*param_3 <= *(ulong *)(param_2 + 0x20))" ( (binary_expression "*param_3 <= *(ulong *)(param_2 + 0x20)" (pointer_expression "*param_3" * identifier) <= (pointer_expression "*(ulong *)(param_2 + 0x20)" * (cast_expression "(ulong *)(param_2 + 0x20)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x20)" ( (binary_expression "param_2 + 0x20" identifier + number_literal) ))))) )) && (parenthesized_expression "((*param_3 != *(ulong *)(param_2 + 0x20) || ((uint)param_3[1] <= *(uint *)(param_2 + 0x28))\n          ))" ( (parenthesized_expression "(*param_3 != *(ulong *)(param_2 + 0x20) || ((uint)param_3[1] <= *(uint *)(param_2 + 0x28))\n          )" ( (binary_expression "*param_3 != *(ulong *)(param_2 + 0x20) || ((uint)param_3[1] <= *(uint *)(param_2 + 0x28))" (binary_expression "*param_3 != *(ulong *)(param_2 + 0x20)" (pointer_expression "*param_3" * identifier) != (pointer_expression "*(ulong *)(param_2 + 0x20)" * (cast_expression "(ulong *)(param_2 + 0x20)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x20)" ( (binary_expression "param_2 + 0x20" identifier + number_literal) ))))) || (parenthesized_expression "((uint)param_3[1] <= *(uint *)(param_2 + 0x28))" ( (binary_expression "(uint)param_3[1] <= *(uint *)(param_2 + 0x28)" (cast_expression "(uint)param_3[1]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_3[1]" identifier [ number_literal ])) <= (pointer_expression "*(uint *)(param_2 + 0x28)" * (cast_expression "(uint *)(param_2 + 0x28)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x28)" ( (binary_expression "param_2 + 0x28" identifier + number_literal) ))))) ))) )) ))) )) (goto_statement "goto LAB_0023dd58;" goto statement_identifier ;)) (goto_statement "goto LAB_0023dd3e;" goto statement_identifier ;) })) (goto_statement "goto LAB_0023dd58;" goto statement_identifier ;) })) (expression_statement "uVar2 = *param_3;" (assignment_expression "uVar2 = *param_3" identifier = (pointer_expression "*param_3" * identifier)) ;) (expression_statement "uVar4 = *(ulong *)(param_2 + 0x20);" (assignment_expression "uVar4 = *(ulong *)(param_2 + 0x20)" identifier = (pointer_expression "*(ulong *)(param_2 + 0x20)" * (cast_expression "(ulong *)(param_2 + 0x20)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x20)" ( (binary_expression "param_2 + 0x20" identifier + number_literal) ))))) ;) (expression_statement "uVar5 = param_2;" (assignment_expression "uVar5 = param_2" identifier = identifier) ;) (if_statement "if (uVar2 < uVar4) {\nLAB_0023dc79:\n    if (*(ulong *)(param_1 + 0x18) != param_2) {\n      uVar4 = thunk_FUN_002dbfd0(param_2,param_2,param_2);\n      if ((uVar2 <= *(ulong *)(uVar4 + 0x20)) &&\n         ((uVar2 != *(ulong *)(uVar4 + 0x20) || ((uint)param_3[1] <= *(uint *)(uVar4 + 0x28))))) {\nLAB_0023dd58:\n        auVar7 = FUN_0023db90(param_1,param_3);\n        return auVar7;\n      }\n      if (*(long *)(uVar4 + 0x18) == 0) {\n        uVar5 = 0;\n        param_2 = uVar4;\n      }\n    }\n  }\n  else {\n    if (uVar4 == uVar2) {\n      uVar3 = (uint)param_3[1];\n      uVar1 = *(uint *)(param_2 + 0x28);\n      if (uVar3 < uVar1) goto LAB_0023dc79;\nLAB_0023dd7e:\n      if (uVar3 <= uVar1) {\n        param_2 = 0;\n        goto LAB_0023dcc5;\n      }\n    }\n    else if (uVar2 <= uVar4) {\n      uVar1 = *(uint *)(param_2 + 0x28);\n      uVar3 = (uint)param_3[1];\n      goto LAB_0023dd7e;\n    }\n    if (*(ulong *)(param_1 + 0x20) == param_2) {\nLAB_0023dd3e:\n      auVar7._8_8_ = 0;\n      auVar7._0_8_ = param_2;\n      return auVar7 << 0x40;\n    }\n    uVar4 = FUN_002dc030(param_2);\n    if ((*(ulong *)(uVar4 + 0x20) <= uVar2) &&\n       ((uVar2 != *(ulong *)(uVar4 + 0x20) || (*(uint *)(uVar4 + 0x28) <= (uint)param_3[1]))))\n    goto LAB_0023dd58;\n    uVar5 = 0;\n    if (*(long *)(param_2 + 0x18) != 0) {\n      uVar5 = uVar4;\n      param_2 = uVar4;\n    }\n  }" if (parenthesized_expression "(uVar2 < uVar4)" ( (binary_expression "uVar2 < uVar4" identifier < identifier) )) (compound_statement "{\nLAB_0023dc79:\n    if (*(ulong *)(param_1 + 0x18) != param_2) {\n      uVar4 = thunk_FUN_002dbfd0(param_2,param_2,param_2);\n      if ((uVar2 <= *(ulong *)(uVar4 + 0x20)) &&\n         ((uVar2 != *(ulong *)(uVar4 + 0x20) || ((uint)param_3[1] <= *(uint *)(uVar4 + 0x28))))) {\nLAB_0023dd58:\n        auVar7 = FUN_0023db90(param_1,param_3);\n        return auVar7;\n      }\n      if (*(long *)(uVar4 + 0x18) == 0) {\n        uVar5 = 0;\n        param_2 = uVar4;\n      }\n    }\n  }" { (labeled_statement "LAB_0023dc79:\n    if (*(ulong *)(param_1 + 0x18) != param_2) {\n      uVar4 = thunk_FUN_002dbfd0(param_2,param_2,param_2);\n      if ((uVar2 <= *(ulong *)(uVar4 + 0x20)) &&\n         ((uVar2 != *(ulong *)(uVar4 + 0x20) || ((uint)param_3[1] <= *(uint *)(uVar4 + 0x28))))) {\nLAB_0023dd58:\n        auVar7 = FUN_0023db90(param_1,param_3);\n        return auVar7;\n      }\n      if (*(long *)(uVar4 + 0x18) == 0) {\n        uVar5 = 0;\n        param_2 = uVar4;\n      }\n    }" statement_identifier : (if_statement "if (*(ulong *)(param_1 + 0x18) != param_2) {\n      uVar4 = thunk_FUN_002dbfd0(param_2,param_2,param_2);\n      if ((uVar2 <= *(ulong *)(uVar4 + 0x20)) &&\n         ((uVar2 != *(ulong *)(uVar4 + 0x20) || ((uint)param_3[1] <= *(uint *)(uVar4 + 0x28))))) {\nLAB_0023dd58:\n        auVar7 = FUN_0023db90(param_1,param_3);\n        return auVar7;\n      }\n      if (*(long *)(uVar4 + 0x18) == 0) {\n        uVar5 = 0;\n        param_2 = uVar4;\n      }\n    }" if (parenthesized_expression "(*(ulong *)(param_1 + 0x18) != param_2)" ( (binary_expression "*(ulong *)(param_1 + 0x18) != param_2" (pointer_expression "*(ulong *)(param_1 + 0x18)" * (cast_expression "(ulong *)(param_1 + 0x18)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) )))) != identifier) )) (compound_statement "{\n      uVar4 = thunk_FUN_002dbfd0(param_2,param_2,param_2);\n      if ((uVar2 <= *(ulong *)(uVar4 + 0x20)) &&\n         ((uVar2 != *(ulong *)(uVar4 + 0x20) || ((uint)param_3[1] <= *(uint *)(uVar4 + 0x28))))) {\nLAB_0023dd58:\n        auVar7 = FUN_0023db90(param_1,param_3);\n        return auVar7;\n      }\n      if (*(long *)(uVar4 + 0x18) == 0) {\n        uVar5 = 0;\n        param_2 = uVar4;\n      }\n    }" { (expression_statement "uVar4 = thunk_FUN_002dbfd0(param_2,param_2,param_2);" (assignment_expression "uVar4 = thunk_FUN_002dbfd0(param_2,param_2,param_2)" identifier = (call_expression "thunk_FUN_002dbfd0(param_2,param_2,param_2)" identifier (argument_list "(param_2,param_2,param_2)" ( identifier , identifier , identifier )))) ;) (if_statement "if ((uVar2 <= *(ulong *)(uVar4 + 0x20)) &&\n         ((uVar2 != *(ulong *)(uVar4 + 0x20) || ((uint)param_3[1] <= *(uint *)(uVar4 + 0x28))))) {\nLAB_0023dd58:\n        auVar7 = FUN_0023db90(param_1,param_3);\n        return auVar7;\n      }" if (parenthesized_expression "((uVar2 <= *(ulong *)(uVar4 + 0x20)) &&\n         ((uVar2 != *(ulong *)(uVar4 + 0x20) || ((uint)param_3[1] <= *(uint *)(uVar4 + 0x28)))))" ( (binary_expression "(uVar2 <= *(ulong *)(uVar4 + 0x20)) &&\n         ((uVar2 != *(ulong *)(uVar4 + 0x20) || ((uint)param_3[1] <= *(uint *)(uVar4 + 0x28))))" (parenthesized_expression "(uVar2 <= *(ulong *)(uVar4 + 0x20))" ( (binary_expression "uVar2 <= *(ulong *)(uVar4 + 0x20)" identifier <= (pointer_expression "*(ulong *)(uVar4 + 0x20)" * (cast_expression "(ulong *)(uVar4 + 0x20)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar4 + 0x20)" ( (binary_expression "uVar4 + 0x20" identifier + number_literal) ))))) )) && (parenthesized_expression "((uVar2 != *(ulong *)(uVar4 + 0x20) || ((uint)param_3[1] <= *(uint *)(uVar4 + 0x28))))" ( (parenthesized_expression "(uVar2 != *(ulong *)(uVar4 + 0x20) || ((uint)param_3[1] <= *(uint *)(uVar4 + 0x28)))" ( (binary_expression "uVar2 != *(ulong *)(uVar4 + 0x20) || ((uint)param_3[1] <= *(uint *)(uVar4 + 0x28))" (binary_expression "uVar2 != *(ulong *)(uVar4 + 0x20)" identifier != (pointer_expression "*(ulong *)(uVar4 + 0x20)" * (cast_expression "(ulong *)(uVar4 + 0x20)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar4 + 0x20)" ( (binary_expression "uVar4 + 0x20" identifier + number_literal) ))))) || (parenthesized_expression "((uint)param_3[1] <= *(uint *)(uVar4 + 0x28))" ( (binary_expression "(uint)param_3[1] <= *(uint *)(uVar4 + 0x28)" (cast_expression "(uint)param_3[1]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_3[1]" identifier [ number_literal ])) <= (pointer_expression "*(uint *)(uVar4 + 0x28)" * (cast_expression "(uint *)(uVar4 + 0x28)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar4 + 0x28)" ( (binary_expression "uVar4 + 0x28" identifier + number_literal) ))))) ))) )) ))) )) (compound_statement "{\nLAB_0023dd58:\n        auVar7 = FUN_0023db90(param_1,param_3);\n        return auVar7;\n      }" { (labeled_statement "LAB_0023dd58:\n        auVar7 = FUN_0023db90(param_1,param_3);" statement_identifier : (expression_statement "auVar7 = FUN_0023db90(param_1,param_3);" (assignment_expression "auVar7 = FUN_0023db90(param_1,param_3)" identifier = (call_expression "FUN_0023db90(param_1,param_3)" identifier (argument_list "(param_1,param_3)" ( identifier , identifier )))) ;)) (return_statement "return auVar7;" return identifier ;) })) (if_statement "if (*(long *)(uVar4 + 0x18) == 0) {\n        uVar5 = 0;\n        param_2 = uVar4;\n      }" if (parenthesized_expression "(*(long *)(uVar4 + 0x18) == 0)" ( (binary_expression "*(long *)(uVar4 + 0x18) == 0" (pointer_expression "*(long *)(uVar4 + 0x18)" * (cast_expression "(long *)(uVar4 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar4 + 0x18)" ( (binary_expression "uVar4 + 0x18" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n        uVar5 = 0;\n        param_2 = uVar4;\n      }" { (expression_statement "uVar5 = 0;" (assignment_expression "uVar5 = 0" identifier = number_literal) ;) (expression_statement "param_2 = uVar4;" (assignment_expression "param_2 = uVar4" identifier = identifier) ;) })) }))) }) (else_clause "else {\n    if (uVar4 == uVar2) {\n      uVar3 = (uint)param_3[1];\n      uVar1 = *(uint *)(param_2 + 0x28);\n      if (uVar3 < uVar1) goto LAB_0023dc79;\nLAB_0023dd7e:\n      if (uVar3 <= uVar1) {\n        param_2 = 0;\n        goto LAB_0023dcc5;\n      }\n    }\n    else if (uVar2 <= uVar4) {\n      uVar1 = *(uint *)(param_2 + 0x28);\n      uVar3 = (uint)param_3[1];\n      goto LAB_0023dd7e;\n    }\n    if (*(ulong *)(param_1 + 0x20) == param_2) {\nLAB_0023dd3e:\n      auVar7._8_8_ = 0;\n      auVar7._0_8_ = param_2;\n      return auVar7 << 0x40;\n    }\n    uVar4 = FUN_002dc030(param_2);\n    if ((*(ulong *)(uVar4 + 0x20) <= uVar2) &&\n       ((uVar2 != *(ulong *)(uVar4 + 0x20) || (*(uint *)(uVar4 + 0x28) <= (uint)param_3[1]))))\n    goto LAB_0023dd58;\n    uVar5 = 0;\n    if (*(long *)(param_2 + 0x18) != 0) {\n      uVar5 = uVar4;\n      param_2 = uVar4;\n    }\n  }" else (compound_statement "{\n    if (uVar4 == uVar2) {\n      uVar3 = (uint)param_3[1];\n      uVar1 = *(uint *)(param_2 + 0x28);\n      if (uVar3 < uVar1) goto LAB_0023dc79;\nLAB_0023dd7e:\n      if (uVar3 <= uVar1) {\n        param_2 = 0;\n        goto LAB_0023dcc5;\n      }\n    }\n    else if (uVar2 <= uVar4) {\n      uVar1 = *(uint *)(param_2 + 0x28);\n      uVar3 = (uint)param_3[1];\n      goto LAB_0023dd7e;\n    }\n    if (*(ulong *)(param_1 + 0x20) == param_2) {\nLAB_0023dd3e:\n      auVar7._8_8_ = 0;\n      auVar7._0_8_ = param_2;\n      return auVar7 << 0x40;\n    }\n    uVar4 = FUN_002dc030(param_2);\n    if ((*(ulong *)(uVar4 + 0x20) <= uVar2) &&\n       ((uVar2 != *(ulong *)(uVar4 + 0x20) || (*(uint *)(uVar4 + 0x28) <= (uint)param_3[1]))))\n    goto LAB_0023dd58;\n    uVar5 = 0;\n    if (*(long *)(param_2 + 0x18) != 0) {\n      uVar5 = uVar4;\n      param_2 = uVar4;\n    }\n  }" { (if_statement "if (uVar4 == uVar2) {\n      uVar3 = (uint)param_3[1];\n      uVar1 = *(uint *)(param_2 + 0x28);\n      if (uVar3 < uVar1) goto LAB_0023dc79;\nLAB_0023dd7e:\n      if (uVar3 <= uVar1) {\n        param_2 = 0;\n        goto LAB_0023dcc5;\n      }\n    }\n    else if (uVar2 <= uVar4) {\n      uVar1 = *(uint *)(param_2 + 0x28);\n      uVar3 = (uint)param_3[1];\n      goto LAB_0023dd7e;\n    }" if (parenthesized_expression "(uVar4 == uVar2)" ( (binary_expression "uVar4 == uVar2" identifier == identifier) )) (compound_statement "{\n      uVar3 = (uint)param_3[1];\n      uVar1 = *(uint *)(param_2 + 0x28);\n      if (uVar3 < uVar1) goto LAB_0023dc79;\nLAB_0023dd7e:\n      if (uVar3 <= uVar1) {\n        param_2 = 0;\n        goto LAB_0023dcc5;\n      }\n    }" { (expression_statement "uVar3 = (uint)param_3[1];" (assignment_expression "uVar3 = (uint)param_3[1]" identifier = (cast_expression "(uint)param_3[1]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_3[1]" identifier [ number_literal ]))) ;) (expression_statement "uVar1 = *(uint *)(param_2 + 0x28);" (assignment_expression "uVar1 = *(uint *)(param_2 + 0x28)" identifier = (pointer_expression "*(uint *)(param_2 + 0x28)" * (cast_expression "(uint *)(param_2 + 0x28)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x28)" ( (binary_expression "param_2 + 0x28" identifier + number_literal) ))))) ;) (if_statement "if (uVar3 < uVar1) goto LAB_0023dc79;" if (parenthesized_expression "(uVar3 < uVar1)" ( (binary_expression "uVar3 < uVar1" identifier < identifier) )) (goto_statement "goto LAB_0023dc79;" goto statement_identifier ;)) (labeled_statement "LAB_0023dd7e:\n      if (uVar3 <= uVar1) {\n        param_2 = 0;\n        goto LAB_0023dcc5;\n      }" statement_identifier : (if_statement "if (uVar3 <= uVar1) {\n        param_2 = 0;\n        goto LAB_0023dcc5;\n      }" if (parenthesized_expression "(uVar3 <= uVar1)" ( (binary_expression "uVar3 <= uVar1" identifier <= identifier) )) (compound_statement "{\n        param_2 = 0;\n        goto LAB_0023dcc5;\n      }" { (expression_statement "param_2 = 0;" (assignment_expression "param_2 = 0" identifier = number_literal) ;) (goto_statement "goto LAB_0023dcc5;" goto statement_identifier ;) }))) }) (else_clause "else if (uVar2 <= uVar4) {\n      uVar1 = *(uint *)(param_2 + 0x28);\n      uVar3 = (uint)param_3[1];\n      goto LAB_0023dd7e;\n    }" else (if_statement "if (uVar2 <= uVar4) {\n      uVar1 = *(uint *)(param_2 + 0x28);\n      uVar3 = (uint)param_3[1];\n      goto LAB_0023dd7e;\n    }" if (parenthesized_expression "(uVar2 <= uVar4)" ( (binary_expression "uVar2 <= uVar4" identifier <= identifier) )) (compound_statement "{\n      uVar1 = *(uint *)(param_2 + 0x28);\n      uVar3 = (uint)param_3[1];\n      goto LAB_0023dd7e;\n    }" { (expression_statement "uVar1 = *(uint *)(param_2 + 0x28);" (assignment_expression "uVar1 = *(uint *)(param_2 + 0x28)" identifier = (pointer_expression "*(uint *)(param_2 + 0x28)" * (cast_expression "(uint *)(param_2 + 0x28)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x28)" ( (binary_expression "param_2 + 0x28" identifier + number_literal) ))))) ;) (expression_statement "uVar3 = (uint)param_3[1];" (assignment_expression "uVar3 = (uint)param_3[1]" identifier = (cast_expression "(uint)param_3[1]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_3[1]" identifier [ number_literal ]))) ;) (goto_statement "goto LAB_0023dd7e;" goto statement_identifier ;) })))) (if_statement "if (*(ulong *)(param_1 + 0x20) == param_2) {\nLAB_0023dd3e:\n      auVar7._8_8_ = 0;\n      auVar7._0_8_ = param_2;\n      return auVar7 << 0x40;\n    }" if (parenthesized_expression "(*(ulong *)(param_1 + 0x20) == param_2)" ( (binary_expression "*(ulong *)(param_1 + 0x20) == param_2" (pointer_expression "*(ulong *)(param_1 + 0x20)" * (cast_expression "(ulong *)(param_1 + 0x20)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x20)" ( (binary_expression "param_1 + 0x20" identifier + number_literal) )))) == identifier) )) (compound_statement "{\nLAB_0023dd3e:\n      auVar7._8_8_ = 0;\n      auVar7._0_8_ = param_2;\n      return auVar7 << 0x40;\n    }" { (labeled_statement "LAB_0023dd3e:\n      auVar7._8_8_ = 0;" statement_identifier : (expression_statement "auVar7._8_8_ = 0;" (assignment_expression "auVar7._8_8_ = 0" (field_expression "auVar7._8_8_" identifier . field_identifier) = number_literal) ;)) (expression_statement "auVar7._0_8_ = param_2;" (assignment_expression "auVar7._0_8_ = param_2" (field_expression "auVar7._0_8_" identifier . field_identifier) = identifier) ;) (return_statement "return auVar7 << 0x40;" return (binary_expression "auVar7 << 0x40" identifier << number_literal) ;) })) (expression_statement "uVar4 = FUN_002dc030(param_2);" (assignment_expression "uVar4 = FUN_002dc030(param_2)" identifier = (call_expression "FUN_002dc030(param_2)" identifier (argument_list "(param_2)" ( identifier )))) ;) (if_statement "if ((*(ulong *)(uVar4 + 0x20) <= uVar2) &&\n       ((uVar2 != *(ulong *)(uVar4 + 0x20) || (*(uint *)(uVar4 + 0x28) <= (uint)param_3[1]))))\n    goto LAB_0023dd58;" if (parenthesized_expression "((*(ulong *)(uVar4 + 0x20) <= uVar2) &&\n       ((uVar2 != *(ulong *)(uVar4 + 0x20) || (*(uint *)(uVar4 + 0x28) <= (uint)param_3[1]))))" ( (binary_expression "(*(ulong *)(uVar4 + 0x20) <= uVar2) &&\n       ((uVar2 != *(ulong *)(uVar4 + 0x20) || (*(uint *)(uVar4 + 0x28) <= (uint)param_3[1])))" (parenthesized_expression "(*(ulong *)(uVar4 + 0x20) <= uVar2)" ( (binary_expression "*(ulong *)(uVar4 + 0x20) <= uVar2" (pointer_expression "*(ulong *)(uVar4 + 0x20)" * (cast_expression "(ulong *)(uVar4 + 0x20)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar4 + 0x20)" ( (binary_expression "uVar4 + 0x20" identifier + number_literal) )))) <= identifier) )) && (parenthesized_expression "((uVar2 != *(ulong *)(uVar4 + 0x20) || (*(uint *)(uVar4 + 0x28) <= (uint)param_3[1])))" ( (parenthesized_expression "(uVar2 != *(ulong *)(uVar4 + 0x20) || (*(uint *)(uVar4 + 0x28) <= (uint)param_3[1]))" ( (binary_expression "uVar2 != *(ulong *)(uVar4 + 0x20) || (*(uint *)(uVar4 + 0x28) <= (uint)param_3[1])" (binary_expression "uVar2 != *(ulong *)(uVar4 + 0x20)" identifier != (pointer_expression "*(ulong *)(uVar4 + 0x20)" * (cast_expression "(ulong *)(uVar4 + 0x20)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar4 + 0x20)" ( (binary_expression "uVar4 + 0x20" identifier + number_literal) ))))) || (parenthesized_expression "(*(uint *)(uVar4 + 0x28) <= (uint)param_3[1])" ( (binary_expression "*(uint *)(uVar4 + 0x28) <= (uint)param_3[1]" (pointer_expression "*(uint *)(uVar4 + 0x28)" * (cast_expression "(uint *)(uVar4 + 0x28)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar4 + 0x28)" ( (binary_expression "uVar4 + 0x28" identifier + number_literal) )))) <= (cast_expression "(uint)param_3[1]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_3[1]" identifier [ number_literal ]))) ))) )) ))) )) (goto_statement "goto LAB_0023dd58;" goto statement_identifier ;)) (expression_statement "uVar5 = 0;" (assignment_expression "uVar5 = 0" identifier = number_literal) ;) (if_statement "if (*(long *)(param_2 + 0x18) != 0) {\n      uVar5 = uVar4;\n      param_2 = uVar4;\n    }" if (parenthesized_expression "(*(long *)(param_2 + 0x18) != 0)" ( (binary_expression "*(long *)(param_2 + 0x18) != 0" (pointer_expression "*(long *)(param_2 + 0x18)" * (cast_expression "(long *)(param_2 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x18)" ( (binary_expression "param_2 + 0x18" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n      uVar5 = uVar4;\n      param_2 = uVar4;\n    }" { (expression_statement "uVar5 = uVar4;" (assignment_expression "uVar5 = uVar4" identifier = identifier) ;) (expression_statement "param_2 = uVar4;" (assignment_expression "param_2 = uVar4" identifier = identifier) ;) })) }))) (labeled_statement "LAB_0023dcc5:\n  auVar6._8_8_ = param_2;" statement_identifier : (expression_statement "auVar6._8_8_ = param_2;" (assignment_expression "auVar6._8_8_ = param_2" (field_expression "auVar6._8_8_" identifier . field_identifier) = identifier) ;)) (expression_statement "auVar6._0_8_ = uVar5;" (assignment_expression "auVar6._0_8_ = uVar5" (field_expression "auVar6._0_8_" identifier . field_identifier) = identifier) ;) (return_statement "return auVar6;" return identifier ;) }))
(translation_unit (expression_statement (subscript_expression IDENT [ LIT ]) ;) (macro_type_specifier IDENT ( (ERROR (type_descriptor (sized_type_specifier long TYPE)) , IDENT IDENT , (type_descriptor TYPE (abstract_pointer_declarator *))) (type_descriptor TYPE) )) ; (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (binary_expression IDENT + LIT)) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (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 (pointer_expression * IDENT) <= (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) && (parenthesized_expression ( (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * IDENT) != (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) || (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) <= (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ))) )) ))) )) (goto_statement goto statement_identifier ;)) (goto_statement goto statement_identifier ;) })) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT <= (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) && (parenthesized_expression ( (parenthesized_expression ( (binary_expression (binary_expression IDENT != (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) || (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) <= (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ))) )) ))) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;)) (return_statement return IDENT ;) })) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) })) }))) }) (else_clause else (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ]))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (goto_statement goto statement_identifier ;)) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (goto_statement goto statement_identifier ;) }))) }) (else_clause else (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ]))) ;) (goto_statement goto statement_identifier ;) })))) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == IDENT) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression (field_expression IDENT . field_identifier) = LIT) ;)) (expression_statement (assignment_expression (field_expression IDENT . field_identifier) = IDENT) ;) (return_statement return (binary_expression IDENT << LIT) ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) <= IDENT) )) && (parenthesized_expression ( (parenthesized_expression ( (binary_expression (binary_expression IDENT != (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) || (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) <= (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ]))) ))) )) ))) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) })) }))) (labeled_statement statement_identifier : (expression_statement (assignment_expression (field_expression IDENT . field_identifier) = IDENT) ;)) (expression_statement (assignment_expression (field_expression IDENT . field_identifier) = IDENT) ;) (return_statement return IDENT ;) }))
(expression_statement "undefined1  [16]" (subscript_expression "undefined1  [16]" (identifier "undefined1") ([ "[") (number_literal "16") (] "]")) (; "")) (macro_type_specifier "FUN_0023dc50(long param_1,ulong param_2,ulong *param_3)" (identifier "FUN_0023dc50") (( "(") (ERROR "long param_1,ulong param_2,ulong *" (type_descriptor "long param_1" (sized_type_specifier "long param_1" (long "long") (type_identifier "param_1"))) (, ",") (identifier "ulong") (identifier "param_2") (, ",") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*")))) (type_descriptor "param_3" (type_identifier "param_3")) () ")")) (; "") (compound_statement "{\n  uint uVar1;\n  ulong uVar2;\n  uint uVar3;\n  ulong uVar4;\n  ulong uVar5;\n  undefined1 auVar6 [16];\n  undefined1 auVar7 [16];\n  \n  if (param_2 == param_1 + 8U) {\n    if (*(long *)(param_1 + 0x28) != 0) {\n      param_2 = *(ulong *)(param_1 + 0x20);\n      if ((*param_3 <= *(ulong *)(param_2 + 0x20)) &&\n         ((*param_3 != *(ulong *)(param_2 + 0x20) || ((uint)param_3[1] <= *(uint *)(param_2 + 0x28))\n          ))) goto LAB_0023dd58;\n      goto LAB_0023dd3e;\n    }\n    goto LAB_0023dd58;\n  }\n  uVar2 = *param_3;\n  uVar4 = *(ulong *)(param_2 + 0x20);\n  uVar5 = param_2;\n  if (uVar2 < uVar4) {\nLAB_0023dc79:\n    if (*(ulong *)(param_1 + 0x18) != param_2) {\n      uVar4 = thunk_FUN_002dbfd0(param_2,param_2,param_2);\n      if ((uVar2 <= *(ulong *)(uVar4 + 0x20)) &&\n         ((uVar2 != *(ulong *)(uVar4 + 0x20) || ((uint)param_3[1] <= *(uint *)(uVar4 + 0x28))))) {\nLAB_0023dd58:\n        auVar7 = FUN_0023db90(param_1,param_3);\n        return auVar7;\n      }\n      if (*(long *)(uVar4 + 0x18) == 0) {\n        uVar5 = 0;\n        param_2 = uVar4;\n      }\n    }\n  }\n  else {\n    if (uVar4 == uVar2) {\n      uVar3 = (uint)param_3[1];\n      uVar1 = *(uint *)(param_2 + 0x28);\n      if (uVar3 < uVar1) goto LAB_0023dc79;\nLAB_0023dd7e:\n      if (uVar3 <= uVar1) {\n        param_2 = 0;\n        goto LAB_0023dcc5;\n      }\n    }\n    else if (uVar2 <= uVar4) {\n      uVar1 = *(uint *)(param_2 + 0x28);\n      uVar3 = (uint)param_3[1];\n      goto LAB_0023dd7e;\n    }\n    if (*(ulong *)(param_1 + 0x20) == param_2) {\nLAB_0023dd3e:\n      auVar7._8_8_ = 0;\n      auVar7._0_8_ = param_2;\n      return auVar7 << 0x40;\n    }\n    uVar4 = FUN_002dc030(param_2);\n    if ((*(ulong *)(uVar4 + 0x20) <= uVar2) &&\n       ((uVar2 != *(ulong *)(uVar4 + 0x20) || (*(uint *)(uVar4 + 0x28) <= (uint)param_3[1]))))\n    goto LAB_0023dd58;\n    uVar5 = 0;\n    if (*(long *)(param_2 + 0x18) != 0) {\n      uVar5 = uVar4;\n      param_2 = uVar4;\n    }\n  }\nLAB_0023dcc5:\n  auVar6._8_8_ = param_2;\n  auVar6._0_8_ = uVar5;\n  return auVar6;\n}" ({ "{") (declaration "uint uVar1;" (type_identifier "uint") (identifier "uVar1") (; ";")) (declaration "ulong uVar2;" (type_identifier "ulong") (identifier "uVar2") (; ";")) (declaration "uint uVar3;" (type_identifier "uint") (identifier "uVar3") (; ";")) (declaration "ulong uVar4;" (type_identifier "ulong") (identifier "uVar4") (; ";")) (declaration "ulong uVar5;" (type_identifier "ulong") (identifier "uVar5") (; ";")) (declaration "undefined1 auVar6 [16];" (type_identifier "undefined1") (array_declarator "auVar6 [16]" (identifier "auVar6") ([ "[") (number_literal "16") (] "]")) (; ";")) (declaration "undefined1 auVar7 [16];" (type_identifier "undefined1") (array_declarator "auVar7 [16]" (identifier "auVar7") ([ "[") (number_literal "16") (] "]")) (; ";")) (if_statement "if (param_2 == param_1 + 8U) {\n    if (*(long *)(param_1 + 0x28) != 0) {\n      param_2 = *(ulong *)(param_1 + 0x20);\n      if ((*param_3 <= *(ulong *)(param_2 + 0x20)) &&\n         ((*param_3 != *(ulong *)(param_2 + 0x20) || ((uint)param_3[1] <= *(uint *)(param_2 + 0x28))\n          ))) goto LAB_0023dd58;\n      goto LAB_0023dd3e;\n    }\n    goto LAB_0023dd58;\n  }" (if "if") (parenthesized_expression "(param_2 == param_1 + 8U)" (( "(") (binary_expression "param_2 == param_1 + 8U" (identifier "param_2") (== "==") (binary_expression "param_1 + 8U" (identifier "param_1") (+ "+") (number_literal "8U"))) () ")")) (compound_statement "{\n    if (*(long *)(param_1 + 0x28) != 0) {\n      param_2 = *(ulong *)(param_1 + 0x20);\n      if ((*param_3 <= *(ulong *)(param_2 + 0x20)) &&\n         ((*param_3 != *(ulong *)(param_2 + 0x20) || ((uint)param_3[1] <= *(uint *)(param_2 + 0x28))\n          ))) goto LAB_0023dd58;\n      goto LAB_0023dd3e;\n    }\n    goto LAB_0023dd58;\n  }" ({ "{") (if_statement "if (*(long *)(param_1 + 0x28) != 0) {\n      param_2 = *(ulong *)(param_1 + 0x20);\n      if ((*param_3 <= *(ulong *)(param_2 + 0x20)) &&\n         ((*param_3 != *(ulong *)(param_2 + 0x20) || ((uint)param_3[1] <= *(uint *)(param_2 + 0x28))\n          ))) goto LAB_0023dd58;\n      goto LAB_0023dd3e;\n    }" (if "if") (parenthesized_expression "(*(long *)(param_1 + 0x28) != 0)" (( "(") (binary_expression "*(long *)(param_1 + 0x28) != 0" (pointer_expression "*(long *)(param_1 + 0x28)" (* "*") (cast_expression "(long *)(param_1 + 0x28)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x28)" (( "(") (binary_expression "param_1 + 0x28" (identifier "param_1") (+ "+") (number_literal "0x28")) () ")")))) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      param_2 = *(ulong *)(param_1 + 0x20);\n      if ((*param_3 <= *(ulong *)(param_2 + 0x20)) &&\n         ((*param_3 != *(ulong *)(param_2 + 0x20) || ((uint)param_3[1] <= *(uint *)(param_2 + 0x28))\n          ))) goto LAB_0023dd58;\n      goto LAB_0023dd3e;\n    }" ({ "{") (expression_statement "param_2 = *(ulong *)(param_1 + 0x20);" (assignment_expression "param_2 = *(ulong *)(param_1 + 0x20)" (identifier "param_2") (= "=") (pointer_expression "*(ulong *)(param_1 + 0x20)" (* "*") (cast_expression "(ulong *)(param_1 + 0x20)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x20)" (( "(") (binary_expression "param_1 + 0x20" (identifier "param_1") (+ "+") (number_literal "0x20")) () ")"))))) (; ";")) (if_statement "if ((*param_3 <= *(ulong *)(param_2 + 0x20)) &&\n         ((*param_3 != *(ulong *)(param_2 + 0x20) || ((uint)param_3[1] <= *(uint *)(param_2 + 0x28))\n          ))) goto LAB_0023dd58;" (if "if") (parenthesized_expression "((*param_3 <= *(ulong *)(param_2 + 0x20)) &&\n         ((*param_3 != *(ulong *)(param_2 + 0x20) || ((uint)param_3[1] <= *(uint *)(param_2 + 0x28))\n          )))" (( "(") (binary_expression "(*param_3 <= *(ulong *)(param_2 + 0x20)) &&\n         ((*param_3 != *(ulong *)(param_2 + 0x20) || ((uint)param_3[1] <= *(uint *)(param_2 + 0x28))\n          ))" (parenthesized_expression "(*param_3 <= *(ulong *)(param_2 + 0x20))" (( "(") (binary_expression "*param_3 <= *(ulong *)(param_2 + 0x20)" (pointer_expression "*param_3" (* "*") (identifier "param_3")) (<= "<=") (pointer_expression "*(ulong *)(param_2 + 0x20)" (* "*") (cast_expression "(ulong *)(param_2 + 0x20)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x20)" (( "(") (binary_expression "param_2 + 0x20" (identifier "param_2") (+ "+") (number_literal "0x20")) () ")"))))) () ")")) (&& "&&") (parenthesized_expression "((*param_3 != *(ulong *)(param_2 + 0x20) || ((uint)param_3[1] <= *(uint *)(param_2 + 0x28))\n          ))" (( "(") (parenthesized_expression "(*param_3 != *(ulong *)(param_2 + 0x20) || ((uint)param_3[1] <= *(uint *)(param_2 + 0x28))\n          )" (( "(") (binary_expression "*param_3 != *(ulong *)(param_2 + 0x20) || ((uint)param_3[1] <= *(uint *)(param_2 + 0x28))" (binary_expression "*param_3 != *(ulong *)(param_2 + 0x20)" (pointer_expression "*param_3" (* "*") (identifier "param_3")) (!= "!=") (pointer_expression "*(ulong *)(param_2 + 0x20)" (* "*") (cast_expression "(ulong *)(param_2 + 0x20)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x20)" (( "(") (binary_expression "param_2 + 0x20" (identifier "param_2") (+ "+") (number_literal "0x20")) () ")"))))) (|| "||") (parenthesized_expression "((uint)param_3[1] <= *(uint *)(param_2 + 0x28))" (( "(") (binary_expression "(uint)param_3[1] <= *(uint *)(param_2 + 0x28)" (cast_expression "(uint)param_3[1]" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (subscript_expression "param_3[1]" (identifier "param_3") ([ "[") (number_literal "1") (] "]"))) (<= "<=") (pointer_expression "*(uint *)(param_2 + 0x28)" (* "*") (cast_expression "(uint *)(param_2 + 0x28)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x28)" (( "(") (binary_expression "param_2 + 0x28" (identifier "param_2") (+ "+") (number_literal "0x28")) () ")"))))) () ")"))) () ")")) () ")"))) () ")")) (goto_statement "goto LAB_0023dd58;" (goto "goto") (statement_identifier "LAB_0023dd58") (; ";"))) (goto_statement "goto LAB_0023dd3e;" (goto "goto") (statement_identifier "LAB_0023dd3e") (; ";")) (} "}"))) (goto_statement "goto LAB_0023dd58;" (goto "goto") (statement_identifier "LAB_0023dd58") (; ";")) (} "}"))) (expression_statement "uVar2 = *param_3;" (assignment_expression "uVar2 = *param_3" (identifier "uVar2") (= "=") (pointer_expression "*param_3" (* "*") (identifier "param_3"))) (; ";")) (expression_statement "uVar4 = *(ulong *)(param_2 + 0x20);" (assignment_expression "uVar4 = *(ulong *)(param_2 + 0x20)" (identifier "uVar4") (= "=") (pointer_expression "*(ulong *)(param_2 + 0x20)" (* "*") (cast_expression "(ulong *)(param_2 + 0x20)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x20)" (( "(") (binary_expression "param_2 + 0x20" (identifier "param_2") (+ "+") (number_literal "0x20")) () ")"))))) (; ";")) (expression_statement "uVar5 = param_2;" (assignment_expression "uVar5 = param_2" (identifier "uVar5") (= "=") (identifier "param_2")) (; ";")) (if_statement "if (uVar2 < uVar4) {\nLAB_0023dc79:\n    if (*(ulong *)(param_1 + 0x18) != param_2) {\n      uVar4 = thunk_FUN_002dbfd0(param_2,param_2,param_2);\n      if ((uVar2 <= *(ulong *)(uVar4 + 0x20)) &&\n         ((uVar2 != *(ulong *)(uVar4 + 0x20) || ((uint)param_3[1] <= *(uint *)(uVar4 + 0x28))))) {\nLAB_0023dd58:\n        auVar7 = FUN_0023db90(param_1,param_3);\n        return auVar7;\n      }\n      if (*(long *)(uVar4 + 0x18) == 0) {\n        uVar5 = 0;\n        param_2 = uVar4;\n      }\n    }\n  }\n  else {\n    if (uVar4 == uVar2) {\n      uVar3 = (uint)param_3[1];\n      uVar1 = *(uint *)(param_2 + 0x28);\n      if (uVar3 < uVar1) goto LAB_0023dc79;\nLAB_0023dd7e:\n      if (uVar3 <= uVar1) {\n        param_2 = 0;\n        goto LAB_0023dcc5;\n      }\n    }\n    else if (uVar2 <= uVar4) {\n      uVar1 = *(uint *)(param_2 + 0x28);\n      uVar3 = (uint)param_3[1];\n      goto LAB_0023dd7e;\n    }\n    if (*(ulong *)(param_1 + 0x20) == param_2) {\nLAB_0023dd3e:\n      auVar7._8_8_ = 0;\n      auVar7._0_8_ = param_2;\n      return auVar7 << 0x40;\n    }\n    uVar4 = FUN_002dc030(param_2);\n    if ((*(ulong *)(uVar4 + 0x20) <= uVar2) &&\n       ((uVar2 != *(ulong *)(uVar4 + 0x20) || (*(uint *)(uVar4 + 0x28) <= (uint)param_3[1]))))\n    goto LAB_0023dd58;\n    uVar5 = 0;\n    if (*(long *)(param_2 + 0x18) != 0) {\n      uVar5 = uVar4;\n      param_2 = uVar4;\n    }\n  }" (if "if") (parenthesized_expression "(uVar2 < uVar4)" (( "(") (binary_expression "uVar2 < uVar4" (identifier "uVar2") (< "<") (identifier "uVar4")) () ")")) (compound_statement "{\nLAB_0023dc79:\n    if (*(ulong *)(param_1 + 0x18) != param_2) {\n      uVar4 = thunk_FUN_002dbfd0(param_2,param_2,param_2);\n      if ((uVar2 <= *(ulong *)(uVar4 + 0x20)) &&\n         ((uVar2 != *(ulong *)(uVar4 + 0x20) || ((uint)param_3[1] <= *(uint *)(uVar4 + 0x28))))) {\nLAB_0023dd58:\n        auVar7 = FUN_0023db90(param_1,param_3);\n        return auVar7;\n      }\n      if (*(long *)(uVar4 + 0x18) == 0) {\n        uVar5 = 0;\n        param_2 = uVar4;\n      }\n    }\n  }" ({ "{") (labeled_statement "LAB_0023dc79:\n    if (*(ulong *)(param_1 + 0x18) != param_2) {\n      uVar4 = thunk_FUN_002dbfd0(param_2,param_2,param_2);\n      if ((uVar2 <= *(ulong *)(uVar4 + 0x20)) &&\n         ((uVar2 != *(ulong *)(uVar4 + 0x20) || ((uint)param_3[1] <= *(uint *)(uVar4 + 0x28))))) {\nLAB_0023dd58:\n        auVar7 = FUN_0023db90(param_1,param_3);\n        return auVar7;\n      }\n      if (*(long *)(uVar4 + 0x18) == 0) {\n        uVar5 = 0;\n        param_2 = uVar4;\n      }\n    }" (statement_identifier "LAB_0023dc79") (: ":") (if_statement "if (*(ulong *)(param_1 + 0x18) != param_2) {\n      uVar4 = thunk_FUN_002dbfd0(param_2,param_2,param_2);\n      if ((uVar2 <= *(ulong *)(uVar4 + 0x20)) &&\n         ((uVar2 != *(ulong *)(uVar4 + 0x20) || ((uint)param_3[1] <= *(uint *)(uVar4 + 0x28))))) {\nLAB_0023dd58:\n        auVar7 = FUN_0023db90(param_1,param_3);\n        return auVar7;\n      }\n      if (*(long *)(uVar4 + 0x18) == 0) {\n        uVar5 = 0;\n        param_2 = uVar4;\n      }\n    }" (if "if") (parenthesized_expression "(*(ulong *)(param_1 + 0x18) != param_2)" (( "(") (binary_expression "*(ulong *)(param_1 + 0x18) != param_2" (pointer_expression "*(ulong *)(param_1 + 0x18)" (* "*") (cast_expression "(ulong *)(param_1 + 0x18)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x18)" (( "(") (binary_expression "param_1 + 0x18" (identifier "param_1") (+ "+") (number_literal "0x18")) () ")")))) (!= "!=") (identifier "param_2")) () ")")) (compound_statement "{\n      uVar4 = thunk_FUN_002dbfd0(param_2,param_2,param_2);\n      if ((uVar2 <= *(ulong *)(uVar4 + 0x20)) &&\n         ((uVar2 != *(ulong *)(uVar4 + 0x20) || ((uint)param_3[1] <= *(uint *)(uVar4 + 0x28))))) {\nLAB_0023dd58:\n        auVar7 = FUN_0023db90(param_1,param_3);\n        return auVar7;\n      }\n      if (*(long *)(uVar4 + 0x18) == 0) {\n        uVar5 = 0;\n        param_2 = uVar4;\n      }\n    }" ({ "{") (expression_statement "uVar4 = thunk_FUN_002dbfd0(param_2,param_2,param_2);" (assignment_expression "uVar4 = thunk_FUN_002dbfd0(param_2,param_2,param_2)" (identifier "uVar4") (= "=") (call_expression "thunk_FUN_002dbfd0(param_2,param_2,param_2)" (identifier "thunk_FUN_002dbfd0") (argument_list "(param_2,param_2,param_2)" (( "(") (identifier "param_2") (, ",") (identifier "param_2") (, ",") (identifier "param_2") () ")")))) (; ";")) (if_statement "if ((uVar2 <= *(ulong *)(uVar4 + 0x20)) &&\n         ((uVar2 != *(ulong *)(uVar4 + 0x20) || ((uint)param_3[1] <= *(uint *)(uVar4 + 0x28))))) {\nLAB_0023dd58:\n        auVar7 = FUN_0023db90(param_1,param_3);\n        return auVar7;\n      }" (if "if") (parenthesized_expression "((uVar2 <= *(ulong *)(uVar4 + 0x20)) &&\n         ((uVar2 != *(ulong *)(uVar4 + 0x20) || ((uint)param_3[1] <= *(uint *)(uVar4 + 0x28)))))" (( "(") (binary_expression "(uVar2 <= *(ulong *)(uVar4 + 0x20)) &&\n         ((uVar2 != *(ulong *)(uVar4 + 0x20) || ((uint)param_3[1] <= *(uint *)(uVar4 + 0x28))))" (parenthesized_expression "(uVar2 <= *(ulong *)(uVar4 + 0x20))" (( "(") (binary_expression "uVar2 <= *(ulong *)(uVar4 + 0x20)" (identifier "uVar2") (<= "<=") (pointer_expression "*(ulong *)(uVar4 + 0x20)" (* "*") (cast_expression "(ulong *)(uVar4 + 0x20)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(uVar4 + 0x20)" (( "(") (binary_expression "uVar4 + 0x20" (identifier "uVar4") (+ "+") (number_literal "0x20")) () ")"))))) () ")")) (&& "&&") (parenthesized_expression "((uVar2 != *(ulong *)(uVar4 + 0x20) || ((uint)param_3[1] <= *(uint *)(uVar4 + 0x28))))" (( "(") (parenthesized_expression "(uVar2 != *(ulong *)(uVar4 + 0x20) || ((uint)param_3[1] <= *(uint *)(uVar4 + 0x28)))" (( "(") (binary_expression "uVar2 != *(ulong *)(uVar4 + 0x20) || ((uint)param_3[1] <= *(uint *)(uVar4 + 0x28))" (binary_expression "uVar2 != *(ulong *)(uVar4 + 0x20)" (identifier "uVar2") (!= "!=") (pointer_expression "*(ulong *)(uVar4 + 0x20)" (* "*") (cast_expression "(ulong *)(uVar4 + 0x20)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(uVar4 + 0x20)" (( "(") (binary_expression "uVar4 + 0x20" (identifier "uVar4") (+ "+") (number_literal "0x20")) () ")"))))) (|| "||") (parenthesized_expression "((uint)param_3[1] <= *(uint *)(uVar4 + 0x28))" (( "(") (binary_expression "(uint)param_3[1] <= *(uint *)(uVar4 + 0x28)" (cast_expression "(uint)param_3[1]" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (subscript_expression "param_3[1]" (identifier "param_3") ([ "[") (number_literal "1") (] "]"))) (<= "<=") (pointer_expression "*(uint *)(uVar4 + 0x28)" (* "*") (cast_expression "(uint *)(uVar4 + 0x28)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(uVar4 + 0x28)" (( "(") (binary_expression "uVar4 + 0x28" (identifier "uVar4") (+ "+") (number_literal "0x28")) () ")"))))) () ")"))) () ")")) () ")"))) () ")")) (compound_statement "{\nLAB_0023dd58:\n        auVar7 = FUN_0023db90(param_1,param_3);\n        return auVar7;\n      }" ({ "{") (labeled_statement "LAB_0023dd58:\n        auVar7 = FUN_0023db90(param_1,param_3);" (statement_identifier "LAB_0023dd58") (: ":") (expression_statement "auVar7 = FUN_0023db90(param_1,param_3);" (assignment_expression "auVar7 = FUN_0023db90(param_1,param_3)" (identifier "auVar7") (= "=") (call_expression "FUN_0023db90(param_1,param_3)" (identifier "FUN_0023db90") (argument_list "(param_1,param_3)" (( "(") (identifier "param_1") (, ",") (identifier "param_3") () ")")))) (; ";"))) (return_statement "return auVar7;" (return "return") (identifier "auVar7") (; ";")) (} "}"))) (if_statement "if (*(long *)(uVar4 + 0x18) == 0) {\n        uVar5 = 0;\n        param_2 = uVar4;\n      }" (if "if") (parenthesized_expression "(*(long *)(uVar4 + 0x18) == 0)" (( "(") (binary_expression "*(long *)(uVar4 + 0x18) == 0" (pointer_expression "*(long *)(uVar4 + 0x18)" (* "*") (cast_expression "(long *)(uVar4 + 0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(uVar4 + 0x18)" (( "(") (binary_expression "uVar4 + 0x18" (identifier "uVar4") (+ "+") (number_literal "0x18")) () ")")))) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        uVar5 = 0;\n        param_2 = uVar4;\n      }" ({ "{") (expression_statement "uVar5 = 0;" (assignment_expression "uVar5 = 0" (identifier "uVar5") (= "=") (number_literal "0")) (; ";")) (expression_statement "param_2 = uVar4;" (assignment_expression "param_2 = uVar4" (identifier "param_2") (= "=") (identifier "uVar4")) (; ";")) (} "}"))) (} "}")))) (} "}")) (else_clause "else {\n    if (uVar4 == uVar2) {\n      uVar3 = (uint)param_3[1];\n      uVar1 = *(uint *)(param_2 + 0x28);\n      if (uVar3 < uVar1) goto LAB_0023dc79;\nLAB_0023dd7e:\n      if (uVar3 <= uVar1) {\n        param_2 = 0;\n        goto LAB_0023dcc5;\n      }\n    }\n    else if (uVar2 <= uVar4) {\n      uVar1 = *(uint *)(param_2 + 0x28);\n      uVar3 = (uint)param_3[1];\n      goto LAB_0023dd7e;\n    }\n    if (*(ulong *)(param_1 + 0x20) == param_2) {\nLAB_0023dd3e:\n      auVar7._8_8_ = 0;\n      auVar7._0_8_ = param_2;\n      return auVar7 << 0x40;\n    }\n    uVar4 = FUN_002dc030(param_2);\n    if ((*(ulong *)(uVar4 + 0x20) <= uVar2) &&\n       ((uVar2 != *(ulong *)(uVar4 + 0x20) || (*(uint *)(uVar4 + 0x28) <= (uint)param_3[1]))))\n    goto LAB_0023dd58;\n    uVar5 = 0;\n    if (*(long *)(param_2 + 0x18) != 0) {\n      uVar5 = uVar4;\n      param_2 = uVar4;\n    }\n  }" (else "else") (compound_statement "{\n    if (uVar4 == uVar2) {\n      uVar3 = (uint)param_3[1];\n      uVar1 = *(uint *)(param_2 + 0x28);\n      if (uVar3 < uVar1) goto LAB_0023dc79;\nLAB_0023dd7e:\n      if (uVar3 <= uVar1) {\n        param_2 = 0;\n        goto LAB_0023dcc5;\n      }\n    }\n    else if (uVar2 <= uVar4) {\n      uVar1 = *(uint *)(param_2 + 0x28);\n      uVar3 = (uint)param_3[1];\n      goto LAB_0023dd7e;\n    }\n    if (*(ulong *)(param_1 + 0x20) == param_2) {\nLAB_0023dd3e:\n      auVar7._8_8_ = 0;\n      auVar7._0_8_ = param_2;\n      return auVar7 << 0x40;\n    }\n    uVar4 = FUN_002dc030(param_2);\n    if ((*(ulong *)(uVar4 + 0x20) <= uVar2) &&\n       ((uVar2 != *(ulong *)(uVar4 + 0x20) || (*(uint *)(uVar4 + 0x28) <= (uint)param_3[1]))))\n    goto LAB_0023dd58;\n    uVar5 = 0;\n    if (*(long *)(param_2 + 0x18) != 0) {\n      uVar5 = uVar4;\n      param_2 = uVar4;\n    }\n  }" ({ "{") (if_statement "if (uVar4 == uVar2) {\n      uVar3 = (uint)param_3[1];\n      uVar1 = *(uint *)(param_2 + 0x28);\n      if (uVar3 < uVar1) goto LAB_0023dc79;\nLAB_0023dd7e:\n      if (uVar3 <= uVar1) {\n        param_2 = 0;\n        goto LAB_0023dcc5;\n      }\n    }\n    else if (uVar2 <= uVar4) {\n      uVar1 = *(uint *)(param_2 + 0x28);\n      uVar3 = (uint)param_3[1];\n      goto LAB_0023dd7e;\n    }" (if "if") (parenthesized_expression "(uVar4 == uVar2)" (( "(") (binary_expression "uVar4 == uVar2" (identifier "uVar4") (== "==") (identifier "uVar2")) () ")")) (compound_statement "{\n      uVar3 = (uint)param_3[1];\n      uVar1 = *(uint *)(param_2 + 0x28);\n      if (uVar3 < uVar1) goto LAB_0023dc79;\nLAB_0023dd7e:\n      if (uVar3 <= uVar1) {\n        param_2 = 0;\n        goto LAB_0023dcc5;\n      }\n    }" ({ "{") (expression_statement "uVar3 = (uint)param_3[1];" (assignment_expression "uVar3 = (uint)param_3[1]" (identifier "uVar3") (= "=") (cast_expression "(uint)param_3[1]" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (subscript_expression "param_3[1]" (identifier "param_3") ([ "[") (number_literal "1") (] "]")))) (; ";")) (expression_statement "uVar1 = *(uint *)(param_2 + 0x28);" (assignment_expression "uVar1 = *(uint *)(param_2 + 0x28)" (identifier "uVar1") (= "=") (pointer_expression "*(uint *)(param_2 + 0x28)" (* "*") (cast_expression "(uint *)(param_2 + 0x28)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x28)" (( "(") (binary_expression "param_2 + 0x28" (identifier "param_2") (+ "+") (number_literal "0x28")) () ")"))))) (; ";")) (if_statement "if (uVar3 < uVar1) goto LAB_0023dc79;" (if "if") (parenthesized_expression "(uVar3 < uVar1)" (( "(") (binary_expression "uVar3 < uVar1" (identifier "uVar3") (< "<") (identifier "uVar1")) () ")")) (goto_statement "goto LAB_0023dc79;" (goto "goto") (statement_identifier "LAB_0023dc79") (; ";"))) (labeled_statement "LAB_0023dd7e:\n      if (uVar3 <= uVar1) {\n        param_2 = 0;\n        goto LAB_0023dcc5;\n      }" (statement_identifier "LAB_0023dd7e") (: ":") (if_statement "if (uVar3 <= uVar1) {\n        param_2 = 0;\n        goto LAB_0023dcc5;\n      }" (if "if") (parenthesized_expression "(uVar3 <= uVar1)" (( "(") (binary_expression "uVar3 <= uVar1" (identifier "uVar3") (<= "<=") (identifier "uVar1")) () ")")) (compound_statement "{\n        param_2 = 0;\n        goto LAB_0023dcc5;\n      }" ({ "{") (expression_statement "param_2 = 0;" (assignment_expression "param_2 = 0" (identifier "param_2") (= "=") (number_literal "0")) (; ";")) (goto_statement "goto LAB_0023dcc5;" (goto "goto") (statement_identifier "LAB_0023dcc5") (; ";")) (} "}")))) (} "}")) (else_clause "else if (uVar2 <= uVar4) {\n      uVar1 = *(uint *)(param_2 + 0x28);\n      uVar3 = (uint)param_3[1];\n      goto LAB_0023dd7e;\n    }" (else "else") (if_statement "if (uVar2 <= uVar4) {\n      uVar1 = *(uint *)(param_2 + 0x28);\n      uVar3 = (uint)param_3[1];\n      goto LAB_0023dd7e;\n    }" (if "if") (parenthesized_expression "(uVar2 <= uVar4)" (( "(") (binary_expression "uVar2 <= uVar4" (identifier "uVar2") (<= "<=") (identifier "uVar4")) () ")")) (compound_statement "{\n      uVar1 = *(uint *)(param_2 + 0x28);\n      uVar3 = (uint)param_3[1];\n      goto LAB_0023dd7e;\n    }" ({ "{") (expression_statement "uVar1 = *(uint *)(param_2 + 0x28);" (assignment_expression "uVar1 = *(uint *)(param_2 + 0x28)" (identifier "uVar1") (= "=") (pointer_expression "*(uint *)(param_2 + 0x28)" (* "*") (cast_expression "(uint *)(param_2 + 0x28)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x28)" (( "(") (binary_expression "param_2 + 0x28" (identifier "param_2") (+ "+") (number_literal "0x28")) () ")"))))) (; ";")) (expression_statement "uVar3 = (uint)param_3[1];" (assignment_expression "uVar3 = (uint)param_3[1]" (identifier "uVar3") (= "=") (cast_expression "(uint)param_3[1]" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (subscript_expression "param_3[1]" (identifier "param_3") ([ "[") (number_literal "1") (] "]")))) (; ";")) (goto_statement "goto LAB_0023dd7e;" (goto "goto") (statement_identifier "LAB_0023dd7e") (; ";")) (} "}"))))) (if_statement "if (*(ulong *)(param_1 + 0x20) == param_2) {\nLAB_0023dd3e:\n      auVar7._8_8_ = 0;\n      auVar7._0_8_ = param_2;\n      return auVar7 << 0x40;\n    }" (if "if") (parenthesized_expression "(*(ulong *)(param_1 + 0x20) == param_2)" (( "(") (binary_expression "*(ulong *)(param_1 + 0x20) == param_2" (pointer_expression "*(ulong *)(param_1 + 0x20)" (* "*") (cast_expression "(ulong *)(param_1 + 0x20)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x20)" (( "(") (binary_expression "param_1 + 0x20" (identifier "param_1") (+ "+") (number_literal "0x20")) () ")")))) (== "==") (identifier "param_2")) () ")")) (compound_statement "{\nLAB_0023dd3e:\n      auVar7._8_8_ = 0;\n      auVar7._0_8_ = param_2;\n      return auVar7 << 0x40;\n    }" ({ "{") (labeled_statement "LAB_0023dd3e:\n      auVar7._8_8_ = 0;" (statement_identifier "LAB_0023dd3e") (: ":") (expression_statement "auVar7._8_8_ = 0;" (assignment_expression "auVar7._8_8_ = 0" (field_expression "auVar7._8_8_" (identifier "auVar7") (. ".") (field_identifier "_8_8_")) (= "=") (number_literal "0")) (; ";"))) (expression_statement "auVar7._0_8_ = param_2;" (assignment_expression "auVar7._0_8_ = param_2" (field_expression "auVar7._0_8_" (identifier "auVar7") (. ".") (field_identifier "_0_8_")) (= "=") (identifier "param_2")) (; ";")) (return_statement "return auVar7 << 0x40;" (return "return") (binary_expression "auVar7 << 0x40" (identifier "auVar7") (<< "<<") (number_literal "0x40")) (; ";")) (} "}"))) (expression_statement "uVar4 = FUN_002dc030(param_2);" (assignment_expression "uVar4 = FUN_002dc030(param_2)" (identifier "uVar4") (= "=") (call_expression "FUN_002dc030(param_2)" (identifier "FUN_002dc030") (argument_list "(param_2)" (( "(") (identifier "param_2") () ")")))) (; ";")) (if_statement "if ((*(ulong *)(uVar4 + 0x20) <= uVar2) &&\n       ((uVar2 != *(ulong *)(uVar4 + 0x20) || (*(uint *)(uVar4 + 0x28) <= (uint)param_3[1]))))\n    goto LAB_0023dd58;" (if "if") (parenthesized_expression "((*(ulong *)(uVar4 + 0x20) <= uVar2) &&\n       ((uVar2 != *(ulong *)(uVar4 + 0x20) || (*(uint *)(uVar4 + 0x28) <= (uint)param_3[1]))))" (( "(") (binary_expression "(*(ulong *)(uVar4 + 0x20) <= uVar2) &&\n       ((uVar2 != *(ulong *)(uVar4 + 0x20) || (*(uint *)(uVar4 + 0x28) <= (uint)param_3[1])))" (parenthesized_expression "(*(ulong *)(uVar4 + 0x20) <= uVar2)" (( "(") (binary_expression "*(ulong *)(uVar4 + 0x20) <= uVar2" (pointer_expression "*(ulong *)(uVar4 + 0x20)" (* "*") (cast_expression "(ulong *)(uVar4 + 0x20)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(uVar4 + 0x20)" (( "(") (binary_expression "uVar4 + 0x20" (identifier "uVar4") (+ "+") (number_literal "0x20")) () ")")))) (<= "<=") (identifier "uVar2")) () ")")) (&& "&&") (parenthesized_expression "((uVar2 != *(ulong *)(uVar4 + 0x20) || (*(uint *)(uVar4 + 0x28) <= (uint)param_3[1])))" (( "(") (parenthesized_expression "(uVar2 != *(ulong *)(uVar4 + 0x20) || (*(uint *)(uVar4 + 0x28) <= (uint)param_3[1]))" (( "(") (binary_expression "uVar2 != *(ulong *)(uVar4 + 0x20) || (*(uint *)(uVar4 + 0x28) <= (uint)param_3[1])" (binary_expression "uVar2 != *(ulong *)(uVar4 + 0x20)" (identifier "uVar2") (!= "!=") (pointer_expression "*(ulong *)(uVar4 + 0x20)" (* "*") (cast_expression "(ulong *)(uVar4 + 0x20)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(uVar4 + 0x20)" (( "(") (binary_expression "uVar4 + 0x20" (identifier "uVar4") (+ "+") (number_literal "0x20")) () ")"))))) (|| "||") (parenthesized_expression "(*(uint *)(uVar4 + 0x28) <= (uint)param_3[1])" (( "(") (binary_expression "*(uint *)(uVar4 + 0x28) <= (uint)param_3[1]" (pointer_expression "*(uint *)(uVar4 + 0x28)" (* "*") (cast_expression "(uint *)(uVar4 + 0x28)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(uVar4 + 0x28)" (( "(") (binary_expression "uVar4 + 0x28" (identifier "uVar4") (+ "+") (number_literal "0x28")) () ")")))) (<= "<=") (cast_expression "(uint)param_3[1]" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (subscript_expression "param_3[1]" (identifier "param_3") ([ "[") (number_literal "1") (] "]")))) () ")"))) () ")")) () ")"))) () ")")) (goto_statement "goto LAB_0023dd58;" (goto "goto") (statement_identifier "LAB_0023dd58") (; ";"))) (expression_statement "uVar5 = 0;" (assignment_expression "uVar5 = 0" (identifier "uVar5") (= "=") (number_literal "0")) (; ";")) (if_statement "if (*(long *)(param_2 + 0x18) != 0) {\n      uVar5 = uVar4;\n      param_2 = uVar4;\n    }" (if "if") (parenthesized_expression "(*(long *)(param_2 + 0x18) != 0)" (( "(") (binary_expression "*(long *)(param_2 + 0x18) != 0" (pointer_expression "*(long *)(param_2 + 0x18)" (* "*") (cast_expression "(long *)(param_2 + 0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x18)" (( "(") (binary_expression "param_2 + 0x18" (identifier "param_2") (+ "+") (number_literal "0x18")) () ")")))) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      uVar5 = uVar4;\n      param_2 = uVar4;\n    }" ({ "{") (expression_statement "uVar5 = uVar4;" (assignment_expression "uVar5 = uVar4" (identifier "uVar5") (= "=") (identifier "uVar4")) (; ";")) (expression_statement "param_2 = uVar4;" (assignment_expression "param_2 = uVar4" (identifier "param_2") (= "=") (identifier "uVar4")) (; ";")) (} "}"))) (} "}")))) (labeled_statement "LAB_0023dcc5:\n  auVar6._8_8_ = param_2;" (statement_identifier "LAB_0023dcc5") (: ":") (expression_statement "auVar6._8_8_ = param_2;" (assignment_expression "auVar6._8_8_ = param_2" (field_expression "auVar6._8_8_" (identifier "auVar6") (. ".") (field_identifier "_8_8_")) (= "=") (identifier "param_2")) (; ";"))) (expression_statement "auVar6._0_8_ = uVar5;" (assignment_expression "auVar6._0_8_ = uVar5" (field_expression "auVar6._0_8_" (identifier "auVar6") (. ".") (field_identifier "_0_8_")) (= "=") (identifier "uVar5")) (; ";")) (return_statement "return auVar6;" (return "return") (identifier "auVar6") (; ";")) (} "}"))

/* DWARF original prototype: pair<std::_Rb_tree_node_base*,_std::_Rb_tree_node_base*>
   _M_get_insert_hint_unique_pos(_Rb_tree<std::pair<gold::Relobj*,_unsigned_int>,_std::pair<const_std::pair<gold::Relobj*,_unsigned_int>,_unsigned_int>,_std::_Select1st<std::pair<const_std::pair<gold::Relobj*,_unsigned_int>,_unsigned_int>_>,_std::less<std::pair<gold::Relobj*,_unsigned_int>_>,_std::allocator<std::pair<const_std::pair<gold::Relobj*,_unsigned_int>,_unsigned_int>_>_>
   * this, const_iterator __position, key_type * __k) */

pair<type_1::var_1*,type_4::var_1*> __thiscall
type_1::
type_2<type_1::pair<gold::type_7*,type_3>,type_4::pair<const_std::pair<gold::type_7*,type_3>,type_3>,type_4::_Select1st<type_1::pair<const_std::pair<gold::type_7*,type_3>,type_3>_>,type_4::less<type_1::pair<gold::type_7*,type_3>_>,type_4::allocator<type_1::pair<const_std::pair<gold::type_7*,type_3>,type_3>_>_>
::function_1
          (type_2<type_1::pair<gold::type_7*,type_3>,type_4::pair<const_std::pair<gold::type_7*,type_3>,type_3>,type_4::_Select1st<type_1::pair<const_std::pair<gold::type_7*,type_3>,type_3>_>,type_4::less<type_1::pair<gold::type_7*,type_3>_>,type_4::allocator<type_1::pair<const_std::pair<gold::type_7*,type_3>,type_3>_>_>
           *this,type_5 __position,type_6 *__k)

{
  type_7 *var_3;
  type_7 *var_4;
  type_8 var_10 [16];
  type_9 var_8;
  type_10 var_6;
  type_5 cVar6;
  type_9 var_9;
  pair<type_1::var_1*,type_4::var_1*> var_2;
  
  if ((type_11 *)__position._M_node == &(this->_M_impl).super__Rb_tree_header) {
    if ((this->_M_impl).super__Rb_tree_header._M_node_count != 0) {
      __position._M_node = (this->_M_impl).super__Rb_tree_header._M_header._M_right;
      if ((__k->first <= *(type_7 **)(__position._M_node + 1)) &&
         ((__k->first != *(type_7 **)(__position._M_node + 1) ||
          (__k->second <= *(type_9 *)&__position._M_node[1]._M_parent)))) goto LAB_0023dd58;
      goto LAB_0023dd3e;
    }
    goto LAB_0023dd58;
  }
  var_3 = __k->first;
  var_4 = *(type_7 **)(__position._M_node + 1);
  cVar6._M_node = __position._M_node;
  if (var_3 < var_4) {
LAB_0023dc79:
    if ((this->_M_impl).super__Rb_tree_header._M_header._M_left != __position._M_node) {
      var_6 = (type_10)var_5(__position._M_node);
      if ((var_3 <= *(type_7 **)(var_6 + 1)) &&
         ((var_3 != *(type_7 **)(var_6 + 1) || (__k->second <= *(type_9 *)&var_6[1]._M_parent)))) {
LAB_0023dd58:
        var_2 = var_7(this,__k);
        return var_2;
      }
      if (var_6->_M_right == (type_10)0x0) {
        cVar6._M_node = (type_10)0x0;
        __position._M_node = var_6;
      }
    }
  }
  else {
    if (var_4 == var_3) {
      var_8 = __k->second;
      var_9 = *(type_9 *)&__position._M_node[1]._M_parent;
      if (var_8 < var_9) goto LAB_0023dc79;
LAB_0023dd7e:
      if (var_8 <= var_9) {
        __position._M_node = (type_10)0x0;
        goto LAB_0023dcc5;
      }
    }
    else if (var_3 <= var_4) {
      var_9 = *(type_9 *)&__position._M_node[1]._M_parent;
      var_8 = __k->second;
      goto LAB_0023dd7e;
    }
    if ((this->_M_impl).super__Rb_tree_header._M_header._M_right == __position._M_node) {
LAB_0023dd3e:
      var_10._8_8_ = 0;
      var_10._0_8_ = __position._M_node;
      return (pair<type_1::var_1*,type_4::var_1*>)(var_10 << 0x40);
    }
    var_6 = (type_10)var_11(__position._M_node);
    if ((*(type_7 **)(var_6 + 1) <= var_3) &&
       ((var_3 != *(type_7 **)(var_6 + 1) || (*(type_9 *)&var_6[1]._M_parent <= __k->second))))
    goto LAB_0023dd58;
    cVar6._M_node = (type_10)0x0;
    if ((__position._M_node)->_M_right != (type_10)0x0) {
      cVar6._M_node = var_6;
      __position._M_node = var_6;
    }
  }
LAB_0023dcc5:
  var_2.second = __position._M_node;
  var_2.first = cVar6._M_node;
  return var_2;
}


(translation_unit (expression_statement (subscript_expression argument: (identifier) index: (number_literal)) (MISSING ";")) (macro_type_specifier name: (identifier) (ERROR (type_descriptor type: (sized_type_specifier type: (type_identifier))) (identifier) (identifier) (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator))) type: (type_descriptor type: (type_identifier))) (MISSING ";") (compound_statement (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (array_declarator declarator: (identifier) size: (number_literal))) (declaration type: (type_identifier) declarator: (array_declarator declarator: (identifier) size: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) consequence: (compound_statement (if_statement condition: (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: (number_literal))) consequence: (compound_statement (expression_statement (assignment_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))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (pointer_expression argument: (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 (parenthesized_expression (binary_expression left: (binary_expression left: (pointer_expression argument: (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: (cast_expression type: (type_descriptor type: (type_identifier)) value: (subscript_expression argument: (identifier) index: (number_literal))) 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)))))))))))) consequence: (goto_statement label: (statement_identifier))) (goto_statement label: (statement_identifier)))) (goto_statement label: (statement_identifier)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_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))))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (labeled_statement label: (statement_identifier) (if_statement condition: (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: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (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 (parenthesized_expression (binary_expression left: (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: (cast_expression type: (type_descriptor type: (type_identifier)) value: (subscript_expression argument: (identifier) index: (number_literal))) 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)))))))))))) consequence: (compound_statement (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier)))))) (return_statement (identifier)))) (if_statement condition: (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: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (identifier))))))))) alternative: (else_clause (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (subscript_expression argument: (identifier) index: (number_literal))))) (expression_statement (assignment_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))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (goto_statement label: (statement_identifier))) (labeled_statement label: (statement_identifier) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (goto_statement label: (statement_identifier)))))) alternative: (else_clause (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_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))))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (subscript_expression argument: (identifier) index: (number_literal))))) (goto_statement label: (statement_identifier)))))) (if_statement condition: (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: (identifier))) consequence: (compound_statement (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (field_expression argument: (identifier) field: (field_identifier)) right: (number_literal)))) (expression_statement (assignment_expression left: (field_expression argument: (identifier) field: (field_identifier)) right: (identifier))) (return_statement (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) right: (parenthesized_expression (parenthesized_expression (binary_expression left: (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: (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: (type_identifier)) value: (subscript_expression argument: (identifier) index: (number_literal)))))))))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (if_statement condition: (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: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))))))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (field_expression argument: (identifier) field: (field_identifier)) right: (identifier)))) (expression_statement (assignment_expression left: (field_expression argument: (identifier) field: (field_identifier)) right: (identifier))) (return_statement (identifier))))

undefined1  [16] MASKED(long param_1,ulong param_2,ulong *param_3)

{
  uint uVar1;
  ulong uVar2;
  uint uVar3;
  ulong uVar4;
  ulong uVar5;
  undefined1 auVar6 [16];
  undefined1 auVar7 [16];
  
  if (param_2 == param_1 + 8U) {
    if (*(long *)(param_1 + 0x28) != 0) {
      param_2 = *(ulong *)(param_1 + 0x20);
      if ((*param_3 <= *(ulong *)(param_2 + 0x20)) &&
         ((*param_3 != *(ulong *)(param_2 + 0x20) || ((uint)param_3[1] <= *(uint *)(param_2 + 0x28))
          ))) goto LAB_0023dd58;
      goto LAB_0023dd3e;
    }
    goto LAB_0023dd58;
  }
  uVar2 = *param_3;
  uVar4 = *(ulong *)(param_2 + 0x20);
  uVar5 = param_2;
  if (uVar2 < uVar4) {
LAB_0023dc79:
    if (*(ulong *)(param_1 + 0x18) != param_2) {
      uVar4 = thunk_FUN_002dbfd0(param_2,param_2,param_2);
      if ((uVar2 <= *(ulong *)(uVar4 + 0x20)) &&
         ((uVar2 != *(ulong *)(uVar4 + 0x20) || ((uint)param_3[1] <= *(uint *)(uVar4 + 0x28))))) {
LAB_0023dd58:
        auVar7 = FUN_0023db90(param_1,param_3);
        return auVar7;
      }
      if (*(long *)(uVar4 + 0x18) == 0) {
        uVar5 = 0;
        param_2 = uVar4;
      }
    }
  }
  else {
    if (uVar4 == uVar2) {
      uVar3 = (uint)param_3[1];
      uVar1 = *(uint *)(param_2 + 0x28);
      if (uVar3 < uVar1) goto LAB_0023dc79;
LAB_0023dd7e:
      if (uVar3 <= uVar1) {
        param_2 = 0;
        goto LAB_0023dcc5;
      }
    }
    else if (uVar2 <= uVar4) {
      uVar1 = *(uint *)(param_2 + 0x28);
      uVar3 = (uint)param_3[1];
      goto LAB_0023dd7e;
    }
    if (*(ulong *)(param_1 + 0x20) == param_2) {
LAB_0023dd3e:
      auVar7._8_8_ = 0;
      auVar7._0_8_ = param_2;
      return auVar7 << 0x40;
    }
    uVar4 = FUN_002dc030(param_2);
    if ((*(ulong *)(uVar4 + 0x20) <= uVar2) &&
       ((uVar2 != *(ulong *)(uVar4 + 0x20) || (*(uint *)(uVar4 + 0x28) <= (uint)param_3[1]))))
    goto LAB_0023dd58;
    uVar5 = 0;
    if (*(long *)(param_2 + 0x18) != 0) {
      uVar5 = uVar4;
      param_2 = uVar4;
    }
  }
LAB_0023dcc5:
  auVar6._8_8_ = param_2;
  auVar6._0_8_ = uVar5;
  return auVar6;
}

