
/* std::wfilebuf::_M_terminate_output() */

bool __thiscall std::wfilebuf::_M_terminate_output(wfilebuf *this)

{
  int iVar1;
  uint uVar2;
  int iVar3;
  int *piVar4;
  bool bVar5;
  undefined1 auStack_b0 [128];
  int local_30 [2];
  
  if (*(uint *)(this + 0x10) < *(uint *)(this + 0x14)) {
    iVar1 = (**(code **)(*(int *)this + 0x34))(this,0xffffffff);
    bVar5 = iVar1 != -1;
    if (this[0x66] == (wfilebuf)0x0) {
      return bVar5;
    }
    piVar4 = *(int **)(this + 0x78);
  }
  else {
    bVar5 = true;
    if (this[0x66] == (wfilebuf)0x0) {
      return true;
    }
    piVar4 = *(int **)(this + 0x78);
  }
  if (piVar4 == (int *)0x0) {
                    /* WARNING: Subroutine does not return */
    __throw_bad_cast();
  }
  iVar1 = (**(code **)(*piVar4 + 0x18))();
  if ((iVar1 == 0) && (bVar5 != false)) {
    do {
      uVar2 = (**(code **)(**(int **)(this + 0x78) + 0xc))
                        (*(int **)(this + 0x78),this + 0x4c,auStack_b0,local_30,local_30);
      if (uVar2 == 2) {
        return false;
      }
      if ((1 < uVar2) || (iVar1 = local_30[0] - (int)auStack_b0, iVar1 < 1)) {
        iVar1 = *(int *)this;
        goto LAB_002f40cc;
      }
      iVar3 = (*(code *)PTR_xsputn_00436060)(this + 0x38,auStack_b0,iVar1);
      if (iVar1 != iVar3) {
        return false;
      }
    } while (uVar2 == 1);
    iVar1 = *(int *)this;
LAB_002f40cc:
    iVar1 = (**(code **)(iVar1 + 0x34))(this,0xffffffff);
    bVar5 = iVar1 != -1;
  }
  return bVar5;
}



/* std::wfilebuf::_M_terminate_output() */

bool __thiscall std::wfilebuf::_M_terminate_output(wfilebuf *this)

{
  int iVar1;
  uint uVar2;
  int iVar3;
  int *piVar4;
  bool bVar5;
  undefined1 auStack_b0 [128];
  int local_30 [2];
  
  if (*(uint *)(this + 0x10) < *(uint *)(this + 0x14)) {
    iVar1 = (**(code **)(*(int *)this + 0x34))(this,0xffffffff);
    bVar5 = iVar1 != -1;
    if (this[0x66] == (wfilebuf)0x0) {
      return bVar5;
    }
    piVar4 = *(int **)(this + 0x78);
  }
  else {
    bVar5 = true;
    if (this[0x66] == (wfilebuf)0x0) {
      return true;
    }
    piVar4 = *(int **)(this + 0x78);
  }
  if (piVar4 == (int *)0x0) {
                    /* WARNING: Subroutine does not return */
    __throw_bad_cast();
  }
  iVar1 = (**(code **)(*piVar4 + 0x18))();
  if ((iVar1 == 0) && (bVar5 != false)) {
    do {
      uVar2 = (**(code **)(**(int **)(this + 0x78) + 0xc))
                        (*(int **)(this + 0x78),this + 0x4c,auStack_b0,local_30,local_30);
      if (uVar2 == 2) {
        return false;
      }
      if ((1 < uVar2) || (iVar1 = local_30[0] - (int)auStack_b0, iVar1 < 1)) {
        iVar1 = *(int *)this;
        goto LAB_002f40cc;
      }
      iVar3 = (*(code *)PTR_xsputn_00436060)(this + 0x38,auStack_b0,iVar1);
      if (iVar1 != iVar3) {
        return false;
      }
    } while (uVar2 == 1);
    iVar1 = *(int *)this;
LAB_002f40cc:
    iVar1 = (**(code **)(iVar1 + 0x34))(this,0xffffffff);
    bVar5 = iVar1 != -1;
  }
  return bVar5;
}


lui gp,0x14
addiu gp,gp,0x61f8
addu gp,gp,t9
addiu sp,sp,-0xd0
lw v0,0x10(a0)
lw v1,0x14(a0)
sw gp,0x18(sp)
sltu v0,v0,v1
sw s0,0xa8(sp)
sw ra,0xcc(sp)
or s0,a0,zero
sw s8,0xc8(sp)
sw s7,0xc4(sp)
sw s6,0xc0(sp)
sw s5,0xbc(sp)
sw s4,0xb8(sp)
sw s3,0xb4(sp)
sw s2,0xb0(sp)
beq v0,zero,0x002f411c
_sw s1,0xac(sp)
lw v0,0x0(a0)
lw t9,0x34(v0)
jalr t9
_li a1,-0x1
addiu v0,v0,0x1
sltu s1,zero,v0
lbu v0,0x66(s0)
beq v0,zero,0x002f40e8
_lw gp,0x18(sp)
lw a0,0x78(s0)
beq a0,zero,0x002f4164
_lw t9,-0x7180(gp)
lw v0,0x0(a0)
lw t9,0x18(v0)
jalr t9
_nop
bne v0,zero,0x002f40e8
_or s3,v0,zero
beq s1,zero,0x002f40ec
_lw ra,0xcc(sp)
addiu s5,s0,0x4c
addiu s2,sp,0xa0
addiu s8,sp,0x20
li s4,0x2
addiu s6,s0,0x38
lw v0,0x78(s0)
or a3,s2,zero
or a2,s8,zero
or a0,v0,zero
lw v0,0x0(v0)
sw s2,0x10(sp)
lw t9,0xc(v0)
jalr t9
_or a1,s5,zero
lw gp,0x18(sp)
beq v0,s4,0x002f40e4
_or s1,v0,zero
sltiu v0,v0,0x2
bne v0,zero,0x002f4130
_lw v1,0xa0(sp)
lw v0,0x0(s0)
li a1,-0x1
lw t9,0x34(v0)
jalr t9
_or a0,s0,zero
addiu v0,v0,0x1
sltu s3,zero,v0
or s1,s3,zero
lw ra,0xcc(sp)
or v0,s1,zero
lw s8,0xc8(sp)
lw s7,0xc4(sp)
lw s6,0xc0(sp)
lw s5,0xbc(sp)
lw s4,0xb8(sp)
lw s3,0xb4(sp)
lw s2,0xb0(sp)
lw s1,0xac(sp)
lw s0,0xa8(sp)
jr ra
_addiu sp,sp,0xd0
lbu v0,0x66(s0)
beq v0,zero,0x002f40e8
_li s1,0x1
b 0x002f4050
_lw a0,0x78(s0)
subu s7,v1,s8
blez s7,0x002f40c8
_lw t9,-0x4170(gp)
or a2,s7,zero
or a1,s8,zero
jalr t9
_or a0,s6,zero
bne s7,v0,0x002f40e4
_li v0,0x1
beq s1,v0,0x002f408c
_nop
b 0x002f40cc
_lw v0,0x0(s0)
bal 0x0030e490
_nop
(translation_unit "/* std::wfilebuf::_M_terminate_output() */\n\nbool __thiscall std::wfilebuf::_M_terminate_output(wfilebuf *this)\n\n{\n  int iVar1;\n  uint uVar2;\n  int iVar3;\n  int *piVar4;\n  bool bVar5;\n  undefined1 auStack_b0 [128];\n  int local_30 [2];\n  \n  if (*(uint *)(this + 0x10) < *(uint *)(this + 0x14)) {\n    iVar1 = (**(code **)(*(int *)this + 0x34))(this,0xffffffff);\n    bVar5 = iVar1 != -1;\n    if (this[0x66] == (wfilebuf)0x0) {\n      return bVar5;\n    }\n    piVar4 = *(int **)(this + 0x78);\n  }\n  else {\n    bVar5 = true;\n    if (this[0x66] == (wfilebuf)0x0) {\n      return true;\n    }\n    piVar4 = *(int **)(this + 0x78);\n  }\n  if (piVar4 == (int *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    __throw_bad_cast();\n  }\n  iVar1 = (**(code **)(*piVar4 + 0x18))();\n  if ((iVar1 == 0) && (bVar5 != false)) {\n    do {\n      uVar2 = (**(code **)(**(int **)(this + 0x78) + 0xc))\n                        (*(int **)(this + 0x78),this + 0x4c,auStack_b0,local_30,local_30);\n      if (uVar2 == 2) {\n        return false;\n      }\n      if ((1 < uVar2) || (iVar1 = local_30[0] - (int)auStack_b0, iVar1 < 1)) {\n        iVar1 = *(int *)this;\n        goto LAB_002f40cc;\n      }\n      iVar3 = (*(code *)PTR_xsputn_00436060)(this + 0x38,auStack_b0,iVar1);\n      if (iVar1 != iVar3) {\n        return false;\n      }\n    } while (uVar2 == 1);\n    iVar1 = *(int *)this;\nLAB_002f40cc:\n    iVar1 = (**(code **)(iVar1 + 0x34))(this,0xffffffff);\n    bVar5 = iVar1 != -1;\n  }\n  return bVar5;\n}\n\n" comment (function_definition "bool __thiscall std::wfilebuf::_M_terminate_output(wfilebuf *this)\n\n{\n  int iVar1;\n  uint uVar2;\n  int iVar3;\n  int *piVar4;\n  bool bVar5;\n  undefined1 auStack_b0 [128];\n  int local_30 [2];\n  \n  if (*(uint *)(this + 0x10) < *(uint *)(this + 0x14)) {\n    iVar1 = (**(code **)(*(int *)this + 0x34))(this,0xffffffff);\n    bVar5 = iVar1 != -1;\n    if (this[0x66] == (wfilebuf)0x0) {\n      return bVar5;\n    }\n    piVar4 = *(int **)(this + 0x78);\n  }\n  else {\n    bVar5 = true;\n    if (this[0x66] == (wfilebuf)0x0) {\n      return true;\n    }\n    piVar4 = *(int **)(this + 0x78);\n  }\n  if (piVar4 == (int *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    __throw_bad_cast();\n  }\n  iVar1 = (**(code **)(*piVar4 + 0x18))();\n  if ((iVar1 == 0) && (bVar5 != false)) {\n    do {\n      uVar2 = (**(code **)(**(int **)(this + 0x78) + 0xc))\n                        (*(int **)(this + 0x78),this + 0x4c,auStack_b0,local_30,local_30);\n      if (uVar2 == 2) {\n        return false;\n      }\n      if ((1 < uVar2) || (iVar1 = local_30[0] - (int)auStack_b0, iVar1 < 1)) {\n        iVar1 = *(int *)this;\n        goto LAB_002f40cc;\n      }\n      iVar3 = (*(code *)PTR_xsputn_00436060)(this + 0x38,auStack_b0,iVar1);\n      if (iVar1 != iVar3) {\n        return false;\n      }\n    } while (uVar2 == 1);\n    iVar1 = *(int *)this;\nLAB_002f40cc:\n    iVar1 = (**(code **)(iVar1 + 0x34))(this,0xffffffff);\n    bVar5 = iVar1 != -1;\n  }\n  return bVar5;\n}" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "std::wfilebuf::" identifier : : identifier : :) (function_declarator "_M_terminate_output(wfilebuf *this)" identifier (parameter_list "(wfilebuf *this)" ( (parameter_declaration "wfilebuf *this" type_identifier (pointer_declarator "*this" * identifier)) ))) (compound_statement "{\n  int iVar1;\n  uint uVar2;\n  int iVar3;\n  int *piVar4;\n  bool bVar5;\n  undefined1 auStack_b0 [128];\n  int local_30 [2];\n  \n  if (*(uint *)(this + 0x10) < *(uint *)(this + 0x14)) {\n    iVar1 = (**(code **)(*(int *)this + 0x34))(this,0xffffffff);\n    bVar5 = iVar1 != -1;\n    if (this[0x66] == (wfilebuf)0x0) {\n      return bVar5;\n    }\n    piVar4 = *(int **)(this + 0x78);\n  }\n  else {\n    bVar5 = true;\n    if (this[0x66] == (wfilebuf)0x0) {\n      return true;\n    }\n    piVar4 = *(int **)(this + 0x78);\n  }\n  if (piVar4 == (int *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    __throw_bad_cast();\n  }\n  iVar1 = (**(code **)(*piVar4 + 0x18))();\n  if ((iVar1 == 0) && (bVar5 != false)) {\n    do {\n      uVar2 = (**(code **)(**(int **)(this + 0x78) + 0xc))\n                        (*(int **)(this + 0x78),this + 0x4c,auStack_b0,local_30,local_30);\n      if (uVar2 == 2) {\n        return false;\n      }\n      if ((1 < uVar2) || (iVar1 = local_30[0] - (int)auStack_b0, iVar1 < 1)) {\n        iVar1 = *(int *)this;\n        goto LAB_002f40cc;\n      }\n      iVar3 = (*(code *)PTR_xsputn_00436060)(this + 0x38,auStack_b0,iVar1);\n      if (iVar1 != iVar3) {\n        return false;\n      }\n    } while (uVar2 == 1);\n    iVar1 = *(int *)this;\nLAB_002f40cc:\n    iVar1 = (**(code **)(iVar1 + 0x34))(this,0xffffffff);\n    bVar5 = iVar1 != -1;\n  }\n  return bVar5;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "int *piVar4;" primitive_type (pointer_declarator "*piVar4" * identifier) ;) (declaration "bool bVar5;" primitive_type identifier ;) (declaration "undefined1 auStack_b0 [128];" type_identifier (array_declarator "auStack_b0 [128]" identifier [ number_literal ]) ;) (declaration "int local_30 [2];" primitive_type (array_declarator "local_30 [2]" identifier [ number_literal ]) ;) (if_statement "if (*(uint *)(this + 0x10) < *(uint *)(this + 0x14)) {\n    iVar1 = (**(code **)(*(int *)this + 0x34))(this,0xffffffff);\n    bVar5 = iVar1 != -1;\n    if (this[0x66] == (wfilebuf)0x0) {\n      return bVar5;\n    }\n    piVar4 = *(int **)(this + 0x78);\n  }\n  else {\n    bVar5 = true;\n    if (this[0x66] == (wfilebuf)0x0) {\n      return true;\n    }\n    piVar4 = *(int **)(this + 0x78);\n  }" if (parenthesized_expression "(*(uint *)(this + 0x10) < *(uint *)(this + 0x14))" ( (binary_expression "*(uint *)(this + 0x10) < *(uint *)(this + 0x14)" (pointer_expression "*(uint *)(this + 0x10)" * (cast_expression "(uint *)(this + 0x10)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0x10)" ( (binary_expression "this + 0x10" identifier + number_literal) )))) < (pointer_expression "*(uint *)(this + 0x14)" * (cast_expression "(uint *)(this + 0x14)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0x14)" ( (binary_expression "this + 0x14" identifier + number_literal) ))))) )) (compound_statement "{\n    iVar1 = (**(code **)(*(int *)this + 0x34))(this,0xffffffff);\n    bVar5 = iVar1 != -1;\n    if (this[0x66] == (wfilebuf)0x0) {\n      return bVar5;\n    }\n    piVar4 = *(int **)(this + 0x78);\n  }" { (expression_statement "iVar1 = (**(code **)(*(int *)this + 0x34))(this,0xffffffff);" (assignment_expression "iVar1 = (**(code **)(*(int *)this + 0x34))(this,0xffffffff)" identifier = (call_expression "(**(code **)(*(int *)this + 0x34))(this,0xffffffff)" (parenthesized_expression "(**(code **)(*(int *)this + 0x34))" ( (pointer_expression "**(code **)(*(int *)this + 0x34)" * (pointer_expression "*(code **)(*(int *)this + 0x34)" * (cast_expression "(code **)(*(int *)this + 0x34)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)this + 0x34)" ( (binary_expression "*(int *)this + 0x34" (pointer_expression "*(int *)this" * (cast_expression "(int *)this" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) + number_literal) ))))) )) (argument_list "(this,0xffffffff)" ( identifier , number_literal )))) ;) (expression_statement "bVar5 = iVar1 != -1;" (assignment_expression "bVar5 = iVar1 != -1" identifier = (binary_expression "iVar1 != -1" identifier != number_literal)) ;) (if_statement "if (this[0x66] == (wfilebuf)0x0) {\n      return bVar5;\n    }" if (parenthesized_expression "(this[0x66] == (wfilebuf)0x0)" ( (binary_expression "this[0x66] == (wfilebuf)0x0" (subscript_expression "this[0x66]" identifier [ number_literal ]) == (cast_expression "(wfilebuf)0x0" ( (type_descriptor "wfilebuf" type_identifier) ) number_literal)) )) (compound_statement "{\n      return bVar5;\n    }" { (return_statement "return bVar5;" return identifier ;) })) (expression_statement "piVar4 = *(int **)(this + 0x78);" (assignment_expression "piVar4 = *(int **)(this + 0x78)" identifier = (pointer_expression "*(int **)(this + 0x78)" * (cast_expression "(int **)(this + 0x78)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(this + 0x78)" ( (binary_expression "this + 0x78" identifier + number_literal) ))))) ;) }) (else_clause "else {\n    bVar5 = true;\n    if (this[0x66] == (wfilebuf)0x0) {\n      return true;\n    }\n    piVar4 = *(int **)(this + 0x78);\n  }" else (compound_statement "{\n    bVar5 = true;\n    if (this[0x66] == (wfilebuf)0x0) {\n      return true;\n    }\n    piVar4 = *(int **)(this + 0x78);\n  }" { (expression_statement "bVar5 = true;" (assignment_expression "bVar5 = true" identifier = true) ;) (if_statement "if (this[0x66] == (wfilebuf)0x0) {\n      return true;\n    }" if (parenthesized_expression "(this[0x66] == (wfilebuf)0x0)" ( (binary_expression "this[0x66] == (wfilebuf)0x0" (subscript_expression "this[0x66]" identifier [ number_literal ]) == (cast_expression "(wfilebuf)0x0" ( (type_descriptor "wfilebuf" type_identifier) ) number_literal)) )) (compound_statement "{\n      return true;\n    }" { (return_statement "return true;" return true ;) })) (expression_statement "piVar4 = *(int **)(this + 0x78);" (assignment_expression "piVar4 = *(int **)(this + 0x78)" identifier = (pointer_expression "*(int **)(this + 0x78)" * (cast_expression "(int **)(this + 0x78)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(this + 0x78)" ( (binary_expression "this + 0x78" identifier + number_literal) ))))) ;) }))) (if_statement "if (piVar4 == (int *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    __throw_bad_cast();\n  }" if (parenthesized_expression "(piVar4 == (int *)0x0)" ( (binary_expression "piVar4 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    __throw_bad_cast();\n  }" { comment (expression_statement "__throw_bad_cast();" (call_expression "__throw_bad_cast()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "iVar1 = (**(code **)(*piVar4 + 0x18))();" (assignment_expression "iVar1 = (**(code **)(*piVar4 + 0x18))()" identifier = (call_expression "(**(code **)(*piVar4 + 0x18))()" (parenthesized_expression "(**(code **)(*piVar4 + 0x18))" ( (pointer_expression "**(code **)(*piVar4 + 0x18)" * (pointer_expression "*(code **)(*piVar4 + 0x18)" * (cast_expression "(code **)(*piVar4 + 0x18)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar4 + 0x18)" ( (binary_expression "*piVar4 + 0x18" (pointer_expression "*piVar4" * identifier) + number_literal) ))))) )) (argument_list "()" ( )))) ;) (if_statement "if ((iVar1 == 0) && (bVar5 != false)) {\n    do {\n      uVar2 = (**(code **)(**(int **)(this + 0x78) + 0xc))\n                        (*(int **)(this + 0x78),this + 0x4c,auStack_b0,local_30,local_30);\n      if (uVar2 == 2) {\n        return false;\n      }\n      if ((1 < uVar2) || (iVar1 = local_30[0] - (int)auStack_b0, iVar1 < 1)) {\n        iVar1 = *(int *)this;\n        goto LAB_002f40cc;\n      }\n      iVar3 = (*(code *)PTR_xsputn_00436060)(this + 0x38,auStack_b0,iVar1);\n      if (iVar1 != iVar3) {\n        return false;\n      }\n    } while (uVar2 == 1);\n    iVar1 = *(int *)this;\nLAB_002f40cc:\n    iVar1 = (**(code **)(iVar1 + 0x34))(this,0xffffffff);\n    bVar5 = iVar1 != -1;\n  }" if (parenthesized_expression "((iVar1 == 0) && (bVar5 != false))" ( (binary_expression "(iVar1 == 0) && (bVar5 != false)" (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) && (parenthesized_expression "(bVar5 != false)" ( (binary_expression "bVar5 != false" identifier != false) ))) )) (compound_statement "{\n    do {\n      uVar2 = (**(code **)(**(int **)(this + 0x78) + 0xc))\n                        (*(int **)(this + 0x78),this + 0x4c,auStack_b0,local_30,local_30);\n      if (uVar2 == 2) {\n        return false;\n      }\n      if ((1 < uVar2) || (iVar1 = local_30[0] - (int)auStack_b0, iVar1 < 1)) {\n        iVar1 = *(int *)this;\n        goto LAB_002f40cc;\n      }\n      iVar3 = (*(code *)PTR_xsputn_00436060)(this + 0x38,auStack_b0,iVar1);\n      if (iVar1 != iVar3) {\n        return false;\n      }\n    } while (uVar2 == 1);\n    iVar1 = *(int *)this;\nLAB_002f40cc:\n    iVar1 = (**(code **)(iVar1 + 0x34))(this,0xffffffff);\n    bVar5 = iVar1 != -1;\n  }" { (do_statement "do {\n      uVar2 = (**(code **)(**(int **)(this + 0x78) + 0xc))\n                        (*(int **)(this + 0x78),this + 0x4c,auStack_b0,local_30,local_30);\n      if (uVar2 == 2) {\n        return false;\n      }\n      if ((1 < uVar2) || (iVar1 = local_30[0] - (int)auStack_b0, iVar1 < 1)) {\n        iVar1 = *(int *)this;\n        goto LAB_002f40cc;\n      }\n      iVar3 = (*(code *)PTR_xsputn_00436060)(this + 0x38,auStack_b0,iVar1);\n      if (iVar1 != iVar3) {\n        return false;\n      }\n    } while (uVar2 == 1);" do (compound_statement "{\n      uVar2 = (**(code **)(**(int **)(this + 0x78) + 0xc))\n                        (*(int **)(this + 0x78),this + 0x4c,auStack_b0,local_30,local_30);\n      if (uVar2 == 2) {\n        return false;\n      }\n      if ((1 < uVar2) || (iVar1 = local_30[0] - (int)auStack_b0, iVar1 < 1)) {\n        iVar1 = *(int *)this;\n        goto LAB_002f40cc;\n      }\n      iVar3 = (*(code *)PTR_xsputn_00436060)(this + 0x38,auStack_b0,iVar1);\n      if (iVar1 != iVar3) {\n        return false;\n      }\n    }" { (expression_statement "uVar2 = (**(code **)(**(int **)(this + 0x78) + 0xc))\n                        (*(int **)(this + 0x78),this + 0x4c,auStack_b0,local_30,local_30);" (assignment_expression "uVar2 = (**(code **)(**(int **)(this + 0x78) + 0xc))\n                        (*(int **)(this + 0x78),this + 0x4c,auStack_b0,local_30,local_30)" identifier = (call_expression "(**(code **)(**(int **)(this + 0x78) + 0xc))\n                        (*(int **)(this + 0x78),this + 0x4c,auStack_b0,local_30,local_30)" (parenthesized_expression "(**(code **)(**(int **)(this + 0x78) + 0xc))" ( (pointer_expression "**(code **)(**(int **)(this + 0x78) + 0xc)" * (pointer_expression "*(code **)(**(int **)(this + 0x78) + 0xc)" * (cast_expression "(code **)(**(int **)(this + 0x78) + 0xc)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(**(int **)(this + 0x78) + 0xc)" ( (binary_expression "**(int **)(this + 0x78) + 0xc" (pointer_expression "**(int **)(this + 0x78)" * (pointer_expression "*(int **)(this + 0x78)" * (cast_expression "(int **)(this + 0x78)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(this + 0x78)" ( (binary_expression "this + 0x78" identifier + number_literal) ))))) + number_literal) ))))) )) (argument_list "(*(int **)(this + 0x78),this + 0x4c,auStack_b0,local_30,local_30)" ( (pointer_expression "*(int **)(this + 0x78)" * (cast_expression "(int **)(this + 0x78)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(this + 0x78)" ( (binary_expression "this + 0x78" identifier + number_literal) )))) , (binary_expression "this + 0x4c" identifier + number_literal) , identifier , identifier , identifier )))) ;) (if_statement "if (uVar2 == 2) {\n        return false;\n      }" if (parenthesized_expression "(uVar2 == 2)" ( (binary_expression "uVar2 == 2" identifier == number_literal) )) (compound_statement "{\n        return false;\n      }" { (return_statement "return false;" return false ;) })) (if_statement "if ((1 < uVar2) || (iVar1 = local_30[0] - (int)auStack_b0, iVar1 < 1)) {\n        iVar1 = *(int *)this;\n        goto LAB_002f40cc;\n      }" if (parenthesized_expression "((1 < uVar2) || (iVar1 = local_30[0] - (int)auStack_b0, iVar1 < 1))" ( (binary_expression "(1 < uVar2) || (iVar1 = local_30[0] - (int)auStack_b0, iVar1 < 1)" (parenthesized_expression "(1 < uVar2)" ( (binary_expression "1 < uVar2" number_literal < identifier) )) || (parenthesized_expression "(iVar1 = local_30[0] - (int)auStack_b0, iVar1 < 1)" ( (comma_expression "iVar1 = local_30[0] - (int)auStack_b0, iVar1 < 1" (assignment_expression "iVar1 = local_30[0] - (int)auStack_b0" identifier = (binary_expression "local_30[0] - (int)auStack_b0" (subscript_expression "local_30[0]" identifier [ number_literal ]) - (cast_expression "(int)auStack_b0" ( (type_descriptor "int" primitive_type) ) identifier))) , (binary_expression "iVar1 < 1" identifier < number_literal)) ))) )) (compound_statement "{\n        iVar1 = *(int *)this;\n        goto LAB_002f40cc;\n      }" { (expression_statement "iVar1 = *(int *)this;" (assignment_expression "iVar1 = *(int *)this" identifier = (pointer_expression "*(int *)this" * (cast_expression "(int *)this" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) ;) (goto_statement "goto LAB_002f40cc;" goto statement_identifier ;) })) (expression_statement "iVar3 = (*(code *)PTR_xsputn_00436060)(this + 0x38,auStack_b0,iVar1);" (assignment_expression "iVar3 = (*(code *)PTR_xsputn_00436060)(this + 0x38,auStack_b0,iVar1)" identifier = (call_expression "(*(code *)PTR_xsputn_00436060)(this + 0x38,auStack_b0,iVar1)" (parenthesized_expression "(*(code *)PTR_xsputn_00436060)" ( (pointer_expression "*(code *)PTR_xsputn_00436060" * (cast_expression "(code *)PTR_xsputn_00436060" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(this + 0x38,auStack_b0,iVar1)" ( (binary_expression "this + 0x38" identifier + number_literal) , identifier , identifier )))) ;) (if_statement "if (iVar1 != iVar3) {\n        return false;\n      }" if (parenthesized_expression "(iVar1 != iVar3)" ( (binary_expression "iVar1 != iVar3" identifier != identifier) )) (compound_statement "{\n        return false;\n      }" { (return_statement "return false;" return false ;) })) }) while (parenthesized_expression "(uVar2 == 1)" ( (binary_expression "uVar2 == 1" identifier == number_literal) )) ;) (expression_statement "iVar1 = *(int *)this;" (assignment_expression "iVar1 = *(int *)this" identifier = (pointer_expression "*(int *)this" * (cast_expression "(int *)this" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) ;) (labeled_statement "LAB_002f40cc:\n    iVar1 = (**(code **)(iVar1 + 0x34))(this,0xffffffff);" statement_identifier : (expression_statement "iVar1 = (**(code **)(iVar1 + 0x34))(this,0xffffffff);" (assignment_expression "iVar1 = (**(code **)(iVar1 + 0x34))(this,0xffffffff)" identifier = (call_expression "(**(code **)(iVar1 + 0x34))(this,0xffffffff)" (parenthesized_expression "(**(code **)(iVar1 + 0x34))" ( (pointer_expression "**(code **)(iVar1 + 0x34)" * (pointer_expression "*(code **)(iVar1 + 0x34)" * (cast_expression "(code **)(iVar1 + 0x34)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar1 + 0x34)" ( (binary_expression "iVar1 + 0x34" identifier + number_literal) ))))) )) (argument_list "(this,0xffffffff)" ( identifier , number_literal )))) ;)) (expression_statement "bVar5 = iVar1 != -1;" (assignment_expression "bVar5 = iVar1 != -1" identifier = (binary_expression "iVar1 != -1" identifier != number_literal)) ;) })) (return_statement "return bVar5;" return identifier ;) })))
(translation_unit "/* std::wfilebuf::_M_terminate_output() */\n\nbool __thiscall std::wfilebuf::_M_terminate_output(wfilebuf *this)\n\n{\n  int iVar1;\n  uint uVar2;\n  int iVar3;\n  int *piVar4;\n  bool bVar5;\n  undefined1 auStack_b0 [128];\n  int local_30 [2];\n  \n  if (*(uint *)(this + 0x10) < *(uint *)(this + 0x14)) {\n    iVar1 = (**(code **)(*(int *)this + 0x34))(this,0xffffffff);\n    bVar5 = iVar1 != -1;\n    if (this[0x66] == (wfilebuf)0x0) {\n      return bVar5;\n    }\n    piVar4 = *(int **)(this + 0x78);\n  }\n  else {\n    bVar5 = true;\n    if (this[0x66] == (wfilebuf)0x0) {\n      return true;\n    }\n    piVar4 = *(int **)(this + 0x78);\n  }\n  if (piVar4 == (int *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    __throw_bad_cast();\n  }\n  iVar1 = (**(code **)(*piVar4 + 0x18))();\n  if ((iVar1 == 0) && (bVar5 != false)) {\n    do {\n      uVar2 = (**(code **)(**(int **)(this + 0x78) + 0xc))\n                        (*(int **)(this + 0x78),this + 0x4c,auStack_b0,local_30,local_30);\n      if (uVar2 == 2) {\n        return false;\n      }\n      if ((1 < uVar2) || (iVar1 = local_30[0] - (int)auStack_b0, iVar1 < 1)) {\n        iVar1 = *(int *)this;\n        goto LAB_002f40cc;\n      }\n      iVar3 = (*(code *)PTR_xsputn_00436060)(this + 0x38,auStack_b0,iVar1);\n      if (iVar1 != iVar3) {\n        return false;\n      }\n    } while (uVar2 == 1);\n    iVar1 = *(int *)this;\nLAB_002f40cc:\n    iVar1 = (**(code **)(iVar1 + 0x34))(this,0xffffffff);\n    bVar5 = iVar1 != -1;\n  }\n  return bVar5;\n}\n\n" comment (function_definition "bool __thiscall std::wfilebuf::_M_terminate_output(wfilebuf *this)\n\n{\n  int iVar1;\n  uint uVar2;\n  int iVar3;\n  int *piVar4;\n  bool bVar5;\n  undefined1 auStack_b0 [128];\n  int local_30 [2];\n  \n  if (*(uint *)(this + 0x10) < *(uint *)(this + 0x14)) {\n    iVar1 = (**(code **)(*(int *)this + 0x34))(this,0xffffffff);\n    bVar5 = iVar1 != -1;\n    if (this[0x66] == (wfilebuf)0x0) {\n      return bVar5;\n    }\n    piVar4 = *(int **)(this + 0x78);\n  }\n  else {\n    bVar5 = true;\n    if (this[0x66] == (wfilebuf)0x0) {\n      return true;\n    }\n    piVar4 = *(int **)(this + 0x78);\n  }\n  if (piVar4 == (int *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    __throw_bad_cast();\n  }\n  iVar1 = (**(code **)(*piVar4 + 0x18))();\n  if ((iVar1 == 0) && (bVar5 != false)) {\n    do {\n      uVar2 = (**(code **)(**(int **)(this + 0x78) + 0xc))\n                        (*(int **)(this + 0x78),this + 0x4c,auStack_b0,local_30,local_30);\n      if (uVar2 == 2) {\n        return false;\n      }\n      if ((1 < uVar2) || (iVar1 = local_30[0] - (int)auStack_b0, iVar1 < 1)) {\n        iVar1 = *(int *)this;\n        goto LAB_002f40cc;\n      }\n      iVar3 = (*(code *)PTR_xsputn_00436060)(this + 0x38,auStack_b0,iVar1);\n      if (iVar1 != iVar3) {\n        return false;\n      }\n    } while (uVar2 == 1);\n    iVar1 = *(int *)this;\nLAB_002f40cc:\n    iVar1 = (**(code **)(iVar1 + 0x34))(this,0xffffffff);\n    bVar5 = iVar1 != -1;\n  }\n  return bVar5;\n}" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "std::wfilebuf::" identifier : : identifier : :) (function_declarator "_M_terminate_output(wfilebuf *this)" identifier (parameter_list "(wfilebuf *this)" ( (parameter_declaration "wfilebuf *this" type_identifier (pointer_declarator "*this" * identifier)) ))) (compound_statement "{\n  int iVar1;\n  uint uVar2;\n  int iVar3;\n  int *piVar4;\n  bool bVar5;\n  undefined1 auStack_b0 [128];\n  int local_30 [2];\n  \n  if (*(uint *)(this + 0x10) < *(uint *)(this + 0x14)) {\n    iVar1 = (**(code **)(*(int *)this + 0x34))(this,0xffffffff);\n    bVar5 = iVar1 != -1;\n    if (this[0x66] == (wfilebuf)0x0) {\n      return bVar5;\n    }\n    piVar4 = *(int **)(this + 0x78);\n  }\n  else {\n    bVar5 = true;\n    if (this[0x66] == (wfilebuf)0x0) {\n      return true;\n    }\n    piVar4 = *(int **)(this + 0x78);\n  }\n  if (piVar4 == (int *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    __throw_bad_cast();\n  }\n  iVar1 = (**(code **)(*piVar4 + 0x18))();\n  if ((iVar1 == 0) && (bVar5 != false)) {\n    do {\n      uVar2 = (**(code **)(**(int **)(this + 0x78) + 0xc))\n                        (*(int **)(this + 0x78),this + 0x4c,auStack_b0,local_30,local_30);\n      if (uVar2 == 2) {\n        return false;\n      }\n      if ((1 < uVar2) || (iVar1 = local_30[0] - (int)auStack_b0, iVar1 < 1)) {\n        iVar1 = *(int *)this;\n        goto LAB_002f40cc;\n      }\n      iVar3 = (*(code *)PTR_xsputn_00436060)(this + 0x38,auStack_b0,iVar1);\n      if (iVar1 != iVar3) {\n        return false;\n      }\n    } while (uVar2 == 1);\n    iVar1 = *(int *)this;\nLAB_002f40cc:\n    iVar1 = (**(code **)(iVar1 + 0x34))(this,0xffffffff);\n    bVar5 = iVar1 != -1;\n  }\n  return bVar5;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "int *piVar4;" primitive_type (pointer_declarator "*piVar4" * identifier) ;) (declaration "bool bVar5;" primitive_type identifier ;) (declaration "undefined1 auStack_b0 [128];" type_identifier (array_declarator "auStack_b0 [128]" identifier [ number_literal ]) ;) (declaration "int local_30 [2];" primitive_type (array_declarator "local_30 [2]" identifier [ number_literal ]) ;) (if_statement "if (*(uint *)(this + 0x10) < *(uint *)(this + 0x14)) {\n    iVar1 = (**(code **)(*(int *)this + 0x34))(this,0xffffffff);\n    bVar5 = iVar1 != -1;\n    if (this[0x66] == (wfilebuf)0x0) {\n      return bVar5;\n    }\n    piVar4 = *(int **)(this + 0x78);\n  }\n  else {\n    bVar5 = true;\n    if (this[0x66] == (wfilebuf)0x0) {\n      return true;\n    }\n    piVar4 = *(int **)(this + 0x78);\n  }" if (parenthesized_expression "(*(uint *)(this + 0x10) < *(uint *)(this + 0x14))" ( (binary_expression "*(uint *)(this + 0x10) < *(uint *)(this + 0x14)" (pointer_expression "*(uint *)(this + 0x10)" * (cast_expression "(uint *)(this + 0x10)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0x10)" ( (binary_expression "this + 0x10" identifier + number_literal) )))) < (pointer_expression "*(uint *)(this + 0x14)" * (cast_expression "(uint *)(this + 0x14)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0x14)" ( (binary_expression "this + 0x14" identifier + number_literal) ))))) )) (compound_statement "{\n    iVar1 = (**(code **)(*(int *)this + 0x34))(this,0xffffffff);\n    bVar5 = iVar1 != -1;\n    if (this[0x66] == (wfilebuf)0x0) {\n      return bVar5;\n    }\n    piVar4 = *(int **)(this + 0x78);\n  }" { (expression_statement "iVar1 = (**(code **)(*(int *)this + 0x34))(this,0xffffffff);" (assignment_expression "iVar1 = (**(code **)(*(int *)this + 0x34))(this,0xffffffff)" identifier = (call_expression "(**(code **)(*(int *)this + 0x34))(this,0xffffffff)" (parenthesized_expression "(**(code **)(*(int *)this + 0x34))" ( (pointer_expression "**(code **)(*(int *)this + 0x34)" * (pointer_expression "*(code **)(*(int *)this + 0x34)" * (cast_expression "(code **)(*(int *)this + 0x34)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)this + 0x34)" ( (binary_expression "*(int *)this + 0x34" (pointer_expression "*(int *)this" * (cast_expression "(int *)this" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) + number_literal) ))))) )) (argument_list "(this,0xffffffff)" ( identifier , number_literal )))) ;) (expression_statement "bVar5 = iVar1 != -1;" (assignment_expression "bVar5 = iVar1 != -1" identifier = (binary_expression "iVar1 != -1" identifier != number_literal)) ;) (if_statement "if (this[0x66] == (wfilebuf)0x0) {\n      return bVar5;\n    }" if (parenthesized_expression "(this[0x66] == (wfilebuf)0x0)" ( (binary_expression "this[0x66] == (wfilebuf)0x0" (subscript_expression "this[0x66]" identifier [ number_literal ]) == (cast_expression "(wfilebuf)0x0" ( (type_descriptor "wfilebuf" type_identifier) ) number_literal)) )) (compound_statement "{\n      return bVar5;\n    }" { (return_statement "return bVar5;" return identifier ;) })) (expression_statement "piVar4 = *(int **)(this + 0x78);" (assignment_expression "piVar4 = *(int **)(this + 0x78)" identifier = (pointer_expression "*(int **)(this + 0x78)" * (cast_expression "(int **)(this + 0x78)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(this + 0x78)" ( (binary_expression "this + 0x78" identifier + number_literal) ))))) ;) }) (else_clause "else {\n    bVar5 = true;\n    if (this[0x66] == (wfilebuf)0x0) {\n      return true;\n    }\n    piVar4 = *(int **)(this + 0x78);\n  }" else (compound_statement "{\n    bVar5 = true;\n    if (this[0x66] == (wfilebuf)0x0) {\n      return true;\n    }\n    piVar4 = *(int **)(this + 0x78);\n  }" { (expression_statement "bVar5 = true;" (assignment_expression "bVar5 = true" identifier = true) ;) (if_statement "if (this[0x66] == (wfilebuf)0x0) {\n      return true;\n    }" if (parenthesized_expression "(this[0x66] == (wfilebuf)0x0)" ( (binary_expression "this[0x66] == (wfilebuf)0x0" (subscript_expression "this[0x66]" identifier [ number_literal ]) == (cast_expression "(wfilebuf)0x0" ( (type_descriptor "wfilebuf" type_identifier) ) number_literal)) )) (compound_statement "{\n      return true;\n    }" { (return_statement "return true;" return true ;) })) (expression_statement "piVar4 = *(int **)(this + 0x78);" (assignment_expression "piVar4 = *(int **)(this + 0x78)" identifier = (pointer_expression "*(int **)(this + 0x78)" * (cast_expression "(int **)(this + 0x78)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(this + 0x78)" ( (binary_expression "this + 0x78" identifier + number_literal) ))))) ;) }))) (if_statement "if (piVar4 == (int *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    __throw_bad_cast();\n  }" if (parenthesized_expression "(piVar4 == (int *)0x0)" ( (binary_expression "piVar4 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    __throw_bad_cast();\n  }" { comment (expression_statement "__throw_bad_cast();" (call_expression "__throw_bad_cast()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "iVar1 = (**(code **)(*piVar4 + 0x18))();" (assignment_expression "iVar1 = (**(code **)(*piVar4 + 0x18))()" identifier = (call_expression "(**(code **)(*piVar4 + 0x18))()" (parenthesized_expression "(**(code **)(*piVar4 + 0x18))" ( (pointer_expression "**(code **)(*piVar4 + 0x18)" * (pointer_expression "*(code **)(*piVar4 + 0x18)" * (cast_expression "(code **)(*piVar4 + 0x18)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar4 + 0x18)" ( (binary_expression "*piVar4 + 0x18" (pointer_expression "*piVar4" * identifier) + number_literal) ))))) )) (argument_list "()" ( )))) ;) (if_statement "if ((iVar1 == 0) && (bVar5 != false)) {\n    do {\n      uVar2 = (**(code **)(**(int **)(this + 0x78) + 0xc))\n                        (*(int **)(this + 0x78),this + 0x4c,auStack_b0,local_30,local_30);\n      if (uVar2 == 2) {\n        return false;\n      }\n      if ((1 < uVar2) || (iVar1 = local_30[0] - (int)auStack_b0, iVar1 < 1)) {\n        iVar1 = *(int *)this;\n        goto LAB_002f40cc;\n      }\n      iVar3 = (*(code *)PTR_xsputn_00436060)(this + 0x38,auStack_b0,iVar1);\n      if (iVar1 != iVar3) {\n        return false;\n      }\n    } while (uVar2 == 1);\n    iVar1 = *(int *)this;\nLAB_002f40cc:\n    iVar1 = (**(code **)(iVar1 + 0x34))(this,0xffffffff);\n    bVar5 = iVar1 != -1;\n  }" if (parenthesized_expression "((iVar1 == 0) && (bVar5 != false))" ( (binary_expression "(iVar1 == 0) && (bVar5 != false)" (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) && (parenthesized_expression "(bVar5 != false)" ( (binary_expression "bVar5 != false" identifier != false) ))) )) (compound_statement "{\n    do {\n      uVar2 = (**(code **)(**(int **)(this + 0x78) + 0xc))\n                        (*(int **)(this + 0x78),this + 0x4c,auStack_b0,local_30,local_30);\n      if (uVar2 == 2) {\n        return false;\n      }\n      if ((1 < uVar2) || (iVar1 = local_30[0] - (int)auStack_b0, iVar1 < 1)) {\n        iVar1 = *(int *)this;\n        goto LAB_002f40cc;\n      }\n      iVar3 = (*(code *)PTR_xsputn_00436060)(this + 0x38,auStack_b0,iVar1);\n      if (iVar1 != iVar3) {\n        return false;\n      }\n    } while (uVar2 == 1);\n    iVar1 = *(int *)this;\nLAB_002f40cc:\n    iVar1 = (**(code **)(iVar1 + 0x34))(this,0xffffffff);\n    bVar5 = iVar1 != -1;\n  }" { (do_statement "do {\n      uVar2 = (**(code **)(**(int **)(this + 0x78) + 0xc))\n                        (*(int **)(this + 0x78),this + 0x4c,auStack_b0,local_30,local_30);\n      if (uVar2 == 2) {\n        return false;\n      }\n      if ((1 < uVar2) || (iVar1 = local_30[0] - (int)auStack_b0, iVar1 < 1)) {\n        iVar1 = *(int *)this;\n        goto LAB_002f40cc;\n      }\n      iVar3 = (*(code *)PTR_xsputn_00436060)(this + 0x38,auStack_b0,iVar1);\n      if (iVar1 != iVar3) {\n        return false;\n      }\n    } while (uVar2 == 1);" do (compound_statement "{\n      uVar2 = (**(code **)(**(int **)(this + 0x78) + 0xc))\n                        (*(int **)(this + 0x78),this + 0x4c,auStack_b0,local_30,local_30);\n      if (uVar2 == 2) {\n        return false;\n      }\n      if ((1 < uVar2) || (iVar1 = local_30[0] - (int)auStack_b0, iVar1 < 1)) {\n        iVar1 = *(int *)this;\n        goto LAB_002f40cc;\n      }\n      iVar3 = (*(code *)PTR_xsputn_00436060)(this + 0x38,auStack_b0,iVar1);\n      if (iVar1 != iVar3) {\n        return false;\n      }\n    }" { (expression_statement "uVar2 = (**(code **)(**(int **)(this + 0x78) + 0xc))\n                        (*(int **)(this + 0x78),this + 0x4c,auStack_b0,local_30,local_30);" (assignment_expression "uVar2 = (**(code **)(**(int **)(this + 0x78) + 0xc))\n                        (*(int **)(this + 0x78),this + 0x4c,auStack_b0,local_30,local_30)" identifier = (call_expression "(**(code **)(**(int **)(this + 0x78) + 0xc))\n                        (*(int **)(this + 0x78),this + 0x4c,auStack_b0,local_30,local_30)" (parenthesized_expression "(**(code **)(**(int **)(this + 0x78) + 0xc))" ( (pointer_expression "**(code **)(**(int **)(this + 0x78) + 0xc)" * (pointer_expression "*(code **)(**(int **)(this + 0x78) + 0xc)" * (cast_expression "(code **)(**(int **)(this + 0x78) + 0xc)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(**(int **)(this + 0x78) + 0xc)" ( (binary_expression "**(int **)(this + 0x78) + 0xc" (pointer_expression "**(int **)(this + 0x78)" * (pointer_expression "*(int **)(this + 0x78)" * (cast_expression "(int **)(this + 0x78)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(this + 0x78)" ( (binary_expression "this + 0x78" identifier + number_literal) ))))) + number_literal) ))))) )) (argument_list "(*(int **)(this + 0x78),this + 0x4c,auStack_b0,local_30,local_30)" ( (pointer_expression "*(int **)(this + 0x78)" * (cast_expression "(int **)(this + 0x78)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(this + 0x78)" ( (binary_expression "this + 0x78" identifier + number_literal) )))) , (binary_expression "this + 0x4c" identifier + number_literal) , identifier , identifier , identifier )))) ;) (if_statement "if (uVar2 == 2) {\n        return false;\n      }" if (parenthesized_expression "(uVar2 == 2)" ( (binary_expression "uVar2 == 2" identifier == number_literal) )) (compound_statement "{\n        return false;\n      }" { (return_statement "return false;" return false ;) })) (if_statement "if ((1 < uVar2) || (iVar1 = local_30[0] - (int)auStack_b0, iVar1 < 1)) {\n        iVar1 = *(int *)this;\n        goto LAB_002f40cc;\n      }" if (parenthesized_expression "((1 < uVar2) || (iVar1 = local_30[0] - (int)auStack_b0, iVar1 < 1))" ( (binary_expression "(1 < uVar2) || (iVar1 = local_30[0] - (int)auStack_b0, iVar1 < 1)" (parenthesized_expression "(1 < uVar2)" ( (binary_expression "1 < uVar2" number_literal < identifier) )) || (parenthesized_expression "(iVar1 = local_30[0] - (int)auStack_b0, iVar1 < 1)" ( (comma_expression "iVar1 = local_30[0] - (int)auStack_b0, iVar1 < 1" (assignment_expression "iVar1 = local_30[0] - (int)auStack_b0" identifier = (binary_expression "local_30[0] - (int)auStack_b0" (subscript_expression "local_30[0]" identifier [ number_literal ]) - (cast_expression "(int)auStack_b0" ( (type_descriptor "int" primitive_type) ) identifier))) , (binary_expression "iVar1 < 1" identifier < number_literal)) ))) )) (compound_statement "{\n        iVar1 = *(int *)this;\n        goto LAB_002f40cc;\n      }" { (expression_statement "iVar1 = *(int *)this;" (assignment_expression "iVar1 = *(int *)this" identifier = (pointer_expression "*(int *)this" * (cast_expression "(int *)this" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) ;) (goto_statement "goto LAB_002f40cc;" goto statement_identifier ;) })) (expression_statement "iVar3 = (*(code *)PTR_xsputn_00436060)(this + 0x38,auStack_b0,iVar1);" (assignment_expression "iVar3 = (*(code *)PTR_xsputn_00436060)(this + 0x38,auStack_b0,iVar1)" identifier = (call_expression "(*(code *)PTR_xsputn_00436060)(this + 0x38,auStack_b0,iVar1)" (parenthesized_expression "(*(code *)PTR_xsputn_00436060)" ( (pointer_expression "*(code *)PTR_xsputn_00436060" * (cast_expression "(code *)PTR_xsputn_00436060" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(this + 0x38,auStack_b0,iVar1)" ( (binary_expression "this + 0x38" identifier + number_literal) , identifier , identifier )))) ;) (if_statement "if (iVar1 != iVar3) {\n        return false;\n      }" if (parenthesized_expression "(iVar1 != iVar3)" ( (binary_expression "iVar1 != iVar3" identifier != identifier) )) (compound_statement "{\n        return false;\n      }" { (return_statement "return false;" return false ;) })) }) while (parenthesized_expression "(uVar2 == 1)" ( (binary_expression "uVar2 == 1" identifier == number_literal) )) ;) (expression_statement "iVar1 = *(int *)this;" (assignment_expression "iVar1 = *(int *)this" identifier = (pointer_expression "*(int *)this" * (cast_expression "(int *)this" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) ;) (labeled_statement "LAB_002f40cc:\n    iVar1 = (**(code **)(iVar1 + 0x34))(this,0xffffffff);" statement_identifier : (expression_statement "iVar1 = (**(code **)(iVar1 + 0x34))(this,0xffffffff);" (assignment_expression "iVar1 = (**(code **)(iVar1 + 0x34))(this,0xffffffff)" identifier = (call_expression "(**(code **)(iVar1 + 0x34))(this,0xffffffff)" (parenthesized_expression "(**(code **)(iVar1 + 0x34))" ( (pointer_expression "**(code **)(iVar1 + 0x34)" * (pointer_expression "*(code **)(iVar1 + 0x34)" * (cast_expression "(code **)(iVar1 + 0x34)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar1 + 0x34)" ( (binary_expression "iVar1 + 0x34" identifier + number_literal) ))))) )) (argument_list "(this,0xffffffff)" ( identifier , number_literal )))) ;)) (expression_statement "bVar5 = iVar1 != -1;" (assignment_expression "bVar5 = iVar1 != -1" identifier = (binary_expression "iVar1 != -1" identifier != number_literal)) ;) })) (return_statement "return bVar5;" return identifier ;) })))
(translation_unit "bool __thiscall std::wfilebuf::_M_terminate_output(wfilebuf *this)\n\n{\n  int iVar1;\n  uint uVar2;\n  int iVar3;\n  int *piVar4;\n  bool bVar5;\n  undefined1 auStack_b0 [128];\n  int local_30 [2];\n  \n  if (*(uint *)(this + 0x10) < *(uint *)(this + 0x14)) {\n    iVar1 = (**(code **)(*(int *)this + 0x34))(this,0xffffffff);\n    bVar5 = iVar1 != -1;\n    if (this[0x66] == (wfilebuf)0x0) {\n      return bVar5;\n    }\n    piVar4 = *(int **)(this + 0x78);\n  }\n  else {\n    bVar5 = true;\n    if (this[0x66] == (wfilebuf)0x0) {\n      return true;\n    }\n    piVar4 = *(int **)(this + 0x78);\n  }\n  if (piVar4 == (int *)0x0) {\n                    \n    __throw_bad_cast();\n  }\n  iVar1 = (**(code **)(*piVar4 + 0x18))();\n  if ((iVar1 == 0) && (bVar5 != false)) {\n    do {\n      uVar2 = (**(code **)(**(int **)(this + 0x78) + 0xc))\n                        (*(int **)(this + 0x78),this + 0x4c,auStack_b0,local_30,local_30);\n      if (uVar2 == 2) {\n        return false;\n      }\n      if ((1 < uVar2) || (iVar1 = local_30[0] - (int)auStack_b0, iVar1 < 1)) {\n        iVar1 = *(int *)this;\n        goto LAB_002f40cc;\n      }\n      iVar3 = (*(code *)PTR_xsputn_00436060)(this + 0x38,auStack_b0,iVar1);\n      if (iVar1 != iVar3) {\n        return false;\n      }\n    } while (uVar2 == 1);\n    iVar1 = *(int *)this;\nLAB_002f40cc:\n    iVar1 = (**(code **)(iVar1 + 0x34))(this,0xffffffff);\n    bVar5 = iVar1 != -1;\n  }\n  return bVar5;\n}\n\n" (function_definition "bool __thiscall std::wfilebuf::_M_terminate_output(wfilebuf *this)\n\n{\n  int iVar1;\n  uint uVar2;\n  int iVar3;\n  int *piVar4;\n  bool bVar5;\n  undefined1 auStack_b0 [128];\n  int local_30 [2];\n  \n  if (*(uint *)(this + 0x10) < *(uint *)(this + 0x14)) {\n    iVar1 = (**(code **)(*(int *)this + 0x34))(this,0xffffffff);\n    bVar5 = iVar1 != -1;\n    if (this[0x66] == (wfilebuf)0x0) {\n      return bVar5;\n    }\n    piVar4 = *(int **)(this + 0x78);\n  }\n  else {\n    bVar5 = true;\n    if (this[0x66] == (wfilebuf)0x0) {\n      return true;\n    }\n    piVar4 = *(int **)(this + 0x78);\n  }\n  if (piVar4 == (int *)0x0) {\n                    \n    __throw_bad_cast();\n  }\n  iVar1 = (**(code **)(*piVar4 + 0x18))();\n  if ((iVar1 == 0) && (bVar5 != false)) {\n    do {\n      uVar2 = (**(code **)(**(int **)(this + 0x78) + 0xc))\n                        (*(int **)(this + 0x78),this + 0x4c,auStack_b0,local_30,local_30);\n      if (uVar2 == 2) {\n        return false;\n      }\n      if ((1 < uVar2) || (iVar1 = local_30[0] - (int)auStack_b0, iVar1 < 1)) {\n        iVar1 = *(int *)this;\n        goto LAB_002f40cc;\n      }\n      iVar3 = (*(code *)PTR_xsputn_00436060)(this + 0x38,auStack_b0,iVar1);\n      if (iVar1 != iVar3) {\n        return false;\n      }\n    } while (uVar2 == 1);\n    iVar1 = *(int *)this;\nLAB_002f40cc:\n    iVar1 = (**(code **)(iVar1 + 0x34))(this,0xffffffff);\n    bVar5 = iVar1 != -1;\n  }\n  return bVar5;\n}" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "std::wfilebuf::" identifier : : identifier : :) (function_declarator "_M_terminate_output(wfilebuf *this)" identifier (parameter_list "(wfilebuf *this)" ( (parameter_declaration "wfilebuf *this" type_identifier (pointer_declarator "*this" * identifier)) ))) (compound_statement "{\n  int iVar1;\n  uint uVar2;\n  int iVar3;\n  int *piVar4;\n  bool bVar5;\n  undefined1 auStack_b0 [128];\n  int local_30 [2];\n  \n  if (*(uint *)(this + 0x10) < *(uint *)(this + 0x14)) {\n    iVar1 = (**(code **)(*(int *)this + 0x34))(this,0xffffffff);\n    bVar5 = iVar1 != -1;\n    if (this[0x66] == (wfilebuf)0x0) {\n      return bVar5;\n    }\n    piVar4 = *(int **)(this + 0x78);\n  }\n  else {\n    bVar5 = true;\n    if (this[0x66] == (wfilebuf)0x0) {\n      return true;\n    }\n    piVar4 = *(int **)(this + 0x78);\n  }\n  if (piVar4 == (int *)0x0) {\n                    \n    __throw_bad_cast();\n  }\n  iVar1 = (**(code **)(*piVar4 + 0x18))();\n  if ((iVar1 == 0) && (bVar5 != false)) {\n    do {\n      uVar2 = (**(code **)(**(int **)(this + 0x78) + 0xc))\n                        (*(int **)(this + 0x78),this + 0x4c,auStack_b0,local_30,local_30);\n      if (uVar2 == 2) {\n        return false;\n      }\n      if ((1 < uVar2) || (iVar1 = local_30[0] - (int)auStack_b0, iVar1 < 1)) {\n        iVar1 = *(int *)this;\n        goto LAB_002f40cc;\n      }\n      iVar3 = (*(code *)PTR_xsputn_00436060)(this + 0x38,auStack_b0,iVar1);\n      if (iVar1 != iVar3) {\n        return false;\n      }\n    } while (uVar2 == 1);\n    iVar1 = *(int *)this;\nLAB_002f40cc:\n    iVar1 = (**(code **)(iVar1 + 0x34))(this,0xffffffff);\n    bVar5 = iVar1 != -1;\n  }\n  return bVar5;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "int *piVar4;" primitive_type (pointer_declarator "*piVar4" * identifier) ;) (declaration "bool bVar5;" primitive_type identifier ;) (declaration "undefined1 auStack_b0 [128];" type_identifier (array_declarator "auStack_b0 [128]" identifier [ number_literal ]) ;) (declaration "int local_30 [2];" primitive_type (array_declarator "local_30 [2]" identifier [ number_literal ]) ;) (if_statement "if (*(uint *)(this + 0x10) < *(uint *)(this + 0x14)) {\n    iVar1 = (**(code **)(*(int *)this + 0x34))(this,0xffffffff);\n    bVar5 = iVar1 != -1;\n    if (this[0x66] == (wfilebuf)0x0) {\n      return bVar5;\n    }\n    piVar4 = *(int **)(this + 0x78);\n  }\n  else {\n    bVar5 = true;\n    if (this[0x66] == (wfilebuf)0x0) {\n      return true;\n    }\n    piVar4 = *(int **)(this + 0x78);\n  }" if (parenthesized_expression "(*(uint *)(this + 0x10) < *(uint *)(this + 0x14))" ( (binary_expression "*(uint *)(this + 0x10) < *(uint *)(this + 0x14)" (pointer_expression "*(uint *)(this + 0x10)" * (cast_expression "(uint *)(this + 0x10)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0x10)" ( (binary_expression "this + 0x10" identifier + number_literal) )))) < (pointer_expression "*(uint *)(this + 0x14)" * (cast_expression "(uint *)(this + 0x14)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0x14)" ( (binary_expression "this + 0x14" identifier + number_literal) ))))) )) (compound_statement "{\n    iVar1 = (**(code **)(*(int *)this + 0x34))(this,0xffffffff);\n    bVar5 = iVar1 != -1;\n    if (this[0x66] == (wfilebuf)0x0) {\n      return bVar5;\n    }\n    piVar4 = *(int **)(this + 0x78);\n  }" { (expression_statement "iVar1 = (**(code **)(*(int *)this + 0x34))(this,0xffffffff);" (assignment_expression "iVar1 = (**(code **)(*(int *)this + 0x34))(this,0xffffffff)" identifier = (call_expression "(**(code **)(*(int *)this + 0x34))(this,0xffffffff)" (parenthesized_expression "(**(code **)(*(int *)this + 0x34))" ( (pointer_expression "**(code **)(*(int *)this + 0x34)" * (pointer_expression "*(code **)(*(int *)this + 0x34)" * (cast_expression "(code **)(*(int *)this + 0x34)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)this + 0x34)" ( (binary_expression "*(int *)this + 0x34" (pointer_expression "*(int *)this" * (cast_expression "(int *)this" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) + number_literal) ))))) )) (argument_list "(this,0xffffffff)" ( identifier , number_literal )))) ;) (expression_statement "bVar5 = iVar1 != -1;" (assignment_expression "bVar5 = iVar1 != -1" identifier = (binary_expression "iVar1 != -1" identifier != number_literal)) ;) (if_statement "if (this[0x66] == (wfilebuf)0x0) {\n      return bVar5;\n    }" if (parenthesized_expression "(this[0x66] == (wfilebuf)0x0)" ( (binary_expression "this[0x66] == (wfilebuf)0x0" (subscript_expression "this[0x66]" identifier [ number_literal ]) == (cast_expression "(wfilebuf)0x0" ( (type_descriptor "wfilebuf" type_identifier) ) number_literal)) )) (compound_statement "{\n      return bVar5;\n    }" { (return_statement "return bVar5;" return identifier ;) })) (expression_statement "piVar4 = *(int **)(this + 0x78);" (assignment_expression "piVar4 = *(int **)(this + 0x78)" identifier = (pointer_expression "*(int **)(this + 0x78)" * (cast_expression "(int **)(this + 0x78)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(this + 0x78)" ( (binary_expression "this + 0x78" identifier + number_literal) ))))) ;) }) (else_clause "else {\n    bVar5 = true;\n    if (this[0x66] == (wfilebuf)0x0) {\n      return true;\n    }\n    piVar4 = *(int **)(this + 0x78);\n  }" else (compound_statement "{\n    bVar5 = true;\n    if (this[0x66] == (wfilebuf)0x0) {\n      return true;\n    }\n    piVar4 = *(int **)(this + 0x78);\n  }" { (expression_statement "bVar5 = true;" (assignment_expression "bVar5 = true" identifier = true) ;) (if_statement "if (this[0x66] == (wfilebuf)0x0) {\n      return true;\n    }" if (parenthesized_expression "(this[0x66] == (wfilebuf)0x0)" ( (binary_expression "this[0x66] == (wfilebuf)0x0" (subscript_expression "this[0x66]" identifier [ number_literal ]) == (cast_expression "(wfilebuf)0x0" ( (type_descriptor "wfilebuf" type_identifier) ) number_literal)) )) (compound_statement "{\n      return true;\n    }" { (return_statement "return true;" return true ;) })) (expression_statement "piVar4 = *(int **)(this + 0x78);" (assignment_expression "piVar4 = *(int **)(this + 0x78)" identifier = (pointer_expression "*(int **)(this + 0x78)" * (cast_expression "(int **)(this + 0x78)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(this + 0x78)" ( (binary_expression "this + 0x78" identifier + number_literal) ))))) ;) }))) (if_statement "if (piVar4 == (int *)0x0) {\n                    \n    __throw_bad_cast();\n  }" if (parenthesized_expression "(piVar4 == (int *)0x0)" ( (binary_expression "piVar4 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                    \n    __throw_bad_cast();\n  }" { (expression_statement "__throw_bad_cast();" (call_expression "__throw_bad_cast()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "iVar1 = (**(code **)(*piVar4 + 0x18))();" (assignment_expression "iVar1 = (**(code **)(*piVar4 + 0x18))()" identifier = (call_expression "(**(code **)(*piVar4 + 0x18))()" (parenthesized_expression "(**(code **)(*piVar4 + 0x18))" ( (pointer_expression "**(code **)(*piVar4 + 0x18)" * (pointer_expression "*(code **)(*piVar4 + 0x18)" * (cast_expression "(code **)(*piVar4 + 0x18)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar4 + 0x18)" ( (binary_expression "*piVar4 + 0x18" (pointer_expression "*piVar4" * identifier) + number_literal) ))))) )) (argument_list "()" ( )))) ;) (if_statement "if ((iVar1 == 0) && (bVar5 != false)) {\n    do {\n      uVar2 = (**(code **)(**(int **)(this + 0x78) + 0xc))\n                        (*(int **)(this + 0x78),this + 0x4c,auStack_b0,local_30,local_30);\n      if (uVar2 == 2) {\n        return false;\n      }\n      if ((1 < uVar2) || (iVar1 = local_30[0] - (int)auStack_b0, iVar1 < 1)) {\n        iVar1 = *(int *)this;\n        goto LAB_002f40cc;\n      }\n      iVar3 = (*(code *)PTR_xsputn_00436060)(this + 0x38,auStack_b0,iVar1);\n      if (iVar1 != iVar3) {\n        return false;\n      }\n    } while (uVar2 == 1);\n    iVar1 = *(int *)this;\nLAB_002f40cc:\n    iVar1 = (**(code **)(iVar1 + 0x34))(this,0xffffffff);\n    bVar5 = iVar1 != -1;\n  }" if (parenthesized_expression "((iVar1 == 0) && (bVar5 != false))" ( (binary_expression "(iVar1 == 0) && (bVar5 != false)" (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) && (parenthesized_expression "(bVar5 != false)" ( (binary_expression "bVar5 != false" identifier != false) ))) )) (compound_statement "{\n    do {\n      uVar2 = (**(code **)(**(int **)(this + 0x78) + 0xc))\n                        (*(int **)(this + 0x78),this + 0x4c,auStack_b0,local_30,local_30);\n      if (uVar2 == 2) {\n        return false;\n      }\n      if ((1 < uVar2) || (iVar1 = local_30[0] - (int)auStack_b0, iVar1 < 1)) {\n        iVar1 = *(int *)this;\n        goto LAB_002f40cc;\n      }\n      iVar3 = (*(code *)PTR_xsputn_00436060)(this + 0x38,auStack_b0,iVar1);\n      if (iVar1 != iVar3) {\n        return false;\n      }\n    } while (uVar2 == 1);\n    iVar1 = *(int *)this;\nLAB_002f40cc:\n    iVar1 = (**(code **)(iVar1 + 0x34))(this,0xffffffff);\n    bVar5 = iVar1 != -1;\n  }" { (do_statement "do {\n      uVar2 = (**(code **)(**(int **)(this + 0x78) + 0xc))\n                        (*(int **)(this + 0x78),this + 0x4c,auStack_b0,local_30,local_30);\n      if (uVar2 == 2) {\n        return false;\n      }\n      if ((1 < uVar2) || (iVar1 = local_30[0] - (int)auStack_b0, iVar1 < 1)) {\n        iVar1 = *(int *)this;\n        goto LAB_002f40cc;\n      }\n      iVar3 = (*(code *)PTR_xsputn_00436060)(this + 0x38,auStack_b0,iVar1);\n      if (iVar1 != iVar3) {\n        return false;\n      }\n    } while (uVar2 == 1);" do (compound_statement "{\n      uVar2 = (**(code **)(**(int **)(this + 0x78) + 0xc))\n                        (*(int **)(this + 0x78),this + 0x4c,auStack_b0,local_30,local_30);\n      if (uVar2 == 2) {\n        return false;\n      }\n      if ((1 < uVar2) || (iVar1 = local_30[0] - (int)auStack_b0, iVar1 < 1)) {\n        iVar1 = *(int *)this;\n        goto LAB_002f40cc;\n      }\n      iVar3 = (*(code *)PTR_xsputn_00436060)(this + 0x38,auStack_b0,iVar1);\n      if (iVar1 != iVar3) {\n        return false;\n      }\n    }" { (expression_statement "uVar2 = (**(code **)(**(int **)(this + 0x78) + 0xc))\n                        (*(int **)(this + 0x78),this + 0x4c,auStack_b0,local_30,local_30);" (assignment_expression "uVar2 = (**(code **)(**(int **)(this + 0x78) + 0xc))\n                        (*(int **)(this + 0x78),this + 0x4c,auStack_b0,local_30,local_30)" identifier = (call_expression "(**(code **)(**(int **)(this + 0x78) + 0xc))\n                        (*(int **)(this + 0x78),this + 0x4c,auStack_b0,local_30,local_30)" (parenthesized_expression "(**(code **)(**(int **)(this + 0x78) + 0xc))" ( (pointer_expression "**(code **)(**(int **)(this + 0x78) + 0xc)" * (pointer_expression "*(code **)(**(int **)(this + 0x78) + 0xc)" * (cast_expression "(code **)(**(int **)(this + 0x78) + 0xc)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(**(int **)(this + 0x78) + 0xc)" ( (binary_expression "**(int **)(this + 0x78) + 0xc" (pointer_expression "**(int **)(this + 0x78)" * (pointer_expression "*(int **)(this + 0x78)" * (cast_expression "(int **)(this + 0x78)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(this + 0x78)" ( (binary_expression "this + 0x78" identifier + number_literal) ))))) + number_literal) ))))) )) (argument_list "(*(int **)(this + 0x78),this + 0x4c,auStack_b0,local_30,local_30)" ( (pointer_expression "*(int **)(this + 0x78)" * (cast_expression "(int **)(this + 0x78)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(this + 0x78)" ( (binary_expression "this + 0x78" identifier + number_literal) )))) , (binary_expression "this + 0x4c" identifier + number_literal) , identifier , identifier , identifier )))) ;) (if_statement "if (uVar2 == 2) {\n        return false;\n      }" if (parenthesized_expression "(uVar2 == 2)" ( (binary_expression "uVar2 == 2" identifier == number_literal) )) (compound_statement "{\n        return false;\n      }" { (return_statement "return false;" return false ;) })) (if_statement "if ((1 < uVar2) || (iVar1 = local_30[0] - (int)auStack_b0, iVar1 < 1)) {\n        iVar1 = *(int *)this;\n        goto LAB_002f40cc;\n      }" if (parenthesized_expression "((1 < uVar2) || (iVar1 = local_30[0] - (int)auStack_b0, iVar1 < 1))" ( (binary_expression "(1 < uVar2) || (iVar1 = local_30[0] - (int)auStack_b0, iVar1 < 1)" (parenthesized_expression "(1 < uVar2)" ( (binary_expression "1 < uVar2" number_literal < identifier) )) || (parenthesized_expression "(iVar1 = local_30[0] - (int)auStack_b0, iVar1 < 1)" ( (comma_expression "iVar1 = local_30[0] - (int)auStack_b0, iVar1 < 1" (assignment_expression "iVar1 = local_30[0] - (int)auStack_b0" identifier = (binary_expression "local_30[0] - (int)auStack_b0" (subscript_expression "local_30[0]" identifier [ number_literal ]) - (cast_expression "(int)auStack_b0" ( (type_descriptor "int" primitive_type) ) identifier))) , (binary_expression "iVar1 < 1" identifier < number_literal)) ))) )) (compound_statement "{\n        iVar1 = *(int *)this;\n        goto LAB_002f40cc;\n      }" { (expression_statement "iVar1 = *(int *)this;" (assignment_expression "iVar1 = *(int *)this" identifier = (pointer_expression "*(int *)this" * (cast_expression "(int *)this" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) ;) (goto_statement "goto LAB_002f40cc;" goto statement_identifier ;) })) (expression_statement "iVar3 = (*(code *)PTR_xsputn_00436060)(this + 0x38,auStack_b0,iVar1);" (assignment_expression "iVar3 = (*(code *)PTR_xsputn_00436060)(this + 0x38,auStack_b0,iVar1)" identifier = (call_expression "(*(code *)PTR_xsputn_00436060)(this + 0x38,auStack_b0,iVar1)" (parenthesized_expression "(*(code *)PTR_xsputn_00436060)" ( (pointer_expression "*(code *)PTR_xsputn_00436060" * (cast_expression "(code *)PTR_xsputn_00436060" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(this + 0x38,auStack_b0,iVar1)" ( (binary_expression "this + 0x38" identifier + number_literal) , identifier , identifier )))) ;) (if_statement "if (iVar1 != iVar3) {\n        return false;\n      }" if (parenthesized_expression "(iVar1 != iVar3)" ( (binary_expression "iVar1 != iVar3" identifier != identifier) )) (compound_statement "{\n        return false;\n      }" { (return_statement "return false;" return false ;) })) }) while (parenthesized_expression "(uVar2 == 1)" ( (binary_expression "uVar2 == 1" identifier == number_literal) )) ;) (expression_statement "iVar1 = *(int *)this;" (assignment_expression "iVar1 = *(int *)this" identifier = (pointer_expression "*(int *)this" * (cast_expression "(int *)this" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) ;) (labeled_statement "LAB_002f40cc:\n    iVar1 = (**(code **)(iVar1 + 0x34))(this,0xffffffff);" statement_identifier : (expression_statement "iVar1 = (**(code **)(iVar1 + 0x34))(this,0xffffffff);" (assignment_expression "iVar1 = (**(code **)(iVar1 + 0x34))(this,0xffffffff)" identifier = (call_expression "(**(code **)(iVar1 + 0x34))(this,0xffffffff)" (parenthesized_expression "(**(code **)(iVar1 + 0x34))" ( (pointer_expression "**(code **)(iVar1 + 0x34)" * (pointer_expression "*(code **)(iVar1 + 0x34)" * (cast_expression "(code **)(iVar1 + 0x34)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar1 + 0x34)" ( (binary_expression "iVar1 + 0x34" identifier + number_literal) ))))) )) (argument_list "(this,0xffffffff)" ( identifier , number_literal )))) ;)) (expression_statement "bVar5 = iVar1 != -1;" (assignment_expression "bVar5 = iVar1 != -1" identifier = (binary_expression "iVar1 != -1" identifier != number_literal)) ;) })) (return_statement "return bVar5;" return identifier ;) })))
(translation_unit (function_definition TYPE (ms_call_modifier __thiscall) (ERROR IDENT : : IDENT : :) (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) < (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) + LIT) ))))) )) (argument_list ( IDENT , LIT )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT != LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) == (cast_expression ( (type_descriptor TYPE) ) LIT)) )) (compound_statement { (return_statement return IDENT ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = BOOL) ;) (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) == (cast_expression ( (type_descriptor TYPE) ) LIT)) )) (compound_statement { (return_statement return BOOL ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == LIT) )) && (parenthesized_expression ( (binary_expression IDENT != BOOL) ))) )) (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) + LIT) ))))) )) (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) , (binary_expression IDENT + LIT) , IDENT , IDENT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return BOOL ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression LIT < IDENT) )) || (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (binary_expression (subscript_expression IDENT [ LIT ]) - (cast_expression ( (type_descriptor TYPE) ) IDENT))) , (binary_expression IDENT < LIT)) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT))) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( (binary_expression IDENT + LIT) , IDENT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != IDENT) )) (compound_statement { (return_statement return BOOL ;) })) }) while (parenthesized_expression ( (binary_expression IDENT == LIT) )) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT))) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (argument_list ( IDENT , LIT )))) ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT != LIT)) ;) })) (return_statement return IDENT ;) })))
(function_definition "bool __thiscall std::wfilebuf::_M_terminate_output(wfilebuf *this)\n\n{\n  int iVar1;\n  uint uVar2;\n  int iVar3;\n  int *piVar4;\n  bool bVar5;\n  undefined1 auStack_b0 [128];\n  int local_30 [2];\n  \n  if (*(uint *)(this + 0x10) < *(uint *)(this + 0x14)) {\n    iVar1 = (**(code **)(*(int *)this + 0x34))(this,0xffffffff);\n    bVar5 = iVar1 != -1;\n    if (this[0x66] == (wfilebuf)0x0) {\n      return bVar5;\n    }\n    piVar4 = *(int **)(this + 0x78);\n  }\n  else {\n    bVar5 = true;\n    if (this[0x66] == (wfilebuf)0x0) {\n      return true;\n    }\n    piVar4 = *(int **)(this + 0x78);\n  }\n  if (piVar4 == (int *)0x0) {\n                    \n    __throw_bad_cast();\n  }\n  iVar1 = (**(code **)(*piVar4 + 0x18))();\n  if ((iVar1 == 0) && (bVar5 != false)) {\n    do {\n      uVar2 = (**(code **)(**(int **)(this + 0x78) + 0xc))\n                        (*(int **)(this + 0x78),this + 0x4c,auStack_b0,local_30,local_30);\n      if (uVar2 == 2) {\n        return false;\n      }\n      if ((1 < uVar2) || (iVar1 = local_30[0] - (int)auStack_b0, iVar1 < 1)) {\n        iVar1 = *(int *)this;\n        goto LAB_002f40cc;\n      }\n      iVar3 = (*(code *)PTR_xsputn_00436060)(this + 0x38,auStack_b0,iVar1);\n      if (iVar1 != iVar3) {\n        return false;\n      }\n    } while (uVar2 == 1);\n    iVar1 = *(int *)this;\nLAB_002f40cc:\n    iVar1 = (**(code **)(iVar1 + 0x34))(this,0xffffffff);\n    bVar5 = iVar1 != -1;\n  }\n  return bVar5;\n}" (primitive_type "bool") (ms_call_modifier "__thiscall" (__thiscall "__thiscall")) (ERROR "std::wfilebuf::" (identifier "std") (: ":") (: ":") (identifier "wfilebuf") (: ":") (: ":")) (function_declarator "_M_terminate_output(wfilebuf *this)" (identifier "_M_terminate_output") (parameter_list "(wfilebuf *this)" (( "(") (parameter_declaration "wfilebuf *this" (type_identifier "wfilebuf") (pointer_declarator "*this" (* "*") (identifier "this"))) () ")"))) (compound_statement "{\n  int iVar1;\n  uint uVar2;\n  int iVar3;\n  int *piVar4;\n  bool bVar5;\n  undefined1 auStack_b0 [128];\n  int local_30 [2];\n  \n  if (*(uint *)(this + 0x10) < *(uint *)(this + 0x14)) {\n    iVar1 = (**(code **)(*(int *)this + 0x34))(this,0xffffffff);\n    bVar5 = iVar1 != -1;\n    if (this[0x66] == (wfilebuf)0x0) {\n      return bVar5;\n    }\n    piVar4 = *(int **)(this + 0x78);\n  }\n  else {\n    bVar5 = true;\n    if (this[0x66] == (wfilebuf)0x0) {\n      return true;\n    }\n    piVar4 = *(int **)(this + 0x78);\n  }\n  if (piVar4 == (int *)0x0) {\n                    \n    __throw_bad_cast();\n  }\n  iVar1 = (**(code **)(*piVar4 + 0x18))();\n  if ((iVar1 == 0) && (bVar5 != false)) {\n    do {\n      uVar2 = (**(code **)(**(int **)(this + 0x78) + 0xc))\n                        (*(int **)(this + 0x78),this + 0x4c,auStack_b0,local_30,local_30);\n      if (uVar2 == 2) {\n        return false;\n      }\n      if ((1 < uVar2) || (iVar1 = local_30[0] - (int)auStack_b0, iVar1 < 1)) {\n        iVar1 = *(int *)this;\n        goto LAB_002f40cc;\n      }\n      iVar3 = (*(code *)PTR_xsputn_00436060)(this + 0x38,auStack_b0,iVar1);\n      if (iVar1 != iVar3) {\n        return false;\n      }\n    } while (uVar2 == 1);\n    iVar1 = *(int *)this;\nLAB_002f40cc:\n    iVar1 = (**(code **)(iVar1 + 0x34))(this,0xffffffff);\n    bVar5 = iVar1 != -1;\n  }\n  return bVar5;\n}" ({ "{") (declaration "int iVar1;" (primitive_type "int") (identifier "iVar1") (; ";")) (declaration "uint uVar2;" (type_identifier "uint") (identifier "uVar2") (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (declaration "int *piVar4;" (primitive_type "int") (pointer_declarator "*piVar4" (* "*") (identifier "piVar4")) (; ";")) (declaration "bool bVar5;" (primitive_type "bool") (identifier "bVar5") (; ";")) (declaration "undefined1 auStack_b0 [128];" (type_identifier "undefined1") (array_declarator "auStack_b0 [128]" (identifier "auStack_b0") ([ "[") (number_literal "128") (] "]")) (; ";")) (declaration "int local_30 [2];" (primitive_type "int") (array_declarator "local_30 [2]" (identifier "local_30") ([ "[") (number_literal "2") (] "]")) (; ";")) (if_statement "if (*(uint *)(this + 0x10) < *(uint *)(this + 0x14)) {\n    iVar1 = (**(code **)(*(int *)this + 0x34))(this,0xffffffff);\n    bVar5 = iVar1 != -1;\n    if (this[0x66] == (wfilebuf)0x0) {\n      return bVar5;\n    }\n    piVar4 = *(int **)(this + 0x78);\n  }\n  else {\n    bVar5 = true;\n    if (this[0x66] == (wfilebuf)0x0) {\n      return true;\n    }\n    piVar4 = *(int **)(this + 0x78);\n  }" (if "if") (parenthesized_expression "(*(uint *)(this + 0x10) < *(uint *)(this + 0x14))" (( "(") (binary_expression "*(uint *)(this + 0x10) < *(uint *)(this + 0x14)" (pointer_expression "*(uint *)(this + 0x10)" (* "*") (cast_expression "(uint *)(this + 0x10)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(this + 0x10)" (( "(") (binary_expression "this + 0x10" (identifier "this") (+ "+") (number_literal "0x10")) () ")")))) (< "<") (pointer_expression "*(uint *)(this + 0x14)" (* "*") (cast_expression "(uint *)(this + 0x14)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(this + 0x14)" (( "(") (binary_expression "this + 0x14" (identifier "this") (+ "+") (number_literal "0x14")) () ")"))))) () ")")) (compound_statement "{\n    iVar1 = (**(code **)(*(int *)this + 0x34))(this,0xffffffff);\n    bVar5 = iVar1 != -1;\n    if (this[0x66] == (wfilebuf)0x0) {\n      return bVar5;\n    }\n    piVar4 = *(int **)(this + 0x78);\n  }" ({ "{") (expression_statement "iVar1 = (**(code **)(*(int *)this + 0x34))(this,0xffffffff);" (assignment_expression "iVar1 = (**(code **)(*(int *)this + 0x34))(this,0xffffffff)" (identifier "iVar1") (= "=") (call_expression "(**(code **)(*(int *)this + 0x34))(this,0xffffffff)" (parenthesized_expression "(**(code **)(*(int *)this + 0x34))" (( "(") (pointer_expression "**(code **)(*(int *)this + 0x34)" (* "*") (pointer_expression "*(code **)(*(int *)this + 0x34)" (* "*") (cast_expression "(code **)(*(int *)this + 0x34)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*(int *)this + 0x34)" (( "(") (binary_expression "*(int *)this + 0x34" (pointer_expression "*(int *)this" (* "*") (cast_expression "(int *)this" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "this"))) (+ "+") (number_literal "0x34")) () ")"))))) () ")")) (argument_list "(this,0xffffffff)" (( "(") (identifier "this") (, ",") (number_literal "0xffffffff") () ")")))) (; ";")) (expression_statement "bVar5 = iVar1 != -1;" (assignment_expression "bVar5 = iVar1 != -1" (identifier "bVar5") (= "=") (binary_expression "iVar1 != -1" (identifier "iVar1") (!= "!=") (number_literal "-1"))) (; ";")) (if_statement "if (this[0x66] == (wfilebuf)0x0) {\n      return bVar5;\n    }" (if "if") (parenthesized_expression "(this[0x66] == (wfilebuf)0x0)" (( "(") (binary_expression "this[0x66] == (wfilebuf)0x0" (subscript_expression "this[0x66]" (identifier "this") ([ "[") (number_literal "0x66") (] "]")) (== "==") (cast_expression "(wfilebuf)0x0" (( "(") (type_descriptor "wfilebuf" (type_identifier "wfilebuf")) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      return bVar5;\n    }" ({ "{") (return_statement "return bVar5;" (return "return") (identifier "bVar5") (; ";")) (} "}"))) (expression_statement "piVar4 = *(int **)(this + 0x78);" (assignment_expression "piVar4 = *(int **)(this + 0x78)" (identifier "piVar4") (= "=") (pointer_expression "*(int **)(this + 0x78)" (* "*") (cast_expression "(int **)(this + 0x78)" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(this + 0x78)" (( "(") (binary_expression "this + 0x78" (identifier "this") (+ "+") (number_literal "0x78")) () ")"))))) (; ";")) (} "}")) (else_clause "else {\n    bVar5 = true;\n    if (this[0x66] == (wfilebuf)0x0) {\n      return true;\n    }\n    piVar4 = *(int **)(this + 0x78);\n  }" (else "else") (compound_statement "{\n    bVar5 = true;\n    if (this[0x66] == (wfilebuf)0x0) {\n      return true;\n    }\n    piVar4 = *(int **)(this + 0x78);\n  }" ({ "{") (expression_statement "bVar5 = true;" (assignment_expression "bVar5 = true" (identifier "bVar5") (= "=") (true "true")) (; ";")) (if_statement "if (this[0x66] == (wfilebuf)0x0) {\n      return true;\n    }" (if "if") (parenthesized_expression "(this[0x66] == (wfilebuf)0x0)" (( "(") (binary_expression "this[0x66] == (wfilebuf)0x0" (subscript_expression "this[0x66]" (identifier "this") ([ "[") (number_literal "0x66") (] "]")) (== "==") (cast_expression "(wfilebuf)0x0" (( "(") (type_descriptor "wfilebuf" (type_identifier "wfilebuf")) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      return true;\n    }" ({ "{") (return_statement "return true;" (return "return") (true "true") (; ";")) (} "}"))) (expression_statement "piVar4 = *(int **)(this + 0x78);" (assignment_expression "piVar4 = *(int **)(this + 0x78)" (identifier "piVar4") (= "=") (pointer_expression "*(int **)(this + 0x78)" (* "*") (cast_expression "(int **)(this + 0x78)" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(this + 0x78)" (( "(") (binary_expression "this + 0x78" (identifier "this") (+ "+") (number_literal "0x78")) () ")"))))) (; ";")) (} "}")))) (if_statement "if (piVar4 == (int *)0x0) {\n                    \n    __throw_bad_cast();\n  }" (if "if") (parenthesized_expression "(piVar4 == (int *)0x0)" (( "(") (binary_expression "piVar4 == (int *)0x0" (identifier "piVar4") (== "==") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n                    \n    __throw_bad_cast();\n  }" ({ "{") (expression_statement "__throw_bad_cast();" (call_expression "__throw_bad_cast()" (identifier "__throw_bad_cast") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (expression_statement "iVar1 = (**(code **)(*piVar4 + 0x18))();" (assignment_expression "iVar1 = (**(code **)(*piVar4 + 0x18))()" (identifier "iVar1") (= "=") (call_expression "(**(code **)(*piVar4 + 0x18))()" (parenthesized_expression "(**(code **)(*piVar4 + 0x18))" (( "(") (pointer_expression "**(code **)(*piVar4 + 0x18)" (* "*") (pointer_expression "*(code **)(*piVar4 + 0x18)" (* "*") (cast_expression "(code **)(*piVar4 + 0x18)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*piVar4 + 0x18)" (( "(") (binary_expression "*piVar4 + 0x18" (pointer_expression "*piVar4" (* "*") (identifier "piVar4")) (+ "+") (number_literal "0x18")) () ")"))))) () ")")) (argument_list "()" (( "(") () ")")))) (; ";")) (if_statement "if ((iVar1 == 0) && (bVar5 != false)) {\n    do {\n      uVar2 = (**(code **)(**(int **)(this + 0x78) + 0xc))\n                        (*(int **)(this + 0x78),this + 0x4c,auStack_b0,local_30,local_30);\n      if (uVar2 == 2) {\n        return false;\n      }\n      if ((1 < uVar2) || (iVar1 = local_30[0] - (int)auStack_b0, iVar1 < 1)) {\n        iVar1 = *(int *)this;\n        goto LAB_002f40cc;\n      }\n      iVar3 = (*(code *)PTR_xsputn_00436060)(this + 0x38,auStack_b0,iVar1);\n      if (iVar1 != iVar3) {\n        return false;\n      }\n    } while (uVar2 == 1);\n    iVar1 = *(int *)this;\nLAB_002f40cc:\n    iVar1 = (**(code **)(iVar1 + 0x34))(this,0xffffffff);\n    bVar5 = iVar1 != -1;\n  }" (if "if") (parenthesized_expression "((iVar1 == 0) && (bVar5 != false))" (( "(") (binary_expression "(iVar1 == 0) && (bVar5 != false)" (parenthesized_expression "(iVar1 == 0)" (( "(") (binary_expression "iVar1 == 0" (identifier "iVar1") (== "==") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "(bVar5 != false)" (( "(") (binary_expression "bVar5 != false" (identifier "bVar5") (!= "!=") (false "false")) () ")"))) () ")")) (compound_statement "{\n    do {\n      uVar2 = (**(code **)(**(int **)(this + 0x78) + 0xc))\n                        (*(int **)(this + 0x78),this + 0x4c,auStack_b0,local_30,local_30);\n      if (uVar2 == 2) {\n        return false;\n      }\n      if ((1 < uVar2) || (iVar1 = local_30[0] - (int)auStack_b0, iVar1 < 1)) {\n        iVar1 = *(int *)this;\n        goto LAB_002f40cc;\n      }\n      iVar3 = (*(code *)PTR_xsputn_00436060)(this + 0x38,auStack_b0,iVar1);\n      if (iVar1 != iVar3) {\n        return false;\n      }\n    } while (uVar2 == 1);\n    iVar1 = *(int *)this;\nLAB_002f40cc:\n    iVar1 = (**(code **)(iVar1 + 0x34))(this,0xffffffff);\n    bVar5 = iVar1 != -1;\n  }" ({ "{") (do_statement "do {\n      uVar2 = (**(code **)(**(int **)(this + 0x78) + 0xc))\n                        (*(int **)(this + 0x78),this + 0x4c,auStack_b0,local_30,local_30);\n      if (uVar2 == 2) {\n        return false;\n      }\n      if ((1 < uVar2) || (iVar1 = local_30[0] - (int)auStack_b0, iVar1 < 1)) {\n        iVar1 = *(int *)this;\n        goto LAB_002f40cc;\n      }\n      iVar3 = (*(code *)PTR_xsputn_00436060)(this + 0x38,auStack_b0,iVar1);\n      if (iVar1 != iVar3) {\n        return false;\n      }\n    } while (uVar2 == 1);" (do "do") (compound_statement "{\n      uVar2 = (**(code **)(**(int **)(this + 0x78) + 0xc))\n                        (*(int **)(this + 0x78),this + 0x4c,auStack_b0,local_30,local_30);\n      if (uVar2 == 2) {\n        return false;\n      }\n      if ((1 < uVar2) || (iVar1 = local_30[0] - (int)auStack_b0, iVar1 < 1)) {\n        iVar1 = *(int *)this;\n        goto LAB_002f40cc;\n      }\n      iVar3 = (*(code *)PTR_xsputn_00436060)(this + 0x38,auStack_b0,iVar1);\n      if (iVar1 != iVar3) {\n        return false;\n      }\n    }" ({ "{") (expression_statement "uVar2 = (**(code **)(**(int **)(this + 0x78) + 0xc))\n                        (*(int **)(this + 0x78),this + 0x4c,auStack_b0,local_30,local_30);" (assignment_expression "uVar2 = (**(code **)(**(int **)(this + 0x78) + 0xc))\n                        (*(int **)(this + 0x78),this + 0x4c,auStack_b0,local_30,local_30)" (identifier "uVar2") (= "=") (call_expression "(**(code **)(**(int **)(this + 0x78) + 0xc))\n                        (*(int **)(this + 0x78),this + 0x4c,auStack_b0,local_30,local_30)" (parenthesized_expression "(**(code **)(**(int **)(this + 0x78) + 0xc))" (( "(") (pointer_expression "**(code **)(**(int **)(this + 0x78) + 0xc)" (* "*") (pointer_expression "*(code **)(**(int **)(this + 0x78) + 0xc)" (* "*") (cast_expression "(code **)(**(int **)(this + 0x78) + 0xc)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(**(int **)(this + 0x78) + 0xc)" (( "(") (binary_expression "**(int **)(this + 0x78) + 0xc" (pointer_expression "**(int **)(this + 0x78)" (* "*") (pointer_expression "*(int **)(this + 0x78)" (* "*") (cast_expression "(int **)(this + 0x78)" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(this + 0x78)" (( "(") (binary_expression "this + 0x78" (identifier "this") (+ "+") (number_literal "0x78")) () ")"))))) (+ "+") (number_literal "0xc")) () ")"))))) () ")")) (argument_list "(*(int **)(this + 0x78),this + 0x4c,auStack_b0,local_30,local_30)" (( "(") (pointer_expression "*(int **)(this + 0x78)" (* "*") (cast_expression "(int **)(this + 0x78)" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(this + 0x78)" (( "(") (binary_expression "this + 0x78" (identifier "this") (+ "+") (number_literal "0x78")) () ")")))) (, ",") (binary_expression "this + 0x4c" (identifier "this") (+ "+") (number_literal "0x4c")) (, ",") (identifier "auStack_b0") (, ",") (identifier "local_30") (, ",") (identifier "local_30") () ")")))) (; ";")) (if_statement "if (uVar2 == 2) {\n        return false;\n      }" (if "if") (parenthesized_expression "(uVar2 == 2)" (( "(") (binary_expression "uVar2 == 2" (identifier "uVar2") (== "==") (number_literal "2")) () ")")) (compound_statement "{\n        return false;\n      }" ({ "{") (return_statement "return false;" (return "return") (false "false") (; ";")) (} "}"))) (if_statement "if ((1 < uVar2) || (iVar1 = local_30[0] - (int)auStack_b0, iVar1 < 1)) {\n        iVar1 = *(int *)this;\n        goto LAB_002f40cc;\n      }" (if "if") (parenthesized_expression "((1 < uVar2) || (iVar1 = local_30[0] - (int)auStack_b0, iVar1 < 1))" (( "(") (binary_expression "(1 < uVar2) || (iVar1 = local_30[0] - (int)auStack_b0, iVar1 < 1)" (parenthesized_expression "(1 < uVar2)" (( "(") (binary_expression "1 < uVar2" (number_literal "1") (< "<") (identifier "uVar2")) () ")")) (|| "||") (parenthesized_expression "(iVar1 = local_30[0] - (int)auStack_b0, iVar1 < 1)" (( "(") (comma_expression "iVar1 = local_30[0] - (int)auStack_b0, iVar1 < 1" (assignment_expression "iVar1 = local_30[0] - (int)auStack_b0" (identifier "iVar1") (= "=") (binary_expression "local_30[0] - (int)auStack_b0" (subscript_expression "local_30[0]" (identifier "local_30") ([ "[") (number_literal "0") (] "]")) (- "-") (cast_expression "(int)auStack_b0" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "auStack_b0")))) (, ",") (binary_expression "iVar1 < 1" (identifier "iVar1") (< "<") (number_literal "1"))) () ")"))) () ")")) (compound_statement "{\n        iVar1 = *(int *)this;\n        goto LAB_002f40cc;\n      }" ({ "{") (expression_statement "iVar1 = *(int *)this;" (assignment_expression "iVar1 = *(int *)this" (identifier "iVar1") (= "=") (pointer_expression "*(int *)this" (* "*") (cast_expression "(int *)this" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "this")))) (; ";")) (goto_statement "goto LAB_002f40cc;" (goto "goto") (statement_identifier "LAB_002f40cc") (; ";")) (} "}"))) (expression_statement "iVar3 = (*(code *)PTR_xsputn_00436060)(this + 0x38,auStack_b0,iVar1);" (assignment_expression "iVar3 = (*(code *)PTR_xsputn_00436060)(this + 0x38,auStack_b0,iVar1)" (identifier "iVar3") (= "=") (call_expression "(*(code *)PTR_xsputn_00436060)(this + 0x38,auStack_b0,iVar1)" (parenthesized_expression "(*(code *)PTR_xsputn_00436060)" (( "(") (pointer_expression "*(code *)PTR_xsputn_00436060" (* "*") (cast_expression "(code *)PTR_xsputn_00436060" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_xsputn_00436060"))) () ")")) (argument_list "(this + 0x38,auStack_b0,iVar1)" (( "(") (binary_expression "this + 0x38" (identifier "this") (+ "+") (number_literal "0x38")) (, ",") (identifier "auStack_b0") (, ",") (identifier "iVar1") () ")")))) (; ";")) (if_statement "if (iVar1 != iVar3) {\n        return false;\n      }" (if "if") (parenthesized_expression "(iVar1 != iVar3)" (( "(") (binary_expression "iVar1 != iVar3" (identifier "iVar1") (!= "!=") (identifier "iVar3")) () ")")) (compound_statement "{\n        return false;\n      }" ({ "{") (return_statement "return false;" (return "return") (false "false") (; ";")) (} "}"))) (} "}")) (while "while") (parenthesized_expression "(uVar2 == 1)" (( "(") (binary_expression "uVar2 == 1" (identifier "uVar2") (== "==") (number_literal "1")) () ")")) (; ";")) (expression_statement "iVar1 = *(int *)this;" (assignment_expression "iVar1 = *(int *)this" (identifier "iVar1") (= "=") (pointer_expression "*(int *)this" (* "*") (cast_expression "(int *)this" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "this")))) (; ";")) (labeled_statement "LAB_002f40cc:\n    iVar1 = (**(code **)(iVar1 + 0x34))(this,0xffffffff);" (statement_identifier "LAB_002f40cc") (: ":") (expression_statement "iVar1 = (**(code **)(iVar1 + 0x34))(this,0xffffffff);" (assignment_expression "iVar1 = (**(code **)(iVar1 + 0x34))(this,0xffffffff)" (identifier "iVar1") (= "=") (call_expression "(**(code **)(iVar1 + 0x34))(this,0xffffffff)" (parenthesized_expression "(**(code **)(iVar1 + 0x34))" (( "(") (pointer_expression "**(code **)(iVar1 + 0x34)" (* "*") (pointer_expression "*(code **)(iVar1 + 0x34)" (* "*") (cast_expression "(code **)(iVar1 + 0x34)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(iVar1 + 0x34)" (( "(") (binary_expression "iVar1 + 0x34" (identifier "iVar1") (+ "+") (number_literal "0x34")) () ")"))))) () ")")) (argument_list "(this,0xffffffff)" (( "(") (identifier "this") (, ",") (number_literal "0xffffffff") () ")")))) (; ";"))) (expression_statement "bVar5 = iVar1 != -1;" (assignment_expression "bVar5 = iVar1 != -1" (identifier "bVar5") (= "=") (binary_expression "iVar1 != -1" (identifier "iVar1") (!= "!=") (number_literal "-1"))) (; ";")) (} "}"))) (return_statement "return bVar5;" (return "return") (identifier "bVar5") (; ";")) (} "}")))

/* std::wfilebuf::_M_terminate_output() */

bool __thiscall std::type_1::function_1(type_1 *var_1)

{
  int var_2;
  type_2 var_6;
  int var_7;
  int *var_3;
  bool var_5;
  type_3 auStack_b0 [128];
  int local_30 [2];
  
  if (*(type_2 *)(var_1 + 0x10) < *(type_2 *)(var_1 + 0x14)) {
    var_2 = (**(type_4 **)(*(int *)var_1 + 0x34))(var_1,0xffffffff);
    var_5 = var_2 != -1;
    if (var_1[0x66] == (type_1)0x0) {
      return var_5;
    }
    var_3 = *(int **)(var_1 + 0x78);
  }
  else {
    var_5 = true;
    if (var_1[0x66] == (type_1)0x0) {
      return true;
    }
    var_3 = *(int **)(var_1 + 0x78);
  }
  if (var_3 == (int *)0x0) {
                    /* WARNING: Subroutine does not return */
    var_4();
  }
  var_2 = (**(type_4 **)(*var_3 + 0x18))();
  if ((var_2 == 0) && (var_5 != false)) {
    do {
      var_6 = (**(type_4 **)(**(int **)(var_1 + 0x78) + 0xc))
                        (*(int **)(var_1 + 0x78),var_1 + 0x4c,auStack_b0,local_30,local_30);
      if (var_6 == 2) {
        return false;
      }
      if ((1 < var_6) || (var_2 = local_30[0] - (int)auStack_b0, var_2 < 1)) {
        var_2 = *(int *)var_1;
        goto LAB_002f40cc;
      }
      var_7 = (*(type_4 *)PTR_xsputn_00436060)(var_1 + 0x38,auStack_b0,var_2);
      if (var_2 != var_7) {
        return false;
      }
    } while (var_6 == 1);
    var_2 = *(int *)var_1;
LAB_002f40cc:
    var_2 = (**(type_4 **)(var_2 + 0x34))(var_1,0xffffffff);
    var_5 = var_2 != -1;
  }
  return var_5;
}


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

/* std::wfilebuf::MASKED() */

bool __thiscall std::wfilebuf::MASKED(wfilebuf *this)

{
  int iVar1;
  uint uVar2;
  int iVar3;
  int *piVar4;
  bool bVar5;
  undefined1 auStack_b0 [128];
  int local_30 [2];
  
  if (*(uint *)(this + 0x10) < *(uint *)(this + 0x14)) {
    iVar1 = (**(code **)(*(int *)this + 0x34))(this,0xffffffff);
    bVar5 = iVar1 != -1;
    if (this[0x66] == (wfilebuf)0x0) {
      return bVar5;
    }
    piVar4 = *(int **)(this + 0x78);
  }
  else {
    bVar5 = true;
    if (this[0x66] == (wfilebuf)0x0) {
      return true;
    }
    piVar4 = *(int **)(this + 0x78);
  }
  if (piVar4 == (int *)0x0) {
                    /* WARNING: Subroutine does not return */
    __throw_bad_cast();
  }
  iVar1 = (**(code **)(*piVar4 + 0x18))();
  if ((iVar1 == 0) && (bVar5 != false)) {
    do {
      uVar2 = (**(code **)(**(int **)(this + 0x78) + 0xc))
                        (*(int **)(this + 0x78),this + 0x4c,auStack_b0,local_30,local_30);
      if (uVar2 == 2) {
        return false;
      }
      if ((1 < uVar2) || (iVar1 = local_30[0] - (int)auStack_b0, iVar1 < 1)) {
        iVar1 = *(int *)this;
        goto LAB_002f40cc;
      }
      iVar3 = (*(code *)PTR_xsputn_00436060)(this + 0x38,auStack_b0,iVar1);
      if (iVar1 != iVar3) {
        return false;
      }
    } while (uVar2 == 1);
    iVar1 = *(int *)this;
LAB_002f40cc:
    iVar1 = (**(code **)(iVar1 + 0x34))(this,0xffffffff);
    bVar5 = iVar1 != -1;
  }
  return bVar5;
}

