
/* WARNING: Function: __x86.get_pc_thunk.bp replaced with injection: get_pc_thunk.bp */
/* DWARF original prototype: void write(Stringpool_template<unsigned_int> * this, Output_file * of,
   off_t offset) */

ssize_t __thiscall
gold::Stringpool_template<unsigned_int>::write
          (Stringpool_template<unsigned_int> *this,int __fd,void *__buf,size_t __n)

{
  uint bufsize;
  uint uVar1;
  int iVar2;
  uchar *buffer;
  int iVar3;
  
  bufsize = this->strtab_size_;
  if (bufsize == 0) {
                    /* WARNING: Subroutine does not return */
    do_gold_unreachable("../../gold/stringpool.cc",500,"write");
  }
  if ((-1 < (int)__n) &&
     (iVar3 = __n + CARRY4(bufsize,(uint)__buf),
     uVar1 = (uint)(*(uint *)(__fd + 8) < bufsize + (int)__buf),
     iVar2 = *(int *)(__fd + 0xc) - iVar3,
     (SBORROW4(*(int *)(__fd + 0xc),iVar3) != SBORROW4(iVar2,uVar1)) == (int)(iVar2 - uVar1) < 0)) {
    buffer = (uchar *)((int)__buf + *(int *)(__fd + 0x10));
    write_to_buffer(this,buffer,bufsize);
    return (ssize_t)buffer;
  }
                    /* WARNING: Subroutine does not return */
  do_gold_unreachable("../../gold/output.h",0x6f,"get_output_view");
}



void FUN_00172400(int param_1,int param_2,uint param_3,int param_4)

{
  uint uVar1;
  int iVar2;
  int unaff_EBP;
  
  FUN_000559f2();
  uVar1 = *(uint *)(param_1 + 0x38);
  if (uVar1 == 0) {
                    /* WARNING: Subroutine does not return */
    FUN_00069d00(unaff_EBP + 0x127264,500,unaff_EBP + 0x1272e2,param_4);
  }
  if ((-1 < param_4) &&
     (param_4 = param_4 + (uint)CARRY4(uVar1,param_3),
     uVar1 = (uint)(*(uint *)(param_2 + 8) < uVar1 + param_3),
     iVar2 = *(int *)(param_2 + 0xc) - param_4, param_3 = iVar2 - uVar1,
     (SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar2,uVar1)) == (int)param_3 < 0)) {
    FUN_00172310();
    return;
  }
                    /* WARNING: Subroutine does not return */
  FUN_00069d00(unaff_EBP + 0x115aa6,0x6f,&UNK_001273f6 + unaff_EBP,param_3);
}


PUSH EBP
CALL 0x000559f2
ADD EBP,0x21cbfa
PUSH EDI
PUSH ESI
PUSH EBX
SUB ESP,0x1c
MOV ECX,dword ptr [ESP + 0x30]
MOV EAX,dword ptr [ESP + 0x38]
MOV EDX,dword ptr [ESP + 0x3c]
MOV EBX,dword ptr [ESP + 0x34]
MOV ECX,dword ptr [ECX + 0x38]
MOV dword ptr [ESP + 0x8],EAX
MOV dword ptr [ESP + 0xc],EDX
TEST ECX,ECX
JZ 0x00172482
MOV EDX,dword ptr [ESP + 0xc]
MOV EAX,dword ptr [ESP + 0x8]
TEST EDX,EDX
JS 0x0017246a
MOV ESI,ECX
XOR EDI,EDI
ADD ESI,EAX
MOV EAX,dword ptr [EBX + 0xc]
ADC EDI,EDX
CMP dword ptr [EBX + 0x8],ESI
SBB EAX,EDI
JL 0x0017246a
MOV dword ptr [ESP + 0x38],ECX
MOV EAX,dword ptr [ESP + 0x8]
ADD EAX,dword ptr [EBX + 0x10]
MOV dword ptr [ESP + 0x34],EAX
ADD ESP,0x1c
POP EBX
POP ESI
POP EDI
POP EBP
JMP 0x00172310
PUSH EAX
LEA EAX,[EBP + 0xfff0a7fc]
MOV EBX,EBP
PUSH EAX
LEA EAX,[EBP + 0xffef8eac]
PUSH 0x6f
PUSH EAX
CALL 0x00069d00
LEA EAX,[EBP + 0xfff0a6e8]
PUSH EDX
MOV EBX,EBP
PUSH EAX
LEA EAX,[EBP + 0xfff0a66a]
PUSH 0x1f4
PUSH EAX
CALL 0x00069d00
(translation_unit "void FUN_00172400(int param_1,int param_2,uint param_3,int param_4)\n\n{\n  uint uVar1;\n  int iVar2;\n  int unaff_EBP;\n  \n  FUN_000559f2();\n  uVar1 = *(uint *)(param_1 + 0x38);\n  if (uVar1 == 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_00069d00(unaff_EBP + 0x127264,500,unaff_EBP + 0x1272e2,param_4);\n  }\n  if ((-1 < param_4) &&\n     (param_4 = param_4 + (uint)CARRY4(uVar1,param_3),\n     uVar1 = (uint)(*(uint *)(param_2 + 8) < uVar1 + param_3),\n     iVar2 = *(int *)(param_2 + 0xc) - param_4, param_3 = iVar2 - uVar1,\n     (SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar2,uVar1)) == (int)param_3 < 0)) {\n    FUN_00172310();\n    return;\n  }\n                    /* WARNING: Subroutine does not return */\n  FUN_00069d00(unaff_EBP + 0x115aa6,0x6f,&UNK_001273f6 + unaff_EBP,param_3);\n}\n\n" (function_definition "void FUN_00172400(int param_1,int param_2,uint param_3,int param_4)\n\n{\n  uint uVar1;\n  int iVar2;\n  int unaff_EBP;\n  \n  FUN_000559f2();\n  uVar1 = *(uint *)(param_1 + 0x38);\n  if (uVar1 == 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_00069d00(unaff_EBP + 0x127264,500,unaff_EBP + 0x1272e2,param_4);\n  }\n  if ((-1 < param_4) &&\n     (param_4 = param_4 + (uint)CARRY4(uVar1,param_3),\n     uVar1 = (uint)(*(uint *)(param_2 + 8) < uVar1 + param_3),\n     iVar2 = *(int *)(param_2 + 0xc) - param_4, param_3 = iVar2 - uVar1,\n     (SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar2,uVar1)) == (int)param_3 < 0)) {\n    FUN_00172310();\n    return;\n  }\n                    /* WARNING: Subroutine does not return */\n  FUN_00069d00(unaff_EBP + 0x115aa6,0x6f,&UNK_001273f6 + unaff_EBP,param_3);\n}" primitive_type (function_declarator "FUN_00172400(int param_1,int param_2,uint param_3,int param_4)" identifier (parameter_list "(int param_1,int param_2,uint param_3,int param_4)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "uint param_3" type_identifier identifier) , (parameter_declaration "int param_4" primitive_type identifier) ))) (compound_statement "{\n  uint uVar1;\n  int iVar2;\n  int unaff_EBP;\n  \n  FUN_000559f2();\n  uVar1 = *(uint *)(param_1 + 0x38);\n  if (uVar1 == 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_00069d00(unaff_EBP + 0x127264,500,unaff_EBP + 0x1272e2,param_4);\n  }\n  if ((-1 < param_4) &&\n     (param_4 = param_4 + (uint)CARRY4(uVar1,param_3),\n     uVar1 = (uint)(*(uint *)(param_2 + 8) < uVar1 + param_3),\n     iVar2 = *(int *)(param_2 + 0xc) - param_4, param_3 = iVar2 - uVar1,\n     (SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar2,uVar1)) == (int)param_3 < 0)) {\n    FUN_00172310();\n    return;\n  }\n                    /* WARNING: Subroutine does not return */\n  FUN_00069d00(unaff_EBP + 0x115aa6,0x6f,&UNK_001273f6 + unaff_EBP,param_3);\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int unaff_EBP;" primitive_type identifier ;) (expression_statement "FUN_000559f2();" (call_expression "FUN_000559f2()" identifier (argument_list "()" ( ))) ;) (expression_statement "uVar1 = *(uint *)(param_1 + 0x38);" (assignment_expression "uVar1 = *(uint *)(param_1 + 0x38)" identifier = (pointer_expression "*(uint *)(param_1 + 0x38)" * (cast_expression "(uint *)(param_1 + 0x38)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x38)" ( (binary_expression "param_1 + 0x38" identifier + number_literal) ))))) ;) (if_statement "if (uVar1 == 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_00069d00(unaff_EBP + 0x127264,500,unaff_EBP + 0x1272e2,param_4);\n  }" if (parenthesized_expression "(uVar1 == 0)" ( (binary_expression "uVar1 == 0" identifier == number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    FUN_00069d00(unaff_EBP + 0x127264,500,unaff_EBP + 0x1272e2,param_4);\n  }" { comment (expression_statement "FUN_00069d00(unaff_EBP + 0x127264,500,unaff_EBP + 0x1272e2,param_4);" (call_expression "FUN_00069d00(unaff_EBP + 0x127264,500,unaff_EBP + 0x1272e2,param_4)" identifier (argument_list "(unaff_EBP + 0x127264,500,unaff_EBP + 0x1272e2,param_4)" ( (binary_expression "unaff_EBP + 0x127264" identifier + number_literal) , number_literal , (binary_expression "unaff_EBP + 0x1272e2" identifier + number_literal) , identifier ))) ;) })) (if_statement "if ((-1 < param_4) &&\n     (param_4 = param_4 + (uint)CARRY4(uVar1,param_3),\n     uVar1 = (uint)(*(uint *)(param_2 + 8) < uVar1 + param_3),\n     iVar2 = *(int *)(param_2 + 0xc) - param_4, param_3 = iVar2 - uVar1,\n     (SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar2,uVar1)) == (int)param_3 < 0)) {\n    FUN_00172310();\n    return;\n  }" if (parenthesized_expression "((-1 < param_4) &&\n     (param_4 = param_4 + (uint)CARRY4(uVar1,param_3),\n     uVar1 = (uint)(*(uint *)(param_2 + 8) < uVar1 + param_3),\n     iVar2 = *(int *)(param_2 + 0xc) - param_4, param_3 = iVar2 - uVar1,\n     (SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar2,uVar1)) == (int)param_3 < 0))" ( (binary_expression "(-1 < param_4) &&\n     (param_4 = param_4 + (uint)CARRY4(uVar1,param_3),\n     uVar1 = (uint)(*(uint *)(param_2 + 8) < uVar1 + param_3),\n     iVar2 = *(int *)(param_2 + 0xc) - param_4, param_3 = iVar2 - uVar1,\n     (SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar2,uVar1)) == (int)param_3 < 0)" (parenthesized_expression "(-1 < param_4)" ( (binary_expression "-1 < param_4" number_literal < identifier) )) && (parenthesized_expression "(param_4 = param_4 + (uint)CARRY4(uVar1,param_3),\n     uVar1 = (uint)(*(uint *)(param_2 + 8) < uVar1 + param_3),\n     iVar2 = *(int *)(param_2 + 0xc) - param_4, param_3 = iVar2 - uVar1,\n     (SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar2,uVar1)) == (int)param_3 < 0)" ( (comma_expression "param_4 = param_4 + (uint)CARRY4(uVar1,param_3),\n     uVar1 = (uint)(*(uint *)(param_2 + 8) < uVar1 + param_3),\n     iVar2 = *(int *)(param_2 + 0xc) - param_4, param_3 = iVar2 - uVar1,\n     (SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar2,uVar1)) == (int)param_3 < 0" (assignment_expression "param_4 = param_4 + (uint)CARRY4(uVar1,param_3)" identifier = (binary_expression "param_4 + (uint)CARRY4(uVar1,param_3)" identifier + (cast_expression "(uint)CARRY4(uVar1,param_3)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar1,param_3)" identifier (argument_list "(uVar1,param_3)" ( identifier , identifier )))))) , (comma_expression "uVar1 = (uint)(*(uint *)(param_2 + 8) < uVar1 + param_3),\n     iVar2 = *(int *)(param_2 + 0xc) - param_4, param_3 = iVar2 - uVar1,\n     (SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar2,uVar1)) == (int)param_3 < 0" (assignment_expression "uVar1 = (uint)(*(uint *)(param_2 + 8) < uVar1 + param_3)" identifier = (call_expression "(uint)(*(uint *)(param_2 + 8) < uVar1 + param_3)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(*(uint *)(param_2 + 8) < uVar1 + param_3)" ( (binary_expression "*(uint *)(param_2 + 8) < uVar1 + param_3" (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" identifier + number_literal) )))) < (binary_expression "uVar1 + param_3" identifier + identifier)) )))) , (comma_expression "iVar2 = *(int *)(param_2 + 0xc) - param_4, param_3 = iVar2 - uVar1,\n     (SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar2,uVar1)) == (int)param_3 < 0" (assignment_expression "iVar2 = *(int *)(param_2 + 0xc) - param_4" identifier = (binary_expression "*(int *)(param_2 + 0xc) - param_4" (pointer_expression "*(int *)(param_2 + 0xc)" * (cast_expression "(int *)(param_2 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xc)" ( (binary_expression "param_2 + 0xc" identifier + number_literal) )))) - identifier)) , (comma_expression "param_3 = iVar2 - uVar1,\n     (SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar2,uVar1)) == (int)param_3 < 0" (assignment_expression "param_3 = iVar2 - uVar1" identifier = (binary_expression "iVar2 - uVar1" identifier - identifier)) , (binary_expression "(SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar2,uVar1)) == (int)param_3 < 0" (parenthesized_expression "(SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar2,uVar1))" ( (binary_expression "SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar2,uVar1)" (call_expression "SBORROW4(*(int *)(param_2 + 0xc),param_4)" identifier (argument_list "(*(int *)(param_2 + 0xc),param_4)" ( (pointer_expression "*(int *)(param_2 + 0xc)" * (cast_expression "(int *)(param_2 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xc)" ( (binary_expression "param_2 + 0xc" identifier + number_literal) )))) , identifier ))) != (call_expression "SBORROW4(iVar2,uVar1)" identifier (argument_list "(iVar2,uVar1)" ( identifier , identifier )))) )) == (binary_expression "(int)param_3 < 0" (cast_expression "(int)param_3" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal)))))) ))) )) (compound_statement "{\n    FUN_00172310();\n    return;\n  }" { (expression_statement "FUN_00172310();" (call_expression "FUN_00172310()" identifier (argument_list "()" ( ))) ;) (return_statement "return;" return ;) })) comment (expression_statement "FUN_00069d00(unaff_EBP + 0x115aa6,0x6f,&UNK_001273f6 + unaff_EBP,param_3);" (call_expression "FUN_00069d00(unaff_EBP + 0x115aa6,0x6f,&UNK_001273f6 + unaff_EBP,param_3)" identifier (argument_list "(unaff_EBP + 0x115aa6,0x6f,&UNK_001273f6 + unaff_EBP,param_3)" ( (binary_expression "unaff_EBP + 0x115aa6" identifier + number_literal) , number_literal , (binary_expression "&UNK_001273f6 + unaff_EBP" (pointer_expression "&UNK_001273f6" & identifier) + identifier) , identifier ))) ;) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.bp replaced with injection: get_pc_thunk.bp */\n/* DWARF original prototype: void write(Stringpool_template<unsigned_int> * this, Output_file * of,\n   off_t offset) */\n\nssize_t __thiscall\ngold::Stringpool_template<unsigned_int>::write\n          (Stringpool_template<unsigned_int> *this,int __fd,void *__buf,size_t __n)\n\n{\n  uint bufsize;\n  uint uVar1;\n  int iVar2;\n  uchar *buffer;\n  int iVar3;\n  \n  bufsize = this->strtab_size_;\n  if (bufsize == 0) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/stringpool.cc",500,"write");\n  }\n  if ((-1 < (int)__n) &&\n     (iVar3 = __n + CARRY4(bufsize,(uint)__buf),\n     uVar1 = (uint)(*(uint *)(__fd + 8) < bufsize + (int)__buf),\n     iVar2 = *(int *)(__fd + 0xc) - iVar3,\n     (SBORROW4(*(int *)(__fd + 0xc),iVar3) != SBORROW4(iVar2,uVar1)) == (int)(iVar2 - uVar1) < 0)) {\n    buffer = (uchar *)((int)__buf + *(int *)(__fd + 0x10));\n    write_to_buffer(this,buffer,bufsize);\n    return (ssize_t)buffer;\n  }\n                    /* WARNING: Subroutine does not return */\n  do_gold_unreachable("../../gold/output.h",0x6f,"get_output_view");\n}\n\n" comment comment (function_definition "ssize_t __thiscall\ngold::Stringpool_template<unsigned_int>::write\n          (Stringpool_template<unsigned_int> *this,int __fd,void *__buf,size_t __n)\n\n{\n  uint bufsize;\n  uint uVar1;\n  int iVar2;\n  uchar *buffer;\n  int iVar3;\n  \n  bufsize = this->strtab_size_;\n  if (bufsize == 0) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/stringpool.cc",500,"write");\n  }\n  if ((-1 < (int)__n) &&\n     (iVar3 = __n + CARRY4(bufsize,(uint)__buf),\n     uVar1 = (uint)(*(uint *)(__fd + 8) < bufsize + (int)__buf),\n     iVar2 = *(int *)(__fd + 0xc) - iVar3,\n     (SBORROW4(*(int *)(__fd + 0xc),iVar3) != SBORROW4(iVar2,uVar1)) == (int)(iVar2 - uVar1) < 0)) {\n    buffer = (uchar *)((int)__buf + *(int *)(__fd + 0x10));\n    write_to_buffer(this,buffer,bufsize);\n    return (ssize_t)buffer;\n  }\n                    /* WARNING: Subroutine does not return */\n  do_gold_unreachable("../../gold/output.h",0x6f,"get_output_view");\n}" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::Stringpool_template<unsigned_int>::" identifier : : identifier < identifier > : :) (function_declarator "write\n          (Stringpool_template<unsigned_int> *this,int __fd,void *__buf,size_t __n)" identifier (parameter_list "(Stringpool_template<unsigned_int> *this,int __fd,void *__buf,size_t __n)" ( (parameter_declaration "Stringpool_template<unsigned_int> *this" type_identifier (ERROR "<unsigned_int>" < identifier >) (pointer_declarator "*this" * identifier)) , (parameter_declaration "int __fd" primitive_type identifier) , (parameter_declaration "void *__buf" primitive_type (pointer_declarator "*__buf" * identifier)) , (parameter_declaration "size_t __n" primitive_type identifier) ))) (compound_statement "{\n  uint bufsize;\n  uint uVar1;\n  int iVar2;\n  uchar *buffer;\n  int iVar3;\n  \n  bufsize = this->strtab_size_;\n  if (bufsize == 0) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/stringpool.cc",500,"write");\n  }\n  if ((-1 < (int)__n) &&\n     (iVar3 = __n + CARRY4(bufsize,(uint)__buf),\n     uVar1 = (uint)(*(uint *)(__fd + 8) < bufsize + (int)__buf),\n     iVar2 = *(int *)(__fd + 0xc) - iVar3,\n     (SBORROW4(*(int *)(__fd + 0xc),iVar3) != SBORROW4(iVar2,uVar1)) == (int)(iVar2 - uVar1) < 0)) {\n    buffer = (uchar *)((int)__buf + *(int *)(__fd + 0x10));\n    write_to_buffer(this,buffer,bufsize);\n    return (ssize_t)buffer;\n  }\n                    /* WARNING: Subroutine does not return */\n  do_gold_unreachable("../../gold/output.h",0x6f,"get_output_view");\n}" { (declaration "uint bufsize;" type_identifier identifier ;) (declaration "uint uVar1;" type_identifier identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "uchar *buffer;" type_identifier (pointer_declarator "*buffer" * identifier) ;) (declaration "int iVar3;" primitive_type identifier ;) (expression_statement "bufsize = this->strtab_size_;" (assignment_expression "bufsize = this->strtab_size_" identifier = (field_expression "this->strtab_size_" identifier -> field_identifier)) ;) (if_statement "if (bufsize == 0) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/stringpool.cc",500,"write");\n  }" if (parenthesized_expression "(bufsize == 0)" ( (binary_expression "bufsize == 0" identifier == number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/stringpool.cc",500,"write");\n  }" { comment (expression_statement "do_gold_unreachable("../../gold/stringpool.cc",500,"write");" (call_expression "do_gold_unreachable("../../gold/stringpool.cc",500,"write")" identifier (argument_list "("../../gold/stringpool.cc",500,"write")" ( (string_literal ""../../gold/stringpool.cc"" " string_content ") , number_literal , (string_literal ""write"" " string_content ") ))) ;) })) (if_statement "if ((-1 < (int)__n) &&\n     (iVar3 = __n + CARRY4(bufsize,(uint)__buf),\n     uVar1 = (uint)(*(uint *)(__fd + 8) < bufsize + (int)__buf),\n     iVar2 = *(int *)(__fd + 0xc) - iVar3,\n     (SBORROW4(*(int *)(__fd + 0xc),iVar3) != SBORROW4(iVar2,uVar1)) == (int)(iVar2 - uVar1) < 0)) {\n    buffer = (uchar *)((int)__buf + *(int *)(__fd + 0x10));\n    write_to_buffer(this,buffer,bufsize);\n    return (ssize_t)buffer;\n  }" if (parenthesized_expression "((-1 < (int)__n) &&\n     (iVar3 = __n + CARRY4(bufsize,(uint)__buf),\n     uVar1 = (uint)(*(uint *)(__fd + 8) < bufsize + (int)__buf),\n     iVar2 = *(int *)(__fd + 0xc) - iVar3,\n     (SBORROW4(*(int *)(__fd + 0xc),iVar3) != SBORROW4(iVar2,uVar1)) == (int)(iVar2 - uVar1) < 0))" ( (binary_expression "(-1 < (int)__n) &&\n     (iVar3 = __n + CARRY4(bufsize,(uint)__buf),\n     uVar1 = (uint)(*(uint *)(__fd + 8) < bufsize + (int)__buf),\n     iVar2 = *(int *)(__fd + 0xc) - iVar3,\n     (SBORROW4(*(int *)(__fd + 0xc),iVar3) != SBORROW4(iVar2,uVar1)) == (int)(iVar2 - uVar1) < 0)" (parenthesized_expression "(-1 < (int)__n)" ( (binary_expression "-1 < (int)__n" number_literal < (cast_expression "(int)__n" ( (type_descriptor "int" primitive_type) ) identifier)) )) && (parenthesized_expression "(iVar3 = __n + CARRY4(bufsize,(uint)__buf),\n     uVar1 = (uint)(*(uint *)(__fd + 8) < bufsize + (int)__buf),\n     iVar2 = *(int *)(__fd + 0xc) - iVar3,\n     (SBORROW4(*(int *)(__fd + 0xc),iVar3) != SBORROW4(iVar2,uVar1)) == (int)(iVar2 - uVar1) < 0)" ( (comma_expression "iVar3 = __n + CARRY4(bufsize,(uint)__buf),\n     uVar1 = (uint)(*(uint *)(__fd + 8) < bufsize + (int)__buf),\n     iVar2 = *(int *)(__fd + 0xc) - iVar3,\n     (SBORROW4(*(int *)(__fd + 0xc),iVar3) != SBORROW4(iVar2,uVar1)) == (int)(iVar2 - uVar1) < 0" (assignment_expression "iVar3 = __n + CARRY4(bufsize,(uint)__buf)" identifier = (binary_expression "__n + CARRY4(bufsize,(uint)__buf)" identifier + (call_expression "CARRY4(bufsize,(uint)__buf)" identifier (argument_list "(bufsize,(uint)__buf)" ( identifier , (cast_expression "(uint)__buf" ( (type_descriptor "uint" type_identifier) ) identifier) ))))) , (comma_expression "uVar1 = (uint)(*(uint *)(__fd + 8) < bufsize + (int)__buf),\n     iVar2 = *(int *)(__fd + 0xc) - iVar3,\n     (SBORROW4(*(int *)(__fd + 0xc),iVar3) != SBORROW4(iVar2,uVar1)) == (int)(iVar2 - uVar1) < 0" (assignment_expression "uVar1 = (uint)(*(uint *)(__fd + 8) < bufsize + (int)__buf)" identifier = (call_expression "(uint)(*(uint *)(__fd + 8) < bufsize + (int)__buf)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(*(uint *)(__fd + 8) < bufsize + (int)__buf)" ( (binary_expression "*(uint *)(__fd + 8) < bufsize + (int)__buf" (pointer_expression "*(uint *)(__fd + 8)" * (cast_expression "(uint *)(__fd + 8)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(__fd + 8)" ( (binary_expression "__fd + 8" identifier + number_literal) )))) < (binary_expression "bufsize + (int)__buf" identifier + (cast_expression "(int)__buf" ( (type_descriptor "int" primitive_type) ) identifier))) )))) , (comma_expression "iVar2 = *(int *)(__fd + 0xc) - iVar3,\n     (SBORROW4(*(int *)(__fd + 0xc),iVar3) != SBORROW4(iVar2,uVar1)) == (int)(iVar2 - uVar1) < 0" (assignment_expression "iVar2 = *(int *)(__fd + 0xc) - iVar3" identifier = (binary_expression "*(int *)(__fd + 0xc) - iVar3" (pointer_expression "*(int *)(__fd + 0xc)" * (cast_expression "(int *)(__fd + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(__fd + 0xc)" ( (binary_expression "__fd + 0xc" identifier + number_literal) )))) - identifier)) , (binary_expression "(SBORROW4(*(int *)(__fd + 0xc),iVar3) != SBORROW4(iVar2,uVar1)) == (int)(iVar2 - uVar1) < 0" (parenthesized_expression "(SBORROW4(*(int *)(__fd + 0xc),iVar3) != SBORROW4(iVar2,uVar1))" ( (binary_expression "SBORROW4(*(int *)(__fd + 0xc),iVar3) != SBORROW4(iVar2,uVar1)" (call_expression "SBORROW4(*(int *)(__fd + 0xc),iVar3)" identifier (argument_list "(*(int *)(__fd + 0xc),iVar3)" ( (pointer_expression "*(int *)(__fd + 0xc)" * (cast_expression "(int *)(__fd + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(__fd + 0xc)" ( (binary_expression "__fd + 0xc" identifier + number_literal) )))) , identifier ))) != (call_expression "SBORROW4(iVar2,uVar1)" identifier (argument_list "(iVar2,uVar1)" ( identifier , identifier )))) )) == (binary_expression "(int)(iVar2 - uVar1) < 0" (cast_expression "(int)(iVar2 - uVar1)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(iVar2 - uVar1)" ( (binary_expression "iVar2 - uVar1" identifier - identifier) ))) < number_literal))))) ))) )) (compound_statement "{\n    buffer = (uchar *)((int)__buf + *(int *)(__fd + 0x10));\n    write_to_buffer(this,buffer,bufsize);\n    return (ssize_t)buffer;\n  }" { (expression_statement "buffer = (uchar *)((int)__buf + *(int *)(__fd + 0x10));" (assignment_expression "buffer = (uchar *)((int)__buf + *(int *)(__fd + 0x10))" identifier = (cast_expression "(uchar *)((int)__buf + *(int *)(__fd + 0x10))" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)__buf + *(int *)(__fd + 0x10))" ( (binary_expression "(int)__buf + *(int *)(__fd + 0x10)" (cast_expression "(int)__buf" ( (type_descriptor "int" primitive_type) ) identifier) + (pointer_expression "*(int *)(__fd + 0x10)" * (cast_expression "(int *)(__fd + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(__fd + 0x10)" ( (binary_expression "__fd + 0x10" identifier + number_literal) ))))) )))) ;) (expression_statement "write_to_buffer(this,buffer,bufsize);" (call_expression "write_to_buffer(this,buffer,bufsize)" identifier (argument_list "(this,buffer,bufsize)" ( identifier , identifier , identifier ))) ;) (return_statement "return (ssize_t)buffer;" return (cast_expression "(ssize_t)buffer" ( (type_descriptor "ssize_t" primitive_type) ) identifier) ;) })) comment (expression_statement "do_gold_unreachable("../../gold/output.h",0x6f,"get_output_view");" (call_expression "do_gold_unreachable("../../gold/output.h",0x6f,"get_output_view")" identifier (argument_list "("../../gold/output.h",0x6f,"get_output_view")" ( (string_literal ""../../gold/output.h"" " string_content ") , number_literal , (string_literal ""get_output_view"" " string_content ") ))) ;) })))
(translation_unit "void FUN_00172400(int param_1,int param_2,uint param_3,int param_4)\n\n{\n  uint uVar1;\n  int iVar2;\n  int unaff_EBP;\n  \n  FUN_000559f2();\n  uVar1 = *(uint *)(param_1 + 0x38);\n  if (uVar1 == 0) {\n                    \n    FUN_00069d00(unaff_EBP + 0x127264,500,unaff_EBP + 0x1272e2,param_4);\n  }\n  if ((-1 < param_4) &&\n     (param_4 = param_4 + (uint)CARRY4(uVar1,param_3),\n     uVar1 = (uint)(*(uint *)(param_2 + 8) < uVar1 + param_3),\n     iVar2 = *(int *)(param_2 + 0xc) - param_4, param_3 = iVar2 - uVar1,\n     (SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar2,uVar1)) == (int)param_3 < 0)) {\n    FUN_00172310();\n    return;\n  }\n                    \n  FUN_00069d00(unaff_EBP + 0x115aa6,0x6f,&UNK_001273f6 + unaff_EBP,param_3);\n}\n\n" (function_definition "void FUN_00172400(int param_1,int param_2,uint param_3,int param_4)\n\n{\n  uint uVar1;\n  int iVar2;\n  int unaff_EBP;\n  \n  FUN_000559f2();\n  uVar1 = *(uint *)(param_1 + 0x38);\n  if (uVar1 == 0) {\n                    \n    FUN_00069d00(unaff_EBP + 0x127264,500,unaff_EBP + 0x1272e2,param_4);\n  }\n  if ((-1 < param_4) &&\n     (param_4 = param_4 + (uint)CARRY4(uVar1,param_3),\n     uVar1 = (uint)(*(uint *)(param_2 + 8) < uVar1 + param_3),\n     iVar2 = *(int *)(param_2 + 0xc) - param_4, param_3 = iVar2 - uVar1,\n     (SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar2,uVar1)) == (int)param_3 < 0)) {\n    FUN_00172310();\n    return;\n  }\n                    \n  FUN_00069d00(unaff_EBP + 0x115aa6,0x6f,&UNK_001273f6 + unaff_EBP,param_3);\n}" primitive_type (function_declarator "FUN_00172400(int param_1,int param_2,uint param_3,int param_4)" identifier (parameter_list "(int param_1,int param_2,uint param_3,int param_4)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "uint param_3" type_identifier identifier) , (parameter_declaration "int param_4" primitive_type identifier) ))) (compound_statement "{\n  uint uVar1;\n  int iVar2;\n  int unaff_EBP;\n  \n  FUN_000559f2();\n  uVar1 = *(uint *)(param_1 + 0x38);\n  if (uVar1 == 0) {\n                    \n    FUN_00069d00(unaff_EBP + 0x127264,500,unaff_EBP + 0x1272e2,param_4);\n  }\n  if ((-1 < param_4) &&\n     (param_4 = param_4 + (uint)CARRY4(uVar1,param_3),\n     uVar1 = (uint)(*(uint *)(param_2 + 8) < uVar1 + param_3),\n     iVar2 = *(int *)(param_2 + 0xc) - param_4, param_3 = iVar2 - uVar1,\n     (SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar2,uVar1)) == (int)param_3 < 0)) {\n    FUN_00172310();\n    return;\n  }\n                    \n  FUN_00069d00(unaff_EBP + 0x115aa6,0x6f,&UNK_001273f6 + unaff_EBP,param_3);\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int unaff_EBP;" primitive_type identifier ;) (expression_statement "FUN_000559f2();" (call_expression "FUN_000559f2()" identifier (argument_list "()" ( ))) ;) (expression_statement "uVar1 = *(uint *)(param_1 + 0x38);" (assignment_expression "uVar1 = *(uint *)(param_1 + 0x38)" identifier = (pointer_expression "*(uint *)(param_1 + 0x38)" * (cast_expression "(uint *)(param_1 + 0x38)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x38)" ( (binary_expression "param_1 + 0x38" identifier + number_literal) ))))) ;) (if_statement "if (uVar1 == 0) {\n                    \n    FUN_00069d00(unaff_EBP + 0x127264,500,unaff_EBP + 0x1272e2,param_4);\n  }" if (parenthesized_expression "(uVar1 == 0)" ( (binary_expression "uVar1 == 0" identifier == number_literal) )) (compound_statement "{\n                    \n    FUN_00069d00(unaff_EBP + 0x127264,500,unaff_EBP + 0x1272e2,param_4);\n  }" { (expression_statement "FUN_00069d00(unaff_EBP + 0x127264,500,unaff_EBP + 0x1272e2,param_4);" (call_expression "FUN_00069d00(unaff_EBP + 0x127264,500,unaff_EBP + 0x1272e2,param_4)" identifier (argument_list "(unaff_EBP + 0x127264,500,unaff_EBP + 0x1272e2,param_4)" ( (binary_expression "unaff_EBP + 0x127264" identifier + number_literal) , number_literal , (binary_expression "unaff_EBP + 0x1272e2" identifier + number_literal) , identifier ))) ;) })) (if_statement "if ((-1 < param_4) &&\n     (param_4 = param_4 + (uint)CARRY4(uVar1,param_3),\n     uVar1 = (uint)(*(uint *)(param_2 + 8) < uVar1 + param_3),\n     iVar2 = *(int *)(param_2 + 0xc) - param_4, param_3 = iVar2 - uVar1,\n     (SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar2,uVar1)) == (int)param_3 < 0)) {\n    FUN_00172310();\n    return;\n  }" if (parenthesized_expression "((-1 < param_4) &&\n     (param_4 = param_4 + (uint)CARRY4(uVar1,param_3),\n     uVar1 = (uint)(*(uint *)(param_2 + 8) < uVar1 + param_3),\n     iVar2 = *(int *)(param_2 + 0xc) - param_4, param_3 = iVar2 - uVar1,\n     (SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar2,uVar1)) == (int)param_3 < 0))" ( (binary_expression "(-1 < param_4) &&\n     (param_4 = param_4 + (uint)CARRY4(uVar1,param_3),\n     uVar1 = (uint)(*(uint *)(param_2 + 8) < uVar1 + param_3),\n     iVar2 = *(int *)(param_2 + 0xc) - param_4, param_3 = iVar2 - uVar1,\n     (SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar2,uVar1)) == (int)param_3 < 0)" (parenthesized_expression "(-1 < param_4)" ( (binary_expression "-1 < param_4" number_literal < identifier) )) && (parenthesized_expression "(param_4 = param_4 + (uint)CARRY4(uVar1,param_3),\n     uVar1 = (uint)(*(uint *)(param_2 + 8) < uVar1 + param_3),\n     iVar2 = *(int *)(param_2 + 0xc) - param_4, param_3 = iVar2 - uVar1,\n     (SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar2,uVar1)) == (int)param_3 < 0)" ( (comma_expression "param_4 = param_4 + (uint)CARRY4(uVar1,param_3),\n     uVar1 = (uint)(*(uint *)(param_2 + 8) < uVar1 + param_3),\n     iVar2 = *(int *)(param_2 + 0xc) - param_4, param_3 = iVar2 - uVar1,\n     (SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar2,uVar1)) == (int)param_3 < 0" (assignment_expression "param_4 = param_4 + (uint)CARRY4(uVar1,param_3)" identifier = (binary_expression "param_4 + (uint)CARRY4(uVar1,param_3)" identifier + (cast_expression "(uint)CARRY4(uVar1,param_3)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar1,param_3)" identifier (argument_list "(uVar1,param_3)" ( identifier , identifier )))))) , (comma_expression "uVar1 = (uint)(*(uint *)(param_2 + 8) < uVar1 + param_3),\n     iVar2 = *(int *)(param_2 + 0xc) - param_4, param_3 = iVar2 - uVar1,\n     (SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar2,uVar1)) == (int)param_3 < 0" (assignment_expression "uVar1 = (uint)(*(uint *)(param_2 + 8) < uVar1 + param_3)" identifier = (call_expression "(uint)(*(uint *)(param_2 + 8) < uVar1 + param_3)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(*(uint *)(param_2 + 8) < uVar1 + param_3)" ( (binary_expression "*(uint *)(param_2 + 8) < uVar1 + param_3" (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" identifier + number_literal) )))) < (binary_expression "uVar1 + param_3" identifier + identifier)) )))) , (comma_expression "iVar2 = *(int *)(param_2 + 0xc) - param_4, param_3 = iVar2 - uVar1,\n     (SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar2,uVar1)) == (int)param_3 < 0" (assignment_expression "iVar2 = *(int *)(param_2 + 0xc) - param_4" identifier = (binary_expression "*(int *)(param_2 + 0xc) - param_4" (pointer_expression "*(int *)(param_2 + 0xc)" * (cast_expression "(int *)(param_2 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xc)" ( (binary_expression "param_2 + 0xc" identifier + number_literal) )))) - identifier)) , (comma_expression "param_3 = iVar2 - uVar1,\n     (SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar2,uVar1)) == (int)param_3 < 0" (assignment_expression "param_3 = iVar2 - uVar1" identifier = (binary_expression "iVar2 - uVar1" identifier - identifier)) , (binary_expression "(SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar2,uVar1)) == (int)param_3 < 0" (parenthesized_expression "(SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar2,uVar1))" ( (binary_expression "SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar2,uVar1)" (call_expression "SBORROW4(*(int *)(param_2 + 0xc),param_4)" identifier (argument_list "(*(int *)(param_2 + 0xc),param_4)" ( (pointer_expression "*(int *)(param_2 + 0xc)" * (cast_expression "(int *)(param_2 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xc)" ( (binary_expression "param_2 + 0xc" identifier + number_literal) )))) , identifier ))) != (call_expression "SBORROW4(iVar2,uVar1)" identifier (argument_list "(iVar2,uVar1)" ( identifier , identifier )))) )) == (binary_expression "(int)param_3 < 0" (cast_expression "(int)param_3" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal)))))) ))) )) (compound_statement "{\n    FUN_00172310();\n    return;\n  }" { (expression_statement "FUN_00172310();" (call_expression "FUN_00172310()" identifier (argument_list "()" ( ))) ;) (return_statement "return;" return ;) })) (expression_statement "FUN_00069d00(unaff_EBP + 0x115aa6,0x6f,&UNK_001273f6 + unaff_EBP,param_3);" (call_expression "FUN_00069d00(unaff_EBP + 0x115aa6,0x6f,&UNK_001273f6 + unaff_EBP,param_3)" identifier (argument_list "(unaff_EBP + 0x115aa6,0x6f,&UNK_001273f6 + unaff_EBP,param_3)" ( (binary_expression "unaff_EBP + 0x115aa6" identifier + number_literal) , number_literal , (binary_expression "&UNK_001273f6 + unaff_EBP" (pointer_expression "&UNK_001273f6" & identifier) + identifier) , identifier ))) ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , LIT , (binary_expression IDENT + LIT) , IDENT ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression LIT < IDENT) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (binary_expression IDENT + (cast_expression ( (type_descriptor TYPE) ) (call_expression IDENT (argument_list ( IDENT , IDENT )))))) , (comma_expression (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) < (binary_expression IDENT + IDENT)) )))) , (comma_expression (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) - IDENT)) , (comma_expression (assignment_expression IDENT = (binary_expression IDENT - IDENT)) , (binary_expression (parenthesized_expression ( (binary_expression (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) , IDENT ))) != (call_expression IDENT (argument_list ( IDENT , IDENT )))) )) == (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < LIT)))))) ))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) (return_statement return ;) })) (expression_statement (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , LIT , (binary_expression (pointer_expression & IDENT) + IDENT) , IDENT ))) ;) })))
(function_definition "void FUN_00172400(int param_1,int param_2,uint param_3,int param_4)\n\n{\n  uint uVar1;\n  int iVar2;\n  int unaff_EBP;\n  \n  FUN_000559f2();\n  uVar1 = *(uint *)(param_1 + 0x38);\n  if (uVar1 == 0) {\n                    \n    FUN_00069d00(unaff_EBP + 0x127264,500,unaff_EBP + 0x1272e2,param_4);\n  }\n  if ((-1 < param_4) &&\n     (param_4 = param_4 + (uint)CARRY4(uVar1,param_3),\n     uVar1 = (uint)(*(uint *)(param_2 + 8) < uVar1 + param_3),\n     iVar2 = *(int *)(param_2 + 0xc) - param_4, param_3 = iVar2 - uVar1,\n     (SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar2,uVar1)) == (int)param_3 < 0)) {\n    FUN_00172310();\n    return;\n  }\n                    \n  FUN_00069d00(unaff_EBP + 0x115aa6,0x6f,&UNK_001273f6 + unaff_EBP,param_3);\n}" (primitive_type "void") (function_declarator "FUN_00172400(int param_1,int param_2,uint param_3,int param_4)" (identifier "FUN_00172400") (parameter_list "(int param_1,int param_2,uint param_3,int param_4)" (( "(") (parameter_declaration "int param_1" (primitive_type "int") (identifier "param_1")) (, ",") (parameter_declaration "int param_2" (primitive_type "int") (identifier "param_2")) (, ",") (parameter_declaration "uint param_3" (type_identifier "uint") (identifier "param_3")) (, ",") (parameter_declaration "int param_4" (primitive_type "int") (identifier "param_4")) () ")"))) (compound_statement "{\n  uint uVar1;\n  int iVar2;\n  int unaff_EBP;\n  \n  FUN_000559f2();\n  uVar1 = *(uint *)(param_1 + 0x38);\n  if (uVar1 == 0) {\n                    \n    FUN_00069d00(unaff_EBP + 0x127264,500,unaff_EBP + 0x1272e2,param_4);\n  }\n  if ((-1 < param_4) &&\n     (param_4 = param_4 + (uint)CARRY4(uVar1,param_3),\n     uVar1 = (uint)(*(uint *)(param_2 + 8) < uVar1 + param_3),\n     iVar2 = *(int *)(param_2 + 0xc) - param_4, param_3 = iVar2 - uVar1,\n     (SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar2,uVar1)) == (int)param_3 < 0)) {\n    FUN_00172310();\n    return;\n  }\n                    \n  FUN_00069d00(unaff_EBP + 0x115aa6,0x6f,&UNK_001273f6 + unaff_EBP,param_3);\n}" ({ "{") (declaration "uint uVar1;" (type_identifier "uint") (identifier "uVar1") (; ";")) (declaration "int iVar2;" (primitive_type "int") (identifier "iVar2") (; ";")) (declaration "int unaff_EBP;" (primitive_type "int") (identifier "unaff_EBP") (; ";")) (expression_statement "FUN_000559f2();" (call_expression "FUN_000559f2()" (identifier "FUN_000559f2") (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "uVar1 = *(uint *)(param_1 + 0x38);" (assignment_expression "uVar1 = *(uint *)(param_1 + 0x38)" (identifier "uVar1") (= "=") (pointer_expression "*(uint *)(param_1 + 0x38)" (* "*") (cast_expression "(uint *)(param_1 + 0x38)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x38)" (( "(") (binary_expression "param_1 + 0x38" (identifier "param_1") (+ "+") (number_literal "0x38")) () ")"))))) (; ";")) (if_statement "if (uVar1 == 0) {\n                    \n    FUN_00069d00(unaff_EBP + 0x127264,500,unaff_EBP + 0x1272e2,param_4);\n  }" (if "if") (parenthesized_expression "(uVar1 == 0)" (( "(") (binary_expression "uVar1 == 0" (identifier "uVar1") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n                    \n    FUN_00069d00(unaff_EBP + 0x127264,500,unaff_EBP + 0x1272e2,param_4);\n  }" ({ "{") (expression_statement "FUN_00069d00(unaff_EBP + 0x127264,500,unaff_EBP + 0x1272e2,param_4);" (call_expression "FUN_00069d00(unaff_EBP + 0x127264,500,unaff_EBP + 0x1272e2,param_4)" (identifier "FUN_00069d00") (argument_list "(unaff_EBP + 0x127264,500,unaff_EBP + 0x1272e2,param_4)" (( "(") (binary_expression "unaff_EBP + 0x127264" (identifier "unaff_EBP") (+ "+") (number_literal "0x127264")) (, ",") (number_literal "500") (, ",") (binary_expression "unaff_EBP + 0x1272e2" (identifier "unaff_EBP") (+ "+") (number_literal "0x1272e2")) (, ",") (identifier "param_4") () ")"))) (; ";")) (} "}"))) (if_statement "if ((-1 < param_4) &&\n     (param_4 = param_4 + (uint)CARRY4(uVar1,param_3),\n     uVar1 = (uint)(*(uint *)(param_2 + 8) < uVar1 + param_3),\n     iVar2 = *(int *)(param_2 + 0xc) - param_4, param_3 = iVar2 - uVar1,\n     (SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar2,uVar1)) == (int)param_3 < 0)) {\n    FUN_00172310();\n    return;\n  }" (if "if") (parenthesized_expression "((-1 < param_4) &&\n     (param_4 = param_4 + (uint)CARRY4(uVar1,param_3),\n     uVar1 = (uint)(*(uint *)(param_2 + 8) < uVar1 + param_3),\n     iVar2 = *(int *)(param_2 + 0xc) - param_4, param_3 = iVar2 - uVar1,\n     (SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar2,uVar1)) == (int)param_3 < 0))" (( "(") (binary_expression "(-1 < param_4) &&\n     (param_4 = param_4 + (uint)CARRY4(uVar1,param_3),\n     uVar1 = (uint)(*(uint *)(param_2 + 8) < uVar1 + param_3),\n     iVar2 = *(int *)(param_2 + 0xc) - param_4, param_3 = iVar2 - uVar1,\n     (SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar2,uVar1)) == (int)param_3 < 0)" (parenthesized_expression "(-1 < param_4)" (( "(") (binary_expression "-1 < param_4" (number_literal "-1") (< "<") (identifier "param_4")) () ")")) (&& "&&") (parenthesized_expression "(param_4 = param_4 + (uint)CARRY4(uVar1,param_3),\n     uVar1 = (uint)(*(uint *)(param_2 + 8) < uVar1 + param_3),\n     iVar2 = *(int *)(param_2 + 0xc) - param_4, param_3 = iVar2 - uVar1,\n     (SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar2,uVar1)) == (int)param_3 < 0)" (( "(") (comma_expression "param_4 = param_4 + (uint)CARRY4(uVar1,param_3),\n     uVar1 = (uint)(*(uint *)(param_2 + 8) < uVar1 + param_3),\n     iVar2 = *(int *)(param_2 + 0xc) - param_4, param_3 = iVar2 - uVar1,\n     (SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar2,uVar1)) == (int)param_3 < 0" (assignment_expression "param_4 = param_4 + (uint)CARRY4(uVar1,param_3)" (identifier "param_4") (= "=") (binary_expression "param_4 + (uint)CARRY4(uVar1,param_3)" (identifier "param_4") (+ "+") (cast_expression "(uint)CARRY4(uVar1,param_3)" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (call_expression "CARRY4(uVar1,param_3)" (identifier "CARRY4") (argument_list "(uVar1,param_3)" (( "(") (identifier "uVar1") (, ",") (identifier "param_3") () ")")))))) (, ",") (comma_expression "uVar1 = (uint)(*(uint *)(param_2 + 8) < uVar1 + param_3),\n     iVar2 = *(int *)(param_2 + 0xc) - param_4, param_3 = iVar2 - uVar1,\n     (SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar2,uVar1)) == (int)param_3 < 0" (assignment_expression "uVar1 = (uint)(*(uint *)(param_2 + 8) < uVar1 + param_3)" (identifier "uVar1") (= "=") (call_expression "(uint)(*(uint *)(param_2 + 8) < uVar1 + param_3)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(*(uint *)(param_2 + 8) < uVar1 + param_3)" (( "(") (binary_expression "*(uint *)(param_2 + 8) < uVar1 + param_3" (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" (identifier "param_2") (+ "+") (number_literal "8")) () ")")))) (< "<") (binary_expression "uVar1 + param_3" (identifier "uVar1") (+ "+") (identifier "param_3"))) () ")")))) (, ",") (comma_expression "iVar2 = *(int *)(param_2 + 0xc) - param_4, param_3 = iVar2 - uVar1,\n     (SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar2,uVar1)) == (int)param_3 < 0" (assignment_expression "iVar2 = *(int *)(param_2 + 0xc) - param_4" (identifier "iVar2") (= "=") (binary_expression "*(int *)(param_2 + 0xc) - param_4" (pointer_expression "*(int *)(param_2 + 0xc)" (* "*") (cast_expression "(int *)(param_2 + 0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0xc)" (( "(") (binary_expression "param_2 + 0xc" (identifier "param_2") (+ "+") (number_literal "0xc")) () ")")))) (- "-") (identifier "param_4"))) (, ",") (comma_expression "param_3 = iVar2 - uVar1,\n     (SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar2,uVar1)) == (int)param_3 < 0" (assignment_expression "param_3 = iVar2 - uVar1" (identifier "param_3") (= "=") (binary_expression "iVar2 - uVar1" (identifier "iVar2") (- "-") (identifier "uVar1"))) (, ",") (binary_expression "(SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar2,uVar1)) == (int)param_3 < 0" (parenthesized_expression "(SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar2,uVar1))" (( "(") (binary_expression "SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar2,uVar1)" (call_expression "SBORROW4(*(int *)(param_2 + 0xc),param_4)" (identifier "SBORROW4") (argument_list "(*(int *)(param_2 + 0xc),param_4)" (( "(") (pointer_expression "*(int *)(param_2 + 0xc)" (* "*") (cast_expression "(int *)(param_2 + 0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0xc)" (( "(") (binary_expression "param_2 + 0xc" (identifier "param_2") (+ "+") (number_literal "0xc")) () ")")))) (, ",") (identifier "param_4") () ")"))) (!= "!=") (call_expression "SBORROW4(iVar2,uVar1)" (identifier "SBORROW4") (argument_list "(iVar2,uVar1)" (( "(") (identifier "iVar2") (, ",") (identifier "uVar1") () ")")))) () ")")) (== "==") (binary_expression "(int)param_3 < 0" (cast_expression "(int)param_3" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_3")) (< "<") (number_literal "0"))))))) () ")"))) () ")")) (compound_statement "{\n    FUN_00172310();\n    return;\n  }" ({ "{") (expression_statement "FUN_00172310();" (call_expression "FUN_00172310()" (identifier "FUN_00172310") (argument_list "()" (( "(") () ")"))) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}"))) (expression_statement "FUN_00069d00(unaff_EBP + 0x115aa6,0x6f,&UNK_001273f6 + unaff_EBP,param_3);" (call_expression "FUN_00069d00(unaff_EBP + 0x115aa6,0x6f,&UNK_001273f6 + unaff_EBP,param_3)" (identifier "FUN_00069d00") (argument_list "(unaff_EBP + 0x115aa6,0x6f,&UNK_001273f6 + unaff_EBP,param_3)" (( "(") (binary_expression "unaff_EBP + 0x115aa6" (identifier "unaff_EBP") (+ "+") (number_literal "0x115aa6")) (, ",") (number_literal "0x6f") (, ",") (binary_expression "&UNK_001273f6 + unaff_EBP" (pointer_expression "&UNK_001273f6" (& "&") (identifier "UNK_001273f6")) (+ "+") (identifier "unaff_EBP")) (, ",") (identifier "param_3") () ")"))) (; ";")) (} "}")))

/* WARNING: Function: __x86.get_pc_thunk.bp replaced with injection: get_pc_thunk.bp */
/* DWARF original prototype: void write(Stringpool_template<unsigned_int> * this, Output_file * of,
   off_t offset) */

ssize_t __thiscall
gold::type_1<unsigned_int>::function_1
          (type_1<unsigned_int> *this,int var_5,void *__buf,size_t var_3)

{
  type_2 var_1;
  type_2 var_9;
  int var_8;
  type_3 *buffer;
  int var_6;
  
  var_1 = this->strtab_size_;
  if (var_1 == 0) {
                    /* WARNING: Subroutine does not return */
    var_2("../../gold/stringpool.cc",500,"write");
  }
  if ((-1 < (int)var_3) &&
     (var_6 = var_3 + var_4(var_1,(type_2)__buf),
     var_9 = (type_2)(*(type_2 *)(var_5 + 8) < var_1 + (int)__buf),
     var_8 = *(int *)(var_5 + 0xc) - var_6,
     (var_7(*(int *)(var_5 + 0xc),var_6) != var_7(var_8,var_9)) == (int)(var_8 - var_9) < 0)) {
    buffer = (type_3 *)((int)__buf + *(int *)(var_5 + 0x10));
    var_10(this,buffer,var_1);
    return (ssize_t)buffer;
  }
                    /* WARNING: Subroutine does not return */
  var_2("../../gold/output.h",0x6f,"get_output_view");
}


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

void MASKED(int param_1,int param_2,uint param_3,int param_4)

{
  uint uVar1;
  int iVar2;
  int unaff_EBP;
  
  FUN_000559f2();
  uVar1 = *(uint *)(param_1 + 0x38);
  if (uVar1 == 0) {
                    /* WARNING: Subroutine does not return */
    FUN_00069d00(unaff_EBP + 0x127264,500,unaff_EBP + 0x1272e2,param_4);
  }
  if ((-1 < param_4) &&
     (param_4 = param_4 + (uint)CARRY4(uVar1,param_3),
     uVar1 = (uint)(*(uint *)(param_2 + 8) < uVar1 + param_3),
     iVar2 = *(int *)(param_2 + 0xc) - param_4, param_3 = iVar2 - uVar1,
     (SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar2,uVar1)) == (int)param_3 < 0)) {
    FUN_00172310();
    return;
  }
                    /* WARNING: Subroutine does not return */
  FUN_00069d00(unaff_EBP + 0x115aa6,0x6f,&UNK_001273f6 + unaff_EBP,param_3);
}

