
/* DWARF original prototype: pair<std::_Rb_tree_node_base*,_std::_Rb_tree_node_base*>
   _M_get_insert_hint_unique_pos(_Rb_tree<long_int,_std::pair<long_int_const,_gold::Archive_member>,_std::_Select1st<std::pair<long_int_const,_gold::Archive_member>_>,_std::less<long_int>,_std::allocator<std::pair<long_int_const,_gold::Archive_member>_>_>
   * this, const_iterator __position, key_type.conflict * __k) */

pair<std::_Rb_tree_node_base*,_std::_Rb_tree_node_base*> __thiscall
std::
_Rb_tree<long_int,_std::pair<long_int_const,_gold::Archive_member>,_std::_Select1st<std::pair<long_int_const,_gold::Archive_member>_>,_std::less<long_int>,_std::allocator<std::pair<long_int_const,_gold::Archive_member>_>_>
::_M_get_insert_hint_unique_pos
          (_Rb_tree<long_int,_std::pair<long_int_const,_gold::Archive_member>,_std::_Select1st<std::pair<long_int_const,_gold::Archive_member>_>,_std::less<long_int>,_std::allocator<std::pair<long_int_const,_gold::Archive_member>_>_>
           *this,const_iterator __position,key_type_conflict *__k)

{
  long lVar1;
  _Base_ptr p_Var2;
  undefined1 auVar3 [16];
  const_iterator cVar4;
  const_iterator cVar5;
  pair<std::_Rb_tree_node_base*,_std::_Rb_tree_node_base*> pVar6;
  pair<std::_Rb_tree_node_base*,_std::_Rb_tree_node_base*> pVar7;
  
  if ((_Rb_tree_header *)__position._M_node != &(this->_M_impl).super__Rb_tree_header) {
    lVar1 = *__k;
    if (lVar1 < *(long *)(__position._M_node + 1)) {
      cVar5._M_node = (this->_M_impl).super__Rb_tree_header._M_header._M_left;
      cVar4._M_node = cVar5._M_node;
      if (cVar5._M_node != __position._M_node) {
        cVar4._M_node = (_Base_ptr)_Rb_tree_decrement(__position._M_node);
        if (lVar1 <= *(long *)(cVar4._M_node + 1)) goto LAB_0033546c;
        cVar5._M_node = (_Base_ptr)0x0;
        if ((cVar4._M_node)->_M_right != (_Base_ptr)0x0) {
          cVar5._M_node = __position._M_node;
          cVar4._M_node = __position._M_node;
        }
      }
    }
    else {
      if (lVar1 <= *(long *)(__position._M_node + 1)) {
        pVar7.second = (_Rb_tree_node_base *)0x0;
        pVar7.first = __position._M_node;
        return pVar7;
      }
      cVar4._M_node = (this->_M_impl).super__Rb_tree_header._M_header._M_right;
      cVar5._M_node = (_Base_ptr)0x0;
      if (cVar4._M_node != __position._M_node) {
        cVar5._M_node = (_Base_ptr)_Rb_tree_increment(__position._M_node);
        if (*(long *)(cVar5._M_node + 1) <= lVar1) goto LAB_0033546c;
        cVar4._M_node = cVar5._M_node;
        if ((__position._M_node)->_M_right == (_Base_ptr)0x0) {
          cVar5._M_node = (_Base_ptr)0x0;
          cVar4._M_node = __position._M_node;
        }
      }
    }
    pVar6.second = cVar4._M_node;
    pVar6.first = cVar5._M_node;
    return pVar6;
  }
  if (((this->_M_impl).super__Rb_tree_header._M_node_count != 0) &&
     (p_Var2 = (this->_M_impl).super__Rb_tree_header._M_header._M_right,
     *(long *)(p_Var2 + 1) < *__k)) {
    auVar3._8_8_ = 0;
    auVar3._0_8_ = p_Var2;
    return (pair<std::_Rb_tree_node_base*,_std::_Rb_tree_node_base*>)(auVar3 << 0x40);
  }
LAB_0033546c:
  pVar7 = _M_get_insert_unique_pos(this,__k);
  return pVar7;
}



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

{
  long lVar1;
  long *plVar2;
  long *plVar3;
  undefined1 auVar4 [16];
  undefined1 auVar5 [16];
  undefined1 auVar6 [16];
  
  if (param_2 != (long *)(param_1 + 8)) {
    lVar1 = *param_3;
    if (lVar1 < param_2[4]) {
      plVar3 = *(long **)(param_1 + 0x18);
      plVar2 = plVar3;
      if (plVar3 != param_2) {
        plVar2 = (long *)thunk_FUN_0049f690(param_2,param_2,plVar3);
        plVar3 = plVar2;
        if (lVar1 <= plVar2[4]) goto LAB_0033546c;
        plVar3 = (long *)0x0;
        if (plVar2[3] != 0) {
          plVar3 = param_2;
          plVar2 = param_2;
        }
      }
    }
    else {
      if (lVar1 <= param_2[4]) {
        auVar6._8_8_ = 0;
        auVar6._0_8_ = param_2;
        return auVar6;
      }
      plVar2 = *(long **)(param_1 + 0x20);
      plVar3 = (long *)0x0;
      if (plVar2 != param_2) {
        plVar3 = (long *)FUN_0049f6f0(param_2,param_2,plVar2);
        if (plVar3[4] <= lVar1) goto LAB_0033546c;
        plVar2 = plVar3;
        if (param_2[3] == 0) {
          plVar3 = (long *)0x0;
          plVar2 = param_2;
        }
      }
    }
    auVar4._8_8_ = plVar2;
    auVar4._0_8_ = plVar3;
    return auVar4;
  }
  plVar3 = param_3;
  if ((*(long *)(param_1 + 0x28) != 0) && (*(long *)(*(ulong *)(param_1 + 0x20) + 0x20) < *param_3))
  {
    auVar5._8_8_ = 0;
    auVar5._0_8_ = *(ulong *)(param_1 + 0x20);
    return auVar5 << 0x40;
  }
LAB_0033546c:
  auVar5 = FUN_00335330(param_1,param_3,plVar3);
  return auVar5;
}


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 0x00335458
MOV RBX,RSI
MOV R13,qword ptr [RDX]
CMP R13,qword ptr [RSI + 0x20]
JGE 0x00335420
MOV RAX,qword ptr [RDI + 0x18]
MOV RDX,RAX
CMP RAX,RSI
JZ 0x00335414
MOV RDI,RSI
CALL 0x0049f750
MOV RDX,RAX
CMP R13,qword ptr [RAX + 0x20]
JLE 0x0033546c
CMP qword ptr [RAX + 0x18],0x0
MOV EAX,0x0
CMOVNZ RAX,RBX
CMOVNZ RDX,RBX
ADD RSP,0x8
POP RBX
POP RBP
POP R12
POP R13
RET
JLE 0x00335488
MOV RCX,qword ptr [RDI + 0x20]
XOR EAX,EAX
MOV RDX,RCX
CMP RCX,RSI
JZ 0x00335414
MOV RDI,RSI
CALL 0x0049f6f0
MOV RDX,RAX
CMP R13,qword ptr [RAX + 0x20]
JGE 0x0033546c
CMP qword ptr [RBX + 0x18],0x0
MOV EAX,0x0
CMOVNZ RAX,RDX
CMOVZ RDX,RBX
JMP 0x00335414
CMP qword ptr [RDI + 0x28],0x0
JZ 0x0033546c
MOV RBX,qword ptr [RDI + 0x20]
MOV RAX,qword ptr [RDX]
CMP qword ptr [RBX + 0x20],RAX
JL 0x003354a0
ADD RSP,0x8
MOV RSI,R12
MOV RDI,RBP
POP RBX
POP RBP
POP R12
POP R13
JMP 0x00335330
ADD RSP,0x8
MOV RAX,RSI
XOR EDX,EDX
POP RBX
POP RBP
POP R12
POP R13
RET
ADD RSP,0x8
MOV RDX,RBX
XOR EAX,EAX
POP RBX
POP RBP
POP R12
POP R13
RET
(translation_unit "undefined1  [16] FUN_003353c0(long param_1,long *param_2,long *param_3)\n\n{\n  long lVar1;\n  long *plVar2;\n  long *plVar3;\n  undefined1 auVar4 [16];\n  undefined1 auVar5 [16];\n  undefined1 auVar6 [16];\n  \n  if (param_2 != (long *)(param_1 + 8)) {\n    lVar1 = *param_3;\n    if (lVar1 < param_2[4]) {\n      plVar3 = *(long **)(param_1 + 0x18);\n      plVar2 = plVar3;\n      if (plVar3 != param_2) {\n        plVar2 = (long *)thunk_FUN_0049f690(param_2,param_2,plVar3);\n        plVar3 = plVar2;\n        if (lVar1 <= plVar2[4]) goto LAB_0033546c;\n        plVar3 = (long *)0x0;\n        if (plVar2[3] != 0) {\n          plVar3 = param_2;\n          plVar2 = param_2;\n        }\n      }\n    }\n    else {\n      if (lVar1 <= param_2[4]) {\n        auVar6._8_8_ = 0;\n        auVar6._0_8_ = param_2;\n        return auVar6;\n      }\n      plVar2 = *(long **)(param_1 + 0x20);\n      plVar3 = (long *)0x0;\n      if (plVar2 != param_2) {\n        plVar3 = (long *)FUN_0049f6f0(param_2,param_2,plVar2);\n        if (plVar3[4] <= lVar1) goto LAB_0033546c;\n        plVar2 = plVar3;\n        if (param_2[3] == 0) {\n          plVar3 = (long *)0x0;\n          plVar2 = param_2;\n        }\n      }\n    }\n    auVar4._8_8_ = plVar2;\n    auVar4._0_8_ = plVar3;\n    return auVar4;\n  }\n  plVar3 = param_3;\n  if ((*(long *)(param_1 + 0x28) != 0) && (*(long *)(*(ulong *)(param_1 + 0x20) + 0x20) < *param_3))\n  {\n    auVar5._8_8_ = 0;\n    auVar5._0_8_ = *(ulong *)(param_1 + 0x20);\n    return auVar5 << 0x40;\n  }\nLAB_0033546c:\n  auVar5 = FUN_00335330(param_1,param_3,plVar3);\n  return auVar5;\n}\n\n" (expression_statement "undefined1  [16]" (subscript_expression "undefined1  [16]" identifier [ number_literal ]) ;) (declaration "FUN_003353c0(long param_1,long *param_2,long *param_3)\n\n{\n  long lVar1;" (macro_type_specifier "FUN_003353c0(long param_1,long *" identifier ( (ERROR "long param_1," (type_descriptor "long param_1" (sized_type_specifier "long param_1" long type_identifier)) ,) (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) )) identifier , (ERROR "long *param_3)\n\n{\n  long" identifier (pointer_declarator "*param_3" * identifier) ) { long) identifier ;) (declaration "long *plVar2;" (sized_type_specifier "long" long) (pointer_declarator "*plVar2" * identifier) ;) (declaration "long *plVar3;" (sized_type_specifier "long" long) (pointer_declarator "*plVar3" * identifier) ;) (declaration "undefined1 auVar4 [16];" type_identifier (array_declarator "auVar4 [16]" identifier [ number_literal ]) ;) (declaration "undefined1 auVar5 [16];" type_identifier (array_declarator "auVar5 [16]" identifier [ number_literal ]) ;) (declaration "undefined1 auVar6 [16];" type_identifier (array_declarator "auVar6 [16]" identifier [ number_literal ]) ;) (if_statement "if (param_2 != (long *)(param_1 + 8)) {\n    lVar1 = *param_3;\n    if (lVar1 < param_2[4]) {\n      plVar3 = *(long **)(param_1 + 0x18);\n      plVar2 = plVar3;\n      if (plVar3 != param_2) {\n        plVar2 = (long *)thunk_FUN_0049f690(param_2,param_2,plVar3);\n        plVar3 = plVar2;\n        if (lVar1 <= plVar2[4]) goto LAB_0033546c;\n        plVar3 = (long *)0x0;\n        if (plVar2[3] != 0) {\n          plVar3 = param_2;\n          plVar2 = param_2;\n        }\n      }\n    }\n    else {\n      if (lVar1 <= param_2[4]) {\n        auVar6._8_8_ = 0;\n        auVar6._0_8_ = param_2;\n        return auVar6;\n      }\n      plVar2 = *(long **)(param_1 + 0x20);\n      plVar3 = (long *)0x0;\n      if (plVar2 != param_2) {\n        plVar3 = (long *)FUN_0049f6f0(param_2,param_2,plVar2);\n        if (plVar3[4] <= lVar1) goto LAB_0033546c;\n        plVar2 = plVar3;\n        if (param_2[3] == 0) {\n          plVar3 = (long *)0x0;\n          plVar2 = param_2;\n        }\n      }\n    }\n    auVar4._8_8_ = plVar2;\n    auVar4._0_8_ = plVar3;\n    return auVar4;\n  }" if (parenthesized_expression "(param_2 != (long *)(param_1 + 8))" ( (binary_expression "param_2 != (long *)(param_1 + 8)" identifier != (cast_expression "(long *)(param_1 + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) )) (compound_statement "{\n    lVar1 = *param_3;\n    if (lVar1 < param_2[4]) {\n      plVar3 = *(long **)(param_1 + 0x18);\n      plVar2 = plVar3;\n      if (plVar3 != param_2) {\n        plVar2 = (long *)thunk_FUN_0049f690(param_2,param_2,plVar3);\n        plVar3 = plVar2;\n        if (lVar1 <= plVar2[4]) goto LAB_0033546c;\n        plVar3 = (long *)0x0;\n        if (plVar2[3] != 0) {\n          plVar3 = param_2;\n          plVar2 = param_2;\n        }\n      }\n    }\n    else {\n      if (lVar1 <= param_2[4]) {\n        auVar6._8_8_ = 0;\n        auVar6._0_8_ = param_2;\n        return auVar6;\n      }\n      plVar2 = *(long **)(param_1 + 0x20);\n      plVar3 = (long *)0x0;\n      if (plVar2 != param_2) {\n        plVar3 = (long *)FUN_0049f6f0(param_2,param_2,plVar2);\n        if (plVar3[4] <= lVar1) goto LAB_0033546c;\n        plVar2 = plVar3;\n        if (param_2[3] == 0) {\n          plVar3 = (long *)0x0;\n          plVar2 = param_2;\n        }\n      }\n    }\n    auVar4._8_8_ = plVar2;\n    auVar4._0_8_ = plVar3;\n    return auVar4;\n  }" { (expression_statement "lVar1 = *param_3;" (assignment_expression "lVar1 = *param_3" identifier = (pointer_expression "*param_3" * identifier)) ;) (if_statement "if (lVar1 < param_2[4]) {\n      plVar3 = *(long **)(param_1 + 0x18);\n      plVar2 = plVar3;\n      if (plVar3 != param_2) {\n        plVar2 = (long *)thunk_FUN_0049f690(param_2,param_2,plVar3);\n        plVar3 = plVar2;\n        if (lVar1 <= plVar2[4]) goto LAB_0033546c;\n        plVar3 = (long *)0x0;\n        if (plVar2[3] != 0) {\n          plVar3 = param_2;\n          plVar2 = param_2;\n        }\n      }\n    }\n    else {\n      if (lVar1 <= param_2[4]) {\n        auVar6._8_8_ = 0;\n        auVar6._0_8_ = param_2;\n        return auVar6;\n      }\n      plVar2 = *(long **)(param_1 + 0x20);\n      plVar3 = (long *)0x0;\n      if (plVar2 != param_2) {\n        plVar3 = (long *)FUN_0049f6f0(param_2,param_2,plVar2);\n        if (plVar3[4] <= lVar1) goto LAB_0033546c;\n        plVar2 = plVar3;\n        if (param_2[3] == 0) {\n          plVar3 = (long *)0x0;\n          plVar2 = param_2;\n        }\n      }\n    }" if (parenthesized_expression "(lVar1 < param_2[4])" ( (binary_expression "lVar1 < param_2[4]" identifier < (subscript_expression "param_2[4]" identifier [ number_literal ])) )) (compound_statement "{\n      plVar3 = *(long **)(param_1 + 0x18);\n      plVar2 = plVar3;\n      if (plVar3 != param_2) {\n        plVar2 = (long *)thunk_FUN_0049f690(param_2,param_2,plVar3);\n        plVar3 = plVar2;\n        if (lVar1 <= plVar2[4]) goto LAB_0033546c;\n        plVar3 = (long *)0x0;\n        if (plVar2[3] != 0) {\n          plVar3 = param_2;\n          plVar2 = param_2;\n        }\n      }\n    }" { (expression_statement "plVar3 = *(long **)(param_1 + 0x18);" (assignment_expression "plVar3 = *(long **)(param_1 + 0x18)" identifier = (pointer_expression "*(long **)(param_1 + 0x18)" * (cast_expression "(long **)(param_1 + 0x18)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) ))))) ;) (expression_statement "plVar2 = plVar3;" (assignment_expression "plVar2 = plVar3" identifier = identifier) ;) (if_statement "if (plVar3 != param_2) {\n        plVar2 = (long *)thunk_FUN_0049f690(param_2,param_2,plVar3);\n        plVar3 = plVar2;\n        if (lVar1 <= plVar2[4]) goto LAB_0033546c;\n        plVar3 = (long *)0x0;\n        if (plVar2[3] != 0) {\n          plVar3 = param_2;\n          plVar2 = param_2;\n        }\n      }" if (parenthesized_expression "(plVar3 != param_2)" ( (binary_expression "plVar3 != param_2" identifier != identifier) )) (compound_statement "{\n        plVar2 = (long *)thunk_FUN_0049f690(param_2,param_2,plVar3);\n        plVar3 = plVar2;\n        if (lVar1 <= plVar2[4]) goto LAB_0033546c;\n        plVar3 = (long *)0x0;\n        if (plVar2[3] != 0) {\n          plVar3 = param_2;\n          plVar2 = param_2;\n        }\n      }" { (expression_statement "plVar2 = (long *)thunk_FUN_0049f690(param_2,param_2,plVar3);" (assignment_expression "plVar2 = (long *)thunk_FUN_0049f690(param_2,param_2,plVar3)" identifier = (cast_expression "(long *)thunk_FUN_0049f690(param_2,param_2,plVar3)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (call_expression "thunk_FUN_0049f690(param_2,param_2,plVar3)" identifier (argument_list "(param_2,param_2,plVar3)" ( identifier , identifier , identifier ))))) ;) (expression_statement "plVar3 = plVar2;" (assignment_expression "plVar3 = plVar2" identifier = identifier) ;) (if_statement "if (lVar1 <= plVar2[4]) goto LAB_0033546c;" if (parenthesized_expression "(lVar1 <= plVar2[4])" ( (binary_expression "lVar1 <= plVar2[4]" identifier <= (subscript_expression "plVar2[4]" identifier [ number_literal ])) )) (goto_statement "goto LAB_0033546c;" goto statement_identifier ;)) (expression_statement "plVar3 = (long *)0x0;" (assignment_expression "plVar3 = (long *)0x0" identifier = (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (if_statement "if (plVar2[3] != 0) {\n          plVar3 = param_2;\n          plVar2 = param_2;\n        }" if (parenthesized_expression "(plVar2[3] != 0)" ( (binary_expression "plVar2[3] != 0" (subscript_expression "plVar2[3]" identifier [ number_literal ]) != number_literal) )) (compound_statement "{\n          plVar3 = param_2;\n          plVar2 = param_2;\n        }" { (expression_statement "plVar3 = param_2;" (assignment_expression "plVar3 = param_2" identifier = identifier) ;) (expression_statement "plVar2 = param_2;" (assignment_expression "plVar2 = param_2" identifier = identifier) ;) })) })) }) (else_clause "else {\n      if (lVar1 <= param_2[4]) {\n        auVar6._8_8_ = 0;\n        auVar6._0_8_ = param_2;\n        return auVar6;\n      }\n      plVar2 = *(long **)(param_1 + 0x20);\n      plVar3 = (long *)0x0;\n      if (plVar2 != param_2) {\n        plVar3 = (long *)FUN_0049f6f0(param_2,param_2,plVar2);\n        if (plVar3[4] <= lVar1) goto LAB_0033546c;\n        plVar2 = plVar3;\n        if (param_2[3] == 0) {\n          plVar3 = (long *)0x0;\n          plVar2 = param_2;\n        }\n      }\n    }" else (compound_statement "{\n      if (lVar1 <= param_2[4]) {\n        auVar6._8_8_ = 0;\n        auVar6._0_8_ = param_2;\n        return auVar6;\n      }\n      plVar2 = *(long **)(param_1 + 0x20);\n      plVar3 = (long *)0x0;\n      if (plVar2 != param_2) {\n        plVar3 = (long *)FUN_0049f6f0(param_2,param_2,plVar2);\n        if (plVar3[4] <= lVar1) goto LAB_0033546c;\n        plVar2 = plVar3;\n        if (param_2[3] == 0) {\n          plVar3 = (long *)0x0;\n          plVar2 = param_2;\n        }\n      }\n    }" { (if_statement "if (lVar1 <= param_2[4]) {\n        auVar6._8_8_ = 0;\n        auVar6._0_8_ = param_2;\n        return auVar6;\n      }" if (parenthesized_expression "(lVar1 <= param_2[4])" ( (binary_expression "lVar1 <= param_2[4]" identifier <= (subscript_expression "param_2[4]" identifier [ number_literal ])) )) (compound_statement "{\n        auVar6._8_8_ = 0;\n        auVar6._0_8_ = param_2;\n        return auVar6;\n      }" { (expression_statement "auVar6._8_8_ = 0;" (assignment_expression "auVar6._8_8_ = 0" (field_expression "auVar6._8_8_" identifier . field_identifier) = number_literal) ;) (expression_statement "auVar6._0_8_ = param_2;" (assignment_expression "auVar6._0_8_ = param_2" (field_expression "auVar6._0_8_" identifier . field_identifier) = identifier) ;) (return_statement "return auVar6;" return identifier ;) })) (expression_statement "plVar2 = *(long **)(param_1 + 0x20);" (assignment_expression "plVar2 = *(long **)(param_1 + 0x20)" identifier = (pointer_expression "*(long **)(param_1 + 0x20)" * (cast_expression "(long **)(param_1 + 0x20)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x20)" ( (binary_expression "param_1 + 0x20" identifier + number_literal) ))))) ;) (expression_statement "plVar3 = (long *)0x0;" (assignment_expression "plVar3 = (long *)0x0" identifier = (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (if_statement "if (plVar2 != param_2) {\n        plVar3 = (long *)FUN_0049f6f0(param_2,param_2,plVar2);\n        if (plVar3[4] <= lVar1) goto LAB_0033546c;\n        plVar2 = plVar3;\n        if (param_2[3] == 0) {\n          plVar3 = (long *)0x0;\n          plVar2 = param_2;\n        }\n      }" if (parenthesized_expression "(plVar2 != param_2)" ( (binary_expression "plVar2 != param_2" identifier != identifier) )) (compound_statement "{\n        plVar3 = (long *)FUN_0049f6f0(param_2,param_2,plVar2);\n        if (plVar3[4] <= lVar1) goto LAB_0033546c;\n        plVar2 = plVar3;\n        if (param_2[3] == 0) {\n          plVar3 = (long *)0x0;\n          plVar2 = param_2;\n        }\n      }" { (expression_statement "plVar3 = (long *)FUN_0049f6f0(param_2,param_2,plVar2);" (assignment_expression "plVar3 = (long *)FUN_0049f6f0(param_2,param_2,plVar2)" identifier = (cast_expression "(long *)FUN_0049f6f0(param_2,param_2,plVar2)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0049f6f0(param_2,param_2,plVar2)" identifier (argument_list "(param_2,param_2,plVar2)" ( identifier , identifier , identifier ))))) ;) (if_statement "if (plVar3[4] <= lVar1) goto LAB_0033546c;" if (parenthesized_expression "(plVar3[4] <= lVar1)" ( (binary_expression "plVar3[4] <= lVar1" (subscript_expression "plVar3[4]" identifier [ number_literal ]) <= identifier) )) (goto_statement "goto LAB_0033546c;" goto statement_identifier ;)) (expression_statement "plVar2 = plVar3;" (assignment_expression "plVar2 = plVar3" identifier = identifier) ;) (if_statement "if (param_2[3] == 0) {\n          plVar3 = (long *)0x0;\n          plVar2 = param_2;\n        }" if (parenthesized_expression "(param_2[3] == 0)" ( (binary_expression "param_2[3] == 0" (subscript_expression "param_2[3]" identifier [ number_literal ]) == number_literal) )) (compound_statement "{\n          plVar3 = (long *)0x0;\n          plVar2 = param_2;\n        }" { (expression_statement "plVar3 = (long *)0x0;" (assignment_expression "plVar3 = (long *)0x0" identifier = (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "plVar2 = param_2;" (assignment_expression "plVar2 = param_2" identifier = identifier) ;) })) })) }))) (expression_statement "auVar4._8_8_ = plVar2;" (assignment_expression "auVar4._8_8_ = plVar2" (field_expression "auVar4._8_8_" identifier . field_identifier) = identifier) ;) (expression_statement "auVar4._0_8_ = plVar3;" (assignment_expression "auVar4._0_8_ = plVar3" (field_expression "auVar4._0_8_" identifier . field_identifier) = identifier) ;) (return_statement "return auVar4;" return identifier ;) })) (expression_statement "plVar3 = param_3;" (assignment_expression "plVar3 = param_3" identifier = identifier) ;) (if_statement "if ((*(long *)(param_1 + 0x28) != 0) && (*(long *)(*(ulong *)(param_1 + 0x20) + 0x20) < *param_3))\n  {\n    auVar5._8_8_ = 0;\n    auVar5._0_8_ = *(ulong *)(param_1 + 0x20);\n    return auVar5 << 0x40;\n  }" if (parenthesized_expression "((*(long *)(param_1 + 0x28) != 0) && (*(long *)(*(ulong *)(param_1 + 0x20) + 0x20) < *param_3))" ( (binary_expression "(*(long *)(param_1 + 0x28) != 0) && (*(long *)(*(ulong *)(param_1 + 0x20) + 0x20) < *param_3)" (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) )) && (parenthesized_expression "(*(long *)(*(ulong *)(param_1 + 0x20) + 0x20) < *param_3)" ( (binary_expression "*(long *)(*(ulong *)(param_1 + 0x20) + 0x20) < *param_3" (pointer_expression "*(long *)(*(ulong *)(param_1 + 0x20) + 0x20)" * (cast_expression "(long *)(*(ulong *)(param_1 + 0x20) + 0x20)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(ulong *)(param_1 + 0x20) + 0x20)" ( (binary_expression "*(ulong *)(param_1 + 0x20) + 0x20" (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) )))) + number_literal) )))) < (pointer_expression "*param_3" * identifier)) ))) )) (compound_statement "{\n    auVar5._8_8_ = 0;\n    auVar5._0_8_ = *(ulong *)(param_1 + 0x20);\n    return auVar5 << 0x40;\n  }" { (expression_statement "auVar5._8_8_ = 0;" (assignment_expression "auVar5._8_8_ = 0" (field_expression "auVar5._8_8_" identifier . field_identifier) = number_literal) ;) (expression_statement "auVar5._0_8_ = *(ulong *)(param_1 + 0x20);" (assignment_expression "auVar5._0_8_ = *(ulong *)(param_1 + 0x20)" (field_expression "auVar5._0_8_" identifier . field_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) ))))) ;) (return_statement "return auVar5 << 0x40;" return (binary_expression "auVar5 << 0x40" identifier << number_literal) ;) })) (labeled_statement "LAB_0033546c:\n  auVar5 = FUN_00335330(param_1,param_3,plVar3);" statement_identifier : (expression_statement "auVar5 = FUN_00335330(param_1,param_3,plVar3);" (assignment_expression "auVar5 = FUN_00335330(param_1,param_3,plVar3)" identifier = (call_expression "FUN_00335330(param_1,param_3,plVar3)" identifier (argument_list "(param_1,param_3,plVar3)" ( identifier , identifier , identifier )))) ;)) (return_statement "return auVar5;" return identifier ;) (ERROR "}" }))
(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<long_int,_std::pair<long_int_const,_gold::Archive_member>,_std::_Select1st<std::pair<long_int_const,_gold::Archive_member>_>,_std::less<long_int>,_std::allocator<std::pair<long_int_const,_gold::Archive_member>_>_>\n   * this, const_iterator __position, key_type.conflict * __k) */\n\npair<std::_Rb_tree_node_base*,_std::_Rb_tree_node_base*> __thiscall\nstd::\n_Rb_tree<long_int,_std::pair<long_int_const,_gold::Archive_member>,_std::_Select1st<std::pair<long_int_const,_gold::Archive_member>_>,_std::less<long_int>,_std::allocator<std::pair<long_int_const,_gold::Archive_member>_>_>\n::_M_get_insert_hint_unique_pos\n          (_Rb_tree<long_int,_std::pair<long_int_const,_gold::Archive_member>,_std::_Select1st<std::pair<long_int_const,_gold::Archive_member>_>,_std::less<long_int>,_std::allocator<std::pair<long_int_const,_gold::Archive_member>_>_>\n           *this,const_iterator __position,key_type_conflict *__k)\n\n{\n  long lVar1;\n  _Base_ptr p_Var2;\n  undefined1 auVar3 [16];\n  const_iterator cVar4;\n  const_iterator cVar5;\n  pair<std::_Rb_tree_node_base*,_std::_Rb_tree_node_base*> pVar6;\n  pair<std::_Rb_tree_node_base*,_std::_Rb_tree_node_base*> pVar7;\n  \n  if ((_Rb_tree_header *)__position._M_node != &(this->_M_impl).super__Rb_tree_header) {\n    lVar1 = *__k;\n    if (lVar1 < *(long *)(__position._M_node + 1)) {\n      cVar5._M_node = (this->_M_impl).super__Rb_tree_header._M_header._M_left;\n      cVar4._M_node = cVar5._M_node;\n      if (cVar5._M_node != __position._M_node) {\n        cVar4._M_node = (_Base_ptr)_Rb_tree_decrement(__position._M_node);\n        if (lVar1 <= *(long *)(cVar4._M_node + 1)) goto LAB_0033546c;\n        cVar5._M_node = (_Base_ptr)0x0;\n        if ((cVar4._M_node)->_M_right != (_Base_ptr)0x0) {\n          cVar5._M_node = __position._M_node;\n          cVar4._M_node = __position._M_node;\n        }\n      }\n    }\n    else {\n      if (lVar1 <= *(long *)(__position._M_node + 1)) {\n        pVar7.second = (_Rb_tree_node_base *)0x0;\n        pVar7.first = __position._M_node;\n        return pVar7;\n      }\n      cVar4._M_node = (this->_M_impl).super__Rb_tree_header._M_header._M_right;\n      cVar5._M_node = (_Base_ptr)0x0;\n      if (cVar4._M_node != __position._M_node) {\n        cVar5._M_node = (_Base_ptr)_Rb_tree_increment(__position._M_node);\n        if (*(long *)(cVar5._M_node + 1) <= lVar1) goto LAB_0033546c;\n        cVar4._M_node = cVar5._M_node;\n        if ((__position._M_node)->_M_right == (_Base_ptr)0x0) {\n          cVar5._M_node = (_Base_ptr)0x0;\n          cVar4._M_node = __position._M_node;\n        }\n      }\n    }\n    pVar6.second = cVar4._M_node;\n    pVar6.first = cVar5._M_node;\n    return pVar6;\n  }\n  if (((this->_M_impl).super__Rb_tree_header._M_node_count != 0) &&\n     (p_Var2 = (this->_M_impl).super__Rb_tree_header._M_header._M_right,\n     *(long *)(p_Var2 + 1) < *__k)) {\n    auVar3._8_8_ = 0;\n    auVar3._0_8_ = p_Var2;\n    return (pair<std::_Rb_tree_node_base*,_std::_Rb_tree_node_base*>)(auVar3 << 0x40);\n  }\nLAB_0033546c:\n  pVar7 = _M_get_insert_unique_pos(this,__k);\n  return pVar7;\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<long_int,_std::pair<long_int_const,_gold::Archive_member>,_std::_Select1st<std::pair<long_int_const,_gold::Archive_member>_>,_std::less<long_int>,_std::allocator<std::pair<long_int_const,_gold::Archive_member>_>_>\n::_M_get_insert_hint_unique_pos\n          (_Rb_tree<long_int,_std::pair<long_int_const,_gold::Archive_member>,_std::_Select1st<std::pair<long_int_const,_gold::Archive_member>_>,_std::less<long_int>,_std::allocator<std::pair<long_int_const,_gold::Archive_member>_>_>\n           *this,const_iterator __position,key_type_conflict *__k)\n\n{\n  long lVar1;\n  _Base_ptr p_Var2;\n  undefined1 auVar3 [16];\n  const_iterator cVar4;\n  const_iterator cVar5;\n  pair<std::_Rb_tree_node_base*,_std::_Rb_tree_node_base*> pVar6;\n  pair<std::_Rb_tree_node_base*,_std::_Rb_tree_node_base*> pVar7;\n  \n  if ((_Rb_tree_header *)__position._M_node != &(this->_M_impl).super__Rb_tree_header) {\n    lVar1 = *__k;\n    if (lVar1 < *(long *)(__position._M_node + 1)) {\n      cVar5._M_node = (this->_M_impl).super__Rb_tree_header._M_header._M_left;\n      cVar4._M_node = cVar5._M_node;\n      if (cVar5._M_node != __position._M_node) {\n        cVar4._M_node = (_Base_ptr)_Rb_tree_decrement(__position._M_node);\n        if (lVar1 <= *(long *)(cVar4._M_node + 1)) goto LAB_0033546c;\n        cVar5._M_node = (_Base_ptr)0x0;\n        if ((cVar4._M_node)->_M_right != (_Base_ptr)0x0) {\n          cVar5._M_node = __position._M_node;\n          cVar4._M_node = __position._M_node;\n        }\n      }\n    }\n    else {\n      if (lVar1 <= *(long *)(__position._M_node + 1)) {\n        pVar7.second = (_Rb_tree_node_base *)0x0;\n        pVar7.first = __position._M_node;\n        return pVar7;\n      }\n      cVar4._M_node = (this->_M_impl).super__Rb_tree_header._M_header._M_right;\n      cVar5._M_node = (_Base_ptr)0x0;\n      if (cVar4._M_node != __position._M_node) {\n        cVar5._M_node = (_Base_ptr)_Rb_tree_increment(__position._M_node);\n        if (*(long *)(cVar5._M_node + 1) <= lVar1) goto LAB_0033546c;\n        cVar4._M_node = cVar5._M_node;\n        if ((__position._M_node)->_M_right == (_Base_ptr)0x0) {\n          cVar5._M_node = (_Base_ptr)0x0;\n          cVar4._M_node = __position._M_node;\n        }\n      }\n    }\n    pVar6.second = cVar4._M_node;\n    pVar6.first = cVar5._M_node;\n    return pVar6;\n  }\n  if (((this->_M_impl).super__Rb_tree_header._M_node_count != 0) &&\n     (p_Var2 = (this->_M_impl).super__Rb_tree_header._M_header._M_right,\n     *(long *)(p_Var2 + 1) < *__k)) {\n    auVar3._8_8_ = 0;\n    auVar3._0_8_ = p_Var2;\n    return (pair<std::_Rb_tree_node_base*,_std::_Rb_tree_node_base*>)(auVar3 << 0x40);\n  }\nLAB_0033546c:\n  pVar7 = _M_get_insert_unique_pos(this,__k);\n  return pVar7;\n}" (ms_call_modifier "__thiscall" __thiscall) type_identifier (ERROR "::\n_Rb_tree<long_int,_std::pair<long_int_const,_gold::Archive_member>,_std::_Select1st<std::pair<long_int_const,_gold::Archive_member>_>,_std::less<long_int>,_std::allocator<std::pair<long_int_const,_gold::Archive_member>_>_>\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 > : :) (function_declarator "_M_get_insert_hint_unique_pos\n          (_Rb_tree<long_int,_std::pair<long_int_const,_gold::Archive_member>,_std::_Select1st<std::pair<long_int_const,_gold::Archive_member>_>,_std::less<long_int>,_std::allocator<std::pair<long_int_const,_gold::Archive_member>_>_>\n           *this,const_iterator __position,key_type_conflict *__k)" identifier (parameter_list "(_Rb_tree<long_int,_std::pair<long_int_const,_gold::Archive_member>,_std::_Select1st<std::pair<long_int_const,_gold::Archive_member>_>,_std::less<long_int>,_std::allocator<std::pair<long_int_const,_gold::Archive_member>_>_>\n           *this,const_iterator __position,key_type_conflict *__k)" ( (parameter_declaration "_Rb_tree<long_int" type_identifier (ERROR "<" <) identifier) , (parameter_declaration "_std::pair<long_int_const" type_identifier (ERROR "::pair<" : : identifier <) identifier) , (parameter_declaration "_gold::Archive_member" type_identifier (ERROR "::" : :) identifier) (ERROR ">" >) , (parameter_declaration "_std::_Select1st<std::pair<long_int_const" type_identifier (ERROR "::_Select1st<std::pair<" : : identifier < identifier : : identifier <) identifier) , (parameter_declaration "_gold::Archive_member>_" type_identifier (ERROR "::Archive_member>" : : identifier >) identifier) (ERROR ">" >) , (parameter_declaration "_std::less<long_int" type_identifier (ERROR "::less<" : : identifier <) identifier) (ERROR ">" >) , (parameter_declaration "_std::allocator<std::pair<long_int_const" type_identifier (ERROR "::allocator<std::pair<" : : identifier < identifier : : identifier <) identifier) , (parameter_declaration "_gold::Archive_member>_>_>\n           *this" type_identifier (ERROR "::Archive_member>_>_>" : : identifier > identifier > identifier >) (pointer_declarator "*this" * identifier)) , (parameter_declaration "const_iterator __position" type_identifier identifier) , (parameter_declaration "key_type_conflict *__k" type_identifier (pointer_declarator "*__k" * identifier)) ))) (compound_statement "{\n  long lVar1;\n  _Base_ptr p_Var2;\n  undefined1 auVar3 [16];\n  const_iterator cVar4;\n  const_iterator cVar5;\n  pair<std::_Rb_tree_node_base*,_std::_Rb_tree_node_base*> pVar6;\n  pair<std::_Rb_tree_node_base*,_std::_Rb_tree_node_base*> pVar7;\n  \n  if ((_Rb_tree_header *)__position._M_node != &(this->_M_impl).super__Rb_tree_header) {\n    lVar1 = *__k;\n    if (lVar1 < *(long *)(__position._M_node + 1)) {\n      cVar5._M_node = (this->_M_impl).super__Rb_tree_header._M_header._M_left;\n      cVar4._M_node = cVar5._M_node;\n      if (cVar5._M_node != __position._M_node) {\n        cVar4._M_node = (_Base_ptr)_Rb_tree_decrement(__position._M_node);\n        if (lVar1 <= *(long *)(cVar4._M_node + 1)) goto LAB_0033546c;\n        cVar5._M_node = (_Base_ptr)0x0;\n        if ((cVar4._M_node)->_M_right != (_Base_ptr)0x0) {\n          cVar5._M_node = __position._M_node;\n          cVar4._M_node = __position._M_node;\n        }\n      }\n    }\n    else {\n      if (lVar1 <= *(long *)(__position._M_node + 1)) {\n        pVar7.second = (_Rb_tree_node_base *)0x0;\n        pVar7.first = __position._M_node;\n        return pVar7;\n      }\n      cVar4._M_node = (this->_M_impl).super__Rb_tree_header._M_header._M_right;\n      cVar5._M_node = (_Base_ptr)0x0;\n      if (cVar4._M_node != __position._M_node) {\n        cVar5._M_node = (_Base_ptr)_Rb_tree_increment(__position._M_node);\n        if (*(long *)(cVar5._M_node + 1) <= lVar1) goto LAB_0033546c;\n        cVar4._M_node = cVar5._M_node;\n        if ((__position._M_node)->_M_right == (_Base_ptr)0x0) {\n          cVar5._M_node = (_Base_ptr)0x0;\n          cVar4._M_node = __position._M_node;\n        }\n      }\n    }\n    pVar6.second = cVar4._M_node;\n    pVar6.first = cVar5._M_node;\n    return pVar6;\n  }\n  if (((this->_M_impl).super__Rb_tree_header._M_node_count != 0) &&\n     (p_Var2 = (this->_M_impl).super__Rb_tree_header._M_header._M_right,\n     *(long *)(p_Var2 + 1) < *__k)) {\n    auVar3._8_8_ = 0;\n    auVar3._0_8_ = p_Var2;\n    return (pair<std::_Rb_tree_node_base*,_std::_Rb_tree_node_base*>)(auVar3 << 0x40);\n  }\nLAB_0033546c:\n  pVar7 = _M_get_insert_unique_pos(this,__k);\n  return pVar7;\n}" { (declaration "long lVar1;" (sized_type_specifier "long" long) identifier ;) (declaration "_Base_ptr p_Var2;" type_identifier identifier ;) (declaration "undefined1 auVar3 [16];" type_identifier (array_declarator "auVar3 [16]" identifier [ number_literal ]) ;) (declaration "const_iterator cVar4;" type_identifier identifier ;) (declaration "const_iterator cVar5;" 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*> pVar6;" (binary_expression "_Rb_tree_node_base*> pVar6" identifier * (ERROR ">" >) 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*> pVar7;" (binary_expression "_Rb_tree_node_base*> pVar7" identifier * (ERROR ">" >) identifier) ;) (if_statement "if ((_Rb_tree_header *)__position._M_node != &(this->_M_impl).super__Rb_tree_header) {\n    lVar1 = *__k;\n    if (lVar1 < *(long *)(__position._M_node + 1)) {\n      cVar5._M_node = (this->_M_impl).super__Rb_tree_header._M_header._M_left;\n      cVar4._M_node = cVar5._M_node;\n      if (cVar5._M_node != __position._M_node) {\n        cVar4._M_node = (_Base_ptr)_Rb_tree_decrement(__position._M_node);\n        if (lVar1 <= *(long *)(cVar4._M_node + 1)) goto LAB_0033546c;\n        cVar5._M_node = (_Base_ptr)0x0;\n        if ((cVar4._M_node)->_M_right != (_Base_ptr)0x0) {\n          cVar5._M_node = __position._M_node;\n          cVar4._M_node = __position._M_node;\n        }\n      }\n    }\n    else {\n      if (lVar1 <= *(long *)(__position._M_node + 1)) {\n        pVar7.second = (_Rb_tree_node_base *)0x0;\n        pVar7.first = __position._M_node;\n        return pVar7;\n      }\n      cVar4._M_node = (this->_M_impl).super__Rb_tree_header._M_header._M_right;\n      cVar5._M_node = (_Base_ptr)0x0;\n      if (cVar4._M_node != __position._M_node) {\n        cVar5._M_node = (_Base_ptr)_Rb_tree_increment(__position._M_node);\n        if (*(long *)(cVar5._M_node + 1) <= lVar1) goto LAB_0033546c;\n        cVar4._M_node = cVar5._M_node;\n        if ((__position._M_node)->_M_right == (_Base_ptr)0x0) {\n          cVar5._M_node = (_Base_ptr)0x0;\n          cVar4._M_node = __position._M_node;\n        }\n      }\n    }\n    pVar6.second = cVar4._M_node;\n    pVar6.first = cVar5._M_node;\n    return pVar6;\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    lVar1 = *__k;\n    if (lVar1 < *(long *)(__position._M_node + 1)) {\n      cVar5._M_node = (this->_M_impl).super__Rb_tree_header._M_header._M_left;\n      cVar4._M_node = cVar5._M_node;\n      if (cVar5._M_node != __position._M_node) {\n        cVar4._M_node = (_Base_ptr)_Rb_tree_decrement(__position._M_node);\n        if (lVar1 <= *(long *)(cVar4._M_node + 1)) goto LAB_0033546c;\n        cVar5._M_node = (_Base_ptr)0x0;\n        if ((cVar4._M_node)->_M_right != (_Base_ptr)0x0) {\n          cVar5._M_node = __position._M_node;\n          cVar4._M_node = __position._M_node;\n        }\n      }\n    }\n    else {\n      if (lVar1 <= *(long *)(__position._M_node + 1)) {\n        pVar7.second = (_Rb_tree_node_base *)0x0;\n        pVar7.first = __position._M_node;\n        return pVar7;\n      }\n      cVar4._M_node = (this->_M_impl).super__Rb_tree_header._M_header._M_right;\n      cVar5._M_node = (_Base_ptr)0x0;\n      if (cVar4._M_node != __position._M_node) {\n        cVar5._M_node = (_Base_ptr)_Rb_tree_increment(__position._M_node);\n        if (*(long *)(cVar5._M_node + 1) <= lVar1) goto LAB_0033546c;\n        cVar4._M_node = cVar5._M_node;\n        if ((__position._M_node)->_M_right == (_Base_ptr)0x0) {\n          cVar5._M_node = (_Base_ptr)0x0;\n          cVar4._M_node = __position._M_node;\n        }\n      }\n    }\n    pVar6.second = cVar4._M_node;\n    pVar6.first = cVar5._M_node;\n    return pVar6;\n  }" { (expression_statement "lVar1 = *__k;" (assignment_expression "lVar1 = *__k" identifier = (pointer_expression "*__k" * identifier)) ;) (if_statement "if (lVar1 < *(long *)(__position._M_node + 1)) {\n      cVar5._M_node = (this->_M_impl).super__Rb_tree_header._M_header._M_left;\n      cVar4._M_node = cVar5._M_node;\n      if (cVar5._M_node != __position._M_node) {\n        cVar4._M_node = (_Base_ptr)_Rb_tree_decrement(__position._M_node);\n        if (lVar1 <= *(long *)(cVar4._M_node + 1)) goto LAB_0033546c;\n        cVar5._M_node = (_Base_ptr)0x0;\n        if ((cVar4._M_node)->_M_right != (_Base_ptr)0x0) {\n          cVar5._M_node = __position._M_node;\n          cVar4._M_node = __position._M_node;\n        }\n      }\n    }\n    else {\n      if (lVar1 <= *(long *)(__position._M_node + 1)) {\n        pVar7.second = (_Rb_tree_node_base *)0x0;\n        pVar7.first = __position._M_node;\n        return pVar7;\n      }\n      cVar4._M_node = (this->_M_impl).super__Rb_tree_header._M_header._M_right;\n      cVar5._M_node = (_Base_ptr)0x0;\n      if (cVar4._M_node != __position._M_node) {\n        cVar5._M_node = (_Base_ptr)_Rb_tree_increment(__position._M_node);\n        if (*(long *)(cVar5._M_node + 1) <= lVar1) goto LAB_0033546c;\n        cVar4._M_node = cVar5._M_node;\n        if ((__position._M_node)->_M_right == (_Base_ptr)0x0) {\n          cVar5._M_node = (_Base_ptr)0x0;\n          cVar4._M_node = __position._M_node;\n        }\n      }\n    }" if (parenthesized_expression "(lVar1 < *(long *)(__position._M_node + 1))" ( (binary_expression "lVar1 < *(long *)(__position._M_node + 1)" identifier < (pointer_expression "*(long *)(__position._M_node + 1)" * (cast_expression "(long *)(__position._M_node + 1)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (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) ))))) )) (compound_statement "{\n      cVar5._M_node = (this->_M_impl).super__Rb_tree_header._M_header._M_left;\n      cVar4._M_node = cVar5._M_node;\n      if (cVar5._M_node != __position._M_node) {\n        cVar4._M_node = (_Base_ptr)_Rb_tree_decrement(__position._M_node);\n        if (lVar1 <= *(long *)(cVar4._M_node + 1)) goto LAB_0033546c;\n        cVar5._M_node = (_Base_ptr)0x0;\n        if ((cVar4._M_node)->_M_right != (_Base_ptr)0x0) {\n          cVar5._M_node = __position._M_node;\n          cVar4._M_node = __position._M_node;\n        }\n      }\n    }" { (expression_statement "cVar5._M_node = (this->_M_impl).super__Rb_tree_header._M_header._M_left;" (assignment_expression "cVar5._M_node = (this->_M_impl).super__Rb_tree_header._M_header._M_left" (field_expression "cVar5._M_node" identifier . field_identifier) = (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)) ;) (expression_statement "cVar4._M_node = cVar5._M_node;" (assignment_expression "cVar4._M_node = cVar5._M_node" (field_expression "cVar4._M_node" identifier . field_identifier) = (field_expression "cVar5._M_node" identifier . field_identifier)) ;) (if_statement "if (cVar5._M_node != __position._M_node) {\n        cVar4._M_node = (_Base_ptr)_Rb_tree_decrement(__position._M_node);\n        if (lVar1 <= *(long *)(cVar4._M_node + 1)) goto LAB_0033546c;\n        cVar5._M_node = (_Base_ptr)0x0;\n        if ((cVar4._M_node)->_M_right != (_Base_ptr)0x0) {\n          cVar5._M_node = __position._M_node;\n          cVar4._M_node = __position._M_node;\n        }\n      }" if (parenthesized_expression "(cVar5._M_node != __position._M_node)" ( (binary_expression "cVar5._M_node != __position._M_node" (field_expression "cVar5._M_node" identifier . field_identifier) != (field_expression "__position._M_node" identifier . field_identifier)) )) (compound_statement "{\n        cVar4._M_node = (_Base_ptr)_Rb_tree_decrement(__position._M_node);\n        if (lVar1 <= *(long *)(cVar4._M_node + 1)) goto LAB_0033546c;\n        cVar5._M_node = (_Base_ptr)0x0;\n        if ((cVar4._M_node)->_M_right != (_Base_ptr)0x0) {\n          cVar5._M_node = __position._M_node;\n          cVar4._M_node = __position._M_node;\n        }\n      }" { (expression_statement "cVar4._M_node = (_Base_ptr)_Rb_tree_decrement(__position._M_node);" (assignment_expression "cVar4._M_node = (_Base_ptr)_Rb_tree_decrement(__position._M_node)" (field_expression "cVar4._M_node" identifier . field_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 (lVar1 <= *(long *)(cVar4._M_node + 1)) goto LAB_0033546c;" if (parenthesized_expression "(lVar1 <= *(long *)(cVar4._M_node + 1))" ( (binary_expression "lVar1 <= *(long *)(cVar4._M_node + 1)" identifier <= (pointer_expression "*(long *)(cVar4._M_node + 1)" * (cast_expression "(long *)(cVar4._M_node + 1)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(cVar4._M_node + 1)" ( (binary_expression "cVar4._M_node + 1" (field_expression "cVar4._M_node" identifier . field_identifier) + number_literal) ))))) )) (goto_statement "goto LAB_0033546c;" goto statement_identifier ;)) (expression_statement "cVar5._M_node = (_Base_ptr)0x0;" (assignment_expression "cVar5._M_node = (_Base_ptr)0x0" (field_expression "cVar5._M_node" identifier . field_identifier) = (cast_expression "(_Base_ptr)0x0" ( (type_descriptor "_Base_ptr" type_identifier) ) number_literal)) ;) (if_statement "if ((cVar4._M_node)->_M_right != (_Base_ptr)0x0) {\n          cVar5._M_node = __position._M_node;\n          cVar4._M_node = __position._M_node;\n        }" if (parenthesized_expression "((cVar4._M_node)->_M_right != (_Base_ptr)0x0)" ( (binary_expression "(cVar4._M_node)->_M_right != (_Base_ptr)0x0" (field_expression "(cVar4._M_node)->_M_right" (parenthesized_expression "(cVar4._M_node)" ( (field_expression "cVar4._M_node" identifier . field_identifier) )) -> field_identifier) != (cast_expression "(_Base_ptr)0x0" ( (type_descriptor "_Base_ptr" type_identifier) ) number_literal)) )) (compound_statement "{\n          cVar5._M_node = __position._M_node;\n          cVar4._M_node = __position._M_node;\n        }" { (expression_statement "cVar5._M_node = __position._M_node;" (assignment_expression "cVar5._M_node = __position._M_node" (field_expression "cVar5._M_node" identifier . field_identifier) = (field_expression "__position._M_node" identifier . field_identifier)) ;) (expression_statement "cVar4._M_node = __position._M_node;" (assignment_expression "cVar4._M_node = __position._M_node" (field_expression "cVar4._M_node" identifier . field_identifier) = (field_expression "__position._M_node" identifier . field_identifier)) ;) })) })) }) (else_clause "else {\n      if (lVar1 <= *(long *)(__position._M_node + 1)) {\n        pVar7.second = (_Rb_tree_node_base *)0x0;\n        pVar7.first = __position._M_node;\n        return pVar7;\n      }\n      cVar4._M_node = (this->_M_impl).super__Rb_tree_header._M_header._M_right;\n      cVar5._M_node = (_Base_ptr)0x0;\n      if (cVar4._M_node != __position._M_node) {\n        cVar5._M_node = (_Base_ptr)_Rb_tree_increment(__position._M_node);\n        if (*(long *)(cVar5._M_node + 1) <= lVar1) goto LAB_0033546c;\n        cVar4._M_node = cVar5._M_node;\n        if ((__position._M_node)->_M_right == (_Base_ptr)0x0) {\n          cVar5._M_node = (_Base_ptr)0x0;\n          cVar4._M_node = __position._M_node;\n        }\n      }\n    }" else (compound_statement "{\n      if (lVar1 <= *(long *)(__position._M_node + 1)) {\n        pVar7.second = (_Rb_tree_node_base *)0x0;\n        pVar7.first = __position._M_node;\n        return pVar7;\n      }\n      cVar4._M_node = (this->_M_impl).super__Rb_tree_header._M_header._M_right;\n      cVar5._M_node = (_Base_ptr)0x0;\n      if (cVar4._M_node != __position._M_node) {\n        cVar5._M_node = (_Base_ptr)_Rb_tree_increment(__position._M_node);\n        if (*(long *)(cVar5._M_node + 1) <= lVar1) goto LAB_0033546c;\n        cVar4._M_node = cVar5._M_node;\n        if ((__position._M_node)->_M_right == (_Base_ptr)0x0) {\n          cVar5._M_node = (_Base_ptr)0x0;\n          cVar4._M_node = __position._M_node;\n        }\n      }\n    }" { (if_statement "if (lVar1 <= *(long *)(__position._M_node + 1)) {\n        pVar7.second = (_Rb_tree_node_base *)0x0;\n        pVar7.first = __position._M_node;\n        return pVar7;\n      }" if (parenthesized_expression "(lVar1 <= *(long *)(__position._M_node + 1))" ( (binary_expression "lVar1 <= *(long *)(__position._M_node + 1)" identifier <= (pointer_expression "*(long *)(__position._M_node + 1)" * (cast_expression "(long *)(__position._M_node + 1)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (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) ))))) )) (compound_statement "{\n        pVar7.second = (_Rb_tree_node_base *)0x0;\n        pVar7.first = __position._M_node;\n        return pVar7;\n      }" { (expression_statement "pVar7.second = (_Rb_tree_node_base *)0x0;" (assignment_expression "pVar7.second = (_Rb_tree_node_base *)0x0" (field_expression "pVar7.second" identifier . field_identifier) = (cast_expression "(_Rb_tree_node_base *)0x0" ( (type_descriptor "_Rb_tree_node_base *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "pVar7.first = __position._M_node;" (assignment_expression "pVar7.first = __position._M_node" (field_expression "pVar7.first" identifier . field_identifier) = (field_expression "__position._M_node" identifier . field_identifier)) ;) (return_statement "return pVar7;" return identifier ;) })) (expression_statement "cVar4._M_node = (this->_M_impl).super__Rb_tree_header._M_header._M_right;" (assignment_expression "cVar4._M_node = (this->_M_impl).super__Rb_tree_header._M_header._M_right" (field_expression "cVar4._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)) ;) (expression_statement "cVar5._M_node = (_Base_ptr)0x0;" (assignment_expression "cVar5._M_node = (_Base_ptr)0x0" (field_expression "cVar5._M_node" identifier . field_identifier) = (cast_expression "(_Base_ptr)0x0" ( (type_descriptor "_Base_ptr" type_identifier) ) number_literal)) ;) (if_statement "if (cVar4._M_node != __position._M_node) {\n        cVar5._M_node = (_Base_ptr)_Rb_tree_increment(__position._M_node);\n        if (*(long *)(cVar5._M_node + 1) <= lVar1) goto LAB_0033546c;\n        cVar4._M_node = cVar5._M_node;\n        if ((__position._M_node)->_M_right == (_Base_ptr)0x0) {\n          cVar5._M_node = (_Base_ptr)0x0;\n          cVar4._M_node = __position._M_node;\n        }\n      }" if (parenthesized_expression "(cVar4._M_node != __position._M_node)" ( (binary_expression "cVar4._M_node != __position._M_node" (field_expression "cVar4._M_node" identifier . field_identifier) != (field_expression "__position._M_node" identifier . field_identifier)) )) (compound_statement "{\n        cVar5._M_node = (_Base_ptr)_Rb_tree_increment(__position._M_node);\n        if (*(long *)(cVar5._M_node + 1) <= lVar1) goto LAB_0033546c;\n        cVar4._M_node = cVar5._M_node;\n        if ((__position._M_node)->_M_right == (_Base_ptr)0x0) {\n          cVar5._M_node = (_Base_ptr)0x0;\n          cVar4._M_node = __position._M_node;\n        }\n      }" { (expression_statement "cVar5._M_node = (_Base_ptr)_Rb_tree_increment(__position._M_node);" (assignment_expression "cVar5._M_node = (_Base_ptr)_Rb_tree_increment(__position._M_node)" (field_expression "cVar5._M_node" identifier . field_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 (*(long *)(cVar5._M_node + 1) <= lVar1) goto LAB_0033546c;" if (parenthesized_expression "(*(long *)(cVar5._M_node + 1) <= lVar1)" ( (binary_expression "*(long *)(cVar5._M_node + 1) <= lVar1" (pointer_expression "*(long *)(cVar5._M_node + 1)" * (cast_expression "(long *)(cVar5._M_node + 1)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(cVar5._M_node + 1)" ( (binary_expression "cVar5._M_node + 1" (field_expression "cVar5._M_node" identifier . field_identifier) + number_literal) )))) <= identifier) )) (goto_statement "goto LAB_0033546c;" goto statement_identifier ;)) (expression_statement "cVar4._M_node = cVar5._M_node;" (assignment_expression "cVar4._M_node = cVar5._M_node" (field_expression "cVar4._M_node" identifier . field_identifier) = (field_expression "cVar5._M_node" identifier . field_identifier)) ;) (if_statement "if ((__position._M_node)->_M_right == (_Base_ptr)0x0) {\n          cVar5._M_node = (_Base_ptr)0x0;\n          cVar4._M_node = __position._M_node;\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          cVar5._M_node = (_Base_ptr)0x0;\n          cVar4._M_node = __position._M_node;\n        }" { (expression_statement "cVar5._M_node = (_Base_ptr)0x0;" (assignment_expression "cVar5._M_node = (_Base_ptr)0x0" (field_expression "cVar5._M_node" identifier . field_identifier) = (cast_expression "(_Base_ptr)0x0" ( (type_descriptor "_Base_ptr" type_identifier) ) number_literal)) ;) (expression_statement "cVar4._M_node = __position._M_node;" (assignment_expression "cVar4._M_node = __position._M_node" (field_expression "cVar4._M_node" identifier . field_identifier) = (field_expression "__position._M_node" identifier . field_identifier)) ;) })) })) }))) (expression_statement "pVar6.second = cVar4._M_node;" (assignment_expression "pVar6.second = cVar4._M_node" (field_expression "pVar6.second" identifier . field_identifier) = (field_expression "cVar4._M_node" identifier . field_identifier)) ;) (expression_statement "pVar6.first = cVar5._M_node;" (assignment_expression "pVar6.first = cVar5._M_node" (field_expression "pVar6.first" identifier . field_identifier) = (field_expression "cVar5._M_node" identifier . field_identifier)) ;) (return_statement "return pVar6;" return identifier ;) })) (if_statement "if (((this->_M_impl).super__Rb_tree_header._M_node_count != 0) &&\n     (p_Var2 = (this->_M_impl).super__Rb_tree_header._M_header._M_right,\n     *(long *)(p_Var2 + 1) < *__k)) {\n    auVar3._8_8_ = 0;\n    auVar3._0_8_ = p_Var2;\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_node_count != 0) &&\n     (p_Var2 = (this->_M_impl).super__Rb_tree_header._M_header._M_right,\n     *(long *)(p_Var2 + 1) < *__k))" ( (binary_expression "((this->_M_impl).super__Rb_tree_header._M_node_count != 0) &&\n     (p_Var2 = (this->_M_impl).super__Rb_tree_header._M_header._M_right,\n     *(long *)(p_Var2 + 1) < *__k)" (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) )) && (parenthesized_expression "(p_Var2 = (this->_M_impl).super__Rb_tree_header._M_header._M_right,\n     *(long *)(p_Var2 + 1) < *__k)" ( (comma_expression "p_Var2 = (this->_M_impl).super__Rb_tree_header._M_header._M_right,\n     *(long *)(p_Var2 + 1) < *__k" (assignment_expression "p_Var2 = (this->_M_impl).super__Rb_tree_header._M_header._M_right" 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)) , (binary_expression "*(long *)(p_Var2 + 1) < *__k" (pointer_expression "*(long *)(p_Var2 + 1)" * (cast_expression "(long *)(p_Var2 + 1)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(p_Var2 + 1)" ( (binary_expression "p_Var2 + 1" identifier + number_literal) )))) < (pointer_expression "*__k" * identifier))) ))) )) (compound_statement "{\n    auVar3._8_8_ = 0;\n    auVar3._0_8_ = p_Var2;\n    return (pair<std::_Rb_tree_node_base*,_std::_Rb_tree_node_base*>)(auVar3 << 0x40);\n  }" { (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_ = p_Var2;" (assignment_expression "auVar3._0_8_ = p_Var2" (field_expression "auVar3._0_8_" identifier . field_identifier) = 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) ))) ;) })) (labeled_statement "LAB_0033546c:\n  pVar7 = _M_get_insert_unique_pos(this,__k);" statement_identifier : (expression_statement "pVar7 = _M_get_insert_unique_pos(this,__k);" (assignment_expression "pVar7 = _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 pVar7;" return identifier ;) })))
(translation_unit "undefined1  [16] FUN_003353c0(long param_1,long *param_2,long *param_3)\n\n{\n  long lVar1;\n  long *plVar2;\n  long *plVar3;\n  undefined1 auVar4 [16];\n  undefined1 auVar5 [16];\n  undefined1 auVar6 [16];\n  \n  if (param_2 != (long *)(param_1 + 8)) {\n    lVar1 = *param_3;\n    if (lVar1 < param_2[4]) {\n      plVar3 = *(long **)(param_1 + 0x18);\n      plVar2 = plVar3;\n      if (plVar3 != param_2) {\n        plVar2 = (long *)thunk_FUN_0049f690(param_2,param_2,plVar3);\n        plVar3 = plVar2;\n        if (lVar1 <= plVar2[4]) goto LAB_0033546c;\n        plVar3 = (long *)0x0;\n        if (plVar2[3] != 0) {\n          plVar3 = param_2;\n          plVar2 = param_2;\n        }\n      }\n    }\n    else {\n      if (lVar1 <= param_2[4]) {\n        auVar6._8_8_ = 0;\n        auVar6._0_8_ = param_2;\n        return auVar6;\n      }\n      plVar2 = *(long **)(param_1 + 0x20);\n      plVar3 = (long *)0x0;\n      if (plVar2 != param_2) {\n        plVar3 = (long *)FUN_0049f6f0(param_2,param_2,plVar2);\n        if (plVar3[4] <= lVar1) goto LAB_0033546c;\n        plVar2 = plVar3;\n        if (param_2[3] == 0) {\n          plVar3 = (long *)0x0;\n          plVar2 = param_2;\n        }\n      }\n    }\n    auVar4._8_8_ = plVar2;\n    auVar4._0_8_ = plVar3;\n    return auVar4;\n  }\n  plVar3 = param_3;\n  if ((*(long *)(param_1 + 0x28) != 0) && (*(long *)(*(ulong *)(param_1 + 0x20) + 0x20) < *param_3))\n  {\n    auVar5._8_8_ = 0;\n    auVar5._0_8_ = *(ulong *)(param_1 + 0x20);\n    return auVar5 << 0x40;\n  }\nLAB_0033546c:\n  auVar5 = FUN_00335330(param_1,param_3,plVar3);\n  return auVar5;\n}\n\n" (expression_statement "undefined1  [16]" (subscript_expression "undefined1  [16]" identifier [ number_literal ]) ;) (declaration "FUN_003353c0(long param_1,long *param_2,long *param_3)\n\n{\n  long lVar1;" (macro_type_specifier "FUN_003353c0(long param_1,long *" identifier ( (ERROR "long param_1," (type_descriptor "long param_1" (sized_type_specifier "long param_1" long type_identifier)) ,) (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) )) identifier , (ERROR "long *param_3)\n\n{\n  long" identifier (pointer_declarator "*param_3" * identifier) ) { long) identifier ;) (declaration "long *plVar2;" (sized_type_specifier "long" long) (pointer_declarator "*plVar2" * identifier) ;) (declaration "long *plVar3;" (sized_type_specifier "long" long) (pointer_declarator "*plVar3" * identifier) ;) (declaration "undefined1 auVar4 [16];" type_identifier (array_declarator "auVar4 [16]" identifier [ number_literal ]) ;) (declaration "undefined1 auVar5 [16];" type_identifier (array_declarator "auVar5 [16]" identifier [ number_literal ]) ;) (declaration "undefined1 auVar6 [16];" type_identifier (array_declarator "auVar6 [16]" identifier [ number_literal ]) ;) (if_statement "if (param_2 != (long *)(param_1 + 8)) {\n    lVar1 = *param_3;\n    if (lVar1 < param_2[4]) {\n      plVar3 = *(long **)(param_1 + 0x18);\n      plVar2 = plVar3;\n      if (plVar3 != param_2) {\n        plVar2 = (long *)thunk_FUN_0049f690(param_2,param_2,plVar3);\n        plVar3 = plVar2;\n        if (lVar1 <= plVar2[4]) goto LAB_0033546c;\n        plVar3 = (long *)0x0;\n        if (plVar2[3] != 0) {\n          plVar3 = param_2;\n          plVar2 = param_2;\n        }\n      }\n    }\n    else {\n      if (lVar1 <= param_2[4]) {\n        auVar6._8_8_ = 0;\n        auVar6._0_8_ = param_2;\n        return auVar6;\n      }\n      plVar2 = *(long **)(param_1 + 0x20);\n      plVar3 = (long *)0x0;\n      if (plVar2 != param_2) {\n        plVar3 = (long *)FUN_0049f6f0(param_2,param_2,plVar2);\n        if (plVar3[4] <= lVar1) goto LAB_0033546c;\n        plVar2 = plVar3;\n        if (param_2[3] == 0) {\n          plVar3 = (long *)0x0;\n          plVar2 = param_2;\n        }\n      }\n    }\n    auVar4._8_8_ = plVar2;\n    auVar4._0_8_ = plVar3;\n    return auVar4;\n  }" if (parenthesized_expression "(param_2 != (long *)(param_1 + 8))" ( (binary_expression "param_2 != (long *)(param_1 + 8)" identifier != (cast_expression "(long *)(param_1 + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) )) (compound_statement "{\n    lVar1 = *param_3;\n    if (lVar1 < param_2[4]) {\n      plVar3 = *(long **)(param_1 + 0x18);\n      plVar2 = plVar3;\n      if (plVar3 != param_2) {\n        plVar2 = (long *)thunk_FUN_0049f690(param_2,param_2,plVar3);\n        plVar3 = plVar2;\n        if (lVar1 <= plVar2[4]) goto LAB_0033546c;\n        plVar3 = (long *)0x0;\n        if (plVar2[3] != 0) {\n          plVar3 = param_2;\n          plVar2 = param_2;\n        }\n      }\n    }\n    else {\n      if (lVar1 <= param_2[4]) {\n        auVar6._8_8_ = 0;\n        auVar6._0_8_ = param_2;\n        return auVar6;\n      }\n      plVar2 = *(long **)(param_1 + 0x20);\n      plVar3 = (long *)0x0;\n      if (plVar2 != param_2) {\n        plVar3 = (long *)FUN_0049f6f0(param_2,param_2,plVar2);\n        if (plVar3[4] <= lVar1) goto LAB_0033546c;\n        plVar2 = plVar3;\n        if (param_2[3] == 0) {\n          plVar3 = (long *)0x0;\n          plVar2 = param_2;\n        }\n      }\n    }\n    auVar4._8_8_ = plVar2;\n    auVar4._0_8_ = plVar3;\n    return auVar4;\n  }" { (expression_statement "lVar1 = *param_3;" (assignment_expression "lVar1 = *param_3" identifier = (pointer_expression "*param_3" * identifier)) ;) (if_statement "if (lVar1 < param_2[4]) {\n      plVar3 = *(long **)(param_1 + 0x18);\n      plVar2 = plVar3;\n      if (plVar3 != param_2) {\n        plVar2 = (long *)thunk_FUN_0049f690(param_2,param_2,plVar3);\n        plVar3 = plVar2;\n        if (lVar1 <= plVar2[4]) goto LAB_0033546c;\n        plVar3 = (long *)0x0;\n        if (plVar2[3] != 0) {\n          plVar3 = param_2;\n          plVar2 = param_2;\n        }\n      }\n    }\n    else {\n      if (lVar1 <= param_2[4]) {\n        auVar6._8_8_ = 0;\n        auVar6._0_8_ = param_2;\n        return auVar6;\n      }\n      plVar2 = *(long **)(param_1 + 0x20);\n      plVar3 = (long *)0x0;\n      if (plVar2 != param_2) {\n        plVar3 = (long *)FUN_0049f6f0(param_2,param_2,plVar2);\n        if (plVar3[4] <= lVar1) goto LAB_0033546c;\n        plVar2 = plVar3;\n        if (param_2[3] == 0) {\n          plVar3 = (long *)0x0;\n          plVar2 = param_2;\n        }\n      }\n    }" if (parenthesized_expression "(lVar1 < param_2[4])" ( (binary_expression "lVar1 < param_2[4]" identifier < (subscript_expression "param_2[4]" identifier [ number_literal ])) )) (compound_statement "{\n      plVar3 = *(long **)(param_1 + 0x18);\n      plVar2 = plVar3;\n      if (plVar3 != param_2) {\n        plVar2 = (long *)thunk_FUN_0049f690(param_2,param_2,plVar3);\n        plVar3 = plVar2;\n        if (lVar1 <= plVar2[4]) goto LAB_0033546c;\n        plVar3 = (long *)0x0;\n        if (plVar2[3] != 0) {\n          plVar3 = param_2;\n          plVar2 = param_2;\n        }\n      }\n    }" { (expression_statement "plVar3 = *(long **)(param_1 + 0x18);" (assignment_expression "plVar3 = *(long **)(param_1 + 0x18)" identifier = (pointer_expression "*(long **)(param_1 + 0x18)" * (cast_expression "(long **)(param_1 + 0x18)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) ))))) ;) (expression_statement "plVar2 = plVar3;" (assignment_expression "plVar2 = plVar3" identifier = identifier) ;) (if_statement "if (plVar3 != param_2) {\n        plVar2 = (long *)thunk_FUN_0049f690(param_2,param_2,plVar3);\n        plVar3 = plVar2;\n        if (lVar1 <= plVar2[4]) goto LAB_0033546c;\n        plVar3 = (long *)0x0;\n        if (plVar2[3] != 0) {\n          plVar3 = param_2;\n          plVar2 = param_2;\n        }\n      }" if (parenthesized_expression "(plVar3 != param_2)" ( (binary_expression "plVar3 != param_2" identifier != identifier) )) (compound_statement "{\n        plVar2 = (long *)thunk_FUN_0049f690(param_2,param_2,plVar3);\n        plVar3 = plVar2;\n        if (lVar1 <= plVar2[4]) goto LAB_0033546c;\n        plVar3 = (long *)0x0;\n        if (plVar2[3] != 0) {\n          plVar3 = param_2;\n          plVar2 = param_2;\n        }\n      }" { (expression_statement "plVar2 = (long *)thunk_FUN_0049f690(param_2,param_2,plVar3);" (assignment_expression "plVar2 = (long *)thunk_FUN_0049f690(param_2,param_2,plVar3)" identifier = (cast_expression "(long *)thunk_FUN_0049f690(param_2,param_2,plVar3)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (call_expression "thunk_FUN_0049f690(param_2,param_2,plVar3)" identifier (argument_list "(param_2,param_2,plVar3)" ( identifier , identifier , identifier ))))) ;) (expression_statement "plVar3 = plVar2;" (assignment_expression "plVar3 = plVar2" identifier = identifier) ;) (if_statement "if (lVar1 <= plVar2[4]) goto LAB_0033546c;" if (parenthesized_expression "(lVar1 <= plVar2[4])" ( (binary_expression "lVar1 <= plVar2[4]" identifier <= (subscript_expression "plVar2[4]" identifier [ number_literal ])) )) (goto_statement "goto LAB_0033546c;" goto statement_identifier ;)) (expression_statement "plVar3 = (long *)0x0;" (assignment_expression "plVar3 = (long *)0x0" identifier = (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (if_statement "if (plVar2[3] != 0) {\n          plVar3 = param_2;\n          plVar2 = param_2;\n        }" if (parenthesized_expression "(plVar2[3] != 0)" ( (binary_expression "plVar2[3] != 0" (subscript_expression "plVar2[3]" identifier [ number_literal ]) != number_literal) )) (compound_statement "{\n          plVar3 = param_2;\n          plVar2 = param_2;\n        }" { (expression_statement "plVar3 = param_2;" (assignment_expression "plVar3 = param_2" identifier = identifier) ;) (expression_statement "plVar2 = param_2;" (assignment_expression "plVar2 = param_2" identifier = identifier) ;) })) })) }) (else_clause "else {\n      if (lVar1 <= param_2[4]) {\n        auVar6._8_8_ = 0;\n        auVar6._0_8_ = param_2;\n        return auVar6;\n      }\n      plVar2 = *(long **)(param_1 + 0x20);\n      plVar3 = (long *)0x0;\n      if (plVar2 != param_2) {\n        plVar3 = (long *)FUN_0049f6f0(param_2,param_2,plVar2);\n        if (plVar3[4] <= lVar1) goto LAB_0033546c;\n        plVar2 = plVar3;\n        if (param_2[3] == 0) {\n          plVar3 = (long *)0x0;\n          plVar2 = param_2;\n        }\n      }\n    }" else (compound_statement "{\n      if (lVar1 <= param_2[4]) {\n        auVar6._8_8_ = 0;\n        auVar6._0_8_ = param_2;\n        return auVar6;\n      }\n      plVar2 = *(long **)(param_1 + 0x20);\n      plVar3 = (long *)0x0;\n      if (plVar2 != param_2) {\n        plVar3 = (long *)FUN_0049f6f0(param_2,param_2,plVar2);\n        if (plVar3[4] <= lVar1) goto LAB_0033546c;\n        plVar2 = plVar3;\n        if (param_2[3] == 0) {\n          plVar3 = (long *)0x0;\n          plVar2 = param_2;\n        }\n      }\n    }" { (if_statement "if (lVar1 <= param_2[4]) {\n        auVar6._8_8_ = 0;\n        auVar6._0_8_ = param_2;\n        return auVar6;\n      }" if (parenthesized_expression "(lVar1 <= param_2[4])" ( (binary_expression "lVar1 <= param_2[4]" identifier <= (subscript_expression "param_2[4]" identifier [ number_literal ])) )) (compound_statement "{\n        auVar6._8_8_ = 0;\n        auVar6._0_8_ = param_2;\n        return auVar6;\n      }" { (expression_statement "auVar6._8_8_ = 0;" (assignment_expression "auVar6._8_8_ = 0" (field_expression "auVar6._8_8_" identifier . field_identifier) = number_literal) ;) (expression_statement "auVar6._0_8_ = param_2;" (assignment_expression "auVar6._0_8_ = param_2" (field_expression "auVar6._0_8_" identifier . field_identifier) = identifier) ;) (return_statement "return auVar6;" return identifier ;) })) (expression_statement "plVar2 = *(long **)(param_1 + 0x20);" (assignment_expression "plVar2 = *(long **)(param_1 + 0x20)" identifier = (pointer_expression "*(long **)(param_1 + 0x20)" * (cast_expression "(long **)(param_1 + 0x20)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x20)" ( (binary_expression "param_1 + 0x20" identifier + number_literal) ))))) ;) (expression_statement "plVar3 = (long *)0x0;" (assignment_expression "plVar3 = (long *)0x0" identifier = (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (if_statement "if (plVar2 != param_2) {\n        plVar3 = (long *)FUN_0049f6f0(param_2,param_2,plVar2);\n        if (plVar3[4] <= lVar1) goto LAB_0033546c;\n        plVar2 = plVar3;\n        if (param_2[3] == 0) {\n          plVar3 = (long *)0x0;\n          plVar2 = param_2;\n        }\n      }" if (parenthesized_expression "(plVar2 != param_2)" ( (binary_expression "plVar2 != param_2" identifier != identifier) )) (compound_statement "{\n        plVar3 = (long *)FUN_0049f6f0(param_2,param_2,plVar2);\n        if (plVar3[4] <= lVar1) goto LAB_0033546c;\n        plVar2 = plVar3;\n        if (param_2[3] == 0) {\n          plVar3 = (long *)0x0;\n          plVar2 = param_2;\n        }\n      }" { (expression_statement "plVar3 = (long *)FUN_0049f6f0(param_2,param_2,plVar2);" (assignment_expression "plVar3 = (long *)FUN_0049f6f0(param_2,param_2,plVar2)" identifier = (cast_expression "(long *)FUN_0049f6f0(param_2,param_2,plVar2)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0049f6f0(param_2,param_2,plVar2)" identifier (argument_list "(param_2,param_2,plVar2)" ( identifier , identifier , identifier ))))) ;) (if_statement "if (plVar3[4] <= lVar1) goto LAB_0033546c;" if (parenthesized_expression "(plVar3[4] <= lVar1)" ( (binary_expression "plVar3[4] <= lVar1" (subscript_expression "plVar3[4]" identifier [ number_literal ]) <= identifier) )) (goto_statement "goto LAB_0033546c;" goto statement_identifier ;)) (expression_statement "plVar2 = plVar3;" (assignment_expression "plVar2 = plVar3" identifier = identifier) ;) (if_statement "if (param_2[3] == 0) {\n          plVar3 = (long *)0x0;\n          plVar2 = param_2;\n        }" if (parenthesized_expression "(param_2[3] == 0)" ( (binary_expression "param_2[3] == 0" (subscript_expression "param_2[3]" identifier [ number_literal ]) == number_literal) )) (compound_statement "{\n          plVar3 = (long *)0x0;\n          plVar2 = param_2;\n        }" { (expression_statement "plVar3 = (long *)0x0;" (assignment_expression "plVar3 = (long *)0x0" identifier = (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "plVar2 = param_2;" (assignment_expression "plVar2 = param_2" identifier = identifier) ;) })) })) }))) (expression_statement "auVar4._8_8_ = plVar2;" (assignment_expression "auVar4._8_8_ = plVar2" (field_expression "auVar4._8_8_" identifier . field_identifier) = identifier) ;) (expression_statement "auVar4._0_8_ = plVar3;" (assignment_expression "auVar4._0_8_ = plVar3" (field_expression "auVar4._0_8_" identifier . field_identifier) = identifier) ;) (return_statement "return auVar4;" return identifier ;) })) (expression_statement "plVar3 = param_3;" (assignment_expression "plVar3 = param_3" identifier = identifier) ;) (if_statement "if ((*(long *)(param_1 + 0x28) != 0) && (*(long *)(*(ulong *)(param_1 + 0x20) + 0x20) < *param_3))\n  {\n    auVar5._8_8_ = 0;\n    auVar5._0_8_ = *(ulong *)(param_1 + 0x20);\n    return auVar5 << 0x40;\n  }" if (parenthesized_expression "((*(long *)(param_1 + 0x28) != 0) && (*(long *)(*(ulong *)(param_1 + 0x20) + 0x20) < *param_3))" ( (binary_expression "(*(long *)(param_1 + 0x28) != 0) && (*(long *)(*(ulong *)(param_1 + 0x20) + 0x20) < *param_3)" (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) )) && (parenthesized_expression "(*(long *)(*(ulong *)(param_1 + 0x20) + 0x20) < *param_3)" ( (binary_expression "*(long *)(*(ulong *)(param_1 + 0x20) + 0x20) < *param_3" (pointer_expression "*(long *)(*(ulong *)(param_1 + 0x20) + 0x20)" * (cast_expression "(long *)(*(ulong *)(param_1 + 0x20) + 0x20)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(ulong *)(param_1 + 0x20) + 0x20)" ( (binary_expression "*(ulong *)(param_1 + 0x20) + 0x20" (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) )))) + number_literal) )))) < (pointer_expression "*param_3" * identifier)) ))) )) (compound_statement "{\n    auVar5._8_8_ = 0;\n    auVar5._0_8_ = *(ulong *)(param_1 + 0x20);\n    return auVar5 << 0x40;\n  }" { (expression_statement "auVar5._8_8_ = 0;" (assignment_expression "auVar5._8_8_ = 0" (field_expression "auVar5._8_8_" identifier . field_identifier) = number_literal) ;) (expression_statement "auVar5._0_8_ = *(ulong *)(param_1 + 0x20);" (assignment_expression "auVar5._0_8_ = *(ulong *)(param_1 + 0x20)" (field_expression "auVar5._0_8_" identifier . field_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) ))))) ;) (return_statement "return auVar5 << 0x40;" return (binary_expression "auVar5 << 0x40" identifier << number_literal) ;) })) (labeled_statement "LAB_0033546c:\n  auVar5 = FUN_00335330(param_1,param_3,plVar3);" statement_identifier : (expression_statement "auVar5 = FUN_00335330(param_1,param_3,plVar3);" (assignment_expression "auVar5 = FUN_00335330(param_1,param_3,plVar3)" identifier = (call_expression "FUN_00335330(param_1,param_3,plVar3)" identifier (argument_list "(param_1,param_3,plVar3)" ( identifier , identifier , identifier )))) ;)) (return_statement "return auVar5;" return identifier ;) (ERROR "}" }))
(translation_unit (expression_statement (subscript_expression IDENT [ LIT ]) ;) (declaration (macro_type_specifier IDENT ( (ERROR (type_descriptor (sized_type_specifier long TYPE)) ,) (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) )) IDENT , (ERROR IDENT (pointer_declarator * IDENT) ) { long) IDENT ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < (subscript_expression IDENT [ LIT ])) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator * (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 { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT ))))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= (subscript_expression IDENT [ LIT ])) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) })) })) }) (else_clause else (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT <= (subscript_expression IDENT [ LIT ])) )) (compound_statement { (expression_statement (assignment_expression (field_expression IDENT . field_identifier) = LIT) ;) (expression_statement (assignment_expression (field_expression IDENT . field_identifier) = IDENT) ;) (return_statement return IDENT ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) <= IDENT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) })) })) }))) (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 (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT) )) && (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) )))) < (pointer_expression * IDENT)) ))) )) (compound_statement { (expression_statement (assignment_expression (field_expression IDENT . field_identifier) = LIT) ;) (expression_statement (assignment_expression (field_expression IDENT . field_identifier) = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (return_statement return (binary_expression IDENT << LIT) ;) })) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT )))) ;)) (return_statement return IDENT ;) (ERROR }))
(expression_statement "undefined1  [16]" (subscript_expression "undefined1  [16]" (identifier "undefined1") ([ "[") (number_literal "16") (] "]")) (; "")) (declaration "FUN_003353c0(long param_1,long *param_2,long *param_3)\n\n{\n  long lVar1;" (macro_type_specifier "FUN_003353c0(long param_1,long *" (identifier "FUN_003353c0") (( "(") (ERROR "long param_1," (type_descriptor "long param_1" (sized_type_specifier "long param_1" (long "long") (type_identifier "param_1"))) (, ",")) (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () "")) (identifier "param_2") (, ",") (ERROR "long *param_3)\n\n{\n  long" (identifier "long") (pointer_declarator "*param_3" (* "*") (identifier "param_3")) () ")") ({ "{") (long "long")) (identifier "lVar1") (; ";")) (declaration "long *plVar2;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar2" (* "*") (identifier "plVar2")) (; ";")) (declaration "long *plVar3;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar3" (* "*") (identifier "plVar3")) (; ";")) (declaration "undefined1 auVar4 [16];" (type_identifier "undefined1") (array_declarator "auVar4 [16]" (identifier "auVar4") ([ "[") (number_literal "16") (] "]")) (; ";")) (declaration "undefined1 auVar5 [16];" (type_identifier "undefined1") (array_declarator "auVar5 [16]" (identifier "auVar5") ([ "[") (number_literal "16") (] "]")) (; ";")) (declaration "undefined1 auVar6 [16];" (type_identifier "undefined1") (array_declarator "auVar6 [16]" (identifier "auVar6") ([ "[") (number_literal "16") (] "]")) (; ";")) (if_statement "if (param_2 != (long *)(param_1 + 8)) {\n    lVar1 = *param_3;\n    if (lVar1 < param_2[4]) {\n      plVar3 = *(long **)(param_1 + 0x18);\n      plVar2 = plVar3;\n      if (plVar3 != param_2) {\n        plVar2 = (long *)thunk_FUN_0049f690(param_2,param_2,plVar3);\n        plVar3 = plVar2;\n        if (lVar1 <= plVar2[4]) goto LAB_0033546c;\n        plVar3 = (long *)0x0;\n        if (plVar2[3] != 0) {\n          plVar3 = param_2;\n          plVar2 = param_2;\n        }\n      }\n    }\n    else {\n      if (lVar1 <= param_2[4]) {\n        auVar6._8_8_ = 0;\n        auVar6._0_8_ = param_2;\n        return auVar6;\n      }\n      plVar2 = *(long **)(param_1 + 0x20);\n      plVar3 = (long *)0x0;\n      if (plVar2 != param_2) {\n        plVar3 = (long *)FUN_0049f6f0(param_2,param_2,plVar2);\n        if (plVar3[4] <= lVar1) goto LAB_0033546c;\n        plVar2 = plVar3;\n        if (param_2[3] == 0) {\n          plVar3 = (long *)0x0;\n          plVar2 = param_2;\n        }\n      }\n    }\n    auVar4._8_8_ = plVar2;\n    auVar4._0_8_ = plVar3;\n    return auVar4;\n  }" (if "if") (parenthesized_expression "(param_2 != (long *)(param_1 + 8))" (( "(") (binary_expression "param_2 != (long *)(param_1 + 8)" (identifier "param_2") (!= "!=") (cast_expression "(long *)(param_1 + 8)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 8)" (( "(") (binary_expression "param_1 + 8" (identifier "param_1") (+ "+") (number_literal "8")) () ")")))) () ")")) (compound_statement "{\n    lVar1 = *param_3;\n    if (lVar1 < param_2[4]) {\n      plVar3 = *(long **)(param_1 + 0x18);\n      plVar2 = plVar3;\n      if (plVar3 != param_2) {\n        plVar2 = (long *)thunk_FUN_0049f690(param_2,param_2,plVar3);\n        plVar3 = plVar2;\n        if (lVar1 <= plVar2[4]) goto LAB_0033546c;\n        plVar3 = (long *)0x0;\n        if (plVar2[3] != 0) {\n          plVar3 = param_2;\n          plVar2 = param_2;\n        }\n      }\n    }\n    else {\n      if (lVar1 <= param_2[4]) {\n        auVar6._8_8_ = 0;\n        auVar6._0_8_ = param_2;\n        return auVar6;\n      }\n      plVar2 = *(long **)(param_1 + 0x20);\n      plVar3 = (long *)0x0;\n      if (plVar2 != param_2) {\n        plVar3 = (long *)FUN_0049f6f0(param_2,param_2,plVar2);\n        if (plVar3[4] <= lVar1) goto LAB_0033546c;\n        plVar2 = plVar3;\n        if (param_2[3] == 0) {\n          plVar3 = (long *)0x0;\n          plVar2 = param_2;\n        }\n      }\n    }\n    auVar4._8_8_ = plVar2;\n    auVar4._0_8_ = plVar3;\n    return auVar4;\n  }" ({ "{") (expression_statement "lVar1 = *param_3;" (assignment_expression "lVar1 = *param_3" (identifier "lVar1") (= "=") (pointer_expression "*param_3" (* "*") (identifier "param_3"))) (; ";")) (if_statement "if (lVar1 < param_2[4]) {\n      plVar3 = *(long **)(param_1 + 0x18);\n      plVar2 = plVar3;\n      if (plVar3 != param_2) {\n        plVar2 = (long *)thunk_FUN_0049f690(param_2,param_2,plVar3);\n        plVar3 = plVar2;\n        if (lVar1 <= plVar2[4]) goto LAB_0033546c;\n        plVar3 = (long *)0x0;\n        if (plVar2[3] != 0) {\n          plVar3 = param_2;\n          plVar2 = param_2;\n        }\n      }\n    }\n    else {\n      if (lVar1 <= param_2[4]) {\n        auVar6._8_8_ = 0;\n        auVar6._0_8_ = param_2;\n        return auVar6;\n      }\n      plVar2 = *(long **)(param_1 + 0x20);\n      plVar3 = (long *)0x0;\n      if (plVar2 != param_2) {\n        plVar3 = (long *)FUN_0049f6f0(param_2,param_2,plVar2);\n        if (plVar3[4] <= lVar1) goto LAB_0033546c;\n        plVar2 = plVar3;\n        if (param_2[3] == 0) {\n          plVar3 = (long *)0x0;\n          plVar2 = param_2;\n        }\n      }\n    }" (if "if") (parenthesized_expression "(lVar1 < param_2[4])" (( "(") (binary_expression "lVar1 < param_2[4]" (identifier "lVar1") (< "<") (subscript_expression "param_2[4]" (identifier "param_2") ([ "[") (number_literal "4") (] "]"))) () ")")) (compound_statement "{\n      plVar3 = *(long **)(param_1 + 0x18);\n      plVar2 = plVar3;\n      if (plVar3 != param_2) {\n        plVar2 = (long *)thunk_FUN_0049f690(param_2,param_2,plVar3);\n        plVar3 = plVar2;\n        if (lVar1 <= plVar2[4]) goto LAB_0033546c;\n        plVar3 = (long *)0x0;\n        if (plVar2[3] != 0) {\n          plVar3 = param_2;\n          plVar2 = param_2;\n        }\n      }\n    }" ({ "{") (expression_statement "plVar3 = *(long **)(param_1 + 0x18);" (assignment_expression "plVar3 = *(long **)(param_1 + 0x18)" (identifier "plVar3") (= "=") (pointer_expression "*(long **)(param_1 + 0x18)" (* "*") (cast_expression "(long **)(param_1 + 0x18)" (( "(") (type_descriptor "long **" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x18)" (( "(") (binary_expression "param_1 + 0x18" (identifier "param_1") (+ "+") (number_literal "0x18")) () ")"))))) (; ";")) (expression_statement "plVar2 = plVar3;" (assignment_expression "plVar2 = plVar3" (identifier "plVar2") (= "=") (identifier "plVar3")) (; ";")) (if_statement "if (plVar3 != param_2) {\n        plVar2 = (long *)thunk_FUN_0049f690(param_2,param_2,plVar3);\n        plVar3 = plVar2;\n        if (lVar1 <= plVar2[4]) goto LAB_0033546c;\n        plVar3 = (long *)0x0;\n        if (plVar2[3] != 0) {\n          plVar3 = param_2;\n          plVar2 = param_2;\n        }\n      }" (if "if") (parenthesized_expression "(plVar3 != param_2)" (( "(") (binary_expression "plVar3 != param_2" (identifier "plVar3") (!= "!=") (identifier "param_2")) () ")")) (compound_statement "{\n        plVar2 = (long *)thunk_FUN_0049f690(param_2,param_2,plVar3);\n        plVar3 = plVar2;\n        if (lVar1 <= plVar2[4]) goto LAB_0033546c;\n        plVar3 = (long *)0x0;\n        if (plVar2[3] != 0) {\n          plVar3 = param_2;\n          plVar2 = param_2;\n        }\n      }" ({ "{") (expression_statement "plVar2 = (long *)thunk_FUN_0049f690(param_2,param_2,plVar3);" (assignment_expression "plVar2 = (long *)thunk_FUN_0049f690(param_2,param_2,plVar3)" (identifier "plVar2") (= "=") (cast_expression "(long *)thunk_FUN_0049f690(param_2,param_2,plVar3)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "thunk_FUN_0049f690(param_2,param_2,plVar3)" (identifier "thunk_FUN_0049f690") (argument_list "(param_2,param_2,plVar3)" (( "(") (identifier "param_2") (, ",") (identifier "param_2") (, ",") (identifier "plVar3") () ")"))))) (; ";")) (expression_statement "plVar3 = plVar2;" (assignment_expression "plVar3 = plVar2" (identifier "plVar3") (= "=") (identifier "plVar2")) (; ";")) (if_statement "if (lVar1 <= plVar2[4]) goto LAB_0033546c;" (if "if") (parenthesized_expression "(lVar1 <= plVar2[4])" (( "(") (binary_expression "lVar1 <= plVar2[4]" (identifier "lVar1") (<= "<=") (subscript_expression "plVar2[4]" (identifier "plVar2") ([ "[") (number_literal "4") (] "]"))) () ")")) (goto_statement "goto LAB_0033546c;" (goto "goto") (statement_identifier "LAB_0033546c") (; ";"))) (expression_statement "plVar3 = (long *)0x0;" (assignment_expression "plVar3 = (long *)0x0" (identifier "plVar3") (= "=") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (if_statement "if (plVar2[3] != 0) {\n          plVar3 = param_2;\n          plVar2 = param_2;\n        }" (if "if") (parenthesized_expression "(plVar2[3] != 0)" (( "(") (binary_expression "plVar2[3] != 0" (subscript_expression "plVar2[3]" (identifier "plVar2") ([ "[") (number_literal "3") (] "]")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n          plVar3 = param_2;\n          plVar2 = param_2;\n        }" ({ "{") (expression_statement "plVar3 = param_2;" (assignment_expression "plVar3 = param_2" (identifier "plVar3") (= "=") (identifier "param_2")) (; ";")) (expression_statement "plVar2 = param_2;" (assignment_expression "plVar2 = param_2" (identifier "plVar2") (= "=") (identifier "param_2")) (; ";")) (} "}"))) (} "}"))) (} "}")) (else_clause "else {\n      if (lVar1 <= param_2[4]) {\n        auVar6._8_8_ = 0;\n        auVar6._0_8_ = param_2;\n        return auVar6;\n      }\n      plVar2 = *(long **)(param_1 + 0x20);\n      plVar3 = (long *)0x0;\n      if (plVar2 != param_2) {\n        plVar3 = (long *)FUN_0049f6f0(param_2,param_2,plVar2);\n        if (plVar3[4] <= lVar1) goto LAB_0033546c;\n        plVar2 = plVar3;\n        if (param_2[3] == 0) {\n          plVar3 = (long *)0x0;\n          plVar2 = param_2;\n        }\n      }\n    }" (else "else") (compound_statement "{\n      if (lVar1 <= param_2[4]) {\n        auVar6._8_8_ = 0;\n        auVar6._0_8_ = param_2;\n        return auVar6;\n      }\n      plVar2 = *(long **)(param_1 + 0x20);\n      plVar3 = (long *)0x0;\n      if (plVar2 != param_2) {\n        plVar3 = (long *)FUN_0049f6f0(param_2,param_2,plVar2);\n        if (plVar3[4] <= lVar1) goto LAB_0033546c;\n        plVar2 = plVar3;\n        if (param_2[3] == 0) {\n          plVar3 = (long *)0x0;\n          plVar2 = param_2;\n        }\n      }\n    }" ({ "{") (if_statement "if (lVar1 <= param_2[4]) {\n        auVar6._8_8_ = 0;\n        auVar6._0_8_ = param_2;\n        return auVar6;\n      }" (if "if") (parenthesized_expression "(lVar1 <= param_2[4])" (( "(") (binary_expression "lVar1 <= param_2[4]" (identifier "lVar1") (<= "<=") (subscript_expression "param_2[4]" (identifier "param_2") ([ "[") (number_literal "4") (] "]"))) () ")")) (compound_statement "{\n        auVar6._8_8_ = 0;\n        auVar6._0_8_ = param_2;\n        return auVar6;\n      }" ({ "{") (expression_statement "auVar6._8_8_ = 0;" (assignment_expression "auVar6._8_8_ = 0" (field_expression "auVar6._8_8_" (identifier "auVar6") (. ".") (field_identifier "_8_8_")) (= "=") (number_literal "0")) (; ";")) (expression_statement "auVar6._0_8_ = param_2;" (assignment_expression "auVar6._0_8_ = param_2" (field_expression "auVar6._0_8_" (identifier "auVar6") (. ".") (field_identifier "_0_8_")) (= "=") (identifier "param_2")) (; ";")) (return_statement "return auVar6;" (return "return") (identifier "auVar6") (; ";")) (} "}"))) (expression_statement "plVar2 = *(long **)(param_1 + 0x20);" (assignment_expression "plVar2 = *(long **)(param_1 + 0x20)" (identifier "plVar2") (= "=") (pointer_expression "*(long **)(param_1 + 0x20)" (* "*") (cast_expression "(long **)(param_1 + 0x20)" (( "(") (type_descriptor "long **" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x20)" (( "(") (binary_expression "param_1 + 0x20" (identifier "param_1") (+ "+") (number_literal "0x20")) () ")"))))) (; ";")) (expression_statement "plVar3 = (long *)0x0;" (assignment_expression "plVar3 = (long *)0x0" (identifier "plVar3") (= "=") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (if_statement "if (plVar2 != param_2) {\n        plVar3 = (long *)FUN_0049f6f0(param_2,param_2,plVar2);\n        if (plVar3[4] <= lVar1) goto LAB_0033546c;\n        plVar2 = plVar3;\n        if (param_2[3] == 0) {\n          plVar3 = (long *)0x0;\n          plVar2 = param_2;\n        }\n      }" (if "if") (parenthesized_expression "(plVar2 != param_2)" (( "(") (binary_expression "plVar2 != param_2" (identifier "plVar2") (!= "!=") (identifier "param_2")) () ")")) (compound_statement "{\n        plVar3 = (long *)FUN_0049f6f0(param_2,param_2,plVar2);\n        if (plVar3[4] <= lVar1) goto LAB_0033546c;\n        plVar2 = plVar3;\n        if (param_2[3] == 0) {\n          plVar3 = (long *)0x0;\n          plVar2 = param_2;\n        }\n      }" ({ "{") (expression_statement "plVar3 = (long *)FUN_0049f6f0(param_2,param_2,plVar2);" (assignment_expression "plVar3 = (long *)FUN_0049f6f0(param_2,param_2,plVar2)" (identifier "plVar3") (= "=") (cast_expression "(long *)FUN_0049f6f0(param_2,param_2,plVar2)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_0049f6f0(param_2,param_2,plVar2)" (identifier "FUN_0049f6f0") (argument_list "(param_2,param_2,plVar2)" (( "(") (identifier "param_2") (, ",") (identifier "param_2") (, ",") (identifier "plVar2") () ")"))))) (; ";")) (if_statement "if (plVar3[4] <= lVar1) goto LAB_0033546c;" (if "if") (parenthesized_expression "(plVar3[4] <= lVar1)" (( "(") (binary_expression "plVar3[4] <= lVar1" (subscript_expression "plVar3[4]" (identifier "plVar3") ([ "[") (number_literal "4") (] "]")) (<= "<=") (identifier "lVar1")) () ")")) (goto_statement "goto LAB_0033546c;" (goto "goto") (statement_identifier "LAB_0033546c") (; ";"))) (expression_statement "plVar2 = plVar3;" (assignment_expression "plVar2 = plVar3" (identifier "plVar2") (= "=") (identifier "plVar3")) (; ";")) (if_statement "if (param_2[3] == 0) {\n          plVar3 = (long *)0x0;\n          plVar2 = param_2;\n        }" (if "if") (parenthesized_expression "(param_2[3] == 0)" (( "(") (binary_expression "param_2[3] == 0" (subscript_expression "param_2[3]" (identifier "param_2") ([ "[") (number_literal "3") (] "]")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n          plVar3 = (long *)0x0;\n          plVar2 = param_2;\n        }" ({ "{") (expression_statement "plVar3 = (long *)0x0;" (assignment_expression "plVar3 = (long *)0x0" (identifier "plVar3") (= "=") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (expression_statement "plVar2 = param_2;" (assignment_expression "plVar2 = param_2" (identifier "plVar2") (= "=") (identifier "param_2")) (; ";")) (} "}"))) (} "}"))) (} "}")))) (expression_statement "auVar4._8_8_ = plVar2;" (assignment_expression "auVar4._8_8_ = plVar2" (field_expression "auVar4._8_8_" (identifier "auVar4") (. ".") (field_identifier "_8_8_")) (= "=") (identifier "plVar2")) (; ";")) (expression_statement "auVar4._0_8_ = plVar3;" (assignment_expression "auVar4._0_8_ = plVar3" (field_expression "auVar4._0_8_" (identifier "auVar4") (. ".") (field_identifier "_0_8_")) (= "=") (identifier "plVar3")) (; ";")) (return_statement "return auVar4;" (return "return") (identifier "auVar4") (; ";")) (} "}"))) (expression_statement "plVar3 = param_3;" (assignment_expression "plVar3 = param_3" (identifier "plVar3") (= "=") (identifier "param_3")) (; ";")) (if_statement "if ((*(long *)(param_1 + 0x28) != 0) && (*(long *)(*(ulong *)(param_1 + 0x20) + 0x20) < *param_3))\n  {\n    auVar5._8_8_ = 0;\n    auVar5._0_8_ = *(ulong *)(param_1 + 0x20);\n    return auVar5 << 0x40;\n  }" (if "if") (parenthesized_expression "((*(long *)(param_1 + 0x28) != 0) && (*(long *)(*(ulong *)(param_1 + 0x20) + 0x20) < *param_3))" (( "(") (binary_expression "(*(long *)(param_1 + 0x28) != 0) && (*(long *)(*(ulong *)(param_1 + 0x20) + 0x20) < *param_3)" (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")) () ")")) (&& "&&") (parenthesized_expression "(*(long *)(*(ulong *)(param_1 + 0x20) + 0x20) < *param_3)" (( "(") (binary_expression "*(long *)(*(ulong *)(param_1 + 0x20) + 0x20) < *param_3" (pointer_expression "*(long *)(*(ulong *)(param_1 + 0x20) + 0x20)" (* "*") (cast_expression "(long *)(*(ulong *)(param_1 + 0x20) + 0x20)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(ulong *)(param_1 + 0x20) + 0x20)" (( "(") (binary_expression "*(ulong *)(param_1 + 0x20) + 0x20" (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")) () ")")))) (+ "+") (number_literal "0x20")) () ")")))) (< "<") (pointer_expression "*param_3" (* "*") (identifier "param_3"))) () ")"))) () ")")) (compound_statement "{\n    auVar5._8_8_ = 0;\n    auVar5._0_8_ = *(ulong *)(param_1 + 0x20);\n    return auVar5 << 0x40;\n  }" ({ "{") (expression_statement "auVar5._8_8_ = 0;" (assignment_expression "auVar5._8_8_ = 0" (field_expression "auVar5._8_8_" (identifier "auVar5") (. ".") (field_identifier "_8_8_")) (= "=") (number_literal "0")) (; ";")) (expression_statement "auVar5._0_8_ = *(ulong *)(param_1 + 0x20);" (assignment_expression "auVar5._0_8_ = *(ulong *)(param_1 + 0x20)" (field_expression "auVar5._0_8_" (identifier "auVar5") (. ".") (field_identifier "_0_8_")) (= "=") (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")) () ")"))))) (; ";")) (return_statement "return auVar5 << 0x40;" (return "return") (binary_expression "auVar5 << 0x40" (identifier "auVar5") (<< "<<") (number_literal "0x40")) (; ";")) (} "}"))) (labeled_statement "LAB_0033546c:\n  auVar5 = FUN_00335330(param_1,param_3,plVar3);" (statement_identifier "LAB_0033546c") (: ":") (expression_statement "auVar5 = FUN_00335330(param_1,param_3,plVar3);" (assignment_expression "auVar5 = FUN_00335330(param_1,param_3,plVar3)" (identifier "auVar5") (= "=") (call_expression "FUN_00335330(param_1,param_3,plVar3)" (identifier "FUN_00335330") (argument_list "(param_1,param_3,plVar3)" (( "(") (identifier "param_1") (, ",") (identifier "param_3") (, ",") (identifier "plVar3") () ")")))) (; ";"))) (return_statement "return auVar5;" (return "return") (identifier "auVar5") (; ";")) (ERROR "}" (} "}"))

/* DWARF original prototype: pair<std::_Rb_tree_node_base*,_std::_Rb_tree_node_base*>
   _M_get_insert_hint_unique_pos(_Rb_tree<long_int,_std::pair<long_int_const,_gold::Archive_member>,_std::_Select1st<std::pair<long_int_const,_gold::Archive_member>_>,_std::less<long_int>,_std::allocator<std::pair<long_int_const,_gold::Archive_member>_>_>
   * this, const_iterator __position, key_type.conflict * __k) */

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

{
  long var_4;
  type_7 var_7;
  type_8 var_8 [16];
  type_5 cVar4;
  type_5 cVar5;
  pair<type_1::var_1*,type_3::var_1*> var_2;
  pair<type_1::var_1*,type_3::var_1*> var_3;
  
  if ((type_9 *)__position._M_node != &(this->_M_impl).super__Rb_tree_header) {
    var_4 = *__k;
    if (var_4 < *(long *)(__position._M_node + 1)) {
      cVar5._M_node = (this->_M_impl).super__Rb_tree_header._M_header._M_left;
      cVar4._M_node = cVar5._M_node;
      if (cVar5._M_node != __position._M_node) {
        cVar4._M_node = (type_7)var_5(__position._M_node);
        if (var_4 <= *(long *)(cVar4._M_node + 1)) goto LAB_0033546c;
        cVar5._M_node = (type_7)0x0;
        if ((cVar4._M_node)->_M_right != (type_7)0x0) {
          cVar5._M_node = __position._M_node;
          cVar4._M_node = __position._M_node;
        }
      }
    }
    else {
      if (var_4 <= *(long *)(__position._M_node + 1)) {
        var_3.second = (var_1 *)0x0;
        var_3.first = __position._M_node;
        return var_3;
      }
      cVar4._M_node = (this->_M_impl).super__Rb_tree_header._M_header._M_right;
      cVar5._M_node = (type_7)0x0;
      if (cVar4._M_node != __position._M_node) {
        cVar5._M_node = (type_7)var_6(__position._M_node);
        if (*(long *)(cVar5._M_node + 1) <= var_4) goto LAB_0033546c;
        cVar4._M_node = cVar5._M_node;
        if ((__position._M_node)->_M_right == (type_7)0x0) {
          cVar5._M_node = (type_7)0x0;
          cVar4._M_node = __position._M_node;
        }
      }
    }
    var_2.second = cVar4._M_node;
    var_2.first = cVar5._M_node;
    return var_2;
  }
  if (((this->_M_impl).super__Rb_tree_header._M_node_count != 0) &&
     (var_7 = (this->_M_impl).super__Rb_tree_header._M_header._M_right,
     *(long *)(var_7 + 1) < *__k)) {
    var_8._8_8_ = 0;
    var_8._0_8_ = var_7;
    return (pair<type_1::var_1*,type_3::var_1*>)(var_8 << 0x40);
  }
LAB_0033546c:
  var_3 = var_9(this,__k);
  return var_3;
}


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

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

{
  long lVar1;
  long *plVar2;
  long *plVar3;
  undefined1 auVar4 [16];
  undefined1 auVar5 [16];
  undefined1 auVar6 [16];
  
  if (param_2 != (long *)(param_1 + 8)) {
    lVar1 = *param_3;
    if (lVar1 < param_2[4]) {
      plVar3 = *(long **)(param_1 + 0x18);
      plVar2 = plVar3;
      if (plVar3 != param_2) {
        plVar2 = (long *)thunk_FUN_0049f690(param_2,param_2,plVar3);
        plVar3 = plVar2;
        if (lVar1 <= plVar2[4]) goto LAB_0033546c;
        plVar3 = (long *)0x0;
        if (plVar2[3] != 0) {
          plVar3 = param_2;
          plVar2 = param_2;
        }
      }
    }
    else {
      if (lVar1 <= param_2[4]) {
        auVar6._8_8_ = 0;
        auVar6._0_8_ = param_2;
        return auVar6;
      }
      plVar2 = *(long **)(param_1 + 0x20);
      plVar3 = (long *)0x0;
      if (plVar2 != param_2) {
        plVar3 = (long *)FUN_0049f6f0(param_2,param_2,plVar2);
        if (plVar3[4] <= lVar1) goto LAB_0033546c;
        plVar2 = plVar3;
        if (param_2[3] == 0) {
          plVar3 = (long *)0x0;
          plVar2 = param_2;
        }
      }
    }
    auVar4._8_8_ = plVar2;
    auVar4._0_8_ = plVar3;
    return auVar4;
  }
  plVar3 = param_3;
  if ((*(long *)(param_1 + 0x28) != 0) && (*(long *)(*(ulong *)(param_1 + 0x20) + 0x20) < *param_3))
  {
    auVar5._8_8_ = 0;
    auVar5._0_8_ = *(ulong *)(param_1 + 0x20);
    return auVar5 << 0x40;
  }
LAB_0033546c:
  auVar5 = FUN_00335330(param_1,param_3,plVar3);
  return auVar5;
}

