
void slurp(file_data *current)

{
  size_t *psVar1;
  uint uVar2;
  uint uVar3;
  size_t sVar4;
  
  if (current->desc < 0) {
    return;
  }
  if (((current->stat).st_mode & 0xf000) == 0x8000) {
    uVar3 = (uint)(current->stat).st_size;
    uVar2 = (uVar3 & 0xfffffffc) + 8;
    if (((*(int *)&(current->stat).st_size != 0) || (uVar2 < uVar3)) || (0x7ffffffe < uVar2)) {
LAB_0001bacc:
                    /* WARNING: Subroutine does not return */
      xalloc_die();
    }
    if (current->bufsize < uVar2) {
      current->bufsize = uVar2;
      psVar1 = (size_t *)xrealloc(current->buffer,uVar2);
      current->buffer = psVar1;
    }
    uVar2 = current->buffered;
    if (uVar2 <= uVar3) {
      sVar4 = (uVar3 - uVar2) + 1;
      if (sVar4 == 0) {
        return;
      }
      if (current->eof != false) {
        return;
      }
      file_block_read(current,sVar4);
      uVar2 = current->buffered;
      if (uVar2 <= uVar3) {
        return;
      }
    }
  }
  else {
    uVar2 = current->buffered;
  }
  sVar4 = current->bufsize - uVar2;
  if ((sVar4 != 0) && (current->eof == false)) {
    file_block_read(current,sVar4);
    uVar2 = current->buffered;
  }
  if (uVar2 != 0) {
    uVar3 = current->bufsize;
    while (uVar2 == uVar3) {
      while( true ) {
        if (0x3ffffffb < uVar2) goto LAB_0001bacc;
        current->bufsize = uVar2 << 1;
        psVar1 = (size_t *)xrealloc(current->buffer,uVar2 << 1);
        uVar3 = current->bufsize;
        uVar2 = current->buffered;
        current->buffer = psVar1;
        if ((uVar3 - uVar2 == 0) || (current->eof != false)) break;
        file_block_read(current,uVar3 - uVar2);
        uVar2 = current->buffered;
        if (uVar2 != current->bufsize) goto LAB_0001b9c0;
      }
    }
LAB_0001b9c0:
    uVar2 = uVar2 + 8 & 0xfffffffc;
    current->bufsize = uVar2;
    psVar1 = (size_t *)xrealloc(current->buffer,uVar2);
    current->buffer = psVar1;
  }
  return;
}



void FUN_0001b8e0(int *param_1)

{
  int iVar1;
  uint uVar2;
  uint uVar3;
  
  if (*param_1 < 0) {
    return;
  }
  if ((param_1[8] & 0xf000U) == 0x8000) {
    uVar3 = param_1[0x11];
    uVar2 = (uVar3 & 0xfffffffc) + 8;
    if (((param_1[0x10] != 0) || (uVar2 < uVar3)) || (0x7ffffffe < uVar2)) {
LAB_0001bacc:
                    /* WARNING: Subroutine does not return */
      xalloc_die();
    }
    if ((uint)param_1[0x2b] < uVar2) {
      param_1[0x2b] = uVar2;
      iVar1 = xrealloc(param_1[0x2a],uVar2);
      param_1[0x2a] = iVar1;
    }
    uVar2 = param_1[0x2c];
    if (uVar2 <= uVar3) {
      if (uVar3 - uVar2 == -1) {
        return;
      }
      if (*(char *)((int)param_1 + 0xe9) != '\0') {
        return;
      }
      FUN_0001b85c(param_1);
      uVar2 = param_1[0x2c];
      if (uVar2 <= uVar3) {
        return;
      }
    }
  }
  else {
    uVar2 = param_1[0x2c];
  }
  if ((param_1[0x2b] != uVar2) && (*(char *)((int)param_1 + 0xe9) == '\0')) {
    FUN_0001b85c(param_1);
    uVar2 = param_1[0x2c];
  }
  if (uVar2 != 0) {
    uVar3 = param_1[0x2b];
    while (uVar2 == uVar3) {
      while( true ) {
        if (0x3ffffffb < uVar2) goto LAB_0001bacc;
        param_1[0x2b] = uVar2 << 1;
        iVar1 = xrealloc(param_1[0x2a]);
        uVar3 = param_1[0x2b];
        uVar2 = param_1[0x2c];
        param_1[0x2a] = iVar1;
        if ((uVar3 == uVar2) || (*(char *)((int)param_1 + 0xe9) != '\0')) break;
        FUN_0001b85c(param_1);
        uVar2 = param_1[0x2c];
        if (uVar2 != param_1[0x2b]) goto LAB_0001b9c0;
      }
    }
LAB_0001b9c0:
    param_1[0x2b] = uVar2 + 8 & 0xfffffffc;
    iVar1 = xrealloc(param_1[0x2a]);
    param_1[0x2a] = iVar1;
  }
  return;
}


lui gp,0x4
addiu gp,gp,0x7810
addu gp,gp,t9
lw v0,0x0(a0)
bltz v0,0x0001ba8c
_nop
addiu sp,sp,-0x28
lw v0,0x20(a0)
ori v1,zero,0x8000
sw gp,0x10(sp)
andi v0,v0,0xf000
sw s0,0x18(sp)
or s0,a0,zero
sw ra,0x24(sp)
sw s2,0x20(sp)
beq v0,v1,0x0001b9f8
_sw s1,0x1c(sp)
lw v1,0xb0(a0)
lw a1,0xac(s0)
subu a1,a1,v1
beq a1,zero,0x0001b944
_nop
lbu v0,0xe9(s0)
beq v0,zero,0x0001bab0
_lw t9,-0x7fb4(gp)
beq v1,zero,0x0001b9e4
_lw ra,0x24(sp)
lw s2,-0x7fb4(gp)
lui s1,0x3fff
lw a0,0xac(s0)
ori s1,s1,0xfffc
addiu s2,s2,-0x47a4
bne v1,a0,0x0001b9c0
_nop
sltu v0,v1,s1
beq v0,zero,0x0001bac8
_sll a1,v1,0x1
lw t9,-0x7fc0(gp)
lw a0,0xa8(s0)
bal 0x0002813c
_sw a1,0xac(s0)
lw a0,0xac(s0)
lw v1,0xb0(s0)
lw gp,0x10(sp)
subu a1,a0,v1
beq a1,zero,0x0001b960
_sw v0,0xa8(s0)
lbu v0,0xe9(s0)
bne v0,zero,0x0001b960
_or t9,s2,zero
bal 0x0001b85c
_or a0,s0,zero
lw v1,0xb0(s0)
lw a0,0xac(s0)
beq v1,a0,0x0001b968
_lw gp,0x10(sp)
addiu v1,v1,0x8
lw t9,-0x7fc0(gp)
li a1,-0x4
lw a0,0xa8(s0)
and a1,v1,a1
bal 0x0002813c
_sw a1,0xac(s0)
sw v0,0xa8(s0)
lw ra,0x24(sp)
lw s2,0x20(sp)
lw s1,0x1c(sp)
lw s0,0x18(sp)
jr ra
_addiu sp,sp,0x28
lw s1,0x44(a0)
li v0,-0x4
lw v1,0x40(a0)
and v0,s1,v0
bne v1,zero,0x0001bac8
_addiu v0,v0,0x8
sltu v1,v0,s1
bne v1,zero,0x0001bac8
_lui v1,0x7fff
ori v1,v1,0xffff
sltu v1,v0,v1
beq v1,zero,0x0001bacc
_lw t9,-0x7e30(gp)
lw v1,0xac(a0)
sltu v1,v1,v0
bne v1,zero,0x0001ba94
_lw t9,-0x7fc0(gp)
lw v1,0xb0(s0)
sltu v0,s1,v1
bne v0,zero,0x0001b928
_subu a1,s1,v1
addiu a1,a1,0x1
beq a1,zero,0x0001b9e4
_lw ra,0x24(sp)
lbu v0,0xe9(s0)
bne v0,zero,0x0001b9e8
_lw s2,0x20(sp)
lw t9,-0x7fb4(gp)
addiu t9,t9,-0x47a4
bal 0x0001b85c
_or a0,s0,zero
lw v1,0xb0(s0)
sltu s1,s1,v1
bne s1,zero,0x0001b928
_lw gp,0x10(sp)
b 0x0001b9e4
_lw ra,0x24(sp)
jr ra
_nop
or a1,v0,zero
lw a0,0xa8(a0)
bal 0x0002813c
_sw v0,0xac(s0)
lw gp,0x10(sp)
b 0x0001ba3c
_sw v0,0xa8(s0)
addiu t9,t9,-0x47a4
bal 0x0001b85c
_or a0,s0,zero
lw gp,0x10(sp)
b 0x0001b944
_lw v1,0xb0(s0)
lw t9,-0x7e30(gp)
bal 0x000284a0
_nop
(translation_unit "void FUN_0001b8e0(int *param_1)\n\n{\n  int iVar1;\n  uint uVar2;\n  uint uVar3;\n  \n  if (*param_1 < 0) {\n    return;\n  }\n  if ((param_1[8] & 0xf000U) == 0x8000) {\n    uVar3 = param_1[0x11];\n    uVar2 = (uVar3 & 0xfffffffc) + 8;\n    if (((param_1[0x10] != 0) || (uVar2 < uVar3)) || (0x7ffffffe < uVar2)) {\nLAB_0001bacc:\n                    /* WARNING: Subroutine does not return */\n      xalloc_die();\n    }\n    if ((uint)param_1[0x2b] < uVar2) {\n      param_1[0x2b] = uVar2;\n      iVar1 = xrealloc(param_1[0x2a],uVar2);\n      param_1[0x2a] = iVar1;\n    }\n    uVar2 = param_1[0x2c];\n    if (uVar2 <= uVar3) {\n      if (uVar3 - uVar2 == -1) {\n        return;\n      }\n      if (*(char *)((int)param_1 + 0xe9) != '\0') {\n        return;\n      }\n      FUN_0001b85c(param_1);\n      uVar2 = param_1[0x2c];\n      if (uVar2 <= uVar3) {\n        return;\n      }\n    }\n  }\n  else {\n    uVar2 = param_1[0x2c];\n  }\n  if ((param_1[0x2b] != uVar2) && (*(char *)((int)param_1 + 0xe9) == '\0')) {\n    FUN_0001b85c(param_1);\n    uVar2 = param_1[0x2c];\n  }\n  if (uVar2 != 0) {\n    uVar3 = param_1[0x2b];\n    while (uVar2 == uVar3) {\n      while( true ) {\n        if (0x3ffffffb < uVar2) goto LAB_0001bacc;\n        param_1[0x2b] = uVar2 << 1;\n        iVar1 = xrealloc(param_1[0x2a]);\n        uVar3 = param_1[0x2b];\n        uVar2 = param_1[0x2c];\n        param_1[0x2a] = iVar1;\n        if ((uVar3 == uVar2) || (*(char *)((int)param_1 + 0xe9) != '\0')) break;\n        FUN_0001b85c(param_1);\n        uVar2 = param_1[0x2c];\n        if (uVar2 != param_1[0x2b]) goto LAB_0001b9c0;\n      }\n    }\nLAB_0001b9c0:\n    param_1[0x2b] = uVar2 + 8 & 0xfffffffc;\n    iVar1 = xrealloc(param_1[0x2a]);\n    param_1[0x2a] = iVar1;\n  }\n  return;\n}\n\n" (function_definition "void FUN_0001b8e0(int *param_1)\n\n{\n  int iVar1;\n  uint uVar2;\n  uint uVar3;\n  \n  if (*param_1 < 0) {\n    return;\n  }\n  if ((param_1[8] & 0xf000U) == 0x8000) {\n    uVar3 = param_1[0x11];\n    uVar2 = (uVar3 & 0xfffffffc) + 8;\n    if (((param_1[0x10] != 0) || (uVar2 < uVar3)) || (0x7ffffffe < uVar2)) {\nLAB_0001bacc:\n                    /* WARNING: Subroutine does not return */\n      xalloc_die();\n    }\n    if ((uint)param_1[0x2b] < uVar2) {\n      param_1[0x2b] = uVar2;\n      iVar1 = xrealloc(param_1[0x2a],uVar2);\n      param_1[0x2a] = iVar1;\n    }\n    uVar2 = param_1[0x2c];\n    if (uVar2 <= uVar3) {\n      if (uVar3 - uVar2 == -1) {\n        return;\n      }\n      if (*(char *)((int)param_1 + 0xe9) != '\0') {\n        return;\n      }\n      FUN_0001b85c(param_1);\n      uVar2 = param_1[0x2c];\n      if (uVar2 <= uVar3) {\n        return;\n      }\n    }\n  }\n  else {\n    uVar2 = param_1[0x2c];\n  }\n  if ((param_1[0x2b] != uVar2) && (*(char *)((int)param_1 + 0xe9) == '\0')) {\n    FUN_0001b85c(param_1);\n    uVar2 = param_1[0x2c];\n  }\n  if (uVar2 != 0) {\n    uVar3 = param_1[0x2b];\n    while (uVar2 == uVar3) {\n      while( true ) {\n        if (0x3ffffffb < uVar2) goto LAB_0001bacc;\n        param_1[0x2b] = uVar2 << 1;\n        iVar1 = xrealloc(param_1[0x2a]);\n        uVar3 = param_1[0x2b];\n        uVar2 = param_1[0x2c];\n        param_1[0x2a] = iVar1;\n        if ((uVar3 == uVar2) || (*(char *)((int)param_1 + 0xe9) != '\0')) break;\n        FUN_0001b85c(param_1);\n        uVar2 = param_1[0x2c];\n        if (uVar2 != param_1[0x2b]) goto LAB_0001b9c0;\n      }\n    }\nLAB_0001b9c0:\n    param_1[0x2b] = uVar2 + 8 & 0xfffffffc;\n    iVar1 = xrealloc(param_1[0x2a]);\n    param_1[0x2a] = iVar1;\n  }\n  return;\n}" primitive_type (function_declarator "FUN_0001b8e0(int *param_1)" identifier (parameter_list "(int *param_1)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) ))) (compound_statement "{\n  int iVar1;\n  uint uVar2;\n  uint uVar3;\n  \n  if (*param_1 < 0) {\n    return;\n  }\n  if ((param_1[8] & 0xf000U) == 0x8000) {\n    uVar3 = param_1[0x11];\n    uVar2 = (uVar3 & 0xfffffffc) + 8;\n    if (((param_1[0x10] != 0) || (uVar2 < uVar3)) || (0x7ffffffe < uVar2)) {\nLAB_0001bacc:\n                    /* WARNING: Subroutine does not return */\n      xalloc_die();\n    }\n    if ((uint)param_1[0x2b] < uVar2) {\n      param_1[0x2b] = uVar2;\n      iVar1 = xrealloc(param_1[0x2a],uVar2);\n      param_1[0x2a] = iVar1;\n    }\n    uVar2 = param_1[0x2c];\n    if (uVar2 <= uVar3) {\n      if (uVar3 - uVar2 == -1) {\n        return;\n      }\n      if (*(char *)((int)param_1 + 0xe9) != '\0') {\n        return;\n      }\n      FUN_0001b85c(param_1);\n      uVar2 = param_1[0x2c];\n      if (uVar2 <= uVar3) {\n        return;\n      }\n    }\n  }\n  else {\n    uVar2 = param_1[0x2c];\n  }\n  if ((param_1[0x2b] != uVar2) && (*(char *)((int)param_1 + 0xe9) == '\0')) {\n    FUN_0001b85c(param_1);\n    uVar2 = param_1[0x2c];\n  }\n  if (uVar2 != 0) {\n    uVar3 = param_1[0x2b];\n    while (uVar2 == uVar3) {\n      while( true ) {\n        if (0x3ffffffb < uVar2) goto LAB_0001bacc;\n        param_1[0x2b] = uVar2 << 1;\n        iVar1 = xrealloc(param_1[0x2a]);\n        uVar3 = param_1[0x2b];\n        uVar2 = param_1[0x2c];\n        param_1[0x2a] = iVar1;\n        if ((uVar3 == uVar2) || (*(char *)((int)param_1 + 0xe9) != '\0')) break;\n        FUN_0001b85c(param_1);\n        uVar2 = param_1[0x2c];\n        if (uVar2 != param_1[0x2b]) goto LAB_0001b9c0;\n      }\n    }\nLAB_0001b9c0:\n    param_1[0x2b] = uVar2 + 8 & 0xfffffffc;\n    iVar1 = xrealloc(param_1[0x2a]);\n    param_1[0x2a] = iVar1;\n  }\n  return;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (if_statement "if (*param_1 < 0) {\n    return;\n  }" if (parenthesized_expression "(*param_1 < 0)" ( (binary_expression "*param_1 < 0" (pointer_expression "*param_1" * identifier) < number_literal) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) (if_statement "if ((param_1[8] & 0xf000U) == 0x8000) {\n    uVar3 = param_1[0x11];\n    uVar2 = (uVar3 & 0xfffffffc) + 8;\n    if (((param_1[0x10] != 0) || (uVar2 < uVar3)) || (0x7ffffffe < uVar2)) {\nLAB_0001bacc:\n                    /* WARNING: Subroutine does not return */\n      xalloc_die();\n    }\n    if ((uint)param_1[0x2b] < uVar2) {\n      param_1[0x2b] = uVar2;\n      iVar1 = xrealloc(param_1[0x2a],uVar2);\n      param_1[0x2a] = iVar1;\n    }\n    uVar2 = param_1[0x2c];\n    if (uVar2 <= uVar3) {\n      if (uVar3 - uVar2 == -1) {\n        return;\n      }\n      if (*(char *)((int)param_1 + 0xe9) != '\0') {\n        return;\n      }\n      FUN_0001b85c(param_1);\n      uVar2 = param_1[0x2c];\n      if (uVar2 <= uVar3) {\n        return;\n      }\n    }\n  }\n  else {\n    uVar2 = param_1[0x2c];\n  }" if (parenthesized_expression "((param_1[8] & 0xf000U) == 0x8000)" ( (binary_expression "(param_1[8] & 0xf000U) == 0x8000" (parenthesized_expression "(param_1[8] & 0xf000U)" ( (binary_expression "param_1[8] & 0xf000U" (subscript_expression "param_1[8]" identifier [ number_literal ]) & number_literal) )) == number_literal) )) (compound_statement "{\n    uVar3 = param_1[0x11];\n    uVar2 = (uVar3 & 0xfffffffc) + 8;\n    if (((param_1[0x10] != 0) || (uVar2 < uVar3)) || (0x7ffffffe < uVar2)) {\nLAB_0001bacc:\n                    /* WARNING: Subroutine does not return */\n      xalloc_die();\n    }\n    if ((uint)param_1[0x2b] < uVar2) {\n      param_1[0x2b] = uVar2;\n      iVar1 = xrealloc(param_1[0x2a],uVar2);\n      param_1[0x2a] = iVar1;\n    }\n    uVar2 = param_1[0x2c];\n    if (uVar2 <= uVar3) {\n      if (uVar3 - uVar2 == -1) {\n        return;\n      }\n      if (*(char *)((int)param_1 + 0xe9) != '\0') {\n        return;\n      }\n      FUN_0001b85c(param_1);\n      uVar2 = param_1[0x2c];\n      if (uVar2 <= uVar3) {\n        return;\n      }\n    }\n  }" { (expression_statement "uVar3 = param_1[0x11];" (assignment_expression "uVar3 = param_1[0x11]" identifier = (subscript_expression "param_1[0x11]" identifier [ number_literal ])) ;) (expression_statement "uVar2 = (uVar3 & 0xfffffffc) + 8;" (assignment_expression "uVar2 = (uVar3 & 0xfffffffc) + 8" identifier = (binary_expression "(uVar3 & 0xfffffffc) + 8" (parenthesized_expression "(uVar3 & 0xfffffffc)" ( (binary_expression "uVar3 & 0xfffffffc" identifier & number_literal) )) + number_literal)) ;) (if_statement "if (((param_1[0x10] != 0) || (uVar2 < uVar3)) || (0x7ffffffe < uVar2)) {\nLAB_0001bacc:\n                    /* WARNING: Subroutine does not return */\n      xalloc_die();\n    }" if (parenthesized_expression "(((param_1[0x10] != 0) || (uVar2 < uVar3)) || (0x7ffffffe < uVar2))" ( (binary_expression "((param_1[0x10] != 0) || (uVar2 < uVar3)) || (0x7ffffffe < uVar2)" (parenthesized_expression "((param_1[0x10] != 0) || (uVar2 < uVar3))" ( (binary_expression "(param_1[0x10] != 0) || (uVar2 < uVar3)" (parenthesized_expression "(param_1[0x10] != 0)" ( (binary_expression "param_1[0x10] != 0" (subscript_expression "param_1[0x10]" identifier [ number_literal ]) != number_literal) )) || (parenthesized_expression "(uVar2 < uVar3)" ( (binary_expression "uVar2 < uVar3" identifier < identifier) ))) )) || (parenthesized_expression "(0x7ffffffe < uVar2)" ( (binary_expression "0x7ffffffe < uVar2" number_literal < identifier) ))) )) (compound_statement "{\nLAB_0001bacc:\n                    /* WARNING: Subroutine does not return */\n      xalloc_die();\n    }" { (labeled_statement "LAB_0001bacc:\n                    /* WARNING: Subroutine does not return */\n      xalloc_die();" statement_identifier : comment (expression_statement "xalloc_die();" (call_expression "xalloc_die()" identifier (argument_list "()" ( ))) ;)) })) (if_statement "if ((uint)param_1[0x2b] < uVar2) {\n      param_1[0x2b] = uVar2;\n      iVar1 = xrealloc(param_1[0x2a],uVar2);\n      param_1[0x2a] = iVar1;\n    }" if (parenthesized_expression "((uint)param_1[0x2b] < uVar2)" ( (binary_expression "(uint)param_1[0x2b] < uVar2" (cast_expression "(uint)param_1[0x2b]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_1[0x2b]" identifier [ number_literal ])) < identifier) )) (compound_statement "{\n      param_1[0x2b] = uVar2;\n      iVar1 = xrealloc(param_1[0x2a],uVar2);\n      param_1[0x2a] = iVar1;\n    }" { (expression_statement "param_1[0x2b] = uVar2;" (assignment_expression "param_1[0x2b] = uVar2" (subscript_expression "param_1[0x2b]" identifier [ number_literal ]) = identifier) ;) (expression_statement "iVar1 = xrealloc(param_1[0x2a],uVar2);" (assignment_expression "iVar1 = xrealloc(param_1[0x2a],uVar2)" identifier = (call_expression "xrealloc(param_1[0x2a],uVar2)" identifier (argument_list "(param_1[0x2a],uVar2)" ( (subscript_expression "param_1[0x2a]" identifier [ number_literal ]) , identifier )))) ;) (expression_statement "param_1[0x2a] = iVar1;" (assignment_expression "param_1[0x2a] = iVar1" (subscript_expression "param_1[0x2a]" identifier [ number_literal ]) = identifier) ;) })) (expression_statement "uVar2 = param_1[0x2c];" (assignment_expression "uVar2 = param_1[0x2c]" identifier = (subscript_expression "param_1[0x2c]" identifier [ number_literal ])) ;) (if_statement "if (uVar2 <= uVar3) {\n      if (uVar3 - uVar2 == -1) {\n        return;\n      }\n      if (*(char *)((int)param_1 + 0xe9) != '\0') {\n        return;\n      }\n      FUN_0001b85c(param_1);\n      uVar2 = param_1[0x2c];\n      if (uVar2 <= uVar3) {\n        return;\n      }\n    }" if (parenthesized_expression "(uVar2 <= uVar3)" ( (binary_expression "uVar2 <= uVar3" identifier <= identifier) )) (compound_statement "{\n      if (uVar3 - uVar2 == -1) {\n        return;\n      }\n      if (*(char *)((int)param_1 + 0xe9) != '\0') {\n        return;\n      }\n      FUN_0001b85c(param_1);\n      uVar2 = param_1[0x2c];\n      if (uVar2 <= uVar3) {\n        return;\n      }\n    }" { (if_statement "if (uVar3 - uVar2 == -1) {\n        return;\n      }" if (parenthesized_expression "(uVar3 - uVar2 == -1)" ( (binary_expression "uVar3 - uVar2 == -1" (binary_expression "uVar3 - uVar2" identifier - identifier) == number_literal) )) (compound_statement "{\n        return;\n      }" { (return_statement "return;" return ;) })) (if_statement "if (*(char *)((int)param_1 + 0xe9) != '\0') {\n        return;\n      }" if (parenthesized_expression "(*(char *)((int)param_1 + 0xe9) != '\0')" ( (binary_expression "*(char *)((int)param_1 + 0xe9) != '\0'" (pointer_expression "*(char *)((int)param_1 + 0xe9)" * (cast_expression "(char *)((int)param_1 + 0xe9)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + 0xe9)" ( (binary_expression "(int)param_1 + 0xe9" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        return;\n      }" { (return_statement "return;" return ;) })) (expression_statement "FUN_0001b85c(param_1);" (call_expression "FUN_0001b85c(param_1)" identifier (argument_list "(param_1)" ( identifier ))) ;) (expression_statement "uVar2 = param_1[0x2c];" (assignment_expression "uVar2 = param_1[0x2c]" identifier = (subscript_expression "param_1[0x2c]" identifier [ number_literal ])) ;) (if_statement "if (uVar2 <= uVar3) {\n        return;\n      }" if (parenthesized_expression "(uVar2 <= uVar3)" ( (binary_expression "uVar2 <= uVar3" identifier <= identifier) )) (compound_statement "{\n        return;\n      }" { (return_statement "return;" return ;) })) })) }) (else_clause "else {\n    uVar2 = param_1[0x2c];\n  }" else (compound_statement "{\n    uVar2 = param_1[0x2c];\n  }" { (expression_statement "uVar2 = param_1[0x2c];" (assignment_expression "uVar2 = param_1[0x2c]" identifier = (subscript_expression "param_1[0x2c]" identifier [ number_literal ])) ;) }))) (if_statement "if ((param_1[0x2b] != uVar2) && (*(char *)((int)param_1 + 0xe9) == '\0')) {\n    FUN_0001b85c(param_1);\n    uVar2 = param_1[0x2c];\n  }" if (parenthesized_expression "((param_1[0x2b] != uVar2) && (*(char *)((int)param_1 + 0xe9) == '\0'))" ( (binary_expression "(param_1[0x2b] != uVar2) && (*(char *)((int)param_1 + 0xe9) == '\0')" (parenthesized_expression "(param_1[0x2b] != uVar2)" ( (binary_expression "param_1[0x2b] != uVar2" (subscript_expression "param_1[0x2b]" identifier [ number_literal ]) != identifier) )) && (parenthesized_expression "(*(char *)((int)param_1 + 0xe9) == '\0')" ( (binary_expression "*(char *)((int)param_1 + 0xe9) == '\0'" (pointer_expression "*(char *)((int)param_1 + 0xe9)" * (cast_expression "(char *)((int)param_1 + 0xe9)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + 0xe9)" ( (binary_expression "(int)param_1 + 0xe9" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) == (char_literal "'\0'" ' escape_sequence ')) ))) )) (compound_statement "{\n    FUN_0001b85c(param_1);\n    uVar2 = param_1[0x2c];\n  }" { (expression_statement "FUN_0001b85c(param_1);" (call_expression "FUN_0001b85c(param_1)" identifier (argument_list "(param_1)" ( identifier ))) ;) (expression_statement "uVar2 = param_1[0x2c];" (assignment_expression "uVar2 = param_1[0x2c]" identifier = (subscript_expression "param_1[0x2c]" identifier [ number_literal ])) ;) })) (if_statement "if (uVar2 != 0) {\n    uVar3 = param_1[0x2b];\n    while (uVar2 == uVar3) {\n      while( true ) {\n        if (0x3ffffffb < uVar2) goto LAB_0001bacc;\n        param_1[0x2b] = uVar2 << 1;\n        iVar1 = xrealloc(param_1[0x2a]);\n        uVar3 = param_1[0x2b];\n        uVar2 = param_1[0x2c];\n        param_1[0x2a] = iVar1;\n        if ((uVar3 == uVar2) || (*(char *)((int)param_1 + 0xe9) != '\0')) break;\n        FUN_0001b85c(param_1);\n        uVar2 = param_1[0x2c];\n        if (uVar2 != param_1[0x2b]) goto LAB_0001b9c0;\n      }\n    }\nLAB_0001b9c0:\n    param_1[0x2b] = uVar2 + 8 & 0xfffffffc;\n    iVar1 = xrealloc(param_1[0x2a]);\n    param_1[0x2a] = iVar1;\n  }" if (parenthesized_expression "(uVar2 != 0)" ( (binary_expression "uVar2 != 0" identifier != number_literal) )) (compound_statement "{\n    uVar3 = param_1[0x2b];\n    while (uVar2 == uVar3) {\n      while( true ) {\n        if (0x3ffffffb < uVar2) goto LAB_0001bacc;\n        param_1[0x2b] = uVar2 << 1;\n        iVar1 = xrealloc(param_1[0x2a]);\n        uVar3 = param_1[0x2b];\n        uVar2 = param_1[0x2c];\n        param_1[0x2a] = iVar1;\n        if ((uVar3 == uVar2) || (*(char *)((int)param_1 + 0xe9) != '\0')) break;\n        FUN_0001b85c(param_1);\n        uVar2 = param_1[0x2c];\n        if (uVar2 != param_1[0x2b]) goto LAB_0001b9c0;\n      }\n    }\nLAB_0001b9c0:\n    param_1[0x2b] = uVar2 + 8 & 0xfffffffc;\n    iVar1 = xrealloc(param_1[0x2a]);\n    param_1[0x2a] = iVar1;\n  }" { (expression_statement "uVar3 = param_1[0x2b];" (assignment_expression "uVar3 = param_1[0x2b]" identifier = (subscript_expression "param_1[0x2b]" identifier [ number_literal ])) ;) (while_statement "while (uVar2 == uVar3) {\n      while( true ) {\n        if (0x3ffffffb < uVar2) goto LAB_0001bacc;\n        param_1[0x2b] = uVar2 << 1;\n        iVar1 = xrealloc(param_1[0x2a]);\n        uVar3 = param_1[0x2b];\n        uVar2 = param_1[0x2c];\n        param_1[0x2a] = iVar1;\n        if ((uVar3 == uVar2) || (*(char *)((int)param_1 + 0xe9) != '\0')) break;\n        FUN_0001b85c(param_1);\n        uVar2 = param_1[0x2c];\n        if (uVar2 != param_1[0x2b]) goto LAB_0001b9c0;\n      }\n    }" while (parenthesized_expression "(uVar2 == uVar3)" ( (binary_expression "uVar2 == uVar3" identifier == identifier) )) (compound_statement "{\n      while( true ) {\n        if (0x3ffffffb < uVar2) goto LAB_0001bacc;\n        param_1[0x2b] = uVar2 << 1;\n        iVar1 = xrealloc(param_1[0x2a]);\n        uVar3 = param_1[0x2b];\n        uVar2 = param_1[0x2c];\n        param_1[0x2a] = iVar1;\n        if ((uVar3 == uVar2) || (*(char *)((int)param_1 + 0xe9) != '\0')) break;\n        FUN_0001b85c(param_1);\n        uVar2 = param_1[0x2c];\n        if (uVar2 != param_1[0x2b]) goto LAB_0001b9c0;\n      }\n    }" { (while_statement "while( true ) {\n        if (0x3ffffffb < uVar2) goto LAB_0001bacc;\n        param_1[0x2b] = uVar2 << 1;\n        iVar1 = xrealloc(param_1[0x2a]);\n        uVar3 = param_1[0x2b];\n        uVar2 = param_1[0x2c];\n        param_1[0x2a] = iVar1;\n        if ((uVar3 == uVar2) || (*(char *)((int)param_1 + 0xe9) != '\0')) break;\n        FUN_0001b85c(param_1);\n        uVar2 = param_1[0x2c];\n        if (uVar2 != param_1[0x2b]) goto LAB_0001b9c0;\n      }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n        if (0x3ffffffb < uVar2) goto LAB_0001bacc;\n        param_1[0x2b] = uVar2 << 1;\n        iVar1 = xrealloc(param_1[0x2a]);\n        uVar3 = param_1[0x2b];\n        uVar2 = param_1[0x2c];\n        param_1[0x2a] = iVar1;\n        if ((uVar3 == uVar2) || (*(char *)((int)param_1 + 0xe9) != '\0')) break;\n        FUN_0001b85c(param_1);\n        uVar2 = param_1[0x2c];\n        if (uVar2 != param_1[0x2b]) goto LAB_0001b9c0;\n      }" { (if_statement "if (0x3ffffffb < uVar2) goto LAB_0001bacc;" if (parenthesized_expression "(0x3ffffffb < uVar2)" ( (binary_expression "0x3ffffffb < uVar2" number_literal < identifier) )) (goto_statement "goto LAB_0001bacc;" goto statement_identifier ;)) (expression_statement "param_1[0x2b] = uVar2 << 1;" (assignment_expression "param_1[0x2b] = uVar2 << 1" (subscript_expression "param_1[0x2b]" identifier [ number_literal ]) = (binary_expression "uVar2 << 1" identifier << number_literal)) ;) (expression_statement "iVar1 = xrealloc(param_1[0x2a]);" (assignment_expression "iVar1 = xrealloc(param_1[0x2a])" identifier = (call_expression "xrealloc(param_1[0x2a])" identifier (argument_list "(param_1[0x2a])" ( (subscript_expression "param_1[0x2a]" identifier [ number_literal ]) )))) ;) (expression_statement "uVar3 = param_1[0x2b];" (assignment_expression "uVar3 = param_1[0x2b]" identifier = (subscript_expression "param_1[0x2b]" identifier [ number_literal ])) ;) (expression_statement "uVar2 = param_1[0x2c];" (assignment_expression "uVar2 = param_1[0x2c]" identifier = (subscript_expression "param_1[0x2c]" identifier [ number_literal ])) ;) (expression_statement "param_1[0x2a] = iVar1;" (assignment_expression "param_1[0x2a] = iVar1" (subscript_expression "param_1[0x2a]" identifier [ number_literal ]) = identifier) ;) (if_statement "if ((uVar3 == uVar2) || (*(char *)((int)param_1 + 0xe9) != '\0')) break;" if (parenthesized_expression "((uVar3 == uVar2) || (*(char *)((int)param_1 + 0xe9) != '\0'))" ( (binary_expression "(uVar3 == uVar2) || (*(char *)((int)param_1 + 0xe9) != '\0')" (parenthesized_expression "(uVar3 == uVar2)" ( (binary_expression "uVar3 == uVar2" identifier == identifier) )) || (parenthesized_expression "(*(char *)((int)param_1 + 0xe9) != '\0')" ( (binary_expression "*(char *)((int)param_1 + 0xe9) != '\0'" (pointer_expression "*(char *)((int)param_1 + 0xe9)" * (cast_expression "(char *)((int)param_1 + 0xe9)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + 0xe9)" ( (binary_expression "(int)param_1 + 0xe9" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) != (char_literal "'\0'" ' escape_sequence ')) ))) )) (break_statement "break;" break ;)) (expression_statement "FUN_0001b85c(param_1);" (call_expression "FUN_0001b85c(param_1)" identifier (argument_list "(param_1)" ( identifier ))) ;) (expression_statement "uVar2 = param_1[0x2c];" (assignment_expression "uVar2 = param_1[0x2c]" identifier = (subscript_expression "param_1[0x2c]" identifier [ number_literal ])) ;) (if_statement "if (uVar2 != param_1[0x2b]) goto LAB_0001b9c0;" if (parenthesized_expression "(uVar2 != param_1[0x2b])" ( (binary_expression "uVar2 != param_1[0x2b]" identifier != (subscript_expression "param_1[0x2b]" identifier [ number_literal ])) )) (goto_statement "goto LAB_0001b9c0;" goto statement_identifier ;)) })) })) (labeled_statement "LAB_0001b9c0:\n    param_1[0x2b] = uVar2 + 8 & 0xfffffffc;" statement_identifier : (expression_statement "param_1[0x2b] = uVar2 + 8 & 0xfffffffc;" (assignment_expression "param_1[0x2b] = uVar2 + 8 & 0xfffffffc" (subscript_expression "param_1[0x2b]" identifier [ number_literal ]) = (binary_expression "uVar2 + 8 & 0xfffffffc" (binary_expression "uVar2 + 8" identifier + number_literal) & number_literal)) ;)) (expression_statement "iVar1 = xrealloc(param_1[0x2a]);" (assignment_expression "iVar1 = xrealloc(param_1[0x2a])" identifier = (call_expression "xrealloc(param_1[0x2a])" identifier (argument_list "(param_1[0x2a])" ( (subscript_expression "param_1[0x2a]" identifier [ number_literal ]) )))) ;) (expression_statement "param_1[0x2a] = iVar1;" (assignment_expression "param_1[0x2a] = iVar1" (subscript_expression "param_1[0x2a]" identifier [ number_literal ]) = identifier) ;) })) (return_statement "return;" return ;) })))
(translation_unit "void slurp(file_data *current)\n\n{\n  size_t *psVar1;\n  uint uVar2;\n  uint uVar3;\n  size_t sVar4;\n  \n  if (current->desc < 0) {\n    return;\n  }\n  if (((current->stat).st_mode & 0xf000) == 0x8000) {\n    uVar3 = (uint)(current->stat).st_size;\n    uVar2 = (uVar3 & 0xfffffffc) + 8;\n    if (((*(int *)&(current->stat).st_size != 0) || (uVar2 < uVar3)) || (0x7ffffffe < uVar2)) {\nLAB_0001bacc:\n                    /* WARNING: Subroutine does not return */\n      xalloc_die();\n    }\n    if (current->bufsize < uVar2) {\n      current->bufsize = uVar2;\n      psVar1 = (size_t *)xrealloc(current->buffer,uVar2);\n      current->buffer = psVar1;\n    }\n    uVar2 = current->buffered;\n    if (uVar2 <= uVar3) {\n      sVar4 = (uVar3 - uVar2) + 1;\n      if (sVar4 == 0) {\n        return;\n      }\n      if (current->eof != false) {\n        return;\n      }\n      file_block_read(current,sVar4);\n      uVar2 = current->buffered;\n      if (uVar2 <= uVar3) {\n        return;\n      }\n    }\n  }\n  else {\n    uVar2 = current->buffered;\n  }\n  sVar4 = current->bufsize - uVar2;\n  if ((sVar4 != 0) && (current->eof == false)) {\n    file_block_read(current,sVar4);\n    uVar2 = current->buffered;\n  }\n  if (uVar2 != 0) {\n    uVar3 = current->bufsize;\n    while (uVar2 == uVar3) {\n      while( true ) {\n        if (0x3ffffffb < uVar2) goto LAB_0001bacc;\n        current->bufsize = uVar2 << 1;\n        psVar1 = (size_t *)xrealloc(current->buffer,uVar2 << 1);\n        uVar3 = current->bufsize;\n        uVar2 = current->buffered;\n        current->buffer = psVar1;\n        if ((uVar3 - uVar2 == 0) || (current->eof != false)) break;\n        file_block_read(current,uVar3 - uVar2);\n        uVar2 = current->buffered;\n        if (uVar2 != current->bufsize) goto LAB_0001b9c0;\n      }\n    }\nLAB_0001b9c0:\n    uVar2 = uVar2 + 8 & 0xfffffffc;\n    current->bufsize = uVar2;\n    psVar1 = (size_t *)xrealloc(current->buffer,uVar2);\n    current->buffer = psVar1;\n  }\n  return;\n}\n\n" (function_definition "void slurp(file_data *current)\n\n{\n  size_t *psVar1;\n  uint uVar2;\n  uint uVar3;\n  size_t sVar4;\n  \n  if (current->desc < 0) {\n    return;\n  }\n  if (((current->stat).st_mode & 0xf000) == 0x8000) {\n    uVar3 = (uint)(current->stat).st_size;\n    uVar2 = (uVar3 & 0xfffffffc) + 8;\n    if (((*(int *)&(current->stat).st_size != 0) || (uVar2 < uVar3)) || (0x7ffffffe < uVar2)) {\nLAB_0001bacc:\n                    /* WARNING: Subroutine does not return */\n      xalloc_die();\n    }\n    if (current->bufsize < uVar2) {\n      current->bufsize = uVar2;\n      psVar1 = (size_t *)xrealloc(current->buffer,uVar2);\n      current->buffer = psVar1;\n    }\n    uVar2 = current->buffered;\n    if (uVar2 <= uVar3) {\n      sVar4 = (uVar3 - uVar2) + 1;\n      if (sVar4 == 0) {\n        return;\n      }\n      if (current->eof != false) {\n        return;\n      }\n      file_block_read(current,sVar4);\n      uVar2 = current->buffered;\n      if (uVar2 <= uVar3) {\n        return;\n      }\n    }\n  }\n  else {\n    uVar2 = current->buffered;\n  }\n  sVar4 = current->bufsize - uVar2;\n  if ((sVar4 != 0) && (current->eof == false)) {\n    file_block_read(current,sVar4);\n    uVar2 = current->buffered;\n  }\n  if (uVar2 != 0) {\n    uVar3 = current->bufsize;\n    while (uVar2 == uVar3) {\n      while( true ) {\n        if (0x3ffffffb < uVar2) goto LAB_0001bacc;\n        current->bufsize = uVar2 << 1;\n        psVar1 = (size_t *)xrealloc(current->buffer,uVar2 << 1);\n        uVar3 = current->bufsize;\n        uVar2 = current->buffered;\n        current->buffer = psVar1;\n        if ((uVar3 - uVar2 == 0) || (current->eof != false)) break;\n        file_block_read(current,uVar3 - uVar2);\n        uVar2 = current->buffered;\n        if (uVar2 != current->bufsize) goto LAB_0001b9c0;\n      }\n    }\nLAB_0001b9c0:\n    uVar2 = uVar2 + 8 & 0xfffffffc;\n    current->bufsize = uVar2;\n    psVar1 = (size_t *)xrealloc(current->buffer,uVar2);\n    current->buffer = psVar1;\n  }\n  return;\n}" primitive_type (function_declarator "slurp(file_data *current)" identifier (parameter_list "(file_data *current)" ( (parameter_declaration "file_data *current" type_identifier (pointer_declarator "*current" * identifier)) ))) (compound_statement "{\n  size_t *psVar1;\n  uint uVar2;\n  uint uVar3;\n  size_t sVar4;\n  \n  if (current->desc < 0) {\n    return;\n  }\n  if (((current->stat).st_mode & 0xf000) == 0x8000) {\n    uVar3 = (uint)(current->stat).st_size;\n    uVar2 = (uVar3 & 0xfffffffc) + 8;\n    if (((*(int *)&(current->stat).st_size != 0) || (uVar2 < uVar3)) || (0x7ffffffe < uVar2)) {\nLAB_0001bacc:\n                    /* WARNING: Subroutine does not return */\n      xalloc_die();\n    }\n    if (current->bufsize < uVar2) {\n      current->bufsize = uVar2;\n      psVar1 = (size_t *)xrealloc(current->buffer,uVar2);\n      current->buffer = psVar1;\n    }\n    uVar2 = current->buffered;\n    if (uVar2 <= uVar3) {\n      sVar4 = (uVar3 - uVar2) + 1;\n      if (sVar4 == 0) {\n        return;\n      }\n      if (current->eof != false) {\n        return;\n      }\n      file_block_read(current,sVar4);\n      uVar2 = current->buffered;\n      if (uVar2 <= uVar3) {\n        return;\n      }\n    }\n  }\n  else {\n    uVar2 = current->buffered;\n  }\n  sVar4 = current->bufsize - uVar2;\n  if ((sVar4 != 0) && (current->eof == false)) {\n    file_block_read(current,sVar4);\n    uVar2 = current->buffered;\n  }\n  if (uVar2 != 0) {\n    uVar3 = current->bufsize;\n    while (uVar2 == uVar3) {\n      while( true ) {\n        if (0x3ffffffb < uVar2) goto LAB_0001bacc;\n        current->bufsize = uVar2 << 1;\n        psVar1 = (size_t *)xrealloc(current->buffer,uVar2 << 1);\n        uVar3 = current->bufsize;\n        uVar2 = current->buffered;\n        current->buffer = psVar1;\n        if ((uVar3 - uVar2 == 0) || (current->eof != false)) break;\n        file_block_read(current,uVar3 - uVar2);\n        uVar2 = current->buffered;\n        if (uVar2 != current->bufsize) goto LAB_0001b9c0;\n      }\n    }\nLAB_0001b9c0:\n    uVar2 = uVar2 + 8 & 0xfffffffc;\n    current->bufsize = uVar2;\n    psVar1 = (size_t *)xrealloc(current->buffer,uVar2);\n    current->buffer = psVar1;\n  }\n  return;\n}" { (declaration "size_t *psVar1;" primitive_type (pointer_declarator "*psVar1" * identifier) ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "size_t sVar4;" primitive_type identifier ;) (if_statement "if (current->desc < 0) {\n    return;\n  }" if (parenthesized_expression "(current->desc < 0)" ( (binary_expression "current->desc < 0" (field_expression "current->desc" identifier -> field_identifier) < number_literal) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) (if_statement "if (((current->stat).st_mode & 0xf000) == 0x8000) {\n    uVar3 = (uint)(current->stat).st_size;\n    uVar2 = (uVar3 & 0xfffffffc) + 8;\n    if (((*(int *)&(current->stat).st_size != 0) || (uVar2 < uVar3)) || (0x7ffffffe < uVar2)) {\nLAB_0001bacc:\n                    /* WARNING: Subroutine does not return */\n      xalloc_die();\n    }\n    if (current->bufsize < uVar2) {\n      current->bufsize = uVar2;\n      psVar1 = (size_t *)xrealloc(current->buffer,uVar2);\n      current->buffer = psVar1;\n    }\n    uVar2 = current->buffered;\n    if (uVar2 <= uVar3) {\n      sVar4 = (uVar3 - uVar2) + 1;\n      if (sVar4 == 0) {\n        return;\n      }\n      if (current->eof != false) {\n        return;\n      }\n      file_block_read(current,sVar4);\n      uVar2 = current->buffered;\n      if (uVar2 <= uVar3) {\n        return;\n      }\n    }\n  }\n  else {\n    uVar2 = current->buffered;\n  }" if (parenthesized_expression "(((current->stat).st_mode & 0xf000) == 0x8000)" ( (binary_expression "((current->stat).st_mode & 0xf000) == 0x8000" (parenthesized_expression "((current->stat).st_mode & 0xf000)" ( (binary_expression "(current->stat).st_mode & 0xf000" (field_expression "(current->stat).st_mode" (parenthesized_expression "(current->stat)" ( (field_expression "current->stat" identifier -> field_identifier) )) . field_identifier) & number_literal) )) == number_literal) )) (compound_statement "{\n    uVar3 = (uint)(current->stat).st_size;\n    uVar2 = (uVar3 & 0xfffffffc) + 8;\n    if (((*(int *)&(current->stat).st_size != 0) || (uVar2 < uVar3)) || (0x7ffffffe < uVar2)) {\nLAB_0001bacc:\n                    /* WARNING: Subroutine does not return */\n      xalloc_die();\n    }\n    if (current->bufsize < uVar2) {\n      current->bufsize = uVar2;\n      psVar1 = (size_t *)xrealloc(current->buffer,uVar2);\n      current->buffer = psVar1;\n    }\n    uVar2 = current->buffered;\n    if (uVar2 <= uVar3) {\n      sVar4 = (uVar3 - uVar2) + 1;\n      if (sVar4 == 0) {\n        return;\n      }\n      if (current->eof != false) {\n        return;\n      }\n      file_block_read(current,sVar4);\n      uVar2 = current->buffered;\n      if (uVar2 <= uVar3) {\n        return;\n      }\n    }\n  }" { (expression_statement "uVar3 = (uint)(current->stat).st_size;" (assignment_expression "uVar3 = (uint)(current->stat).st_size" identifier = (field_expression "(uint)(current->stat).st_size" (call_expression "(uint)(current->stat)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(current->stat)" ( (field_expression "current->stat" identifier -> field_identifier) ))) . field_identifier)) ;) (expression_statement "uVar2 = (uVar3 & 0xfffffffc) + 8;" (assignment_expression "uVar2 = (uVar3 & 0xfffffffc) + 8" identifier = (binary_expression "(uVar3 & 0xfffffffc) + 8" (parenthesized_expression "(uVar3 & 0xfffffffc)" ( (binary_expression "uVar3 & 0xfffffffc" identifier & number_literal) )) + number_literal)) ;) (if_statement "if (((*(int *)&(current->stat).st_size != 0) || (uVar2 < uVar3)) || (0x7ffffffe < uVar2)) {\nLAB_0001bacc:\n                    /* WARNING: Subroutine does not return */\n      xalloc_die();\n    }" if (parenthesized_expression "(((*(int *)&(current->stat).st_size != 0) || (uVar2 < uVar3)) || (0x7ffffffe < uVar2))" ( (binary_expression "((*(int *)&(current->stat).st_size != 0) || (uVar2 < uVar3)) || (0x7ffffffe < uVar2)" (parenthesized_expression "((*(int *)&(current->stat).st_size != 0) || (uVar2 < uVar3))" ( (binary_expression "(*(int *)&(current->stat).st_size != 0) || (uVar2 < uVar3)" (parenthesized_expression "(*(int *)&(current->stat).st_size != 0)" ( (binary_expression "*(int *)&(current->stat).st_size != 0" (pointer_expression "*(int *)&(current->stat).st_size" * (cast_expression "(int *)&(current->stat).st_size" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "&(current->stat).st_size" & (field_expression "(current->stat).st_size" (parenthesized_expression "(current->stat)" ( (field_expression "current->stat" identifier -> field_identifier) )) . field_identifier)))) != number_literal) )) || (parenthesized_expression "(uVar2 < uVar3)" ( (binary_expression "uVar2 < uVar3" identifier < identifier) ))) )) || (parenthesized_expression "(0x7ffffffe < uVar2)" ( (binary_expression "0x7ffffffe < uVar2" number_literal < identifier) ))) )) (compound_statement "{\nLAB_0001bacc:\n                    /* WARNING: Subroutine does not return */\n      xalloc_die();\n    }" { (labeled_statement "LAB_0001bacc:\n                    /* WARNING: Subroutine does not return */\n      xalloc_die();" statement_identifier : comment (expression_statement "xalloc_die();" (call_expression "xalloc_die()" identifier (argument_list "()" ( ))) ;)) })) (if_statement "if (current->bufsize < uVar2) {\n      current->bufsize = uVar2;\n      psVar1 = (size_t *)xrealloc(current->buffer,uVar2);\n      current->buffer = psVar1;\n    }" if (parenthesized_expression "(current->bufsize < uVar2)" ( (binary_expression "current->bufsize < uVar2" (field_expression "current->bufsize" identifier -> field_identifier) < identifier) )) (compound_statement "{\n      current->bufsize = uVar2;\n      psVar1 = (size_t *)xrealloc(current->buffer,uVar2);\n      current->buffer = psVar1;\n    }" { (expression_statement "current->bufsize = uVar2;" (assignment_expression "current->bufsize = uVar2" (field_expression "current->bufsize" identifier -> field_identifier) = identifier) ;) (expression_statement "psVar1 = (size_t *)xrealloc(current->buffer,uVar2);" (assignment_expression "psVar1 = (size_t *)xrealloc(current->buffer,uVar2)" identifier = (cast_expression "(size_t *)xrealloc(current->buffer,uVar2)" ( (type_descriptor "size_t *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "xrealloc(current->buffer,uVar2)" identifier (argument_list "(current->buffer,uVar2)" ( (field_expression "current->buffer" identifier -> field_identifier) , identifier ))))) ;) (expression_statement "current->buffer = psVar1;" (assignment_expression "current->buffer = psVar1" (field_expression "current->buffer" identifier -> field_identifier) = identifier) ;) })) (expression_statement "uVar2 = current->buffered;" (assignment_expression "uVar2 = current->buffered" identifier = (field_expression "current->buffered" identifier -> field_identifier)) ;) (if_statement "if (uVar2 <= uVar3) {\n      sVar4 = (uVar3 - uVar2) + 1;\n      if (sVar4 == 0) {\n        return;\n      }\n      if (current->eof != false) {\n        return;\n      }\n      file_block_read(current,sVar4);\n      uVar2 = current->buffered;\n      if (uVar2 <= uVar3) {\n        return;\n      }\n    }" if (parenthesized_expression "(uVar2 <= uVar3)" ( (binary_expression "uVar2 <= uVar3" identifier <= identifier) )) (compound_statement "{\n      sVar4 = (uVar3 - uVar2) + 1;\n      if (sVar4 == 0) {\n        return;\n      }\n      if (current->eof != false) {\n        return;\n      }\n      file_block_read(current,sVar4);\n      uVar2 = current->buffered;\n      if (uVar2 <= uVar3) {\n        return;\n      }\n    }" { (expression_statement "sVar4 = (uVar3 - uVar2) + 1;" (assignment_expression "sVar4 = (uVar3 - uVar2) + 1" identifier = (binary_expression "(uVar3 - uVar2) + 1" (parenthesized_expression "(uVar3 - uVar2)" ( (binary_expression "uVar3 - uVar2" identifier - identifier) )) + number_literal)) ;) (if_statement "if (sVar4 == 0) {\n        return;\n      }" if (parenthesized_expression "(sVar4 == 0)" ( (binary_expression "sVar4 == 0" identifier == number_literal) )) (compound_statement "{\n        return;\n      }" { (return_statement "return;" return ;) })) (if_statement "if (current->eof != false) {\n        return;\n      }" if (parenthesized_expression "(current->eof != false)" ( (binary_expression "current->eof != false" (field_expression "current->eof" identifier -> field_identifier) != false) )) (compound_statement "{\n        return;\n      }" { (return_statement "return;" return ;) })) (expression_statement "file_block_read(current,sVar4);" (call_expression "file_block_read(current,sVar4)" identifier (argument_list "(current,sVar4)" ( identifier , identifier ))) ;) (expression_statement "uVar2 = current->buffered;" (assignment_expression "uVar2 = current->buffered" identifier = (field_expression "current->buffered" identifier -> field_identifier)) ;) (if_statement "if (uVar2 <= uVar3) {\n        return;\n      }" if (parenthesized_expression "(uVar2 <= uVar3)" ( (binary_expression "uVar2 <= uVar3" identifier <= identifier) )) (compound_statement "{\n        return;\n      }" { (return_statement "return;" return ;) })) })) }) (else_clause "else {\n    uVar2 = current->buffered;\n  }" else (compound_statement "{\n    uVar2 = current->buffered;\n  }" { (expression_statement "uVar2 = current->buffered;" (assignment_expression "uVar2 = current->buffered" identifier = (field_expression "current->buffered" identifier -> field_identifier)) ;) }))) (expression_statement "sVar4 = current->bufsize - uVar2;" (assignment_expression "sVar4 = current->bufsize - uVar2" identifier = (binary_expression "current->bufsize - uVar2" (field_expression "current->bufsize" identifier -> field_identifier) - identifier)) ;) (if_statement "if ((sVar4 != 0) && (current->eof == false)) {\n    file_block_read(current,sVar4);\n    uVar2 = current->buffered;\n  }" if (parenthesized_expression "((sVar4 != 0) && (current->eof == false))" ( (binary_expression "(sVar4 != 0) && (current->eof == false)" (parenthesized_expression "(sVar4 != 0)" ( (binary_expression "sVar4 != 0" identifier != number_literal) )) && (parenthesized_expression "(current->eof == false)" ( (binary_expression "current->eof == false" (field_expression "current->eof" identifier -> field_identifier) == false) ))) )) (compound_statement "{\n    file_block_read(current,sVar4);\n    uVar2 = current->buffered;\n  }" { (expression_statement "file_block_read(current,sVar4);" (call_expression "file_block_read(current,sVar4)" identifier (argument_list "(current,sVar4)" ( identifier , identifier ))) ;) (expression_statement "uVar2 = current->buffered;" (assignment_expression "uVar2 = current->buffered" identifier = (field_expression "current->buffered" identifier -> field_identifier)) ;) })) (if_statement "if (uVar2 != 0) {\n    uVar3 = current->bufsize;\n    while (uVar2 == uVar3) {\n      while( true ) {\n        if (0x3ffffffb < uVar2) goto LAB_0001bacc;\n        current->bufsize = uVar2 << 1;\n        psVar1 = (size_t *)xrealloc(current->buffer,uVar2 << 1);\n        uVar3 = current->bufsize;\n        uVar2 = current->buffered;\n        current->buffer = psVar1;\n        if ((uVar3 - uVar2 == 0) || (current->eof != false)) break;\n        file_block_read(current,uVar3 - uVar2);\n        uVar2 = current->buffered;\n        if (uVar2 != current->bufsize) goto LAB_0001b9c0;\n      }\n    }\nLAB_0001b9c0:\n    uVar2 = uVar2 + 8 & 0xfffffffc;\n    current->bufsize = uVar2;\n    psVar1 = (size_t *)xrealloc(current->buffer,uVar2);\n    current->buffer = psVar1;\n  }" if (parenthesized_expression "(uVar2 != 0)" ( (binary_expression "uVar2 != 0" identifier != number_literal) )) (compound_statement "{\n    uVar3 = current->bufsize;\n    while (uVar2 == uVar3) {\n      while( true ) {\n        if (0x3ffffffb < uVar2) goto LAB_0001bacc;\n        current->bufsize = uVar2 << 1;\n        psVar1 = (size_t *)xrealloc(current->buffer,uVar2 << 1);\n        uVar3 = current->bufsize;\n        uVar2 = current->buffered;\n        current->buffer = psVar1;\n        if ((uVar3 - uVar2 == 0) || (current->eof != false)) break;\n        file_block_read(current,uVar3 - uVar2);\n        uVar2 = current->buffered;\n        if (uVar2 != current->bufsize) goto LAB_0001b9c0;\n      }\n    }\nLAB_0001b9c0:\n    uVar2 = uVar2 + 8 & 0xfffffffc;\n    current->bufsize = uVar2;\n    psVar1 = (size_t *)xrealloc(current->buffer,uVar2);\n    current->buffer = psVar1;\n  }" { (expression_statement "uVar3 = current->bufsize;" (assignment_expression "uVar3 = current->bufsize" identifier = (field_expression "current->bufsize" identifier -> field_identifier)) ;) (while_statement "while (uVar2 == uVar3) {\n      while( true ) {\n        if (0x3ffffffb < uVar2) goto LAB_0001bacc;\n        current->bufsize = uVar2 << 1;\n        psVar1 = (size_t *)xrealloc(current->buffer,uVar2 << 1);\n        uVar3 = current->bufsize;\n        uVar2 = current->buffered;\n        current->buffer = psVar1;\n        if ((uVar3 - uVar2 == 0) || (current->eof != false)) break;\n        file_block_read(current,uVar3 - uVar2);\n        uVar2 = current->buffered;\n        if (uVar2 != current->bufsize) goto LAB_0001b9c0;\n      }\n    }" while (parenthesized_expression "(uVar2 == uVar3)" ( (binary_expression "uVar2 == uVar3" identifier == identifier) )) (compound_statement "{\n      while( true ) {\n        if (0x3ffffffb < uVar2) goto LAB_0001bacc;\n        current->bufsize = uVar2 << 1;\n        psVar1 = (size_t *)xrealloc(current->buffer,uVar2 << 1);\n        uVar3 = current->bufsize;\n        uVar2 = current->buffered;\n        current->buffer = psVar1;\n        if ((uVar3 - uVar2 == 0) || (current->eof != false)) break;\n        file_block_read(current,uVar3 - uVar2);\n        uVar2 = current->buffered;\n        if (uVar2 != current->bufsize) goto LAB_0001b9c0;\n      }\n    }" { (while_statement "while( true ) {\n        if (0x3ffffffb < uVar2) goto LAB_0001bacc;\n        current->bufsize = uVar2 << 1;\n        psVar1 = (size_t *)xrealloc(current->buffer,uVar2 << 1);\n        uVar3 = current->bufsize;\n        uVar2 = current->buffered;\n        current->buffer = psVar1;\n        if ((uVar3 - uVar2 == 0) || (current->eof != false)) break;\n        file_block_read(current,uVar3 - uVar2);\n        uVar2 = current->buffered;\n        if (uVar2 != current->bufsize) goto LAB_0001b9c0;\n      }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n        if (0x3ffffffb < uVar2) goto LAB_0001bacc;\n        current->bufsize = uVar2 << 1;\n        psVar1 = (size_t *)xrealloc(current->buffer,uVar2 << 1);\n        uVar3 = current->bufsize;\n        uVar2 = current->buffered;\n        current->buffer = psVar1;\n        if ((uVar3 - uVar2 == 0) || (current->eof != false)) break;\n        file_block_read(current,uVar3 - uVar2);\n        uVar2 = current->buffered;\n        if (uVar2 != current->bufsize) goto LAB_0001b9c0;\n      }" { (if_statement "if (0x3ffffffb < uVar2) goto LAB_0001bacc;" if (parenthesized_expression "(0x3ffffffb < uVar2)" ( (binary_expression "0x3ffffffb < uVar2" number_literal < identifier) )) (goto_statement "goto LAB_0001bacc;" goto statement_identifier ;)) (expression_statement "current->bufsize = uVar2 << 1;" (assignment_expression "current->bufsize = uVar2 << 1" (field_expression "current->bufsize" identifier -> field_identifier) = (binary_expression "uVar2 << 1" identifier << number_literal)) ;) (expression_statement "psVar1 = (size_t *)xrealloc(current->buffer,uVar2 << 1);" (assignment_expression "psVar1 = (size_t *)xrealloc(current->buffer,uVar2 << 1)" identifier = (cast_expression "(size_t *)xrealloc(current->buffer,uVar2 << 1)" ( (type_descriptor "size_t *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "xrealloc(current->buffer,uVar2 << 1)" identifier (argument_list "(current->buffer,uVar2 << 1)" ( (field_expression "current->buffer" identifier -> field_identifier) , (binary_expression "uVar2 << 1" identifier << number_literal) ))))) ;) (expression_statement "uVar3 = current->bufsize;" (assignment_expression "uVar3 = current->bufsize" identifier = (field_expression "current->bufsize" identifier -> field_identifier)) ;) (expression_statement "uVar2 = current->buffered;" (assignment_expression "uVar2 = current->buffered" identifier = (field_expression "current->buffered" identifier -> field_identifier)) ;) (expression_statement "current->buffer = psVar1;" (assignment_expression "current->buffer = psVar1" (field_expression "current->buffer" identifier -> field_identifier) = identifier) ;) (if_statement "if ((uVar3 - uVar2 == 0) || (current->eof != false)) break;" if (parenthesized_expression "((uVar3 - uVar2 == 0) || (current->eof != false))" ( (binary_expression "(uVar3 - uVar2 == 0) || (current->eof != false)" (parenthesized_expression "(uVar3 - uVar2 == 0)" ( (binary_expression "uVar3 - uVar2 == 0" (binary_expression "uVar3 - uVar2" identifier - identifier) == number_literal) )) || (parenthesized_expression "(current->eof != false)" ( (binary_expression "current->eof != false" (field_expression "current->eof" identifier -> field_identifier) != false) ))) )) (break_statement "break;" break ;)) (expression_statement "file_block_read(current,uVar3 - uVar2);" (call_expression "file_block_read(current,uVar3 - uVar2)" identifier (argument_list "(current,uVar3 - uVar2)" ( identifier , (binary_expression "uVar3 - uVar2" identifier - identifier) ))) ;) (expression_statement "uVar2 = current->buffered;" (assignment_expression "uVar2 = current->buffered" identifier = (field_expression "current->buffered" identifier -> field_identifier)) ;) (if_statement "if (uVar2 != current->bufsize) goto LAB_0001b9c0;" if (parenthesized_expression "(uVar2 != current->bufsize)" ( (binary_expression "uVar2 != current->bufsize" identifier != (field_expression "current->bufsize" identifier -> field_identifier)) )) (goto_statement "goto LAB_0001b9c0;" goto statement_identifier ;)) })) })) (labeled_statement "LAB_0001b9c0:\n    uVar2 = uVar2 + 8 & 0xfffffffc;" statement_identifier : (expression_statement "uVar2 = uVar2 + 8 & 0xfffffffc;" (assignment_expression "uVar2 = uVar2 + 8 & 0xfffffffc" identifier = (binary_expression "uVar2 + 8 & 0xfffffffc" (binary_expression "uVar2 + 8" identifier + number_literal) & number_literal)) ;)) (expression_statement "current->bufsize = uVar2;" (assignment_expression "current->bufsize = uVar2" (field_expression "current->bufsize" identifier -> field_identifier) = identifier) ;) (expression_statement "psVar1 = (size_t *)xrealloc(current->buffer,uVar2);" (assignment_expression "psVar1 = (size_t *)xrealloc(current->buffer,uVar2)" identifier = (cast_expression "(size_t *)xrealloc(current->buffer,uVar2)" ( (type_descriptor "size_t *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "xrealloc(current->buffer,uVar2)" identifier (argument_list "(current->buffer,uVar2)" ( (field_expression "current->buffer" identifier -> field_identifier) , identifier ))))) ;) (expression_statement "current->buffer = psVar1;" (assignment_expression "current->buffer = psVar1" (field_expression "current->buffer" identifier -> field_identifier) = identifier) ;) })) (return_statement "return;" return ;) })))
(translation_unit "void FUN_0001b8e0(int *param_1)\n\n{\n  int iVar1;\n  uint uVar2;\n  uint uVar3;\n  \n  if (*param_1 < 0) {\n    return;\n  }\n  if ((param_1[8] & 0xf000U) == 0x8000) {\n    uVar3 = param_1[0x11];\n    uVar2 = (uVar3 & 0xfffffffc) + 8;\n    if (((param_1[0x10] != 0) || (uVar2 < uVar3)) || (0x7ffffffe < uVar2)) {\nLAB_0001bacc:\n                    \n      xalloc_die();\n    }\n    if ((uint)param_1[0x2b] < uVar2) {\n      param_1[0x2b] = uVar2;\n      iVar1 = xrealloc(param_1[0x2a],uVar2);\n      param_1[0x2a] = iVar1;\n    }\n    uVar2 = param_1[0x2c];\n    if (uVar2 <= uVar3) {\n      if (uVar3 - uVar2 == -1) {\n        return;\n      }\n      if (*(char *)((int)param_1 + 0xe9) != '\0') {\n        return;\n      }\n      FUN_0001b85c(param_1);\n      uVar2 = param_1[0x2c];\n      if (uVar2 <= uVar3) {\n        return;\n      }\n    }\n  }\n  else {\n    uVar2 = param_1[0x2c];\n  }\n  if ((param_1[0x2b] != uVar2) && (*(char *)((int)param_1 + 0xe9) == '\0')) {\n    FUN_0001b85c(param_1);\n    uVar2 = param_1[0x2c];\n  }\n  if (uVar2 != 0) {\n    uVar3 = param_1[0x2b];\n    while (uVar2 == uVar3) {\n      while( true ) {\n        if (0x3ffffffb < uVar2) goto LAB_0001bacc;\n        param_1[0x2b] = uVar2 << 1;\n        iVar1 = xrealloc(param_1[0x2a]);\n        uVar3 = param_1[0x2b];\n        uVar2 = param_1[0x2c];\n        param_1[0x2a] = iVar1;\n        if ((uVar3 == uVar2) || (*(char *)((int)param_1 + 0xe9) != '\0')) break;\n        FUN_0001b85c(param_1);\n        uVar2 = param_1[0x2c];\n        if (uVar2 != param_1[0x2b]) goto LAB_0001b9c0;\n      }\n    }\nLAB_0001b9c0:\n    param_1[0x2b] = uVar2 + 8 & 0xfffffffc;\n    iVar1 = xrealloc(param_1[0x2a]);\n    param_1[0x2a] = iVar1;\n  }\n  return;\n}\n\n" (function_definition "void FUN_0001b8e0(int *param_1)\n\n{\n  int iVar1;\n  uint uVar2;\n  uint uVar3;\n  \n  if (*param_1 < 0) {\n    return;\n  }\n  if ((param_1[8] & 0xf000U) == 0x8000) {\n    uVar3 = param_1[0x11];\n    uVar2 = (uVar3 & 0xfffffffc) + 8;\n    if (((param_1[0x10] != 0) || (uVar2 < uVar3)) || (0x7ffffffe < uVar2)) {\nLAB_0001bacc:\n                    \n      xalloc_die();\n    }\n    if ((uint)param_1[0x2b] < uVar2) {\n      param_1[0x2b] = uVar2;\n      iVar1 = xrealloc(param_1[0x2a],uVar2);\n      param_1[0x2a] = iVar1;\n    }\n    uVar2 = param_1[0x2c];\n    if (uVar2 <= uVar3) {\n      if (uVar3 - uVar2 == -1) {\n        return;\n      }\n      if (*(char *)((int)param_1 + 0xe9) != '\0') {\n        return;\n      }\n      FUN_0001b85c(param_1);\n      uVar2 = param_1[0x2c];\n      if (uVar2 <= uVar3) {\n        return;\n      }\n    }\n  }\n  else {\n    uVar2 = param_1[0x2c];\n  }\n  if ((param_1[0x2b] != uVar2) && (*(char *)((int)param_1 + 0xe9) == '\0')) {\n    FUN_0001b85c(param_1);\n    uVar2 = param_1[0x2c];\n  }\n  if (uVar2 != 0) {\n    uVar3 = param_1[0x2b];\n    while (uVar2 == uVar3) {\n      while( true ) {\n        if (0x3ffffffb < uVar2) goto LAB_0001bacc;\n        param_1[0x2b] = uVar2 << 1;\n        iVar1 = xrealloc(param_1[0x2a]);\n        uVar3 = param_1[0x2b];\n        uVar2 = param_1[0x2c];\n        param_1[0x2a] = iVar1;\n        if ((uVar3 == uVar2) || (*(char *)((int)param_1 + 0xe9) != '\0')) break;\n        FUN_0001b85c(param_1);\n        uVar2 = param_1[0x2c];\n        if (uVar2 != param_1[0x2b]) goto LAB_0001b9c0;\n      }\n    }\nLAB_0001b9c0:\n    param_1[0x2b] = uVar2 + 8 & 0xfffffffc;\n    iVar1 = xrealloc(param_1[0x2a]);\n    param_1[0x2a] = iVar1;\n  }\n  return;\n}" primitive_type (function_declarator "FUN_0001b8e0(int *param_1)" identifier (parameter_list "(int *param_1)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) ))) (compound_statement "{\n  int iVar1;\n  uint uVar2;\n  uint uVar3;\n  \n  if (*param_1 < 0) {\n    return;\n  }\n  if ((param_1[8] & 0xf000U) == 0x8000) {\n    uVar3 = param_1[0x11];\n    uVar2 = (uVar3 & 0xfffffffc) + 8;\n    if (((param_1[0x10] != 0) || (uVar2 < uVar3)) || (0x7ffffffe < uVar2)) {\nLAB_0001bacc:\n                    \n      xalloc_die();\n    }\n    if ((uint)param_1[0x2b] < uVar2) {\n      param_1[0x2b] = uVar2;\n      iVar1 = xrealloc(param_1[0x2a],uVar2);\n      param_1[0x2a] = iVar1;\n    }\n    uVar2 = param_1[0x2c];\n    if (uVar2 <= uVar3) {\n      if (uVar3 - uVar2 == -1) {\n        return;\n      }\n      if (*(char *)((int)param_1 + 0xe9) != '\0') {\n        return;\n      }\n      FUN_0001b85c(param_1);\n      uVar2 = param_1[0x2c];\n      if (uVar2 <= uVar3) {\n        return;\n      }\n    }\n  }\n  else {\n    uVar2 = param_1[0x2c];\n  }\n  if ((param_1[0x2b] != uVar2) && (*(char *)((int)param_1 + 0xe9) == '\0')) {\n    FUN_0001b85c(param_1);\n    uVar2 = param_1[0x2c];\n  }\n  if (uVar2 != 0) {\n    uVar3 = param_1[0x2b];\n    while (uVar2 == uVar3) {\n      while( true ) {\n        if (0x3ffffffb < uVar2) goto LAB_0001bacc;\n        param_1[0x2b] = uVar2 << 1;\n        iVar1 = xrealloc(param_1[0x2a]);\n        uVar3 = param_1[0x2b];\n        uVar2 = param_1[0x2c];\n        param_1[0x2a] = iVar1;\n        if ((uVar3 == uVar2) || (*(char *)((int)param_1 + 0xe9) != '\0')) break;\n        FUN_0001b85c(param_1);\n        uVar2 = param_1[0x2c];\n        if (uVar2 != param_1[0x2b]) goto LAB_0001b9c0;\n      }\n    }\nLAB_0001b9c0:\n    param_1[0x2b] = uVar2 + 8 & 0xfffffffc;\n    iVar1 = xrealloc(param_1[0x2a]);\n    param_1[0x2a] = iVar1;\n  }\n  return;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (if_statement "if (*param_1 < 0) {\n    return;\n  }" if (parenthesized_expression "(*param_1 < 0)" ( (binary_expression "*param_1 < 0" (pointer_expression "*param_1" * identifier) < number_literal) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) (if_statement "if ((param_1[8] & 0xf000U) == 0x8000) {\n    uVar3 = param_1[0x11];\n    uVar2 = (uVar3 & 0xfffffffc) + 8;\n    if (((param_1[0x10] != 0) || (uVar2 < uVar3)) || (0x7ffffffe < uVar2)) {\nLAB_0001bacc:\n                    \n      xalloc_die();\n    }\n    if ((uint)param_1[0x2b] < uVar2) {\n      param_1[0x2b] = uVar2;\n      iVar1 = xrealloc(param_1[0x2a],uVar2);\n      param_1[0x2a] = iVar1;\n    }\n    uVar2 = param_1[0x2c];\n    if (uVar2 <= uVar3) {\n      if (uVar3 - uVar2 == -1) {\n        return;\n      }\n      if (*(char *)((int)param_1 + 0xe9) != '\0') {\n        return;\n      }\n      FUN_0001b85c(param_1);\n      uVar2 = param_1[0x2c];\n      if (uVar2 <= uVar3) {\n        return;\n      }\n    }\n  }\n  else {\n    uVar2 = param_1[0x2c];\n  }" if (parenthesized_expression "((param_1[8] & 0xf000U) == 0x8000)" ( (binary_expression "(param_1[8] & 0xf000U) == 0x8000" (parenthesized_expression "(param_1[8] & 0xf000U)" ( (binary_expression "param_1[8] & 0xf000U" (subscript_expression "param_1[8]" identifier [ number_literal ]) & number_literal) )) == number_literal) )) (compound_statement "{\n    uVar3 = param_1[0x11];\n    uVar2 = (uVar3 & 0xfffffffc) + 8;\n    if (((param_1[0x10] != 0) || (uVar2 < uVar3)) || (0x7ffffffe < uVar2)) {\nLAB_0001bacc:\n                    \n      xalloc_die();\n    }\n    if ((uint)param_1[0x2b] < uVar2) {\n      param_1[0x2b] = uVar2;\n      iVar1 = xrealloc(param_1[0x2a],uVar2);\n      param_1[0x2a] = iVar1;\n    }\n    uVar2 = param_1[0x2c];\n    if (uVar2 <= uVar3) {\n      if (uVar3 - uVar2 == -1) {\n        return;\n      }\n      if (*(char *)((int)param_1 + 0xe9) != '\0') {\n        return;\n      }\n      FUN_0001b85c(param_1);\n      uVar2 = param_1[0x2c];\n      if (uVar2 <= uVar3) {\n        return;\n      }\n    }\n  }" { (expression_statement "uVar3 = param_1[0x11];" (assignment_expression "uVar3 = param_1[0x11]" identifier = (subscript_expression "param_1[0x11]" identifier [ number_literal ])) ;) (expression_statement "uVar2 = (uVar3 & 0xfffffffc) + 8;" (assignment_expression "uVar2 = (uVar3 & 0xfffffffc) + 8" identifier = (binary_expression "(uVar3 & 0xfffffffc) + 8" (parenthesized_expression "(uVar3 & 0xfffffffc)" ( (binary_expression "uVar3 & 0xfffffffc" identifier & number_literal) )) + number_literal)) ;) (if_statement "if (((param_1[0x10] != 0) || (uVar2 < uVar3)) || (0x7ffffffe < uVar2)) {\nLAB_0001bacc:\n                    \n      xalloc_die();\n    }" if (parenthesized_expression "(((param_1[0x10] != 0) || (uVar2 < uVar3)) || (0x7ffffffe < uVar2))" ( (binary_expression "((param_1[0x10] != 0) || (uVar2 < uVar3)) || (0x7ffffffe < uVar2)" (parenthesized_expression "((param_1[0x10] != 0) || (uVar2 < uVar3))" ( (binary_expression "(param_1[0x10] != 0) || (uVar2 < uVar3)" (parenthesized_expression "(param_1[0x10] != 0)" ( (binary_expression "param_1[0x10] != 0" (subscript_expression "param_1[0x10]" identifier [ number_literal ]) != number_literal) )) || (parenthesized_expression "(uVar2 < uVar3)" ( (binary_expression "uVar2 < uVar3" identifier < identifier) ))) )) || (parenthesized_expression "(0x7ffffffe < uVar2)" ( (binary_expression "0x7ffffffe < uVar2" number_literal < identifier) ))) )) (compound_statement "{\nLAB_0001bacc:\n                    \n      xalloc_die();\n    }" { (labeled_statement "LAB_0001bacc:\n                    \n      xalloc_die();" statement_identifier : (expression_statement "xalloc_die();" (call_expression "xalloc_die()" identifier (argument_list "()" ( ))) ;)) })) (if_statement "if ((uint)param_1[0x2b] < uVar2) {\n      param_1[0x2b] = uVar2;\n      iVar1 = xrealloc(param_1[0x2a],uVar2);\n      param_1[0x2a] = iVar1;\n    }" if (parenthesized_expression "((uint)param_1[0x2b] < uVar2)" ( (binary_expression "(uint)param_1[0x2b] < uVar2" (cast_expression "(uint)param_1[0x2b]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_1[0x2b]" identifier [ number_literal ])) < identifier) )) (compound_statement "{\n      param_1[0x2b] = uVar2;\n      iVar1 = xrealloc(param_1[0x2a],uVar2);\n      param_1[0x2a] = iVar1;\n    }" { (expression_statement "param_1[0x2b] = uVar2;" (assignment_expression "param_1[0x2b] = uVar2" (subscript_expression "param_1[0x2b]" identifier [ number_literal ]) = identifier) ;) (expression_statement "iVar1 = xrealloc(param_1[0x2a],uVar2);" (assignment_expression "iVar1 = xrealloc(param_1[0x2a],uVar2)" identifier = (call_expression "xrealloc(param_1[0x2a],uVar2)" identifier (argument_list "(param_1[0x2a],uVar2)" ( (subscript_expression "param_1[0x2a]" identifier [ number_literal ]) , identifier )))) ;) (expression_statement "param_1[0x2a] = iVar1;" (assignment_expression "param_1[0x2a] = iVar1" (subscript_expression "param_1[0x2a]" identifier [ number_literal ]) = identifier) ;) })) (expression_statement "uVar2 = param_1[0x2c];" (assignment_expression "uVar2 = param_1[0x2c]" identifier = (subscript_expression "param_1[0x2c]" identifier [ number_literal ])) ;) (if_statement "if (uVar2 <= uVar3) {\n      if (uVar3 - uVar2 == -1) {\n        return;\n      }\n      if (*(char *)((int)param_1 + 0xe9) != '\0') {\n        return;\n      }\n      FUN_0001b85c(param_1);\n      uVar2 = param_1[0x2c];\n      if (uVar2 <= uVar3) {\n        return;\n      }\n    }" if (parenthesized_expression "(uVar2 <= uVar3)" ( (binary_expression "uVar2 <= uVar3" identifier <= identifier) )) (compound_statement "{\n      if (uVar3 - uVar2 == -1) {\n        return;\n      }\n      if (*(char *)((int)param_1 + 0xe9) != '\0') {\n        return;\n      }\n      FUN_0001b85c(param_1);\n      uVar2 = param_1[0x2c];\n      if (uVar2 <= uVar3) {\n        return;\n      }\n    }" { (if_statement "if (uVar3 - uVar2 == -1) {\n        return;\n      }" if (parenthesized_expression "(uVar3 - uVar2 == -1)" ( (binary_expression "uVar3 - uVar2 == -1" (binary_expression "uVar3 - uVar2" identifier - identifier) == number_literal) )) (compound_statement "{\n        return;\n      }" { (return_statement "return;" return ;) })) (if_statement "if (*(char *)((int)param_1 + 0xe9) != '\0') {\n        return;\n      }" if (parenthesized_expression "(*(char *)((int)param_1 + 0xe9) != '\0')" ( (binary_expression "*(char *)((int)param_1 + 0xe9) != '\0'" (pointer_expression "*(char *)((int)param_1 + 0xe9)" * (cast_expression "(char *)((int)param_1 + 0xe9)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + 0xe9)" ( (binary_expression "(int)param_1 + 0xe9" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        return;\n      }" { (return_statement "return;" return ;) })) (expression_statement "FUN_0001b85c(param_1);" (call_expression "FUN_0001b85c(param_1)" identifier (argument_list "(param_1)" ( identifier ))) ;) (expression_statement "uVar2 = param_1[0x2c];" (assignment_expression "uVar2 = param_1[0x2c]" identifier = (subscript_expression "param_1[0x2c]" identifier [ number_literal ])) ;) (if_statement "if (uVar2 <= uVar3) {\n        return;\n      }" if (parenthesized_expression "(uVar2 <= uVar3)" ( (binary_expression "uVar2 <= uVar3" identifier <= identifier) )) (compound_statement "{\n        return;\n      }" { (return_statement "return;" return ;) })) })) }) (else_clause "else {\n    uVar2 = param_1[0x2c];\n  }" else (compound_statement "{\n    uVar2 = param_1[0x2c];\n  }" { (expression_statement "uVar2 = param_1[0x2c];" (assignment_expression "uVar2 = param_1[0x2c]" identifier = (subscript_expression "param_1[0x2c]" identifier [ number_literal ])) ;) }))) (if_statement "if ((param_1[0x2b] != uVar2) && (*(char *)((int)param_1 + 0xe9) == '\0')) {\n    FUN_0001b85c(param_1);\n    uVar2 = param_1[0x2c];\n  }" if (parenthesized_expression "((param_1[0x2b] != uVar2) && (*(char *)((int)param_1 + 0xe9) == '\0'))" ( (binary_expression "(param_1[0x2b] != uVar2) && (*(char *)((int)param_1 + 0xe9) == '\0')" (parenthesized_expression "(param_1[0x2b] != uVar2)" ( (binary_expression "param_1[0x2b] != uVar2" (subscript_expression "param_1[0x2b]" identifier [ number_literal ]) != identifier) )) && (parenthesized_expression "(*(char *)((int)param_1 + 0xe9) == '\0')" ( (binary_expression "*(char *)((int)param_1 + 0xe9) == '\0'" (pointer_expression "*(char *)((int)param_1 + 0xe9)" * (cast_expression "(char *)((int)param_1 + 0xe9)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + 0xe9)" ( (binary_expression "(int)param_1 + 0xe9" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) == (char_literal "'\0'" ' escape_sequence ')) ))) )) (compound_statement "{\n    FUN_0001b85c(param_1);\n    uVar2 = param_1[0x2c];\n  }" { (expression_statement "FUN_0001b85c(param_1);" (call_expression "FUN_0001b85c(param_1)" identifier (argument_list "(param_1)" ( identifier ))) ;) (expression_statement "uVar2 = param_1[0x2c];" (assignment_expression "uVar2 = param_1[0x2c]" identifier = (subscript_expression "param_1[0x2c]" identifier [ number_literal ])) ;) })) (if_statement "if (uVar2 != 0) {\n    uVar3 = param_1[0x2b];\n    while (uVar2 == uVar3) {\n      while( true ) {\n        if (0x3ffffffb < uVar2) goto LAB_0001bacc;\n        param_1[0x2b] = uVar2 << 1;\n        iVar1 = xrealloc(param_1[0x2a]);\n        uVar3 = param_1[0x2b];\n        uVar2 = param_1[0x2c];\n        param_1[0x2a] = iVar1;\n        if ((uVar3 == uVar2) || (*(char *)((int)param_1 + 0xe9) != '\0')) break;\n        FUN_0001b85c(param_1);\n        uVar2 = param_1[0x2c];\n        if (uVar2 != param_1[0x2b]) goto LAB_0001b9c0;\n      }\n    }\nLAB_0001b9c0:\n    param_1[0x2b] = uVar2 + 8 & 0xfffffffc;\n    iVar1 = xrealloc(param_1[0x2a]);\n    param_1[0x2a] = iVar1;\n  }" if (parenthesized_expression "(uVar2 != 0)" ( (binary_expression "uVar2 != 0" identifier != number_literal) )) (compound_statement "{\n    uVar3 = param_1[0x2b];\n    while (uVar2 == uVar3) {\n      while( true ) {\n        if (0x3ffffffb < uVar2) goto LAB_0001bacc;\n        param_1[0x2b] = uVar2 << 1;\n        iVar1 = xrealloc(param_1[0x2a]);\n        uVar3 = param_1[0x2b];\n        uVar2 = param_1[0x2c];\n        param_1[0x2a] = iVar1;\n        if ((uVar3 == uVar2) || (*(char *)((int)param_1 + 0xe9) != '\0')) break;\n        FUN_0001b85c(param_1);\n        uVar2 = param_1[0x2c];\n        if (uVar2 != param_1[0x2b]) goto LAB_0001b9c0;\n      }\n    }\nLAB_0001b9c0:\n    param_1[0x2b] = uVar2 + 8 & 0xfffffffc;\n    iVar1 = xrealloc(param_1[0x2a]);\n    param_1[0x2a] = iVar1;\n  }" { (expression_statement "uVar3 = param_1[0x2b];" (assignment_expression "uVar3 = param_1[0x2b]" identifier = (subscript_expression "param_1[0x2b]" identifier [ number_literal ])) ;) (while_statement "while (uVar2 == uVar3) {\n      while( true ) {\n        if (0x3ffffffb < uVar2) goto LAB_0001bacc;\n        param_1[0x2b] = uVar2 << 1;\n        iVar1 = xrealloc(param_1[0x2a]);\n        uVar3 = param_1[0x2b];\n        uVar2 = param_1[0x2c];\n        param_1[0x2a] = iVar1;\n        if ((uVar3 == uVar2) || (*(char *)((int)param_1 + 0xe9) != '\0')) break;\n        FUN_0001b85c(param_1);\n        uVar2 = param_1[0x2c];\n        if (uVar2 != param_1[0x2b]) goto LAB_0001b9c0;\n      }\n    }" while (parenthesized_expression "(uVar2 == uVar3)" ( (binary_expression "uVar2 == uVar3" identifier == identifier) )) (compound_statement "{\n      while( true ) {\n        if (0x3ffffffb < uVar2) goto LAB_0001bacc;\n        param_1[0x2b] = uVar2 << 1;\n        iVar1 = xrealloc(param_1[0x2a]);\n        uVar3 = param_1[0x2b];\n        uVar2 = param_1[0x2c];\n        param_1[0x2a] = iVar1;\n        if ((uVar3 == uVar2) || (*(char *)((int)param_1 + 0xe9) != '\0')) break;\n        FUN_0001b85c(param_1);\n        uVar2 = param_1[0x2c];\n        if (uVar2 != param_1[0x2b]) goto LAB_0001b9c0;\n      }\n    }" { (while_statement "while( true ) {\n        if (0x3ffffffb < uVar2) goto LAB_0001bacc;\n        param_1[0x2b] = uVar2 << 1;\n        iVar1 = xrealloc(param_1[0x2a]);\n        uVar3 = param_1[0x2b];\n        uVar2 = param_1[0x2c];\n        param_1[0x2a] = iVar1;\n        if ((uVar3 == uVar2) || (*(char *)((int)param_1 + 0xe9) != '\0')) break;\n        FUN_0001b85c(param_1);\n        uVar2 = param_1[0x2c];\n        if (uVar2 != param_1[0x2b]) goto LAB_0001b9c0;\n      }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n        if (0x3ffffffb < uVar2) goto LAB_0001bacc;\n        param_1[0x2b] = uVar2 << 1;\n        iVar1 = xrealloc(param_1[0x2a]);\n        uVar3 = param_1[0x2b];\n        uVar2 = param_1[0x2c];\n        param_1[0x2a] = iVar1;\n        if ((uVar3 == uVar2) || (*(char *)((int)param_1 + 0xe9) != '\0')) break;\n        FUN_0001b85c(param_1);\n        uVar2 = param_1[0x2c];\n        if (uVar2 != param_1[0x2b]) goto LAB_0001b9c0;\n      }" { (if_statement "if (0x3ffffffb < uVar2) goto LAB_0001bacc;" if (parenthesized_expression "(0x3ffffffb < uVar2)" ( (binary_expression "0x3ffffffb < uVar2" number_literal < identifier) )) (goto_statement "goto LAB_0001bacc;" goto statement_identifier ;)) (expression_statement "param_1[0x2b] = uVar2 << 1;" (assignment_expression "param_1[0x2b] = uVar2 << 1" (subscript_expression "param_1[0x2b]" identifier [ number_literal ]) = (binary_expression "uVar2 << 1" identifier << number_literal)) ;) (expression_statement "iVar1 = xrealloc(param_1[0x2a]);" (assignment_expression "iVar1 = xrealloc(param_1[0x2a])" identifier = (call_expression "xrealloc(param_1[0x2a])" identifier (argument_list "(param_1[0x2a])" ( (subscript_expression "param_1[0x2a]" identifier [ number_literal ]) )))) ;) (expression_statement "uVar3 = param_1[0x2b];" (assignment_expression "uVar3 = param_1[0x2b]" identifier = (subscript_expression "param_1[0x2b]" identifier [ number_literal ])) ;) (expression_statement "uVar2 = param_1[0x2c];" (assignment_expression "uVar2 = param_1[0x2c]" identifier = (subscript_expression "param_1[0x2c]" identifier [ number_literal ])) ;) (expression_statement "param_1[0x2a] = iVar1;" (assignment_expression "param_1[0x2a] = iVar1" (subscript_expression "param_1[0x2a]" identifier [ number_literal ]) = identifier) ;) (if_statement "if ((uVar3 == uVar2) || (*(char *)((int)param_1 + 0xe9) != '\0')) break;" if (parenthesized_expression "((uVar3 == uVar2) || (*(char *)((int)param_1 + 0xe9) != '\0'))" ( (binary_expression "(uVar3 == uVar2) || (*(char *)((int)param_1 + 0xe9) != '\0')" (parenthesized_expression "(uVar3 == uVar2)" ( (binary_expression "uVar3 == uVar2" identifier == identifier) )) || (parenthesized_expression "(*(char *)((int)param_1 + 0xe9) != '\0')" ( (binary_expression "*(char *)((int)param_1 + 0xe9) != '\0'" (pointer_expression "*(char *)((int)param_1 + 0xe9)" * (cast_expression "(char *)((int)param_1 + 0xe9)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + 0xe9)" ( (binary_expression "(int)param_1 + 0xe9" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) != (char_literal "'\0'" ' escape_sequence ')) ))) )) (break_statement "break;" break ;)) (expression_statement "FUN_0001b85c(param_1);" (call_expression "FUN_0001b85c(param_1)" identifier (argument_list "(param_1)" ( identifier ))) ;) (expression_statement "uVar2 = param_1[0x2c];" (assignment_expression "uVar2 = param_1[0x2c]" identifier = (subscript_expression "param_1[0x2c]" identifier [ number_literal ])) ;) (if_statement "if (uVar2 != param_1[0x2b]) goto LAB_0001b9c0;" if (parenthesized_expression "(uVar2 != param_1[0x2b])" ( (binary_expression "uVar2 != param_1[0x2b]" identifier != (subscript_expression "param_1[0x2b]" identifier [ number_literal ])) )) (goto_statement "goto LAB_0001b9c0;" goto statement_identifier ;)) })) })) (labeled_statement "LAB_0001b9c0:\n    param_1[0x2b] = uVar2 + 8 & 0xfffffffc;" statement_identifier : (expression_statement "param_1[0x2b] = uVar2 + 8 & 0xfffffffc;" (assignment_expression "param_1[0x2b] = uVar2 + 8 & 0xfffffffc" (subscript_expression "param_1[0x2b]" identifier [ number_literal ]) = (binary_expression "uVar2 + 8 & 0xfffffffc" (binary_expression "uVar2 + 8" identifier + number_literal) & number_literal)) ;)) (expression_statement "iVar1 = xrealloc(param_1[0x2a]);" (assignment_expression "iVar1 = xrealloc(param_1[0x2a])" identifier = (call_expression "xrealloc(param_1[0x2a])" identifier (argument_list "(param_1[0x2a])" ( (subscript_expression "param_1[0x2a]" identifier [ number_literal ]) )))) ;) (expression_statement "param_1[0x2a] = iVar1;" (assignment_expression "param_1[0x2a] = iVar1" (subscript_expression "param_1[0x2a]" identifier [ number_literal ]) = identifier) ;) })) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) < LIT) )) (compound_statement { (return_statement return ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) & LIT) )) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) != LIT) )) || (parenthesized_expression ( (binary_expression IDENT < IDENT) ))) )) || (parenthesized_expression ( (binary_expression LIT < IDENT) ))) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (call_expression IDENT (argument_list ( ))) ;)) })) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) < IDENT) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (subscript_expression IDENT [ LIT ]) , IDENT )))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) })) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT - IDENT) == LIT) )) (compound_statement { (return_statement return ;) })) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) )))) != (char_literal ' escape_sequence ')) )) (compound_statement { (return_statement return ;) })) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (compound_statement { (return_statement return ;) })) })) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) != IDENT) )) && (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) )))) == (char_literal ' escape_sequence ')) ))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (while_statement while (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (compound_statement { (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression IDENT << LIT)) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (subscript_expression IDENT [ LIT ]) )))) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == IDENT) )) || (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) )))) != (char_literal ' escape_sequence ')) ))) )) (break_statement break ;)) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (subscript_expression IDENT [ LIT ])) )) (goto_statement goto statement_identifier ;)) })) })) (labeled_statement statement_identifier : (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (binary_expression IDENT + LIT) & LIT)) ;)) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (subscript_expression IDENT [ LIT ]) )))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) })) (return_statement return ;) })))
(function_definition "void FUN_0001b8e0(int *param_1)\n\n{\n  int iVar1;\n  uint uVar2;\n  uint uVar3;\n  \n  if (*param_1 < 0) {\n    return;\n  }\n  if ((param_1[8] & 0xf000U) == 0x8000) {\n    uVar3 = param_1[0x11];\n    uVar2 = (uVar3 & 0xfffffffc) + 8;\n    if (((param_1[0x10] != 0) || (uVar2 < uVar3)) || (0x7ffffffe < uVar2)) {\nLAB_0001bacc:\n                    \n      xalloc_die();\n    }\n    if ((uint)param_1[0x2b] < uVar2) {\n      param_1[0x2b] = uVar2;\n      iVar1 = xrealloc(param_1[0x2a],uVar2);\n      param_1[0x2a] = iVar1;\n    }\n    uVar2 = param_1[0x2c];\n    if (uVar2 <= uVar3) {\n      if (uVar3 - uVar2 == -1) {\n        return;\n      }\n      if (*(char *)((int)param_1 + 0xe9) != '\0') {\n        return;\n      }\n      FUN_0001b85c(param_1);\n      uVar2 = param_1[0x2c];\n      if (uVar2 <= uVar3) {\n        return;\n      }\n    }\n  }\n  else {\n    uVar2 = param_1[0x2c];\n  }\n  if ((param_1[0x2b] != uVar2) && (*(char *)((int)param_1 + 0xe9) == '\0')) {\n    FUN_0001b85c(param_1);\n    uVar2 = param_1[0x2c];\n  }\n  if (uVar2 != 0) {\n    uVar3 = param_1[0x2b];\n    while (uVar2 == uVar3) {\n      while( true ) {\n        if (0x3ffffffb < uVar2) goto LAB_0001bacc;\n        param_1[0x2b] = uVar2 << 1;\n        iVar1 = xrealloc(param_1[0x2a]);\n        uVar3 = param_1[0x2b];\n        uVar2 = param_1[0x2c];\n        param_1[0x2a] = iVar1;\n        if ((uVar3 == uVar2) || (*(char *)((int)param_1 + 0xe9) != '\0')) break;\n        FUN_0001b85c(param_1);\n        uVar2 = param_1[0x2c];\n        if (uVar2 != param_1[0x2b]) goto LAB_0001b9c0;\n      }\n    }\nLAB_0001b9c0:\n    param_1[0x2b] = uVar2 + 8 & 0xfffffffc;\n    iVar1 = xrealloc(param_1[0x2a]);\n    param_1[0x2a] = iVar1;\n  }\n  return;\n}" (primitive_type "void") (function_declarator "FUN_0001b8e0(int *param_1)" (identifier "FUN_0001b8e0") (parameter_list "(int *param_1)" (( "(") (parameter_declaration "int *param_1" (primitive_type "int") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) () ")"))) (compound_statement "{\n  int iVar1;\n  uint uVar2;\n  uint uVar3;\n  \n  if (*param_1 < 0) {\n    return;\n  }\n  if ((param_1[8] & 0xf000U) == 0x8000) {\n    uVar3 = param_1[0x11];\n    uVar2 = (uVar3 & 0xfffffffc) + 8;\n    if (((param_1[0x10] != 0) || (uVar2 < uVar3)) || (0x7ffffffe < uVar2)) {\nLAB_0001bacc:\n                    \n      xalloc_die();\n    }\n    if ((uint)param_1[0x2b] < uVar2) {\n      param_1[0x2b] = uVar2;\n      iVar1 = xrealloc(param_1[0x2a],uVar2);\n      param_1[0x2a] = iVar1;\n    }\n    uVar2 = param_1[0x2c];\n    if (uVar2 <= uVar3) {\n      if (uVar3 - uVar2 == -1) {\n        return;\n      }\n      if (*(char *)((int)param_1 + 0xe9) != '\0') {\n        return;\n      }\n      FUN_0001b85c(param_1);\n      uVar2 = param_1[0x2c];\n      if (uVar2 <= uVar3) {\n        return;\n      }\n    }\n  }\n  else {\n    uVar2 = param_1[0x2c];\n  }\n  if ((param_1[0x2b] != uVar2) && (*(char *)((int)param_1 + 0xe9) == '\0')) {\n    FUN_0001b85c(param_1);\n    uVar2 = param_1[0x2c];\n  }\n  if (uVar2 != 0) {\n    uVar3 = param_1[0x2b];\n    while (uVar2 == uVar3) {\n      while( true ) {\n        if (0x3ffffffb < uVar2) goto LAB_0001bacc;\n        param_1[0x2b] = uVar2 << 1;\n        iVar1 = xrealloc(param_1[0x2a]);\n        uVar3 = param_1[0x2b];\n        uVar2 = param_1[0x2c];\n        param_1[0x2a] = iVar1;\n        if ((uVar3 == uVar2) || (*(char *)((int)param_1 + 0xe9) != '\0')) break;\n        FUN_0001b85c(param_1);\n        uVar2 = param_1[0x2c];\n        if (uVar2 != param_1[0x2b]) goto LAB_0001b9c0;\n      }\n    }\nLAB_0001b9c0:\n    param_1[0x2b] = uVar2 + 8 & 0xfffffffc;\n    iVar1 = xrealloc(param_1[0x2a]);\n    param_1[0x2a] = iVar1;\n  }\n  return;\n}" ({ "{") (declaration "int iVar1;" (primitive_type "int") (identifier "iVar1") (; ";")) (declaration "uint uVar2;" (type_identifier "uint") (identifier "uVar2") (; ";")) (declaration "uint uVar3;" (type_identifier "uint") (identifier "uVar3") (; ";")) (if_statement "if (*param_1 < 0) {\n    return;\n  }" (if "if") (parenthesized_expression "(*param_1 < 0)" (( "(") (binary_expression "*param_1 < 0" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (< "<") (number_literal "0")) () ")")) (compound_statement "{\n    return;\n  }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))) (if_statement "if ((param_1[8] & 0xf000U) == 0x8000) {\n    uVar3 = param_1[0x11];\n    uVar2 = (uVar3 & 0xfffffffc) + 8;\n    if (((param_1[0x10] != 0) || (uVar2 < uVar3)) || (0x7ffffffe < uVar2)) {\nLAB_0001bacc:\n                    \n      xalloc_die();\n    }\n    if ((uint)param_1[0x2b] < uVar2) {\n      param_1[0x2b] = uVar2;\n      iVar1 = xrealloc(param_1[0x2a],uVar2);\n      param_1[0x2a] = iVar1;\n    }\n    uVar2 = param_1[0x2c];\n    if (uVar2 <= uVar3) {\n      if (uVar3 - uVar2 == -1) {\n        return;\n      }\n      if (*(char *)((int)param_1 + 0xe9) != '\0') {\n        return;\n      }\n      FUN_0001b85c(param_1);\n      uVar2 = param_1[0x2c];\n      if (uVar2 <= uVar3) {\n        return;\n      }\n    }\n  }\n  else {\n    uVar2 = param_1[0x2c];\n  }" (if "if") (parenthesized_expression "((param_1[8] & 0xf000U) == 0x8000)" (( "(") (binary_expression "(param_1[8] & 0xf000U) == 0x8000" (parenthesized_expression "(param_1[8] & 0xf000U)" (( "(") (binary_expression "param_1[8] & 0xf000U" (subscript_expression "param_1[8]" (identifier "param_1") ([ "[") (number_literal "8") (] "]")) (& "&") (number_literal "0xf000U")) () ")")) (== "==") (number_literal "0x8000")) () ")")) (compound_statement "{\n    uVar3 = param_1[0x11];\n    uVar2 = (uVar3 & 0xfffffffc) + 8;\n    if (((param_1[0x10] != 0) || (uVar2 < uVar3)) || (0x7ffffffe < uVar2)) {\nLAB_0001bacc:\n                    \n      xalloc_die();\n    }\n    if ((uint)param_1[0x2b] < uVar2) {\n      param_1[0x2b] = uVar2;\n      iVar1 = xrealloc(param_1[0x2a],uVar2);\n      param_1[0x2a] = iVar1;\n    }\n    uVar2 = param_1[0x2c];\n    if (uVar2 <= uVar3) {\n      if (uVar3 - uVar2 == -1) {\n        return;\n      }\n      if (*(char *)((int)param_1 + 0xe9) != '\0') {\n        return;\n      }\n      FUN_0001b85c(param_1);\n      uVar2 = param_1[0x2c];\n      if (uVar2 <= uVar3) {\n        return;\n      }\n    }\n  }" ({ "{") (expression_statement "uVar3 = param_1[0x11];" (assignment_expression "uVar3 = param_1[0x11]" (identifier "uVar3") (= "=") (subscript_expression "param_1[0x11]" (identifier "param_1") ([ "[") (number_literal "0x11") (] "]"))) (; ";")) (expression_statement "uVar2 = (uVar3 & 0xfffffffc) + 8;" (assignment_expression "uVar2 = (uVar3 & 0xfffffffc) + 8" (identifier "uVar2") (= "=") (binary_expression "(uVar3 & 0xfffffffc) + 8" (parenthesized_expression "(uVar3 & 0xfffffffc)" (( "(") (binary_expression "uVar3 & 0xfffffffc" (identifier "uVar3") (& "&") (number_literal "0xfffffffc")) () ")")) (+ "+") (number_literal "8"))) (; ";")) (if_statement "if (((param_1[0x10] != 0) || (uVar2 < uVar3)) || (0x7ffffffe < uVar2)) {\nLAB_0001bacc:\n                    \n      xalloc_die();\n    }" (if "if") (parenthesized_expression "(((param_1[0x10] != 0) || (uVar2 < uVar3)) || (0x7ffffffe < uVar2))" (( "(") (binary_expression "((param_1[0x10] != 0) || (uVar2 < uVar3)) || (0x7ffffffe < uVar2)" (parenthesized_expression "((param_1[0x10] != 0) || (uVar2 < uVar3))" (( "(") (binary_expression "(param_1[0x10] != 0) || (uVar2 < uVar3)" (parenthesized_expression "(param_1[0x10] != 0)" (( "(") (binary_expression "param_1[0x10] != 0" (subscript_expression "param_1[0x10]" (identifier "param_1") ([ "[") (number_literal "0x10") (] "]")) (!= "!=") (number_literal "0")) () ")")) (|| "||") (parenthesized_expression "(uVar2 < uVar3)" (( "(") (binary_expression "uVar2 < uVar3" (identifier "uVar2") (< "<") (identifier "uVar3")) () ")"))) () ")")) (|| "||") (parenthesized_expression "(0x7ffffffe < uVar2)" (( "(") (binary_expression "0x7ffffffe < uVar2" (number_literal "0x7ffffffe") (< "<") (identifier "uVar2")) () ")"))) () ")")) (compound_statement "{\nLAB_0001bacc:\n                    \n      xalloc_die();\n    }" ({ "{") (labeled_statement "LAB_0001bacc:\n                    \n      xalloc_die();" (statement_identifier "LAB_0001bacc") (: ":") (expression_statement "xalloc_die();" (call_expression "xalloc_die()" (identifier "xalloc_die") (argument_list "()" (( "(") () ")"))) (; ";"))) (} "}"))) (if_statement "if ((uint)param_1[0x2b] < uVar2) {\n      param_1[0x2b] = uVar2;\n      iVar1 = xrealloc(param_1[0x2a],uVar2);\n      param_1[0x2a] = iVar1;\n    }" (if "if") (parenthesized_expression "((uint)param_1[0x2b] < uVar2)" (( "(") (binary_expression "(uint)param_1[0x2b] < uVar2" (cast_expression "(uint)param_1[0x2b]" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (subscript_expression "param_1[0x2b]" (identifier "param_1") ([ "[") (number_literal "0x2b") (] "]"))) (< "<") (identifier "uVar2")) () ")")) (compound_statement "{\n      param_1[0x2b] = uVar2;\n      iVar1 = xrealloc(param_1[0x2a],uVar2);\n      param_1[0x2a] = iVar1;\n    }" ({ "{") (expression_statement "param_1[0x2b] = uVar2;" (assignment_expression "param_1[0x2b] = uVar2" (subscript_expression "param_1[0x2b]" (identifier "param_1") ([ "[") (number_literal "0x2b") (] "]")) (= "=") (identifier "uVar2")) (; ";")) (expression_statement "iVar1 = xrealloc(param_1[0x2a],uVar2);" (assignment_expression "iVar1 = xrealloc(param_1[0x2a],uVar2)" (identifier "iVar1") (= "=") (call_expression "xrealloc(param_1[0x2a],uVar2)" (identifier "xrealloc") (argument_list "(param_1[0x2a],uVar2)" (( "(") (subscript_expression "param_1[0x2a]" (identifier "param_1") ([ "[") (number_literal "0x2a") (] "]")) (, ",") (identifier "uVar2") () ")")))) (; ";")) (expression_statement "param_1[0x2a] = iVar1;" (assignment_expression "param_1[0x2a] = iVar1" (subscript_expression "param_1[0x2a]" (identifier "param_1") ([ "[") (number_literal "0x2a") (] "]")) (= "=") (identifier "iVar1")) (; ";")) (} "}"))) (expression_statement "uVar2 = param_1[0x2c];" (assignment_expression "uVar2 = param_1[0x2c]" (identifier "uVar2") (= "=") (subscript_expression "param_1[0x2c]" (identifier "param_1") ([ "[") (number_literal "0x2c") (] "]"))) (; ";")) (if_statement "if (uVar2 <= uVar3) {\n      if (uVar3 - uVar2 == -1) {\n        return;\n      }\n      if (*(char *)((int)param_1 + 0xe9) != '\0') {\n        return;\n      }\n      FUN_0001b85c(param_1);\n      uVar2 = param_1[0x2c];\n      if (uVar2 <= uVar3) {\n        return;\n      }\n    }" (if "if") (parenthesized_expression "(uVar2 <= uVar3)" (( "(") (binary_expression "uVar2 <= uVar3" (identifier "uVar2") (<= "<=") (identifier "uVar3")) () ")")) (compound_statement "{\n      if (uVar3 - uVar2 == -1) {\n        return;\n      }\n      if (*(char *)((int)param_1 + 0xe9) != '\0') {\n        return;\n      }\n      FUN_0001b85c(param_1);\n      uVar2 = param_1[0x2c];\n      if (uVar2 <= uVar3) {\n        return;\n      }\n    }" ({ "{") (if_statement "if (uVar3 - uVar2 == -1) {\n        return;\n      }" (if "if") (parenthesized_expression "(uVar3 - uVar2 == -1)" (( "(") (binary_expression "uVar3 - uVar2 == -1" (binary_expression "uVar3 - uVar2" (identifier "uVar3") (- "-") (identifier "uVar2")) (== "==") (number_literal "-1")) () ")")) (compound_statement "{\n        return;\n      }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))) (if_statement "if (*(char *)((int)param_1 + 0xe9) != '\0') {\n        return;\n      }" (if "if") (parenthesized_expression "(*(char *)((int)param_1 + 0xe9) != '\0')" (( "(") (binary_expression "*(char *)((int)param_1 + 0xe9) != '\0'" (pointer_expression "*(char *)((int)param_1 + 0xe9)" (* "*") (cast_expression "(char *)((int)param_1 + 0xe9)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)param_1 + 0xe9)" (( "(") (binary_expression "(int)param_1 + 0xe9" (cast_expression "(int)param_1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_1")) (+ "+") (number_literal "0xe9")) () ")")))) (!= "!=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n        return;\n      }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))) (expression_statement "FUN_0001b85c(param_1);" (call_expression "FUN_0001b85c(param_1)" (identifier "FUN_0001b85c") (argument_list "(param_1)" (( "(") (identifier "param_1") () ")"))) (; ";")) (expression_statement "uVar2 = param_1[0x2c];" (assignment_expression "uVar2 = param_1[0x2c]" (identifier "uVar2") (= "=") (subscript_expression "param_1[0x2c]" (identifier "param_1") ([ "[") (number_literal "0x2c") (] "]"))) (; ";")) (if_statement "if (uVar2 <= uVar3) {\n        return;\n      }" (if "if") (parenthesized_expression "(uVar2 <= uVar3)" (( "(") (binary_expression "uVar2 <= uVar3" (identifier "uVar2") (<= "<=") (identifier "uVar3")) () ")")) (compound_statement "{\n        return;\n      }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))) (} "}"))) (} "}")) (else_clause "else {\n    uVar2 = param_1[0x2c];\n  }" (else "else") (compound_statement "{\n    uVar2 = param_1[0x2c];\n  }" ({ "{") (expression_statement "uVar2 = param_1[0x2c];" (assignment_expression "uVar2 = param_1[0x2c]" (identifier "uVar2") (= "=") (subscript_expression "param_1[0x2c]" (identifier "param_1") ([ "[") (number_literal "0x2c") (] "]"))) (; ";")) (} "}")))) (if_statement "if ((param_1[0x2b] != uVar2) && (*(char *)((int)param_1 + 0xe9) == '\0')) {\n    FUN_0001b85c(param_1);\n    uVar2 = param_1[0x2c];\n  }" (if "if") (parenthesized_expression "((param_1[0x2b] != uVar2) && (*(char *)((int)param_1 + 0xe9) == '\0'))" (( "(") (binary_expression "(param_1[0x2b] != uVar2) && (*(char *)((int)param_1 + 0xe9) == '\0')" (parenthesized_expression "(param_1[0x2b] != uVar2)" (( "(") (binary_expression "param_1[0x2b] != uVar2" (subscript_expression "param_1[0x2b]" (identifier "param_1") ([ "[") (number_literal "0x2b") (] "]")) (!= "!=") (identifier "uVar2")) () ")")) (&& "&&") (parenthesized_expression "(*(char *)((int)param_1 + 0xe9) == '\0')" (( "(") (binary_expression "*(char *)((int)param_1 + 0xe9) == '\0'" (pointer_expression "*(char *)((int)param_1 + 0xe9)" (* "*") (cast_expression "(char *)((int)param_1 + 0xe9)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)param_1 + 0xe9)" (( "(") (binary_expression "(int)param_1 + 0xe9" (cast_expression "(int)param_1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_1")) (+ "+") (number_literal "0xe9")) () ")")))) (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")"))) () ")")) (compound_statement "{\n    FUN_0001b85c(param_1);\n    uVar2 = param_1[0x2c];\n  }" ({ "{") (expression_statement "FUN_0001b85c(param_1);" (call_expression "FUN_0001b85c(param_1)" (identifier "FUN_0001b85c") (argument_list "(param_1)" (( "(") (identifier "param_1") () ")"))) (; ";")) (expression_statement "uVar2 = param_1[0x2c];" (assignment_expression "uVar2 = param_1[0x2c]" (identifier "uVar2") (= "=") (subscript_expression "param_1[0x2c]" (identifier "param_1") ([ "[") (number_literal "0x2c") (] "]"))) (; ";")) (} "}"))) (if_statement "if (uVar2 != 0) {\n    uVar3 = param_1[0x2b];\n    while (uVar2 == uVar3) {\n      while( true ) {\n        if (0x3ffffffb < uVar2) goto LAB_0001bacc;\n        param_1[0x2b] = uVar2 << 1;\n        iVar1 = xrealloc(param_1[0x2a]);\n        uVar3 = param_1[0x2b];\n        uVar2 = param_1[0x2c];\n        param_1[0x2a] = iVar1;\n        if ((uVar3 == uVar2) || (*(char *)((int)param_1 + 0xe9) != '\0')) break;\n        FUN_0001b85c(param_1);\n        uVar2 = param_1[0x2c];\n        if (uVar2 != param_1[0x2b]) goto LAB_0001b9c0;\n      }\n    }\nLAB_0001b9c0:\n    param_1[0x2b] = uVar2 + 8 & 0xfffffffc;\n    iVar1 = xrealloc(param_1[0x2a]);\n    param_1[0x2a] = iVar1;\n  }" (if "if") (parenthesized_expression "(uVar2 != 0)" (( "(") (binary_expression "uVar2 != 0" (identifier "uVar2") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    uVar3 = param_1[0x2b];\n    while (uVar2 == uVar3) {\n      while( true ) {\n        if (0x3ffffffb < uVar2) goto LAB_0001bacc;\n        param_1[0x2b] = uVar2 << 1;\n        iVar1 = xrealloc(param_1[0x2a]);\n        uVar3 = param_1[0x2b];\n        uVar2 = param_1[0x2c];\n        param_1[0x2a] = iVar1;\n        if ((uVar3 == uVar2) || (*(char *)((int)param_1 + 0xe9) != '\0')) break;\n        FUN_0001b85c(param_1);\n        uVar2 = param_1[0x2c];\n        if (uVar2 != param_1[0x2b]) goto LAB_0001b9c0;\n      }\n    }\nLAB_0001b9c0:\n    param_1[0x2b] = uVar2 + 8 & 0xfffffffc;\n    iVar1 = xrealloc(param_1[0x2a]);\n    param_1[0x2a] = iVar1;\n  }" ({ "{") (expression_statement "uVar3 = param_1[0x2b];" (assignment_expression "uVar3 = param_1[0x2b]" (identifier "uVar3") (= "=") (subscript_expression "param_1[0x2b]" (identifier "param_1") ([ "[") (number_literal "0x2b") (] "]"))) (; ";")) (while_statement "while (uVar2 == uVar3) {\n      while( true ) {\n        if (0x3ffffffb < uVar2) goto LAB_0001bacc;\n        param_1[0x2b] = uVar2 << 1;\n        iVar1 = xrealloc(param_1[0x2a]);\n        uVar3 = param_1[0x2b];\n        uVar2 = param_1[0x2c];\n        param_1[0x2a] = iVar1;\n        if ((uVar3 == uVar2) || (*(char *)((int)param_1 + 0xe9) != '\0')) break;\n        FUN_0001b85c(param_1);\n        uVar2 = param_1[0x2c];\n        if (uVar2 != param_1[0x2b]) goto LAB_0001b9c0;\n      }\n    }" (while "while") (parenthesized_expression "(uVar2 == uVar3)" (( "(") (binary_expression "uVar2 == uVar3" (identifier "uVar2") (== "==") (identifier "uVar3")) () ")")) (compound_statement "{\n      while( true ) {\n        if (0x3ffffffb < uVar2) goto LAB_0001bacc;\n        param_1[0x2b] = uVar2 << 1;\n        iVar1 = xrealloc(param_1[0x2a]);\n        uVar3 = param_1[0x2b];\n        uVar2 = param_1[0x2c];\n        param_1[0x2a] = iVar1;\n        if ((uVar3 == uVar2) || (*(char *)((int)param_1 + 0xe9) != '\0')) break;\n        FUN_0001b85c(param_1);\n        uVar2 = param_1[0x2c];\n        if (uVar2 != param_1[0x2b]) goto LAB_0001b9c0;\n      }\n    }" ({ "{") (while_statement "while( true ) {\n        if (0x3ffffffb < uVar2) goto LAB_0001bacc;\n        param_1[0x2b] = uVar2 << 1;\n        iVar1 = xrealloc(param_1[0x2a]);\n        uVar3 = param_1[0x2b];\n        uVar2 = param_1[0x2c];\n        param_1[0x2a] = iVar1;\n        if ((uVar3 == uVar2) || (*(char *)((int)param_1 + 0xe9) != '\0')) break;\n        FUN_0001b85c(param_1);\n        uVar2 = param_1[0x2c];\n        if (uVar2 != param_1[0x2b]) goto LAB_0001b9c0;\n      }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n        if (0x3ffffffb < uVar2) goto LAB_0001bacc;\n        param_1[0x2b] = uVar2 << 1;\n        iVar1 = xrealloc(param_1[0x2a]);\n        uVar3 = param_1[0x2b];\n        uVar2 = param_1[0x2c];\n        param_1[0x2a] = iVar1;\n        if ((uVar3 == uVar2) || (*(char *)((int)param_1 + 0xe9) != '\0')) break;\n        FUN_0001b85c(param_1);\n        uVar2 = param_1[0x2c];\n        if (uVar2 != param_1[0x2b]) goto LAB_0001b9c0;\n      }" ({ "{") (if_statement "if (0x3ffffffb < uVar2) goto LAB_0001bacc;" (if "if") (parenthesized_expression "(0x3ffffffb < uVar2)" (( "(") (binary_expression "0x3ffffffb < uVar2" (number_literal "0x3ffffffb") (< "<") (identifier "uVar2")) () ")")) (goto_statement "goto LAB_0001bacc;" (goto "goto") (statement_identifier "LAB_0001bacc") (; ";"))) (expression_statement "param_1[0x2b] = uVar2 << 1;" (assignment_expression "param_1[0x2b] = uVar2 << 1" (subscript_expression "param_1[0x2b]" (identifier "param_1") ([ "[") (number_literal "0x2b") (] "]")) (= "=") (binary_expression "uVar2 << 1" (identifier "uVar2") (<< "<<") (number_literal "1"))) (; ";")) (expression_statement "iVar1 = xrealloc(param_1[0x2a]);" (assignment_expression "iVar1 = xrealloc(param_1[0x2a])" (identifier "iVar1") (= "=") (call_expression "xrealloc(param_1[0x2a])" (identifier "xrealloc") (argument_list "(param_1[0x2a])" (( "(") (subscript_expression "param_1[0x2a]" (identifier "param_1") ([ "[") (number_literal "0x2a") (] "]")) () ")")))) (; ";")) (expression_statement "uVar3 = param_1[0x2b];" (assignment_expression "uVar3 = param_1[0x2b]" (identifier "uVar3") (= "=") (subscript_expression "param_1[0x2b]" (identifier "param_1") ([ "[") (number_literal "0x2b") (] "]"))) (; ";")) (expression_statement "uVar2 = param_1[0x2c];" (assignment_expression "uVar2 = param_1[0x2c]" (identifier "uVar2") (= "=") (subscript_expression "param_1[0x2c]" (identifier "param_1") ([ "[") (number_literal "0x2c") (] "]"))) (; ";")) (expression_statement "param_1[0x2a] = iVar1;" (assignment_expression "param_1[0x2a] = iVar1" (subscript_expression "param_1[0x2a]" (identifier "param_1") ([ "[") (number_literal "0x2a") (] "]")) (= "=") (identifier "iVar1")) (; ";")) (if_statement "if ((uVar3 == uVar2) || (*(char *)((int)param_1 + 0xe9) != '\0')) break;" (if "if") (parenthesized_expression "((uVar3 == uVar2) || (*(char *)((int)param_1 + 0xe9) != '\0'))" (( "(") (binary_expression "(uVar3 == uVar2) || (*(char *)((int)param_1 + 0xe9) != '\0')" (parenthesized_expression "(uVar3 == uVar2)" (( "(") (binary_expression "uVar3 == uVar2" (identifier "uVar3") (== "==") (identifier "uVar2")) () ")")) (|| "||") (parenthesized_expression "(*(char *)((int)param_1 + 0xe9) != '\0')" (( "(") (binary_expression "*(char *)((int)param_1 + 0xe9) != '\0'" (pointer_expression "*(char *)((int)param_1 + 0xe9)" (* "*") (cast_expression "(char *)((int)param_1 + 0xe9)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)param_1 + 0xe9)" (( "(") (binary_expression "(int)param_1 + 0xe9" (cast_expression "(int)param_1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_1")) (+ "+") (number_literal "0xe9")) () ")")))) (!= "!=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")"))) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "FUN_0001b85c(param_1);" (call_expression "FUN_0001b85c(param_1)" (identifier "FUN_0001b85c") (argument_list "(param_1)" (( "(") (identifier "param_1") () ")"))) (; ";")) (expression_statement "uVar2 = param_1[0x2c];" (assignment_expression "uVar2 = param_1[0x2c]" (identifier "uVar2") (= "=") (subscript_expression "param_1[0x2c]" (identifier "param_1") ([ "[") (number_literal "0x2c") (] "]"))) (; ";")) (if_statement "if (uVar2 != param_1[0x2b]) goto LAB_0001b9c0;" (if "if") (parenthesized_expression "(uVar2 != param_1[0x2b])" (( "(") (binary_expression "uVar2 != param_1[0x2b]" (identifier "uVar2") (!= "!=") (subscript_expression "param_1[0x2b]" (identifier "param_1") ([ "[") (number_literal "0x2b") (] "]"))) () ")")) (goto_statement "goto LAB_0001b9c0;" (goto "goto") (statement_identifier "LAB_0001b9c0") (; ";"))) (} "}"))) (} "}"))) (labeled_statement "LAB_0001b9c0:\n    param_1[0x2b] = uVar2 + 8 & 0xfffffffc;" (statement_identifier "LAB_0001b9c0") (: ":") (expression_statement "param_1[0x2b] = uVar2 + 8 & 0xfffffffc;" (assignment_expression "param_1[0x2b] = uVar2 + 8 & 0xfffffffc" (subscript_expression "param_1[0x2b]" (identifier "param_1") ([ "[") (number_literal "0x2b") (] "]")) (= "=") (binary_expression "uVar2 + 8 & 0xfffffffc" (binary_expression "uVar2 + 8" (identifier "uVar2") (+ "+") (number_literal "8")) (& "&") (number_literal "0xfffffffc"))) (; ";"))) (expression_statement "iVar1 = xrealloc(param_1[0x2a]);" (assignment_expression "iVar1 = xrealloc(param_1[0x2a])" (identifier "iVar1") (= "=") (call_expression "xrealloc(param_1[0x2a])" (identifier "xrealloc") (argument_list "(param_1[0x2a])" (( "(") (subscript_expression "param_1[0x2a]" (identifier "param_1") ([ "[") (number_literal "0x2a") (] "]")) () ")")))) (; ";")) (expression_statement "param_1[0x2a] = iVar1;" (assignment_expression "param_1[0x2a] = iVar1" (subscript_expression "param_1[0x2a]" (identifier "param_1") ([ "[") (number_literal "0x2a") (] "]")) (= "=") (identifier "iVar1")) (; ";")) (} "}"))) (return_statement "return;" (return "return") (; ";")) (} "}")))
(translation_unit (function_definition type: (primitive_type) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))))) body: (compound_statement (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) consequence: (compound_statement (return_statement))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) right: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))))) right: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))))) consequence: (compound_statement (labeled_statement label: (statement_identifier) (expression_statement (call_expression function: (identifier) arguments: (argument_list)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (subscript_expression argument: (identifier) index: (number_literal))) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (subscript_expression argument: (identifier) index: (number_literal)) (identifier))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (number_literal))) consequence: (compound_statement (return_statement))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal))))) right: (char_literal (escape_sequence)))) consequence: (compound_statement (return_statement))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (return_statement)))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) right: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal))))) right: (char_literal (escape_sequence)))))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (while_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) body: (compound_statement (while_statement condition: (parenthesized_expression (true)) body: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (subscript_expression argument: (identifier) index: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal))))) right: (char_literal (escape_sequence)))))) consequence: (break_statement)) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) consequence: (goto_statement label: (statement_identifier))))))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (subscript_expression argument: (identifier) index: (number_literal)))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))))) (return_statement))))

void MASKED(int *param_1)

{
  int iVar1;
  uint uVar2;
  uint uVar3;
  
  if (*param_1 < 0) {
    return;
  }
  if ((param_1[8] & 0xf000U) == 0x8000) {
    uVar3 = param_1[0x11];
    uVar2 = (uVar3 & 0xfffffffc) + 8;
    if (((param_1[0x10] != 0) || (uVar2 < uVar3)) || (0x7ffffffe < uVar2)) {
LAB_0001bacc:
                    /* WARNING: Subroutine does not return */
      xalloc_die();
    }
    if ((uint)param_1[0x2b] < uVar2) {
      param_1[0x2b] = uVar2;
      iVar1 = xrealloc(param_1[0x2a],uVar2);
      param_1[0x2a] = iVar1;
    }
    uVar2 = param_1[0x2c];
    if (uVar2 <= uVar3) {
      if (uVar3 - uVar2 == -1) {
        return;
      }
      if (*(char *)((int)param_1 + 0xe9) != '\0') {
        return;
      }
      FUN_0001b85c(param_1);
      uVar2 = param_1[0x2c];
      if (uVar2 <= uVar3) {
        return;
      }
    }
  }
  else {
    uVar2 = param_1[0x2c];
  }
  if ((param_1[0x2b] != uVar2) && (*(char *)((int)param_1 + 0xe9) == '\0')) {
    FUN_0001b85c(param_1);
    uVar2 = param_1[0x2c];
  }
  if (uVar2 != 0) {
    uVar3 = param_1[0x2b];
    while (uVar2 == uVar3) {
      while( true ) {
        if (0x3ffffffb < uVar2) goto LAB_0001bacc;
        param_1[0x2b] = uVar2 << 1;
        iVar1 = xrealloc(param_1[0x2a]);
        uVar3 = param_1[0x2b];
        uVar2 = param_1[0x2c];
        param_1[0x2a] = iVar1;
        if ((uVar3 == uVar2) || (*(char *)((int)param_1 + 0xe9) != '\0')) break;
        FUN_0001b85c(param_1);
        uVar2 = param_1[0x2c];
        if (uVar2 != param_1[0x2b]) goto LAB_0001b9c0;
      }
    }
LAB_0001b9c0:
    param_1[0x2b] = uVar2 + 8 & 0xfffffffc;
    iVar1 = xrealloc(param_1[0x2a]);
    param_1[0x2a] = iVar1;
  }
  return;
}

