
/* DWARF original prototype: bool operator()(Stringpool_sort_comparison * this, Stringpool_sort_info
   * sort_info1, Stringpool_sort_info * sort_info2) */

bool __thiscall
gold::Stringpool_template<unsigned_int>::Stringpool_sort_comparison::operator()
          (Stringpool_sort_comparison *this,Stringpool_sort_info *sort_info1,
          Stringpool_sort_info *sort_info2)

{
  uint *puVar1;
  uint *puVar2;
  __node_type *p_Var3;
  __node_type *p_Var4;
  uint uVar5;
  uint uVar6;
  uint uVar7;
  uint uVar8;
  uint uVar9;
  uint uVar10;
  
  p_Var3 = (sort_info1->
           super__Node_iterator_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>,_true>
           )._M_cur;
  p_Var4 = (sort_info2->
           super__Node_iterator_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>,_true>
           )._M_cur;
  uVar5 = *(uint *)((int)&(p_Var3->
                          super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>_>
                          )._M_storage._M_storage + 4);
  uVar6 = *(uint *)((int)&(p_Var4->
                          super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>_>
                          )._M_storage._M_storage + 4);
  puVar1 = (uint *)((int)(p_Var3->
                         super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>_>
                         )._M_storage._M_storage.__align + -4 + uVar5 * 4);
  puVar2 = (uint *)((int)(p_Var4->
                         super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>_>
                         )._M_storage._M_storage.__align + -4 + uVar6 * 4);
  uVar7 = uVar6;
  if (uVar5 <= uVar6) {
    uVar7 = uVar5;
  }
  if (uVar7 == 0) {
LAB_001727ef:
    return uVar6 < uVar5;
  }
  uVar9 = *puVar1;
  uVar10 = *puVar2;
  uVar8 = uVar7;
  if (uVar9 == uVar10) {
    do {
      uVar8 = uVar8 - 1;
      if (uVar8 == 0) goto LAB_001727ef;
      uVar9 = puVar1[uVar8 - uVar7];
      uVar10 = puVar2[uVar8 - uVar7];
    } while (uVar9 == uVar10);
  }
  return uVar10 < uVar9;
}



undefined4 FUN_00172790(undefined4 param_1,int *param_2,int *param_3)

{
  uint *puVar1;
  uint *puVar2;
  uint uVar3;
  uint uVar4;
  uint uVar5;
  uint uVar6;
  uint uVar7;
  uint uVar8;
  
  uVar3 = *(uint *)(*param_2 + 8);
  uVar4 = *(uint *)(*param_3 + 8);
  puVar1 = (uint *)(*(int *)(*param_2 + 4) + -4 + uVar3 * 4);
  puVar2 = (uint *)(*(int *)(*param_3 + 4) + -4 + uVar4 * 4);
  uVar5 = uVar4;
  if (uVar3 <= uVar4) {
    uVar5 = uVar3;
  }
  uVar6 = uVar5;
  if (uVar5 == 0) {
LAB_001727ef:
    return CONCAT31((int3)(uVar6 >> 8),uVar4 < uVar3);
  }
  uVar7 = *puVar1;
  uVar8 = *puVar2;
  if (uVar7 == uVar8) {
    do {
      uVar6 = uVar6 - 1;
      if (uVar6 == 0) goto LAB_001727ef;
      uVar7 = puVar1[uVar6 - uVar5];
      uVar8 = puVar2[uVar6 - uVar5];
    } while (uVar7 == uVar8);
  }
  return CONCAT31((int3)(uVar6 >> 8),uVar8 < uVar7);
}


PUSH EBP
PUSH EDI
PUSH ESI
PUSH EBX
MOV EAX,dword ptr [ESP + 0x18]
MOV ECX,dword ptr [EAX]
MOV EAX,dword ptr [ESP + 0x1c]
MOV EDX,dword ptr [EAX]
MOV EBP,dword ptr [ECX + 0x8]
MOV ECX,dword ptr [ECX + 0x4]
MOV EDI,dword ptr [EDX + 0x8]
MOV EDX,dword ptr [EDX + 0x4]
LEA ESI,[ECX + EBP*0x4 + -0x4]
CMP EBP,EDI
MOV EAX,EDI
LEA EBX,[EDX + EDI*0x4 + -0x4]
CMOVBE EAX,EBP
TEST EAX,EAX
JZ 0x001727ef
MOV ECX,dword ptr [ESI]
MOV EDX,dword ptr [EBX]
CMP ECX,EDX
JNZ 0x00172800
LEA EDX,[EAX*0x4 + 0x0]
NEG EDX
ADD ESI,EDX
ADD EBX,EDX
JMP 0x001727ea
MOV ECX,dword ptr [ESI + EAX*0x4]
MOV EDX,dword ptr [EBX + EAX*0x4]
CMP ECX,EDX
JNZ 0x00172800
SUB EAX,0x1
JNZ 0x001727e0
CMP EBP,EDI
POP EBX
POP ESI
SETA AL
POP EDI
POP EBP
RET
CMP ECX,EDX
POP EBX
POP ESI
SETA AL
POP EDI
POP EBP
RET
(translation_unit "undefined4 FUN_00172790(undefined4 param_1,int *param_2,int *param_3)\n\n{\n  uint *puVar1;\n  uint *puVar2;\n  uint uVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  uint uVar7;\n  uint uVar8;\n  \n  uVar3 = *(uint *)(*param_2 + 8);\n  uVar4 = *(uint *)(*param_3 + 8);\n  puVar1 = (uint *)(*(int *)(*param_2 + 4) + -4 + uVar3 * 4);\n  puVar2 = (uint *)(*(int *)(*param_3 + 4) + -4 + uVar4 * 4);\n  uVar5 = uVar4;\n  if (uVar3 <= uVar4) {\n    uVar5 = uVar3;\n  }\n  uVar6 = uVar5;\n  if (uVar5 == 0) {\nLAB_001727ef:\n    return CONCAT31((int3)(uVar6 >> 8),uVar4 < uVar3);\n  }\n  uVar7 = *puVar1;\n  uVar8 = *puVar2;\n  if (uVar7 == uVar8) {\n    do {\n      uVar6 = uVar6 - 1;\n      if (uVar6 == 0) goto LAB_001727ef;\n      uVar7 = puVar1[uVar6 - uVar5];\n      uVar8 = puVar2[uVar6 - uVar5];\n    } while (uVar7 == uVar8);\n  }\n  return CONCAT31((int3)(uVar6 >> 8),uVar8 < uVar7);\n}\n\n" (function_definition "undefined4 FUN_00172790(undefined4 param_1,int *param_2,int *param_3)\n\n{\n  uint *puVar1;\n  uint *puVar2;\n  uint uVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  uint uVar7;\n  uint uVar8;\n  \n  uVar3 = *(uint *)(*param_2 + 8);\n  uVar4 = *(uint *)(*param_3 + 8);\n  puVar1 = (uint *)(*(int *)(*param_2 + 4) + -4 + uVar3 * 4);\n  puVar2 = (uint *)(*(int *)(*param_3 + 4) + -4 + uVar4 * 4);\n  uVar5 = uVar4;\n  if (uVar3 <= uVar4) {\n    uVar5 = uVar3;\n  }\n  uVar6 = uVar5;\n  if (uVar5 == 0) {\nLAB_001727ef:\n    return CONCAT31((int3)(uVar6 >> 8),uVar4 < uVar3);\n  }\n  uVar7 = *puVar1;\n  uVar8 = *puVar2;\n  if (uVar7 == uVar8) {\n    do {\n      uVar6 = uVar6 - 1;\n      if (uVar6 == 0) goto LAB_001727ef;\n      uVar7 = puVar1[uVar6 - uVar5];\n      uVar8 = puVar2[uVar6 - uVar5];\n    } while (uVar7 == uVar8);\n  }\n  return CONCAT31((int3)(uVar6 >> 8),uVar8 < uVar7);\n}" type_identifier (function_declarator "FUN_00172790(undefined4 param_1,int *param_2,int *param_3)" identifier (parameter_list "(undefined4 param_1,int *param_2,int *param_3)" ( (parameter_declaration "undefined4 param_1" type_identifier identifier) , (parameter_declaration "int *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "int *param_3" primitive_type (pointer_declarator "*param_3" * identifier)) ))) (compound_statement "{\n  uint *puVar1;\n  uint *puVar2;\n  uint uVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  uint uVar7;\n  uint uVar8;\n  \n  uVar3 = *(uint *)(*param_2 + 8);\n  uVar4 = *(uint *)(*param_3 + 8);\n  puVar1 = (uint *)(*(int *)(*param_2 + 4) + -4 + uVar3 * 4);\n  puVar2 = (uint *)(*(int *)(*param_3 + 4) + -4 + uVar4 * 4);\n  uVar5 = uVar4;\n  if (uVar3 <= uVar4) {\n    uVar5 = uVar3;\n  }\n  uVar6 = uVar5;\n  if (uVar5 == 0) {\nLAB_001727ef:\n    return CONCAT31((int3)(uVar6 >> 8),uVar4 < uVar3);\n  }\n  uVar7 = *puVar1;\n  uVar8 = *puVar2;\n  if (uVar7 == uVar8) {\n    do {\n      uVar6 = uVar6 - 1;\n      if (uVar6 == 0) goto LAB_001727ef;\n      uVar7 = puVar1[uVar6 - uVar5];\n      uVar8 = puVar2[uVar6 - uVar5];\n    } while (uVar7 == uVar8);\n  }\n  return CONCAT31((int3)(uVar6 >> 8),uVar8 < uVar7);\n}" { (declaration "uint *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "uint *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "uint uVar7;" type_identifier identifier ;) (declaration "uint uVar8;" type_identifier identifier ;) (expression_statement "uVar3 = *(uint *)(*param_2 + 8);" (assignment_expression "uVar3 = *(uint *)(*param_2 + 8)" identifier = (pointer_expression "*(uint *)(*param_2 + 8)" * (cast_expression "(uint *)(*param_2 + 8)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_2 + 8)" ( (binary_expression "*param_2 + 8" (pointer_expression "*param_2" * identifier) + number_literal) ))))) ;) (expression_statement "uVar4 = *(uint *)(*param_3 + 8);" (assignment_expression "uVar4 = *(uint *)(*param_3 + 8)" identifier = (pointer_expression "*(uint *)(*param_3 + 8)" * (cast_expression "(uint *)(*param_3 + 8)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_3 + 8)" ( (binary_expression "*param_3 + 8" (pointer_expression "*param_3" * identifier) + number_literal) ))))) ;) (expression_statement "puVar1 = (uint *)(*(int *)(*param_2 + 4) + -4 + uVar3 * 4);" (assignment_expression "puVar1 = (uint *)(*(int *)(*param_2 + 4) + -4 + uVar3 * 4)" identifier = (cast_expression "(uint *)(*(int *)(*param_2 + 4) + -4 + uVar3 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(*param_2 + 4) + -4 + uVar3 * 4)" ( (binary_expression "*(int *)(*param_2 + 4) + -4 + uVar3 * 4" (binary_expression "*(int *)(*param_2 + 4) + -4" (pointer_expression "*(int *)(*param_2 + 4)" * (cast_expression "(int *)(*param_2 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_2 + 4)" ( (binary_expression "*param_2 + 4" (pointer_expression "*param_2" * identifier) + number_literal) )))) + number_literal) + (binary_expression "uVar3 * 4" identifier * number_literal)) )))) ;) (expression_statement "puVar2 = (uint *)(*(int *)(*param_3 + 4) + -4 + uVar4 * 4);" (assignment_expression "puVar2 = (uint *)(*(int *)(*param_3 + 4) + -4 + uVar4 * 4)" identifier = (cast_expression "(uint *)(*(int *)(*param_3 + 4) + -4 + uVar4 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(*param_3 + 4) + -4 + uVar4 * 4)" ( (binary_expression "*(int *)(*param_3 + 4) + -4 + uVar4 * 4" (binary_expression "*(int *)(*param_3 + 4) + -4" (pointer_expression "*(int *)(*param_3 + 4)" * (cast_expression "(int *)(*param_3 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_3 + 4)" ( (binary_expression "*param_3 + 4" (pointer_expression "*param_3" * identifier) + number_literal) )))) + number_literal) + (binary_expression "uVar4 * 4" identifier * number_literal)) )))) ;) (expression_statement "uVar5 = uVar4;" (assignment_expression "uVar5 = uVar4" identifier = identifier) ;) (if_statement "if (uVar3 <= uVar4) {\n    uVar5 = uVar3;\n  }" if (parenthesized_expression "(uVar3 <= uVar4)" ( (binary_expression "uVar3 <= uVar4" identifier <= identifier) )) (compound_statement "{\n    uVar5 = uVar3;\n  }" { (expression_statement "uVar5 = uVar3;" (assignment_expression "uVar5 = uVar3" identifier = identifier) ;) })) (expression_statement "uVar6 = uVar5;" (assignment_expression "uVar6 = uVar5" identifier = identifier) ;) (if_statement "if (uVar5 == 0) {\nLAB_001727ef:\n    return CONCAT31((int3)(uVar6 >> 8),uVar4 < uVar3);\n  }" if (parenthesized_expression "(uVar5 == 0)" ( (binary_expression "uVar5 == 0" identifier == number_literal) )) (compound_statement "{\nLAB_001727ef:\n    return CONCAT31((int3)(uVar6 >> 8),uVar4 < uVar3);\n  }" { (labeled_statement "LAB_001727ef:\n    return CONCAT31((int3)(uVar6 >> 8),uVar4 < uVar3);" statement_identifier : (return_statement "return CONCAT31((int3)(uVar6 >> 8),uVar4 < uVar3);" return (call_expression "CONCAT31((int3)(uVar6 >> 8),uVar4 < uVar3)" identifier (argument_list "((int3)(uVar6 >> 8),uVar4 < uVar3)" ( (call_expression "(int3)(uVar6 >> 8)" (parenthesized_expression "(int3)" ( identifier )) (argument_list "(uVar6 >> 8)" ( (binary_expression "uVar6 >> 8" identifier >> number_literal) ))) , (binary_expression "uVar4 < uVar3" identifier < identifier) ))) ;)) })) (expression_statement "uVar7 = *puVar1;" (assignment_expression "uVar7 = *puVar1" identifier = (pointer_expression "*puVar1" * identifier)) ;) (expression_statement "uVar8 = *puVar2;" (assignment_expression "uVar8 = *puVar2" identifier = (pointer_expression "*puVar2" * identifier)) ;) (if_statement "if (uVar7 == uVar8) {\n    do {\n      uVar6 = uVar6 - 1;\n      if (uVar6 == 0) goto LAB_001727ef;\n      uVar7 = puVar1[uVar6 - uVar5];\n      uVar8 = puVar2[uVar6 - uVar5];\n    } while (uVar7 == uVar8);\n  }" if (parenthesized_expression "(uVar7 == uVar8)" ( (binary_expression "uVar7 == uVar8" identifier == identifier) )) (compound_statement "{\n    do {\n      uVar6 = uVar6 - 1;\n      if (uVar6 == 0) goto LAB_001727ef;\n      uVar7 = puVar1[uVar6 - uVar5];\n      uVar8 = puVar2[uVar6 - uVar5];\n    } while (uVar7 == uVar8);\n  }" { (do_statement "do {\n      uVar6 = uVar6 - 1;\n      if (uVar6 == 0) goto LAB_001727ef;\n      uVar7 = puVar1[uVar6 - uVar5];\n      uVar8 = puVar2[uVar6 - uVar5];\n    } while (uVar7 == uVar8);" do (compound_statement "{\n      uVar6 = uVar6 - 1;\n      if (uVar6 == 0) goto LAB_001727ef;\n      uVar7 = puVar1[uVar6 - uVar5];\n      uVar8 = puVar2[uVar6 - uVar5];\n    }" { (expression_statement "uVar6 = uVar6 - 1;" (assignment_expression "uVar6 = uVar6 - 1" identifier = (binary_expression "uVar6 - 1" identifier - number_literal)) ;) (if_statement "if (uVar6 == 0) goto LAB_001727ef;" if (parenthesized_expression "(uVar6 == 0)" ( (binary_expression "uVar6 == 0" identifier == number_literal) )) (goto_statement "goto LAB_001727ef;" goto statement_identifier ;)) (expression_statement "uVar7 = puVar1[uVar6 - uVar5];" (assignment_expression "uVar7 = puVar1[uVar6 - uVar5]" identifier = (subscript_expression "puVar1[uVar6 - uVar5]" identifier [ (binary_expression "uVar6 - uVar5" identifier - identifier) ])) ;) (expression_statement "uVar8 = puVar2[uVar6 - uVar5];" (assignment_expression "uVar8 = puVar2[uVar6 - uVar5]" identifier = (subscript_expression "puVar2[uVar6 - uVar5]" identifier [ (binary_expression "uVar6 - uVar5" identifier - identifier) ])) ;) }) while (parenthesized_expression "(uVar7 == uVar8)" ( (binary_expression "uVar7 == uVar8" identifier == identifier) )) ;) })) (return_statement "return CONCAT31((int3)(uVar6 >> 8),uVar8 < uVar7);" return (call_expression "CONCAT31((int3)(uVar6 >> 8),uVar8 < uVar7)" identifier (argument_list "((int3)(uVar6 >> 8),uVar8 < uVar7)" ( (call_expression "(int3)(uVar6 >> 8)" (parenthesized_expression "(int3)" ( identifier )) (argument_list "(uVar6 >> 8)" ( (binary_expression "uVar6 >> 8" identifier >> number_literal) ))) , (binary_expression "uVar8 < uVar7" identifier < identifier) ))) ;) })))
(translation_unit "/* DWARF original prototype: bool operator()(Stringpool_sort_comparison * this, Stringpool_sort_info\n   * sort_info1, Stringpool_sort_info * sort_info2) */\n\nbool __thiscall\ngold::Stringpool_template<unsigned_int>::Stringpool_sort_comparison::operator()\n          (Stringpool_sort_comparison *this,Stringpool_sort_info *sort_info1,\n          Stringpool_sort_info *sort_info2)\n\n{\n  uint *puVar1;\n  uint *puVar2;\n  __node_type *p_Var3;\n  __node_type *p_Var4;\n  uint uVar5;\n  uint uVar6;\n  uint uVar7;\n  uint uVar8;\n  uint uVar9;\n  uint uVar10;\n  \n  p_Var3 = (sort_info1->\n           super__Node_iterator_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>,_true>\n           )._M_cur;\n  p_Var4 = (sort_info2->\n           super__Node_iterator_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>,_true>\n           )._M_cur;\n  uVar5 = *(uint *)((int)&(p_Var3->\n                          super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>_>\n                          )._M_storage._M_storage + 4);\n  uVar6 = *(uint *)((int)&(p_Var4->\n                          super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>_>\n                          )._M_storage._M_storage + 4);\n  puVar1 = (uint *)((int)(p_Var3->\n                         super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>_>\n                         )._M_storage._M_storage.__align + -4 + uVar5 * 4);\n  puVar2 = (uint *)((int)(p_Var4->\n                         super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>_>\n                         )._M_storage._M_storage.__align + -4 + uVar6 * 4);\n  uVar7 = uVar6;\n  if (uVar5 <= uVar6) {\n    uVar7 = uVar5;\n  }\n  if (uVar7 == 0) {\nLAB_001727ef:\n    return uVar6 < uVar5;\n  }\n  uVar9 = *puVar1;\n  uVar10 = *puVar2;\n  uVar8 = uVar7;\n  if (uVar9 == uVar10) {\n    do {\n      uVar8 = uVar8 - 1;\n      if (uVar8 == 0) goto LAB_001727ef;\n      uVar9 = puVar1[uVar8 - uVar7];\n      uVar10 = puVar2[uVar8 - uVar7];\n    } while (uVar9 == uVar10);\n  }\n  return uVar10 < uVar9;\n}\n\n" comment (function_definition "bool __thiscall\ngold::Stringpool_template<unsigned_int>::Stringpool_sort_comparison::operator()\n          (Stringpool_sort_comparison *this,Stringpool_sort_info *sort_info1,\n          Stringpool_sort_info *sort_info2)\n\n{\n  uint *puVar1;\n  uint *puVar2;\n  __node_type *p_Var3;\n  __node_type *p_Var4;\n  uint uVar5;\n  uint uVar6;\n  uint uVar7;\n  uint uVar8;\n  uint uVar9;\n  uint uVar10;\n  \n  p_Var3 = (sort_info1->\n           super__Node_iterator_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>,_true>\n           )._M_cur;\n  p_Var4 = (sort_info2->\n           super__Node_iterator_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>,_true>\n           )._M_cur;\n  uVar5 = *(uint *)((int)&(p_Var3->\n                          super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>_>\n                          )._M_storage._M_storage + 4);\n  uVar6 = *(uint *)((int)&(p_Var4->\n                          super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>_>\n                          )._M_storage._M_storage + 4);\n  puVar1 = (uint *)((int)(p_Var3->\n                         super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>_>\n                         )._M_storage._M_storage.__align + -4 + uVar5 * 4);\n  puVar2 = (uint *)((int)(p_Var4->\n                         super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>_>\n                         )._M_storage._M_storage.__align + -4 + uVar6 * 4);\n  uVar7 = uVar6;\n  if (uVar5 <= uVar6) {\n    uVar7 = uVar5;\n  }\n  if (uVar7 == 0) {\nLAB_001727ef:\n    return uVar6 < uVar5;\n  }\n  uVar9 = *puVar1;\n  uVar10 = *puVar2;\n  uVar8 = uVar7;\n  if (uVar9 == uVar10) {\n    do {\n      uVar8 = uVar8 - 1;\n      if (uVar8 == 0) goto LAB_001727ef;\n      uVar9 = puVar1[uVar8 - uVar7];\n      uVar10 = puVar2[uVar8 - uVar7];\n    } while (uVar9 == uVar10);\n  }\n  return uVar10 < uVar9;\n}" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::Stringpool_template<unsigned_int>::Stringpool_sort_comparison::" identifier : : identifier < identifier > : : identifier : :) (function_declarator "operator()\n          (Stringpool_sort_comparison *this,Stringpool_sort_info *sort_info1,\n          Stringpool_sort_info *sort_info2)" (function_declarator "operator()" identifier (parameter_list "()" ( ))) (parameter_list "(Stringpool_sort_comparison *this,Stringpool_sort_info *sort_info1,\n          Stringpool_sort_info *sort_info2)" ( (parameter_declaration "Stringpool_sort_comparison *this" type_identifier (pointer_declarator "*this" * identifier)) , (parameter_declaration "Stringpool_sort_info *sort_info1" type_identifier (pointer_declarator "*sort_info1" * identifier)) , (parameter_declaration "Stringpool_sort_info *sort_info2" type_identifier (pointer_declarator "*sort_info2" * identifier)) ))) (compound_statement "{\n  uint *puVar1;\n  uint *puVar2;\n  __node_type *p_Var3;\n  __node_type *p_Var4;\n  uint uVar5;\n  uint uVar6;\n  uint uVar7;\n  uint uVar8;\n  uint uVar9;\n  uint uVar10;\n  \n  p_Var3 = (sort_info1->\n           super__Node_iterator_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>,_true>\n           )._M_cur;\n  p_Var4 = (sort_info2->\n           super__Node_iterator_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>,_true>\n           )._M_cur;\n  uVar5 = *(uint *)((int)&(p_Var3->\n                          super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>_>\n                          )._M_storage._M_storage + 4);\n  uVar6 = *(uint *)((int)&(p_Var4->\n                          super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>_>\n                          )._M_storage._M_storage + 4);\n  puVar1 = (uint *)((int)(p_Var3->\n                         super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>_>\n                         )._M_storage._M_storage.__align + -4 + uVar5 * 4);\n  puVar2 = (uint *)((int)(p_Var4->\n                         super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>_>\n                         )._M_storage._M_storage.__align + -4 + uVar6 * 4);\n  uVar7 = uVar6;\n  if (uVar5 <= uVar6) {\n    uVar7 = uVar5;\n  }\n  if (uVar7 == 0) {\nLAB_001727ef:\n    return uVar6 < uVar5;\n  }\n  uVar9 = *puVar1;\n  uVar10 = *puVar2;\n  uVar8 = uVar7;\n  if (uVar9 == uVar10) {\n    do {\n      uVar8 = uVar8 - 1;\n      if (uVar8 == 0) goto LAB_001727ef;\n      uVar9 = puVar1[uVar8 - uVar7];\n      uVar10 = puVar2[uVar8 - uVar7];\n    } while (uVar9 == uVar10);\n  }\n  return uVar10 < uVar9;\n}" { (declaration "uint *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "uint *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "__node_type *p_Var3;" type_identifier (pointer_declarator "*p_Var3" * identifier) ;) (declaration "__node_type *p_Var4;" type_identifier (pointer_declarator "*p_Var4" * identifier) ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "uint uVar7;" type_identifier identifier ;) (declaration "uint uVar8;" type_identifier identifier ;) (declaration "uint uVar9;" type_identifier identifier ;) (declaration "uint uVar10;" type_identifier identifier ;) (expression_statement "p_Var3 = (sort_info1->\n           super__Node_iterator_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>,_true>\n           )._M_cur;" (assignment_expression "p_Var3 = (sort_info1->\n           super__Node_iterator_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>,_true>\n           )._M_cur" identifier = (field_expression "(sort_info1->\n           super__Node_iterator_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>,_true>\n           )._M_cur" (parenthesized_expression "(sort_info1->\n           super__Node_iterator_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>,_true>\n           )" ( (comma_expression "sort_info1->\n           super__Node_iterator_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>,_true" (binary_expression "sort_info1->\n           super__Node_iterator_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey" (binary_expression "sort_info1->\n           super__Node_iterator_base<std::pair<const_gold::Stringpool_template<unsigned_int" (binary_expression "sort_info1->\n           super__Node_iterator_base<std::pair<const_gold" (binary_expression "sort_info1->\n           super__Node_iterator_base<std" (field_expression "sort_info1->\n           super__Node_iterator_base" identifier -> field_identifier) < identifier) (ERROR "::pair" : : identifier) < identifier) (ERROR "::Stringpool_template" : : identifier) < identifier) > (ERROR "::" : :) identifier) , (binary_expression "_unsigned_int>,_true" identifier > (ERROR "," ,) identifier)) (ERROR ">" >) )) . field_identifier)) ;) (expression_statement "p_Var4 = (sort_info2->\n           super__Node_iterator_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>,_true>\n           )._M_cur;" (assignment_expression "p_Var4 = (sort_info2->\n           super__Node_iterator_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>,_true>\n           )._M_cur" identifier = (field_expression "(sort_info2->\n           super__Node_iterator_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>,_true>\n           )._M_cur" (parenthesized_expression "(sort_info2->\n           super__Node_iterator_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>,_true>\n           )" ( (comma_expression "sort_info2->\n           super__Node_iterator_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>,_true" (binary_expression "sort_info2->\n           super__Node_iterator_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey" (binary_expression "sort_info2->\n           super__Node_iterator_base<std::pair<const_gold::Stringpool_template<unsigned_int" (binary_expression "sort_info2->\n           super__Node_iterator_base<std::pair<const_gold" (binary_expression "sort_info2->\n           super__Node_iterator_base<std" (field_expression "sort_info2->\n           super__Node_iterator_base" identifier -> field_identifier) < identifier) (ERROR "::pair" : : identifier) < identifier) (ERROR "::Stringpool_template" : : identifier) < identifier) > (ERROR "::" : :) identifier) , (binary_expression "_unsigned_int>,_true" identifier > (ERROR "," ,) identifier)) (ERROR ">" >) )) . field_identifier)) ;) (expression_statement "uVar5 = *(uint *)((int)&(p_Var3->\n                          super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>_>\n                          )._M_storage._M_storage + 4);" (assignment_expression "uVar5 = *(uint *)((int)&(p_Var3->\n                          super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>_>\n                          )._M_storage._M_storage + 4)" identifier = (pointer_expression "*(uint *)((int)&(p_Var3->\n                          super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>_>\n                          )._M_storage._M_storage + 4)" * (cast_expression "(uint *)((int)&(p_Var3->\n                          super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>_>\n                          )._M_storage._M_storage + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&(p_Var3->\n                          super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>_>\n                          )._M_storage._M_storage + 4)" ( (binary_expression "(int)&(p_Var3->\n                          super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>_>\n                          )._M_storage._M_storage + 4" (cast_expression "(int)&(p_Var3->\n                          super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>_>\n                          )._M_storage._M_storage" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&(p_Var3->\n                          super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>_>\n                          )._M_storage._M_storage" & (field_expression "(p_Var3->\n                          super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>_>\n                          )._M_storage._M_storage" (field_expression "(p_Var3->\n                          super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>_>\n                          )._M_storage" (parenthesized_expression "(p_Var3->\n                          super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>_>\n                          )" ( (comma_expression "p_Var3->\n                          super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>_" (binary_expression "p_Var3->\n                          super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey" (binary_expression "p_Var3->\n                          super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int" (binary_expression "p_Var3->\n                          super__Hash_node_value_base<std::pair<const_gold" (binary_expression "p_Var3->\n                          super__Hash_node_value_base<std" (field_expression "p_Var3->\n                          super__Hash_node_value_base" identifier -> field_identifier) < identifier) (ERROR "::pair" : : identifier) < identifier) (ERROR "::Stringpool_template" : : identifier) < identifier) > (ERROR "::" : :) identifier) , (binary_expression "_unsigned_int>_" identifier > identifier)) (ERROR ">" >) )) . field_identifier) . field_identifier))) + number_literal) ))))) ;) (expression_statement "uVar6 = *(uint *)((int)&(p_Var4->\n                          super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>_>\n                          )._M_storage._M_storage + 4);" (assignment_expression "uVar6 = *(uint *)((int)&(p_Var4->\n                          super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>_>\n                          )._M_storage._M_storage + 4)" identifier = (pointer_expression "*(uint *)((int)&(p_Var4->\n                          super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>_>\n                          )._M_storage._M_storage + 4)" * (cast_expression "(uint *)((int)&(p_Var4->\n                          super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>_>\n                          )._M_storage._M_storage + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&(p_Var4->\n                          super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>_>\n                          )._M_storage._M_storage + 4)" ( (binary_expression "(int)&(p_Var4->\n                          super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>_>\n                          )._M_storage._M_storage + 4" (cast_expression "(int)&(p_Var4->\n                          super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>_>\n                          )._M_storage._M_storage" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&(p_Var4->\n                          super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>_>\n                          )._M_storage._M_storage" & (field_expression "(p_Var4->\n                          super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>_>\n                          )._M_storage._M_storage" (field_expression "(p_Var4->\n                          super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>_>\n                          )._M_storage" (parenthesized_expression "(p_Var4->\n                          super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>_>\n                          )" ( (comma_expression "p_Var4->\n                          super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>_" (binary_expression "p_Var4->\n                          super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey" (binary_expression "p_Var4->\n                          super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int" (binary_expression "p_Var4->\n                          super__Hash_node_value_base<std::pair<const_gold" (binary_expression "p_Var4->\n                          super__Hash_node_value_base<std" (field_expression "p_Var4->\n                          super__Hash_node_value_base" identifier -> field_identifier) < identifier) (ERROR "::pair" : : identifier) < identifier) (ERROR "::Stringpool_template" : : identifier) < identifier) > (ERROR "::" : :) identifier) , (binary_expression "_unsigned_int>_" identifier > identifier)) (ERROR ">" >) )) . field_identifier) . field_identifier))) + number_literal) ))))) ;) (expression_statement "puVar1 = (uint *)((int)(p_Var3->\n                         super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>_>\n                         )._M_storage._M_storage.__align + -4 + uVar5 * 4);" (assignment_expression "puVar1 = (uint *)((int)(p_Var3->\n                         super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>_>\n                         )._M_storage._M_storage.__align + -4 + uVar5 * 4)" identifier = (cast_expression "(uint *)((int)(p_Var3->\n                         super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>_>\n                         )._M_storage._M_storage.__align + -4 + uVar5 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)(p_Var3->\n                         super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>_>\n                         )._M_storage._M_storage.__align + -4 + uVar5 * 4)" ( (binary_expression "(int)(p_Var3->\n                         super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>_>\n                         )._M_storage._M_storage.__align + -4 + uVar5 * 4" (binary_expression "(int)(p_Var3->\n                         super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>_>\n                         )._M_storage._M_storage.__align + -4" (cast_expression "(int)(p_Var3->\n                         super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>_>\n                         )._M_storage._M_storage.__align" ( (type_descriptor "int" primitive_type) ) (field_expression "(p_Var3->\n                         super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>_>\n                         )._M_storage._M_storage.__align" (field_expression "(p_Var3->\n                         super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>_>\n                         )._M_storage._M_storage" (field_expression "(p_Var3->\n                         super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>_>\n                         )._M_storage" (parenthesized_expression "(p_Var3->\n                         super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>_>\n                         )" ( (comma_expression "p_Var3->\n                         super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>_" (binary_expression "p_Var3->\n                         super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey" (binary_expression "p_Var3->\n                         super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int" (binary_expression "p_Var3->\n                         super__Hash_node_value_base<std::pair<const_gold" (binary_expression "p_Var3->\n                         super__Hash_node_value_base<std" (field_expression "p_Var3->\n                         super__Hash_node_value_base" identifier -> field_identifier) < identifier) (ERROR "::pair" : : identifier) < identifier) (ERROR "::Stringpool_template" : : identifier) < identifier) > (ERROR "::" : :) identifier) , (binary_expression "_unsigned_int>_" identifier > identifier)) (ERROR ">" >) )) . field_identifier) . field_identifier) . field_identifier)) + number_literal) + (binary_expression "uVar5 * 4" identifier * number_literal)) )))) ;) (expression_statement "puVar2 = (uint *)((int)(p_Var4->\n                         super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>_>\n                         )._M_storage._M_storage.__align + -4 + uVar6 * 4);" (assignment_expression "puVar2 = (uint *)((int)(p_Var4->\n                         super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>_>\n                         )._M_storage._M_storage.__align + -4 + uVar6 * 4)" identifier = (cast_expression "(uint *)((int)(p_Var4->\n                         super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>_>\n                         )._M_storage._M_storage.__align + -4 + uVar6 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)(p_Var4->\n                         super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>_>\n                         )._M_storage._M_storage.__align + -4 + uVar6 * 4)" ( (binary_expression "(int)(p_Var4->\n                         super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>_>\n                         )._M_storage._M_storage.__align + -4 + uVar6 * 4" (binary_expression "(int)(p_Var4->\n                         super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>_>\n                         )._M_storage._M_storage.__align + -4" (cast_expression "(int)(p_Var4->\n                         super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>_>\n                         )._M_storage._M_storage.__align" ( (type_descriptor "int" primitive_type) ) (field_expression "(p_Var4->\n                         super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>_>\n                         )._M_storage._M_storage.__align" (field_expression "(p_Var4->\n                         super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>_>\n                         )._M_storage._M_storage" (field_expression "(p_Var4->\n                         super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>_>\n                         )._M_storage" (parenthesized_expression "(p_Var4->\n                         super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>_>\n                         )" ( (comma_expression "p_Var4->\n                         super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey,_unsigned_int>_" (binary_expression "p_Var4->\n                         super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int>::Hashkey" (binary_expression "p_Var4->\n                         super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<unsigned_int" (binary_expression "p_Var4->\n                         super__Hash_node_value_base<std::pair<const_gold" (binary_expression "p_Var4->\n                         super__Hash_node_value_base<std" (field_expression "p_Var4->\n                         super__Hash_node_value_base" identifier -> field_identifier) < identifier) (ERROR "::pair" : : identifier) < identifier) (ERROR "::Stringpool_template" : : identifier) < identifier) > (ERROR "::" : :) identifier) , (binary_expression "_unsigned_int>_" identifier > identifier)) (ERROR ">" >) )) . field_identifier) . field_identifier) . field_identifier)) + number_literal) + (binary_expression "uVar6 * 4" identifier * number_literal)) )))) ;) (expression_statement "uVar7 = uVar6;" (assignment_expression "uVar7 = uVar6" identifier = identifier) ;) (if_statement "if (uVar5 <= uVar6) {\n    uVar7 = uVar5;\n  }" if (parenthesized_expression "(uVar5 <= uVar6)" ( (binary_expression "uVar5 <= uVar6" identifier <= identifier) )) (compound_statement "{\n    uVar7 = uVar5;\n  }" { (expression_statement "uVar7 = uVar5;" (assignment_expression "uVar7 = uVar5" identifier = identifier) ;) })) (if_statement "if (uVar7 == 0) {\nLAB_001727ef:\n    return uVar6 < uVar5;\n  }" if (parenthesized_expression "(uVar7 == 0)" ( (binary_expression "uVar7 == 0" identifier == number_literal) )) (compound_statement "{\nLAB_001727ef:\n    return uVar6 < uVar5;\n  }" { (labeled_statement "LAB_001727ef:\n    return uVar6 < uVar5;" statement_identifier : (return_statement "return uVar6 < uVar5;" return (binary_expression "uVar6 < uVar5" identifier < identifier) ;)) })) (expression_statement "uVar9 = *puVar1;" (assignment_expression "uVar9 = *puVar1" identifier = (pointer_expression "*puVar1" * identifier)) ;) (expression_statement "uVar10 = *puVar2;" (assignment_expression "uVar10 = *puVar2" identifier = (pointer_expression "*puVar2" * identifier)) ;) (expression_statement "uVar8 = uVar7;" (assignment_expression "uVar8 = uVar7" identifier = identifier) ;) (if_statement "if (uVar9 == uVar10) {\n    do {\n      uVar8 = uVar8 - 1;\n      if (uVar8 == 0) goto LAB_001727ef;\n      uVar9 = puVar1[uVar8 - uVar7];\n      uVar10 = puVar2[uVar8 - uVar7];\n    } while (uVar9 == uVar10);\n  }" if (parenthesized_expression "(uVar9 == uVar10)" ( (binary_expression "uVar9 == uVar10" identifier == identifier) )) (compound_statement "{\n    do {\n      uVar8 = uVar8 - 1;\n      if (uVar8 == 0) goto LAB_001727ef;\n      uVar9 = puVar1[uVar8 - uVar7];\n      uVar10 = puVar2[uVar8 - uVar7];\n    } while (uVar9 == uVar10);\n  }" { (do_statement "do {\n      uVar8 = uVar8 - 1;\n      if (uVar8 == 0) goto LAB_001727ef;\n      uVar9 = puVar1[uVar8 - uVar7];\n      uVar10 = puVar2[uVar8 - uVar7];\n    } while (uVar9 == uVar10);" do (compound_statement "{\n      uVar8 = uVar8 - 1;\n      if (uVar8 == 0) goto LAB_001727ef;\n      uVar9 = puVar1[uVar8 - uVar7];\n      uVar10 = puVar2[uVar8 - uVar7];\n    }" { (expression_statement "uVar8 = uVar8 - 1;" (assignment_expression "uVar8 = uVar8 - 1" identifier = (binary_expression "uVar8 - 1" identifier - number_literal)) ;) (if_statement "if (uVar8 == 0) goto LAB_001727ef;" if (parenthesized_expression "(uVar8 == 0)" ( (binary_expression "uVar8 == 0" identifier == number_literal) )) (goto_statement "goto LAB_001727ef;" goto statement_identifier ;)) (expression_statement "uVar9 = puVar1[uVar8 - uVar7];" (assignment_expression "uVar9 = puVar1[uVar8 - uVar7]" identifier = (subscript_expression "puVar1[uVar8 - uVar7]" identifier [ (binary_expression "uVar8 - uVar7" identifier - identifier) ])) ;) (expression_statement "uVar10 = puVar2[uVar8 - uVar7];" (assignment_expression "uVar10 = puVar2[uVar8 - uVar7]" identifier = (subscript_expression "puVar2[uVar8 - uVar7]" identifier [ (binary_expression "uVar8 - uVar7" identifier - identifier) ])) ;) }) while (parenthesized_expression "(uVar9 == uVar10)" ( (binary_expression "uVar9 == uVar10" identifier == identifier) )) ;) })) (return_statement "return uVar10 < uVar9;" return (binary_expression "uVar10 < uVar9" identifier < identifier) ;) })))
(translation_unit "undefined4 FUN_00172790(undefined4 param_1,int *param_2,int *param_3)\n\n{\n  uint *puVar1;\n  uint *puVar2;\n  uint uVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  uint uVar7;\n  uint uVar8;\n  \n  uVar3 = *(uint *)(*param_2 + 8);\n  uVar4 = *(uint *)(*param_3 + 8);\n  puVar1 = (uint *)(*(int *)(*param_2 + 4) + -4 + uVar3 * 4);\n  puVar2 = (uint *)(*(int *)(*param_3 + 4) + -4 + uVar4 * 4);\n  uVar5 = uVar4;\n  if (uVar3 <= uVar4) {\n    uVar5 = uVar3;\n  }\n  uVar6 = uVar5;\n  if (uVar5 == 0) {\nLAB_001727ef:\n    return CONCAT31((int3)(uVar6 >> 8),uVar4 < uVar3);\n  }\n  uVar7 = *puVar1;\n  uVar8 = *puVar2;\n  if (uVar7 == uVar8) {\n    do {\n      uVar6 = uVar6 - 1;\n      if (uVar6 == 0) goto LAB_001727ef;\n      uVar7 = puVar1[uVar6 - uVar5];\n      uVar8 = puVar2[uVar6 - uVar5];\n    } while (uVar7 == uVar8);\n  }\n  return CONCAT31((int3)(uVar6 >> 8),uVar8 < uVar7);\n}\n\n" (function_definition "undefined4 FUN_00172790(undefined4 param_1,int *param_2,int *param_3)\n\n{\n  uint *puVar1;\n  uint *puVar2;\n  uint uVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  uint uVar7;\n  uint uVar8;\n  \n  uVar3 = *(uint *)(*param_2 + 8);\n  uVar4 = *(uint *)(*param_3 + 8);\n  puVar1 = (uint *)(*(int *)(*param_2 + 4) + -4 + uVar3 * 4);\n  puVar2 = (uint *)(*(int *)(*param_3 + 4) + -4 + uVar4 * 4);\n  uVar5 = uVar4;\n  if (uVar3 <= uVar4) {\n    uVar5 = uVar3;\n  }\n  uVar6 = uVar5;\n  if (uVar5 == 0) {\nLAB_001727ef:\n    return CONCAT31((int3)(uVar6 >> 8),uVar4 < uVar3);\n  }\n  uVar7 = *puVar1;\n  uVar8 = *puVar2;\n  if (uVar7 == uVar8) {\n    do {\n      uVar6 = uVar6 - 1;\n      if (uVar6 == 0) goto LAB_001727ef;\n      uVar7 = puVar1[uVar6 - uVar5];\n      uVar8 = puVar2[uVar6 - uVar5];\n    } while (uVar7 == uVar8);\n  }\n  return CONCAT31((int3)(uVar6 >> 8),uVar8 < uVar7);\n}" type_identifier (function_declarator "FUN_00172790(undefined4 param_1,int *param_2,int *param_3)" identifier (parameter_list "(undefined4 param_1,int *param_2,int *param_3)" ( (parameter_declaration "undefined4 param_1" type_identifier identifier) , (parameter_declaration "int *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "int *param_3" primitive_type (pointer_declarator "*param_3" * identifier)) ))) (compound_statement "{\n  uint *puVar1;\n  uint *puVar2;\n  uint uVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  uint uVar7;\n  uint uVar8;\n  \n  uVar3 = *(uint *)(*param_2 + 8);\n  uVar4 = *(uint *)(*param_3 + 8);\n  puVar1 = (uint *)(*(int *)(*param_2 + 4) + -4 + uVar3 * 4);\n  puVar2 = (uint *)(*(int *)(*param_3 + 4) + -4 + uVar4 * 4);\n  uVar5 = uVar4;\n  if (uVar3 <= uVar4) {\n    uVar5 = uVar3;\n  }\n  uVar6 = uVar5;\n  if (uVar5 == 0) {\nLAB_001727ef:\n    return CONCAT31((int3)(uVar6 >> 8),uVar4 < uVar3);\n  }\n  uVar7 = *puVar1;\n  uVar8 = *puVar2;\n  if (uVar7 == uVar8) {\n    do {\n      uVar6 = uVar6 - 1;\n      if (uVar6 == 0) goto LAB_001727ef;\n      uVar7 = puVar1[uVar6 - uVar5];\n      uVar8 = puVar2[uVar6 - uVar5];\n    } while (uVar7 == uVar8);\n  }\n  return CONCAT31((int3)(uVar6 >> 8),uVar8 < uVar7);\n}" { (declaration "uint *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "uint *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "uint uVar7;" type_identifier identifier ;) (declaration "uint uVar8;" type_identifier identifier ;) (expression_statement "uVar3 = *(uint *)(*param_2 + 8);" (assignment_expression "uVar3 = *(uint *)(*param_2 + 8)" identifier = (pointer_expression "*(uint *)(*param_2 + 8)" * (cast_expression "(uint *)(*param_2 + 8)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_2 + 8)" ( (binary_expression "*param_2 + 8" (pointer_expression "*param_2" * identifier) + number_literal) ))))) ;) (expression_statement "uVar4 = *(uint *)(*param_3 + 8);" (assignment_expression "uVar4 = *(uint *)(*param_3 + 8)" identifier = (pointer_expression "*(uint *)(*param_3 + 8)" * (cast_expression "(uint *)(*param_3 + 8)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_3 + 8)" ( (binary_expression "*param_3 + 8" (pointer_expression "*param_3" * identifier) + number_literal) ))))) ;) (expression_statement "puVar1 = (uint *)(*(int *)(*param_2 + 4) + -4 + uVar3 * 4);" (assignment_expression "puVar1 = (uint *)(*(int *)(*param_2 + 4) + -4 + uVar3 * 4)" identifier = (cast_expression "(uint *)(*(int *)(*param_2 + 4) + -4 + uVar3 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(*param_2 + 4) + -4 + uVar3 * 4)" ( (binary_expression "*(int *)(*param_2 + 4) + -4 + uVar3 * 4" (binary_expression "*(int *)(*param_2 + 4) + -4" (pointer_expression "*(int *)(*param_2 + 4)" * (cast_expression "(int *)(*param_2 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_2 + 4)" ( (binary_expression "*param_2 + 4" (pointer_expression "*param_2" * identifier) + number_literal) )))) + number_literal) + (binary_expression "uVar3 * 4" identifier * number_literal)) )))) ;) (expression_statement "puVar2 = (uint *)(*(int *)(*param_3 + 4) + -4 + uVar4 * 4);" (assignment_expression "puVar2 = (uint *)(*(int *)(*param_3 + 4) + -4 + uVar4 * 4)" identifier = (cast_expression "(uint *)(*(int *)(*param_3 + 4) + -4 + uVar4 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(*param_3 + 4) + -4 + uVar4 * 4)" ( (binary_expression "*(int *)(*param_3 + 4) + -4 + uVar4 * 4" (binary_expression "*(int *)(*param_3 + 4) + -4" (pointer_expression "*(int *)(*param_3 + 4)" * (cast_expression "(int *)(*param_3 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_3 + 4)" ( (binary_expression "*param_3 + 4" (pointer_expression "*param_3" * identifier) + number_literal) )))) + number_literal) + (binary_expression "uVar4 * 4" identifier * number_literal)) )))) ;) (expression_statement "uVar5 = uVar4;" (assignment_expression "uVar5 = uVar4" identifier = identifier) ;) (if_statement "if (uVar3 <= uVar4) {\n    uVar5 = uVar3;\n  }" if (parenthesized_expression "(uVar3 <= uVar4)" ( (binary_expression "uVar3 <= uVar4" identifier <= identifier) )) (compound_statement "{\n    uVar5 = uVar3;\n  }" { (expression_statement "uVar5 = uVar3;" (assignment_expression "uVar5 = uVar3" identifier = identifier) ;) })) (expression_statement "uVar6 = uVar5;" (assignment_expression "uVar6 = uVar5" identifier = identifier) ;) (if_statement "if (uVar5 == 0) {\nLAB_001727ef:\n    return CONCAT31((int3)(uVar6 >> 8),uVar4 < uVar3);\n  }" if (parenthesized_expression "(uVar5 == 0)" ( (binary_expression "uVar5 == 0" identifier == number_literal) )) (compound_statement "{\nLAB_001727ef:\n    return CONCAT31((int3)(uVar6 >> 8),uVar4 < uVar3);\n  }" { (labeled_statement "LAB_001727ef:\n    return CONCAT31((int3)(uVar6 >> 8),uVar4 < uVar3);" statement_identifier : (return_statement "return CONCAT31((int3)(uVar6 >> 8),uVar4 < uVar3);" return (call_expression "CONCAT31((int3)(uVar6 >> 8),uVar4 < uVar3)" identifier (argument_list "((int3)(uVar6 >> 8),uVar4 < uVar3)" ( (call_expression "(int3)(uVar6 >> 8)" (parenthesized_expression "(int3)" ( identifier )) (argument_list "(uVar6 >> 8)" ( (binary_expression "uVar6 >> 8" identifier >> number_literal) ))) , (binary_expression "uVar4 < uVar3" identifier < identifier) ))) ;)) })) (expression_statement "uVar7 = *puVar1;" (assignment_expression "uVar7 = *puVar1" identifier = (pointer_expression "*puVar1" * identifier)) ;) (expression_statement "uVar8 = *puVar2;" (assignment_expression "uVar8 = *puVar2" identifier = (pointer_expression "*puVar2" * identifier)) ;) (if_statement "if (uVar7 == uVar8) {\n    do {\n      uVar6 = uVar6 - 1;\n      if (uVar6 == 0) goto LAB_001727ef;\n      uVar7 = puVar1[uVar6 - uVar5];\n      uVar8 = puVar2[uVar6 - uVar5];\n    } while (uVar7 == uVar8);\n  }" if (parenthesized_expression "(uVar7 == uVar8)" ( (binary_expression "uVar7 == uVar8" identifier == identifier) )) (compound_statement "{\n    do {\n      uVar6 = uVar6 - 1;\n      if (uVar6 == 0) goto LAB_001727ef;\n      uVar7 = puVar1[uVar6 - uVar5];\n      uVar8 = puVar2[uVar6 - uVar5];\n    } while (uVar7 == uVar8);\n  }" { (do_statement "do {\n      uVar6 = uVar6 - 1;\n      if (uVar6 == 0) goto LAB_001727ef;\n      uVar7 = puVar1[uVar6 - uVar5];\n      uVar8 = puVar2[uVar6 - uVar5];\n    } while (uVar7 == uVar8);" do (compound_statement "{\n      uVar6 = uVar6 - 1;\n      if (uVar6 == 0) goto LAB_001727ef;\n      uVar7 = puVar1[uVar6 - uVar5];\n      uVar8 = puVar2[uVar6 - uVar5];\n    }" { (expression_statement "uVar6 = uVar6 - 1;" (assignment_expression "uVar6 = uVar6 - 1" identifier = (binary_expression "uVar6 - 1" identifier - number_literal)) ;) (if_statement "if (uVar6 == 0) goto LAB_001727ef;" if (parenthesized_expression "(uVar6 == 0)" ( (binary_expression "uVar6 == 0" identifier == number_literal) )) (goto_statement "goto LAB_001727ef;" goto statement_identifier ;)) (expression_statement "uVar7 = puVar1[uVar6 - uVar5];" (assignment_expression "uVar7 = puVar1[uVar6 - uVar5]" identifier = (subscript_expression "puVar1[uVar6 - uVar5]" identifier [ (binary_expression "uVar6 - uVar5" identifier - identifier) ])) ;) (expression_statement "uVar8 = puVar2[uVar6 - uVar5];" (assignment_expression "uVar8 = puVar2[uVar6 - uVar5]" identifier = (subscript_expression "puVar2[uVar6 - uVar5]" identifier [ (binary_expression "uVar6 - uVar5" identifier - identifier) ])) ;) }) while (parenthesized_expression "(uVar7 == uVar8)" ( (binary_expression "uVar7 == uVar8" identifier == identifier) )) ;) })) (return_statement "return CONCAT31((int3)(uVar6 >> 8),uVar8 < uVar7);" return (call_expression "CONCAT31((int3)(uVar6 >> 8),uVar8 < uVar7)" identifier (argument_list "((int3)(uVar6 >> 8),uVar8 < uVar7)" ( (call_expression "(int3)(uVar6 >> 8)" (parenthesized_expression "(int3)" ( identifier )) (argument_list "(uVar6 >> 8)" ( (binary_expression "uVar6 >> 8" identifier >> number_literal) ))) , (binary_expression "uVar8 < uVar7" identifier < identifier) ))) ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) + LIT) + (binary_expression IDENT * LIT)) )))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) + LIT) + (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 = IDENT) ;) })) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (labeled_statement statement_identifier : (return_statement return (call_expression IDENT (argument_list ( (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT >> LIT) ))) , (binary_expression IDENT < IDENT) ))) ;)) })) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ (binary_expression IDENT - IDENT) ])) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ (binary_expression IDENT - IDENT) ])) ;) }) while (parenthesized_expression ( (binary_expression IDENT == IDENT) )) ;) })) (return_statement return (call_expression IDENT (argument_list ( (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT >> LIT) ))) , (binary_expression IDENT < IDENT) ))) ;) })))
(function_definition "undefined4 FUN_00172790(undefined4 param_1,int *param_2,int *param_3)\n\n{\n  uint *puVar1;\n  uint *puVar2;\n  uint uVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  uint uVar7;\n  uint uVar8;\n  \n  uVar3 = *(uint *)(*param_2 + 8);\n  uVar4 = *(uint *)(*param_3 + 8);\n  puVar1 = (uint *)(*(int *)(*param_2 + 4) + -4 + uVar3 * 4);\n  puVar2 = (uint *)(*(int *)(*param_3 + 4) + -4 + uVar4 * 4);\n  uVar5 = uVar4;\n  if (uVar3 <= uVar4) {\n    uVar5 = uVar3;\n  }\n  uVar6 = uVar5;\n  if (uVar5 == 0) {\nLAB_001727ef:\n    return CONCAT31((int3)(uVar6 >> 8),uVar4 < uVar3);\n  }\n  uVar7 = *puVar1;\n  uVar8 = *puVar2;\n  if (uVar7 == uVar8) {\n    do {\n      uVar6 = uVar6 - 1;\n      if (uVar6 == 0) goto LAB_001727ef;\n      uVar7 = puVar1[uVar6 - uVar5];\n      uVar8 = puVar2[uVar6 - uVar5];\n    } while (uVar7 == uVar8);\n  }\n  return CONCAT31((int3)(uVar6 >> 8),uVar8 < uVar7);\n}" (type_identifier "undefined4") (function_declarator "FUN_00172790(undefined4 param_1,int *param_2,int *param_3)" (identifier "FUN_00172790") (parameter_list "(undefined4 param_1,int *param_2,int *param_3)" (( "(") (parameter_declaration "undefined4 param_1" (type_identifier "undefined4") (identifier "param_1")) (, ",") (parameter_declaration "int *param_2" (primitive_type "int") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "int *param_3" (primitive_type "int") (pointer_declarator "*param_3" (* "*") (identifier "param_3"))) () ")"))) (compound_statement "{\n  uint *puVar1;\n  uint *puVar2;\n  uint uVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  uint uVar7;\n  uint uVar8;\n  \n  uVar3 = *(uint *)(*param_2 + 8);\n  uVar4 = *(uint *)(*param_3 + 8);\n  puVar1 = (uint *)(*(int *)(*param_2 + 4) + -4 + uVar3 * 4);\n  puVar2 = (uint *)(*(int *)(*param_3 + 4) + -4 + uVar4 * 4);\n  uVar5 = uVar4;\n  if (uVar3 <= uVar4) {\n    uVar5 = uVar3;\n  }\n  uVar6 = uVar5;\n  if (uVar5 == 0) {\nLAB_001727ef:\n    return CONCAT31((int3)(uVar6 >> 8),uVar4 < uVar3);\n  }\n  uVar7 = *puVar1;\n  uVar8 = *puVar2;\n  if (uVar7 == uVar8) {\n    do {\n      uVar6 = uVar6 - 1;\n      if (uVar6 == 0) goto LAB_001727ef;\n      uVar7 = puVar1[uVar6 - uVar5];\n      uVar8 = puVar2[uVar6 - uVar5];\n    } while (uVar7 == uVar8);\n  }\n  return CONCAT31((int3)(uVar6 >> 8),uVar8 < uVar7);\n}" ({ "{") (declaration "uint *puVar1;" (type_identifier "uint") (pointer_declarator "*puVar1" (* "*") (identifier "puVar1")) (; ";")) (declaration "uint *puVar2;" (type_identifier "uint") (pointer_declarator "*puVar2" (* "*") (identifier "puVar2")) (; ";")) (declaration "uint uVar3;" (type_identifier "uint") (identifier "uVar3") (; ";")) (declaration "uint uVar4;" (type_identifier "uint") (identifier "uVar4") (; ";")) (declaration "uint uVar5;" (type_identifier "uint") (identifier "uVar5") (; ";")) (declaration "uint uVar6;" (type_identifier "uint") (identifier "uVar6") (; ";")) (declaration "uint uVar7;" (type_identifier "uint") (identifier "uVar7") (; ";")) (declaration "uint uVar8;" (type_identifier "uint") (identifier "uVar8") (; ";")) (expression_statement "uVar3 = *(uint *)(*param_2 + 8);" (assignment_expression "uVar3 = *(uint *)(*param_2 + 8)" (identifier "uVar3") (= "=") (pointer_expression "*(uint *)(*param_2 + 8)" (* "*") (cast_expression "(uint *)(*param_2 + 8)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_2 + 8)" (( "(") (binary_expression "*param_2 + 8" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (+ "+") (number_literal "8")) () ")"))))) (; ";")) (expression_statement "uVar4 = *(uint *)(*param_3 + 8);" (assignment_expression "uVar4 = *(uint *)(*param_3 + 8)" (identifier "uVar4") (= "=") (pointer_expression "*(uint *)(*param_3 + 8)" (* "*") (cast_expression "(uint *)(*param_3 + 8)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_3 + 8)" (( "(") (binary_expression "*param_3 + 8" (pointer_expression "*param_3" (* "*") (identifier "param_3")) (+ "+") (number_literal "8")) () ")"))))) (; ";")) (expression_statement "puVar1 = (uint *)(*(int *)(*param_2 + 4) + -4 + uVar3 * 4);" (assignment_expression "puVar1 = (uint *)(*(int *)(*param_2 + 4) + -4 + uVar3 * 4)" (identifier "puVar1") (= "=") (cast_expression "(uint *)(*(int *)(*param_2 + 4) + -4 + uVar3 * 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(*param_2 + 4) + -4 + uVar3 * 4)" (( "(") (binary_expression "*(int *)(*param_2 + 4) + -4 + uVar3 * 4" (binary_expression "*(int *)(*param_2 + 4) + -4" (pointer_expression "*(int *)(*param_2 + 4)" (* "*") (cast_expression "(int *)(*param_2 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_2 + 4)" (( "(") (binary_expression "*param_2 + 4" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (+ "+") (number_literal "4")) () ")")))) (+ "+") (number_literal "-4")) (+ "+") (binary_expression "uVar3 * 4" (identifier "uVar3") (* "*") (number_literal "4"))) () ")")))) (; ";")) (expression_statement "puVar2 = (uint *)(*(int *)(*param_3 + 4) + -4 + uVar4 * 4);" (assignment_expression "puVar2 = (uint *)(*(int *)(*param_3 + 4) + -4 + uVar4 * 4)" (identifier "puVar2") (= "=") (cast_expression "(uint *)(*(int *)(*param_3 + 4) + -4 + uVar4 * 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(*param_3 + 4) + -4 + uVar4 * 4)" (( "(") (binary_expression "*(int *)(*param_3 + 4) + -4 + uVar4 * 4" (binary_expression "*(int *)(*param_3 + 4) + -4" (pointer_expression "*(int *)(*param_3 + 4)" (* "*") (cast_expression "(int *)(*param_3 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_3 + 4)" (( "(") (binary_expression "*param_3 + 4" (pointer_expression "*param_3" (* "*") (identifier "param_3")) (+ "+") (number_literal "4")) () ")")))) (+ "+") (number_literal "-4")) (+ "+") (binary_expression "uVar4 * 4" (identifier "uVar4") (* "*") (number_literal "4"))) () ")")))) (; ";")) (expression_statement "uVar5 = uVar4;" (assignment_expression "uVar5 = uVar4" (identifier "uVar5") (= "=") (identifier "uVar4")) (; ";")) (if_statement "if (uVar3 <= uVar4) {\n    uVar5 = uVar3;\n  }" (if "if") (parenthesized_expression "(uVar3 <= uVar4)" (( "(") (binary_expression "uVar3 <= uVar4" (identifier "uVar3") (<= "<=") (identifier "uVar4")) () ")")) (compound_statement "{\n    uVar5 = uVar3;\n  }" ({ "{") (expression_statement "uVar5 = uVar3;" (assignment_expression "uVar5 = uVar3" (identifier "uVar5") (= "=") (identifier "uVar3")) (; ";")) (} "}"))) (expression_statement "uVar6 = uVar5;" (assignment_expression "uVar6 = uVar5" (identifier "uVar6") (= "=") (identifier "uVar5")) (; ";")) (if_statement "if (uVar5 == 0) {\nLAB_001727ef:\n    return CONCAT31((int3)(uVar6 >> 8),uVar4 < uVar3);\n  }" (if "if") (parenthesized_expression "(uVar5 == 0)" (( "(") (binary_expression "uVar5 == 0" (identifier "uVar5") (== "==") (number_literal "0")) () ")")) (compound_statement "{\nLAB_001727ef:\n    return CONCAT31((int3)(uVar6 >> 8),uVar4 < uVar3);\n  }" ({ "{") (labeled_statement "LAB_001727ef:\n    return CONCAT31((int3)(uVar6 >> 8),uVar4 < uVar3);" (statement_identifier "LAB_001727ef") (: ":") (return_statement "return CONCAT31((int3)(uVar6 >> 8),uVar4 < uVar3);" (return "return") (call_expression "CONCAT31((int3)(uVar6 >> 8),uVar4 < uVar3)" (identifier "CONCAT31") (argument_list "((int3)(uVar6 >> 8),uVar4 < uVar3)" (( "(") (call_expression "(int3)(uVar6 >> 8)" (parenthesized_expression "(int3)" (( "(") (identifier "int3") () ")")) (argument_list "(uVar6 >> 8)" (( "(") (binary_expression "uVar6 >> 8" (identifier "uVar6") (>> ">>") (number_literal "8")) () ")"))) (, ",") (binary_expression "uVar4 < uVar3" (identifier "uVar4") (< "<") (identifier "uVar3")) () ")"))) (; ";"))) (} "}"))) (expression_statement "uVar7 = *puVar1;" (assignment_expression "uVar7 = *puVar1" (identifier "uVar7") (= "=") (pointer_expression "*puVar1" (* "*") (identifier "puVar1"))) (; ";")) (expression_statement "uVar8 = *puVar2;" (assignment_expression "uVar8 = *puVar2" (identifier "uVar8") (= "=") (pointer_expression "*puVar2" (* "*") (identifier "puVar2"))) (; ";")) (if_statement "if (uVar7 == uVar8) {\n    do {\n      uVar6 = uVar6 - 1;\n      if (uVar6 == 0) goto LAB_001727ef;\n      uVar7 = puVar1[uVar6 - uVar5];\n      uVar8 = puVar2[uVar6 - uVar5];\n    } while (uVar7 == uVar8);\n  }" (if "if") (parenthesized_expression "(uVar7 == uVar8)" (( "(") (binary_expression "uVar7 == uVar8" (identifier "uVar7") (== "==") (identifier "uVar8")) () ")")) (compound_statement "{\n    do {\n      uVar6 = uVar6 - 1;\n      if (uVar6 == 0) goto LAB_001727ef;\n      uVar7 = puVar1[uVar6 - uVar5];\n      uVar8 = puVar2[uVar6 - uVar5];\n    } while (uVar7 == uVar8);\n  }" ({ "{") (do_statement "do {\n      uVar6 = uVar6 - 1;\n      if (uVar6 == 0) goto LAB_001727ef;\n      uVar7 = puVar1[uVar6 - uVar5];\n      uVar8 = puVar2[uVar6 - uVar5];\n    } while (uVar7 == uVar8);" (do "do") (compound_statement "{\n      uVar6 = uVar6 - 1;\n      if (uVar6 == 0) goto LAB_001727ef;\n      uVar7 = puVar1[uVar6 - uVar5];\n      uVar8 = puVar2[uVar6 - uVar5];\n    }" ({ "{") (expression_statement "uVar6 = uVar6 - 1;" (assignment_expression "uVar6 = uVar6 - 1" (identifier "uVar6") (= "=") (binary_expression "uVar6 - 1" (identifier "uVar6") (- "-") (number_literal "1"))) (; ";")) (if_statement "if (uVar6 == 0) goto LAB_001727ef;" (if "if") (parenthesized_expression "(uVar6 == 0)" (( "(") (binary_expression "uVar6 == 0" (identifier "uVar6") (== "==") (number_literal "0")) () ")")) (goto_statement "goto LAB_001727ef;" (goto "goto") (statement_identifier "LAB_001727ef") (; ";"))) (expression_statement "uVar7 = puVar1[uVar6 - uVar5];" (assignment_expression "uVar7 = puVar1[uVar6 - uVar5]" (identifier "uVar7") (= "=") (subscript_expression "puVar1[uVar6 - uVar5]" (identifier "puVar1") ([ "[") (binary_expression "uVar6 - uVar5" (identifier "uVar6") (- "-") (identifier "uVar5")) (] "]"))) (; ";")) (expression_statement "uVar8 = puVar2[uVar6 - uVar5];" (assignment_expression "uVar8 = puVar2[uVar6 - uVar5]" (identifier "uVar8") (= "=") (subscript_expression "puVar2[uVar6 - uVar5]" (identifier "puVar2") ([ "[") (binary_expression "uVar6 - uVar5" (identifier "uVar6") (- "-") (identifier "uVar5")) (] "]"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(uVar7 == uVar8)" (( "(") (binary_expression "uVar7 == uVar8" (identifier "uVar7") (== "==") (identifier "uVar8")) () ")")) (; ";")) (} "}"))) (return_statement "return CONCAT31((int3)(uVar6 >> 8),uVar8 < uVar7);" (return "return") (call_expression "CONCAT31((int3)(uVar6 >> 8),uVar8 < uVar7)" (identifier "CONCAT31") (argument_list "((int3)(uVar6 >> 8),uVar8 < uVar7)" (( "(") (call_expression "(int3)(uVar6 >> 8)" (parenthesized_expression "(int3)" (( "(") (identifier "int3") () ")")) (argument_list "(uVar6 >> 8)" (( "(") (binary_expression "uVar6 >> 8" (identifier "uVar6") (>> ">>") (number_literal "8")) () ")"))) (, ",") (binary_expression "uVar8 < uVar7" (identifier "uVar8") (< "<") (identifier "uVar7")) () ")"))) (; ";")) (} "}")))

/* DWARF original prototype: bool operator()(Stringpool_sort_comparison * this, Stringpool_sort_info
   * sort_info1, Stringpool_sort_info * sort_info2) */

bool __thiscall
gold::Stringpool_template<var_3>::type_1::function_1()
          (type_1 *this,type_2 *sort_info1,
          type_2 *sort_info2)

{
  type_3 *puVar1;
  type_3 *puVar2;
  type_4 *p_Var3;
  type_4 *p_Var4;
  type_3 var_8;
  type_3 var_9;
  type_3 var_10;
  type_3 var_13;
  type_3 var_11;
  type_3 var_12;
  
  p_Var3 = (sort_info1->
           super__Node_iterator_base<var_1::pair<var_2::Stringpool_template<var_3>::var_4,var_5>,var_6>
           )._M_cur;
  p_Var4 = (sort_info2->
           super__Node_iterator_base<var_1::pair<var_2::Stringpool_template<var_3>::var_4,var_5>,var_6>
           )._M_cur;
  var_8 = *(type_3 *)((int)&(p_Var3->
                          super__Hash_node_value_base<var_1::pair<var_2::Stringpool_template<var_3>::var_4,var_5>var_7>
                          )._M_storage._M_storage + 4);
  var_9 = *(type_3 *)((int)&(p_Var4->
                          super__Hash_node_value_base<var_1::pair<var_2::Stringpool_template<var_3>::var_4,var_5>var_7>
                          )._M_storage._M_storage + 4);
  puVar1 = (type_3 *)((int)(p_Var3->
                         super__Hash_node_value_base<var_1::pair<var_2::Stringpool_template<var_3>::var_4,var_5>var_7>
                         )._M_storage._M_storage.__align + -4 + var_8 * 4);
  puVar2 = (type_3 *)((int)(p_Var4->
                         super__Hash_node_value_base<var_1::pair<var_2::Stringpool_template<var_3>::var_4,var_5>var_7>
                         )._M_storage._M_storage.__align + -4 + var_9 * 4);
  var_10 = var_9;
  if (var_8 <= var_9) {
    var_10 = var_8;
  }
  if (var_10 == 0) {
LAB_001727ef:
    return var_9 < var_8;
  }
  var_11 = *puVar1;
  var_12 = *puVar2;
  var_13 = var_10;
  if (var_11 == var_12) {
    do {
      var_13 = var_13 - 1;
      if (var_13 == 0) goto LAB_001727ef;
      var_11 = puVar1[var_13 - var_10];
      var_12 = puVar2[var_13 - var_10];
    } while (var_11 == var_12);
  }
  return var_12 < var_11;
}


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

undefined4 MASKED(undefined4 param_1,int *param_2,int *param_3)

{
  uint *puVar1;
  uint *puVar2;
  uint uVar3;
  uint uVar4;
  uint uVar5;
  uint uVar6;
  uint uVar7;
  uint uVar8;
  
  uVar3 = *(uint *)(*param_2 + 8);
  uVar4 = *(uint *)(*param_3 + 8);
  puVar1 = (uint *)(*(int *)(*param_2 + 4) + -4 + uVar3 * 4);
  puVar2 = (uint *)(*(int *)(*param_3 + 4) + -4 + uVar4 * 4);
  uVar5 = uVar4;
  if (uVar3 <= uVar4) {
    uVar5 = uVar3;
  }
  uVar6 = uVar5;
  if (uVar5 == 0) {
LAB_001727ef:
    return CONCAT31((int3)(uVar6 >> 8),uVar4 < uVar3);
  }
  uVar7 = *puVar1;
  uVar8 = *puVar2;
  if (uVar7 == uVar8) {
    do {
      uVar6 = uVar6 - 1;
      if (uVar6 == 0) goto LAB_001727ef;
      uVar7 = puVar1[uVar6 - uVar5];
      uVar8 = puVar2[uVar6 - uVar5];
    } while (uVar7 == uVar8);
  }
  return CONCAT31((int3)(uVar6 >> 8),uVar8 < uVar7);
}

