
/* WARNING: Type propagation algorithm not settling */

SrcList * sqlite3SrcListEnlarge(Parse *pParse,SrcList *pSrc,int nExtra,int iStart)

{
  SrcList_item *pSVar1;
  SrcList_item *pSVar2;
  SrcList_item *pSVar3;
  Select *pSVar4;
  anon_union_4_2_996c0f8d_for_u1 *paVar5;
  int iVar6;
  SrcList_item *pSVar7;
  uint uVar8;
  SrcList_item *pSVar9;
  uint uVar10;
  char *pcVar11;
  char *pcVar12;
  char *pcVar13;
  int iVar14;
  undefined1 *puVar15;
  undefined4 in_stack_ffffffe4;
  
  puVar15 = &_gp;
  uVar8 = pSrc->nSrc;
  if (pSrc->nAlloc < uVar8 + nExtra) {
    uVar10 = uVar8 * 2 + nExtra;
    iVar6 = (uint)(uVar10 < uVar8 * 2) +
            (uVar8 >> 0x1f | ((int)uVar8 >> 0x1f) << 1) + (nExtra >> 0x1f);
    if (199 < (int)(uVar8 + nExtra)) {
      sqlite3ErrorMsg(pParse,PTR_s_EFIRSTFOLLOWINGFROMFULLIMITIFORD_000f62d4 + -0x7440,200);
      return (SrcList *)0x0;
    }
    if ((0 < iVar6) || ((iVar6 == 0 && (200 < uVar10)))) {
      uVar10 = 200;
    }
    puVar15 = &_gp;
    pSrc = (SrcList *)sqlite3DbRealloc(pParse->db,pSrc,CONCAT44(&_gp,in_stack_ffffffe4));
    if (pSrc == (SrcList *)0x0) {
      return (SrcList *)0x0;
    }
    pSrc->nAlloc = uVar10;
  }
  iVar14 = pSrc->nSrc;
  iVar6 = iVar14 + -1;
  if (iStart <= iVar6) {
    paVar5 = &pSrc->a[iVar14 + -1].u1;
    pSVar9 = pSrc->a + nExtra + iVar14 + -1;
    do {
      pSVar3 = (SrcList_item *)(paVar5 + -0x10);
      pSVar1 = pSVar9;
      do {
        pSVar7 = pSVar1;
        pSVar2 = pSVar3;
        pcVar13 = pSVar2->zDatabase;
        pcVar12 = pSVar2->zName;
        pcVar11 = pSVar2->zAlias;
        pSVar7->pSchema = pSVar2->pSchema;
        pSVar7->zDatabase = pcVar13;
        pSVar7->zName = pcVar12;
        pSVar7->zAlias = pcVar11;
        pSVar3 = (SrcList_item *)&pSVar2->pTab;
        pSVar1 = (SrcList_item *)&pSVar7->pTab;
      } while (pSVar3 != (SrcList_item *)paVar5);
      pSVar4 = pSVar2->pSelect;
      pSVar7->pTab = *(Table **)pSVar3;
      pSVar7->pSelect = pSVar4;
      iVar6 = iVar6 + -1;
      paVar5 = paVar5 + -0x12;
      pSVar9 = pSVar9 + -1;
    } while (iStart <= iVar6);
  }
  pSrc->nSrc = iVar14 + nExtra;
  (**(code **)(puVar15 + -0x7e54))(pSrc->a + iStart,0,nExtra * 0x48);
  paVar5 = &pSrc->a[iStart + -1].u1;
  if (iStart < nExtra + iStart) {
    iVar6 = 0;
    do {
      paVar5[0xc] = (anon_union_4_2_996c0f8d_for_u1)0xffffffff;
      iVar6 = iVar6 + 1;
      paVar5 = paVar5 + 0x12;
    } while (iVar6 != (nExtra + iStart) - iStart);
  }
  return pSrc;
}



uint * FUN_0004fe7c(undefined4 *param_1,uint *param_2,int param_3,int param_4)

{
  bool bVar1;
  uint *puVar2;
  uint *puVar3;
  uint *puVar4;
  uint *puVar5;
  int iVar6;
  uint *puVar7;
  uint uVar8;
  uint *puVar9;
  uint uVar10;
  uint uVar11;
  uint uVar12;
  
  uVar8 = *param_2;
  if (uVar8 + param_3 <= param_2[1]) goto LAB_0004ff80;
  uVar10 = uVar8 * 2 + param_3;
  iVar6 = (uint)(uVar10 < uVar8 * 2) +
          (uVar8 >> 0x1f | ((int)uVar8 >> 0x1f) << 1) + (param_3 >> 0x1f);
  if (199 < (int)(uVar8 + param_3)) {
    FUN_0004d4d8(param_1,PTR_s_EFIRSTFOLLOWINGFROMFULLIMITIFORD_000f62d4 + -0x7440,200);
    return (uint *)0x0;
  }
  if (iVar6 < 1) {
    uVar8 = uVar10 - 1;
    if (iVar6 != 0) goto LAB_0004ff10;
    bVar1 = uVar8 < uVar10;
    if (200 < uVar10) goto LAB_0004ff08;
  }
  else {
LAB_0004ff08:
    iVar6 = 0;
    uVar10 = 200;
    uVar8 = 199;
LAB_0004ff10:
    bVar1 = uVar8 < uVar10;
  }
  iVar6 = (uint)bVar1 + iVar6 + -1;
  param_2 = (uint *)FUN_000390c4(*param_1,param_2,
                                 (uint)(uVar8 * 0x48 + 0x50 < uVar8 * 0x48) +
                                 (uVar8 * 9 >> 0x1d |
                                 ((uint)(uVar8 * 9 < uVar8 * 8) +
                                 (uVar8 >> 0x1d | iVar6 * 8) + iVar6) * 8));
  if (param_2 == (uint *)0x0) {
    return (uint *)0x0;
  }
  param_2[1] = uVar10;
LAB_0004ff80:
  uVar8 = *param_2;
  iVar6 = uVar8 - 1;
  if (param_4 <= iVar6) {
    puVar5 = param_2 + uVar8 * 0x12;
    puVar9 = param_2 + (param_3 + uVar8) * 0x12 + -0x10;
    do {
      puVar4 = puVar5 + -0x10;
      puVar2 = puVar9;
      do {
        puVar7 = puVar2;
        puVar3 = puVar4;
        uVar12 = puVar3[1];
        uVar11 = puVar3[2];
        uVar10 = puVar3[3];
        *puVar7 = *puVar3;
        puVar7[1] = uVar12;
        puVar7[2] = uVar11;
        puVar7[3] = uVar10;
        puVar4 = puVar3 + 4;
        puVar2 = puVar7 + 4;
      } while (puVar4 != puVar5);
      uVar10 = puVar3[5];
      puVar7[4] = *puVar4;
      puVar7[5] = uVar10;
      iVar6 = iVar6 + -1;
      puVar5 = puVar5 + -0x12;
      puVar9 = puVar9 + -0x12;
    } while (param_4 <= iVar6);
  }
  *param_2 = uVar8 + param_3;
  (*(code *)PTR_memset_000f644c)(param_2 + param_4 * 0x12 + 2,0,param_3 * 0x48);
  puVar5 = param_2 + param_4 * 0x12;
  if (param_4 < param_3 + param_4) {
    iVar6 = 0;
    do {
      puVar5[0xc] = 0xffffffff;
      iVar6 = iVar6 + 1;
      puVar5 = puVar5 + 0x12;
    } while (iVar6 != (param_3 + param_4) - param_4);
  }
  return param_2;
}


lui gp,0xb
addiu gp,gp,-0x1bdc
addu gp,gp,t9
addiu sp,sp,-0x30
sw ra,0x2c(sp)
sw s3,0x28(sp)
sw s2,0x24(sp)
sw s1,0x20(sp)
sw s0,0x1c(sp)
sw gp,0x10(sp)
or s0,a1,zero
or s2,a2,zero
lw a1,0x0(a1)
addu v0,a1,a2
lw v1,0x4(s0)
sltu v0,v1,v0
beq v0,zero,0x0004ff80
_or s1,a3,zero
sra a2,a1,0x1f
srl v0,a1,0x1f
sll a2,a2,0x1
or a2,v0,a2
sll v0,a1,0x1
sra v1,s2,0x1f
addu a3,v0,s2
sltu v0,a3,v0
addu v1,a2,v1
addu v1,v0,v1
addu a1,a1,s2
slti a1,a1,0xc8
beq a1,zero,0x0005009c
_lw t0,0x0(a0)
blez v1,0x000500c4
_or s3,a3,zero
or v1,zero,zero
li s3,0xc8
addiu v0,s3,-0x1
sltu a3,v0,s3
addiu v1,v1,-0x1
addu v1,a3,v1
srl a0,v0,0x1d
sll a3,v1,0x3
or a3,a0,a3
sll a1,v0,0x3
addu v0,a1,v0
sltu a2,v0,a1
addu a3,a3,v1
addu a2,a2,a3
srl v1,v0,0x1d
sll a2,a2,0x3
or a2,v1,a2
sll v0,v0,0x3
addiu a3,v0,0x50
sltu v0,a3,v0
addu a2,v0,a2
or a1,s0,zero
or a0,t0,zero
lw t9,-0x7f90(gp)
addiu t9,t9,-0x6f3c
bal 0x000390c4
_nop
lw gp,0x10(sp)
beq v0,zero,0x0005007c
_or s0,v0,zero
sw s3,0x4(v0)
lw t4,0x0(s0)
addiu t3,t4,-0x1
slt v0,t3,s1
bne v0,zero,0x00050014
_sll a0,t4,0x3
addu a0,a0,t4
sll a0,a0,0x3
addu a0,s0,a0
addu v0,s2,t4
sll a1,v0,0x3
addu a1,a1,v0
sll a1,a1,0x3
addiu a1,a1,-0x40
addu a1,s0,a1
addiu v0,a0,-0x40
or v1,a1,zero
or a2,a0,zero
lw t2,0x0(v0)
lw t1,0x4(v0)
lw t0,0x8(v0)
lw a3,0xc(v0)
sw t2,0x0(v1)
sw t1,0x4(v1)
sw t0,0x8(v1)
sw a3,0xc(v1)
addiu v0,v0,0x10
bne v0,a2,0x0004ffc4
_addiu v1,v1,0x10
lw a2,0x0(v0)
lw v0,0x4(v0)
sw a2,0x0(v1)
sw v0,0x4(v1)
addiu t3,t3,-0x1
addiu a0,a0,-0x48
slt v0,t3,s1
beq v0,zero,0x0004ffb8
_addiu a1,a1,-0x48
addu t4,t4,s2
sw t4,0x0(s0)
sll v0,s1,0x3
addu v0,v0,s1
sll s3,v0,0x3
sll a2,s2,0x3
addu a2,a2,s2
addiu a0,s3,0x8
sll a2,a2,0x3
or a1,zero,zero
addu a0,s0,a0
lw t9,-0x7e54(gp)
jalr t9
_nop
lw gp,0x10(sp)
addu s2,s2,s1
slt v0,s1,s2
beq v0,zero,0x0005007c
_addu v0,s0,s3
subu s1,s2,s1
or v1,zero,zero
li a0,-0x1
sw a0,0x30(v0)
addiu v1,v1,0x1
bne v1,s1,0x0005006c
_addiu v0,v0,0x48
or v0,s0,zero
lw ra,0x2c(sp)
lw s3,0x28(sp)
lw s2,0x24(sp)
lw s1,0x20(sp)
lw s0,0x1c(sp)
jr ra
_addiu sp,sp,0x30
li a2,0xc8
lw a1,-0x7fcc(gp)
addiu a1,a1,-0x7440
lw t9,-0x7fb0(gp)
addiu t9,t9,-0x2b28
bal 0x0004d4d8
_nop
lw gp,0x10(sp)
b 0x0005007c
_or s0,zero,zero
bne v1,zero,0x0004ff10
_addiu v0,s3,-0x1
sltiu a3,a3,0xc9
bne a3,zero,0x0004ff14
_sltu a3,v0,s3
b 0x0004ff08
_or v1,zero,zero
(translation_unit "uint * FUN_0004fe7c(undefined4 *param_1,uint *param_2,int param_3,int param_4)\n\n{\n  bool bVar1;\n  uint *puVar2;\n  uint *puVar3;\n  uint *puVar4;\n  uint *puVar5;\n  int iVar6;\n  uint *puVar7;\n  uint uVar8;\n  uint *puVar9;\n  uint uVar10;\n  uint uVar11;\n  uint uVar12;\n  \n  uVar8 = *param_2;\n  if (uVar8 + param_3 <= param_2[1]) goto LAB_0004ff80;\n  uVar10 = uVar8 * 2 + param_3;\n  iVar6 = (uint)(uVar10 < uVar8 * 2) +\n          (uVar8 >> 0x1f | ((int)uVar8 >> 0x1f) << 1) + (param_3 >> 0x1f);\n  if (199 < (int)(uVar8 + param_3)) {\n    FUN_0004d4d8(param_1,PTR_s_EFIRSTFOLLOWINGFROMFULLIMITIFORD_000f62d4 + -0x7440,200);\n    return (uint *)0x0;\n  }\n  if (iVar6 < 1) {\n    uVar8 = uVar10 - 1;\n    if (iVar6 != 0) goto LAB_0004ff10;\n    bVar1 = uVar8 < uVar10;\n    if (200 < uVar10) goto LAB_0004ff08;\n  }\n  else {\nLAB_0004ff08:\n    iVar6 = 0;\n    uVar10 = 200;\n    uVar8 = 199;\nLAB_0004ff10:\n    bVar1 = uVar8 < uVar10;\n  }\n  iVar6 = (uint)bVar1 + iVar6 + -1;\n  param_2 = (uint *)FUN_000390c4(*param_1,param_2,\n                                 (uint)(uVar8 * 0x48 + 0x50 < uVar8 * 0x48) +\n                                 (uVar8 * 9 >> 0x1d |\n                                 ((uint)(uVar8 * 9 < uVar8 * 8) +\n                                 (uVar8 >> 0x1d | iVar6 * 8) + iVar6) * 8));\n  if (param_2 == (uint *)0x0) {\n    return (uint *)0x0;\n  }\n  param_2[1] = uVar10;\nLAB_0004ff80:\n  uVar8 = *param_2;\n  iVar6 = uVar8 - 1;\n  if (param_4 <= iVar6) {\n    puVar5 = param_2 + uVar8 * 0x12;\n    puVar9 = param_2 + (param_3 + uVar8) * 0x12 + -0x10;\n    do {\n      puVar4 = puVar5 + -0x10;\n      puVar2 = puVar9;\n      do {\n        puVar7 = puVar2;\n        puVar3 = puVar4;\n        uVar12 = puVar3[1];\n        uVar11 = puVar3[2];\n        uVar10 = puVar3[3];\n        *puVar7 = *puVar3;\n        puVar7[1] = uVar12;\n        puVar7[2] = uVar11;\n        puVar7[3] = uVar10;\n        puVar4 = puVar3 + 4;\n        puVar2 = puVar7 + 4;\n      } while (puVar4 != puVar5);\n      uVar10 = puVar3[5];\n      puVar7[4] = *puVar4;\n      puVar7[5] = uVar10;\n      iVar6 = iVar6 + -1;\n      puVar5 = puVar5 + -0x12;\n      puVar9 = puVar9 + -0x12;\n    } while (param_4 <= iVar6);\n  }\n  *param_2 = uVar8 + param_3;\n  (*(code *)PTR_memset_000f644c)(param_2 + param_4 * 0x12 + 2,0,param_3 * 0x48);\n  puVar5 = param_2 + param_4 * 0x12;\n  if (param_4 < param_3 + param_4) {\n    iVar6 = 0;\n    do {\n      puVar5[0xc] = 0xffffffff;\n      iVar6 = iVar6 + 1;\n      puVar5 = puVar5 + 0x12;\n    } while (iVar6 != (param_3 + param_4) - param_4);\n  }\n  return param_2;\n}\n\n" (function_definition "uint * FUN_0004fe7c(undefined4 *param_1,uint *param_2,int param_3,int param_4)\n\n{\n  bool bVar1;\n  uint *puVar2;\n  uint *puVar3;\n  uint *puVar4;\n  uint *puVar5;\n  int iVar6;\n  uint *puVar7;\n  uint uVar8;\n  uint *puVar9;\n  uint uVar10;\n  uint uVar11;\n  uint uVar12;\n  \n  uVar8 = *param_2;\n  if (uVar8 + param_3 <= param_2[1]) goto LAB_0004ff80;\n  uVar10 = uVar8 * 2 + param_3;\n  iVar6 = (uint)(uVar10 < uVar8 * 2) +\n          (uVar8 >> 0x1f | ((int)uVar8 >> 0x1f) << 1) + (param_3 >> 0x1f);\n  if (199 < (int)(uVar8 + param_3)) {\n    FUN_0004d4d8(param_1,PTR_s_EFIRSTFOLLOWINGFROMFULLIMITIFORD_000f62d4 + -0x7440,200);\n    return (uint *)0x0;\n  }\n  if (iVar6 < 1) {\n    uVar8 = uVar10 - 1;\n    if (iVar6 != 0) goto LAB_0004ff10;\n    bVar1 = uVar8 < uVar10;\n    if (200 < uVar10) goto LAB_0004ff08;\n  }\n  else {\nLAB_0004ff08:\n    iVar6 = 0;\n    uVar10 = 200;\n    uVar8 = 199;\nLAB_0004ff10:\n    bVar1 = uVar8 < uVar10;\n  }\n  iVar6 = (uint)bVar1 + iVar6 + -1;\n  param_2 = (uint *)FUN_000390c4(*param_1,param_2,\n                                 (uint)(uVar8 * 0x48 + 0x50 < uVar8 * 0x48) +\n                                 (uVar8 * 9 >> 0x1d |\n                                 ((uint)(uVar8 * 9 < uVar8 * 8) +\n                                 (uVar8 >> 0x1d | iVar6 * 8) + iVar6) * 8));\n  if (param_2 == (uint *)0x0) {\n    return (uint *)0x0;\n  }\n  param_2[1] = uVar10;\nLAB_0004ff80:\n  uVar8 = *param_2;\n  iVar6 = uVar8 - 1;\n  if (param_4 <= iVar6) {\n    puVar5 = param_2 + uVar8 * 0x12;\n    puVar9 = param_2 + (param_3 + uVar8) * 0x12 + -0x10;\n    do {\n      puVar4 = puVar5 + -0x10;\n      puVar2 = puVar9;\n      do {\n        puVar7 = puVar2;\n        puVar3 = puVar4;\n        uVar12 = puVar3[1];\n        uVar11 = puVar3[2];\n        uVar10 = puVar3[3];\n        *puVar7 = *puVar3;\n        puVar7[1] = uVar12;\n        puVar7[2] = uVar11;\n        puVar7[3] = uVar10;\n        puVar4 = puVar3 + 4;\n        puVar2 = puVar7 + 4;\n      } while (puVar4 != puVar5);\n      uVar10 = puVar3[5];\n      puVar7[4] = *puVar4;\n      puVar7[5] = uVar10;\n      iVar6 = iVar6 + -1;\n      puVar5 = puVar5 + -0x12;\n      puVar9 = puVar9 + -0x12;\n    } while (param_4 <= iVar6);\n  }\n  *param_2 = uVar8 + param_3;\n  (*(code *)PTR_memset_000f644c)(param_2 + param_4 * 0x12 + 2,0,param_3 * 0x48);\n  puVar5 = param_2 + param_4 * 0x12;\n  if (param_4 < param_3 + param_4) {\n    iVar6 = 0;\n    do {\n      puVar5[0xc] = 0xffffffff;\n      iVar6 = iVar6 + 1;\n      puVar5 = puVar5 + 0x12;\n    } while (iVar6 != (param_3 + param_4) - param_4);\n  }\n  return param_2;\n}" type_identifier (pointer_declarator "* FUN_0004fe7c(undefined4 *param_1,uint *param_2,int param_3,int param_4)" * (function_declarator "FUN_0004fe7c(undefined4 *param_1,uint *param_2,int param_3,int param_4)" identifier (parameter_list "(undefined4 *param_1,uint *param_2,int param_3,int param_4)" ( (parameter_declaration "undefined4 *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "uint *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "int param_3" primitive_type identifier) , (parameter_declaration "int param_4" primitive_type identifier) )))) (compound_statement "{\n  bool bVar1;\n  uint *puVar2;\n  uint *puVar3;\n  uint *puVar4;\n  uint *puVar5;\n  int iVar6;\n  uint *puVar7;\n  uint uVar8;\n  uint *puVar9;\n  uint uVar10;\n  uint uVar11;\n  uint uVar12;\n  \n  uVar8 = *param_2;\n  if (uVar8 + param_3 <= param_2[1]) goto LAB_0004ff80;\n  uVar10 = uVar8 * 2 + param_3;\n  iVar6 = (uint)(uVar10 < uVar8 * 2) +\n          (uVar8 >> 0x1f | ((int)uVar8 >> 0x1f) << 1) + (param_3 >> 0x1f);\n  if (199 < (int)(uVar8 + param_3)) {\n    FUN_0004d4d8(param_1,PTR_s_EFIRSTFOLLOWINGFROMFULLIMITIFORD_000f62d4 + -0x7440,200);\n    return (uint *)0x0;\n  }\n  if (iVar6 < 1) {\n    uVar8 = uVar10 - 1;\n    if (iVar6 != 0) goto LAB_0004ff10;\n    bVar1 = uVar8 < uVar10;\n    if (200 < uVar10) goto LAB_0004ff08;\n  }\n  else {\nLAB_0004ff08:\n    iVar6 = 0;\n    uVar10 = 200;\n    uVar8 = 199;\nLAB_0004ff10:\n    bVar1 = uVar8 < uVar10;\n  }\n  iVar6 = (uint)bVar1 + iVar6 + -1;\n  param_2 = (uint *)FUN_000390c4(*param_1,param_2,\n                                 (uint)(uVar8 * 0x48 + 0x50 < uVar8 * 0x48) +\n                                 (uVar8 * 9 >> 0x1d |\n                                 ((uint)(uVar8 * 9 < uVar8 * 8) +\n                                 (uVar8 >> 0x1d | iVar6 * 8) + iVar6) * 8));\n  if (param_2 == (uint *)0x0) {\n    return (uint *)0x0;\n  }\n  param_2[1] = uVar10;\nLAB_0004ff80:\n  uVar8 = *param_2;\n  iVar6 = uVar8 - 1;\n  if (param_4 <= iVar6) {\n    puVar5 = param_2 + uVar8 * 0x12;\n    puVar9 = param_2 + (param_3 + uVar8) * 0x12 + -0x10;\n    do {\n      puVar4 = puVar5 + -0x10;\n      puVar2 = puVar9;\n      do {\n        puVar7 = puVar2;\n        puVar3 = puVar4;\n        uVar12 = puVar3[1];\n        uVar11 = puVar3[2];\n        uVar10 = puVar3[3];\n        *puVar7 = *puVar3;\n        puVar7[1] = uVar12;\n        puVar7[2] = uVar11;\n        puVar7[3] = uVar10;\n        puVar4 = puVar3 + 4;\n        puVar2 = puVar7 + 4;\n      } while (puVar4 != puVar5);\n      uVar10 = puVar3[5];\n      puVar7[4] = *puVar4;\n      puVar7[5] = uVar10;\n      iVar6 = iVar6 + -1;\n      puVar5 = puVar5 + -0x12;\n      puVar9 = puVar9 + -0x12;\n    } while (param_4 <= iVar6);\n  }\n  *param_2 = uVar8 + param_3;\n  (*(code *)PTR_memset_000f644c)(param_2 + param_4 * 0x12 + 2,0,param_3 * 0x48);\n  puVar5 = param_2 + param_4 * 0x12;\n  if (param_4 < param_3 + param_4) {\n    iVar6 = 0;\n    do {\n      puVar5[0xc] = 0xffffffff;\n      iVar6 = iVar6 + 1;\n      puVar5 = puVar5 + 0x12;\n    } while (iVar6 != (param_3 + param_4) - param_4);\n  }\n  return param_2;\n}" { (declaration "bool bVar1;" primitive_type identifier ;) (declaration "uint *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "uint *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "uint *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "uint *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "uint *puVar7;" type_identifier (pointer_declarator "*puVar7" * identifier) ;) (declaration "uint uVar8;" type_identifier identifier ;) (declaration "uint *puVar9;" type_identifier (pointer_declarator "*puVar9" * identifier) ;) (declaration "uint uVar10;" type_identifier identifier ;) (declaration "uint uVar11;" type_identifier identifier ;) (declaration "uint uVar12;" type_identifier identifier ;) (expression_statement "uVar8 = *param_2;" (assignment_expression "uVar8 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (if_statement "if (uVar8 + param_3 <= param_2[1]) goto LAB_0004ff80;" if (parenthesized_expression "(uVar8 + param_3 <= param_2[1])" ( (binary_expression "uVar8 + param_3 <= param_2[1]" (binary_expression "uVar8 + param_3" identifier + identifier) <= (subscript_expression "param_2[1]" identifier [ number_literal ])) )) (goto_statement "goto LAB_0004ff80;" goto statement_identifier ;)) (expression_statement "uVar10 = uVar8 * 2 + param_3;" (assignment_expression "uVar10 = uVar8 * 2 + param_3" identifier = (binary_expression "uVar8 * 2 + param_3" (binary_expression "uVar8 * 2" identifier * number_literal) + identifier)) ;) (expression_statement "iVar6 = (uint)(uVar10 < uVar8 * 2) +\n          (uVar8 >> 0x1f | ((int)uVar8 >> 0x1f) << 1) + (param_3 >> 0x1f);" (assignment_expression "iVar6 = (uint)(uVar10 < uVar8 * 2) +\n          (uVar8 >> 0x1f | ((int)uVar8 >> 0x1f) << 1) + (param_3 >> 0x1f)" identifier = (binary_expression "(uint)(uVar10 < uVar8 * 2) +\n          (uVar8 >> 0x1f | ((int)uVar8 >> 0x1f) << 1) + (param_3 >> 0x1f)" (binary_expression "(uint)(uVar10 < uVar8 * 2) +\n          (uVar8 >> 0x1f | ((int)uVar8 >> 0x1f) << 1)" (call_expression "(uint)(uVar10 < uVar8 * 2)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar10 < uVar8 * 2)" ( (binary_expression "uVar10 < uVar8 * 2" identifier < (binary_expression "uVar8 * 2" identifier * number_literal)) ))) + (parenthesized_expression "(uVar8 >> 0x1f | ((int)uVar8 >> 0x1f) << 1)" ( (binary_expression "uVar8 >> 0x1f | ((int)uVar8 >> 0x1f) << 1" (binary_expression "uVar8 >> 0x1f" identifier >> number_literal) | (binary_expression "((int)uVar8 >> 0x1f) << 1" (parenthesized_expression "((int)uVar8 >> 0x1f)" ( (binary_expression "(int)uVar8 >> 0x1f" (cast_expression "(int)uVar8" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) )) << number_literal)) ))) + (parenthesized_expression "(param_3 >> 0x1f)" ( (binary_expression "param_3 >> 0x1f" identifier >> number_literal) )))) ;) (if_statement "if (199 < (int)(uVar8 + param_3)) {\n    FUN_0004d4d8(param_1,PTR_s_EFIRSTFOLLOWINGFROMFULLIMITIFORD_000f62d4 + -0x7440,200);\n    return (uint *)0x0;\n  }" if (parenthesized_expression "(199 < (int)(uVar8 + param_3))" ( (binary_expression "199 < (int)(uVar8 + param_3)" number_literal < (cast_expression "(int)(uVar8 + param_3)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar8 + param_3)" ( (binary_expression "uVar8 + param_3" identifier + identifier) )))) )) (compound_statement "{\n    FUN_0004d4d8(param_1,PTR_s_EFIRSTFOLLOWINGFROMFULLIMITIFORD_000f62d4 + -0x7440,200);\n    return (uint *)0x0;\n  }" { (expression_statement "FUN_0004d4d8(param_1,PTR_s_EFIRSTFOLLOWINGFROMFULLIMITIFORD_000f62d4 + -0x7440,200);" (call_expression "FUN_0004d4d8(param_1,PTR_s_EFIRSTFOLLOWINGFROMFULLIMITIFORD_000f62d4 + -0x7440,200)" identifier (argument_list "(param_1,PTR_s_EFIRSTFOLLOWINGFROMFULLIMITIFORD_000f62d4 + -0x7440,200)" ( identifier , (binary_expression "PTR_s_EFIRSTFOLLOWINGFROMFULLIMITIFORD_000f62d4 + -0x7440" identifier + number_literal) , number_literal ))) ;) (return_statement "return (uint *)0x0;" return (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (if_statement "if (iVar6 < 1) {\n    uVar8 = uVar10 - 1;\n    if (iVar6 != 0) goto LAB_0004ff10;\n    bVar1 = uVar8 < uVar10;\n    if (200 < uVar10) goto LAB_0004ff08;\n  }\n  else {\nLAB_0004ff08:\n    iVar6 = 0;\n    uVar10 = 200;\n    uVar8 = 199;\nLAB_0004ff10:\n    bVar1 = uVar8 < uVar10;\n  }" if (parenthesized_expression "(iVar6 < 1)" ( (binary_expression "iVar6 < 1" identifier < number_literal) )) (compound_statement "{\n    uVar8 = uVar10 - 1;\n    if (iVar6 != 0) goto LAB_0004ff10;\n    bVar1 = uVar8 < uVar10;\n    if (200 < uVar10) goto LAB_0004ff08;\n  }" { (expression_statement "uVar8 = uVar10 - 1;" (assignment_expression "uVar8 = uVar10 - 1" identifier = (binary_expression "uVar10 - 1" identifier - number_literal)) ;) (if_statement "if (iVar6 != 0) goto LAB_0004ff10;" if (parenthesized_expression "(iVar6 != 0)" ( (binary_expression "iVar6 != 0" identifier != number_literal) )) (goto_statement "goto LAB_0004ff10;" goto statement_identifier ;)) (expression_statement "bVar1 = uVar8 < uVar10;" (assignment_expression "bVar1 = uVar8 < uVar10" identifier = (binary_expression "uVar8 < uVar10" identifier < identifier)) ;) (if_statement "if (200 < uVar10) goto LAB_0004ff08;" if (parenthesized_expression "(200 < uVar10)" ( (binary_expression "200 < uVar10" number_literal < identifier) )) (goto_statement "goto LAB_0004ff08;" goto statement_identifier ;)) }) (else_clause "else {\nLAB_0004ff08:\n    iVar6 = 0;\n    uVar10 = 200;\n    uVar8 = 199;\nLAB_0004ff10:\n    bVar1 = uVar8 < uVar10;\n  }" else (compound_statement "{\nLAB_0004ff08:\n    iVar6 = 0;\n    uVar10 = 200;\n    uVar8 = 199;\nLAB_0004ff10:\n    bVar1 = uVar8 < uVar10;\n  }" { (labeled_statement "LAB_0004ff08:\n    iVar6 = 0;" statement_identifier : (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" identifier = number_literal) ;)) (expression_statement "uVar10 = 200;" (assignment_expression "uVar10 = 200" identifier = number_literal) ;) (expression_statement "uVar8 = 199;" (assignment_expression "uVar8 = 199" identifier = number_literal) ;) (labeled_statement "LAB_0004ff10:\n    bVar1 = uVar8 < uVar10;" statement_identifier : (expression_statement "bVar1 = uVar8 < uVar10;" (assignment_expression "bVar1 = uVar8 < uVar10" identifier = (binary_expression "uVar8 < uVar10" identifier < identifier)) ;)) }))) (expression_statement "iVar6 = (uint)bVar1 + iVar6 + -1;" (assignment_expression "iVar6 = (uint)bVar1 + iVar6 + -1" identifier = (binary_expression "(uint)bVar1 + iVar6 + -1" (binary_expression "(uint)bVar1 + iVar6" (cast_expression "(uint)bVar1" ( (type_descriptor "uint" type_identifier) ) identifier) + identifier) + number_literal)) ;) (expression_statement "param_2 = (uint *)FUN_000390c4(*param_1,param_2,\n                                 (uint)(uVar8 * 0x48 + 0x50 < uVar8 * 0x48) +\n                                 (uVar8 * 9 >> 0x1d |\n                                 ((uint)(uVar8 * 9 < uVar8 * 8) +\n                                 (uVar8 >> 0x1d | iVar6 * 8) + iVar6) * 8));" (assignment_expression "param_2 = (uint *)FUN_000390c4(*param_1,param_2,\n                                 (uint)(uVar8 * 0x48 + 0x50 < uVar8 * 0x48) +\n                                 (uVar8 * 9 >> 0x1d |\n                                 ((uint)(uVar8 * 9 < uVar8 * 8) +\n                                 (uVar8 >> 0x1d | iVar6 * 8) + iVar6) * 8))" identifier = (cast_expression "(uint *)FUN_000390c4(*param_1,param_2,\n                                 (uint)(uVar8 * 0x48 + 0x50 < uVar8 * 0x48) +\n                                 (uVar8 * 9 >> 0x1d |\n                                 ((uint)(uVar8 * 9 < uVar8 * 8) +\n                                 (uVar8 >> 0x1d | iVar6 * 8) + iVar6) * 8))" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_000390c4(*param_1,param_2,\n                                 (uint)(uVar8 * 0x48 + 0x50 < uVar8 * 0x48) +\n                                 (uVar8 * 9 >> 0x1d |\n                                 ((uint)(uVar8 * 9 < uVar8 * 8) +\n                                 (uVar8 >> 0x1d | iVar6 * 8) + iVar6) * 8))" identifier (argument_list "(*param_1,param_2,\n                                 (uint)(uVar8 * 0x48 + 0x50 < uVar8 * 0x48) +\n                                 (uVar8 * 9 >> 0x1d |\n                                 ((uint)(uVar8 * 9 < uVar8 * 8) +\n                                 (uVar8 >> 0x1d | iVar6 * 8) + iVar6) * 8))" ( (pointer_expression "*param_1" * identifier) , identifier , (binary_expression "(uint)(uVar8 * 0x48 + 0x50 < uVar8 * 0x48) +\n                                 (uVar8 * 9 >> 0x1d |\n                                 ((uint)(uVar8 * 9 < uVar8 * 8) +\n                                 (uVar8 >> 0x1d | iVar6 * 8) + iVar6) * 8)" (call_expression "(uint)(uVar8 * 0x48 + 0x50 < uVar8 * 0x48)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar8 * 0x48 + 0x50 < uVar8 * 0x48)" ( (binary_expression "uVar8 * 0x48 + 0x50 < uVar8 * 0x48" (binary_expression "uVar8 * 0x48 + 0x50" (binary_expression "uVar8 * 0x48" identifier * number_literal) + number_literal) < (binary_expression "uVar8 * 0x48" identifier * number_literal)) ))) + (parenthesized_expression "(uVar8 * 9 >> 0x1d |\n                                 ((uint)(uVar8 * 9 < uVar8 * 8) +\n                                 (uVar8 >> 0x1d | iVar6 * 8) + iVar6) * 8)" ( (binary_expression "uVar8 * 9 >> 0x1d |\n                                 ((uint)(uVar8 * 9 < uVar8 * 8) +\n                                 (uVar8 >> 0x1d | iVar6 * 8) + iVar6) * 8" (binary_expression "uVar8 * 9 >> 0x1d" (binary_expression "uVar8 * 9" identifier * number_literal) >> number_literal) | (binary_expression "((uint)(uVar8 * 9 < uVar8 * 8) +\n                                 (uVar8 >> 0x1d | iVar6 * 8) + iVar6) * 8" (parenthesized_expression "((uint)(uVar8 * 9 < uVar8 * 8) +\n                                 (uVar8 >> 0x1d | iVar6 * 8) + iVar6)" ( (binary_expression "(uint)(uVar8 * 9 < uVar8 * 8) +\n                                 (uVar8 >> 0x1d | iVar6 * 8) + iVar6" (binary_expression "(uint)(uVar8 * 9 < uVar8 * 8) +\n                                 (uVar8 >> 0x1d | iVar6 * 8)" (call_expression "(uint)(uVar8 * 9 < uVar8 * 8)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar8 * 9 < uVar8 * 8)" ( (binary_expression "uVar8 * 9 < uVar8 * 8" (binary_expression "uVar8 * 9" identifier * number_literal) < (binary_expression "uVar8 * 8" identifier * number_literal)) ))) + (parenthesized_expression "(uVar8 >> 0x1d | iVar6 * 8)" ( (binary_expression "uVar8 >> 0x1d | iVar6 * 8" (binary_expression "uVar8 >> 0x1d" identifier >> number_literal) | (binary_expression "iVar6 * 8" identifier * number_literal)) ))) + identifier) )) * number_literal)) ))) ))))) ;) (if_statement "if (param_2 == (uint *)0x0) {\n    return (uint *)0x0;\n  }" if (parenthesized_expression "(param_2 == (uint *)0x0)" ( (binary_expression "param_2 == (uint *)0x0" identifier == (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    return (uint *)0x0;\n  }" { (return_statement "return (uint *)0x0;" return (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (expression_statement "param_2[1] = uVar10;" (assignment_expression "param_2[1] = uVar10" (subscript_expression "param_2[1]" identifier [ number_literal ]) = identifier) ;) (labeled_statement "LAB_0004ff80:\n  uVar8 = *param_2;" statement_identifier : (expression_statement "uVar8 = *param_2;" (assignment_expression "uVar8 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;)) (expression_statement "iVar6 = uVar8 - 1;" (assignment_expression "iVar6 = uVar8 - 1" identifier = (binary_expression "uVar8 - 1" identifier - number_literal)) ;) (if_statement "if (param_4 <= iVar6) {\n    puVar5 = param_2 + uVar8 * 0x12;\n    puVar9 = param_2 + (param_3 + uVar8) * 0x12 + -0x10;\n    do {\n      puVar4 = puVar5 + -0x10;\n      puVar2 = puVar9;\n      do {\n        puVar7 = puVar2;\n        puVar3 = puVar4;\n        uVar12 = puVar3[1];\n        uVar11 = puVar3[2];\n        uVar10 = puVar3[3];\n        *puVar7 = *puVar3;\n        puVar7[1] = uVar12;\n        puVar7[2] = uVar11;\n        puVar7[3] = uVar10;\n        puVar4 = puVar3 + 4;\n        puVar2 = puVar7 + 4;\n      } while (puVar4 != puVar5);\n      uVar10 = puVar3[5];\n      puVar7[4] = *puVar4;\n      puVar7[5] = uVar10;\n      iVar6 = iVar6 + -1;\n      puVar5 = puVar5 + -0x12;\n      puVar9 = puVar9 + -0x12;\n    } while (param_4 <= iVar6);\n  }" if (parenthesized_expression "(param_4 <= iVar6)" ( (binary_expression "param_4 <= iVar6" identifier <= identifier) )) (compound_statement "{\n    puVar5 = param_2 + uVar8 * 0x12;\n    puVar9 = param_2 + (param_3 + uVar8) * 0x12 + -0x10;\n    do {\n      puVar4 = puVar5 + -0x10;\n      puVar2 = puVar9;\n      do {\n        puVar7 = puVar2;\n        puVar3 = puVar4;\n        uVar12 = puVar3[1];\n        uVar11 = puVar3[2];\n        uVar10 = puVar3[3];\n        *puVar7 = *puVar3;\n        puVar7[1] = uVar12;\n        puVar7[2] = uVar11;\n        puVar7[3] = uVar10;\n        puVar4 = puVar3 + 4;\n        puVar2 = puVar7 + 4;\n      } while (puVar4 != puVar5);\n      uVar10 = puVar3[5];\n      puVar7[4] = *puVar4;\n      puVar7[5] = uVar10;\n      iVar6 = iVar6 + -1;\n      puVar5 = puVar5 + -0x12;\n      puVar9 = puVar9 + -0x12;\n    } while (param_4 <= iVar6);\n  }" { (expression_statement "puVar5 = param_2 + uVar8 * 0x12;" (assignment_expression "puVar5 = param_2 + uVar8 * 0x12" identifier = (binary_expression "param_2 + uVar8 * 0x12" identifier + (binary_expression "uVar8 * 0x12" identifier * number_literal))) ;) (expression_statement "puVar9 = param_2 + (param_3 + uVar8) * 0x12 + -0x10;" (assignment_expression "puVar9 = param_2 + (param_3 + uVar8) * 0x12 + -0x10" identifier = (binary_expression "param_2 + (param_3 + uVar8) * 0x12 + -0x10" (binary_expression "param_2 + (param_3 + uVar8) * 0x12" identifier + (binary_expression "(param_3 + uVar8) * 0x12" (parenthesized_expression "(param_3 + uVar8)" ( (binary_expression "param_3 + uVar8" identifier + identifier) )) * number_literal)) + number_literal)) ;) (do_statement "do {\n      puVar4 = puVar5 + -0x10;\n      puVar2 = puVar9;\n      do {\n        puVar7 = puVar2;\n        puVar3 = puVar4;\n        uVar12 = puVar3[1];\n        uVar11 = puVar3[2];\n        uVar10 = puVar3[3];\n        *puVar7 = *puVar3;\n        puVar7[1] = uVar12;\n        puVar7[2] = uVar11;\n        puVar7[3] = uVar10;\n        puVar4 = puVar3 + 4;\n        puVar2 = puVar7 + 4;\n      } while (puVar4 != puVar5);\n      uVar10 = puVar3[5];\n      puVar7[4] = *puVar4;\n      puVar7[5] = uVar10;\n      iVar6 = iVar6 + -1;\n      puVar5 = puVar5 + -0x12;\n      puVar9 = puVar9 + -0x12;\n    } while (param_4 <= iVar6);" do (compound_statement "{\n      puVar4 = puVar5 + -0x10;\n      puVar2 = puVar9;\n      do {\n        puVar7 = puVar2;\n        puVar3 = puVar4;\n        uVar12 = puVar3[1];\n        uVar11 = puVar3[2];\n        uVar10 = puVar3[3];\n        *puVar7 = *puVar3;\n        puVar7[1] = uVar12;\n        puVar7[2] = uVar11;\n        puVar7[3] = uVar10;\n        puVar4 = puVar3 + 4;\n        puVar2 = puVar7 + 4;\n      } while (puVar4 != puVar5);\n      uVar10 = puVar3[5];\n      puVar7[4] = *puVar4;\n      puVar7[5] = uVar10;\n      iVar6 = iVar6 + -1;\n      puVar5 = puVar5 + -0x12;\n      puVar9 = puVar9 + -0x12;\n    }" { (expression_statement "puVar4 = puVar5 + -0x10;" (assignment_expression "puVar4 = puVar5 + -0x10" identifier = (binary_expression "puVar5 + -0x10" identifier + number_literal)) ;) (expression_statement "puVar2 = puVar9;" (assignment_expression "puVar2 = puVar9" identifier = identifier) ;) (do_statement "do {\n        puVar7 = puVar2;\n        puVar3 = puVar4;\n        uVar12 = puVar3[1];\n        uVar11 = puVar3[2];\n        uVar10 = puVar3[3];\n        *puVar7 = *puVar3;\n        puVar7[1] = uVar12;\n        puVar7[2] = uVar11;\n        puVar7[3] = uVar10;\n        puVar4 = puVar3 + 4;\n        puVar2 = puVar7 + 4;\n      } while (puVar4 != puVar5);" do (compound_statement "{\n        puVar7 = puVar2;\n        puVar3 = puVar4;\n        uVar12 = puVar3[1];\n        uVar11 = puVar3[2];\n        uVar10 = puVar3[3];\n        *puVar7 = *puVar3;\n        puVar7[1] = uVar12;\n        puVar7[2] = uVar11;\n        puVar7[3] = uVar10;\n        puVar4 = puVar3 + 4;\n        puVar2 = puVar7 + 4;\n      }" { (expression_statement "puVar7 = puVar2;" (assignment_expression "puVar7 = puVar2" identifier = identifier) ;) (expression_statement "puVar3 = puVar4;" (assignment_expression "puVar3 = puVar4" identifier = identifier) ;) (expression_statement "uVar12 = puVar3[1];" (assignment_expression "uVar12 = puVar3[1]" identifier = (subscript_expression "puVar3[1]" identifier [ number_literal ])) ;) (expression_statement "uVar11 = puVar3[2];" (assignment_expression "uVar11 = puVar3[2]" identifier = (subscript_expression "puVar3[2]" identifier [ number_literal ])) ;) (expression_statement "uVar10 = puVar3[3];" (assignment_expression "uVar10 = puVar3[3]" identifier = (subscript_expression "puVar3[3]" identifier [ number_literal ])) ;) (expression_statement "*puVar7 = *puVar3;" (assignment_expression "*puVar7 = *puVar3" (pointer_expression "*puVar7" * identifier) = (pointer_expression "*puVar3" * identifier)) ;) (expression_statement "puVar7[1] = uVar12;" (assignment_expression "puVar7[1] = uVar12" (subscript_expression "puVar7[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar7[2] = uVar11;" (assignment_expression "puVar7[2] = uVar11" (subscript_expression "puVar7[2]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar7[3] = uVar10;" (assignment_expression "puVar7[3] = uVar10" (subscript_expression "puVar7[3]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar4 = puVar3 + 4;" (assignment_expression "puVar4 = puVar3 + 4" identifier = (binary_expression "puVar3 + 4" identifier + number_literal)) ;) (expression_statement "puVar2 = puVar7 + 4;" (assignment_expression "puVar2 = puVar7 + 4" identifier = (binary_expression "puVar7 + 4" identifier + number_literal)) ;) }) while (parenthesized_expression "(puVar4 != puVar5)" ( (binary_expression "puVar4 != puVar5" identifier != identifier) )) ;) (expression_statement "uVar10 = puVar3[5];" (assignment_expression "uVar10 = puVar3[5]" identifier = (subscript_expression "puVar3[5]" identifier [ number_literal ])) ;) (expression_statement "puVar7[4] = *puVar4;" (assignment_expression "puVar7[4] = *puVar4" (subscript_expression "puVar7[4]" identifier [ number_literal ]) = (pointer_expression "*puVar4" * identifier)) ;) (expression_statement "puVar7[5] = uVar10;" (assignment_expression "puVar7[5] = uVar10" (subscript_expression "puVar7[5]" identifier [ number_literal ]) = identifier) ;) (expression_statement "iVar6 = iVar6 + -1;" (assignment_expression "iVar6 = iVar6 + -1" identifier = (binary_expression "iVar6 + -1" identifier + number_literal)) ;) (expression_statement "puVar5 = puVar5 + -0x12;" (assignment_expression "puVar5 = puVar5 + -0x12" identifier = (binary_expression "puVar5 + -0x12" identifier + number_literal)) ;) (expression_statement "puVar9 = puVar9 + -0x12;" (assignment_expression "puVar9 = puVar9 + -0x12" identifier = (binary_expression "puVar9 + -0x12" identifier + number_literal)) ;) }) while (parenthesized_expression "(param_4 <= iVar6)" ( (binary_expression "param_4 <= iVar6" identifier <= identifier) )) ;) })) (expression_statement "*param_2 = uVar8 + param_3;" (assignment_expression "*param_2 = uVar8 + param_3" (pointer_expression "*param_2" * identifier) = (binary_expression "uVar8 + param_3" identifier + identifier)) ;) (expression_statement "(*(code *)PTR_memset_000f644c)(param_2 + param_4 * 0x12 + 2,0,param_3 * 0x48);" (call_expression "(*(code *)PTR_memset_000f644c)(param_2 + param_4 * 0x12 + 2,0,param_3 * 0x48)" (parenthesized_expression "(*(code *)PTR_memset_000f644c)" ( (pointer_expression "*(code *)PTR_memset_000f644c" * (cast_expression "(code *)PTR_memset_000f644c" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(param_2 + param_4 * 0x12 + 2,0,param_3 * 0x48)" ( (binary_expression "param_2 + param_4 * 0x12 + 2" (binary_expression "param_2 + param_4 * 0x12" identifier + (binary_expression "param_4 * 0x12" identifier * number_literal)) + number_literal) , number_literal , (binary_expression "param_3 * 0x48" identifier * number_literal) ))) ;) (expression_statement "puVar5 = param_2 + param_4 * 0x12;" (assignment_expression "puVar5 = param_2 + param_4 * 0x12" identifier = (binary_expression "param_2 + param_4 * 0x12" identifier + (binary_expression "param_4 * 0x12" identifier * number_literal))) ;) (if_statement "if (param_4 < param_3 + param_4) {\n    iVar6 = 0;\n    do {\n      puVar5[0xc] = 0xffffffff;\n      iVar6 = iVar6 + 1;\n      puVar5 = puVar5 + 0x12;\n    } while (iVar6 != (param_3 + param_4) - param_4);\n  }" if (parenthesized_expression "(param_4 < param_3 + param_4)" ( (binary_expression "param_4 < param_3 + param_4" identifier < (binary_expression "param_3 + param_4" identifier + identifier)) )) (compound_statement "{\n    iVar6 = 0;\n    do {\n      puVar5[0xc] = 0xffffffff;\n      iVar6 = iVar6 + 1;\n      puVar5 = puVar5 + 0x12;\n    } while (iVar6 != (param_3 + param_4) - param_4);\n  }" { (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" identifier = number_literal) ;) (do_statement "do {\n      puVar5[0xc] = 0xffffffff;\n      iVar6 = iVar6 + 1;\n      puVar5 = puVar5 + 0x12;\n    } while (iVar6 != (param_3 + param_4) - param_4);" do (compound_statement "{\n      puVar5[0xc] = 0xffffffff;\n      iVar6 = iVar6 + 1;\n      puVar5 = puVar5 + 0x12;\n    }" { (expression_statement "puVar5[0xc] = 0xffffffff;" (assignment_expression "puVar5[0xc] = 0xffffffff" (subscript_expression "puVar5[0xc]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "iVar6 = iVar6 + 1;" (assignment_expression "iVar6 = iVar6 + 1" identifier = (binary_expression "iVar6 + 1" identifier + number_literal)) ;) (expression_statement "puVar5 = puVar5 + 0x12;" (assignment_expression "puVar5 = puVar5 + 0x12" identifier = (binary_expression "puVar5 + 0x12" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar6 != (param_3 + param_4) - param_4)" ( (binary_expression "iVar6 != (param_3 + param_4) - param_4" identifier != (binary_expression "(param_3 + param_4) - param_4" (parenthesized_expression "(param_3 + param_4)" ( (binary_expression "param_3 + param_4" identifier + identifier) )) - identifier)) )) ;) })) (return_statement "return param_2;" return identifier ;) })))
(translation_unit "/* WARNING: Type propagation algorithm not settling */\n\nSrcList * sqlite3SrcListEnlarge(Parse *pParse,SrcList *pSrc,int nExtra,int iStart)\n\n{\n  SrcList_item *pSVar1;\n  SrcList_item *pSVar2;\n  SrcList_item *pSVar3;\n  Select *pSVar4;\n  anon_union_4_2_996c0f8d_for_u1 *paVar5;\n  int iVar6;\n  SrcList_item *pSVar7;\n  uint uVar8;\n  SrcList_item *pSVar9;\n  uint uVar10;\n  char *pcVar11;\n  char *pcVar12;\n  char *pcVar13;\n  int iVar14;\n  undefined1 *puVar15;\n  undefined4 in_stack_ffffffe4;\n  \n  puVar15 = &_gp;\n  uVar8 = pSrc->nSrc;\n  if (pSrc->nAlloc < uVar8 + nExtra) {\n    uVar10 = uVar8 * 2 + nExtra;\n    iVar6 = (uint)(uVar10 < uVar8 * 2) +\n            (uVar8 >> 0x1f | ((int)uVar8 >> 0x1f) << 1) + (nExtra >> 0x1f);\n    if (199 < (int)(uVar8 + nExtra)) {\n      sqlite3ErrorMsg(pParse,PTR_s_EFIRSTFOLLOWINGFROMFULLIMITIFORD_000f62d4 + -0x7440,200);\n      return (SrcList *)0x0;\n    }\n    if ((0 < iVar6) || ((iVar6 == 0 && (200 < uVar10)))) {\n      uVar10 = 200;\n    }\n    puVar15 = &_gp;\n    pSrc = (SrcList *)sqlite3DbRealloc(pParse->db,pSrc,CONCAT44(&_gp,in_stack_ffffffe4));\n    if (pSrc == (SrcList *)0x0) {\n      return (SrcList *)0x0;\n    }\n    pSrc->nAlloc = uVar10;\n  }\n  iVar14 = pSrc->nSrc;\n  iVar6 = iVar14 + -1;\n  if (iStart <= iVar6) {\n    paVar5 = &pSrc->a[iVar14 + -1].u1;\n    pSVar9 = pSrc->a + nExtra + iVar14 + -1;\n    do {\n      pSVar3 = (SrcList_item *)(paVar5 + -0x10);\n      pSVar1 = pSVar9;\n      do {\n        pSVar7 = pSVar1;\n        pSVar2 = pSVar3;\n        pcVar13 = pSVar2->zDatabase;\n        pcVar12 = pSVar2->zName;\n        pcVar11 = pSVar2->zAlias;\n        pSVar7->pSchema = pSVar2->pSchema;\n        pSVar7->zDatabase = pcVar13;\n        pSVar7->zName = pcVar12;\n        pSVar7->zAlias = pcVar11;\n        pSVar3 = (SrcList_item *)&pSVar2->pTab;\n        pSVar1 = (SrcList_item *)&pSVar7->pTab;\n      } while (pSVar3 != (SrcList_item *)paVar5);\n      pSVar4 = pSVar2->pSelect;\n      pSVar7->pTab = *(Table **)pSVar3;\n      pSVar7->pSelect = pSVar4;\n      iVar6 = iVar6 + -1;\n      paVar5 = paVar5 + -0x12;\n      pSVar9 = pSVar9 + -1;\n    } while (iStart <= iVar6);\n  }\n  pSrc->nSrc = iVar14 + nExtra;\n  (**(code **)(puVar15 + -0x7e54))(pSrc->a + iStart,0,nExtra * 0x48);\n  paVar5 = &pSrc->a[iStart + -1].u1;\n  if (iStart < nExtra + iStart) {\n    iVar6 = 0;\n    do {\n      paVar5[0xc] = (anon_union_4_2_996c0f8d_for_u1)0xffffffff;\n      iVar6 = iVar6 + 1;\n      paVar5 = paVar5 + 0x12;\n    } while (iVar6 != (nExtra + iStart) - iStart);\n  }\n  return pSrc;\n}\n\n" comment (function_definition "SrcList * sqlite3SrcListEnlarge(Parse *pParse,SrcList *pSrc,int nExtra,int iStart)\n\n{\n  SrcList_item *pSVar1;\n  SrcList_item *pSVar2;\n  SrcList_item *pSVar3;\n  Select *pSVar4;\n  anon_union_4_2_996c0f8d_for_u1 *paVar5;\n  int iVar6;\n  SrcList_item *pSVar7;\n  uint uVar8;\n  SrcList_item *pSVar9;\n  uint uVar10;\n  char *pcVar11;\n  char *pcVar12;\n  char *pcVar13;\n  int iVar14;\n  undefined1 *puVar15;\n  undefined4 in_stack_ffffffe4;\n  \n  puVar15 = &_gp;\n  uVar8 = pSrc->nSrc;\n  if (pSrc->nAlloc < uVar8 + nExtra) {\n    uVar10 = uVar8 * 2 + nExtra;\n    iVar6 = (uint)(uVar10 < uVar8 * 2) +\n            (uVar8 >> 0x1f | ((int)uVar8 >> 0x1f) << 1) + (nExtra >> 0x1f);\n    if (199 < (int)(uVar8 + nExtra)) {\n      sqlite3ErrorMsg(pParse,PTR_s_EFIRSTFOLLOWINGFROMFULLIMITIFORD_000f62d4 + -0x7440,200);\n      return (SrcList *)0x0;\n    }\n    if ((0 < iVar6) || ((iVar6 == 0 && (200 < uVar10)))) {\n      uVar10 = 200;\n    }\n    puVar15 = &_gp;\n    pSrc = (SrcList *)sqlite3DbRealloc(pParse->db,pSrc,CONCAT44(&_gp,in_stack_ffffffe4));\n    if (pSrc == (SrcList *)0x0) {\n      return (SrcList *)0x0;\n    }\n    pSrc->nAlloc = uVar10;\n  }\n  iVar14 = pSrc->nSrc;\n  iVar6 = iVar14 + -1;\n  if (iStart <= iVar6) {\n    paVar5 = &pSrc->a[iVar14 + -1].u1;\n    pSVar9 = pSrc->a + nExtra + iVar14 + -1;\n    do {\n      pSVar3 = (SrcList_item *)(paVar5 + -0x10);\n      pSVar1 = pSVar9;\n      do {\n        pSVar7 = pSVar1;\n        pSVar2 = pSVar3;\n        pcVar13 = pSVar2->zDatabase;\n        pcVar12 = pSVar2->zName;\n        pcVar11 = pSVar2->zAlias;\n        pSVar7->pSchema = pSVar2->pSchema;\n        pSVar7->zDatabase = pcVar13;\n        pSVar7->zName = pcVar12;\n        pSVar7->zAlias = pcVar11;\n        pSVar3 = (SrcList_item *)&pSVar2->pTab;\n        pSVar1 = (SrcList_item *)&pSVar7->pTab;\n      } while (pSVar3 != (SrcList_item *)paVar5);\n      pSVar4 = pSVar2->pSelect;\n      pSVar7->pTab = *(Table **)pSVar3;\n      pSVar7->pSelect = pSVar4;\n      iVar6 = iVar6 + -1;\n      paVar5 = paVar5 + -0x12;\n      pSVar9 = pSVar9 + -1;\n    } while (iStart <= iVar6);\n  }\n  pSrc->nSrc = iVar14 + nExtra;\n  (**(code **)(puVar15 + -0x7e54))(pSrc->a + iStart,0,nExtra * 0x48);\n  paVar5 = &pSrc->a[iStart + -1].u1;\n  if (iStart < nExtra + iStart) {\n    iVar6 = 0;\n    do {\n      paVar5[0xc] = (anon_union_4_2_996c0f8d_for_u1)0xffffffff;\n      iVar6 = iVar6 + 1;\n      paVar5 = paVar5 + 0x12;\n    } while (iVar6 != (nExtra + iStart) - iStart);\n  }\n  return pSrc;\n}" type_identifier (pointer_declarator "* sqlite3SrcListEnlarge(Parse *pParse,SrcList *pSrc,int nExtra,int iStart)" * (function_declarator "sqlite3SrcListEnlarge(Parse *pParse,SrcList *pSrc,int nExtra,int iStart)" identifier (parameter_list "(Parse *pParse,SrcList *pSrc,int nExtra,int iStart)" ( (parameter_declaration "Parse *pParse" type_identifier (pointer_declarator "*pParse" * identifier)) , (parameter_declaration "SrcList *pSrc" type_identifier (pointer_declarator "*pSrc" * identifier)) , (parameter_declaration "int nExtra" primitive_type identifier) , (parameter_declaration "int iStart" primitive_type identifier) )))) (compound_statement "{\n  SrcList_item *pSVar1;\n  SrcList_item *pSVar2;\n  SrcList_item *pSVar3;\n  Select *pSVar4;\n  anon_union_4_2_996c0f8d_for_u1 *paVar5;\n  int iVar6;\n  SrcList_item *pSVar7;\n  uint uVar8;\n  SrcList_item *pSVar9;\n  uint uVar10;\n  char *pcVar11;\n  char *pcVar12;\n  char *pcVar13;\n  int iVar14;\n  undefined1 *puVar15;\n  undefined4 in_stack_ffffffe4;\n  \n  puVar15 = &_gp;\n  uVar8 = pSrc->nSrc;\n  if (pSrc->nAlloc < uVar8 + nExtra) {\n    uVar10 = uVar8 * 2 + nExtra;\n    iVar6 = (uint)(uVar10 < uVar8 * 2) +\n            (uVar8 >> 0x1f | ((int)uVar8 >> 0x1f) << 1) + (nExtra >> 0x1f);\n    if (199 < (int)(uVar8 + nExtra)) {\n      sqlite3ErrorMsg(pParse,PTR_s_EFIRSTFOLLOWINGFROMFULLIMITIFORD_000f62d4 + -0x7440,200);\n      return (SrcList *)0x0;\n    }\n    if ((0 < iVar6) || ((iVar6 == 0 && (200 < uVar10)))) {\n      uVar10 = 200;\n    }\n    puVar15 = &_gp;\n    pSrc = (SrcList *)sqlite3DbRealloc(pParse->db,pSrc,CONCAT44(&_gp,in_stack_ffffffe4));\n    if (pSrc == (SrcList *)0x0) {\n      return (SrcList *)0x0;\n    }\n    pSrc->nAlloc = uVar10;\n  }\n  iVar14 = pSrc->nSrc;\n  iVar6 = iVar14 + -1;\n  if (iStart <= iVar6) {\n    paVar5 = &pSrc->a[iVar14 + -1].u1;\n    pSVar9 = pSrc->a + nExtra + iVar14 + -1;\n    do {\n      pSVar3 = (SrcList_item *)(paVar5 + -0x10);\n      pSVar1 = pSVar9;\n      do {\n        pSVar7 = pSVar1;\n        pSVar2 = pSVar3;\n        pcVar13 = pSVar2->zDatabase;\n        pcVar12 = pSVar2->zName;\n        pcVar11 = pSVar2->zAlias;\n        pSVar7->pSchema = pSVar2->pSchema;\n        pSVar7->zDatabase = pcVar13;\n        pSVar7->zName = pcVar12;\n        pSVar7->zAlias = pcVar11;\n        pSVar3 = (SrcList_item *)&pSVar2->pTab;\n        pSVar1 = (SrcList_item *)&pSVar7->pTab;\n      } while (pSVar3 != (SrcList_item *)paVar5);\n      pSVar4 = pSVar2->pSelect;\n      pSVar7->pTab = *(Table **)pSVar3;\n      pSVar7->pSelect = pSVar4;\n      iVar6 = iVar6 + -1;\n      paVar5 = paVar5 + -0x12;\n      pSVar9 = pSVar9 + -1;\n    } while (iStart <= iVar6);\n  }\n  pSrc->nSrc = iVar14 + nExtra;\n  (**(code **)(puVar15 + -0x7e54))(pSrc->a + iStart,0,nExtra * 0x48);\n  paVar5 = &pSrc->a[iStart + -1].u1;\n  if (iStart < nExtra + iStart) {\n    iVar6 = 0;\n    do {\n      paVar5[0xc] = (anon_union_4_2_996c0f8d_for_u1)0xffffffff;\n      iVar6 = iVar6 + 1;\n      paVar5 = paVar5 + 0x12;\n    } while (iVar6 != (nExtra + iStart) - iStart);\n  }\n  return pSrc;\n}" { (declaration "SrcList_item *pSVar1;" type_identifier (pointer_declarator "*pSVar1" * identifier) ;) (declaration "SrcList_item *pSVar2;" type_identifier (pointer_declarator "*pSVar2" * identifier) ;) (declaration "SrcList_item *pSVar3;" type_identifier (pointer_declarator "*pSVar3" * identifier) ;) (declaration "Select *pSVar4;" type_identifier (pointer_declarator "*pSVar4" * identifier) ;) (declaration "anon_union_4_2_996c0f8d_for_u1 *paVar5;" type_identifier (pointer_declarator "*paVar5" * identifier) ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "SrcList_item *pSVar7;" type_identifier (pointer_declarator "*pSVar7" * identifier) ;) (declaration "uint uVar8;" type_identifier identifier ;) (declaration "SrcList_item *pSVar9;" type_identifier (pointer_declarator "*pSVar9" * identifier) ;) (declaration "uint uVar10;" type_identifier identifier ;) (declaration "char *pcVar11;" primitive_type (pointer_declarator "*pcVar11" * identifier) ;) (declaration "char *pcVar12;" primitive_type (pointer_declarator "*pcVar12" * identifier) ;) (declaration "char *pcVar13;" primitive_type (pointer_declarator "*pcVar13" * identifier) ;) (declaration "int iVar14;" primitive_type identifier ;) (declaration "undefined1 *puVar15;" type_identifier (pointer_declarator "*puVar15" * identifier) ;) (declaration "undefined4 in_stack_ffffffe4;" type_identifier identifier ;) (expression_statement "puVar15 = &_gp;" (assignment_expression "puVar15 = &_gp" identifier = (pointer_expression "&_gp" & identifier)) ;) (expression_statement "uVar8 = pSrc->nSrc;" (assignment_expression "uVar8 = pSrc->nSrc" identifier = (field_expression "pSrc->nSrc" identifier -> field_identifier)) ;) (if_statement "if (pSrc->nAlloc < uVar8 + nExtra) {\n    uVar10 = uVar8 * 2 + nExtra;\n    iVar6 = (uint)(uVar10 < uVar8 * 2) +\n            (uVar8 >> 0x1f | ((int)uVar8 >> 0x1f) << 1) + (nExtra >> 0x1f);\n    if (199 < (int)(uVar8 + nExtra)) {\n      sqlite3ErrorMsg(pParse,PTR_s_EFIRSTFOLLOWINGFROMFULLIMITIFORD_000f62d4 + -0x7440,200);\n      return (SrcList *)0x0;\n    }\n    if ((0 < iVar6) || ((iVar6 == 0 && (200 < uVar10)))) {\n      uVar10 = 200;\n    }\n    puVar15 = &_gp;\n    pSrc = (SrcList *)sqlite3DbRealloc(pParse->db,pSrc,CONCAT44(&_gp,in_stack_ffffffe4));\n    if (pSrc == (SrcList *)0x0) {\n      return (SrcList *)0x0;\n    }\n    pSrc->nAlloc = uVar10;\n  }" if (parenthesized_expression "(pSrc->nAlloc < uVar8 + nExtra)" ( (binary_expression "pSrc->nAlloc < uVar8 + nExtra" (field_expression "pSrc->nAlloc" identifier -> field_identifier) < (binary_expression "uVar8 + nExtra" identifier + identifier)) )) (compound_statement "{\n    uVar10 = uVar8 * 2 + nExtra;\n    iVar6 = (uint)(uVar10 < uVar8 * 2) +\n            (uVar8 >> 0x1f | ((int)uVar8 >> 0x1f) << 1) + (nExtra >> 0x1f);\n    if (199 < (int)(uVar8 + nExtra)) {\n      sqlite3ErrorMsg(pParse,PTR_s_EFIRSTFOLLOWINGFROMFULLIMITIFORD_000f62d4 + -0x7440,200);\n      return (SrcList *)0x0;\n    }\n    if ((0 < iVar6) || ((iVar6 == 0 && (200 < uVar10)))) {\n      uVar10 = 200;\n    }\n    puVar15 = &_gp;\n    pSrc = (SrcList *)sqlite3DbRealloc(pParse->db,pSrc,CONCAT44(&_gp,in_stack_ffffffe4));\n    if (pSrc == (SrcList *)0x0) {\n      return (SrcList *)0x0;\n    }\n    pSrc->nAlloc = uVar10;\n  }" { (expression_statement "uVar10 = uVar8 * 2 + nExtra;" (assignment_expression "uVar10 = uVar8 * 2 + nExtra" identifier = (binary_expression "uVar8 * 2 + nExtra" (binary_expression "uVar8 * 2" identifier * number_literal) + identifier)) ;) (expression_statement "iVar6 = (uint)(uVar10 < uVar8 * 2) +\n            (uVar8 >> 0x1f | ((int)uVar8 >> 0x1f) << 1) + (nExtra >> 0x1f);" (assignment_expression "iVar6 = (uint)(uVar10 < uVar8 * 2) +\n            (uVar8 >> 0x1f | ((int)uVar8 >> 0x1f) << 1) + (nExtra >> 0x1f)" identifier = (binary_expression "(uint)(uVar10 < uVar8 * 2) +\n            (uVar8 >> 0x1f | ((int)uVar8 >> 0x1f) << 1) + (nExtra >> 0x1f)" (binary_expression "(uint)(uVar10 < uVar8 * 2) +\n            (uVar8 >> 0x1f | ((int)uVar8 >> 0x1f) << 1)" (call_expression "(uint)(uVar10 < uVar8 * 2)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar10 < uVar8 * 2)" ( (binary_expression "uVar10 < uVar8 * 2" identifier < (binary_expression "uVar8 * 2" identifier * number_literal)) ))) + (parenthesized_expression "(uVar8 >> 0x1f | ((int)uVar8 >> 0x1f) << 1)" ( (binary_expression "uVar8 >> 0x1f | ((int)uVar8 >> 0x1f) << 1" (binary_expression "uVar8 >> 0x1f" identifier >> number_literal) | (binary_expression "((int)uVar8 >> 0x1f) << 1" (parenthesized_expression "((int)uVar8 >> 0x1f)" ( (binary_expression "(int)uVar8 >> 0x1f" (cast_expression "(int)uVar8" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) )) << number_literal)) ))) + (parenthesized_expression "(nExtra >> 0x1f)" ( (binary_expression "nExtra >> 0x1f" identifier >> number_literal) )))) ;) (if_statement "if (199 < (int)(uVar8 + nExtra)) {\n      sqlite3ErrorMsg(pParse,PTR_s_EFIRSTFOLLOWINGFROMFULLIMITIFORD_000f62d4 + -0x7440,200);\n      return (SrcList *)0x0;\n    }" if (parenthesized_expression "(199 < (int)(uVar8 + nExtra))" ( (binary_expression "199 < (int)(uVar8 + nExtra)" number_literal < (cast_expression "(int)(uVar8 + nExtra)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar8 + nExtra)" ( (binary_expression "uVar8 + nExtra" identifier + identifier) )))) )) (compound_statement "{\n      sqlite3ErrorMsg(pParse,PTR_s_EFIRSTFOLLOWINGFROMFULLIMITIFORD_000f62d4 + -0x7440,200);\n      return (SrcList *)0x0;\n    }" { (expression_statement "sqlite3ErrorMsg(pParse,PTR_s_EFIRSTFOLLOWINGFROMFULLIMITIFORD_000f62d4 + -0x7440,200);" (call_expression "sqlite3ErrorMsg(pParse,PTR_s_EFIRSTFOLLOWINGFROMFULLIMITIFORD_000f62d4 + -0x7440,200)" identifier (argument_list "(pParse,PTR_s_EFIRSTFOLLOWINGFROMFULLIMITIFORD_000f62d4 + -0x7440,200)" ( identifier , (binary_expression "PTR_s_EFIRSTFOLLOWINGFROMFULLIMITIFORD_000f62d4 + -0x7440" identifier + number_literal) , number_literal ))) ;) (return_statement "return (SrcList *)0x0;" return (cast_expression "(SrcList *)0x0" ( (type_descriptor "SrcList *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (if_statement "if ((0 < iVar6) || ((iVar6 == 0 && (200 < uVar10)))) {\n      uVar10 = 200;\n    }" if (parenthesized_expression "((0 < iVar6) || ((iVar6 == 0 && (200 < uVar10))))" ( (binary_expression "(0 < iVar6) || ((iVar6 == 0 && (200 < uVar10)))" (parenthesized_expression "(0 < iVar6)" ( (binary_expression "0 < iVar6" number_literal < identifier) )) || (parenthesized_expression "((iVar6 == 0 && (200 < uVar10)))" ( (parenthesized_expression "(iVar6 == 0 && (200 < uVar10))" ( (binary_expression "iVar6 == 0 && (200 < uVar10)" (binary_expression "iVar6 == 0" identifier == number_literal) && (parenthesized_expression "(200 < uVar10)" ( (binary_expression "200 < uVar10" number_literal < identifier) ))) )) ))) )) (compound_statement "{\n      uVar10 = 200;\n    }" { (expression_statement "uVar10 = 200;" (assignment_expression "uVar10 = 200" identifier = number_literal) ;) })) (expression_statement "puVar15 = &_gp;" (assignment_expression "puVar15 = &_gp" identifier = (pointer_expression "&_gp" & identifier)) ;) (expression_statement "pSrc = (SrcList *)sqlite3DbRealloc(pParse->db,pSrc,CONCAT44(&_gp,in_stack_ffffffe4));" (assignment_expression "pSrc = (SrcList *)sqlite3DbRealloc(pParse->db,pSrc,CONCAT44(&_gp,in_stack_ffffffe4))" identifier = (cast_expression "(SrcList *)sqlite3DbRealloc(pParse->db,pSrc,CONCAT44(&_gp,in_stack_ffffffe4))" ( (type_descriptor "SrcList *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "sqlite3DbRealloc(pParse->db,pSrc,CONCAT44(&_gp,in_stack_ffffffe4))" identifier (argument_list "(pParse->db,pSrc,CONCAT44(&_gp,in_stack_ffffffe4))" ( (field_expression "pParse->db" identifier -> field_identifier) , identifier , (call_expression "CONCAT44(&_gp,in_stack_ffffffe4)" identifier (argument_list "(&_gp,in_stack_ffffffe4)" ( (pointer_expression "&_gp" & identifier) , identifier ))) ))))) ;) (if_statement "if (pSrc == (SrcList *)0x0) {\n      return (SrcList *)0x0;\n    }" if (parenthesized_expression "(pSrc == (SrcList *)0x0)" ( (binary_expression "pSrc == (SrcList *)0x0" identifier == (cast_expression "(SrcList *)0x0" ( (type_descriptor "SrcList *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      return (SrcList *)0x0;\n    }" { (return_statement "return (SrcList *)0x0;" return (cast_expression "(SrcList *)0x0" ( (type_descriptor "SrcList *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (expression_statement "pSrc->nAlloc = uVar10;" (assignment_expression "pSrc->nAlloc = uVar10" (field_expression "pSrc->nAlloc" identifier -> field_identifier) = identifier) ;) })) (expression_statement "iVar14 = pSrc->nSrc;" (assignment_expression "iVar14 = pSrc->nSrc" identifier = (field_expression "pSrc->nSrc" identifier -> field_identifier)) ;) (expression_statement "iVar6 = iVar14 + -1;" (assignment_expression "iVar6 = iVar14 + -1" identifier = (binary_expression "iVar14 + -1" identifier + number_literal)) ;) (if_statement "if (iStart <= iVar6) {\n    paVar5 = &pSrc->a[iVar14 + -1].u1;\n    pSVar9 = pSrc->a + nExtra + iVar14 + -1;\n    do {\n      pSVar3 = (SrcList_item *)(paVar5 + -0x10);\n      pSVar1 = pSVar9;\n      do {\n        pSVar7 = pSVar1;\n        pSVar2 = pSVar3;\n        pcVar13 = pSVar2->zDatabase;\n        pcVar12 = pSVar2->zName;\n        pcVar11 = pSVar2->zAlias;\n        pSVar7->pSchema = pSVar2->pSchema;\n        pSVar7->zDatabase = pcVar13;\n        pSVar7->zName = pcVar12;\n        pSVar7->zAlias = pcVar11;\n        pSVar3 = (SrcList_item *)&pSVar2->pTab;\n        pSVar1 = (SrcList_item *)&pSVar7->pTab;\n      } while (pSVar3 != (SrcList_item *)paVar5);\n      pSVar4 = pSVar2->pSelect;\n      pSVar7->pTab = *(Table **)pSVar3;\n      pSVar7->pSelect = pSVar4;\n      iVar6 = iVar6 + -1;\n      paVar5 = paVar5 + -0x12;\n      pSVar9 = pSVar9 + -1;\n    } while (iStart <= iVar6);\n  }" if (parenthesized_expression "(iStart <= iVar6)" ( (binary_expression "iStart <= iVar6" identifier <= identifier) )) (compound_statement "{\n    paVar5 = &pSrc->a[iVar14 + -1].u1;\n    pSVar9 = pSrc->a + nExtra + iVar14 + -1;\n    do {\n      pSVar3 = (SrcList_item *)(paVar5 + -0x10);\n      pSVar1 = pSVar9;\n      do {\n        pSVar7 = pSVar1;\n        pSVar2 = pSVar3;\n        pcVar13 = pSVar2->zDatabase;\n        pcVar12 = pSVar2->zName;\n        pcVar11 = pSVar2->zAlias;\n        pSVar7->pSchema = pSVar2->pSchema;\n        pSVar7->zDatabase = pcVar13;\n        pSVar7->zName = pcVar12;\n        pSVar7->zAlias = pcVar11;\n        pSVar3 = (SrcList_item *)&pSVar2->pTab;\n        pSVar1 = (SrcList_item *)&pSVar7->pTab;\n      } while (pSVar3 != (SrcList_item *)paVar5);\n      pSVar4 = pSVar2->pSelect;\n      pSVar7->pTab = *(Table **)pSVar3;\n      pSVar7->pSelect = pSVar4;\n      iVar6 = iVar6 + -1;\n      paVar5 = paVar5 + -0x12;\n      pSVar9 = pSVar9 + -1;\n    } while (iStart <= iVar6);\n  }" { (expression_statement "paVar5 = &pSrc->a[iVar14 + -1].u1;" (assignment_expression "paVar5 = &pSrc->a[iVar14 + -1].u1" identifier = (pointer_expression "&pSrc->a[iVar14 + -1].u1" & (field_expression "pSrc->a[iVar14 + -1].u1" (subscript_expression "pSrc->a[iVar14 + -1]" (field_expression "pSrc->a" identifier -> field_identifier) [ (binary_expression "iVar14 + -1" identifier + number_literal) ]) . field_identifier))) ;) (expression_statement "pSVar9 = pSrc->a + nExtra + iVar14 + -1;" (assignment_expression "pSVar9 = pSrc->a + nExtra + iVar14 + -1" identifier = (binary_expression "pSrc->a + nExtra + iVar14 + -1" (binary_expression "pSrc->a + nExtra + iVar14" (binary_expression "pSrc->a + nExtra" (field_expression "pSrc->a" identifier -> field_identifier) + identifier) + identifier) + number_literal)) ;) (do_statement "do {\n      pSVar3 = (SrcList_item *)(paVar5 + -0x10);\n      pSVar1 = pSVar9;\n      do {\n        pSVar7 = pSVar1;\n        pSVar2 = pSVar3;\n        pcVar13 = pSVar2->zDatabase;\n        pcVar12 = pSVar2->zName;\n        pcVar11 = pSVar2->zAlias;\n        pSVar7->pSchema = pSVar2->pSchema;\n        pSVar7->zDatabase = pcVar13;\n        pSVar7->zName = pcVar12;\n        pSVar7->zAlias = pcVar11;\n        pSVar3 = (SrcList_item *)&pSVar2->pTab;\n        pSVar1 = (SrcList_item *)&pSVar7->pTab;\n      } while (pSVar3 != (SrcList_item *)paVar5);\n      pSVar4 = pSVar2->pSelect;\n      pSVar7->pTab = *(Table **)pSVar3;\n      pSVar7->pSelect = pSVar4;\n      iVar6 = iVar6 + -1;\n      paVar5 = paVar5 + -0x12;\n      pSVar9 = pSVar9 + -1;\n    } while (iStart <= iVar6);" do (compound_statement "{\n      pSVar3 = (SrcList_item *)(paVar5 + -0x10);\n      pSVar1 = pSVar9;\n      do {\n        pSVar7 = pSVar1;\n        pSVar2 = pSVar3;\n        pcVar13 = pSVar2->zDatabase;\n        pcVar12 = pSVar2->zName;\n        pcVar11 = pSVar2->zAlias;\n        pSVar7->pSchema = pSVar2->pSchema;\n        pSVar7->zDatabase = pcVar13;\n        pSVar7->zName = pcVar12;\n        pSVar7->zAlias = pcVar11;\n        pSVar3 = (SrcList_item *)&pSVar2->pTab;\n        pSVar1 = (SrcList_item *)&pSVar7->pTab;\n      } while (pSVar3 != (SrcList_item *)paVar5);\n      pSVar4 = pSVar2->pSelect;\n      pSVar7->pTab = *(Table **)pSVar3;\n      pSVar7->pSelect = pSVar4;\n      iVar6 = iVar6 + -1;\n      paVar5 = paVar5 + -0x12;\n      pSVar9 = pSVar9 + -1;\n    }" { (expression_statement "pSVar3 = (SrcList_item *)(paVar5 + -0x10);" (assignment_expression "pSVar3 = (SrcList_item *)(paVar5 + -0x10)" identifier = (cast_expression "(SrcList_item *)(paVar5 + -0x10)" ( (type_descriptor "SrcList_item *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(paVar5 + -0x10)" ( (binary_expression "paVar5 + -0x10" identifier + number_literal) )))) ;) (expression_statement "pSVar1 = pSVar9;" (assignment_expression "pSVar1 = pSVar9" identifier = identifier) ;) (do_statement "do {\n        pSVar7 = pSVar1;\n        pSVar2 = pSVar3;\n        pcVar13 = pSVar2->zDatabase;\n        pcVar12 = pSVar2->zName;\n        pcVar11 = pSVar2->zAlias;\n        pSVar7->pSchema = pSVar2->pSchema;\n        pSVar7->zDatabase = pcVar13;\n        pSVar7->zName = pcVar12;\n        pSVar7->zAlias = pcVar11;\n        pSVar3 = (SrcList_item *)&pSVar2->pTab;\n        pSVar1 = (SrcList_item *)&pSVar7->pTab;\n      } while (pSVar3 != (SrcList_item *)paVar5);" do (compound_statement "{\n        pSVar7 = pSVar1;\n        pSVar2 = pSVar3;\n        pcVar13 = pSVar2->zDatabase;\n        pcVar12 = pSVar2->zName;\n        pcVar11 = pSVar2->zAlias;\n        pSVar7->pSchema = pSVar2->pSchema;\n        pSVar7->zDatabase = pcVar13;\n        pSVar7->zName = pcVar12;\n        pSVar7->zAlias = pcVar11;\n        pSVar3 = (SrcList_item *)&pSVar2->pTab;\n        pSVar1 = (SrcList_item *)&pSVar7->pTab;\n      }" { (expression_statement "pSVar7 = pSVar1;" (assignment_expression "pSVar7 = pSVar1" identifier = identifier) ;) (expression_statement "pSVar2 = pSVar3;" (assignment_expression "pSVar2 = pSVar3" identifier = identifier) ;) (expression_statement "pcVar13 = pSVar2->zDatabase;" (assignment_expression "pcVar13 = pSVar2->zDatabase" identifier = (field_expression "pSVar2->zDatabase" identifier -> field_identifier)) ;) (expression_statement "pcVar12 = pSVar2->zName;" (assignment_expression "pcVar12 = pSVar2->zName" identifier = (field_expression "pSVar2->zName" identifier -> field_identifier)) ;) (expression_statement "pcVar11 = pSVar2->zAlias;" (assignment_expression "pcVar11 = pSVar2->zAlias" identifier = (field_expression "pSVar2->zAlias" identifier -> field_identifier)) ;) (expression_statement "pSVar7->pSchema = pSVar2->pSchema;" (assignment_expression "pSVar7->pSchema = pSVar2->pSchema" (field_expression "pSVar7->pSchema" identifier -> field_identifier) = (field_expression "pSVar2->pSchema" identifier -> field_identifier)) ;) (expression_statement "pSVar7->zDatabase = pcVar13;" (assignment_expression "pSVar7->zDatabase = pcVar13" (field_expression "pSVar7->zDatabase" identifier -> field_identifier) = identifier) ;) (expression_statement "pSVar7->zName = pcVar12;" (assignment_expression "pSVar7->zName = pcVar12" (field_expression "pSVar7->zName" identifier -> field_identifier) = identifier) ;) (expression_statement "pSVar7->zAlias = pcVar11;" (assignment_expression "pSVar7->zAlias = pcVar11" (field_expression "pSVar7->zAlias" identifier -> field_identifier) = identifier) ;) (expression_statement "pSVar3 = (SrcList_item *)&pSVar2->pTab;" (assignment_expression "pSVar3 = (SrcList_item *)&pSVar2->pTab" identifier = (cast_expression "(SrcList_item *)&pSVar2->pTab" ( (type_descriptor "SrcList_item *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&pSVar2->pTab" & (field_expression "pSVar2->pTab" identifier -> field_identifier)))) ;) (expression_statement "pSVar1 = (SrcList_item *)&pSVar7->pTab;" (assignment_expression "pSVar1 = (SrcList_item *)&pSVar7->pTab" identifier = (cast_expression "(SrcList_item *)&pSVar7->pTab" ( (type_descriptor "SrcList_item *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&pSVar7->pTab" & (field_expression "pSVar7->pTab" identifier -> field_identifier)))) ;) }) while (parenthesized_expression "(pSVar3 != (SrcList_item *)paVar5)" ( (binary_expression "pSVar3 != (SrcList_item *)paVar5" identifier != (cast_expression "(SrcList_item *)paVar5" ( (type_descriptor "SrcList_item *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) ;) (expression_statement "pSVar4 = pSVar2->pSelect;" (assignment_expression "pSVar4 = pSVar2->pSelect" identifier = (field_expression "pSVar2->pSelect" identifier -> field_identifier)) ;) (expression_statement "pSVar7->pTab = *(Table **)pSVar3;" (assignment_expression "pSVar7->pTab = *(Table **)pSVar3" (field_expression "pSVar7->pTab" identifier -> field_identifier) = (pointer_expression "*(Table **)pSVar3" * (cast_expression "(Table **)pSVar3" ( (type_descriptor "Table **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier))) ;) (expression_statement "pSVar7->pSelect = pSVar4;" (assignment_expression "pSVar7->pSelect = pSVar4" (field_expression "pSVar7->pSelect" identifier -> field_identifier) = identifier) ;) (expression_statement "iVar6 = iVar6 + -1;" (assignment_expression "iVar6 = iVar6 + -1" identifier = (binary_expression "iVar6 + -1" identifier + number_literal)) ;) (expression_statement "paVar5 = paVar5 + -0x12;" (assignment_expression "paVar5 = paVar5 + -0x12" identifier = (binary_expression "paVar5 + -0x12" identifier + number_literal)) ;) (expression_statement "pSVar9 = pSVar9 + -1;" (assignment_expression "pSVar9 = pSVar9 + -1" identifier = (binary_expression "pSVar9 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iStart <= iVar6)" ( (binary_expression "iStart <= iVar6" identifier <= identifier) )) ;) })) (expression_statement "pSrc->nSrc = iVar14 + nExtra;" (assignment_expression "pSrc->nSrc = iVar14 + nExtra" (field_expression "pSrc->nSrc" identifier -> field_identifier) = (binary_expression "iVar14 + nExtra" identifier + identifier)) ;) (expression_statement "(**(code **)(puVar15 + -0x7e54))(pSrc->a + iStart,0,nExtra * 0x48);" (call_expression "(**(code **)(puVar15 + -0x7e54))(pSrc->a + iStart,0,nExtra * 0x48)" (parenthesized_expression "(**(code **)(puVar15 + -0x7e54))" ( (pointer_expression "**(code **)(puVar15 + -0x7e54)" * (pointer_expression "*(code **)(puVar15 + -0x7e54)" * (cast_expression "(code **)(puVar15 + -0x7e54)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar15 + -0x7e54)" ( (binary_expression "puVar15 + -0x7e54" identifier + number_literal) ))))) )) (argument_list "(pSrc->a + iStart,0,nExtra * 0x48)" ( (binary_expression "pSrc->a + iStart" (field_expression "pSrc->a" identifier -> field_identifier) + identifier) , number_literal , (binary_expression "nExtra * 0x48" identifier * number_literal) ))) ;) (expression_statement "paVar5 = &pSrc->a[iStart + -1].u1;" (assignment_expression "paVar5 = &pSrc->a[iStart + -1].u1" identifier = (pointer_expression "&pSrc->a[iStart + -1].u1" & (field_expression "pSrc->a[iStart + -1].u1" (subscript_expression "pSrc->a[iStart + -1]" (field_expression "pSrc->a" identifier -> field_identifier) [ (binary_expression "iStart + -1" identifier + number_literal) ]) . field_identifier))) ;) (if_statement "if (iStart < nExtra + iStart) {\n    iVar6 = 0;\n    do {\n      paVar5[0xc] = (anon_union_4_2_996c0f8d_for_u1)0xffffffff;\n      iVar6 = iVar6 + 1;\n      paVar5 = paVar5 + 0x12;\n    } while (iVar6 != (nExtra + iStart) - iStart);\n  }" if (parenthesized_expression "(iStart < nExtra + iStart)" ( (binary_expression "iStart < nExtra + iStart" identifier < (binary_expression "nExtra + iStart" identifier + identifier)) )) (compound_statement "{\n    iVar6 = 0;\n    do {\n      paVar5[0xc] = (anon_union_4_2_996c0f8d_for_u1)0xffffffff;\n      iVar6 = iVar6 + 1;\n      paVar5 = paVar5 + 0x12;\n    } while (iVar6 != (nExtra + iStart) - iStart);\n  }" { (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" identifier = number_literal) ;) (do_statement "do {\n      paVar5[0xc] = (anon_union_4_2_996c0f8d_for_u1)0xffffffff;\n      iVar6 = iVar6 + 1;\n      paVar5 = paVar5 + 0x12;\n    } while (iVar6 != (nExtra + iStart) - iStart);" do (compound_statement "{\n      paVar5[0xc] = (anon_union_4_2_996c0f8d_for_u1)0xffffffff;\n      iVar6 = iVar6 + 1;\n      paVar5 = paVar5 + 0x12;\n    }" { (expression_statement "paVar5[0xc] = (anon_union_4_2_996c0f8d_for_u1)0xffffffff;" (assignment_expression "paVar5[0xc] = (anon_union_4_2_996c0f8d_for_u1)0xffffffff" (subscript_expression "paVar5[0xc]" identifier [ number_literal ]) = (cast_expression "(anon_union_4_2_996c0f8d_for_u1)0xffffffff" ( (type_descriptor "anon_union_4_2_996c0f8d_for_u1" type_identifier) ) number_literal)) ;) (expression_statement "iVar6 = iVar6 + 1;" (assignment_expression "iVar6 = iVar6 + 1" identifier = (binary_expression "iVar6 + 1" identifier + number_literal)) ;) (expression_statement "paVar5 = paVar5 + 0x12;" (assignment_expression "paVar5 = paVar5 + 0x12" identifier = (binary_expression "paVar5 + 0x12" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar6 != (nExtra + iStart) - iStart)" ( (binary_expression "iVar6 != (nExtra + iStart) - iStart" identifier != (binary_expression "(nExtra + iStart) - iStart" (parenthesized_expression "(nExtra + iStart)" ( (binary_expression "nExtra + iStart" identifier + identifier) )) - identifier)) )) ;) })) (return_statement "return pSrc;" return identifier ;) })))
(translation_unit "uint * FUN_0004fe7c(undefined4 *param_1,uint *param_2,int param_3,int param_4)\n\n{\n  bool bVar1;\n  uint *puVar2;\n  uint *puVar3;\n  uint *puVar4;\n  uint *puVar5;\n  int iVar6;\n  uint *puVar7;\n  uint uVar8;\n  uint *puVar9;\n  uint uVar10;\n  uint uVar11;\n  uint uVar12;\n  \n  uVar8 = *param_2;\n  if (uVar8 + param_3 <= param_2[1]) goto LAB_0004ff80;\n  uVar10 = uVar8 * 2 + param_3;\n  iVar6 = (uint)(uVar10 < uVar8 * 2) +\n          (uVar8 >> 0x1f | ((int)uVar8 >> 0x1f) << 1) + (param_3 >> 0x1f);\n  if (199 < (int)(uVar8 + param_3)) {\n    FUN_0004d4d8(param_1,PTR_s_EFIRSTFOLLOWINGFROMFULLIMITIFORD_000f62d4 + -0x7440,200);\n    return (uint *)0x0;\n  }\n  if (iVar6 < 1) {\n    uVar8 = uVar10 - 1;\n    if (iVar6 != 0) goto LAB_0004ff10;\n    bVar1 = uVar8 < uVar10;\n    if (200 < uVar10) goto LAB_0004ff08;\n  }\n  else {\nLAB_0004ff08:\n    iVar6 = 0;\n    uVar10 = 200;\n    uVar8 = 199;\nLAB_0004ff10:\n    bVar1 = uVar8 < uVar10;\n  }\n  iVar6 = (uint)bVar1 + iVar6 + -1;\n  param_2 = (uint *)FUN_000390c4(*param_1,param_2,\n                                 (uint)(uVar8 * 0x48 + 0x50 < uVar8 * 0x48) +\n                                 (uVar8 * 9 >> 0x1d |\n                                 ((uint)(uVar8 * 9 < uVar8 * 8) +\n                                 (uVar8 >> 0x1d | iVar6 * 8) + iVar6) * 8));\n  if (param_2 == (uint *)0x0) {\n    return (uint *)0x0;\n  }\n  param_2[1] = uVar10;\nLAB_0004ff80:\n  uVar8 = *param_2;\n  iVar6 = uVar8 - 1;\n  if (param_4 <= iVar6) {\n    puVar5 = param_2 + uVar8 * 0x12;\n    puVar9 = param_2 + (param_3 + uVar8) * 0x12 + -0x10;\n    do {\n      puVar4 = puVar5 + -0x10;\n      puVar2 = puVar9;\n      do {\n        puVar7 = puVar2;\n        puVar3 = puVar4;\n        uVar12 = puVar3[1];\n        uVar11 = puVar3[2];\n        uVar10 = puVar3[3];\n        *puVar7 = *puVar3;\n        puVar7[1] = uVar12;\n        puVar7[2] = uVar11;\n        puVar7[3] = uVar10;\n        puVar4 = puVar3 + 4;\n        puVar2 = puVar7 + 4;\n      } while (puVar4 != puVar5);\n      uVar10 = puVar3[5];\n      puVar7[4] = *puVar4;\n      puVar7[5] = uVar10;\n      iVar6 = iVar6 + -1;\n      puVar5 = puVar5 + -0x12;\n      puVar9 = puVar9 + -0x12;\n    } while (param_4 <= iVar6);\n  }\n  *param_2 = uVar8 + param_3;\n  (*(code *)PTR_memset_000f644c)(param_2 + param_4 * 0x12 + 2,0,param_3 * 0x48);\n  puVar5 = param_2 + param_4 * 0x12;\n  if (param_4 < param_3 + param_4) {\n    iVar6 = 0;\n    do {\n      puVar5[0xc] = 0xffffffff;\n      iVar6 = iVar6 + 1;\n      puVar5 = puVar5 + 0x12;\n    } while (iVar6 != (param_3 + param_4) - param_4);\n  }\n  return param_2;\n}\n\n" (function_definition "uint * FUN_0004fe7c(undefined4 *param_1,uint *param_2,int param_3,int param_4)\n\n{\n  bool bVar1;\n  uint *puVar2;\n  uint *puVar3;\n  uint *puVar4;\n  uint *puVar5;\n  int iVar6;\n  uint *puVar7;\n  uint uVar8;\n  uint *puVar9;\n  uint uVar10;\n  uint uVar11;\n  uint uVar12;\n  \n  uVar8 = *param_2;\n  if (uVar8 + param_3 <= param_2[1]) goto LAB_0004ff80;\n  uVar10 = uVar8 * 2 + param_3;\n  iVar6 = (uint)(uVar10 < uVar8 * 2) +\n          (uVar8 >> 0x1f | ((int)uVar8 >> 0x1f) << 1) + (param_3 >> 0x1f);\n  if (199 < (int)(uVar8 + param_3)) {\n    FUN_0004d4d8(param_1,PTR_s_EFIRSTFOLLOWINGFROMFULLIMITIFORD_000f62d4 + -0x7440,200);\n    return (uint *)0x0;\n  }\n  if (iVar6 < 1) {\n    uVar8 = uVar10 - 1;\n    if (iVar6 != 0) goto LAB_0004ff10;\n    bVar1 = uVar8 < uVar10;\n    if (200 < uVar10) goto LAB_0004ff08;\n  }\n  else {\nLAB_0004ff08:\n    iVar6 = 0;\n    uVar10 = 200;\n    uVar8 = 199;\nLAB_0004ff10:\n    bVar1 = uVar8 < uVar10;\n  }\n  iVar6 = (uint)bVar1 + iVar6 + -1;\n  param_2 = (uint *)FUN_000390c4(*param_1,param_2,\n                                 (uint)(uVar8 * 0x48 + 0x50 < uVar8 * 0x48) +\n                                 (uVar8 * 9 >> 0x1d |\n                                 ((uint)(uVar8 * 9 < uVar8 * 8) +\n                                 (uVar8 >> 0x1d | iVar6 * 8) + iVar6) * 8));\n  if (param_2 == (uint *)0x0) {\n    return (uint *)0x0;\n  }\n  param_2[1] = uVar10;\nLAB_0004ff80:\n  uVar8 = *param_2;\n  iVar6 = uVar8 - 1;\n  if (param_4 <= iVar6) {\n    puVar5 = param_2 + uVar8 * 0x12;\n    puVar9 = param_2 + (param_3 + uVar8) * 0x12 + -0x10;\n    do {\n      puVar4 = puVar5 + -0x10;\n      puVar2 = puVar9;\n      do {\n        puVar7 = puVar2;\n        puVar3 = puVar4;\n        uVar12 = puVar3[1];\n        uVar11 = puVar3[2];\n        uVar10 = puVar3[3];\n        *puVar7 = *puVar3;\n        puVar7[1] = uVar12;\n        puVar7[2] = uVar11;\n        puVar7[3] = uVar10;\n        puVar4 = puVar3 + 4;\n        puVar2 = puVar7 + 4;\n      } while (puVar4 != puVar5);\n      uVar10 = puVar3[5];\n      puVar7[4] = *puVar4;\n      puVar7[5] = uVar10;\n      iVar6 = iVar6 + -1;\n      puVar5 = puVar5 + -0x12;\n      puVar9 = puVar9 + -0x12;\n    } while (param_4 <= iVar6);\n  }\n  *param_2 = uVar8 + param_3;\n  (*(code *)PTR_memset_000f644c)(param_2 + param_4 * 0x12 + 2,0,param_3 * 0x48);\n  puVar5 = param_2 + param_4 * 0x12;\n  if (param_4 < param_3 + param_4) {\n    iVar6 = 0;\n    do {\n      puVar5[0xc] = 0xffffffff;\n      iVar6 = iVar6 + 1;\n      puVar5 = puVar5 + 0x12;\n    } while (iVar6 != (param_3 + param_4) - param_4);\n  }\n  return param_2;\n}" type_identifier (pointer_declarator "* FUN_0004fe7c(undefined4 *param_1,uint *param_2,int param_3,int param_4)" * (function_declarator "FUN_0004fe7c(undefined4 *param_1,uint *param_2,int param_3,int param_4)" identifier (parameter_list "(undefined4 *param_1,uint *param_2,int param_3,int param_4)" ( (parameter_declaration "undefined4 *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "uint *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "int param_3" primitive_type identifier) , (parameter_declaration "int param_4" primitive_type identifier) )))) (compound_statement "{\n  bool bVar1;\n  uint *puVar2;\n  uint *puVar3;\n  uint *puVar4;\n  uint *puVar5;\n  int iVar6;\n  uint *puVar7;\n  uint uVar8;\n  uint *puVar9;\n  uint uVar10;\n  uint uVar11;\n  uint uVar12;\n  \n  uVar8 = *param_2;\n  if (uVar8 + param_3 <= param_2[1]) goto LAB_0004ff80;\n  uVar10 = uVar8 * 2 + param_3;\n  iVar6 = (uint)(uVar10 < uVar8 * 2) +\n          (uVar8 >> 0x1f | ((int)uVar8 >> 0x1f) << 1) + (param_3 >> 0x1f);\n  if (199 < (int)(uVar8 + param_3)) {\n    FUN_0004d4d8(param_1,PTR_s_EFIRSTFOLLOWINGFROMFULLIMITIFORD_000f62d4 + -0x7440,200);\n    return (uint *)0x0;\n  }\n  if (iVar6 < 1) {\n    uVar8 = uVar10 - 1;\n    if (iVar6 != 0) goto LAB_0004ff10;\n    bVar1 = uVar8 < uVar10;\n    if (200 < uVar10) goto LAB_0004ff08;\n  }\n  else {\nLAB_0004ff08:\n    iVar6 = 0;\n    uVar10 = 200;\n    uVar8 = 199;\nLAB_0004ff10:\n    bVar1 = uVar8 < uVar10;\n  }\n  iVar6 = (uint)bVar1 + iVar6 + -1;\n  param_2 = (uint *)FUN_000390c4(*param_1,param_2,\n                                 (uint)(uVar8 * 0x48 + 0x50 < uVar8 * 0x48) +\n                                 (uVar8 * 9 >> 0x1d |\n                                 ((uint)(uVar8 * 9 < uVar8 * 8) +\n                                 (uVar8 >> 0x1d | iVar6 * 8) + iVar6) * 8));\n  if (param_2 == (uint *)0x0) {\n    return (uint *)0x0;\n  }\n  param_2[1] = uVar10;\nLAB_0004ff80:\n  uVar8 = *param_2;\n  iVar6 = uVar8 - 1;\n  if (param_4 <= iVar6) {\n    puVar5 = param_2 + uVar8 * 0x12;\n    puVar9 = param_2 + (param_3 + uVar8) * 0x12 + -0x10;\n    do {\n      puVar4 = puVar5 + -0x10;\n      puVar2 = puVar9;\n      do {\n        puVar7 = puVar2;\n        puVar3 = puVar4;\n        uVar12 = puVar3[1];\n        uVar11 = puVar3[2];\n        uVar10 = puVar3[3];\n        *puVar7 = *puVar3;\n        puVar7[1] = uVar12;\n        puVar7[2] = uVar11;\n        puVar7[3] = uVar10;\n        puVar4 = puVar3 + 4;\n        puVar2 = puVar7 + 4;\n      } while (puVar4 != puVar5);\n      uVar10 = puVar3[5];\n      puVar7[4] = *puVar4;\n      puVar7[5] = uVar10;\n      iVar6 = iVar6 + -1;\n      puVar5 = puVar5 + -0x12;\n      puVar9 = puVar9 + -0x12;\n    } while (param_4 <= iVar6);\n  }\n  *param_2 = uVar8 + param_3;\n  (*(code *)PTR_memset_000f644c)(param_2 + param_4 * 0x12 + 2,0,param_3 * 0x48);\n  puVar5 = param_2 + param_4 * 0x12;\n  if (param_4 < param_3 + param_4) {\n    iVar6 = 0;\n    do {\n      puVar5[0xc] = 0xffffffff;\n      iVar6 = iVar6 + 1;\n      puVar5 = puVar5 + 0x12;\n    } while (iVar6 != (param_3 + param_4) - param_4);\n  }\n  return param_2;\n}" { (declaration "bool bVar1;" primitive_type identifier ;) (declaration "uint *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "uint *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "uint *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "uint *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "uint *puVar7;" type_identifier (pointer_declarator "*puVar7" * identifier) ;) (declaration "uint uVar8;" type_identifier identifier ;) (declaration "uint *puVar9;" type_identifier (pointer_declarator "*puVar9" * identifier) ;) (declaration "uint uVar10;" type_identifier identifier ;) (declaration "uint uVar11;" type_identifier identifier ;) (declaration "uint uVar12;" type_identifier identifier ;) (expression_statement "uVar8 = *param_2;" (assignment_expression "uVar8 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (if_statement "if (uVar8 + param_3 <= param_2[1]) goto LAB_0004ff80;" if (parenthesized_expression "(uVar8 + param_3 <= param_2[1])" ( (binary_expression "uVar8 + param_3 <= param_2[1]" (binary_expression "uVar8 + param_3" identifier + identifier) <= (subscript_expression "param_2[1]" identifier [ number_literal ])) )) (goto_statement "goto LAB_0004ff80;" goto statement_identifier ;)) (expression_statement "uVar10 = uVar8 * 2 + param_3;" (assignment_expression "uVar10 = uVar8 * 2 + param_3" identifier = (binary_expression "uVar8 * 2 + param_3" (binary_expression "uVar8 * 2" identifier * number_literal) + identifier)) ;) (expression_statement "iVar6 = (uint)(uVar10 < uVar8 * 2) +\n          (uVar8 >> 0x1f | ((int)uVar8 >> 0x1f) << 1) + (param_3 >> 0x1f);" (assignment_expression "iVar6 = (uint)(uVar10 < uVar8 * 2) +\n          (uVar8 >> 0x1f | ((int)uVar8 >> 0x1f) << 1) + (param_3 >> 0x1f)" identifier = (binary_expression "(uint)(uVar10 < uVar8 * 2) +\n          (uVar8 >> 0x1f | ((int)uVar8 >> 0x1f) << 1) + (param_3 >> 0x1f)" (binary_expression "(uint)(uVar10 < uVar8 * 2) +\n          (uVar8 >> 0x1f | ((int)uVar8 >> 0x1f) << 1)" (call_expression "(uint)(uVar10 < uVar8 * 2)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar10 < uVar8 * 2)" ( (binary_expression "uVar10 < uVar8 * 2" identifier < (binary_expression "uVar8 * 2" identifier * number_literal)) ))) + (parenthesized_expression "(uVar8 >> 0x1f | ((int)uVar8 >> 0x1f) << 1)" ( (binary_expression "uVar8 >> 0x1f | ((int)uVar8 >> 0x1f) << 1" (binary_expression "uVar8 >> 0x1f" identifier >> number_literal) | (binary_expression "((int)uVar8 >> 0x1f) << 1" (parenthesized_expression "((int)uVar8 >> 0x1f)" ( (binary_expression "(int)uVar8 >> 0x1f" (cast_expression "(int)uVar8" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) )) << number_literal)) ))) + (parenthesized_expression "(param_3 >> 0x1f)" ( (binary_expression "param_3 >> 0x1f" identifier >> number_literal) )))) ;) (if_statement "if (199 < (int)(uVar8 + param_3)) {\n    FUN_0004d4d8(param_1,PTR_s_EFIRSTFOLLOWINGFROMFULLIMITIFORD_000f62d4 + -0x7440,200);\n    return (uint *)0x0;\n  }" if (parenthesized_expression "(199 < (int)(uVar8 + param_3))" ( (binary_expression "199 < (int)(uVar8 + param_3)" number_literal < (cast_expression "(int)(uVar8 + param_3)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar8 + param_3)" ( (binary_expression "uVar8 + param_3" identifier + identifier) )))) )) (compound_statement "{\n    FUN_0004d4d8(param_1,PTR_s_EFIRSTFOLLOWINGFROMFULLIMITIFORD_000f62d4 + -0x7440,200);\n    return (uint *)0x0;\n  }" { (expression_statement "FUN_0004d4d8(param_1,PTR_s_EFIRSTFOLLOWINGFROMFULLIMITIFORD_000f62d4 + -0x7440,200);" (call_expression "FUN_0004d4d8(param_1,PTR_s_EFIRSTFOLLOWINGFROMFULLIMITIFORD_000f62d4 + -0x7440,200)" identifier (argument_list "(param_1,PTR_s_EFIRSTFOLLOWINGFROMFULLIMITIFORD_000f62d4 + -0x7440,200)" ( identifier , (binary_expression "PTR_s_EFIRSTFOLLOWINGFROMFULLIMITIFORD_000f62d4 + -0x7440" identifier + number_literal) , number_literal ))) ;) (return_statement "return (uint *)0x0;" return (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (if_statement "if (iVar6 < 1) {\n    uVar8 = uVar10 - 1;\n    if (iVar6 != 0) goto LAB_0004ff10;\n    bVar1 = uVar8 < uVar10;\n    if (200 < uVar10) goto LAB_0004ff08;\n  }\n  else {\nLAB_0004ff08:\n    iVar6 = 0;\n    uVar10 = 200;\n    uVar8 = 199;\nLAB_0004ff10:\n    bVar1 = uVar8 < uVar10;\n  }" if (parenthesized_expression "(iVar6 < 1)" ( (binary_expression "iVar6 < 1" identifier < number_literal) )) (compound_statement "{\n    uVar8 = uVar10 - 1;\n    if (iVar6 != 0) goto LAB_0004ff10;\n    bVar1 = uVar8 < uVar10;\n    if (200 < uVar10) goto LAB_0004ff08;\n  }" { (expression_statement "uVar8 = uVar10 - 1;" (assignment_expression "uVar8 = uVar10 - 1" identifier = (binary_expression "uVar10 - 1" identifier - number_literal)) ;) (if_statement "if (iVar6 != 0) goto LAB_0004ff10;" if (parenthesized_expression "(iVar6 != 0)" ( (binary_expression "iVar6 != 0" identifier != number_literal) )) (goto_statement "goto LAB_0004ff10;" goto statement_identifier ;)) (expression_statement "bVar1 = uVar8 < uVar10;" (assignment_expression "bVar1 = uVar8 < uVar10" identifier = (binary_expression "uVar8 < uVar10" identifier < identifier)) ;) (if_statement "if (200 < uVar10) goto LAB_0004ff08;" if (parenthesized_expression "(200 < uVar10)" ( (binary_expression "200 < uVar10" number_literal < identifier) )) (goto_statement "goto LAB_0004ff08;" goto statement_identifier ;)) }) (else_clause "else {\nLAB_0004ff08:\n    iVar6 = 0;\n    uVar10 = 200;\n    uVar8 = 199;\nLAB_0004ff10:\n    bVar1 = uVar8 < uVar10;\n  }" else (compound_statement "{\nLAB_0004ff08:\n    iVar6 = 0;\n    uVar10 = 200;\n    uVar8 = 199;\nLAB_0004ff10:\n    bVar1 = uVar8 < uVar10;\n  }" { (labeled_statement "LAB_0004ff08:\n    iVar6 = 0;" statement_identifier : (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" identifier = number_literal) ;)) (expression_statement "uVar10 = 200;" (assignment_expression "uVar10 = 200" identifier = number_literal) ;) (expression_statement "uVar8 = 199;" (assignment_expression "uVar8 = 199" identifier = number_literal) ;) (labeled_statement "LAB_0004ff10:\n    bVar1 = uVar8 < uVar10;" statement_identifier : (expression_statement "bVar1 = uVar8 < uVar10;" (assignment_expression "bVar1 = uVar8 < uVar10" identifier = (binary_expression "uVar8 < uVar10" identifier < identifier)) ;)) }))) (expression_statement "iVar6 = (uint)bVar1 + iVar6 + -1;" (assignment_expression "iVar6 = (uint)bVar1 + iVar6 + -1" identifier = (binary_expression "(uint)bVar1 + iVar6 + -1" (binary_expression "(uint)bVar1 + iVar6" (cast_expression "(uint)bVar1" ( (type_descriptor "uint" type_identifier) ) identifier) + identifier) + number_literal)) ;) (expression_statement "param_2 = (uint *)FUN_000390c4(*param_1,param_2,\n                                 (uint)(uVar8 * 0x48 + 0x50 < uVar8 * 0x48) +\n                                 (uVar8 * 9 >> 0x1d |\n                                 ((uint)(uVar8 * 9 < uVar8 * 8) +\n                                 (uVar8 >> 0x1d | iVar6 * 8) + iVar6) * 8));" (assignment_expression "param_2 = (uint *)FUN_000390c4(*param_1,param_2,\n                                 (uint)(uVar8 * 0x48 + 0x50 < uVar8 * 0x48) +\n                                 (uVar8 * 9 >> 0x1d |\n                                 ((uint)(uVar8 * 9 < uVar8 * 8) +\n                                 (uVar8 >> 0x1d | iVar6 * 8) + iVar6) * 8))" identifier = (cast_expression "(uint *)FUN_000390c4(*param_1,param_2,\n                                 (uint)(uVar8 * 0x48 + 0x50 < uVar8 * 0x48) +\n                                 (uVar8 * 9 >> 0x1d |\n                                 ((uint)(uVar8 * 9 < uVar8 * 8) +\n                                 (uVar8 >> 0x1d | iVar6 * 8) + iVar6) * 8))" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_000390c4(*param_1,param_2,\n                                 (uint)(uVar8 * 0x48 + 0x50 < uVar8 * 0x48) +\n                                 (uVar8 * 9 >> 0x1d |\n                                 ((uint)(uVar8 * 9 < uVar8 * 8) +\n                                 (uVar8 >> 0x1d | iVar6 * 8) + iVar6) * 8))" identifier (argument_list "(*param_1,param_2,\n                                 (uint)(uVar8 * 0x48 + 0x50 < uVar8 * 0x48) +\n                                 (uVar8 * 9 >> 0x1d |\n                                 ((uint)(uVar8 * 9 < uVar8 * 8) +\n                                 (uVar8 >> 0x1d | iVar6 * 8) + iVar6) * 8))" ( (pointer_expression "*param_1" * identifier) , identifier , (binary_expression "(uint)(uVar8 * 0x48 + 0x50 < uVar8 * 0x48) +\n                                 (uVar8 * 9 >> 0x1d |\n                                 ((uint)(uVar8 * 9 < uVar8 * 8) +\n                                 (uVar8 >> 0x1d | iVar6 * 8) + iVar6) * 8)" (call_expression "(uint)(uVar8 * 0x48 + 0x50 < uVar8 * 0x48)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar8 * 0x48 + 0x50 < uVar8 * 0x48)" ( (binary_expression "uVar8 * 0x48 + 0x50 < uVar8 * 0x48" (binary_expression "uVar8 * 0x48 + 0x50" (binary_expression "uVar8 * 0x48" identifier * number_literal) + number_literal) < (binary_expression "uVar8 * 0x48" identifier * number_literal)) ))) + (parenthesized_expression "(uVar8 * 9 >> 0x1d |\n                                 ((uint)(uVar8 * 9 < uVar8 * 8) +\n                                 (uVar8 >> 0x1d | iVar6 * 8) + iVar6) * 8)" ( (binary_expression "uVar8 * 9 >> 0x1d |\n                                 ((uint)(uVar8 * 9 < uVar8 * 8) +\n                                 (uVar8 >> 0x1d | iVar6 * 8) + iVar6) * 8" (binary_expression "uVar8 * 9 >> 0x1d" (binary_expression "uVar8 * 9" identifier * number_literal) >> number_literal) | (binary_expression "((uint)(uVar8 * 9 < uVar8 * 8) +\n                                 (uVar8 >> 0x1d | iVar6 * 8) + iVar6) * 8" (parenthesized_expression "((uint)(uVar8 * 9 < uVar8 * 8) +\n                                 (uVar8 >> 0x1d | iVar6 * 8) + iVar6)" ( (binary_expression "(uint)(uVar8 * 9 < uVar8 * 8) +\n                                 (uVar8 >> 0x1d | iVar6 * 8) + iVar6" (binary_expression "(uint)(uVar8 * 9 < uVar8 * 8) +\n                                 (uVar8 >> 0x1d | iVar6 * 8)" (call_expression "(uint)(uVar8 * 9 < uVar8 * 8)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar8 * 9 < uVar8 * 8)" ( (binary_expression "uVar8 * 9 < uVar8 * 8" (binary_expression "uVar8 * 9" identifier * number_literal) < (binary_expression "uVar8 * 8" identifier * number_literal)) ))) + (parenthesized_expression "(uVar8 >> 0x1d | iVar6 * 8)" ( (binary_expression "uVar8 >> 0x1d | iVar6 * 8" (binary_expression "uVar8 >> 0x1d" identifier >> number_literal) | (binary_expression "iVar6 * 8" identifier * number_literal)) ))) + identifier) )) * number_literal)) ))) ))))) ;) (if_statement "if (param_2 == (uint *)0x0) {\n    return (uint *)0x0;\n  }" if (parenthesized_expression "(param_2 == (uint *)0x0)" ( (binary_expression "param_2 == (uint *)0x0" identifier == (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    return (uint *)0x0;\n  }" { (return_statement "return (uint *)0x0;" return (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (expression_statement "param_2[1] = uVar10;" (assignment_expression "param_2[1] = uVar10" (subscript_expression "param_2[1]" identifier [ number_literal ]) = identifier) ;) (labeled_statement "LAB_0004ff80:\n  uVar8 = *param_2;" statement_identifier : (expression_statement "uVar8 = *param_2;" (assignment_expression "uVar8 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;)) (expression_statement "iVar6 = uVar8 - 1;" (assignment_expression "iVar6 = uVar8 - 1" identifier = (binary_expression "uVar8 - 1" identifier - number_literal)) ;) (if_statement "if (param_4 <= iVar6) {\n    puVar5 = param_2 + uVar8 * 0x12;\n    puVar9 = param_2 + (param_3 + uVar8) * 0x12 + -0x10;\n    do {\n      puVar4 = puVar5 + -0x10;\n      puVar2 = puVar9;\n      do {\n        puVar7 = puVar2;\n        puVar3 = puVar4;\n        uVar12 = puVar3[1];\n        uVar11 = puVar3[2];\n        uVar10 = puVar3[3];\n        *puVar7 = *puVar3;\n        puVar7[1] = uVar12;\n        puVar7[2] = uVar11;\n        puVar7[3] = uVar10;\n        puVar4 = puVar3 + 4;\n        puVar2 = puVar7 + 4;\n      } while (puVar4 != puVar5);\n      uVar10 = puVar3[5];\n      puVar7[4] = *puVar4;\n      puVar7[5] = uVar10;\n      iVar6 = iVar6 + -1;\n      puVar5 = puVar5 + -0x12;\n      puVar9 = puVar9 + -0x12;\n    } while (param_4 <= iVar6);\n  }" if (parenthesized_expression "(param_4 <= iVar6)" ( (binary_expression "param_4 <= iVar6" identifier <= identifier) )) (compound_statement "{\n    puVar5 = param_2 + uVar8 * 0x12;\n    puVar9 = param_2 + (param_3 + uVar8) * 0x12 + -0x10;\n    do {\n      puVar4 = puVar5 + -0x10;\n      puVar2 = puVar9;\n      do {\n        puVar7 = puVar2;\n        puVar3 = puVar4;\n        uVar12 = puVar3[1];\n        uVar11 = puVar3[2];\n        uVar10 = puVar3[3];\n        *puVar7 = *puVar3;\n        puVar7[1] = uVar12;\n        puVar7[2] = uVar11;\n        puVar7[3] = uVar10;\n        puVar4 = puVar3 + 4;\n        puVar2 = puVar7 + 4;\n      } while (puVar4 != puVar5);\n      uVar10 = puVar3[5];\n      puVar7[4] = *puVar4;\n      puVar7[5] = uVar10;\n      iVar6 = iVar6 + -1;\n      puVar5 = puVar5 + -0x12;\n      puVar9 = puVar9 + -0x12;\n    } while (param_4 <= iVar6);\n  }" { (expression_statement "puVar5 = param_2 + uVar8 * 0x12;" (assignment_expression "puVar5 = param_2 + uVar8 * 0x12" identifier = (binary_expression "param_2 + uVar8 * 0x12" identifier + (binary_expression "uVar8 * 0x12" identifier * number_literal))) ;) (expression_statement "puVar9 = param_2 + (param_3 + uVar8) * 0x12 + -0x10;" (assignment_expression "puVar9 = param_2 + (param_3 + uVar8) * 0x12 + -0x10" identifier = (binary_expression "param_2 + (param_3 + uVar8) * 0x12 + -0x10" (binary_expression "param_2 + (param_3 + uVar8) * 0x12" identifier + (binary_expression "(param_3 + uVar8) * 0x12" (parenthesized_expression "(param_3 + uVar8)" ( (binary_expression "param_3 + uVar8" identifier + identifier) )) * number_literal)) + number_literal)) ;) (do_statement "do {\n      puVar4 = puVar5 + -0x10;\n      puVar2 = puVar9;\n      do {\n        puVar7 = puVar2;\n        puVar3 = puVar4;\n        uVar12 = puVar3[1];\n        uVar11 = puVar3[2];\n        uVar10 = puVar3[3];\n        *puVar7 = *puVar3;\n        puVar7[1] = uVar12;\n        puVar7[2] = uVar11;\n        puVar7[3] = uVar10;\n        puVar4 = puVar3 + 4;\n        puVar2 = puVar7 + 4;\n      } while (puVar4 != puVar5);\n      uVar10 = puVar3[5];\n      puVar7[4] = *puVar4;\n      puVar7[5] = uVar10;\n      iVar6 = iVar6 + -1;\n      puVar5 = puVar5 + -0x12;\n      puVar9 = puVar9 + -0x12;\n    } while (param_4 <= iVar6);" do (compound_statement "{\n      puVar4 = puVar5 + -0x10;\n      puVar2 = puVar9;\n      do {\n        puVar7 = puVar2;\n        puVar3 = puVar4;\n        uVar12 = puVar3[1];\n        uVar11 = puVar3[2];\n        uVar10 = puVar3[3];\n        *puVar7 = *puVar3;\n        puVar7[1] = uVar12;\n        puVar7[2] = uVar11;\n        puVar7[3] = uVar10;\n        puVar4 = puVar3 + 4;\n        puVar2 = puVar7 + 4;\n      } while (puVar4 != puVar5);\n      uVar10 = puVar3[5];\n      puVar7[4] = *puVar4;\n      puVar7[5] = uVar10;\n      iVar6 = iVar6 + -1;\n      puVar5 = puVar5 + -0x12;\n      puVar9 = puVar9 + -0x12;\n    }" { (expression_statement "puVar4 = puVar5 + -0x10;" (assignment_expression "puVar4 = puVar5 + -0x10" identifier = (binary_expression "puVar5 + -0x10" identifier + number_literal)) ;) (expression_statement "puVar2 = puVar9;" (assignment_expression "puVar2 = puVar9" identifier = identifier) ;) (do_statement "do {\n        puVar7 = puVar2;\n        puVar3 = puVar4;\n        uVar12 = puVar3[1];\n        uVar11 = puVar3[2];\n        uVar10 = puVar3[3];\n        *puVar7 = *puVar3;\n        puVar7[1] = uVar12;\n        puVar7[2] = uVar11;\n        puVar7[3] = uVar10;\n        puVar4 = puVar3 + 4;\n        puVar2 = puVar7 + 4;\n      } while (puVar4 != puVar5);" do (compound_statement "{\n        puVar7 = puVar2;\n        puVar3 = puVar4;\n        uVar12 = puVar3[1];\n        uVar11 = puVar3[2];\n        uVar10 = puVar3[3];\n        *puVar7 = *puVar3;\n        puVar7[1] = uVar12;\n        puVar7[2] = uVar11;\n        puVar7[3] = uVar10;\n        puVar4 = puVar3 + 4;\n        puVar2 = puVar7 + 4;\n      }" { (expression_statement "puVar7 = puVar2;" (assignment_expression "puVar7 = puVar2" identifier = identifier) ;) (expression_statement "puVar3 = puVar4;" (assignment_expression "puVar3 = puVar4" identifier = identifier) ;) (expression_statement "uVar12 = puVar3[1];" (assignment_expression "uVar12 = puVar3[1]" identifier = (subscript_expression "puVar3[1]" identifier [ number_literal ])) ;) (expression_statement "uVar11 = puVar3[2];" (assignment_expression "uVar11 = puVar3[2]" identifier = (subscript_expression "puVar3[2]" identifier [ number_literal ])) ;) (expression_statement "uVar10 = puVar3[3];" (assignment_expression "uVar10 = puVar3[3]" identifier = (subscript_expression "puVar3[3]" identifier [ number_literal ])) ;) (expression_statement "*puVar7 = *puVar3;" (assignment_expression "*puVar7 = *puVar3" (pointer_expression "*puVar7" * identifier) = (pointer_expression "*puVar3" * identifier)) ;) (expression_statement "puVar7[1] = uVar12;" (assignment_expression "puVar7[1] = uVar12" (subscript_expression "puVar7[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar7[2] = uVar11;" (assignment_expression "puVar7[2] = uVar11" (subscript_expression "puVar7[2]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar7[3] = uVar10;" (assignment_expression "puVar7[3] = uVar10" (subscript_expression "puVar7[3]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar4 = puVar3 + 4;" (assignment_expression "puVar4 = puVar3 + 4" identifier = (binary_expression "puVar3 + 4" identifier + number_literal)) ;) (expression_statement "puVar2 = puVar7 + 4;" (assignment_expression "puVar2 = puVar7 + 4" identifier = (binary_expression "puVar7 + 4" identifier + number_literal)) ;) }) while (parenthesized_expression "(puVar4 != puVar5)" ( (binary_expression "puVar4 != puVar5" identifier != identifier) )) ;) (expression_statement "uVar10 = puVar3[5];" (assignment_expression "uVar10 = puVar3[5]" identifier = (subscript_expression "puVar3[5]" identifier [ number_literal ])) ;) (expression_statement "puVar7[4] = *puVar4;" (assignment_expression "puVar7[4] = *puVar4" (subscript_expression "puVar7[4]" identifier [ number_literal ]) = (pointer_expression "*puVar4" * identifier)) ;) (expression_statement "puVar7[5] = uVar10;" (assignment_expression "puVar7[5] = uVar10" (subscript_expression "puVar7[5]" identifier [ number_literal ]) = identifier) ;) (expression_statement "iVar6 = iVar6 + -1;" (assignment_expression "iVar6 = iVar6 + -1" identifier = (binary_expression "iVar6 + -1" identifier + number_literal)) ;) (expression_statement "puVar5 = puVar5 + -0x12;" (assignment_expression "puVar5 = puVar5 + -0x12" identifier = (binary_expression "puVar5 + -0x12" identifier + number_literal)) ;) (expression_statement "puVar9 = puVar9 + -0x12;" (assignment_expression "puVar9 = puVar9 + -0x12" identifier = (binary_expression "puVar9 + -0x12" identifier + number_literal)) ;) }) while (parenthesized_expression "(param_4 <= iVar6)" ( (binary_expression "param_4 <= iVar6" identifier <= identifier) )) ;) })) (expression_statement "*param_2 = uVar8 + param_3;" (assignment_expression "*param_2 = uVar8 + param_3" (pointer_expression "*param_2" * identifier) = (binary_expression "uVar8 + param_3" identifier + identifier)) ;) (expression_statement "(*(code *)PTR_memset_000f644c)(param_2 + param_4 * 0x12 + 2,0,param_3 * 0x48);" (call_expression "(*(code *)PTR_memset_000f644c)(param_2 + param_4 * 0x12 + 2,0,param_3 * 0x48)" (parenthesized_expression "(*(code *)PTR_memset_000f644c)" ( (pointer_expression "*(code *)PTR_memset_000f644c" * (cast_expression "(code *)PTR_memset_000f644c" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(param_2 + param_4 * 0x12 + 2,0,param_3 * 0x48)" ( (binary_expression "param_2 + param_4 * 0x12 + 2" (binary_expression "param_2 + param_4 * 0x12" identifier + (binary_expression "param_4 * 0x12" identifier * number_literal)) + number_literal) , number_literal , (binary_expression "param_3 * 0x48" identifier * number_literal) ))) ;) (expression_statement "puVar5 = param_2 + param_4 * 0x12;" (assignment_expression "puVar5 = param_2 + param_4 * 0x12" identifier = (binary_expression "param_2 + param_4 * 0x12" identifier + (binary_expression "param_4 * 0x12" identifier * number_literal))) ;) (if_statement "if (param_4 < param_3 + param_4) {\n    iVar6 = 0;\n    do {\n      puVar5[0xc] = 0xffffffff;\n      iVar6 = iVar6 + 1;\n      puVar5 = puVar5 + 0x12;\n    } while (iVar6 != (param_3 + param_4) - param_4);\n  }" if (parenthesized_expression "(param_4 < param_3 + param_4)" ( (binary_expression "param_4 < param_3 + param_4" identifier < (binary_expression "param_3 + param_4" identifier + identifier)) )) (compound_statement "{\n    iVar6 = 0;\n    do {\n      puVar5[0xc] = 0xffffffff;\n      iVar6 = iVar6 + 1;\n      puVar5 = puVar5 + 0x12;\n    } while (iVar6 != (param_3 + param_4) - param_4);\n  }" { (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" identifier = number_literal) ;) (do_statement "do {\n      puVar5[0xc] = 0xffffffff;\n      iVar6 = iVar6 + 1;\n      puVar5 = puVar5 + 0x12;\n    } while (iVar6 != (param_3 + param_4) - param_4);" do (compound_statement "{\n      puVar5[0xc] = 0xffffffff;\n      iVar6 = iVar6 + 1;\n      puVar5 = puVar5 + 0x12;\n    }" { (expression_statement "puVar5[0xc] = 0xffffffff;" (assignment_expression "puVar5[0xc] = 0xffffffff" (subscript_expression "puVar5[0xc]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "iVar6 = iVar6 + 1;" (assignment_expression "iVar6 = iVar6 + 1" identifier = (binary_expression "iVar6 + 1" identifier + number_literal)) ;) (expression_statement "puVar5 = puVar5 + 0x12;" (assignment_expression "puVar5 = puVar5 + 0x12" identifier = (binary_expression "puVar5 + 0x12" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar6 != (param_3 + param_4) - param_4)" ( (binary_expression "iVar6 != (param_3 + param_4) - param_4" identifier != (binary_expression "(param_3 + param_4) - param_4" (parenthesized_expression "(param_3 + param_4)" ( (binary_expression "param_3 + param_4" identifier + identifier) )) - identifier)) )) ;) })) (return_statement "return param_2;" return identifier ;) })))
(translation_unit (function_definition TYPE (pointer_declarator * (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) )))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT + IDENT) <= (subscript_expression IDENT [ LIT ])) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT * LIT) + IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT < (binary_expression IDENT * LIT)) ))) + (parenthesized_expression ( (binary_expression (binary_expression IDENT >> LIT) | (binary_expression (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) )) << LIT)) ))) + (parenthesized_expression ( (binary_expression IDENT >> LIT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression IDENT + IDENT) )))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , (binary_expression IDENT + LIT) , LIT ))) ;) (return_statement return (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT < IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (goto_statement goto statement_identifier ;)) }) (else_clause else (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = LIT) ;)) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (binary_expression IDENT < IDENT)) ;)) }))) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + IDENT) + LIT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( (pointer_expression * IDENT) , IDENT , (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (binary_expression (binary_expression IDENT * LIT) + LIT) < (binary_expression IDENT * LIT)) ))) + (parenthesized_expression ( (binary_expression (binary_expression (binary_expression IDENT * LIT) >> LIT) | (binary_expression (parenthesized_expression ( (binary_expression (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (binary_expression IDENT * LIT) < (binary_expression IDENT * LIT)) ))) + (parenthesized_expression ( (binary_expression (binary_expression IDENT >> LIT) | (binary_expression IDENT * LIT)) ))) + IDENT) )) * LIT)) ))) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (return_statement return (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT) ;) })) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (binary_expression IDENT * LIT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + (binary_expression (parenthesized_expression ( (binary_expression IDENT + IDENT) )) * LIT)) + LIT)) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (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 (pointer_expression * IDENT) = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != IDENT) )) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) ;) })) (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression IDENT + IDENT)) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( (binary_expression (binary_expression IDENT + (binary_expression IDENT * LIT)) + LIT) , LIT , (binary_expression IDENT * LIT) ))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (binary_expression IDENT * LIT))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < (binary_expression IDENT + IDENT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != (binary_expression (parenthesized_expression ( (binary_expression IDENT + IDENT) )) - IDENT)) )) ;) })) (return_statement return IDENT ;) })))
(function_definition "uint * FUN_0004fe7c(undefined4 *param_1,uint *param_2,int param_3,int param_4)\n\n{\n  bool bVar1;\n  uint *puVar2;\n  uint *puVar3;\n  uint *puVar4;\n  uint *puVar5;\n  int iVar6;\n  uint *puVar7;\n  uint uVar8;\n  uint *puVar9;\n  uint uVar10;\n  uint uVar11;\n  uint uVar12;\n  \n  uVar8 = *param_2;\n  if (uVar8 + param_3 <= param_2[1]) goto LAB_0004ff80;\n  uVar10 = uVar8 * 2 + param_3;\n  iVar6 = (uint)(uVar10 < uVar8 * 2) +\n          (uVar8 >> 0x1f | ((int)uVar8 >> 0x1f) << 1) + (param_3 >> 0x1f);\n  if (199 < (int)(uVar8 + param_3)) {\n    FUN_0004d4d8(param_1,PTR_s_EFIRSTFOLLOWINGFROMFULLIMITIFORD_000f62d4 + -0x7440,200);\n    return (uint *)0x0;\n  }\n  if (iVar6 < 1) {\n    uVar8 = uVar10 - 1;\n    if (iVar6 != 0) goto LAB_0004ff10;\n    bVar1 = uVar8 < uVar10;\n    if (200 < uVar10) goto LAB_0004ff08;\n  }\n  else {\nLAB_0004ff08:\n    iVar6 = 0;\n    uVar10 = 200;\n    uVar8 = 199;\nLAB_0004ff10:\n    bVar1 = uVar8 < uVar10;\n  }\n  iVar6 = (uint)bVar1 + iVar6 + -1;\n  param_2 = (uint *)FUN_000390c4(*param_1,param_2,\n                                 (uint)(uVar8 * 0x48 + 0x50 < uVar8 * 0x48) +\n                                 (uVar8 * 9 >> 0x1d |\n                                 ((uint)(uVar8 * 9 < uVar8 * 8) +\n                                 (uVar8 >> 0x1d | iVar6 * 8) + iVar6) * 8));\n  if (param_2 == (uint *)0x0) {\n    return (uint *)0x0;\n  }\n  param_2[1] = uVar10;\nLAB_0004ff80:\n  uVar8 = *param_2;\n  iVar6 = uVar8 - 1;\n  if (param_4 <= iVar6) {\n    puVar5 = param_2 + uVar8 * 0x12;\n    puVar9 = param_2 + (param_3 + uVar8) * 0x12 + -0x10;\n    do {\n      puVar4 = puVar5 + -0x10;\n      puVar2 = puVar9;\n      do {\n        puVar7 = puVar2;\n        puVar3 = puVar4;\n        uVar12 = puVar3[1];\n        uVar11 = puVar3[2];\n        uVar10 = puVar3[3];\n        *puVar7 = *puVar3;\n        puVar7[1] = uVar12;\n        puVar7[2] = uVar11;\n        puVar7[3] = uVar10;\n        puVar4 = puVar3 + 4;\n        puVar2 = puVar7 + 4;\n      } while (puVar4 != puVar5);\n      uVar10 = puVar3[5];\n      puVar7[4] = *puVar4;\n      puVar7[5] = uVar10;\n      iVar6 = iVar6 + -1;\n      puVar5 = puVar5 + -0x12;\n      puVar9 = puVar9 + -0x12;\n    } while (param_4 <= iVar6);\n  }\n  *param_2 = uVar8 + param_3;\n  (*(code *)PTR_memset_000f644c)(param_2 + param_4 * 0x12 + 2,0,param_3 * 0x48);\n  puVar5 = param_2 + param_4 * 0x12;\n  if (param_4 < param_3 + param_4) {\n    iVar6 = 0;\n    do {\n      puVar5[0xc] = 0xffffffff;\n      iVar6 = iVar6 + 1;\n      puVar5 = puVar5 + 0x12;\n    } while (iVar6 != (param_3 + param_4) - param_4);\n  }\n  return param_2;\n}" (type_identifier "uint") (pointer_declarator "* FUN_0004fe7c(undefined4 *param_1,uint *param_2,int param_3,int param_4)" (* "*") (function_declarator "FUN_0004fe7c(undefined4 *param_1,uint *param_2,int param_3,int param_4)" (identifier "FUN_0004fe7c") (parameter_list "(undefined4 *param_1,uint *param_2,int param_3,int param_4)" (( "(") (parameter_declaration "undefined4 *param_1" (type_identifier "undefined4") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "uint *param_2" (type_identifier "uint") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "int param_3" (primitive_type "int") (identifier "param_3")) (, ",") (parameter_declaration "int param_4" (primitive_type "int") (identifier "param_4")) () ")")))) (compound_statement "{\n  bool bVar1;\n  uint *puVar2;\n  uint *puVar3;\n  uint *puVar4;\n  uint *puVar5;\n  int iVar6;\n  uint *puVar7;\n  uint uVar8;\n  uint *puVar9;\n  uint uVar10;\n  uint uVar11;\n  uint uVar12;\n  \n  uVar8 = *param_2;\n  if (uVar8 + param_3 <= param_2[1]) goto LAB_0004ff80;\n  uVar10 = uVar8 * 2 + param_3;\n  iVar6 = (uint)(uVar10 < uVar8 * 2) +\n          (uVar8 >> 0x1f | ((int)uVar8 >> 0x1f) << 1) + (param_3 >> 0x1f);\n  if (199 < (int)(uVar8 + param_3)) {\n    FUN_0004d4d8(param_1,PTR_s_EFIRSTFOLLOWINGFROMFULLIMITIFORD_000f62d4 + -0x7440,200);\n    return (uint *)0x0;\n  }\n  if (iVar6 < 1) {\n    uVar8 = uVar10 - 1;\n    if (iVar6 != 0) goto LAB_0004ff10;\n    bVar1 = uVar8 < uVar10;\n    if (200 < uVar10) goto LAB_0004ff08;\n  }\n  else {\nLAB_0004ff08:\n    iVar6 = 0;\n    uVar10 = 200;\n    uVar8 = 199;\nLAB_0004ff10:\n    bVar1 = uVar8 < uVar10;\n  }\n  iVar6 = (uint)bVar1 + iVar6 + -1;\n  param_2 = (uint *)FUN_000390c4(*param_1,param_2,\n                                 (uint)(uVar8 * 0x48 + 0x50 < uVar8 * 0x48) +\n                                 (uVar8 * 9 >> 0x1d |\n                                 ((uint)(uVar8 * 9 < uVar8 * 8) +\n                                 (uVar8 >> 0x1d | iVar6 * 8) + iVar6) * 8));\n  if (param_2 == (uint *)0x0) {\n    return (uint *)0x0;\n  }\n  param_2[1] = uVar10;\nLAB_0004ff80:\n  uVar8 = *param_2;\n  iVar6 = uVar8 - 1;\n  if (param_4 <= iVar6) {\n    puVar5 = param_2 + uVar8 * 0x12;\n    puVar9 = param_2 + (param_3 + uVar8) * 0x12 + -0x10;\n    do {\n      puVar4 = puVar5 + -0x10;\n      puVar2 = puVar9;\n      do {\n        puVar7 = puVar2;\n        puVar3 = puVar4;\n        uVar12 = puVar3[1];\n        uVar11 = puVar3[2];\n        uVar10 = puVar3[3];\n        *puVar7 = *puVar3;\n        puVar7[1] = uVar12;\n        puVar7[2] = uVar11;\n        puVar7[3] = uVar10;\n        puVar4 = puVar3 + 4;\n        puVar2 = puVar7 + 4;\n      } while (puVar4 != puVar5);\n      uVar10 = puVar3[5];\n      puVar7[4] = *puVar4;\n      puVar7[5] = uVar10;\n      iVar6 = iVar6 + -1;\n      puVar5 = puVar5 + -0x12;\n      puVar9 = puVar9 + -0x12;\n    } while (param_4 <= iVar6);\n  }\n  *param_2 = uVar8 + param_3;\n  (*(code *)PTR_memset_000f644c)(param_2 + param_4 * 0x12 + 2,0,param_3 * 0x48);\n  puVar5 = param_2 + param_4 * 0x12;\n  if (param_4 < param_3 + param_4) {\n    iVar6 = 0;\n    do {\n      puVar5[0xc] = 0xffffffff;\n      iVar6 = iVar6 + 1;\n      puVar5 = puVar5 + 0x12;\n    } while (iVar6 != (param_3 + param_4) - param_4);\n  }\n  return param_2;\n}" ({ "{") (declaration "bool bVar1;" (primitive_type "bool") (identifier "bVar1") (; ";")) (declaration "uint *puVar2;" (type_identifier "uint") (pointer_declarator "*puVar2" (* "*") (identifier "puVar2")) (; ";")) (declaration "uint *puVar3;" (type_identifier "uint") (pointer_declarator "*puVar3" (* "*") (identifier "puVar3")) (; ";")) (declaration "uint *puVar4;" (type_identifier "uint") (pointer_declarator "*puVar4" (* "*") (identifier "puVar4")) (; ";")) (declaration "uint *puVar5;" (type_identifier "uint") (pointer_declarator "*puVar5" (* "*") (identifier "puVar5")) (; ";")) (declaration "int iVar6;" (primitive_type "int") (identifier "iVar6") (; ";")) (declaration "uint *puVar7;" (type_identifier "uint") (pointer_declarator "*puVar7" (* "*") (identifier "puVar7")) (; ";")) (declaration "uint uVar8;" (type_identifier "uint") (identifier "uVar8") (; ";")) (declaration "uint *puVar9;" (type_identifier "uint") (pointer_declarator "*puVar9" (* "*") (identifier "puVar9")) (; ";")) (declaration "uint uVar10;" (type_identifier "uint") (identifier "uVar10") (; ";")) (declaration "uint uVar11;" (type_identifier "uint") (identifier "uVar11") (; ";")) (declaration "uint uVar12;" (type_identifier "uint") (identifier "uVar12") (; ";")) (expression_statement "uVar8 = *param_2;" (assignment_expression "uVar8 = *param_2" (identifier "uVar8") (= "=") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) (; ";")) (if_statement "if (uVar8 + param_3 <= param_2[1]) goto LAB_0004ff80;" (if "if") (parenthesized_expression "(uVar8 + param_3 <= param_2[1])" (( "(") (binary_expression "uVar8 + param_3 <= param_2[1]" (binary_expression "uVar8 + param_3" (identifier "uVar8") (+ "+") (identifier "param_3")) (<= "<=") (subscript_expression "param_2[1]" (identifier "param_2") ([ "[") (number_literal "1") (] "]"))) () ")")) (goto_statement "goto LAB_0004ff80;" (goto "goto") (statement_identifier "LAB_0004ff80") (; ";"))) (expression_statement "uVar10 = uVar8 * 2 + param_3;" (assignment_expression "uVar10 = uVar8 * 2 + param_3" (identifier "uVar10") (= "=") (binary_expression "uVar8 * 2 + param_3" (binary_expression "uVar8 * 2" (identifier "uVar8") (* "*") (number_literal "2")) (+ "+") (identifier "param_3"))) (; ";")) (expression_statement "iVar6 = (uint)(uVar10 < uVar8 * 2) +\n          (uVar8 >> 0x1f | ((int)uVar8 >> 0x1f) << 1) + (param_3 >> 0x1f);" (assignment_expression "iVar6 = (uint)(uVar10 < uVar8 * 2) +\n          (uVar8 >> 0x1f | ((int)uVar8 >> 0x1f) << 1) + (param_3 >> 0x1f)" (identifier "iVar6") (= "=") (binary_expression "(uint)(uVar10 < uVar8 * 2) +\n          (uVar8 >> 0x1f | ((int)uVar8 >> 0x1f) << 1) + (param_3 >> 0x1f)" (binary_expression "(uint)(uVar10 < uVar8 * 2) +\n          (uVar8 >> 0x1f | ((int)uVar8 >> 0x1f) << 1)" (call_expression "(uint)(uVar10 < uVar8 * 2)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(uVar10 < uVar8 * 2)" (( "(") (binary_expression "uVar10 < uVar8 * 2" (identifier "uVar10") (< "<") (binary_expression "uVar8 * 2" (identifier "uVar8") (* "*") (number_literal "2"))) () ")"))) (+ "+") (parenthesized_expression "(uVar8 >> 0x1f | ((int)uVar8 >> 0x1f) << 1)" (( "(") (binary_expression "uVar8 >> 0x1f | ((int)uVar8 >> 0x1f) << 1" (binary_expression "uVar8 >> 0x1f" (identifier "uVar8") (>> ">>") (number_literal "0x1f")) (| "|") (binary_expression "((int)uVar8 >> 0x1f) << 1" (parenthesized_expression "((int)uVar8 >> 0x1f)" (( "(") (binary_expression "(int)uVar8 >> 0x1f" (cast_expression "(int)uVar8" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar8")) (>> ">>") (number_literal "0x1f")) () ")")) (<< "<<") (number_literal "1"))) () ")"))) (+ "+") (parenthesized_expression "(param_3 >> 0x1f)" (( "(") (binary_expression "param_3 >> 0x1f" (identifier "param_3") (>> ">>") (number_literal "0x1f")) () ")")))) (; ";")) (if_statement "if (199 < (int)(uVar8 + param_3)) {\n    FUN_0004d4d8(param_1,PTR_s_EFIRSTFOLLOWINGFROMFULLIMITIFORD_000f62d4 + -0x7440,200);\n    return (uint *)0x0;\n  }" (if "if") (parenthesized_expression "(199 < (int)(uVar8 + param_3))" (( "(") (binary_expression "199 < (int)(uVar8 + param_3)" (number_literal "199") (< "<") (cast_expression "(int)(uVar8 + param_3)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(uVar8 + param_3)" (( "(") (binary_expression "uVar8 + param_3" (identifier "uVar8") (+ "+") (identifier "param_3")) () ")")))) () ")")) (compound_statement "{\n    FUN_0004d4d8(param_1,PTR_s_EFIRSTFOLLOWINGFROMFULLIMITIFORD_000f62d4 + -0x7440,200);\n    return (uint *)0x0;\n  }" ({ "{") (expression_statement "FUN_0004d4d8(param_1,PTR_s_EFIRSTFOLLOWINGFROMFULLIMITIFORD_000f62d4 + -0x7440,200);" (call_expression "FUN_0004d4d8(param_1,PTR_s_EFIRSTFOLLOWINGFROMFULLIMITIFORD_000f62d4 + -0x7440,200)" (identifier "FUN_0004d4d8") (argument_list "(param_1,PTR_s_EFIRSTFOLLOWINGFROMFULLIMITIFORD_000f62d4 + -0x7440,200)" (( "(") (identifier "param_1") (, ",") (binary_expression "PTR_s_EFIRSTFOLLOWINGFROMFULLIMITIFORD_000f62d4 + -0x7440" (identifier "PTR_s_EFIRSTFOLLOWINGFROMFULLIMITIFORD_000f62d4") (+ "+") (number_literal "-0x7440")) (, ",") (number_literal "200") () ")"))) (; ";")) (return_statement "return (uint *)0x0;" (return "return") (cast_expression "(uint *)0x0" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0")) (; ";")) (} "}"))) (if_statement "if (iVar6 < 1) {\n    uVar8 = uVar10 - 1;\n    if (iVar6 != 0) goto LAB_0004ff10;\n    bVar1 = uVar8 < uVar10;\n    if (200 < uVar10) goto LAB_0004ff08;\n  }\n  else {\nLAB_0004ff08:\n    iVar6 = 0;\n    uVar10 = 200;\n    uVar8 = 199;\nLAB_0004ff10:\n    bVar1 = uVar8 < uVar10;\n  }" (if "if") (parenthesized_expression "(iVar6 < 1)" (( "(") (binary_expression "iVar6 < 1" (identifier "iVar6") (< "<") (number_literal "1")) () ")")) (compound_statement "{\n    uVar8 = uVar10 - 1;\n    if (iVar6 != 0) goto LAB_0004ff10;\n    bVar1 = uVar8 < uVar10;\n    if (200 < uVar10) goto LAB_0004ff08;\n  }" ({ "{") (expression_statement "uVar8 = uVar10 - 1;" (assignment_expression "uVar8 = uVar10 - 1" (identifier "uVar8") (= "=") (binary_expression "uVar10 - 1" (identifier "uVar10") (- "-") (number_literal "1"))) (; ";")) (if_statement "if (iVar6 != 0) goto LAB_0004ff10;" (if "if") (parenthesized_expression "(iVar6 != 0)" (( "(") (binary_expression "iVar6 != 0" (identifier "iVar6") (!= "!=") (number_literal "0")) () ")")) (goto_statement "goto LAB_0004ff10;" (goto "goto") (statement_identifier "LAB_0004ff10") (; ";"))) (expression_statement "bVar1 = uVar8 < uVar10;" (assignment_expression "bVar1 = uVar8 < uVar10" (identifier "bVar1") (= "=") (binary_expression "uVar8 < uVar10" (identifier "uVar8") (< "<") (identifier "uVar10"))) (; ";")) (if_statement "if (200 < uVar10) goto LAB_0004ff08;" (if "if") (parenthesized_expression "(200 < uVar10)" (( "(") (binary_expression "200 < uVar10" (number_literal "200") (< "<") (identifier "uVar10")) () ")")) (goto_statement "goto LAB_0004ff08;" (goto "goto") (statement_identifier "LAB_0004ff08") (; ";"))) (} "}")) (else_clause "else {\nLAB_0004ff08:\n    iVar6 = 0;\n    uVar10 = 200;\n    uVar8 = 199;\nLAB_0004ff10:\n    bVar1 = uVar8 < uVar10;\n  }" (else "else") (compound_statement "{\nLAB_0004ff08:\n    iVar6 = 0;\n    uVar10 = 200;\n    uVar8 = 199;\nLAB_0004ff10:\n    bVar1 = uVar8 < uVar10;\n  }" ({ "{") (labeled_statement "LAB_0004ff08:\n    iVar6 = 0;" (statement_identifier "LAB_0004ff08") (: ":") (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" (identifier "iVar6") (= "=") (number_literal "0")) (; ";"))) (expression_statement "uVar10 = 200;" (assignment_expression "uVar10 = 200" (identifier "uVar10") (= "=") (number_literal "200")) (; ";")) (expression_statement "uVar8 = 199;" (assignment_expression "uVar8 = 199" (identifier "uVar8") (= "=") (number_literal "199")) (; ";")) (labeled_statement "LAB_0004ff10:\n    bVar1 = uVar8 < uVar10;" (statement_identifier "LAB_0004ff10") (: ":") (expression_statement "bVar1 = uVar8 < uVar10;" (assignment_expression "bVar1 = uVar8 < uVar10" (identifier "bVar1") (= "=") (binary_expression "uVar8 < uVar10" (identifier "uVar8") (< "<") (identifier "uVar10"))) (; ";"))) (} "}")))) (expression_statement "iVar6 = (uint)bVar1 + iVar6 + -1;" (assignment_expression "iVar6 = (uint)bVar1 + iVar6 + -1" (identifier "iVar6") (= "=") (binary_expression "(uint)bVar1 + iVar6 + -1" (binary_expression "(uint)bVar1 + iVar6" (cast_expression "(uint)bVar1" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "bVar1")) (+ "+") (identifier "iVar6")) (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "param_2 = (uint *)FUN_000390c4(*param_1,param_2,\n                                 (uint)(uVar8 * 0x48 + 0x50 < uVar8 * 0x48) +\n                                 (uVar8 * 9 >> 0x1d |\n                                 ((uint)(uVar8 * 9 < uVar8 * 8) +\n                                 (uVar8 >> 0x1d | iVar6 * 8) + iVar6) * 8));" (assignment_expression "param_2 = (uint *)FUN_000390c4(*param_1,param_2,\n                                 (uint)(uVar8 * 0x48 + 0x50 < uVar8 * 0x48) +\n                                 (uVar8 * 9 >> 0x1d |\n                                 ((uint)(uVar8 * 9 < uVar8 * 8) +\n                                 (uVar8 >> 0x1d | iVar6 * 8) + iVar6) * 8))" (identifier "param_2") (= "=") (cast_expression "(uint *)FUN_000390c4(*param_1,param_2,\n                                 (uint)(uVar8 * 0x48 + 0x50 < uVar8 * 0x48) +\n                                 (uVar8 * 9 >> 0x1d |\n                                 ((uint)(uVar8 * 9 < uVar8 * 8) +\n                                 (uVar8 >> 0x1d | iVar6 * 8) + iVar6) * 8))" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_000390c4(*param_1,param_2,\n                                 (uint)(uVar8 * 0x48 + 0x50 < uVar8 * 0x48) +\n                                 (uVar8 * 9 >> 0x1d |\n                                 ((uint)(uVar8 * 9 < uVar8 * 8) +\n                                 (uVar8 >> 0x1d | iVar6 * 8) + iVar6) * 8))" (identifier "FUN_000390c4") (argument_list "(*param_1,param_2,\n                                 (uint)(uVar8 * 0x48 + 0x50 < uVar8 * 0x48) +\n                                 (uVar8 * 9 >> 0x1d |\n                                 ((uint)(uVar8 * 9 < uVar8 * 8) +\n                                 (uVar8 >> 0x1d | iVar6 * 8) + iVar6) * 8))" (( "(") (pointer_expression "*param_1" (* "*") (identifier "param_1")) (, ",") (identifier "param_2") (, ",") (binary_expression "(uint)(uVar8 * 0x48 + 0x50 < uVar8 * 0x48) +\n                                 (uVar8 * 9 >> 0x1d |\n                                 ((uint)(uVar8 * 9 < uVar8 * 8) +\n                                 (uVar8 >> 0x1d | iVar6 * 8) + iVar6) * 8)" (call_expression "(uint)(uVar8 * 0x48 + 0x50 < uVar8 * 0x48)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(uVar8 * 0x48 + 0x50 < uVar8 * 0x48)" (( "(") (binary_expression "uVar8 * 0x48 + 0x50 < uVar8 * 0x48" (binary_expression "uVar8 * 0x48 + 0x50" (binary_expression "uVar8 * 0x48" (identifier "uVar8") (* "*") (number_literal "0x48")) (+ "+") (number_literal "0x50")) (< "<") (binary_expression "uVar8 * 0x48" (identifier "uVar8") (* "*") (number_literal "0x48"))) () ")"))) (+ "+") (parenthesized_expression "(uVar8 * 9 >> 0x1d |\n                                 ((uint)(uVar8 * 9 < uVar8 * 8) +\n                                 (uVar8 >> 0x1d | iVar6 * 8) + iVar6) * 8)" (( "(") (binary_expression "uVar8 * 9 >> 0x1d |\n                                 ((uint)(uVar8 * 9 < uVar8 * 8) +\n                                 (uVar8 >> 0x1d | iVar6 * 8) + iVar6) * 8" (binary_expression "uVar8 * 9 >> 0x1d" (binary_expression "uVar8 * 9" (identifier "uVar8") (* "*") (number_literal "9")) (>> ">>") (number_literal "0x1d")) (| "|") (binary_expression "((uint)(uVar8 * 9 < uVar8 * 8) +\n                                 (uVar8 >> 0x1d | iVar6 * 8) + iVar6) * 8" (parenthesized_expression "((uint)(uVar8 * 9 < uVar8 * 8) +\n                                 (uVar8 >> 0x1d | iVar6 * 8) + iVar6)" (( "(") (binary_expression "(uint)(uVar8 * 9 < uVar8 * 8) +\n                                 (uVar8 >> 0x1d | iVar6 * 8) + iVar6" (binary_expression "(uint)(uVar8 * 9 < uVar8 * 8) +\n                                 (uVar8 >> 0x1d | iVar6 * 8)" (call_expression "(uint)(uVar8 * 9 < uVar8 * 8)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(uVar8 * 9 < uVar8 * 8)" (( "(") (binary_expression "uVar8 * 9 < uVar8 * 8" (binary_expression "uVar8 * 9" (identifier "uVar8") (* "*") (number_literal "9")) (< "<") (binary_expression "uVar8 * 8" (identifier "uVar8") (* "*") (number_literal "8"))) () ")"))) (+ "+") (parenthesized_expression "(uVar8 >> 0x1d | iVar6 * 8)" (( "(") (binary_expression "uVar8 >> 0x1d | iVar6 * 8" (binary_expression "uVar8 >> 0x1d" (identifier "uVar8") (>> ">>") (number_literal "0x1d")) (| "|") (binary_expression "iVar6 * 8" (identifier "iVar6") (* "*") (number_literal "8"))) () ")"))) (+ "+") (identifier "iVar6")) () ")")) (* "*") (number_literal "8"))) () ")"))) () ")"))))) (; ";")) (if_statement "if (param_2 == (uint *)0x0) {\n    return (uint *)0x0;\n  }" (if "if") (parenthesized_expression "(param_2 == (uint *)0x0)" (( "(") (binary_expression "param_2 == (uint *)0x0" (identifier "param_2") (== "==") (cast_expression "(uint *)0x0" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    return (uint *)0x0;\n  }" ({ "{") (return_statement "return (uint *)0x0;" (return "return") (cast_expression "(uint *)0x0" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0")) (; ";")) (} "}"))) (expression_statement "param_2[1] = uVar10;" (assignment_expression "param_2[1] = uVar10" (subscript_expression "param_2[1]" (identifier "param_2") ([ "[") (number_literal "1") (] "]")) (= "=") (identifier "uVar10")) (; ";")) (labeled_statement "LAB_0004ff80:\n  uVar8 = *param_2;" (statement_identifier "LAB_0004ff80") (: ":") (expression_statement "uVar8 = *param_2;" (assignment_expression "uVar8 = *param_2" (identifier "uVar8") (= "=") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) (; ";"))) (expression_statement "iVar6 = uVar8 - 1;" (assignment_expression "iVar6 = uVar8 - 1" (identifier "iVar6") (= "=") (binary_expression "uVar8 - 1" (identifier "uVar8") (- "-") (number_literal "1"))) (; ";")) (if_statement "if (param_4 <= iVar6) {\n    puVar5 = param_2 + uVar8 * 0x12;\n    puVar9 = param_2 + (param_3 + uVar8) * 0x12 + -0x10;\n    do {\n      puVar4 = puVar5 + -0x10;\n      puVar2 = puVar9;\n      do {\n        puVar7 = puVar2;\n        puVar3 = puVar4;\n        uVar12 = puVar3[1];\n        uVar11 = puVar3[2];\n        uVar10 = puVar3[3];\n        *puVar7 = *puVar3;\n        puVar7[1] = uVar12;\n        puVar7[2] = uVar11;\n        puVar7[3] = uVar10;\n        puVar4 = puVar3 + 4;\n        puVar2 = puVar7 + 4;\n      } while (puVar4 != puVar5);\n      uVar10 = puVar3[5];\n      puVar7[4] = *puVar4;\n      puVar7[5] = uVar10;\n      iVar6 = iVar6 + -1;\n      puVar5 = puVar5 + -0x12;\n      puVar9 = puVar9 + -0x12;\n    } while (param_4 <= iVar6);\n  }" (if "if") (parenthesized_expression "(param_4 <= iVar6)" (( "(") (binary_expression "param_4 <= iVar6" (identifier "param_4") (<= "<=") (identifier "iVar6")) () ")")) (compound_statement "{\n    puVar5 = param_2 + uVar8 * 0x12;\n    puVar9 = param_2 + (param_3 + uVar8) * 0x12 + -0x10;\n    do {\n      puVar4 = puVar5 + -0x10;\n      puVar2 = puVar9;\n      do {\n        puVar7 = puVar2;\n        puVar3 = puVar4;\n        uVar12 = puVar3[1];\n        uVar11 = puVar3[2];\n        uVar10 = puVar3[3];\n        *puVar7 = *puVar3;\n        puVar7[1] = uVar12;\n        puVar7[2] = uVar11;\n        puVar7[3] = uVar10;\n        puVar4 = puVar3 + 4;\n        puVar2 = puVar7 + 4;\n      } while (puVar4 != puVar5);\n      uVar10 = puVar3[5];\n      puVar7[4] = *puVar4;\n      puVar7[5] = uVar10;\n      iVar6 = iVar6 + -1;\n      puVar5 = puVar5 + -0x12;\n      puVar9 = puVar9 + -0x12;\n    } while (param_4 <= iVar6);\n  }" ({ "{") (expression_statement "puVar5 = param_2 + uVar8 * 0x12;" (assignment_expression "puVar5 = param_2 + uVar8 * 0x12" (identifier "puVar5") (= "=") (binary_expression "param_2 + uVar8 * 0x12" (identifier "param_2") (+ "+") (binary_expression "uVar8 * 0x12" (identifier "uVar8") (* "*") (number_literal "0x12")))) (; ";")) (expression_statement "puVar9 = param_2 + (param_3 + uVar8) * 0x12 + -0x10;" (assignment_expression "puVar9 = param_2 + (param_3 + uVar8) * 0x12 + -0x10" (identifier "puVar9") (= "=") (binary_expression "param_2 + (param_3 + uVar8) * 0x12 + -0x10" (binary_expression "param_2 + (param_3 + uVar8) * 0x12" (identifier "param_2") (+ "+") (binary_expression "(param_3 + uVar8) * 0x12" (parenthesized_expression "(param_3 + uVar8)" (( "(") (binary_expression "param_3 + uVar8" (identifier "param_3") (+ "+") (identifier "uVar8")) () ")")) (* "*") (number_literal "0x12"))) (+ "+") (number_literal "-0x10"))) (; ";")) (do_statement "do {\n      puVar4 = puVar5 + -0x10;\n      puVar2 = puVar9;\n      do {\n        puVar7 = puVar2;\n        puVar3 = puVar4;\n        uVar12 = puVar3[1];\n        uVar11 = puVar3[2];\n        uVar10 = puVar3[3];\n        *puVar7 = *puVar3;\n        puVar7[1] = uVar12;\n        puVar7[2] = uVar11;\n        puVar7[3] = uVar10;\n        puVar4 = puVar3 + 4;\n        puVar2 = puVar7 + 4;\n      } while (puVar4 != puVar5);\n      uVar10 = puVar3[5];\n      puVar7[4] = *puVar4;\n      puVar7[5] = uVar10;\n      iVar6 = iVar6 + -1;\n      puVar5 = puVar5 + -0x12;\n      puVar9 = puVar9 + -0x12;\n    } while (param_4 <= iVar6);" (do "do") (compound_statement "{\n      puVar4 = puVar5 + -0x10;\n      puVar2 = puVar9;\n      do {\n        puVar7 = puVar2;\n        puVar3 = puVar4;\n        uVar12 = puVar3[1];\n        uVar11 = puVar3[2];\n        uVar10 = puVar3[3];\n        *puVar7 = *puVar3;\n        puVar7[1] = uVar12;\n        puVar7[2] = uVar11;\n        puVar7[3] = uVar10;\n        puVar4 = puVar3 + 4;\n        puVar2 = puVar7 + 4;\n      } while (puVar4 != puVar5);\n      uVar10 = puVar3[5];\n      puVar7[4] = *puVar4;\n      puVar7[5] = uVar10;\n      iVar6 = iVar6 + -1;\n      puVar5 = puVar5 + -0x12;\n      puVar9 = puVar9 + -0x12;\n    }" ({ "{") (expression_statement "puVar4 = puVar5 + -0x10;" (assignment_expression "puVar4 = puVar5 + -0x10" (identifier "puVar4") (= "=") (binary_expression "puVar5 + -0x10" (identifier "puVar5") (+ "+") (number_literal "-0x10"))) (; ";")) (expression_statement "puVar2 = puVar9;" (assignment_expression "puVar2 = puVar9" (identifier "puVar2") (= "=") (identifier "puVar9")) (; ";")) (do_statement "do {\n        puVar7 = puVar2;\n        puVar3 = puVar4;\n        uVar12 = puVar3[1];\n        uVar11 = puVar3[2];\n        uVar10 = puVar3[3];\n        *puVar7 = *puVar3;\n        puVar7[1] = uVar12;\n        puVar7[2] = uVar11;\n        puVar7[3] = uVar10;\n        puVar4 = puVar3 + 4;\n        puVar2 = puVar7 + 4;\n      } while (puVar4 != puVar5);" (do "do") (compound_statement "{\n        puVar7 = puVar2;\n        puVar3 = puVar4;\n        uVar12 = puVar3[1];\n        uVar11 = puVar3[2];\n        uVar10 = puVar3[3];\n        *puVar7 = *puVar3;\n        puVar7[1] = uVar12;\n        puVar7[2] = uVar11;\n        puVar7[3] = uVar10;\n        puVar4 = puVar3 + 4;\n        puVar2 = puVar7 + 4;\n      }" ({ "{") (expression_statement "puVar7 = puVar2;" (assignment_expression "puVar7 = puVar2" (identifier "puVar7") (= "=") (identifier "puVar2")) (; ";")) (expression_statement "puVar3 = puVar4;" (assignment_expression "puVar3 = puVar4" (identifier "puVar3") (= "=") (identifier "puVar4")) (; ";")) (expression_statement "uVar12 = puVar3[1];" (assignment_expression "uVar12 = puVar3[1]" (identifier "uVar12") (= "=") (subscript_expression "puVar3[1]" (identifier "puVar3") ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "uVar11 = puVar3[2];" (assignment_expression "uVar11 = puVar3[2]" (identifier "uVar11") (= "=") (subscript_expression "puVar3[2]" (identifier "puVar3") ([ "[") (number_literal "2") (] "]"))) (; ";")) (expression_statement "uVar10 = puVar3[3];" (assignment_expression "uVar10 = puVar3[3]" (identifier "uVar10") (= "=") (subscript_expression "puVar3[3]" (identifier "puVar3") ([ "[") (number_literal "3") (] "]"))) (; ";")) (expression_statement "*puVar7 = *puVar3;" (assignment_expression "*puVar7 = *puVar3" (pointer_expression "*puVar7" (* "*") (identifier "puVar7")) (= "=") (pointer_expression "*puVar3" (* "*") (identifier "puVar3"))) (; ";")) (expression_statement "puVar7[1] = uVar12;" (assignment_expression "puVar7[1] = uVar12" (subscript_expression "puVar7[1]" (identifier "puVar7") ([ "[") (number_literal "1") (] "]")) (= "=") (identifier "uVar12")) (; ";")) (expression_statement "puVar7[2] = uVar11;" (assignment_expression "puVar7[2] = uVar11" (subscript_expression "puVar7[2]" (identifier "puVar7") ([ "[") (number_literal "2") (] "]")) (= "=") (identifier "uVar11")) (; ";")) (expression_statement "puVar7[3] = uVar10;" (assignment_expression "puVar7[3] = uVar10" (subscript_expression "puVar7[3]" (identifier "puVar7") ([ "[") (number_literal "3") (] "]")) (= "=") (identifier "uVar10")) (; ";")) (expression_statement "puVar4 = puVar3 + 4;" (assignment_expression "puVar4 = puVar3 + 4" (identifier "puVar4") (= "=") (binary_expression "puVar3 + 4" (identifier "puVar3") (+ "+") (number_literal "4"))) (; ";")) (expression_statement "puVar2 = puVar7 + 4;" (assignment_expression "puVar2 = puVar7 + 4" (identifier "puVar2") (= "=") (binary_expression "puVar7 + 4" (identifier "puVar7") (+ "+") (number_literal "4"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(puVar4 != puVar5)" (( "(") (binary_expression "puVar4 != puVar5" (identifier "puVar4") (!= "!=") (identifier "puVar5")) () ")")) (; ";")) (expression_statement "uVar10 = puVar3[5];" (assignment_expression "uVar10 = puVar3[5]" (identifier "uVar10") (= "=") (subscript_expression "puVar3[5]" (identifier "puVar3") ([ "[") (number_literal "5") (] "]"))) (; ";")) (expression_statement "puVar7[4] = *puVar4;" (assignment_expression "puVar7[4] = *puVar4" (subscript_expression "puVar7[4]" (identifier "puVar7") ([ "[") (number_literal "4") (] "]")) (= "=") (pointer_expression "*puVar4" (* "*") (identifier "puVar4"))) (; ";")) (expression_statement "puVar7[5] = uVar10;" (assignment_expression "puVar7[5] = uVar10" (subscript_expression "puVar7[5]" (identifier "puVar7") ([ "[") (number_literal "5") (] "]")) (= "=") (identifier "uVar10")) (; ";")) (expression_statement "iVar6 = iVar6 + -1;" (assignment_expression "iVar6 = iVar6 + -1" (identifier "iVar6") (= "=") (binary_expression "iVar6 + -1" (identifier "iVar6") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "puVar5 = puVar5 + -0x12;" (assignment_expression "puVar5 = puVar5 + -0x12" (identifier "puVar5") (= "=") (binary_expression "puVar5 + -0x12" (identifier "puVar5") (+ "+") (number_literal "-0x12"))) (; ";")) (expression_statement "puVar9 = puVar9 + -0x12;" (assignment_expression "puVar9 = puVar9 + -0x12" (identifier "puVar9") (= "=") (binary_expression "puVar9 + -0x12" (identifier "puVar9") (+ "+") (number_literal "-0x12"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(param_4 <= iVar6)" (( "(") (binary_expression "param_4 <= iVar6" (identifier "param_4") (<= "<=") (identifier "iVar6")) () ")")) (; ";")) (} "}"))) (expression_statement "*param_2 = uVar8 + param_3;" (assignment_expression "*param_2 = uVar8 + param_3" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (= "=") (binary_expression "uVar8 + param_3" (identifier "uVar8") (+ "+") (identifier "param_3"))) (; ";")) (expression_statement "(*(code *)PTR_memset_000f644c)(param_2 + param_4 * 0x12 + 2,0,param_3 * 0x48);" (call_expression "(*(code *)PTR_memset_000f644c)(param_2 + param_4 * 0x12 + 2,0,param_3 * 0x48)" (parenthesized_expression "(*(code *)PTR_memset_000f644c)" (( "(") (pointer_expression "*(code *)PTR_memset_000f644c" (* "*") (cast_expression "(code *)PTR_memset_000f644c" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_memset_000f644c"))) () ")")) (argument_list "(param_2 + param_4 * 0x12 + 2,0,param_3 * 0x48)" (( "(") (binary_expression "param_2 + param_4 * 0x12 + 2" (binary_expression "param_2 + param_4 * 0x12" (identifier "param_2") (+ "+") (binary_expression "param_4 * 0x12" (identifier "param_4") (* "*") (number_literal "0x12"))) (+ "+") (number_literal "2")) (, ",") (number_literal "0") (, ",") (binary_expression "param_3 * 0x48" (identifier "param_3") (* "*") (number_literal "0x48")) () ")"))) (; ";")) (expression_statement "puVar5 = param_2 + param_4 * 0x12;" (assignment_expression "puVar5 = param_2 + param_4 * 0x12" (identifier "puVar5") (= "=") (binary_expression "param_2 + param_4 * 0x12" (identifier "param_2") (+ "+") (binary_expression "param_4 * 0x12" (identifier "param_4") (* "*") (number_literal "0x12")))) (; ";")) (if_statement "if (param_4 < param_3 + param_4) {\n    iVar6 = 0;\n    do {\n      puVar5[0xc] = 0xffffffff;\n      iVar6 = iVar6 + 1;\n      puVar5 = puVar5 + 0x12;\n    } while (iVar6 != (param_3 + param_4) - param_4);\n  }" (if "if") (parenthesized_expression "(param_4 < param_3 + param_4)" (( "(") (binary_expression "param_4 < param_3 + param_4" (identifier "param_4") (< "<") (binary_expression "param_3 + param_4" (identifier "param_3") (+ "+") (identifier "param_4"))) () ")")) (compound_statement "{\n    iVar6 = 0;\n    do {\n      puVar5[0xc] = 0xffffffff;\n      iVar6 = iVar6 + 1;\n      puVar5 = puVar5 + 0x12;\n    } while (iVar6 != (param_3 + param_4) - param_4);\n  }" ({ "{") (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" (identifier "iVar6") (= "=") (number_literal "0")) (; ";")) (do_statement "do {\n      puVar5[0xc] = 0xffffffff;\n      iVar6 = iVar6 + 1;\n      puVar5 = puVar5 + 0x12;\n    } while (iVar6 != (param_3 + param_4) - param_4);" (do "do") (compound_statement "{\n      puVar5[0xc] = 0xffffffff;\n      iVar6 = iVar6 + 1;\n      puVar5 = puVar5 + 0x12;\n    }" ({ "{") (expression_statement "puVar5[0xc] = 0xffffffff;" (assignment_expression "puVar5[0xc] = 0xffffffff" (subscript_expression "puVar5[0xc]" (identifier "puVar5") ([ "[") (number_literal "0xc") (] "]")) (= "=") (number_literal "0xffffffff")) (; ";")) (expression_statement "iVar6 = iVar6 + 1;" (assignment_expression "iVar6 = iVar6 + 1" (identifier "iVar6") (= "=") (binary_expression "iVar6 + 1" (identifier "iVar6") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "puVar5 = puVar5 + 0x12;" (assignment_expression "puVar5 = puVar5 + 0x12" (identifier "puVar5") (= "=") (binary_expression "puVar5 + 0x12" (identifier "puVar5") (+ "+") (number_literal "0x12"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar6 != (param_3 + param_4) - param_4)" (( "(") (binary_expression "iVar6 != (param_3 + param_4) - param_4" (identifier "iVar6") (!= "!=") (binary_expression "(param_3 + param_4) - param_4" (parenthesized_expression "(param_3 + param_4)" (( "(") (binary_expression "param_3 + param_4" (identifier "param_3") (+ "+") (identifier "param_4")) () ")")) (- "-") (identifier "param_4"))) () ")")) (; ";")) (} "}"))) (return_statement "return param_2;" (return "return") (identifier "param_2") (; ";")) (} "}")))
(translation_unit (function_definition type: (type_identifier) declarator: (pointer_declarator declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (primitive_type) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (identifier))))) body: (compound_statement (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (subscript_expression argument: (identifier) index: (number_literal)))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) right: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (binary_expression left: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal))) right: (number_literal))))) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (identifier) right: (identifier)))))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (binary_expression left: (identifier) right: (number_literal)) (number_literal)))) (return_statement (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (goto_statement label: (statement_identifier)))) alternative: (else_clause (compound_statement (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (identifier)) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (identifier)) (identifier) (binary_expression left: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (number_literal)) right: (binary_expression left: (identifier) right: (number_literal))))) right: (parenthesized_expression (binary_expression left: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (number_literal)) right: (binary_expression left: (parenthesized_expression (binary_expression left: (binary_expression left: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (binary_expression left: (identifier) right: (number_literal))))) right: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) right: (number_literal)))))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (return_statement (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (number_literal))) right: (number_literal)))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (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: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier)))) (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: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier)))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) arguments: (argument_list (binary_expression left: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) right: (number_literal)) (number_literal) (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (identifier))))))) (return_statement (identifier)))))

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

{
  bool bVar1;
  uint *puVar2;
  uint *puVar3;
  uint *puVar4;
  uint *puVar5;
  int iVar6;
  uint *puVar7;
  uint uVar8;
  uint *puVar9;
  uint uVar10;
  uint uVar11;
  uint uVar12;
  
  uVar8 = *param_2;
  if (uVar8 + param_3 <= param_2[1]) goto LAB_0004ff80;
  uVar10 = uVar8 * 2 + param_3;
  iVar6 = (uint)(uVar10 < uVar8 * 2) +
          (uVar8 >> 0x1f | ((int)uVar8 >> 0x1f) << 1) + (param_3 >> 0x1f);
  if (199 < (int)(uVar8 + param_3)) {
    FUN_0004d4d8(param_1,PTR_s_EFIRSTFOLLOWINGFROMFULLIMITIFORD_000f62d4 + -0x7440,200);
    return (uint *)0x0;
  }
  if (iVar6 < 1) {
    uVar8 = uVar10 - 1;
    if (iVar6 != 0) goto LAB_0004ff10;
    bVar1 = uVar8 < uVar10;
    if (200 < uVar10) goto LAB_0004ff08;
  }
  else {
LAB_0004ff08:
    iVar6 = 0;
    uVar10 = 200;
    uVar8 = 199;
LAB_0004ff10:
    bVar1 = uVar8 < uVar10;
  }
  iVar6 = (uint)bVar1 + iVar6 + -1;
  param_2 = (uint *)FUN_000390c4(*param_1,param_2,
                                 (uint)(uVar8 * 0x48 + 0x50 < uVar8 * 0x48) +
                                 (uVar8 * 9 >> 0x1d |
                                 ((uint)(uVar8 * 9 < uVar8 * 8) +
                                 (uVar8 >> 0x1d | iVar6 * 8) + iVar6) * 8));
  if (param_2 == (uint *)0x0) {
    return (uint *)0x0;
  }
  param_2[1] = uVar10;
LAB_0004ff80:
  uVar8 = *param_2;
  iVar6 = uVar8 - 1;
  if (param_4 <= iVar6) {
    puVar5 = param_2 + uVar8 * 0x12;
    puVar9 = param_2 + (param_3 + uVar8) * 0x12 + -0x10;
    do {
      puVar4 = puVar5 + -0x10;
      puVar2 = puVar9;
      do {
        puVar7 = puVar2;
        puVar3 = puVar4;
        uVar12 = puVar3[1];
        uVar11 = puVar3[2];
        uVar10 = puVar3[3];
        *puVar7 = *puVar3;
        puVar7[1] = uVar12;
        puVar7[2] = uVar11;
        puVar7[3] = uVar10;
        puVar4 = puVar3 + 4;
        puVar2 = puVar7 + 4;
      } while (puVar4 != puVar5);
      uVar10 = puVar3[5];
      puVar7[4] = *puVar4;
      puVar7[5] = uVar10;
      iVar6 = iVar6 + -1;
      puVar5 = puVar5 + -0x12;
      puVar9 = puVar9 + -0x12;
    } while (param_4 <= iVar6);
  }
  *param_2 = uVar8 + param_3;
  (*(code *)PTR_memset_000f644c)(param_2 + param_4 * 0x12 + 2,0,param_3 * 0x48);
  puVar5 = param_2 + param_4 * 0x12;
  if (param_4 < param_3 + param_4) {
    iVar6 = 0;
    do {
      puVar5[0xc] = 0xffffffff;
      iVar6 = iVar6 + 1;
      puVar5 = puVar5 + 0x12;
    } while (iVar6 != (param_3 + param_4) - param_4);
  }
  return param_2;
}

