
int sqlite3GenerateIndexKey
              (Parse *pParse,Index *pIdx,int iDataCur,int regOut,int prefixOnly,int *piPartIdxLabel,
              Index *pPrior,int regPrior)

{
  ushort uVar1;
  code *pcVar2;
  code *pcVar3;
  undefined4 uVar4;
  int iVar5;
  int iVar6;
  uint uVar7;
  Vdbe *pVVar8;
  uint uVar9;
  
  pVVar8 = pParse->pVdbe;
  if (piPartIdxLabel != (int *)0x0) {
    if (pIdx->pPartIdxWhere == (Expr *)0x0) {
      *piPartIdxLabel = 0;
    }
    else {
      iVar5 = pParse->nLabel + -1;
      pParse->nLabel = iVar5;
      *piPartIdxLabel = iVar5;
      pParse->iSelfTab = iDataCur + 1;
      sqlite3ExprIfFalseDup(pParse,pIdx->pPartIdxWhere,*piPartIdxLabel,0x10);
      pParse->iSelfTab = 0;
      pPrior = (Index *)0x0;
    }
  }
  if ((prefixOnly == 0) || ((pIdx->field_0x37 & 0x10) == 0)) {
    uVar1 = pIdx->nColumn;
  }
  else {
    uVar1 = pIdx->nKeyCol;
  }
  uVar9 = (uint)uVar1;
  iVar5 = (*(code *)(PTR_LAB_000f62d8 + -0x1f54))(pParse,uVar9);
  if (pPrior != (Index *)0x0) {
    if (iVar5 == regPrior) {
      if (pPrior->pPartIdxWhere != (Expr *)0x0) {
        pPrior = (Index *)0x0;
      }
    }
    else {
      pPrior = (Index *)0x0;
    }
  }
  uVar7 = 0;
  if (uVar9 != 0) {
    pcVar2 = (code *)(PTR_LAB_000f6304 + -0x7e0);
    pcVar3 = (code *)(PTR_LAB_000f62f4 + 0x3518);
    do {
      if ((pPrior == (Index *)0x0) || (pIdx->aiColumn[uVar7] != pPrior->aiColumn[uVar7])) {
        if (pIdx->aiColumn[uVar7] == -2) goto LAB_0009b5e8;
        sqlite3ExprCodeGetColumnOfTable
                  (pParse->pVdbe,pIdx->pTable,iDataCur,(int)pIdx->aiColumn[uVar7],iVar5 + uVar7);
LAB_0009b68c:
        iVar6 = pVVar8->nOp;
        if ((0 < iVar6) && (pVVar8->aOp[iVar6 + -1].opcode == 'S')) {
          (*pcVar2)(pVVar8,iVar6 + -1);
        }
      }
      else if (pPrior->aiColumn[uVar7] == -2) {
LAB_0009b5e8:
        pParse->iSelfTab = iDataCur + 1;
        (*pcVar3)(pParse,pIdx->aColExpr->a[uVar7].pExpr,iVar5 + uVar7);
        pParse->iSelfTab = 0;
        goto LAB_0009b68c;
      }
      uVar7 = uVar7 + 1;
    } while (uVar9 != uVar7);
  }
  if ((regOut != 0) &&
     ((*(code *)(PTR_LAB_000f6310 + -0x6054))(pVVar8,0x5b,iVar5,uVar9,regOut),
     pIdx->pTable->pSelect != (Select *)0x0)) {
    uVar4 = (*(code *)(PTR_LAB_000f62e8 + -0x6130))(pParse->db,pIdx);
    (*(code *)(PTR_LAB_000f6304 + 0x7c88))(pVVar8,0xffffffff,uVar4,0);
  }
  (*(code *)(PTR_LAB_000f62d8 + -0x1ed4))(pParse,iVar5,uVar9);
  return iVar5;
}



int FUN_0009b4a4(undefined4 *param_1,int param_2,int param_3,int param_4,int param_5,int *param_6,
                int param_7,int param_8)

{
  short sVar1;
  ushort uVar2;
  code *pcVar3;
  code *pcVar4;
  undefined4 uVar5;
  int iVar6;
  int iVar7;
  uint uVar8;
  int iVar9;
  uint uVar10;
  
  iVar9 = param_1[2];
  if (param_6 != (int *)0x0) {
    if (*(int *)(param_2 + 0x24) == 0) {
      *param_6 = 0;
    }
    else {
      iVar6 = param_1[0xe];
      param_1[0xe] = iVar6 + -1;
      *param_6 = iVar6 + -1;
      param_1[0xd] = param_3 + 1;
      FUN_0009b3d8(param_1,*(undefined4 *)(param_2 + 0x24),*param_6,0x10);
      param_1[0xd] = 0;
      param_7 = 0;
    }
  }
  if ((param_5 == 0) || ((*(byte *)(param_2 + 0x37) & 0x10) == 0)) {
    uVar2 = *(ushort *)(param_2 + 0x34);
  }
  else {
    uVar2 = *(ushort *)(param_2 + 0x32);
  }
  uVar10 = (uint)uVar2;
  iVar6 = (*(code *)(PTR_LAB_000f62d8 + -0x1f54))(param_1,uVar10);
  if (param_7 != 0) {
    if (iVar6 == param_8) {
      if (*(int *)(param_7 + 0x24) != 0) {
        param_7 = 0;
      }
    }
    else {
      param_7 = 0;
    }
  }
  uVar8 = 0;
  if (uVar10 != 0) {
    pcVar3 = (code *)(PTR_LAB_000f6304 + -0x7e0);
    pcVar4 = (code *)(PTR_LAB_000f62f4 + 0x3518);
    do {
      if ((param_7 == 0) ||
         (sVar1 = *(short *)(*(int *)(param_7 + 4) + uVar8 * 2),
         *(short *)(*(int *)(param_2 + 4) + uVar8 * 2) != sVar1)) {
        iVar7 = (int)*(short *)(*(int *)(param_2 + 4) + uVar8 * 2);
        if (iVar7 == -2) goto LAB_0009b5e8;
        FUN_00093724(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar7,iVar6 + uVar8);
LAB_0009b68c:
        iVar7 = *(int *)(iVar9 + 0x6c);
        if ((0 < iVar7) && (*(char *)(*(int *)(iVar9 + 0x68) + iVar7 * 0x14 + -0x14) == 'S')) {
          (*pcVar3)(iVar9,iVar7 + -1);
        }
      }
      else if (sVar1 == -2) {
LAB_0009b5e8:
        param_1[0xd] = param_3 + 1;
        (*pcVar4)(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar8 * 0x10 + 4),iVar6 + uVar8
                 );
        param_1[0xd] = 0;
        goto LAB_0009b68c;
      }
      uVar8 = uVar8 + 1;
    } while (uVar10 != uVar8);
  }
  if ((param_4 != 0) &&
     ((*(code *)(PTR_LAB_000f6310 + -0x6054))(iVar9,0x5b,iVar6,uVar10,param_4),
     *(int *)(*(int *)(param_2 + 0xc) + 0xc) != 0)) {
    uVar5 = (*(code *)(PTR_LAB_000f62e8 + -0x6130))(*param_1,param_2);
    (*(code *)(PTR_LAB_000f6304 + 0x7c88))(iVar9,0xffffffff,uVar5,0);
  }
  (*(code *)(PTR_LAB_000f62d8 + -0x1ed4))(param_1,iVar6,uVar10);
  return iVar6;
}


lui gp,0x6
addiu gp,gp,0x2dfc
addu gp,gp,t9
addiu sp,sp,-0x50
sw ra,0x4c(sp)
sw s8,0x48(sp)
sw s7,0x44(sp)
sw s6,0x40(sp)
sw s5,0x3c(sp)
sw s4,0x38(sp)
sw s3,0x34(sp)
sw s2,0x30(sp)
sw s1,0x2c(sp)
sw s0,0x28(sp)
sw gp,0x18(sp)
or s2,a0,zero
or s1,a1,zero
or s7,a2,zero
sw a3,0x5c(sp)
lw s0,0x60(sp)
lw v0,0x64(sp)
lw s3,0x68(sp)
beq v0,zero,0x0009b54c
_lw s4,0x8(a0)
lw v1,0x24(a1)
beq v1,zero,0x0009b56c
_li a3,0x10
lw v1,0x38(a0)
addiu v1,v1,-0x1
sw v1,0x38(a0)
sw v1,0x0(v0)
addiu v1,a2,0x1
sw v1,0x34(a0)
lw a2,0x0(v0)
lw a1,0x24(a1)
lw t9,-0x7f88(gp)
addiu t9,t9,-0x4c28
bal 0x0009b3d8
_nop
lw gp,0x18(sp)
sw zero,0x34(s2)
or s3,zero,zero
beq s0,zero,0x0009b574
_nop
lbu v0,0x37(s1)
andi v0,v0,0x10
beq v0,zero,0x0009b574
_nop
b 0x0009b578
_lhu s5,0x32(s1)
b 0x0009b54c
_sw zero,0x0(v0)
lhu s5,0x34(s1)
or a1,s5,zero
or a0,s2,zero
lw t9,-0x7fc8(gp)
addiu t9,t9,-0x1f54
jalr t9
_nop
lw gp,0x18(sp)
beq s3,zero,0x0009b5ac
_or s6,v0,zero
lw v0,0x6c(sp)
beq s6,v0,0x0009b5d4
_nop
or s3,zero,zero
blez s5,0x0009b6d4
_or s0,zero,zero
lw v0,-0x7f9c(gp)
addiu v0,v0,-0x7e0
sw v0,0x24(sp)
lw v0,-0x7fac(gp)
addiu v0,v0,0x3518
sw v0,0x20(sp)
b 0x0009b628
_lw s8,-0x7fac(gp)
lw v0,0x24(s3)
b 0x0009b5ac
_movn s3,zero,v0
bne a0,v0,0x0009b61c
_addu a2,s6,s0
addiu v0,s7,0x1
sw v0,0x34(s2)
lw v0,0x28(s1)
sll v1,s0,0x4
addu v0,v0,v1
lw a1,0x4(v0)
or a0,s2,zero
lw t9,0x20(sp)
jalr t9
_nop
lw gp,0x18(sp)
b 0x0009b68c
_sw zero,0x34(s2)
addiu s0,s0,0x1
beq s5,s0,0x0009b6d8
_lw v0,0x5c(sp)
beq s3,zero,0x0009b650
_sll v0,s0,0x1
lw v1,0x4(s3)
addu v1,v1,v0
lh a0,0x0(v1)
lw v1,0x4(s1)
addu v0,v1,v0
lh v0,0x0(v0)
beq v0,a0,0x0009b5e0
_li v0,-0x2
lw v0,0x4(s1)
sll v1,s0,0x1
addu v0,v0,v1
lh a3,0x0(v0)
li v0,-0x2
beq a3,v0,0x0009b5e8
_addu a2,s6,s0
sw a2,0x10(sp)
or a2,s7,zero
lw a1,0xc(s1)
lw a0,0x8(s2)
addiu t9,s8,0x3724
bal 0x00093724
_nop
lw gp,0x18(sp)
lw a1,0x6c(s4)
blez a1,0x0009b61c
_sll v0,a1,0x2
lw v1,0x68(s4)
addu v0,v0,a1
sll v0,v0,0x2
addu v0,v1,v0
lbu v1,-0x14(v0)
li v0,0x53
bne v1,v0,0x0009b61c
_addiu a1,a1,-0x1
or a0,s4,zero
lw t9,0x24(sp)
jalr t9
_nop
lw gp,0x18(sp)
b 0x0009b620
_addiu s0,s0,0x1
lw v0,0x5c(sp)
bne v0,zero,0x0009b734
_or a3,s5,zero
or a2,s5,zero
or a1,s6,zero
or a0,s2,zero
lw t9,-0x7fc8(gp)
addiu t9,t9,-0x1ed4
jalr t9
_nop
lw gp,0x18(sp)
or v0,s6,zero
lw ra,0x4c(sp)
lw s8,0x48(sp)
lw s7,0x44(sp)
lw s6,0x40(sp)
lw s5,0x3c(sp)
lw s4,0x38(sp)
lw s3,0x34(sp)
lw s2,0x30(sp)
lw s1,0x2c(sp)
lw s0,0x28(sp)
jr ra
_addiu sp,sp,0x50
sw v0,0x10(sp)
or a2,s6,zero
li a1,0x5b
or a0,s4,zero
lw t9,-0x7f90(gp)
addiu t9,t9,-0x6054
jalr t9
_nop
lw gp,0x18(sp)
lw v0,0xc(s1)
lw v0,0xc(v0)
beq v0,zero,0x0009b6e0
_or a1,s1,zero
lw a0,0x0(s2)
lw t9,-0x7fb8(gp)
addiu t9,t9,-0x6130
jalr t9
_nop
lw gp,0x18(sp)
or a3,zero,zero
or a2,v0,zero
li a1,-0x1
or a0,s4,zero
lw t9,-0x7f9c(gp)
addiu t9,t9,0x7c88
jalr t9
_nop
lw gp,0x18(sp)
b 0x0009b6e4
_or a2,s5,zero
(translation_unit "int FUN_0009b4a4(undefined4 *param_1,int param_2,int param_3,int param_4,int param_5,int *param_6,\n                int param_7,int param_8)\n\n{\n  short sVar1;\n  ushort uVar2;\n  code *pcVar3;\n  code *pcVar4;\n  undefined4 uVar5;\n  int iVar6;\n  int iVar7;\n  uint uVar8;\n  int iVar9;\n  uint uVar10;\n  \n  iVar9 = param_1[2];\n  if (param_6 != (int *)0x0) {\n    if (*(int *)(param_2 + 0x24) == 0) {\n      *param_6 = 0;\n    }\n    else {\n      iVar6 = param_1[0xe];\n      param_1[0xe] = iVar6 + -1;\n      *param_6 = iVar6 + -1;\n      param_1[0xd] = param_3 + 1;\n      FUN_0009b3d8(param_1,*(undefined4 *)(param_2 + 0x24),*param_6,0x10);\n      param_1[0xd] = 0;\n      param_7 = 0;\n    }\n  }\n  if ((param_5 == 0) || ((*(byte *)(param_2 + 0x37) & 0x10) == 0)) {\n    uVar2 = *(ushort *)(param_2 + 0x34);\n  }\n  else {\n    uVar2 = *(ushort *)(param_2 + 0x32);\n  }\n  uVar10 = (uint)uVar2;\n  iVar6 = (*(code *)(PTR_LAB_000f62d8 + -0x1f54))(param_1,uVar10);\n  if (param_7 != 0) {\n    if (iVar6 == param_8) {\n      if (*(int *)(param_7 + 0x24) != 0) {\n        param_7 = 0;\n      }\n    }\n    else {\n      param_7 = 0;\n    }\n  }\n  uVar8 = 0;\n  if (uVar10 != 0) {\n    pcVar3 = (code *)(PTR_LAB_000f6304 + -0x7e0);\n    pcVar4 = (code *)(PTR_LAB_000f62f4 + 0x3518);\n    do {\n      if ((param_7 == 0) ||\n         (sVar1 = *(short *)(*(int *)(param_7 + 4) + uVar8 * 2),\n         *(short *)(*(int *)(param_2 + 4) + uVar8 * 2) != sVar1)) {\n        iVar7 = (int)*(short *)(*(int *)(param_2 + 4) + uVar8 * 2);\n        if (iVar7 == -2) goto LAB_0009b5e8;\n        FUN_00093724(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar7,iVar6 + uVar8);\nLAB_0009b68c:\n        iVar7 = *(int *)(iVar9 + 0x6c);\n        if ((0 < iVar7) && (*(char *)(*(int *)(iVar9 + 0x68) + iVar7 * 0x14 + -0x14) == 'S')) {\n          (*pcVar3)(iVar9,iVar7 + -1);\n        }\n      }\n      else if (sVar1 == -2) {\nLAB_0009b5e8:\n        param_1[0xd] = param_3 + 1;\n        (*pcVar4)(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar8 * 0x10 + 4),iVar6 + uVar8\n                 );\n        param_1[0xd] = 0;\n        goto LAB_0009b68c;\n      }\n      uVar8 = uVar8 + 1;\n    } while (uVar10 != uVar8);\n  }\n  if ((param_4 != 0) &&\n     ((*(code *)(PTR_LAB_000f6310 + -0x6054))(iVar9,0x5b,iVar6,uVar10,param_4),\n     *(int *)(*(int *)(param_2 + 0xc) + 0xc) != 0)) {\n    uVar5 = (*(code *)(PTR_LAB_000f62e8 + -0x6130))(*param_1,param_2);\n    (*(code *)(PTR_LAB_000f6304 + 0x7c88))(iVar9,0xffffffff,uVar5,0);\n  }\n  (*(code *)(PTR_LAB_000f62d8 + -0x1ed4))(param_1,iVar6,uVar10);\n  return iVar6;\n}\n\n" (function_definition "int FUN_0009b4a4(undefined4 *param_1,int param_2,int param_3,int param_4,int param_5,int *param_6,\n                int param_7,int param_8)\n\n{\n  short sVar1;\n  ushort uVar2;\n  code *pcVar3;\n  code *pcVar4;\n  undefined4 uVar5;\n  int iVar6;\n  int iVar7;\n  uint uVar8;\n  int iVar9;\n  uint uVar10;\n  \n  iVar9 = param_1[2];\n  if (param_6 != (int *)0x0) {\n    if (*(int *)(param_2 + 0x24) == 0) {\n      *param_6 = 0;\n    }\n    else {\n      iVar6 = param_1[0xe];\n      param_1[0xe] = iVar6 + -1;\n      *param_6 = iVar6 + -1;\n      param_1[0xd] = param_3 + 1;\n      FUN_0009b3d8(param_1,*(undefined4 *)(param_2 + 0x24),*param_6,0x10);\n      param_1[0xd] = 0;\n      param_7 = 0;\n    }\n  }\n  if ((param_5 == 0) || ((*(byte *)(param_2 + 0x37) & 0x10) == 0)) {\n    uVar2 = *(ushort *)(param_2 + 0x34);\n  }\n  else {\n    uVar2 = *(ushort *)(param_2 + 0x32);\n  }\n  uVar10 = (uint)uVar2;\n  iVar6 = (*(code *)(PTR_LAB_000f62d8 + -0x1f54))(param_1,uVar10);\n  if (param_7 != 0) {\n    if (iVar6 == param_8) {\n      if (*(int *)(param_7 + 0x24) != 0) {\n        param_7 = 0;\n      }\n    }\n    else {\n      param_7 = 0;\n    }\n  }\n  uVar8 = 0;\n  if (uVar10 != 0) {\n    pcVar3 = (code *)(PTR_LAB_000f6304 + -0x7e0);\n    pcVar4 = (code *)(PTR_LAB_000f62f4 + 0x3518);\n    do {\n      if ((param_7 == 0) ||\n         (sVar1 = *(short *)(*(int *)(param_7 + 4) + uVar8 * 2),\n         *(short *)(*(int *)(param_2 + 4) + uVar8 * 2) != sVar1)) {\n        iVar7 = (int)*(short *)(*(int *)(param_2 + 4) + uVar8 * 2);\n        if (iVar7 == -2) goto LAB_0009b5e8;\n        FUN_00093724(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar7,iVar6 + uVar8);\nLAB_0009b68c:\n        iVar7 = *(int *)(iVar9 + 0x6c);\n        if ((0 < iVar7) && (*(char *)(*(int *)(iVar9 + 0x68) + iVar7 * 0x14 + -0x14) == 'S')) {\n          (*pcVar3)(iVar9,iVar7 + -1);\n        }\n      }\n      else if (sVar1 == -2) {\nLAB_0009b5e8:\n        param_1[0xd] = param_3 + 1;\n        (*pcVar4)(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar8 * 0x10 + 4),iVar6 + uVar8\n                 );\n        param_1[0xd] = 0;\n        goto LAB_0009b68c;\n      }\n      uVar8 = uVar8 + 1;\n    } while (uVar10 != uVar8);\n  }\n  if ((param_4 != 0) &&\n     ((*(code *)(PTR_LAB_000f6310 + -0x6054))(iVar9,0x5b,iVar6,uVar10,param_4),\n     *(int *)(*(int *)(param_2 + 0xc) + 0xc) != 0)) {\n    uVar5 = (*(code *)(PTR_LAB_000f62e8 + -0x6130))(*param_1,param_2);\n    (*(code *)(PTR_LAB_000f6304 + 0x7c88))(iVar9,0xffffffff,uVar5,0);\n  }\n  (*(code *)(PTR_LAB_000f62d8 + -0x1ed4))(param_1,iVar6,uVar10);\n  return iVar6;\n}" primitive_type (function_declarator "FUN_0009b4a4(undefined4 *param_1,int param_2,int param_3,int param_4,int param_5,int *param_6,\n                int param_7,int param_8)" identifier (parameter_list "(undefined4 *param_1,int param_2,int param_3,int param_4,int param_5,int *param_6,\n                int param_7,int param_8)" ( (parameter_declaration "undefined4 *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "int param_3" primitive_type identifier) , (parameter_declaration "int param_4" primitive_type identifier) , (parameter_declaration "int param_5" primitive_type identifier) , (parameter_declaration "int *param_6" primitive_type (pointer_declarator "*param_6" * identifier)) , (parameter_declaration "int param_7" primitive_type identifier) , (parameter_declaration "int param_8" primitive_type identifier) ))) (compound_statement "{\n  short sVar1;\n  ushort uVar2;\n  code *pcVar3;\n  code *pcVar4;\n  undefined4 uVar5;\n  int iVar6;\n  int iVar7;\n  uint uVar8;\n  int iVar9;\n  uint uVar10;\n  \n  iVar9 = param_1[2];\n  if (param_6 != (int *)0x0) {\n    if (*(int *)(param_2 + 0x24) == 0) {\n      *param_6 = 0;\n    }\n    else {\n      iVar6 = param_1[0xe];\n      param_1[0xe] = iVar6 + -1;\n      *param_6 = iVar6 + -1;\n      param_1[0xd] = param_3 + 1;\n      FUN_0009b3d8(param_1,*(undefined4 *)(param_2 + 0x24),*param_6,0x10);\n      param_1[0xd] = 0;\n      param_7 = 0;\n    }\n  }\n  if ((param_5 == 0) || ((*(byte *)(param_2 + 0x37) & 0x10) == 0)) {\n    uVar2 = *(ushort *)(param_2 + 0x34);\n  }\n  else {\n    uVar2 = *(ushort *)(param_2 + 0x32);\n  }\n  uVar10 = (uint)uVar2;\n  iVar6 = (*(code *)(PTR_LAB_000f62d8 + -0x1f54))(param_1,uVar10);\n  if (param_7 != 0) {\n    if (iVar6 == param_8) {\n      if (*(int *)(param_7 + 0x24) != 0) {\n        param_7 = 0;\n      }\n    }\n    else {\n      param_7 = 0;\n    }\n  }\n  uVar8 = 0;\n  if (uVar10 != 0) {\n    pcVar3 = (code *)(PTR_LAB_000f6304 + -0x7e0);\n    pcVar4 = (code *)(PTR_LAB_000f62f4 + 0x3518);\n    do {\n      if ((param_7 == 0) ||\n         (sVar1 = *(short *)(*(int *)(param_7 + 4) + uVar8 * 2),\n         *(short *)(*(int *)(param_2 + 4) + uVar8 * 2) != sVar1)) {\n        iVar7 = (int)*(short *)(*(int *)(param_2 + 4) + uVar8 * 2);\n        if (iVar7 == -2) goto LAB_0009b5e8;\n        FUN_00093724(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar7,iVar6 + uVar8);\nLAB_0009b68c:\n        iVar7 = *(int *)(iVar9 + 0x6c);\n        if ((0 < iVar7) && (*(char *)(*(int *)(iVar9 + 0x68) + iVar7 * 0x14 + -0x14) == 'S')) {\n          (*pcVar3)(iVar9,iVar7 + -1);\n        }\n      }\n      else if (sVar1 == -2) {\nLAB_0009b5e8:\n        param_1[0xd] = param_3 + 1;\n        (*pcVar4)(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar8 * 0x10 + 4),iVar6 + uVar8\n                 );\n        param_1[0xd] = 0;\n        goto LAB_0009b68c;\n      }\n      uVar8 = uVar8 + 1;\n    } while (uVar10 != uVar8);\n  }\n  if ((param_4 != 0) &&\n     ((*(code *)(PTR_LAB_000f6310 + -0x6054))(iVar9,0x5b,iVar6,uVar10,param_4),\n     *(int *)(*(int *)(param_2 + 0xc) + 0xc) != 0)) {\n    uVar5 = (*(code *)(PTR_LAB_000f62e8 + -0x6130))(*param_1,param_2);\n    (*(code *)(PTR_LAB_000f6304 + 0x7c88))(iVar9,0xffffffff,uVar5,0);\n  }\n  (*(code *)(PTR_LAB_000f62d8 + -0x1ed4))(param_1,iVar6,uVar10);\n  return iVar6;\n}" { (declaration "short sVar1;" (sized_type_specifier "short" short) identifier ;) (declaration "ushort uVar2;" type_identifier identifier ;) (declaration "code *pcVar3;" type_identifier (pointer_declarator "*pcVar3" * identifier) ;) (declaration "code *pcVar4;" type_identifier (pointer_declarator "*pcVar4" * identifier) ;) (declaration "undefined4 uVar5;" type_identifier identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "uint uVar8;" type_identifier identifier ;) (declaration "int iVar9;" primitive_type identifier ;) (declaration "uint uVar10;" type_identifier identifier ;) (expression_statement "iVar9 = param_1[2];" (assignment_expression "iVar9 = param_1[2]" identifier = (subscript_expression "param_1[2]" identifier [ number_literal ])) ;) (if_statement "if (param_6 != (int *)0x0) {\n    if (*(int *)(param_2 + 0x24) == 0) {\n      *param_6 = 0;\n    }\n    else {\n      iVar6 = param_1[0xe];\n      param_1[0xe] = iVar6 + -1;\n      *param_6 = iVar6 + -1;\n      param_1[0xd] = param_3 + 1;\n      FUN_0009b3d8(param_1,*(undefined4 *)(param_2 + 0x24),*param_6,0x10);\n      param_1[0xd] = 0;\n      param_7 = 0;\n    }\n  }" if (parenthesized_expression "(param_6 != (int *)0x0)" ( (binary_expression "param_6 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    if (*(int *)(param_2 + 0x24) == 0) {\n      *param_6 = 0;\n    }\n    else {\n      iVar6 = param_1[0xe];\n      param_1[0xe] = iVar6 + -1;\n      *param_6 = iVar6 + -1;\n      param_1[0xd] = param_3 + 1;\n      FUN_0009b3d8(param_1,*(undefined4 *)(param_2 + 0x24),*param_6,0x10);\n      param_1[0xd] = 0;\n      param_7 = 0;\n    }\n  }" { (if_statement "if (*(int *)(param_2 + 0x24) == 0) {\n      *param_6 = 0;\n    }\n    else {\n      iVar6 = param_1[0xe];\n      param_1[0xe] = iVar6 + -1;\n      *param_6 = iVar6 + -1;\n      param_1[0xd] = param_3 + 1;\n      FUN_0009b3d8(param_1,*(undefined4 *)(param_2 + 0x24),*param_6,0x10);\n      param_1[0xd] = 0;\n      param_7 = 0;\n    }" if (parenthesized_expression "(*(int *)(param_2 + 0x24) == 0)" ( (binary_expression "*(int *)(param_2 + 0x24) == 0" (pointer_expression "*(int *)(param_2 + 0x24)" * (cast_expression "(int *)(param_2 + 0x24)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x24)" ( (binary_expression "param_2 + 0x24" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n      *param_6 = 0;\n    }" { (expression_statement "*param_6 = 0;" (assignment_expression "*param_6 = 0" (pointer_expression "*param_6" * identifier) = number_literal) ;) }) (else_clause "else {\n      iVar6 = param_1[0xe];\n      param_1[0xe] = iVar6 + -1;\n      *param_6 = iVar6 + -1;\n      param_1[0xd] = param_3 + 1;\n      FUN_0009b3d8(param_1,*(undefined4 *)(param_2 + 0x24),*param_6,0x10);\n      param_1[0xd] = 0;\n      param_7 = 0;\n    }" else (compound_statement "{\n      iVar6 = param_1[0xe];\n      param_1[0xe] = iVar6 + -1;\n      *param_6 = iVar6 + -1;\n      param_1[0xd] = param_3 + 1;\n      FUN_0009b3d8(param_1,*(undefined4 *)(param_2 + 0x24),*param_6,0x10);\n      param_1[0xd] = 0;\n      param_7 = 0;\n    }" { (expression_statement "iVar6 = param_1[0xe];" (assignment_expression "iVar6 = param_1[0xe]" identifier = (subscript_expression "param_1[0xe]" identifier [ number_literal ])) ;) (expression_statement "param_1[0xe] = iVar6 + -1;" (assignment_expression "param_1[0xe] = iVar6 + -1" (subscript_expression "param_1[0xe]" identifier [ number_literal ]) = (binary_expression "iVar6 + -1" identifier + number_literal)) ;) (expression_statement "*param_6 = iVar6 + -1;" (assignment_expression "*param_6 = iVar6 + -1" (pointer_expression "*param_6" * identifier) = (binary_expression "iVar6 + -1" identifier + number_literal)) ;) (expression_statement "param_1[0xd] = param_3 + 1;" (assignment_expression "param_1[0xd] = param_3 + 1" (subscript_expression "param_1[0xd]" identifier [ number_literal ]) = (binary_expression "param_3 + 1" identifier + number_literal)) ;) (expression_statement "FUN_0009b3d8(param_1,*(undefined4 *)(param_2 + 0x24),*param_6,0x10);" (call_expression "FUN_0009b3d8(param_1,*(undefined4 *)(param_2 + 0x24),*param_6,0x10)" identifier (argument_list "(param_1,*(undefined4 *)(param_2 + 0x24),*param_6,0x10)" ( identifier , (pointer_expression "*(undefined4 *)(param_2 + 0x24)" * (cast_expression "(undefined4 *)(param_2 + 0x24)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x24)" ( (binary_expression "param_2 + 0x24" identifier + number_literal) )))) , (pointer_expression "*param_6" * identifier) , number_literal ))) ;) (expression_statement "param_1[0xd] = 0;" (assignment_expression "param_1[0xd] = 0" (subscript_expression "param_1[0xd]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_7 = 0;" (assignment_expression "param_7 = 0" identifier = number_literal) ;) }))) })) (if_statement "if ((param_5 == 0) || ((*(byte *)(param_2 + 0x37) & 0x10) == 0)) {\n    uVar2 = *(ushort *)(param_2 + 0x34);\n  }\n  else {\n    uVar2 = *(ushort *)(param_2 + 0x32);\n  }" if (parenthesized_expression "((param_5 == 0) || ((*(byte *)(param_2 + 0x37) & 0x10) == 0))" ( (binary_expression "(param_5 == 0) || ((*(byte *)(param_2 + 0x37) & 0x10) == 0)" (parenthesized_expression "(param_5 == 0)" ( (binary_expression "param_5 == 0" identifier == number_literal) )) || (parenthesized_expression "((*(byte *)(param_2 + 0x37) & 0x10) == 0)" ( (binary_expression "(*(byte *)(param_2 + 0x37) & 0x10) == 0" (parenthesized_expression "(*(byte *)(param_2 + 0x37) & 0x10)" ( (binary_expression "*(byte *)(param_2 + 0x37) & 0x10" (pointer_expression "*(byte *)(param_2 + 0x37)" * (cast_expression "(byte *)(param_2 + 0x37)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x37)" ( (binary_expression "param_2 + 0x37" identifier + number_literal) )))) & number_literal) )) == number_literal) ))) )) (compound_statement "{\n    uVar2 = *(ushort *)(param_2 + 0x34);\n  }" { (expression_statement "uVar2 = *(ushort *)(param_2 + 0x34);" (assignment_expression "uVar2 = *(ushort *)(param_2 + 0x34)" identifier = (pointer_expression "*(ushort *)(param_2 + 0x34)" * (cast_expression "(ushort *)(param_2 + 0x34)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x34)" ( (binary_expression "param_2 + 0x34" identifier + number_literal) ))))) ;) }) (else_clause "else {\n    uVar2 = *(ushort *)(param_2 + 0x32);\n  }" else (compound_statement "{\n    uVar2 = *(ushort *)(param_2 + 0x32);\n  }" { (expression_statement "uVar2 = *(ushort *)(param_2 + 0x32);" (assignment_expression "uVar2 = *(ushort *)(param_2 + 0x32)" identifier = (pointer_expression "*(ushort *)(param_2 + 0x32)" * (cast_expression "(ushort *)(param_2 + 0x32)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x32)" ( (binary_expression "param_2 + 0x32" identifier + number_literal) ))))) ;) }))) (expression_statement "uVar10 = (uint)uVar2;" (assignment_expression "uVar10 = (uint)uVar2" identifier = (cast_expression "(uint)uVar2" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "iVar6 = (*(code *)(PTR_LAB_000f62d8 + -0x1f54))(param_1,uVar10);" (assignment_expression "iVar6 = (*(code *)(PTR_LAB_000f62d8 + -0x1f54))(param_1,uVar10)" identifier = (call_expression "(*(code *)(PTR_LAB_000f62d8 + -0x1f54))(param_1,uVar10)" (parenthesized_expression "(*(code *)(PTR_LAB_000f62d8 + -0x1f54))" ( (pointer_expression "*(code *)(PTR_LAB_000f62d8 + -0x1f54)" * (cast_expression "(code *)(PTR_LAB_000f62d8 + -0x1f54)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_000f62d8 + -0x1f54)" ( (binary_expression "PTR_LAB_000f62d8 + -0x1f54" identifier + number_literal) )))) )) (argument_list "(param_1,uVar10)" ( identifier , identifier )))) ;) (if_statement "if (param_7 != 0) {\n    if (iVar6 == param_8) {\n      if (*(int *)(param_7 + 0x24) != 0) {\n        param_7 = 0;\n      }\n    }\n    else {\n      param_7 = 0;\n    }\n  }" if (parenthesized_expression "(param_7 != 0)" ( (binary_expression "param_7 != 0" identifier != number_literal) )) (compound_statement "{\n    if (iVar6 == param_8) {\n      if (*(int *)(param_7 + 0x24) != 0) {\n        param_7 = 0;\n      }\n    }\n    else {\n      param_7 = 0;\n    }\n  }" { (if_statement "if (iVar6 == param_8) {\n      if (*(int *)(param_7 + 0x24) != 0) {\n        param_7 = 0;\n      }\n    }\n    else {\n      param_7 = 0;\n    }" if (parenthesized_expression "(iVar6 == param_8)" ( (binary_expression "iVar6 == param_8" identifier == identifier) )) (compound_statement "{\n      if (*(int *)(param_7 + 0x24) != 0) {\n        param_7 = 0;\n      }\n    }" { (if_statement "if (*(int *)(param_7 + 0x24) != 0) {\n        param_7 = 0;\n      }" if (parenthesized_expression "(*(int *)(param_7 + 0x24) != 0)" ( (binary_expression "*(int *)(param_7 + 0x24) != 0" (pointer_expression "*(int *)(param_7 + 0x24)" * (cast_expression "(int *)(param_7 + 0x24)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_7 + 0x24)" ( (binary_expression "param_7 + 0x24" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n        param_7 = 0;\n      }" { (expression_statement "param_7 = 0;" (assignment_expression "param_7 = 0" identifier = number_literal) ;) })) }) (else_clause "else {\n      param_7 = 0;\n    }" else (compound_statement "{\n      param_7 = 0;\n    }" { (expression_statement "param_7 = 0;" (assignment_expression "param_7 = 0" identifier = number_literal) ;) }))) })) (expression_statement "uVar8 = 0;" (assignment_expression "uVar8 = 0" identifier = number_literal) ;) (if_statement "if (uVar10 != 0) {\n    pcVar3 = (code *)(PTR_LAB_000f6304 + -0x7e0);\n    pcVar4 = (code *)(PTR_LAB_000f62f4 + 0x3518);\n    do {\n      if ((param_7 == 0) ||\n         (sVar1 = *(short *)(*(int *)(param_7 + 4) + uVar8 * 2),\n         *(short *)(*(int *)(param_2 + 4) + uVar8 * 2) != sVar1)) {\n        iVar7 = (int)*(short *)(*(int *)(param_2 + 4) + uVar8 * 2);\n        if (iVar7 == -2) goto LAB_0009b5e8;\n        FUN_00093724(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar7,iVar6 + uVar8);\nLAB_0009b68c:\n        iVar7 = *(int *)(iVar9 + 0x6c);\n        if ((0 < iVar7) && (*(char *)(*(int *)(iVar9 + 0x68) + iVar7 * 0x14 + -0x14) == 'S')) {\n          (*pcVar3)(iVar9,iVar7 + -1);\n        }\n      }\n      else if (sVar1 == -2) {\nLAB_0009b5e8:\n        param_1[0xd] = param_3 + 1;\n        (*pcVar4)(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar8 * 0x10 + 4),iVar6 + uVar8\n                 );\n        param_1[0xd] = 0;\n        goto LAB_0009b68c;\n      }\n      uVar8 = uVar8 + 1;\n    } while (uVar10 != uVar8);\n  }" if (parenthesized_expression "(uVar10 != 0)" ( (binary_expression "uVar10 != 0" identifier != number_literal) )) (compound_statement "{\n    pcVar3 = (code *)(PTR_LAB_000f6304 + -0x7e0);\n    pcVar4 = (code *)(PTR_LAB_000f62f4 + 0x3518);\n    do {\n      if ((param_7 == 0) ||\n         (sVar1 = *(short *)(*(int *)(param_7 + 4) + uVar8 * 2),\n         *(short *)(*(int *)(param_2 + 4) + uVar8 * 2) != sVar1)) {\n        iVar7 = (int)*(short *)(*(int *)(param_2 + 4) + uVar8 * 2);\n        if (iVar7 == -2) goto LAB_0009b5e8;\n        FUN_00093724(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar7,iVar6 + uVar8);\nLAB_0009b68c:\n        iVar7 = *(int *)(iVar9 + 0x6c);\n        if ((0 < iVar7) && (*(char *)(*(int *)(iVar9 + 0x68) + iVar7 * 0x14 + -0x14) == 'S')) {\n          (*pcVar3)(iVar9,iVar7 + -1);\n        }\n      }\n      else if (sVar1 == -2) {\nLAB_0009b5e8:\n        param_1[0xd] = param_3 + 1;\n        (*pcVar4)(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar8 * 0x10 + 4),iVar6 + uVar8\n                 );\n        param_1[0xd] = 0;\n        goto LAB_0009b68c;\n      }\n      uVar8 = uVar8 + 1;\n    } while (uVar10 != uVar8);\n  }" { (expression_statement "pcVar3 = (code *)(PTR_LAB_000f6304 + -0x7e0);" (assignment_expression "pcVar3 = (code *)(PTR_LAB_000f6304 + -0x7e0)" identifier = (cast_expression "(code *)(PTR_LAB_000f6304 + -0x7e0)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_000f6304 + -0x7e0)" ( (binary_expression "PTR_LAB_000f6304 + -0x7e0" identifier + number_literal) )))) ;) (expression_statement "pcVar4 = (code *)(PTR_LAB_000f62f4 + 0x3518);" (assignment_expression "pcVar4 = (code *)(PTR_LAB_000f62f4 + 0x3518)" identifier = (cast_expression "(code *)(PTR_LAB_000f62f4 + 0x3518)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_000f62f4 + 0x3518)" ( (binary_expression "PTR_LAB_000f62f4 + 0x3518" identifier + number_literal) )))) ;) (do_statement "do {\n      if ((param_7 == 0) ||\n         (sVar1 = *(short *)(*(int *)(param_7 + 4) + uVar8 * 2),\n         *(short *)(*(int *)(param_2 + 4) + uVar8 * 2) != sVar1)) {\n        iVar7 = (int)*(short *)(*(int *)(param_2 + 4) + uVar8 * 2);\n        if (iVar7 == -2) goto LAB_0009b5e8;\n        FUN_00093724(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar7,iVar6 + uVar8);\nLAB_0009b68c:\n        iVar7 = *(int *)(iVar9 + 0x6c);\n        if ((0 < iVar7) && (*(char *)(*(int *)(iVar9 + 0x68) + iVar7 * 0x14 + -0x14) == 'S')) {\n          (*pcVar3)(iVar9,iVar7 + -1);\n        }\n      }\n      else if (sVar1 == -2) {\nLAB_0009b5e8:\n        param_1[0xd] = param_3 + 1;\n        (*pcVar4)(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar8 * 0x10 + 4),iVar6 + uVar8\n                 );\n        param_1[0xd] = 0;\n        goto LAB_0009b68c;\n      }\n      uVar8 = uVar8 + 1;\n    } while (uVar10 != uVar8);" do (compound_statement "{\n      if ((param_7 == 0) ||\n         (sVar1 = *(short *)(*(int *)(param_7 + 4) + uVar8 * 2),\n         *(short *)(*(int *)(param_2 + 4) + uVar8 * 2) != sVar1)) {\n        iVar7 = (int)*(short *)(*(int *)(param_2 + 4) + uVar8 * 2);\n        if (iVar7 == -2) goto LAB_0009b5e8;\n        FUN_00093724(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar7,iVar6 + uVar8);\nLAB_0009b68c:\n        iVar7 = *(int *)(iVar9 + 0x6c);\n        if ((0 < iVar7) && (*(char *)(*(int *)(iVar9 + 0x68) + iVar7 * 0x14 + -0x14) == 'S')) {\n          (*pcVar3)(iVar9,iVar7 + -1);\n        }\n      }\n      else if (sVar1 == -2) {\nLAB_0009b5e8:\n        param_1[0xd] = param_3 + 1;\n        (*pcVar4)(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar8 * 0x10 + 4),iVar6 + uVar8\n                 );\n        param_1[0xd] = 0;\n        goto LAB_0009b68c;\n      }\n      uVar8 = uVar8 + 1;\n    }" { (if_statement "if ((param_7 == 0) ||\n         (sVar1 = *(short *)(*(int *)(param_7 + 4) + uVar8 * 2),\n         *(short *)(*(int *)(param_2 + 4) + uVar8 * 2) != sVar1)) {\n        iVar7 = (int)*(short *)(*(int *)(param_2 + 4) + uVar8 * 2);\n        if (iVar7 == -2) goto LAB_0009b5e8;\n        FUN_00093724(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar7,iVar6 + uVar8);\nLAB_0009b68c:\n        iVar7 = *(int *)(iVar9 + 0x6c);\n        if ((0 < iVar7) && (*(char *)(*(int *)(iVar9 + 0x68) + iVar7 * 0x14 + -0x14) == 'S')) {\n          (*pcVar3)(iVar9,iVar7 + -1);\n        }\n      }\n      else if (sVar1 == -2) {\nLAB_0009b5e8:\n        param_1[0xd] = param_3 + 1;\n        (*pcVar4)(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar8 * 0x10 + 4),iVar6 + uVar8\n                 );\n        param_1[0xd] = 0;\n        goto LAB_0009b68c;\n      }" if (parenthesized_expression "((param_7 == 0) ||\n         (sVar1 = *(short *)(*(int *)(param_7 + 4) + uVar8 * 2),\n         *(short *)(*(int *)(param_2 + 4) + uVar8 * 2) != sVar1))" ( (binary_expression "(param_7 == 0) ||\n         (sVar1 = *(short *)(*(int *)(param_7 + 4) + uVar8 * 2),\n         *(short *)(*(int *)(param_2 + 4) + uVar8 * 2) != sVar1)" (parenthesized_expression "(param_7 == 0)" ( (binary_expression "param_7 == 0" identifier == number_literal) )) || (parenthesized_expression "(sVar1 = *(short *)(*(int *)(param_7 + 4) + uVar8 * 2),\n         *(short *)(*(int *)(param_2 + 4) + uVar8 * 2) != sVar1)" ( (comma_expression "sVar1 = *(short *)(*(int *)(param_7 + 4) + uVar8 * 2),\n         *(short *)(*(int *)(param_2 + 4) + uVar8 * 2) != sVar1" (assignment_expression "sVar1 = *(short *)(*(int *)(param_7 + 4) + uVar8 * 2)" identifier = (pointer_expression "*(short *)(*(int *)(param_7 + 4) + uVar8 * 2)" * (cast_expression "(short *)(*(int *)(param_7 + 4) + uVar8 * 2)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_7 + 4) + uVar8 * 2)" ( (binary_expression "*(int *)(param_7 + 4) + uVar8 * 2" (pointer_expression "*(int *)(param_7 + 4)" * (cast_expression "(int *)(param_7 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_7 + 4)" ( (binary_expression "param_7 + 4" identifier + number_literal) )))) + (binary_expression "uVar8 * 2" identifier * number_literal)) ))))) , (binary_expression "*(short *)(*(int *)(param_2 + 4) + uVar8 * 2) != sVar1" (pointer_expression "*(short *)(*(int *)(param_2 + 4) + uVar8 * 2)" * (cast_expression "(short *)(*(int *)(param_2 + 4) + uVar8 * 2)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_2 + 4) + uVar8 * 2)" ( (binary_expression "*(int *)(param_2 + 4) + uVar8 * 2" (pointer_expression "*(int *)(param_2 + 4)" * (cast_expression "(int *)(param_2 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) )))) + (binary_expression "uVar8 * 2" identifier * number_literal)) )))) != identifier)) ))) )) (compound_statement "{\n        iVar7 = (int)*(short *)(*(int *)(param_2 + 4) + uVar8 * 2);\n        if (iVar7 == -2) goto LAB_0009b5e8;\n        FUN_00093724(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar7,iVar6 + uVar8);\nLAB_0009b68c:\n        iVar7 = *(int *)(iVar9 + 0x6c);\n        if ((0 < iVar7) && (*(char *)(*(int *)(iVar9 + 0x68) + iVar7 * 0x14 + -0x14) == 'S')) {\n          (*pcVar3)(iVar9,iVar7 + -1);\n        }\n      }" { (expression_statement "iVar7 = (int)*(short *)(*(int *)(param_2 + 4) + uVar8 * 2);" (assignment_expression "iVar7 = (int)*(short *)(*(int *)(param_2 + 4) + uVar8 * 2)" identifier = (cast_expression "(int)*(short *)(*(int *)(param_2 + 4) + uVar8 * 2)" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*(short *)(*(int *)(param_2 + 4) + uVar8 * 2)" * (cast_expression "(short *)(*(int *)(param_2 + 4) + uVar8 * 2)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_2 + 4) + uVar8 * 2)" ( (binary_expression "*(int *)(param_2 + 4) + uVar8 * 2" (pointer_expression "*(int *)(param_2 + 4)" * (cast_expression "(int *)(param_2 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) )))) + (binary_expression "uVar8 * 2" identifier * number_literal)) )))))) ;) (if_statement "if (iVar7 == -2) goto LAB_0009b5e8;" if (parenthesized_expression "(iVar7 == -2)" ( (binary_expression "iVar7 == -2" identifier == number_literal) )) (goto_statement "goto LAB_0009b5e8;" goto statement_identifier ;)) (expression_statement "FUN_00093724(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar7,iVar6 + uVar8);" (call_expression "FUN_00093724(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar7,iVar6 + uVar8)" identifier (argument_list "(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar7,iVar6 + uVar8)" ( (subscript_expression "param_1[2]" identifier [ number_literal ]) , (pointer_expression "*(undefined4 *)(param_2 + 0xc)" * (cast_expression "(undefined4 *)(param_2 + 0xc)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xc)" ( (binary_expression "param_2 + 0xc" identifier + number_literal) )))) , identifier , identifier , (binary_expression "iVar6 + uVar8" identifier + identifier) ))) ;) (labeled_statement "LAB_0009b68c:\n        iVar7 = *(int *)(iVar9 + 0x6c);" statement_identifier : (expression_statement "iVar7 = *(int *)(iVar9 + 0x6c);" (assignment_expression "iVar7 = *(int *)(iVar9 + 0x6c)" identifier = (pointer_expression "*(int *)(iVar9 + 0x6c)" * (cast_expression "(int *)(iVar9 + 0x6c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar9 + 0x6c)" ( (binary_expression "iVar9 + 0x6c" identifier + number_literal) ))))) ;)) (if_statement "if ((0 < iVar7) && (*(char *)(*(int *)(iVar9 + 0x68) + iVar7 * 0x14 + -0x14) == 'S')) {\n          (*pcVar3)(iVar9,iVar7 + -1);\n        }" if (parenthesized_expression "((0 < iVar7) && (*(char *)(*(int *)(iVar9 + 0x68) + iVar7 * 0x14 + -0x14) == 'S'))" ( (binary_expression "(0 < iVar7) && (*(char *)(*(int *)(iVar9 + 0x68) + iVar7 * 0x14 + -0x14) == 'S')" (parenthesized_expression "(0 < iVar7)" ( (binary_expression "0 < iVar7" number_literal < identifier) )) && (parenthesized_expression "(*(char *)(*(int *)(iVar9 + 0x68) + iVar7 * 0x14 + -0x14) == 'S')" ( (binary_expression "*(char *)(*(int *)(iVar9 + 0x68) + iVar7 * 0x14 + -0x14) == 'S'" (pointer_expression "*(char *)(*(int *)(iVar9 + 0x68) + iVar7 * 0x14 + -0x14)" * (cast_expression "(char *)(*(int *)(iVar9 + 0x68) + iVar7 * 0x14 + -0x14)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(iVar9 + 0x68) + iVar7 * 0x14 + -0x14)" ( (binary_expression "*(int *)(iVar9 + 0x68) + iVar7 * 0x14 + -0x14" (binary_expression "*(int *)(iVar9 + 0x68) + iVar7 * 0x14" (pointer_expression "*(int *)(iVar9 + 0x68)" * (cast_expression "(int *)(iVar9 + 0x68)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar9 + 0x68)" ( (binary_expression "iVar9 + 0x68" identifier + number_literal) )))) + (binary_expression "iVar7 * 0x14" identifier * number_literal)) + number_literal) )))) == (char_literal "'S'" ' character ')) ))) )) (compound_statement "{\n          (*pcVar3)(iVar9,iVar7 + -1);\n        }" { (expression_statement "(*pcVar3)(iVar9,iVar7 + -1);" (call_expression "(*pcVar3)(iVar9,iVar7 + -1)" (parenthesized_expression "(*pcVar3)" ( (pointer_expression "*pcVar3" * identifier) )) (argument_list "(iVar9,iVar7 + -1)" ( identifier , (binary_expression "iVar7 + -1" identifier + number_literal) ))) ;) })) }) (else_clause "else if (sVar1 == -2) {\nLAB_0009b5e8:\n        param_1[0xd] = param_3 + 1;\n        (*pcVar4)(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar8 * 0x10 + 4),iVar6 + uVar8\n                 );\n        param_1[0xd] = 0;\n        goto LAB_0009b68c;\n      }" else (if_statement "if (sVar1 == -2) {\nLAB_0009b5e8:\n        param_1[0xd] = param_3 + 1;\n        (*pcVar4)(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar8 * 0x10 + 4),iVar6 + uVar8\n                 );\n        param_1[0xd] = 0;\n        goto LAB_0009b68c;\n      }" if (parenthesized_expression "(sVar1 == -2)" ( (binary_expression "sVar1 == -2" identifier == number_literal) )) (compound_statement "{\nLAB_0009b5e8:\n        param_1[0xd] = param_3 + 1;\n        (*pcVar4)(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar8 * 0x10 + 4),iVar6 + uVar8\n                 );\n        param_1[0xd] = 0;\n        goto LAB_0009b68c;\n      }" { (labeled_statement "LAB_0009b5e8:\n        param_1[0xd] = param_3 + 1;" statement_identifier : (expression_statement "param_1[0xd] = param_3 + 1;" (assignment_expression "param_1[0xd] = param_3 + 1" (subscript_expression "param_1[0xd]" identifier [ number_literal ]) = (binary_expression "param_3 + 1" identifier + number_literal)) ;)) (expression_statement "(*pcVar4)(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar8 * 0x10 + 4),iVar6 + uVar8\n                 );" (call_expression "(*pcVar4)(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar8 * 0x10 + 4),iVar6 + uVar8\n                 )" (parenthesized_expression "(*pcVar4)" ( (pointer_expression "*pcVar4" * identifier) )) (argument_list "(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar8 * 0x10 + 4),iVar6 + uVar8\n                 )" ( identifier , (pointer_expression "*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar8 * 0x10 + 4)" * (cast_expression "(undefined4 *)(*(int *)(param_2 + 0x28) + uVar8 * 0x10 + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_2 + 0x28) + uVar8 * 0x10 + 4)" ( (binary_expression "*(int *)(param_2 + 0x28) + uVar8 * 0x10 + 4" (binary_expression "*(int *)(param_2 + 0x28) + uVar8 * 0x10" (pointer_expression "*(int *)(param_2 + 0x28)" * (cast_expression "(int *)(param_2 + 0x28)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x28)" ( (binary_expression "param_2 + 0x28" identifier + number_literal) )))) + (binary_expression "uVar8 * 0x10" identifier * number_literal)) + number_literal) )))) , (binary_expression "iVar6 + uVar8" identifier + identifier) ))) ;) (expression_statement "param_1[0xd] = 0;" (assignment_expression "param_1[0xd] = 0" (subscript_expression "param_1[0xd]" identifier [ number_literal ]) = number_literal) ;) (goto_statement "goto LAB_0009b68c;" goto statement_identifier ;) })))) (expression_statement "uVar8 = uVar8 + 1;" (assignment_expression "uVar8 = uVar8 + 1" identifier = (binary_expression "uVar8 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(uVar10 != uVar8)" ( (binary_expression "uVar10 != uVar8" identifier != identifier) )) ;) })) (if_statement "if ((param_4 != 0) &&\n     ((*(code *)(PTR_LAB_000f6310 + -0x6054))(iVar9,0x5b,iVar6,uVar10,param_4),\n     *(int *)(*(int *)(param_2 + 0xc) + 0xc) != 0)) {\n    uVar5 = (*(code *)(PTR_LAB_000f62e8 + -0x6130))(*param_1,param_2);\n    (*(code *)(PTR_LAB_000f6304 + 0x7c88))(iVar9,0xffffffff,uVar5,0);\n  }" if (parenthesized_expression "((param_4 != 0) &&\n     ((*(code *)(PTR_LAB_000f6310 + -0x6054))(iVar9,0x5b,iVar6,uVar10,param_4),\n     *(int *)(*(int *)(param_2 + 0xc) + 0xc) != 0))" ( (binary_expression "(param_4 != 0) &&\n     ((*(code *)(PTR_LAB_000f6310 + -0x6054))(iVar9,0x5b,iVar6,uVar10,param_4),\n     *(int *)(*(int *)(param_2 + 0xc) + 0xc) != 0)" (parenthesized_expression "(param_4 != 0)" ( (binary_expression "param_4 != 0" identifier != number_literal) )) && (parenthesized_expression "((*(code *)(PTR_LAB_000f6310 + -0x6054))(iVar9,0x5b,iVar6,uVar10,param_4),\n     *(int *)(*(int *)(param_2 + 0xc) + 0xc) != 0)" ( (comma_expression "(*(code *)(PTR_LAB_000f6310 + -0x6054))(iVar9,0x5b,iVar6,uVar10,param_4),\n     *(int *)(*(int *)(param_2 + 0xc) + 0xc) != 0" (call_expression "(*(code *)(PTR_LAB_000f6310 + -0x6054))(iVar9,0x5b,iVar6,uVar10,param_4)" (parenthesized_expression "(*(code *)(PTR_LAB_000f6310 + -0x6054))" ( (pointer_expression "*(code *)(PTR_LAB_000f6310 + -0x6054)" * (cast_expression "(code *)(PTR_LAB_000f6310 + -0x6054)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_000f6310 + -0x6054)" ( (binary_expression "PTR_LAB_000f6310 + -0x6054" identifier + number_literal) )))) )) (argument_list "(iVar9,0x5b,iVar6,uVar10,param_4)" ( identifier , number_literal , identifier , identifier , identifier ))) , (binary_expression "*(int *)(*(int *)(param_2 + 0xc) + 0xc) != 0" (pointer_expression "*(int *)(*(int *)(param_2 + 0xc) + 0xc)" * (cast_expression "(int *)(*(int *)(param_2 + 0xc) + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_2 + 0xc) + 0xc)" ( (binary_expression "*(int *)(param_2 + 0xc) + 0xc" (pointer_expression "*(int *)(param_2 + 0xc)" * (cast_expression "(int *)(param_2 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xc)" ( (binary_expression "param_2 + 0xc" identifier + number_literal) )))) + number_literal) )))) != number_literal)) ))) )) (compound_statement "{\n    uVar5 = (*(code *)(PTR_LAB_000f62e8 + -0x6130))(*param_1,param_2);\n    (*(code *)(PTR_LAB_000f6304 + 0x7c88))(iVar9,0xffffffff,uVar5,0);\n  }" { (expression_statement "uVar5 = (*(code *)(PTR_LAB_000f62e8 + -0x6130))(*param_1,param_2);" (assignment_expression "uVar5 = (*(code *)(PTR_LAB_000f62e8 + -0x6130))(*param_1,param_2)" identifier = (call_expression "(*(code *)(PTR_LAB_000f62e8 + -0x6130))(*param_1,param_2)" (parenthesized_expression "(*(code *)(PTR_LAB_000f62e8 + -0x6130))" ( (pointer_expression "*(code *)(PTR_LAB_000f62e8 + -0x6130)" * (cast_expression "(code *)(PTR_LAB_000f62e8 + -0x6130)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_000f62e8 + -0x6130)" ( (binary_expression "PTR_LAB_000f62e8 + -0x6130" identifier + number_literal) )))) )) (argument_list "(*param_1,param_2)" ( (pointer_expression "*param_1" * identifier) , identifier )))) ;) (expression_statement "(*(code *)(PTR_LAB_000f6304 + 0x7c88))(iVar9,0xffffffff,uVar5,0);" (call_expression "(*(code *)(PTR_LAB_000f6304 + 0x7c88))(iVar9,0xffffffff,uVar5,0)" (parenthesized_expression "(*(code *)(PTR_LAB_000f6304 + 0x7c88))" ( (pointer_expression "*(code *)(PTR_LAB_000f6304 + 0x7c88)" * (cast_expression "(code *)(PTR_LAB_000f6304 + 0x7c88)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_000f6304 + 0x7c88)" ( (binary_expression "PTR_LAB_000f6304 + 0x7c88" identifier + number_literal) )))) )) (argument_list "(iVar9,0xffffffff,uVar5,0)" ( identifier , number_literal , identifier , number_literal ))) ;) })) (expression_statement "(*(code *)(PTR_LAB_000f62d8 + -0x1ed4))(param_1,iVar6,uVar10);" (call_expression "(*(code *)(PTR_LAB_000f62d8 + -0x1ed4))(param_1,iVar6,uVar10)" (parenthesized_expression "(*(code *)(PTR_LAB_000f62d8 + -0x1ed4))" ( (pointer_expression "*(code *)(PTR_LAB_000f62d8 + -0x1ed4)" * (cast_expression "(code *)(PTR_LAB_000f62d8 + -0x1ed4)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_000f62d8 + -0x1ed4)" ( (binary_expression "PTR_LAB_000f62d8 + -0x1ed4" identifier + number_literal) )))) )) (argument_list "(param_1,iVar6,uVar10)" ( identifier , identifier , identifier ))) ;) (return_statement "return iVar6;" return identifier ;) })))
(translation_unit "int sqlite3GenerateIndexKey\n              (Parse *pParse,Index *pIdx,int iDataCur,int regOut,int prefixOnly,int *piPartIdxLabel,\n              Index *pPrior,int regPrior)\n\n{\n  ushort uVar1;\n  code *pcVar2;\n  code *pcVar3;\n  undefined4 uVar4;\n  int iVar5;\n  int iVar6;\n  uint uVar7;\n  Vdbe *pVVar8;\n  uint uVar9;\n  \n  pVVar8 = pParse->pVdbe;\n  if (piPartIdxLabel != (int *)0x0) {\n    if (pIdx->pPartIdxWhere == (Expr *)0x0) {\n      *piPartIdxLabel = 0;\n    }\n    else {\n      iVar5 = pParse->nLabel + -1;\n      pParse->nLabel = iVar5;\n      *piPartIdxLabel = iVar5;\n      pParse->iSelfTab = iDataCur + 1;\n      sqlite3ExprIfFalseDup(pParse,pIdx->pPartIdxWhere,*piPartIdxLabel,0x10);\n      pParse->iSelfTab = 0;\n      pPrior = (Index *)0x0;\n    }\n  }\n  if ((prefixOnly == 0) || ((pIdx->field_0x37 & 0x10) == 0)) {\n    uVar1 = pIdx->nColumn;\n  }\n  else {\n    uVar1 = pIdx->nKeyCol;\n  }\n  uVar9 = (uint)uVar1;\n  iVar5 = (*(code *)(PTR_LAB_000f62d8 + -0x1f54))(pParse,uVar9);\n  if (pPrior != (Index *)0x0) {\n    if (iVar5 == regPrior) {\n      if (pPrior->pPartIdxWhere != (Expr *)0x0) {\n        pPrior = (Index *)0x0;\n      }\n    }\n    else {\n      pPrior = (Index *)0x0;\n    }\n  }\n  uVar7 = 0;\n  if (uVar9 != 0) {\n    pcVar2 = (code *)(PTR_LAB_000f6304 + -0x7e0);\n    pcVar3 = (code *)(PTR_LAB_000f62f4 + 0x3518);\n    do {\n      if ((pPrior == (Index *)0x0) || (pIdx->aiColumn[uVar7] != pPrior->aiColumn[uVar7])) {\n        if (pIdx->aiColumn[uVar7] == -2) goto LAB_0009b5e8;\n        sqlite3ExprCodeGetColumnOfTable\n                  (pParse->pVdbe,pIdx->pTable,iDataCur,(int)pIdx->aiColumn[uVar7],iVar5 + uVar7);\nLAB_0009b68c:\n        iVar6 = pVVar8->nOp;\n        if ((0 < iVar6) && (pVVar8->aOp[iVar6 + -1].opcode == 'S')) {\n          (*pcVar2)(pVVar8,iVar6 + -1);\n        }\n      }\n      else if (pPrior->aiColumn[uVar7] == -2) {\nLAB_0009b5e8:\n        pParse->iSelfTab = iDataCur + 1;\n        (*pcVar3)(pParse,pIdx->aColExpr->a[uVar7].pExpr,iVar5 + uVar7);\n        pParse->iSelfTab = 0;\n        goto LAB_0009b68c;\n      }\n      uVar7 = uVar7 + 1;\n    } while (uVar9 != uVar7);\n  }\n  if ((regOut != 0) &&\n     ((*(code *)(PTR_LAB_000f6310 + -0x6054))(pVVar8,0x5b,iVar5,uVar9,regOut),\n     pIdx->pTable->pSelect != (Select *)0x0)) {\n    uVar4 = (*(code *)(PTR_LAB_000f62e8 + -0x6130))(pParse->db,pIdx);\n    (*(code *)(PTR_LAB_000f6304 + 0x7c88))(pVVar8,0xffffffff,uVar4,0);\n  }\n  (*(code *)(PTR_LAB_000f62d8 + -0x1ed4))(pParse,iVar5,uVar9);\n  return iVar5;\n}\n\n" (function_definition "int sqlite3GenerateIndexKey\n              (Parse *pParse,Index *pIdx,int iDataCur,int regOut,int prefixOnly,int *piPartIdxLabel,\n              Index *pPrior,int regPrior)\n\n{\n  ushort uVar1;\n  code *pcVar2;\n  code *pcVar3;\n  undefined4 uVar4;\n  int iVar5;\n  int iVar6;\n  uint uVar7;\n  Vdbe *pVVar8;\n  uint uVar9;\n  \n  pVVar8 = pParse->pVdbe;\n  if (piPartIdxLabel != (int *)0x0) {\n    if (pIdx->pPartIdxWhere == (Expr *)0x0) {\n      *piPartIdxLabel = 0;\n    }\n    else {\n      iVar5 = pParse->nLabel + -1;\n      pParse->nLabel = iVar5;\n      *piPartIdxLabel = iVar5;\n      pParse->iSelfTab = iDataCur + 1;\n      sqlite3ExprIfFalseDup(pParse,pIdx->pPartIdxWhere,*piPartIdxLabel,0x10);\n      pParse->iSelfTab = 0;\n      pPrior = (Index *)0x0;\n    }\n  }\n  if ((prefixOnly == 0) || ((pIdx->field_0x37 & 0x10) == 0)) {\n    uVar1 = pIdx->nColumn;\n  }\n  else {\n    uVar1 = pIdx->nKeyCol;\n  }\n  uVar9 = (uint)uVar1;\n  iVar5 = (*(code *)(PTR_LAB_000f62d8 + -0x1f54))(pParse,uVar9);\n  if (pPrior != (Index *)0x0) {\n    if (iVar5 == regPrior) {\n      if (pPrior->pPartIdxWhere != (Expr *)0x0) {\n        pPrior = (Index *)0x0;\n      }\n    }\n    else {\n      pPrior = (Index *)0x0;\n    }\n  }\n  uVar7 = 0;\n  if (uVar9 != 0) {\n    pcVar2 = (code *)(PTR_LAB_000f6304 + -0x7e0);\n    pcVar3 = (code *)(PTR_LAB_000f62f4 + 0x3518);\n    do {\n      if ((pPrior == (Index *)0x0) || (pIdx->aiColumn[uVar7] != pPrior->aiColumn[uVar7])) {\n        if (pIdx->aiColumn[uVar7] == -2) goto LAB_0009b5e8;\n        sqlite3ExprCodeGetColumnOfTable\n                  (pParse->pVdbe,pIdx->pTable,iDataCur,(int)pIdx->aiColumn[uVar7],iVar5 + uVar7);\nLAB_0009b68c:\n        iVar6 = pVVar8->nOp;\n        if ((0 < iVar6) && (pVVar8->aOp[iVar6 + -1].opcode == 'S')) {\n          (*pcVar2)(pVVar8,iVar6 + -1);\n        }\n      }\n      else if (pPrior->aiColumn[uVar7] == -2) {\nLAB_0009b5e8:\n        pParse->iSelfTab = iDataCur + 1;\n        (*pcVar3)(pParse,pIdx->aColExpr->a[uVar7].pExpr,iVar5 + uVar7);\n        pParse->iSelfTab = 0;\n        goto LAB_0009b68c;\n      }\n      uVar7 = uVar7 + 1;\n    } while (uVar9 != uVar7);\n  }\n  if ((regOut != 0) &&\n     ((*(code *)(PTR_LAB_000f6310 + -0x6054))(pVVar8,0x5b,iVar5,uVar9,regOut),\n     pIdx->pTable->pSelect != (Select *)0x0)) {\n    uVar4 = (*(code *)(PTR_LAB_000f62e8 + -0x6130))(pParse->db,pIdx);\n    (*(code *)(PTR_LAB_000f6304 + 0x7c88))(pVVar8,0xffffffff,uVar4,0);\n  }\n  (*(code *)(PTR_LAB_000f62d8 + -0x1ed4))(pParse,iVar5,uVar9);\n  return iVar5;\n}" primitive_type (function_declarator "sqlite3GenerateIndexKey\n              (Parse *pParse,Index *pIdx,int iDataCur,int regOut,int prefixOnly,int *piPartIdxLabel,\n              Index *pPrior,int regPrior)" identifier (parameter_list "(Parse *pParse,Index *pIdx,int iDataCur,int regOut,int prefixOnly,int *piPartIdxLabel,\n              Index *pPrior,int regPrior)" ( (parameter_declaration "Parse *pParse" type_identifier (pointer_declarator "*pParse" * identifier)) , (parameter_declaration "Index *pIdx" type_identifier (pointer_declarator "*pIdx" * identifier)) , (parameter_declaration "int iDataCur" primitive_type identifier) , (parameter_declaration "int regOut" primitive_type identifier) , (parameter_declaration "int prefixOnly" primitive_type identifier) , (parameter_declaration "int *piPartIdxLabel" primitive_type (pointer_declarator "*piPartIdxLabel" * identifier)) , (parameter_declaration "Index *pPrior" type_identifier (pointer_declarator "*pPrior" * identifier)) , (parameter_declaration "int regPrior" primitive_type identifier) ))) (compound_statement "{\n  ushort uVar1;\n  code *pcVar2;\n  code *pcVar3;\n  undefined4 uVar4;\n  int iVar5;\n  int iVar6;\n  uint uVar7;\n  Vdbe *pVVar8;\n  uint uVar9;\n  \n  pVVar8 = pParse->pVdbe;\n  if (piPartIdxLabel != (int *)0x0) {\n    if (pIdx->pPartIdxWhere == (Expr *)0x0) {\n      *piPartIdxLabel = 0;\n    }\n    else {\n      iVar5 = pParse->nLabel + -1;\n      pParse->nLabel = iVar5;\n      *piPartIdxLabel = iVar5;\n      pParse->iSelfTab = iDataCur + 1;\n      sqlite3ExprIfFalseDup(pParse,pIdx->pPartIdxWhere,*piPartIdxLabel,0x10);\n      pParse->iSelfTab = 0;\n      pPrior = (Index *)0x0;\n    }\n  }\n  if ((prefixOnly == 0) || ((pIdx->field_0x37 & 0x10) == 0)) {\n    uVar1 = pIdx->nColumn;\n  }\n  else {\n    uVar1 = pIdx->nKeyCol;\n  }\n  uVar9 = (uint)uVar1;\n  iVar5 = (*(code *)(PTR_LAB_000f62d8 + -0x1f54))(pParse,uVar9);\n  if (pPrior != (Index *)0x0) {\n    if (iVar5 == regPrior) {\n      if (pPrior->pPartIdxWhere != (Expr *)0x0) {\n        pPrior = (Index *)0x0;\n      }\n    }\n    else {\n      pPrior = (Index *)0x0;\n    }\n  }\n  uVar7 = 0;\n  if (uVar9 != 0) {\n    pcVar2 = (code *)(PTR_LAB_000f6304 + -0x7e0);\n    pcVar3 = (code *)(PTR_LAB_000f62f4 + 0x3518);\n    do {\n      if ((pPrior == (Index *)0x0) || (pIdx->aiColumn[uVar7] != pPrior->aiColumn[uVar7])) {\n        if (pIdx->aiColumn[uVar7] == -2) goto LAB_0009b5e8;\n        sqlite3ExprCodeGetColumnOfTable\n                  (pParse->pVdbe,pIdx->pTable,iDataCur,(int)pIdx->aiColumn[uVar7],iVar5 + uVar7);\nLAB_0009b68c:\n        iVar6 = pVVar8->nOp;\n        if ((0 < iVar6) && (pVVar8->aOp[iVar6 + -1].opcode == 'S')) {\n          (*pcVar2)(pVVar8,iVar6 + -1);\n        }\n      }\n      else if (pPrior->aiColumn[uVar7] == -2) {\nLAB_0009b5e8:\n        pParse->iSelfTab = iDataCur + 1;\n        (*pcVar3)(pParse,pIdx->aColExpr->a[uVar7].pExpr,iVar5 + uVar7);\n        pParse->iSelfTab = 0;\n        goto LAB_0009b68c;\n      }\n      uVar7 = uVar7 + 1;\n    } while (uVar9 != uVar7);\n  }\n  if ((regOut != 0) &&\n     ((*(code *)(PTR_LAB_000f6310 + -0x6054))(pVVar8,0x5b,iVar5,uVar9,regOut),\n     pIdx->pTable->pSelect != (Select *)0x0)) {\n    uVar4 = (*(code *)(PTR_LAB_000f62e8 + -0x6130))(pParse->db,pIdx);\n    (*(code *)(PTR_LAB_000f6304 + 0x7c88))(pVVar8,0xffffffff,uVar4,0);\n  }\n  (*(code *)(PTR_LAB_000f62d8 + -0x1ed4))(pParse,iVar5,uVar9);\n  return iVar5;\n}" { (declaration "ushort uVar1;" type_identifier identifier ;) (declaration "code *pcVar2;" type_identifier (pointer_declarator "*pcVar2" * identifier) ;) (declaration "code *pcVar3;" type_identifier (pointer_declarator "*pcVar3" * identifier) ;) (declaration "undefined4 uVar4;" type_identifier identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "uint uVar7;" type_identifier identifier ;) (declaration "Vdbe *pVVar8;" type_identifier (pointer_declarator "*pVVar8" * identifier) ;) (declaration "uint uVar9;" type_identifier identifier ;) (expression_statement "pVVar8 = pParse->pVdbe;" (assignment_expression "pVVar8 = pParse->pVdbe" identifier = (field_expression "pParse->pVdbe" identifier -> field_identifier)) ;) (if_statement "if (piPartIdxLabel != (int *)0x0) {\n    if (pIdx->pPartIdxWhere == (Expr *)0x0) {\n      *piPartIdxLabel = 0;\n    }\n    else {\n      iVar5 = pParse->nLabel + -1;\n      pParse->nLabel = iVar5;\n      *piPartIdxLabel = iVar5;\n      pParse->iSelfTab = iDataCur + 1;\n      sqlite3ExprIfFalseDup(pParse,pIdx->pPartIdxWhere,*piPartIdxLabel,0x10);\n      pParse->iSelfTab = 0;\n      pPrior = (Index *)0x0;\n    }\n  }" if (parenthesized_expression "(piPartIdxLabel != (int *)0x0)" ( (binary_expression "piPartIdxLabel != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    if (pIdx->pPartIdxWhere == (Expr *)0x0) {\n      *piPartIdxLabel = 0;\n    }\n    else {\n      iVar5 = pParse->nLabel + -1;\n      pParse->nLabel = iVar5;\n      *piPartIdxLabel = iVar5;\n      pParse->iSelfTab = iDataCur + 1;\n      sqlite3ExprIfFalseDup(pParse,pIdx->pPartIdxWhere,*piPartIdxLabel,0x10);\n      pParse->iSelfTab = 0;\n      pPrior = (Index *)0x0;\n    }\n  }" { (if_statement "if (pIdx->pPartIdxWhere == (Expr *)0x0) {\n      *piPartIdxLabel = 0;\n    }\n    else {\n      iVar5 = pParse->nLabel + -1;\n      pParse->nLabel = iVar5;\n      *piPartIdxLabel = iVar5;\n      pParse->iSelfTab = iDataCur + 1;\n      sqlite3ExprIfFalseDup(pParse,pIdx->pPartIdxWhere,*piPartIdxLabel,0x10);\n      pParse->iSelfTab = 0;\n      pPrior = (Index *)0x0;\n    }" if (parenthesized_expression "(pIdx->pPartIdxWhere == (Expr *)0x0)" ( (binary_expression "pIdx->pPartIdxWhere == (Expr *)0x0" (field_expression "pIdx->pPartIdxWhere" identifier -> field_identifier) == (cast_expression "(Expr *)0x0" ( (type_descriptor "Expr *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      *piPartIdxLabel = 0;\n    }" { (expression_statement "*piPartIdxLabel = 0;" (assignment_expression "*piPartIdxLabel = 0" (pointer_expression "*piPartIdxLabel" * identifier) = number_literal) ;) }) (else_clause "else {\n      iVar5 = pParse->nLabel + -1;\n      pParse->nLabel = iVar5;\n      *piPartIdxLabel = iVar5;\n      pParse->iSelfTab = iDataCur + 1;\n      sqlite3ExprIfFalseDup(pParse,pIdx->pPartIdxWhere,*piPartIdxLabel,0x10);\n      pParse->iSelfTab = 0;\n      pPrior = (Index *)0x0;\n    }" else (compound_statement "{\n      iVar5 = pParse->nLabel + -1;\n      pParse->nLabel = iVar5;\n      *piPartIdxLabel = iVar5;\n      pParse->iSelfTab = iDataCur + 1;\n      sqlite3ExprIfFalseDup(pParse,pIdx->pPartIdxWhere,*piPartIdxLabel,0x10);\n      pParse->iSelfTab = 0;\n      pPrior = (Index *)0x0;\n    }" { (expression_statement "iVar5 = pParse->nLabel + -1;" (assignment_expression "iVar5 = pParse->nLabel + -1" identifier = (binary_expression "pParse->nLabel + -1" (field_expression "pParse->nLabel" identifier -> field_identifier) + number_literal)) ;) (expression_statement "pParse->nLabel = iVar5;" (assignment_expression "pParse->nLabel = iVar5" (field_expression "pParse->nLabel" identifier -> field_identifier) = identifier) ;) (expression_statement "*piPartIdxLabel = iVar5;" (assignment_expression "*piPartIdxLabel = iVar5" (pointer_expression "*piPartIdxLabel" * identifier) = identifier) ;) (expression_statement "pParse->iSelfTab = iDataCur + 1;" (assignment_expression "pParse->iSelfTab = iDataCur + 1" (field_expression "pParse->iSelfTab" identifier -> field_identifier) = (binary_expression "iDataCur + 1" identifier + number_literal)) ;) (expression_statement "sqlite3ExprIfFalseDup(pParse,pIdx->pPartIdxWhere,*piPartIdxLabel,0x10);" (call_expression "sqlite3ExprIfFalseDup(pParse,pIdx->pPartIdxWhere,*piPartIdxLabel,0x10)" identifier (argument_list "(pParse,pIdx->pPartIdxWhere,*piPartIdxLabel,0x10)" ( identifier , (field_expression "pIdx->pPartIdxWhere" identifier -> field_identifier) , (pointer_expression "*piPartIdxLabel" * identifier) , number_literal ))) ;) (expression_statement "pParse->iSelfTab = 0;" (assignment_expression "pParse->iSelfTab = 0" (field_expression "pParse->iSelfTab" identifier -> field_identifier) = number_literal) ;) (expression_statement "pPrior = (Index *)0x0;" (assignment_expression "pPrior = (Index *)0x0" identifier = (cast_expression "(Index *)0x0" ( (type_descriptor "Index *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }))) })) (if_statement "if ((prefixOnly == 0) || ((pIdx->field_0x37 & 0x10) == 0)) {\n    uVar1 = pIdx->nColumn;\n  }\n  else {\n    uVar1 = pIdx->nKeyCol;\n  }" if (parenthesized_expression "((prefixOnly == 0) || ((pIdx->field_0x37 & 0x10) == 0))" ( (binary_expression "(prefixOnly == 0) || ((pIdx->field_0x37 & 0x10) == 0)" (parenthesized_expression "(prefixOnly == 0)" ( (binary_expression "prefixOnly == 0" identifier == number_literal) )) || (parenthesized_expression "((pIdx->field_0x37 & 0x10) == 0)" ( (binary_expression "(pIdx->field_0x37 & 0x10) == 0" (parenthesized_expression "(pIdx->field_0x37 & 0x10)" ( (binary_expression "pIdx->field_0x37 & 0x10" (field_expression "pIdx->field_0x37" identifier -> field_identifier) & number_literal) )) == number_literal) ))) )) (compound_statement "{\n    uVar1 = pIdx->nColumn;\n  }" { (expression_statement "uVar1 = pIdx->nColumn;" (assignment_expression "uVar1 = pIdx->nColumn" identifier = (field_expression "pIdx->nColumn" identifier -> field_identifier)) ;) }) (else_clause "else {\n    uVar1 = pIdx->nKeyCol;\n  }" else (compound_statement "{\n    uVar1 = pIdx->nKeyCol;\n  }" { (expression_statement "uVar1 = pIdx->nKeyCol;" (assignment_expression "uVar1 = pIdx->nKeyCol" identifier = (field_expression "pIdx->nKeyCol" identifier -> field_identifier)) ;) }))) (expression_statement "uVar9 = (uint)uVar1;" (assignment_expression "uVar9 = (uint)uVar1" identifier = (cast_expression "(uint)uVar1" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "iVar5 = (*(code *)(PTR_LAB_000f62d8 + -0x1f54))(pParse,uVar9);" (assignment_expression "iVar5 = (*(code *)(PTR_LAB_000f62d8 + -0x1f54))(pParse,uVar9)" identifier = (call_expression "(*(code *)(PTR_LAB_000f62d8 + -0x1f54))(pParse,uVar9)" (parenthesized_expression "(*(code *)(PTR_LAB_000f62d8 + -0x1f54))" ( (pointer_expression "*(code *)(PTR_LAB_000f62d8 + -0x1f54)" * (cast_expression "(code *)(PTR_LAB_000f62d8 + -0x1f54)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_000f62d8 + -0x1f54)" ( (binary_expression "PTR_LAB_000f62d8 + -0x1f54" identifier + number_literal) )))) )) (argument_list "(pParse,uVar9)" ( identifier , identifier )))) ;) (if_statement "if (pPrior != (Index *)0x0) {\n    if (iVar5 == regPrior) {\n      if (pPrior->pPartIdxWhere != (Expr *)0x0) {\n        pPrior = (Index *)0x0;\n      }\n    }\n    else {\n      pPrior = (Index *)0x0;\n    }\n  }" if (parenthesized_expression "(pPrior != (Index *)0x0)" ( (binary_expression "pPrior != (Index *)0x0" identifier != (cast_expression "(Index *)0x0" ( (type_descriptor "Index *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    if (iVar5 == regPrior) {\n      if (pPrior->pPartIdxWhere != (Expr *)0x0) {\n        pPrior = (Index *)0x0;\n      }\n    }\n    else {\n      pPrior = (Index *)0x0;\n    }\n  }" { (if_statement "if (iVar5 == regPrior) {\n      if (pPrior->pPartIdxWhere != (Expr *)0x0) {\n        pPrior = (Index *)0x0;\n      }\n    }\n    else {\n      pPrior = (Index *)0x0;\n    }" if (parenthesized_expression "(iVar5 == regPrior)" ( (binary_expression "iVar5 == regPrior" identifier == identifier) )) (compound_statement "{\n      if (pPrior->pPartIdxWhere != (Expr *)0x0) {\n        pPrior = (Index *)0x0;\n      }\n    }" { (if_statement "if (pPrior->pPartIdxWhere != (Expr *)0x0) {\n        pPrior = (Index *)0x0;\n      }" if (parenthesized_expression "(pPrior->pPartIdxWhere != (Expr *)0x0)" ( (binary_expression "pPrior->pPartIdxWhere != (Expr *)0x0" (field_expression "pPrior->pPartIdxWhere" identifier -> field_identifier) != (cast_expression "(Expr *)0x0" ( (type_descriptor "Expr *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        pPrior = (Index *)0x0;\n      }" { (expression_statement "pPrior = (Index *)0x0;" (assignment_expression "pPrior = (Index *)0x0" identifier = (cast_expression "(Index *)0x0" ( (type_descriptor "Index *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) })) }) (else_clause "else {\n      pPrior = (Index *)0x0;\n    }" else (compound_statement "{\n      pPrior = (Index *)0x0;\n    }" { (expression_statement "pPrior = (Index *)0x0;" (assignment_expression "pPrior = (Index *)0x0" identifier = (cast_expression "(Index *)0x0" ( (type_descriptor "Index *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }))) })) (expression_statement "uVar7 = 0;" (assignment_expression "uVar7 = 0" identifier = number_literal) ;) (if_statement "if (uVar9 != 0) {\n    pcVar2 = (code *)(PTR_LAB_000f6304 + -0x7e0);\n    pcVar3 = (code *)(PTR_LAB_000f62f4 + 0x3518);\n    do {\n      if ((pPrior == (Index *)0x0) || (pIdx->aiColumn[uVar7] != pPrior->aiColumn[uVar7])) {\n        if (pIdx->aiColumn[uVar7] == -2) goto LAB_0009b5e8;\n        sqlite3ExprCodeGetColumnOfTable\n                  (pParse->pVdbe,pIdx->pTable,iDataCur,(int)pIdx->aiColumn[uVar7],iVar5 + uVar7);\nLAB_0009b68c:\n        iVar6 = pVVar8->nOp;\n        if ((0 < iVar6) && (pVVar8->aOp[iVar6 + -1].opcode == 'S')) {\n          (*pcVar2)(pVVar8,iVar6 + -1);\n        }\n      }\n      else if (pPrior->aiColumn[uVar7] == -2) {\nLAB_0009b5e8:\n        pParse->iSelfTab = iDataCur + 1;\n        (*pcVar3)(pParse,pIdx->aColExpr->a[uVar7].pExpr,iVar5 + uVar7);\n        pParse->iSelfTab = 0;\n        goto LAB_0009b68c;\n      }\n      uVar7 = uVar7 + 1;\n    } while (uVar9 != uVar7);\n  }" if (parenthesized_expression "(uVar9 != 0)" ( (binary_expression "uVar9 != 0" identifier != number_literal) )) (compound_statement "{\n    pcVar2 = (code *)(PTR_LAB_000f6304 + -0x7e0);\n    pcVar3 = (code *)(PTR_LAB_000f62f4 + 0x3518);\n    do {\n      if ((pPrior == (Index *)0x0) || (pIdx->aiColumn[uVar7] != pPrior->aiColumn[uVar7])) {\n        if (pIdx->aiColumn[uVar7] == -2) goto LAB_0009b5e8;\n        sqlite3ExprCodeGetColumnOfTable\n                  (pParse->pVdbe,pIdx->pTable,iDataCur,(int)pIdx->aiColumn[uVar7],iVar5 + uVar7);\nLAB_0009b68c:\n        iVar6 = pVVar8->nOp;\n        if ((0 < iVar6) && (pVVar8->aOp[iVar6 + -1].opcode == 'S')) {\n          (*pcVar2)(pVVar8,iVar6 + -1);\n        }\n      }\n      else if (pPrior->aiColumn[uVar7] == -2) {\nLAB_0009b5e8:\n        pParse->iSelfTab = iDataCur + 1;\n        (*pcVar3)(pParse,pIdx->aColExpr->a[uVar7].pExpr,iVar5 + uVar7);\n        pParse->iSelfTab = 0;\n        goto LAB_0009b68c;\n      }\n      uVar7 = uVar7 + 1;\n    } while (uVar9 != uVar7);\n  }" { (expression_statement "pcVar2 = (code *)(PTR_LAB_000f6304 + -0x7e0);" (assignment_expression "pcVar2 = (code *)(PTR_LAB_000f6304 + -0x7e0)" identifier = (cast_expression "(code *)(PTR_LAB_000f6304 + -0x7e0)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_000f6304 + -0x7e0)" ( (binary_expression "PTR_LAB_000f6304 + -0x7e0" identifier + number_literal) )))) ;) (expression_statement "pcVar3 = (code *)(PTR_LAB_000f62f4 + 0x3518);" (assignment_expression "pcVar3 = (code *)(PTR_LAB_000f62f4 + 0x3518)" identifier = (cast_expression "(code *)(PTR_LAB_000f62f4 + 0x3518)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_000f62f4 + 0x3518)" ( (binary_expression "PTR_LAB_000f62f4 + 0x3518" identifier + number_literal) )))) ;) (do_statement "do {\n      if ((pPrior == (Index *)0x0) || (pIdx->aiColumn[uVar7] != pPrior->aiColumn[uVar7])) {\n        if (pIdx->aiColumn[uVar7] == -2) goto LAB_0009b5e8;\n        sqlite3ExprCodeGetColumnOfTable\n                  (pParse->pVdbe,pIdx->pTable,iDataCur,(int)pIdx->aiColumn[uVar7],iVar5 + uVar7);\nLAB_0009b68c:\n        iVar6 = pVVar8->nOp;\n        if ((0 < iVar6) && (pVVar8->aOp[iVar6 + -1].opcode == 'S')) {\n          (*pcVar2)(pVVar8,iVar6 + -1);\n        }\n      }\n      else if (pPrior->aiColumn[uVar7] == -2) {\nLAB_0009b5e8:\n        pParse->iSelfTab = iDataCur + 1;\n        (*pcVar3)(pParse,pIdx->aColExpr->a[uVar7].pExpr,iVar5 + uVar7);\n        pParse->iSelfTab = 0;\n        goto LAB_0009b68c;\n      }\n      uVar7 = uVar7 + 1;\n    } while (uVar9 != uVar7);" do (compound_statement "{\n      if ((pPrior == (Index *)0x0) || (pIdx->aiColumn[uVar7] != pPrior->aiColumn[uVar7])) {\n        if (pIdx->aiColumn[uVar7] == -2) goto LAB_0009b5e8;\n        sqlite3ExprCodeGetColumnOfTable\n                  (pParse->pVdbe,pIdx->pTable,iDataCur,(int)pIdx->aiColumn[uVar7],iVar5 + uVar7);\nLAB_0009b68c:\n        iVar6 = pVVar8->nOp;\n        if ((0 < iVar6) && (pVVar8->aOp[iVar6 + -1].opcode == 'S')) {\n          (*pcVar2)(pVVar8,iVar6 + -1);\n        }\n      }\n      else if (pPrior->aiColumn[uVar7] == -2) {\nLAB_0009b5e8:\n        pParse->iSelfTab = iDataCur + 1;\n        (*pcVar3)(pParse,pIdx->aColExpr->a[uVar7].pExpr,iVar5 + uVar7);\n        pParse->iSelfTab = 0;\n        goto LAB_0009b68c;\n      }\n      uVar7 = uVar7 + 1;\n    }" { (if_statement "if ((pPrior == (Index *)0x0) || (pIdx->aiColumn[uVar7] != pPrior->aiColumn[uVar7])) {\n        if (pIdx->aiColumn[uVar7] == -2) goto LAB_0009b5e8;\n        sqlite3ExprCodeGetColumnOfTable\n                  (pParse->pVdbe,pIdx->pTable,iDataCur,(int)pIdx->aiColumn[uVar7],iVar5 + uVar7);\nLAB_0009b68c:\n        iVar6 = pVVar8->nOp;\n        if ((0 < iVar6) && (pVVar8->aOp[iVar6 + -1].opcode == 'S')) {\n          (*pcVar2)(pVVar8,iVar6 + -1);\n        }\n      }\n      else if (pPrior->aiColumn[uVar7] == -2) {\nLAB_0009b5e8:\n        pParse->iSelfTab = iDataCur + 1;\n        (*pcVar3)(pParse,pIdx->aColExpr->a[uVar7].pExpr,iVar5 + uVar7);\n        pParse->iSelfTab = 0;\n        goto LAB_0009b68c;\n      }" if (parenthesized_expression "((pPrior == (Index *)0x0) || (pIdx->aiColumn[uVar7] != pPrior->aiColumn[uVar7]))" ( (binary_expression "(pPrior == (Index *)0x0) || (pIdx->aiColumn[uVar7] != pPrior->aiColumn[uVar7])" (parenthesized_expression "(pPrior == (Index *)0x0)" ( (binary_expression "pPrior == (Index *)0x0" identifier == (cast_expression "(Index *)0x0" ( (type_descriptor "Index *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) || (parenthesized_expression "(pIdx->aiColumn[uVar7] != pPrior->aiColumn[uVar7])" ( (binary_expression "pIdx->aiColumn[uVar7] != pPrior->aiColumn[uVar7]" (subscript_expression "pIdx->aiColumn[uVar7]" (field_expression "pIdx->aiColumn" identifier -> field_identifier) [ identifier ]) != (subscript_expression "pPrior->aiColumn[uVar7]" (field_expression "pPrior->aiColumn" identifier -> field_identifier) [ identifier ])) ))) )) (compound_statement "{\n        if (pIdx->aiColumn[uVar7] == -2) goto LAB_0009b5e8;\n        sqlite3ExprCodeGetColumnOfTable\n                  (pParse->pVdbe,pIdx->pTable,iDataCur,(int)pIdx->aiColumn[uVar7],iVar5 + uVar7);\nLAB_0009b68c:\n        iVar6 = pVVar8->nOp;\n        if ((0 < iVar6) && (pVVar8->aOp[iVar6 + -1].opcode == 'S')) {\n          (*pcVar2)(pVVar8,iVar6 + -1);\n        }\n      }" { (if_statement "if (pIdx->aiColumn[uVar7] == -2) goto LAB_0009b5e8;" if (parenthesized_expression "(pIdx->aiColumn[uVar7] == -2)" ( (binary_expression "pIdx->aiColumn[uVar7] == -2" (subscript_expression "pIdx->aiColumn[uVar7]" (field_expression "pIdx->aiColumn" identifier -> field_identifier) [ identifier ]) == number_literal) )) (goto_statement "goto LAB_0009b5e8;" goto statement_identifier ;)) (expression_statement "sqlite3ExprCodeGetColumnOfTable\n                  (pParse->pVdbe,pIdx->pTable,iDataCur,(int)pIdx->aiColumn[uVar7],iVar5 + uVar7);" (call_expression "sqlite3ExprCodeGetColumnOfTable\n                  (pParse->pVdbe,pIdx->pTable,iDataCur,(int)pIdx->aiColumn[uVar7],iVar5 + uVar7)" identifier (argument_list "(pParse->pVdbe,pIdx->pTable,iDataCur,(int)pIdx->aiColumn[uVar7],iVar5 + uVar7)" ( (field_expression "pParse->pVdbe" identifier -> field_identifier) , (field_expression "pIdx->pTable" identifier -> field_identifier) , identifier , (cast_expression "(int)pIdx->aiColumn[uVar7]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "pIdx->aiColumn[uVar7]" (field_expression "pIdx->aiColumn" identifier -> field_identifier) [ identifier ])) , (binary_expression "iVar5 + uVar7" identifier + identifier) ))) ;) (labeled_statement "LAB_0009b68c:\n        iVar6 = pVVar8->nOp;" statement_identifier : (expression_statement "iVar6 = pVVar8->nOp;" (assignment_expression "iVar6 = pVVar8->nOp" identifier = (field_expression "pVVar8->nOp" identifier -> field_identifier)) ;)) (if_statement "if ((0 < iVar6) && (pVVar8->aOp[iVar6 + -1].opcode == 'S')) {\n          (*pcVar2)(pVVar8,iVar6 + -1);\n        }" if (parenthesized_expression "((0 < iVar6) && (pVVar8->aOp[iVar6 + -1].opcode == 'S'))" ( (binary_expression "(0 < iVar6) && (pVVar8->aOp[iVar6 + -1].opcode == 'S')" (parenthesized_expression "(0 < iVar6)" ( (binary_expression "0 < iVar6" number_literal < identifier) )) && (parenthesized_expression "(pVVar8->aOp[iVar6 + -1].opcode == 'S')" ( (binary_expression "pVVar8->aOp[iVar6 + -1].opcode == 'S'" (field_expression "pVVar8->aOp[iVar6 + -1].opcode" (subscript_expression "pVVar8->aOp[iVar6 + -1]" (field_expression "pVVar8->aOp" identifier -> field_identifier) [ (binary_expression "iVar6 + -1" identifier + number_literal) ]) . field_identifier) == (char_literal "'S'" ' character ')) ))) )) (compound_statement "{\n          (*pcVar2)(pVVar8,iVar6 + -1);\n        }" { (expression_statement "(*pcVar2)(pVVar8,iVar6 + -1);" (call_expression "(*pcVar2)(pVVar8,iVar6 + -1)" (parenthesized_expression "(*pcVar2)" ( (pointer_expression "*pcVar2" * identifier) )) (argument_list "(pVVar8,iVar6 + -1)" ( identifier , (binary_expression "iVar6 + -1" identifier + number_literal) ))) ;) })) }) (else_clause "else if (pPrior->aiColumn[uVar7] == -2) {\nLAB_0009b5e8:\n        pParse->iSelfTab = iDataCur + 1;\n        (*pcVar3)(pParse,pIdx->aColExpr->a[uVar7].pExpr,iVar5 + uVar7);\n        pParse->iSelfTab = 0;\n        goto LAB_0009b68c;\n      }" else (if_statement "if (pPrior->aiColumn[uVar7] == -2) {\nLAB_0009b5e8:\n        pParse->iSelfTab = iDataCur + 1;\n        (*pcVar3)(pParse,pIdx->aColExpr->a[uVar7].pExpr,iVar5 + uVar7);\n        pParse->iSelfTab = 0;\n        goto LAB_0009b68c;\n      }" if (parenthesized_expression "(pPrior->aiColumn[uVar7] == -2)" ( (binary_expression "pPrior->aiColumn[uVar7] == -2" (subscript_expression "pPrior->aiColumn[uVar7]" (field_expression "pPrior->aiColumn" identifier -> field_identifier) [ identifier ]) == number_literal) )) (compound_statement "{\nLAB_0009b5e8:\n        pParse->iSelfTab = iDataCur + 1;\n        (*pcVar3)(pParse,pIdx->aColExpr->a[uVar7].pExpr,iVar5 + uVar7);\n        pParse->iSelfTab = 0;\n        goto LAB_0009b68c;\n      }" { (labeled_statement "LAB_0009b5e8:\n        pParse->iSelfTab = iDataCur + 1;" statement_identifier : (expression_statement "pParse->iSelfTab = iDataCur + 1;" (assignment_expression "pParse->iSelfTab = iDataCur + 1" (field_expression "pParse->iSelfTab" identifier -> field_identifier) = (binary_expression "iDataCur + 1" identifier + number_literal)) ;)) (expression_statement "(*pcVar3)(pParse,pIdx->aColExpr->a[uVar7].pExpr,iVar5 + uVar7);" (call_expression "(*pcVar3)(pParse,pIdx->aColExpr->a[uVar7].pExpr,iVar5 + uVar7)" (parenthesized_expression "(*pcVar3)" ( (pointer_expression "*pcVar3" * identifier) )) (argument_list "(pParse,pIdx->aColExpr->a[uVar7].pExpr,iVar5 + uVar7)" ( identifier , (field_expression "pIdx->aColExpr->a[uVar7].pExpr" (subscript_expression "pIdx->aColExpr->a[uVar7]" (field_expression "pIdx->aColExpr->a" (field_expression "pIdx->aColExpr" identifier -> field_identifier) -> field_identifier) [ identifier ]) . field_identifier) , (binary_expression "iVar5 + uVar7" identifier + identifier) ))) ;) (expression_statement "pParse->iSelfTab = 0;" (assignment_expression "pParse->iSelfTab = 0" (field_expression "pParse->iSelfTab" identifier -> field_identifier) = number_literal) ;) (goto_statement "goto LAB_0009b68c;" goto statement_identifier ;) })))) (expression_statement "uVar7 = uVar7 + 1;" (assignment_expression "uVar7 = uVar7 + 1" identifier = (binary_expression "uVar7 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(uVar9 != uVar7)" ( (binary_expression "uVar9 != uVar7" identifier != identifier) )) ;) })) (if_statement "if ((regOut != 0) &&\n     ((*(code *)(PTR_LAB_000f6310 + -0x6054))(pVVar8,0x5b,iVar5,uVar9,regOut),\n     pIdx->pTable->pSelect != (Select *)0x0)) {\n    uVar4 = (*(code *)(PTR_LAB_000f62e8 + -0x6130))(pParse->db,pIdx);\n    (*(code *)(PTR_LAB_000f6304 + 0x7c88))(pVVar8,0xffffffff,uVar4,0);\n  }" if (parenthesized_expression "((regOut != 0) &&\n     ((*(code *)(PTR_LAB_000f6310 + -0x6054))(pVVar8,0x5b,iVar5,uVar9,regOut),\n     pIdx->pTable->pSelect != (Select *)0x0))" ( (binary_expression "(regOut != 0) &&\n     ((*(code *)(PTR_LAB_000f6310 + -0x6054))(pVVar8,0x5b,iVar5,uVar9,regOut),\n     pIdx->pTable->pSelect != (Select *)0x0)" (parenthesized_expression "(regOut != 0)" ( (binary_expression "regOut != 0" identifier != number_literal) )) && (parenthesized_expression "((*(code *)(PTR_LAB_000f6310 + -0x6054))(pVVar8,0x5b,iVar5,uVar9,regOut),\n     pIdx->pTable->pSelect != (Select *)0x0)" ( (comma_expression "(*(code *)(PTR_LAB_000f6310 + -0x6054))(pVVar8,0x5b,iVar5,uVar9,regOut),\n     pIdx->pTable->pSelect != (Select *)0x0" (call_expression "(*(code *)(PTR_LAB_000f6310 + -0x6054))(pVVar8,0x5b,iVar5,uVar9,regOut)" (parenthesized_expression "(*(code *)(PTR_LAB_000f6310 + -0x6054))" ( (pointer_expression "*(code *)(PTR_LAB_000f6310 + -0x6054)" * (cast_expression "(code *)(PTR_LAB_000f6310 + -0x6054)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_000f6310 + -0x6054)" ( (binary_expression "PTR_LAB_000f6310 + -0x6054" identifier + number_literal) )))) )) (argument_list "(pVVar8,0x5b,iVar5,uVar9,regOut)" ( identifier , number_literal , identifier , identifier , identifier ))) , (binary_expression "pIdx->pTable->pSelect != (Select *)0x0" (field_expression "pIdx->pTable->pSelect" (field_expression "pIdx->pTable" identifier -> field_identifier) -> field_identifier) != (cast_expression "(Select *)0x0" ( (type_descriptor "Select *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal))) ))) )) (compound_statement "{\n    uVar4 = (*(code *)(PTR_LAB_000f62e8 + -0x6130))(pParse->db,pIdx);\n    (*(code *)(PTR_LAB_000f6304 + 0x7c88))(pVVar8,0xffffffff,uVar4,0);\n  }" { (expression_statement "uVar4 = (*(code *)(PTR_LAB_000f62e8 + -0x6130))(pParse->db,pIdx);" (assignment_expression "uVar4 = (*(code *)(PTR_LAB_000f62e8 + -0x6130))(pParse->db,pIdx)" identifier = (call_expression "(*(code *)(PTR_LAB_000f62e8 + -0x6130))(pParse->db,pIdx)" (parenthesized_expression "(*(code *)(PTR_LAB_000f62e8 + -0x6130))" ( (pointer_expression "*(code *)(PTR_LAB_000f62e8 + -0x6130)" * (cast_expression "(code *)(PTR_LAB_000f62e8 + -0x6130)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_000f62e8 + -0x6130)" ( (binary_expression "PTR_LAB_000f62e8 + -0x6130" identifier + number_literal) )))) )) (argument_list "(pParse->db,pIdx)" ( (field_expression "pParse->db" identifier -> field_identifier) , identifier )))) ;) (expression_statement "(*(code *)(PTR_LAB_000f6304 + 0x7c88))(pVVar8,0xffffffff,uVar4,0);" (call_expression "(*(code *)(PTR_LAB_000f6304 + 0x7c88))(pVVar8,0xffffffff,uVar4,0)" (parenthesized_expression "(*(code *)(PTR_LAB_000f6304 + 0x7c88))" ( (pointer_expression "*(code *)(PTR_LAB_000f6304 + 0x7c88)" * (cast_expression "(code *)(PTR_LAB_000f6304 + 0x7c88)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_000f6304 + 0x7c88)" ( (binary_expression "PTR_LAB_000f6304 + 0x7c88" identifier + number_literal) )))) )) (argument_list "(pVVar8,0xffffffff,uVar4,0)" ( identifier , number_literal , identifier , number_literal ))) ;) })) (expression_statement "(*(code *)(PTR_LAB_000f62d8 + -0x1ed4))(pParse,iVar5,uVar9);" (call_expression "(*(code *)(PTR_LAB_000f62d8 + -0x1ed4))(pParse,iVar5,uVar9)" (parenthesized_expression "(*(code *)(PTR_LAB_000f62d8 + -0x1ed4))" ( (pointer_expression "*(code *)(PTR_LAB_000f62d8 + -0x1ed4)" * (cast_expression "(code *)(PTR_LAB_000f62d8 + -0x1ed4)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_000f62d8 + -0x1ed4)" ( (binary_expression "PTR_LAB_000f62d8 + -0x1ed4" identifier + number_literal) )))) )) (argument_list "(pParse,iVar5,uVar9)" ( identifier , identifier , identifier ))) ;) (return_statement "return iVar5;" return identifier ;) })))
(translation_unit "int FUN_0009b4a4(undefined4 *param_1,int param_2,int param_3,int param_4,int param_5,int *param_6,\n                int param_7,int param_8)\n\n{\n  short sVar1;\n  ushort uVar2;\n  code *pcVar3;\n  code *pcVar4;\n  undefined4 uVar5;\n  int iVar6;\n  int iVar7;\n  uint uVar8;\n  int iVar9;\n  uint uVar10;\n  \n  iVar9 = param_1[2];\n  if (param_6 != (int *)0x0) {\n    if (*(int *)(param_2 + 0x24) == 0) {\n      *param_6 = 0;\n    }\n    else {\n      iVar6 = param_1[0xe];\n      param_1[0xe] = iVar6 + -1;\n      *param_6 = iVar6 + -1;\n      param_1[0xd] = param_3 + 1;\n      FUN_0009b3d8(param_1,*(undefined4 *)(param_2 + 0x24),*param_6,0x10);\n      param_1[0xd] = 0;\n      param_7 = 0;\n    }\n  }\n  if ((param_5 == 0) || ((*(byte *)(param_2 + 0x37) & 0x10) == 0)) {\n    uVar2 = *(ushort *)(param_2 + 0x34);\n  }\n  else {\n    uVar2 = *(ushort *)(param_2 + 0x32);\n  }\n  uVar10 = (uint)uVar2;\n  iVar6 = (*(code *)(PTR_LAB_000f62d8 + -0x1f54))(param_1,uVar10);\n  if (param_7 != 0) {\n    if (iVar6 == param_8) {\n      if (*(int *)(param_7 + 0x24) != 0) {\n        param_7 = 0;\n      }\n    }\n    else {\n      param_7 = 0;\n    }\n  }\n  uVar8 = 0;\n  if (uVar10 != 0) {\n    pcVar3 = (code *)(PTR_LAB_000f6304 + -0x7e0);\n    pcVar4 = (code *)(PTR_LAB_000f62f4 + 0x3518);\n    do {\n      if ((param_7 == 0) ||\n         (sVar1 = *(short *)(*(int *)(param_7 + 4) + uVar8 * 2),\n         *(short *)(*(int *)(param_2 + 4) + uVar8 * 2) != sVar1)) {\n        iVar7 = (int)*(short *)(*(int *)(param_2 + 4) + uVar8 * 2);\n        if (iVar7 == -2) goto LAB_0009b5e8;\n        FUN_00093724(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar7,iVar6 + uVar8);\nLAB_0009b68c:\n        iVar7 = *(int *)(iVar9 + 0x6c);\n        if ((0 < iVar7) && (*(char *)(*(int *)(iVar9 + 0x68) + iVar7 * 0x14 + -0x14) == 'S')) {\n          (*pcVar3)(iVar9,iVar7 + -1);\n        }\n      }\n      else if (sVar1 == -2) {\nLAB_0009b5e8:\n        param_1[0xd] = param_3 + 1;\n        (*pcVar4)(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar8 * 0x10 + 4),iVar6 + uVar8\n                 );\n        param_1[0xd] = 0;\n        goto LAB_0009b68c;\n      }\n      uVar8 = uVar8 + 1;\n    } while (uVar10 != uVar8);\n  }\n  if ((param_4 != 0) &&\n     ((*(code *)(PTR_LAB_000f6310 + -0x6054))(iVar9,0x5b,iVar6,uVar10,param_4),\n     *(int *)(*(int *)(param_2 + 0xc) + 0xc) != 0)) {\n    uVar5 = (*(code *)(PTR_LAB_000f62e8 + -0x6130))(*param_1,param_2);\n    (*(code *)(PTR_LAB_000f6304 + 0x7c88))(iVar9,0xffffffff,uVar5,0);\n  }\n  (*(code *)(PTR_LAB_000f62d8 + -0x1ed4))(param_1,iVar6,uVar10);\n  return iVar6;\n}\n\n" (function_definition "int FUN_0009b4a4(undefined4 *param_1,int param_2,int param_3,int param_4,int param_5,int *param_6,\n                int param_7,int param_8)\n\n{\n  short sVar1;\n  ushort uVar2;\n  code *pcVar3;\n  code *pcVar4;\n  undefined4 uVar5;\n  int iVar6;\n  int iVar7;\n  uint uVar8;\n  int iVar9;\n  uint uVar10;\n  \n  iVar9 = param_1[2];\n  if (param_6 != (int *)0x0) {\n    if (*(int *)(param_2 + 0x24) == 0) {\n      *param_6 = 0;\n    }\n    else {\n      iVar6 = param_1[0xe];\n      param_1[0xe] = iVar6 + -1;\n      *param_6 = iVar6 + -1;\n      param_1[0xd] = param_3 + 1;\n      FUN_0009b3d8(param_1,*(undefined4 *)(param_2 + 0x24),*param_6,0x10);\n      param_1[0xd] = 0;\n      param_7 = 0;\n    }\n  }\n  if ((param_5 == 0) || ((*(byte *)(param_2 + 0x37) & 0x10) == 0)) {\n    uVar2 = *(ushort *)(param_2 + 0x34);\n  }\n  else {\n    uVar2 = *(ushort *)(param_2 + 0x32);\n  }\n  uVar10 = (uint)uVar2;\n  iVar6 = (*(code *)(PTR_LAB_000f62d8 + -0x1f54))(param_1,uVar10);\n  if (param_7 != 0) {\n    if (iVar6 == param_8) {\n      if (*(int *)(param_7 + 0x24) != 0) {\n        param_7 = 0;\n      }\n    }\n    else {\n      param_7 = 0;\n    }\n  }\n  uVar8 = 0;\n  if (uVar10 != 0) {\n    pcVar3 = (code *)(PTR_LAB_000f6304 + -0x7e0);\n    pcVar4 = (code *)(PTR_LAB_000f62f4 + 0x3518);\n    do {\n      if ((param_7 == 0) ||\n         (sVar1 = *(short *)(*(int *)(param_7 + 4) + uVar8 * 2),\n         *(short *)(*(int *)(param_2 + 4) + uVar8 * 2) != sVar1)) {\n        iVar7 = (int)*(short *)(*(int *)(param_2 + 4) + uVar8 * 2);\n        if (iVar7 == -2) goto LAB_0009b5e8;\n        FUN_00093724(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar7,iVar6 + uVar8);\nLAB_0009b68c:\n        iVar7 = *(int *)(iVar9 + 0x6c);\n        if ((0 < iVar7) && (*(char *)(*(int *)(iVar9 + 0x68) + iVar7 * 0x14 + -0x14) == 'S')) {\n          (*pcVar3)(iVar9,iVar7 + -1);\n        }\n      }\n      else if (sVar1 == -2) {\nLAB_0009b5e8:\n        param_1[0xd] = param_3 + 1;\n        (*pcVar4)(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar8 * 0x10 + 4),iVar6 + uVar8\n                 );\n        param_1[0xd] = 0;\n        goto LAB_0009b68c;\n      }\n      uVar8 = uVar8 + 1;\n    } while (uVar10 != uVar8);\n  }\n  if ((param_4 != 0) &&\n     ((*(code *)(PTR_LAB_000f6310 + -0x6054))(iVar9,0x5b,iVar6,uVar10,param_4),\n     *(int *)(*(int *)(param_2 + 0xc) + 0xc) != 0)) {\n    uVar5 = (*(code *)(PTR_LAB_000f62e8 + -0x6130))(*param_1,param_2);\n    (*(code *)(PTR_LAB_000f6304 + 0x7c88))(iVar9,0xffffffff,uVar5,0);\n  }\n  (*(code *)(PTR_LAB_000f62d8 + -0x1ed4))(param_1,iVar6,uVar10);\n  return iVar6;\n}" primitive_type (function_declarator "FUN_0009b4a4(undefined4 *param_1,int param_2,int param_3,int param_4,int param_5,int *param_6,\n                int param_7,int param_8)" identifier (parameter_list "(undefined4 *param_1,int param_2,int param_3,int param_4,int param_5,int *param_6,\n                int param_7,int param_8)" ( (parameter_declaration "undefined4 *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "int param_3" primitive_type identifier) , (parameter_declaration "int param_4" primitive_type identifier) , (parameter_declaration "int param_5" primitive_type identifier) , (parameter_declaration "int *param_6" primitive_type (pointer_declarator "*param_6" * identifier)) , (parameter_declaration "int param_7" primitive_type identifier) , (parameter_declaration "int param_8" primitive_type identifier) ))) (compound_statement "{\n  short sVar1;\n  ushort uVar2;\n  code *pcVar3;\n  code *pcVar4;\n  undefined4 uVar5;\n  int iVar6;\n  int iVar7;\n  uint uVar8;\n  int iVar9;\n  uint uVar10;\n  \n  iVar9 = param_1[2];\n  if (param_6 != (int *)0x0) {\n    if (*(int *)(param_2 + 0x24) == 0) {\n      *param_6 = 0;\n    }\n    else {\n      iVar6 = param_1[0xe];\n      param_1[0xe] = iVar6 + -1;\n      *param_6 = iVar6 + -1;\n      param_1[0xd] = param_3 + 1;\n      FUN_0009b3d8(param_1,*(undefined4 *)(param_2 + 0x24),*param_6,0x10);\n      param_1[0xd] = 0;\n      param_7 = 0;\n    }\n  }\n  if ((param_5 == 0) || ((*(byte *)(param_2 + 0x37) & 0x10) == 0)) {\n    uVar2 = *(ushort *)(param_2 + 0x34);\n  }\n  else {\n    uVar2 = *(ushort *)(param_2 + 0x32);\n  }\n  uVar10 = (uint)uVar2;\n  iVar6 = (*(code *)(PTR_LAB_000f62d8 + -0x1f54))(param_1,uVar10);\n  if (param_7 != 0) {\n    if (iVar6 == param_8) {\n      if (*(int *)(param_7 + 0x24) != 0) {\n        param_7 = 0;\n      }\n    }\n    else {\n      param_7 = 0;\n    }\n  }\n  uVar8 = 0;\n  if (uVar10 != 0) {\n    pcVar3 = (code *)(PTR_LAB_000f6304 + -0x7e0);\n    pcVar4 = (code *)(PTR_LAB_000f62f4 + 0x3518);\n    do {\n      if ((param_7 == 0) ||\n         (sVar1 = *(short *)(*(int *)(param_7 + 4) + uVar8 * 2),\n         *(short *)(*(int *)(param_2 + 4) + uVar8 * 2) != sVar1)) {\n        iVar7 = (int)*(short *)(*(int *)(param_2 + 4) + uVar8 * 2);\n        if (iVar7 == -2) goto LAB_0009b5e8;\n        FUN_00093724(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar7,iVar6 + uVar8);\nLAB_0009b68c:\n        iVar7 = *(int *)(iVar9 + 0x6c);\n        if ((0 < iVar7) && (*(char *)(*(int *)(iVar9 + 0x68) + iVar7 * 0x14 + -0x14) == 'S')) {\n          (*pcVar3)(iVar9,iVar7 + -1);\n        }\n      }\n      else if (sVar1 == -2) {\nLAB_0009b5e8:\n        param_1[0xd] = param_3 + 1;\n        (*pcVar4)(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar8 * 0x10 + 4),iVar6 + uVar8\n                 );\n        param_1[0xd] = 0;\n        goto LAB_0009b68c;\n      }\n      uVar8 = uVar8 + 1;\n    } while (uVar10 != uVar8);\n  }\n  if ((param_4 != 0) &&\n     ((*(code *)(PTR_LAB_000f6310 + -0x6054))(iVar9,0x5b,iVar6,uVar10,param_4),\n     *(int *)(*(int *)(param_2 + 0xc) + 0xc) != 0)) {\n    uVar5 = (*(code *)(PTR_LAB_000f62e8 + -0x6130))(*param_1,param_2);\n    (*(code *)(PTR_LAB_000f6304 + 0x7c88))(iVar9,0xffffffff,uVar5,0);\n  }\n  (*(code *)(PTR_LAB_000f62d8 + -0x1ed4))(param_1,iVar6,uVar10);\n  return iVar6;\n}" { (declaration "short sVar1;" (sized_type_specifier "short" short) identifier ;) (declaration "ushort uVar2;" type_identifier identifier ;) (declaration "code *pcVar3;" type_identifier (pointer_declarator "*pcVar3" * identifier) ;) (declaration "code *pcVar4;" type_identifier (pointer_declarator "*pcVar4" * identifier) ;) (declaration "undefined4 uVar5;" type_identifier identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "uint uVar8;" type_identifier identifier ;) (declaration "int iVar9;" primitive_type identifier ;) (declaration "uint uVar10;" type_identifier identifier ;) (expression_statement "iVar9 = param_1[2];" (assignment_expression "iVar9 = param_1[2]" identifier = (subscript_expression "param_1[2]" identifier [ number_literal ])) ;) (if_statement "if (param_6 != (int *)0x0) {\n    if (*(int *)(param_2 + 0x24) == 0) {\n      *param_6 = 0;\n    }\n    else {\n      iVar6 = param_1[0xe];\n      param_1[0xe] = iVar6 + -1;\n      *param_6 = iVar6 + -1;\n      param_1[0xd] = param_3 + 1;\n      FUN_0009b3d8(param_1,*(undefined4 *)(param_2 + 0x24),*param_6,0x10);\n      param_1[0xd] = 0;\n      param_7 = 0;\n    }\n  }" if (parenthesized_expression "(param_6 != (int *)0x0)" ( (binary_expression "param_6 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    if (*(int *)(param_2 + 0x24) == 0) {\n      *param_6 = 0;\n    }\n    else {\n      iVar6 = param_1[0xe];\n      param_1[0xe] = iVar6 + -1;\n      *param_6 = iVar6 + -1;\n      param_1[0xd] = param_3 + 1;\n      FUN_0009b3d8(param_1,*(undefined4 *)(param_2 + 0x24),*param_6,0x10);\n      param_1[0xd] = 0;\n      param_7 = 0;\n    }\n  }" { (if_statement "if (*(int *)(param_2 + 0x24) == 0) {\n      *param_6 = 0;\n    }\n    else {\n      iVar6 = param_1[0xe];\n      param_1[0xe] = iVar6 + -1;\n      *param_6 = iVar6 + -1;\n      param_1[0xd] = param_3 + 1;\n      FUN_0009b3d8(param_1,*(undefined4 *)(param_2 + 0x24),*param_6,0x10);\n      param_1[0xd] = 0;\n      param_7 = 0;\n    }" if (parenthesized_expression "(*(int *)(param_2 + 0x24) == 0)" ( (binary_expression "*(int *)(param_2 + 0x24) == 0" (pointer_expression "*(int *)(param_2 + 0x24)" * (cast_expression "(int *)(param_2 + 0x24)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x24)" ( (binary_expression "param_2 + 0x24" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n      *param_6 = 0;\n    }" { (expression_statement "*param_6 = 0;" (assignment_expression "*param_6 = 0" (pointer_expression "*param_6" * identifier) = number_literal) ;) }) (else_clause "else {\n      iVar6 = param_1[0xe];\n      param_1[0xe] = iVar6 + -1;\n      *param_6 = iVar6 + -1;\n      param_1[0xd] = param_3 + 1;\n      FUN_0009b3d8(param_1,*(undefined4 *)(param_2 + 0x24),*param_6,0x10);\n      param_1[0xd] = 0;\n      param_7 = 0;\n    }" else (compound_statement "{\n      iVar6 = param_1[0xe];\n      param_1[0xe] = iVar6 + -1;\n      *param_6 = iVar6 + -1;\n      param_1[0xd] = param_3 + 1;\n      FUN_0009b3d8(param_1,*(undefined4 *)(param_2 + 0x24),*param_6,0x10);\n      param_1[0xd] = 0;\n      param_7 = 0;\n    }" { (expression_statement "iVar6 = param_1[0xe];" (assignment_expression "iVar6 = param_1[0xe]" identifier = (subscript_expression "param_1[0xe]" identifier [ number_literal ])) ;) (expression_statement "param_1[0xe] = iVar6 + -1;" (assignment_expression "param_1[0xe] = iVar6 + -1" (subscript_expression "param_1[0xe]" identifier [ number_literal ]) = (binary_expression "iVar6 + -1" identifier + number_literal)) ;) (expression_statement "*param_6 = iVar6 + -1;" (assignment_expression "*param_6 = iVar6 + -1" (pointer_expression "*param_6" * identifier) = (binary_expression "iVar6 + -1" identifier + number_literal)) ;) (expression_statement "param_1[0xd] = param_3 + 1;" (assignment_expression "param_1[0xd] = param_3 + 1" (subscript_expression "param_1[0xd]" identifier [ number_literal ]) = (binary_expression "param_3 + 1" identifier + number_literal)) ;) (expression_statement "FUN_0009b3d8(param_1,*(undefined4 *)(param_2 + 0x24),*param_6,0x10);" (call_expression "FUN_0009b3d8(param_1,*(undefined4 *)(param_2 + 0x24),*param_6,0x10)" identifier (argument_list "(param_1,*(undefined4 *)(param_2 + 0x24),*param_6,0x10)" ( identifier , (pointer_expression "*(undefined4 *)(param_2 + 0x24)" * (cast_expression "(undefined4 *)(param_2 + 0x24)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x24)" ( (binary_expression "param_2 + 0x24" identifier + number_literal) )))) , (pointer_expression "*param_6" * identifier) , number_literal ))) ;) (expression_statement "param_1[0xd] = 0;" (assignment_expression "param_1[0xd] = 0" (subscript_expression "param_1[0xd]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_7 = 0;" (assignment_expression "param_7 = 0" identifier = number_literal) ;) }))) })) (if_statement "if ((param_5 == 0) || ((*(byte *)(param_2 + 0x37) & 0x10) == 0)) {\n    uVar2 = *(ushort *)(param_2 + 0x34);\n  }\n  else {\n    uVar2 = *(ushort *)(param_2 + 0x32);\n  }" if (parenthesized_expression "((param_5 == 0) || ((*(byte *)(param_2 + 0x37) & 0x10) == 0))" ( (binary_expression "(param_5 == 0) || ((*(byte *)(param_2 + 0x37) & 0x10) == 0)" (parenthesized_expression "(param_5 == 0)" ( (binary_expression "param_5 == 0" identifier == number_literal) )) || (parenthesized_expression "((*(byte *)(param_2 + 0x37) & 0x10) == 0)" ( (binary_expression "(*(byte *)(param_2 + 0x37) & 0x10) == 0" (parenthesized_expression "(*(byte *)(param_2 + 0x37) & 0x10)" ( (binary_expression "*(byte *)(param_2 + 0x37) & 0x10" (pointer_expression "*(byte *)(param_2 + 0x37)" * (cast_expression "(byte *)(param_2 + 0x37)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x37)" ( (binary_expression "param_2 + 0x37" identifier + number_literal) )))) & number_literal) )) == number_literal) ))) )) (compound_statement "{\n    uVar2 = *(ushort *)(param_2 + 0x34);\n  }" { (expression_statement "uVar2 = *(ushort *)(param_2 + 0x34);" (assignment_expression "uVar2 = *(ushort *)(param_2 + 0x34)" identifier = (pointer_expression "*(ushort *)(param_2 + 0x34)" * (cast_expression "(ushort *)(param_2 + 0x34)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x34)" ( (binary_expression "param_2 + 0x34" identifier + number_literal) ))))) ;) }) (else_clause "else {\n    uVar2 = *(ushort *)(param_2 + 0x32);\n  }" else (compound_statement "{\n    uVar2 = *(ushort *)(param_2 + 0x32);\n  }" { (expression_statement "uVar2 = *(ushort *)(param_2 + 0x32);" (assignment_expression "uVar2 = *(ushort *)(param_2 + 0x32)" identifier = (pointer_expression "*(ushort *)(param_2 + 0x32)" * (cast_expression "(ushort *)(param_2 + 0x32)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x32)" ( (binary_expression "param_2 + 0x32" identifier + number_literal) ))))) ;) }))) (expression_statement "uVar10 = (uint)uVar2;" (assignment_expression "uVar10 = (uint)uVar2" identifier = (cast_expression "(uint)uVar2" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "iVar6 = (*(code *)(PTR_LAB_000f62d8 + -0x1f54))(param_1,uVar10);" (assignment_expression "iVar6 = (*(code *)(PTR_LAB_000f62d8 + -0x1f54))(param_1,uVar10)" identifier = (call_expression "(*(code *)(PTR_LAB_000f62d8 + -0x1f54))(param_1,uVar10)" (parenthesized_expression "(*(code *)(PTR_LAB_000f62d8 + -0x1f54))" ( (pointer_expression "*(code *)(PTR_LAB_000f62d8 + -0x1f54)" * (cast_expression "(code *)(PTR_LAB_000f62d8 + -0x1f54)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_000f62d8 + -0x1f54)" ( (binary_expression "PTR_LAB_000f62d8 + -0x1f54" identifier + number_literal) )))) )) (argument_list "(param_1,uVar10)" ( identifier , identifier )))) ;) (if_statement "if (param_7 != 0) {\n    if (iVar6 == param_8) {\n      if (*(int *)(param_7 + 0x24) != 0) {\n        param_7 = 0;\n      }\n    }\n    else {\n      param_7 = 0;\n    }\n  }" if (parenthesized_expression "(param_7 != 0)" ( (binary_expression "param_7 != 0" identifier != number_literal) )) (compound_statement "{\n    if (iVar6 == param_8) {\n      if (*(int *)(param_7 + 0x24) != 0) {\n        param_7 = 0;\n      }\n    }\n    else {\n      param_7 = 0;\n    }\n  }" { (if_statement "if (iVar6 == param_8) {\n      if (*(int *)(param_7 + 0x24) != 0) {\n        param_7 = 0;\n      }\n    }\n    else {\n      param_7 = 0;\n    }" if (parenthesized_expression "(iVar6 == param_8)" ( (binary_expression "iVar6 == param_8" identifier == identifier) )) (compound_statement "{\n      if (*(int *)(param_7 + 0x24) != 0) {\n        param_7 = 0;\n      }\n    }" { (if_statement "if (*(int *)(param_7 + 0x24) != 0) {\n        param_7 = 0;\n      }" if (parenthesized_expression "(*(int *)(param_7 + 0x24) != 0)" ( (binary_expression "*(int *)(param_7 + 0x24) != 0" (pointer_expression "*(int *)(param_7 + 0x24)" * (cast_expression "(int *)(param_7 + 0x24)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_7 + 0x24)" ( (binary_expression "param_7 + 0x24" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n        param_7 = 0;\n      }" { (expression_statement "param_7 = 0;" (assignment_expression "param_7 = 0" identifier = number_literal) ;) })) }) (else_clause "else {\n      param_7 = 0;\n    }" else (compound_statement "{\n      param_7 = 0;\n    }" { (expression_statement "param_7 = 0;" (assignment_expression "param_7 = 0" identifier = number_literal) ;) }))) })) (expression_statement "uVar8 = 0;" (assignment_expression "uVar8 = 0" identifier = number_literal) ;) (if_statement "if (uVar10 != 0) {\n    pcVar3 = (code *)(PTR_LAB_000f6304 + -0x7e0);\n    pcVar4 = (code *)(PTR_LAB_000f62f4 + 0x3518);\n    do {\n      if ((param_7 == 0) ||\n         (sVar1 = *(short *)(*(int *)(param_7 + 4) + uVar8 * 2),\n         *(short *)(*(int *)(param_2 + 4) + uVar8 * 2) != sVar1)) {\n        iVar7 = (int)*(short *)(*(int *)(param_2 + 4) + uVar8 * 2);\n        if (iVar7 == -2) goto LAB_0009b5e8;\n        FUN_00093724(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar7,iVar6 + uVar8);\nLAB_0009b68c:\n        iVar7 = *(int *)(iVar9 + 0x6c);\n        if ((0 < iVar7) && (*(char *)(*(int *)(iVar9 + 0x68) + iVar7 * 0x14 + -0x14) == 'S')) {\n          (*pcVar3)(iVar9,iVar7 + -1);\n        }\n      }\n      else if (sVar1 == -2) {\nLAB_0009b5e8:\n        param_1[0xd] = param_3 + 1;\n        (*pcVar4)(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar8 * 0x10 + 4),iVar6 + uVar8\n                 );\n        param_1[0xd] = 0;\n        goto LAB_0009b68c;\n      }\n      uVar8 = uVar8 + 1;\n    } while (uVar10 != uVar8);\n  }" if (parenthesized_expression "(uVar10 != 0)" ( (binary_expression "uVar10 != 0" identifier != number_literal) )) (compound_statement "{\n    pcVar3 = (code *)(PTR_LAB_000f6304 + -0x7e0);\n    pcVar4 = (code *)(PTR_LAB_000f62f4 + 0x3518);\n    do {\n      if ((param_7 == 0) ||\n         (sVar1 = *(short *)(*(int *)(param_7 + 4) + uVar8 * 2),\n         *(short *)(*(int *)(param_2 + 4) + uVar8 * 2) != sVar1)) {\n        iVar7 = (int)*(short *)(*(int *)(param_2 + 4) + uVar8 * 2);\n        if (iVar7 == -2) goto LAB_0009b5e8;\n        FUN_00093724(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar7,iVar6 + uVar8);\nLAB_0009b68c:\n        iVar7 = *(int *)(iVar9 + 0x6c);\n        if ((0 < iVar7) && (*(char *)(*(int *)(iVar9 + 0x68) + iVar7 * 0x14 + -0x14) == 'S')) {\n          (*pcVar3)(iVar9,iVar7 + -1);\n        }\n      }\n      else if (sVar1 == -2) {\nLAB_0009b5e8:\n        param_1[0xd] = param_3 + 1;\n        (*pcVar4)(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar8 * 0x10 + 4),iVar6 + uVar8\n                 );\n        param_1[0xd] = 0;\n        goto LAB_0009b68c;\n      }\n      uVar8 = uVar8 + 1;\n    } while (uVar10 != uVar8);\n  }" { (expression_statement "pcVar3 = (code *)(PTR_LAB_000f6304 + -0x7e0);" (assignment_expression "pcVar3 = (code *)(PTR_LAB_000f6304 + -0x7e0)" identifier = (cast_expression "(code *)(PTR_LAB_000f6304 + -0x7e0)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_000f6304 + -0x7e0)" ( (binary_expression "PTR_LAB_000f6304 + -0x7e0" identifier + number_literal) )))) ;) (expression_statement "pcVar4 = (code *)(PTR_LAB_000f62f4 + 0x3518);" (assignment_expression "pcVar4 = (code *)(PTR_LAB_000f62f4 + 0x3518)" identifier = (cast_expression "(code *)(PTR_LAB_000f62f4 + 0x3518)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_000f62f4 + 0x3518)" ( (binary_expression "PTR_LAB_000f62f4 + 0x3518" identifier + number_literal) )))) ;) (do_statement "do {\n      if ((param_7 == 0) ||\n         (sVar1 = *(short *)(*(int *)(param_7 + 4) + uVar8 * 2),\n         *(short *)(*(int *)(param_2 + 4) + uVar8 * 2) != sVar1)) {\n        iVar7 = (int)*(short *)(*(int *)(param_2 + 4) + uVar8 * 2);\n        if (iVar7 == -2) goto LAB_0009b5e8;\n        FUN_00093724(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar7,iVar6 + uVar8);\nLAB_0009b68c:\n        iVar7 = *(int *)(iVar9 + 0x6c);\n        if ((0 < iVar7) && (*(char *)(*(int *)(iVar9 + 0x68) + iVar7 * 0x14 + -0x14) == 'S')) {\n          (*pcVar3)(iVar9,iVar7 + -1);\n        }\n      }\n      else if (sVar1 == -2) {\nLAB_0009b5e8:\n        param_1[0xd] = param_3 + 1;\n        (*pcVar4)(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar8 * 0x10 + 4),iVar6 + uVar8\n                 );\n        param_1[0xd] = 0;\n        goto LAB_0009b68c;\n      }\n      uVar8 = uVar8 + 1;\n    } while (uVar10 != uVar8);" do (compound_statement "{\n      if ((param_7 == 0) ||\n         (sVar1 = *(short *)(*(int *)(param_7 + 4) + uVar8 * 2),\n         *(short *)(*(int *)(param_2 + 4) + uVar8 * 2) != sVar1)) {\n        iVar7 = (int)*(short *)(*(int *)(param_2 + 4) + uVar8 * 2);\n        if (iVar7 == -2) goto LAB_0009b5e8;\n        FUN_00093724(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar7,iVar6 + uVar8);\nLAB_0009b68c:\n        iVar7 = *(int *)(iVar9 + 0x6c);\n        if ((0 < iVar7) && (*(char *)(*(int *)(iVar9 + 0x68) + iVar7 * 0x14 + -0x14) == 'S')) {\n          (*pcVar3)(iVar9,iVar7 + -1);\n        }\n      }\n      else if (sVar1 == -2) {\nLAB_0009b5e8:\n        param_1[0xd] = param_3 + 1;\n        (*pcVar4)(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar8 * 0x10 + 4),iVar6 + uVar8\n                 );\n        param_1[0xd] = 0;\n        goto LAB_0009b68c;\n      }\n      uVar8 = uVar8 + 1;\n    }" { (if_statement "if ((param_7 == 0) ||\n         (sVar1 = *(short *)(*(int *)(param_7 + 4) + uVar8 * 2),\n         *(short *)(*(int *)(param_2 + 4) + uVar8 * 2) != sVar1)) {\n        iVar7 = (int)*(short *)(*(int *)(param_2 + 4) + uVar8 * 2);\n        if (iVar7 == -2) goto LAB_0009b5e8;\n        FUN_00093724(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar7,iVar6 + uVar8);\nLAB_0009b68c:\n        iVar7 = *(int *)(iVar9 + 0x6c);\n        if ((0 < iVar7) && (*(char *)(*(int *)(iVar9 + 0x68) + iVar7 * 0x14 + -0x14) == 'S')) {\n          (*pcVar3)(iVar9,iVar7 + -1);\n        }\n      }\n      else if (sVar1 == -2) {\nLAB_0009b5e8:\n        param_1[0xd] = param_3 + 1;\n        (*pcVar4)(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar8 * 0x10 + 4),iVar6 + uVar8\n                 );\n        param_1[0xd] = 0;\n        goto LAB_0009b68c;\n      }" if (parenthesized_expression "((param_7 == 0) ||\n         (sVar1 = *(short *)(*(int *)(param_7 + 4) + uVar8 * 2),\n         *(short *)(*(int *)(param_2 + 4) + uVar8 * 2) != sVar1))" ( (binary_expression "(param_7 == 0) ||\n         (sVar1 = *(short *)(*(int *)(param_7 + 4) + uVar8 * 2),\n         *(short *)(*(int *)(param_2 + 4) + uVar8 * 2) != sVar1)" (parenthesized_expression "(param_7 == 0)" ( (binary_expression "param_7 == 0" identifier == number_literal) )) || (parenthesized_expression "(sVar1 = *(short *)(*(int *)(param_7 + 4) + uVar8 * 2),\n         *(short *)(*(int *)(param_2 + 4) + uVar8 * 2) != sVar1)" ( (comma_expression "sVar1 = *(short *)(*(int *)(param_7 + 4) + uVar8 * 2),\n         *(short *)(*(int *)(param_2 + 4) + uVar8 * 2) != sVar1" (assignment_expression "sVar1 = *(short *)(*(int *)(param_7 + 4) + uVar8 * 2)" identifier = (pointer_expression "*(short *)(*(int *)(param_7 + 4) + uVar8 * 2)" * (cast_expression "(short *)(*(int *)(param_7 + 4) + uVar8 * 2)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_7 + 4) + uVar8 * 2)" ( (binary_expression "*(int *)(param_7 + 4) + uVar8 * 2" (pointer_expression "*(int *)(param_7 + 4)" * (cast_expression "(int *)(param_7 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_7 + 4)" ( (binary_expression "param_7 + 4" identifier + number_literal) )))) + (binary_expression "uVar8 * 2" identifier * number_literal)) ))))) , (binary_expression "*(short *)(*(int *)(param_2 + 4) + uVar8 * 2) != sVar1" (pointer_expression "*(short *)(*(int *)(param_2 + 4) + uVar8 * 2)" * (cast_expression "(short *)(*(int *)(param_2 + 4) + uVar8 * 2)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_2 + 4) + uVar8 * 2)" ( (binary_expression "*(int *)(param_2 + 4) + uVar8 * 2" (pointer_expression "*(int *)(param_2 + 4)" * (cast_expression "(int *)(param_2 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) )))) + (binary_expression "uVar8 * 2" identifier * number_literal)) )))) != identifier)) ))) )) (compound_statement "{\n        iVar7 = (int)*(short *)(*(int *)(param_2 + 4) + uVar8 * 2);\n        if (iVar7 == -2) goto LAB_0009b5e8;\n        FUN_00093724(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar7,iVar6 + uVar8);\nLAB_0009b68c:\n        iVar7 = *(int *)(iVar9 + 0x6c);\n        if ((0 < iVar7) && (*(char *)(*(int *)(iVar9 + 0x68) + iVar7 * 0x14 + -0x14) == 'S')) {\n          (*pcVar3)(iVar9,iVar7 + -1);\n        }\n      }" { (expression_statement "iVar7 = (int)*(short *)(*(int *)(param_2 + 4) + uVar8 * 2);" (assignment_expression "iVar7 = (int)*(short *)(*(int *)(param_2 + 4) + uVar8 * 2)" identifier = (cast_expression "(int)*(short *)(*(int *)(param_2 + 4) + uVar8 * 2)" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*(short *)(*(int *)(param_2 + 4) + uVar8 * 2)" * (cast_expression "(short *)(*(int *)(param_2 + 4) + uVar8 * 2)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_2 + 4) + uVar8 * 2)" ( (binary_expression "*(int *)(param_2 + 4) + uVar8 * 2" (pointer_expression "*(int *)(param_2 + 4)" * (cast_expression "(int *)(param_2 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) )))) + (binary_expression "uVar8 * 2" identifier * number_literal)) )))))) ;) (if_statement "if (iVar7 == -2) goto LAB_0009b5e8;" if (parenthesized_expression "(iVar7 == -2)" ( (binary_expression "iVar7 == -2" identifier == number_literal) )) (goto_statement "goto LAB_0009b5e8;" goto statement_identifier ;)) (expression_statement "FUN_00093724(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar7,iVar6 + uVar8);" (call_expression "FUN_00093724(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar7,iVar6 + uVar8)" identifier (argument_list "(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar7,iVar6 + uVar8)" ( (subscript_expression "param_1[2]" identifier [ number_literal ]) , (pointer_expression "*(undefined4 *)(param_2 + 0xc)" * (cast_expression "(undefined4 *)(param_2 + 0xc)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xc)" ( (binary_expression "param_2 + 0xc" identifier + number_literal) )))) , identifier , identifier , (binary_expression "iVar6 + uVar8" identifier + identifier) ))) ;) (labeled_statement "LAB_0009b68c:\n        iVar7 = *(int *)(iVar9 + 0x6c);" statement_identifier : (expression_statement "iVar7 = *(int *)(iVar9 + 0x6c);" (assignment_expression "iVar7 = *(int *)(iVar9 + 0x6c)" identifier = (pointer_expression "*(int *)(iVar9 + 0x6c)" * (cast_expression "(int *)(iVar9 + 0x6c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar9 + 0x6c)" ( (binary_expression "iVar9 + 0x6c" identifier + number_literal) ))))) ;)) (if_statement "if ((0 < iVar7) && (*(char *)(*(int *)(iVar9 + 0x68) + iVar7 * 0x14 + -0x14) == 'S')) {\n          (*pcVar3)(iVar9,iVar7 + -1);\n        }" if (parenthesized_expression "((0 < iVar7) && (*(char *)(*(int *)(iVar9 + 0x68) + iVar7 * 0x14 + -0x14) == 'S'))" ( (binary_expression "(0 < iVar7) && (*(char *)(*(int *)(iVar9 + 0x68) + iVar7 * 0x14 + -0x14) == 'S')" (parenthesized_expression "(0 < iVar7)" ( (binary_expression "0 < iVar7" number_literal < identifier) )) && (parenthesized_expression "(*(char *)(*(int *)(iVar9 + 0x68) + iVar7 * 0x14 + -0x14) == 'S')" ( (binary_expression "*(char *)(*(int *)(iVar9 + 0x68) + iVar7 * 0x14 + -0x14) == 'S'" (pointer_expression "*(char *)(*(int *)(iVar9 + 0x68) + iVar7 * 0x14 + -0x14)" * (cast_expression "(char *)(*(int *)(iVar9 + 0x68) + iVar7 * 0x14 + -0x14)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(iVar9 + 0x68) + iVar7 * 0x14 + -0x14)" ( (binary_expression "*(int *)(iVar9 + 0x68) + iVar7 * 0x14 + -0x14" (binary_expression "*(int *)(iVar9 + 0x68) + iVar7 * 0x14" (pointer_expression "*(int *)(iVar9 + 0x68)" * (cast_expression "(int *)(iVar9 + 0x68)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar9 + 0x68)" ( (binary_expression "iVar9 + 0x68" identifier + number_literal) )))) + (binary_expression "iVar7 * 0x14" identifier * number_literal)) + number_literal) )))) == (char_literal "'S'" ' character ')) ))) )) (compound_statement "{\n          (*pcVar3)(iVar9,iVar7 + -1);\n        }" { (expression_statement "(*pcVar3)(iVar9,iVar7 + -1);" (call_expression "(*pcVar3)(iVar9,iVar7 + -1)" (parenthesized_expression "(*pcVar3)" ( (pointer_expression "*pcVar3" * identifier) )) (argument_list "(iVar9,iVar7 + -1)" ( identifier , (binary_expression "iVar7 + -1" identifier + number_literal) ))) ;) })) }) (else_clause "else if (sVar1 == -2) {\nLAB_0009b5e8:\n        param_1[0xd] = param_3 + 1;\n        (*pcVar4)(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar8 * 0x10 + 4),iVar6 + uVar8\n                 );\n        param_1[0xd] = 0;\n        goto LAB_0009b68c;\n      }" else (if_statement "if (sVar1 == -2) {\nLAB_0009b5e8:\n        param_1[0xd] = param_3 + 1;\n        (*pcVar4)(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar8 * 0x10 + 4),iVar6 + uVar8\n                 );\n        param_1[0xd] = 0;\n        goto LAB_0009b68c;\n      }" if (parenthesized_expression "(sVar1 == -2)" ( (binary_expression "sVar1 == -2" identifier == number_literal) )) (compound_statement "{\nLAB_0009b5e8:\n        param_1[0xd] = param_3 + 1;\n        (*pcVar4)(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar8 * 0x10 + 4),iVar6 + uVar8\n                 );\n        param_1[0xd] = 0;\n        goto LAB_0009b68c;\n      }" { (labeled_statement "LAB_0009b5e8:\n        param_1[0xd] = param_3 + 1;" statement_identifier : (expression_statement "param_1[0xd] = param_3 + 1;" (assignment_expression "param_1[0xd] = param_3 + 1" (subscript_expression "param_1[0xd]" identifier [ number_literal ]) = (binary_expression "param_3 + 1" identifier + number_literal)) ;)) (expression_statement "(*pcVar4)(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar8 * 0x10 + 4),iVar6 + uVar8\n                 );" (call_expression "(*pcVar4)(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar8 * 0x10 + 4),iVar6 + uVar8\n                 )" (parenthesized_expression "(*pcVar4)" ( (pointer_expression "*pcVar4" * identifier) )) (argument_list "(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar8 * 0x10 + 4),iVar6 + uVar8\n                 )" ( identifier , (pointer_expression "*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar8 * 0x10 + 4)" * (cast_expression "(undefined4 *)(*(int *)(param_2 + 0x28) + uVar8 * 0x10 + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_2 + 0x28) + uVar8 * 0x10 + 4)" ( (binary_expression "*(int *)(param_2 + 0x28) + uVar8 * 0x10 + 4" (binary_expression "*(int *)(param_2 + 0x28) + uVar8 * 0x10" (pointer_expression "*(int *)(param_2 + 0x28)" * (cast_expression "(int *)(param_2 + 0x28)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x28)" ( (binary_expression "param_2 + 0x28" identifier + number_literal) )))) + (binary_expression "uVar8 * 0x10" identifier * number_literal)) + number_literal) )))) , (binary_expression "iVar6 + uVar8" identifier + identifier) ))) ;) (expression_statement "param_1[0xd] = 0;" (assignment_expression "param_1[0xd] = 0" (subscript_expression "param_1[0xd]" identifier [ number_literal ]) = number_literal) ;) (goto_statement "goto LAB_0009b68c;" goto statement_identifier ;) })))) (expression_statement "uVar8 = uVar8 + 1;" (assignment_expression "uVar8 = uVar8 + 1" identifier = (binary_expression "uVar8 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(uVar10 != uVar8)" ( (binary_expression "uVar10 != uVar8" identifier != identifier) )) ;) })) (if_statement "if ((param_4 != 0) &&\n     ((*(code *)(PTR_LAB_000f6310 + -0x6054))(iVar9,0x5b,iVar6,uVar10,param_4),\n     *(int *)(*(int *)(param_2 + 0xc) + 0xc) != 0)) {\n    uVar5 = (*(code *)(PTR_LAB_000f62e8 + -0x6130))(*param_1,param_2);\n    (*(code *)(PTR_LAB_000f6304 + 0x7c88))(iVar9,0xffffffff,uVar5,0);\n  }" if (parenthesized_expression "((param_4 != 0) &&\n     ((*(code *)(PTR_LAB_000f6310 + -0x6054))(iVar9,0x5b,iVar6,uVar10,param_4),\n     *(int *)(*(int *)(param_2 + 0xc) + 0xc) != 0))" ( (binary_expression "(param_4 != 0) &&\n     ((*(code *)(PTR_LAB_000f6310 + -0x6054))(iVar9,0x5b,iVar6,uVar10,param_4),\n     *(int *)(*(int *)(param_2 + 0xc) + 0xc) != 0)" (parenthesized_expression "(param_4 != 0)" ( (binary_expression "param_4 != 0" identifier != number_literal) )) && (parenthesized_expression "((*(code *)(PTR_LAB_000f6310 + -0x6054))(iVar9,0x5b,iVar6,uVar10,param_4),\n     *(int *)(*(int *)(param_2 + 0xc) + 0xc) != 0)" ( (comma_expression "(*(code *)(PTR_LAB_000f6310 + -0x6054))(iVar9,0x5b,iVar6,uVar10,param_4),\n     *(int *)(*(int *)(param_2 + 0xc) + 0xc) != 0" (call_expression "(*(code *)(PTR_LAB_000f6310 + -0x6054))(iVar9,0x5b,iVar6,uVar10,param_4)" (parenthesized_expression "(*(code *)(PTR_LAB_000f6310 + -0x6054))" ( (pointer_expression "*(code *)(PTR_LAB_000f6310 + -0x6054)" * (cast_expression "(code *)(PTR_LAB_000f6310 + -0x6054)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_000f6310 + -0x6054)" ( (binary_expression "PTR_LAB_000f6310 + -0x6054" identifier + number_literal) )))) )) (argument_list "(iVar9,0x5b,iVar6,uVar10,param_4)" ( identifier , number_literal , identifier , identifier , identifier ))) , (binary_expression "*(int *)(*(int *)(param_2 + 0xc) + 0xc) != 0" (pointer_expression "*(int *)(*(int *)(param_2 + 0xc) + 0xc)" * (cast_expression "(int *)(*(int *)(param_2 + 0xc) + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_2 + 0xc) + 0xc)" ( (binary_expression "*(int *)(param_2 + 0xc) + 0xc" (pointer_expression "*(int *)(param_2 + 0xc)" * (cast_expression "(int *)(param_2 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xc)" ( (binary_expression "param_2 + 0xc" identifier + number_literal) )))) + number_literal) )))) != number_literal)) ))) )) (compound_statement "{\n    uVar5 = (*(code *)(PTR_LAB_000f62e8 + -0x6130))(*param_1,param_2);\n    (*(code *)(PTR_LAB_000f6304 + 0x7c88))(iVar9,0xffffffff,uVar5,0);\n  }" { (expression_statement "uVar5 = (*(code *)(PTR_LAB_000f62e8 + -0x6130))(*param_1,param_2);" (assignment_expression "uVar5 = (*(code *)(PTR_LAB_000f62e8 + -0x6130))(*param_1,param_2)" identifier = (call_expression "(*(code *)(PTR_LAB_000f62e8 + -0x6130))(*param_1,param_2)" (parenthesized_expression "(*(code *)(PTR_LAB_000f62e8 + -0x6130))" ( (pointer_expression "*(code *)(PTR_LAB_000f62e8 + -0x6130)" * (cast_expression "(code *)(PTR_LAB_000f62e8 + -0x6130)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_000f62e8 + -0x6130)" ( (binary_expression "PTR_LAB_000f62e8 + -0x6130" identifier + number_literal) )))) )) (argument_list "(*param_1,param_2)" ( (pointer_expression "*param_1" * identifier) , identifier )))) ;) (expression_statement "(*(code *)(PTR_LAB_000f6304 + 0x7c88))(iVar9,0xffffffff,uVar5,0);" (call_expression "(*(code *)(PTR_LAB_000f6304 + 0x7c88))(iVar9,0xffffffff,uVar5,0)" (parenthesized_expression "(*(code *)(PTR_LAB_000f6304 + 0x7c88))" ( (pointer_expression "*(code *)(PTR_LAB_000f6304 + 0x7c88)" * (cast_expression "(code *)(PTR_LAB_000f6304 + 0x7c88)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_000f6304 + 0x7c88)" ( (binary_expression "PTR_LAB_000f6304 + 0x7c88" identifier + number_literal) )))) )) (argument_list "(iVar9,0xffffffff,uVar5,0)" ( identifier , number_literal , identifier , number_literal ))) ;) })) (expression_statement "(*(code *)(PTR_LAB_000f62d8 + -0x1ed4))(param_1,iVar6,uVar10);" (call_expression "(*(code *)(PTR_LAB_000f62d8 + -0x1ed4))(param_1,iVar6,uVar10)" (parenthesized_expression "(*(code *)(PTR_LAB_000f62d8 + -0x1ed4))" ( (pointer_expression "*(code *)(PTR_LAB_000f62d8 + -0x1ed4)" * (cast_expression "(code *)(PTR_LAB_000f62d8 + -0x1ed4)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_000f62d8 + -0x1ed4)" ( (binary_expression "PTR_LAB_000f62d8 + -0x1ed4" identifier + number_literal) )))) )) (argument_list "(param_1,iVar6,uVar10)" ( identifier , identifier , identifier ))) ;) (return_statement "return iVar6;" return identifier ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration (sized_type_specifier short) IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == LIT) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression IDENT + LIT)) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) , (pointer_expression * IDENT) , LIT ))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) }))) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == LIT) )) || (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) )) == LIT) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) }))) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) )) (argument_list ( IDENT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) })) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) }))) })) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) (do_statement do (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == LIT) )) || (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier short) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + (binary_expression IDENT * LIT)) ))))) , (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier short) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + (binary_expression IDENT * LIT)) )))) != IDENT)) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier short) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + (binary_expression IDENT * LIT)) )))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (goto_statement goto statement_identifier ;)) (expression_statement (call_expression IDENT (argument_list ( (subscript_expression IDENT [ LIT ]) , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) , IDENT , IDENT , (binary_expression IDENT + IDENT) ))) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;)) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression LIT < IDENT) )) && (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + (binary_expression IDENT * LIT)) + LIT) )))) == (char_literal ' character ')) ))) )) (compound_statement { (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( IDENT , (binary_expression IDENT + LIT) ))) ;) })) }) (else_clause else (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression IDENT + LIT)) ;)) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( IDENT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + (binary_expression IDENT * LIT)) + LIT) )))) , (binary_expression IDENT + IDENT) ))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (goto_statement goto statement_identifier ;) })))) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != IDENT) )) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != LIT) )) && (parenthesized_expression ( (comma_expression (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) )) (argument_list ( IDENT , LIT , IDENT , IDENT , IDENT ))) , (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) )))) != LIT)) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) )) (argument_list ( (pointer_expression * IDENT) , IDENT )))) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) )) (argument_list ( IDENT , LIT , IDENT , LIT ))) ;) })) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) )) (argument_list ( IDENT , IDENT , IDENT ))) ;) (return_statement return IDENT ;) })))
(function_definition "int FUN_0009b4a4(undefined4 *param_1,int param_2,int param_3,int param_4,int param_5,int *param_6,\n                int param_7,int param_8)\n\n{\n  short sVar1;\n  ushort uVar2;\n  code *pcVar3;\n  code *pcVar4;\n  undefined4 uVar5;\n  int iVar6;\n  int iVar7;\n  uint uVar8;\n  int iVar9;\n  uint uVar10;\n  \n  iVar9 = param_1[2];\n  if (param_6 != (int *)0x0) {\n    if (*(int *)(param_2 + 0x24) == 0) {\n      *param_6 = 0;\n    }\n    else {\n      iVar6 = param_1[0xe];\n      param_1[0xe] = iVar6 + -1;\n      *param_6 = iVar6 + -1;\n      param_1[0xd] = param_3 + 1;\n      FUN_0009b3d8(param_1,*(undefined4 *)(param_2 + 0x24),*param_6,0x10);\n      param_1[0xd] = 0;\n      param_7 = 0;\n    }\n  }\n  if ((param_5 == 0) || ((*(byte *)(param_2 + 0x37) & 0x10) == 0)) {\n    uVar2 = *(ushort *)(param_2 + 0x34);\n  }\n  else {\n    uVar2 = *(ushort *)(param_2 + 0x32);\n  }\n  uVar10 = (uint)uVar2;\n  iVar6 = (*(code *)(PTR_LAB_000f62d8 + -0x1f54))(param_1,uVar10);\n  if (param_7 != 0) {\n    if (iVar6 == param_8) {\n      if (*(int *)(param_7 + 0x24) != 0) {\n        param_7 = 0;\n      }\n    }\n    else {\n      param_7 = 0;\n    }\n  }\n  uVar8 = 0;\n  if (uVar10 != 0) {\n    pcVar3 = (code *)(PTR_LAB_000f6304 + -0x7e0);\n    pcVar4 = (code *)(PTR_LAB_000f62f4 + 0x3518);\n    do {\n      if ((param_7 == 0) ||\n         (sVar1 = *(short *)(*(int *)(param_7 + 4) + uVar8 * 2),\n         *(short *)(*(int *)(param_2 + 4) + uVar8 * 2) != sVar1)) {\n        iVar7 = (int)*(short *)(*(int *)(param_2 + 4) + uVar8 * 2);\n        if (iVar7 == -2) goto LAB_0009b5e8;\n        FUN_00093724(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar7,iVar6 + uVar8);\nLAB_0009b68c:\n        iVar7 = *(int *)(iVar9 + 0x6c);\n        if ((0 < iVar7) && (*(char *)(*(int *)(iVar9 + 0x68) + iVar7 * 0x14 + -0x14) == 'S')) {\n          (*pcVar3)(iVar9,iVar7 + -1);\n        }\n      }\n      else if (sVar1 == -2) {\nLAB_0009b5e8:\n        param_1[0xd] = param_3 + 1;\n        (*pcVar4)(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar8 * 0x10 + 4),iVar6 + uVar8\n                 );\n        param_1[0xd] = 0;\n        goto LAB_0009b68c;\n      }\n      uVar8 = uVar8 + 1;\n    } while (uVar10 != uVar8);\n  }\n  if ((param_4 != 0) &&\n     ((*(code *)(PTR_LAB_000f6310 + -0x6054))(iVar9,0x5b,iVar6,uVar10,param_4),\n     *(int *)(*(int *)(param_2 + 0xc) + 0xc) != 0)) {\n    uVar5 = (*(code *)(PTR_LAB_000f62e8 + -0x6130))(*param_1,param_2);\n    (*(code *)(PTR_LAB_000f6304 + 0x7c88))(iVar9,0xffffffff,uVar5,0);\n  }\n  (*(code *)(PTR_LAB_000f62d8 + -0x1ed4))(param_1,iVar6,uVar10);\n  return iVar6;\n}" (primitive_type "int") (function_declarator "FUN_0009b4a4(undefined4 *param_1,int param_2,int param_3,int param_4,int param_5,int *param_6,\n                int param_7,int param_8)" (identifier "FUN_0009b4a4") (parameter_list "(undefined4 *param_1,int param_2,int param_3,int param_4,int param_5,int *param_6,\n                int param_7,int param_8)" (( "(") (parameter_declaration "undefined4 *param_1" (type_identifier "undefined4") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "int param_2" (primitive_type "int") (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")) (, ",") (parameter_declaration "int param_5" (primitive_type "int") (identifier "param_5")) (, ",") (parameter_declaration "int *param_6" (primitive_type "int") (pointer_declarator "*param_6" (* "*") (identifier "param_6"))) (, ",") (parameter_declaration "int param_7" (primitive_type "int") (identifier "param_7")) (, ",") (parameter_declaration "int param_8" (primitive_type "int") (identifier "param_8")) () ")"))) (compound_statement "{\n  short sVar1;\n  ushort uVar2;\n  code *pcVar3;\n  code *pcVar4;\n  undefined4 uVar5;\n  int iVar6;\n  int iVar7;\n  uint uVar8;\n  int iVar9;\n  uint uVar10;\n  \n  iVar9 = param_1[2];\n  if (param_6 != (int *)0x0) {\n    if (*(int *)(param_2 + 0x24) == 0) {\n      *param_6 = 0;\n    }\n    else {\n      iVar6 = param_1[0xe];\n      param_1[0xe] = iVar6 + -1;\n      *param_6 = iVar6 + -1;\n      param_1[0xd] = param_3 + 1;\n      FUN_0009b3d8(param_1,*(undefined4 *)(param_2 + 0x24),*param_6,0x10);\n      param_1[0xd] = 0;\n      param_7 = 0;\n    }\n  }\n  if ((param_5 == 0) || ((*(byte *)(param_2 + 0x37) & 0x10) == 0)) {\n    uVar2 = *(ushort *)(param_2 + 0x34);\n  }\n  else {\n    uVar2 = *(ushort *)(param_2 + 0x32);\n  }\n  uVar10 = (uint)uVar2;\n  iVar6 = (*(code *)(PTR_LAB_000f62d8 + -0x1f54))(param_1,uVar10);\n  if (param_7 != 0) {\n    if (iVar6 == param_8) {\n      if (*(int *)(param_7 + 0x24) != 0) {\n        param_7 = 0;\n      }\n    }\n    else {\n      param_7 = 0;\n    }\n  }\n  uVar8 = 0;\n  if (uVar10 != 0) {\n    pcVar3 = (code *)(PTR_LAB_000f6304 + -0x7e0);\n    pcVar4 = (code *)(PTR_LAB_000f62f4 + 0x3518);\n    do {\n      if ((param_7 == 0) ||\n         (sVar1 = *(short *)(*(int *)(param_7 + 4) + uVar8 * 2),\n         *(short *)(*(int *)(param_2 + 4) + uVar8 * 2) != sVar1)) {\n        iVar7 = (int)*(short *)(*(int *)(param_2 + 4) + uVar8 * 2);\n        if (iVar7 == -2) goto LAB_0009b5e8;\n        FUN_00093724(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar7,iVar6 + uVar8);\nLAB_0009b68c:\n        iVar7 = *(int *)(iVar9 + 0x6c);\n        if ((0 < iVar7) && (*(char *)(*(int *)(iVar9 + 0x68) + iVar7 * 0x14 + -0x14) == 'S')) {\n          (*pcVar3)(iVar9,iVar7 + -1);\n        }\n      }\n      else if (sVar1 == -2) {\nLAB_0009b5e8:\n        param_1[0xd] = param_3 + 1;\n        (*pcVar4)(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar8 * 0x10 + 4),iVar6 + uVar8\n                 );\n        param_1[0xd] = 0;\n        goto LAB_0009b68c;\n      }\n      uVar8 = uVar8 + 1;\n    } while (uVar10 != uVar8);\n  }\n  if ((param_4 != 0) &&\n     ((*(code *)(PTR_LAB_000f6310 + -0x6054))(iVar9,0x5b,iVar6,uVar10,param_4),\n     *(int *)(*(int *)(param_2 + 0xc) + 0xc) != 0)) {\n    uVar5 = (*(code *)(PTR_LAB_000f62e8 + -0x6130))(*param_1,param_2);\n    (*(code *)(PTR_LAB_000f6304 + 0x7c88))(iVar9,0xffffffff,uVar5,0);\n  }\n  (*(code *)(PTR_LAB_000f62d8 + -0x1ed4))(param_1,iVar6,uVar10);\n  return iVar6;\n}" ({ "{") (declaration "short sVar1;" (sized_type_specifier "short" (short "short")) (identifier "sVar1") (; ";")) (declaration "ushort uVar2;" (type_identifier "ushort") (identifier "uVar2") (; ";")) (declaration "code *pcVar3;" (type_identifier "code") (pointer_declarator "*pcVar3" (* "*") (identifier "pcVar3")) (; ";")) (declaration "code *pcVar4;" (type_identifier "code") (pointer_declarator "*pcVar4" (* "*") (identifier "pcVar4")) (; ";")) (declaration "undefined4 uVar5;" (type_identifier "undefined4") (identifier "uVar5") (; ";")) (declaration "int iVar6;" (primitive_type "int") (identifier "iVar6") (; ";")) (declaration "int iVar7;" (primitive_type "int") (identifier "iVar7") (; ";")) (declaration "uint uVar8;" (type_identifier "uint") (identifier "uVar8") (; ";")) (declaration "int iVar9;" (primitive_type "int") (identifier "iVar9") (; ";")) (declaration "uint uVar10;" (type_identifier "uint") (identifier "uVar10") (; ";")) (expression_statement "iVar9 = param_1[2];" (assignment_expression "iVar9 = param_1[2]" (identifier "iVar9") (= "=") (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]"))) (; ";")) (if_statement "if (param_6 != (int *)0x0) {\n    if (*(int *)(param_2 + 0x24) == 0) {\n      *param_6 = 0;\n    }\n    else {\n      iVar6 = param_1[0xe];\n      param_1[0xe] = iVar6 + -1;\n      *param_6 = iVar6 + -1;\n      param_1[0xd] = param_3 + 1;\n      FUN_0009b3d8(param_1,*(undefined4 *)(param_2 + 0x24),*param_6,0x10);\n      param_1[0xd] = 0;\n      param_7 = 0;\n    }\n  }" (if "if") (parenthesized_expression "(param_6 != (int *)0x0)" (( "(") (binary_expression "param_6 != (int *)0x0" (identifier "param_6") (!= "!=") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    if (*(int *)(param_2 + 0x24) == 0) {\n      *param_6 = 0;\n    }\n    else {\n      iVar6 = param_1[0xe];\n      param_1[0xe] = iVar6 + -1;\n      *param_6 = iVar6 + -1;\n      param_1[0xd] = param_3 + 1;\n      FUN_0009b3d8(param_1,*(undefined4 *)(param_2 + 0x24),*param_6,0x10);\n      param_1[0xd] = 0;\n      param_7 = 0;\n    }\n  }" ({ "{") (if_statement "if (*(int *)(param_2 + 0x24) == 0) {\n      *param_6 = 0;\n    }\n    else {\n      iVar6 = param_1[0xe];\n      param_1[0xe] = iVar6 + -1;\n      *param_6 = iVar6 + -1;\n      param_1[0xd] = param_3 + 1;\n      FUN_0009b3d8(param_1,*(undefined4 *)(param_2 + 0x24),*param_6,0x10);\n      param_1[0xd] = 0;\n      param_7 = 0;\n    }" (if "if") (parenthesized_expression "(*(int *)(param_2 + 0x24) == 0)" (( "(") (binary_expression "*(int *)(param_2 + 0x24) == 0" (pointer_expression "*(int *)(param_2 + 0x24)" (* "*") (cast_expression "(int *)(param_2 + 0x24)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x24)" (( "(") (binary_expression "param_2 + 0x24" (identifier "param_2") (+ "+") (number_literal "0x24")) () ")")))) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      *param_6 = 0;\n    }" ({ "{") (expression_statement "*param_6 = 0;" (assignment_expression "*param_6 = 0" (pointer_expression "*param_6" (* "*") (identifier "param_6")) (= "=") (number_literal "0")) (; ";")) (} "}")) (else_clause "else {\n      iVar6 = param_1[0xe];\n      param_1[0xe] = iVar6 + -1;\n      *param_6 = iVar6 + -1;\n      param_1[0xd] = param_3 + 1;\n      FUN_0009b3d8(param_1,*(undefined4 *)(param_2 + 0x24),*param_6,0x10);\n      param_1[0xd] = 0;\n      param_7 = 0;\n    }" (else "else") (compound_statement "{\n      iVar6 = param_1[0xe];\n      param_1[0xe] = iVar6 + -1;\n      *param_6 = iVar6 + -1;\n      param_1[0xd] = param_3 + 1;\n      FUN_0009b3d8(param_1,*(undefined4 *)(param_2 + 0x24),*param_6,0x10);\n      param_1[0xd] = 0;\n      param_7 = 0;\n    }" ({ "{") (expression_statement "iVar6 = param_1[0xe];" (assignment_expression "iVar6 = param_1[0xe]" (identifier "iVar6") (= "=") (subscript_expression "param_1[0xe]" (identifier "param_1") ([ "[") (number_literal "0xe") (] "]"))) (; ";")) (expression_statement "param_1[0xe] = iVar6 + -1;" (assignment_expression "param_1[0xe] = iVar6 + -1" (subscript_expression "param_1[0xe]" (identifier "param_1") ([ "[") (number_literal "0xe") (] "]")) (= "=") (binary_expression "iVar6 + -1" (identifier "iVar6") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "*param_6 = iVar6 + -1;" (assignment_expression "*param_6 = iVar6 + -1" (pointer_expression "*param_6" (* "*") (identifier "param_6")) (= "=") (binary_expression "iVar6 + -1" (identifier "iVar6") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "param_1[0xd] = param_3 + 1;" (assignment_expression "param_1[0xd] = param_3 + 1" (subscript_expression "param_1[0xd]" (identifier "param_1") ([ "[") (number_literal "0xd") (] "]")) (= "=") (binary_expression "param_3 + 1" (identifier "param_3") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "FUN_0009b3d8(param_1,*(undefined4 *)(param_2 + 0x24),*param_6,0x10);" (call_expression "FUN_0009b3d8(param_1,*(undefined4 *)(param_2 + 0x24),*param_6,0x10)" (identifier "FUN_0009b3d8") (argument_list "(param_1,*(undefined4 *)(param_2 + 0x24),*param_6,0x10)" (( "(") (identifier "param_1") (, ",") (pointer_expression "*(undefined4 *)(param_2 + 0x24)" (* "*") (cast_expression "(undefined4 *)(param_2 + 0x24)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x24)" (( "(") (binary_expression "param_2 + 0x24" (identifier "param_2") (+ "+") (number_literal "0x24")) () ")")))) (, ",") (pointer_expression "*param_6" (* "*") (identifier "param_6")) (, ",") (number_literal "0x10") () ")"))) (; ";")) (expression_statement "param_1[0xd] = 0;" (assignment_expression "param_1[0xd] = 0" (subscript_expression "param_1[0xd]" (identifier "param_1") ([ "[") (number_literal "0xd") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "param_7 = 0;" (assignment_expression "param_7 = 0" (identifier "param_7") (= "=") (number_literal "0")) (; ";")) (} "}")))) (} "}"))) (if_statement "if ((param_5 == 0) || ((*(byte *)(param_2 + 0x37) & 0x10) == 0)) {\n    uVar2 = *(ushort *)(param_2 + 0x34);\n  }\n  else {\n    uVar2 = *(ushort *)(param_2 + 0x32);\n  }" (if "if") (parenthesized_expression "((param_5 == 0) || ((*(byte *)(param_2 + 0x37) & 0x10) == 0))" (( "(") (binary_expression "(param_5 == 0) || ((*(byte *)(param_2 + 0x37) & 0x10) == 0)" (parenthesized_expression "(param_5 == 0)" (( "(") (binary_expression "param_5 == 0" (identifier "param_5") (== "==") (number_literal "0")) () ")")) (|| "||") (parenthesized_expression "((*(byte *)(param_2 + 0x37) & 0x10) == 0)" (( "(") (binary_expression "(*(byte *)(param_2 + 0x37) & 0x10) == 0" (parenthesized_expression "(*(byte *)(param_2 + 0x37) & 0x10)" (( "(") (binary_expression "*(byte *)(param_2 + 0x37) & 0x10" (pointer_expression "*(byte *)(param_2 + 0x37)" (* "*") (cast_expression "(byte *)(param_2 + 0x37)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x37)" (( "(") (binary_expression "param_2 + 0x37" (identifier "param_2") (+ "+") (number_literal "0x37")) () ")")))) (& "&") (number_literal "0x10")) () ")")) (== "==") (number_literal "0")) () ")"))) () ")")) (compound_statement "{\n    uVar2 = *(ushort *)(param_2 + 0x34);\n  }" ({ "{") (expression_statement "uVar2 = *(ushort *)(param_2 + 0x34);" (assignment_expression "uVar2 = *(ushort *)(param_2 + 0x34)" (identifier "uVar2") (= "=") (pointer_expression "*(ushort *)(param_2 + 0x34)" (* "*") (cast_expression "(ushort *)(param_2 + 0x34)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x34)" (( "(") (binary_expression "param_2 + 0x34" (identifier "param_2") (+ "+") (number_literal "0x34")) () ")"))))) (; ";")) (} "}")) (else_clause "else {\n    uVar2 = *(ushort *)(param_2 + 0x32);\n  }" (else "else") (compound_statement "{\n    uVar2 = *(ushort *)(param_2 + 0x32);\n  }" ({ "{") (expression_statement "uVar2 = *(ushort *)(param_2 + 0x32);" (assignment_expression "uVar2 = *(ushort *)(param_2 + 0x32)" (identifier "uVar2") (= "=") (pointer_expression "*(ushort *)(param_2 + 0x32)" (* "*") (cast_expression "(ushort *)(param_2 + 0x32)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x32)" (( "(") (binary_expression "param_2 + 0x32" (identifier "param_2") (+ "+") (number_literal "0x32")) () ")"))))) (; ";")) (} "}")))) (expression_statement "uVar10 = (uint)uVar2;" (assignment_expression "uVar10 = (uint)uVar2" (identifier "uVar10") (= "=") (cast_expression "(uint)uVar2" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "uVar2"))) (; ";")) (expression_statement "iVar6 = (*(code *)(PTR_LAB_000f62d8 + -0x1f54))(param_1,uVar10);" (assignment_expression "iVar6 = (*(code *)(PTR_LAB_000f62d8 + -0x1f54))(param_1,uVar10)" (identifier "iVar6") (= "=") (call_expression "(*(code *)(PTR_LAB_000f62d8 + -0x1f54))(param_1,uVar10)" (parenthesized_expression "(*(code *)(PTR_LAB_000f62d8 + -0x1f54))" (( "(") (pointer_expression "*(code *)(PTR_LAB_000f62d8 + -0x1f54)" (* "*") (cast_expression "(code *)(PTR_LAB_000f62d8 + -0x1f54)" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_LAB_000f62d8 + -0x1f54)" (( "(") (binary_expression "PTR_LAB_000f62d8 + -0x1f54" (identifier "PTR_LAB_000f62d8") (+ "+") (number_literal "-0x1f54")) () ")")))) () ")")) (argument_list "(param_1,uVar10)" (( "(") (identifier "param_1") (, ",") (identifier "uVar10") () ")")))) (; ";")) (if_statement "if (param_7 != 0) {\n    if (iVar6 == param_8) {\n      if (*(int *)(param_7 + 0x24) != 0) {\n        param_7 = 0;\n      }\n    }\n    else {\n      param_7 = 0;\n    }\n  }" (if "if") (parenthesized_expression "(param_7 != 0)" (( "(") (binary_expression "param_7 != 0" (identifier "param_7") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    if (iVar6 == param_8) {\n      if (*(int *)(param_7 + 0x24) != 0) {\n        param_7 = 0;\n      }\n    }\n    else {\n      param_7 = 0;\n    }\n  }" ({ "{") (if_statement "if (iVar6 == param_8) {\n      if (*(int *)(param_7 + 0x24) != 0) {\n        param_7 = 0;\n      }\n    }\n    else {\n      param_7 = 0;\n    }" (if "if") (parenthesized_expression "(iVar6 == param_8)" (( "(") (binary_expression "iVar6 == param_8" (identifier "iVar6") (== "==") (identifier "param_8")) () ")")) (compound_statement "{\n      if (*(int *)(param_7 + 0x24) != 0) {\n        param_7 = 0;\n      }\n    }" ({ "{") (if_statement "if (*(int *)(param_7 + 0x24) != 0) {\n        param_7 = 0;\n      }" (if "if") (parenthesized_expression "(*(int *)(param_7 + 0x24) != 0)" (( "(") (binary_expression "*(int *)(param_7 + 0x24) != 0" (pointer_expression "*(int *)(param_7 + 0x24)" (* "*") (cast_expression "(int *)(param_7 + 0x24)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_7 + 0x24)" (( "(") (binary_expression "param_7 + 0x24" (identifier "param_7") (+ "+") (number_literal "0x24")) () ")")))) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        param_7 = 0;\n      }" ({ "{") (expression_statement "param_7 = 0;" (assignment_expression "param_7 = 0" (identifier "param_7") (= "=") (number_literal "0")) (; ";")) (} "}"))) (} "}")) (else_clause "else {\n      param_7 = 0;\n    }" (else "else") (compound_statement "{\n      param_7 = 0;\n    }" ({ "{") (expression_statement "param_7 = 0;" (assignment_expression "param_7 = 0" (identifier "param_7") (= "=") (number_literal "0")) (; ";")) (} "}")))) (} "}"))) (expression_statement "uVar8 = 0;" (assignment_expression "uVar8 = 0" (identifier "uVar8") (= "=") (number_literal "0")) (; ";")) (if_statement "if (uVar10 != 0) {\n    pcVar3 = (code *)(PTR_LAB_000f6304 + -0x7e0);\n    pcVar4 = (code *)(PTR_LAB_000f62f4 + 0x3518);\n    do {\n      if ((param_7 == 0) ||\n         (sVar1 = *(short *)(*(int *)(param_7 + 4) + uVar8 * 2),\n         *(short *)(*(int *)(param_2 + 4) + uVar8 * 2) != sVar1)) {\n        iVar7 = (int)*(short *)(*(int *)(param_2 + 4) + uVar8 * 2);\n        if (iVar7 == -2) goto LAB_0009b5e8;\n        FUN_00093724(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar7,iVar6 + uVar8);\nLAB_0009b68c:\n        iVar7 = *(int *)(iVar9 + 0x6c);\n        if ((0 < iVar7) && (*(char *)(*(int *)(iVar9 + 0x68) + iVar7 * 0x14 + -0x14) == 'S')) {\n          (*pcVar3)(iVar9,iVar7 + -1);\n        }\n      }\n      else if (sVar1 == -2) {\nLAB_0009b5e8:\n        param_1[0xd] = param_3 + 1;\n        (*pcVar4)(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar8 * 0x10 + 4),iVar6 + uVar8\n                 );\n        param_1[0xd] = 0;\n        goto LAB_0009b68c;\n      }\n      uVar8 = uVar8 + 1;\n    } while (uVar10 != uVar8);\n  }" (if "if") (parenthesized_expression "(uVar10 != 0)" (( "(") (binary_expression "uVar10 != 0" (identifier "uVar10") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    pcVar3 = (code *)(PTR_LAB_000f6304 + -0x7e0);\n    pcVar4 = (code *)(PTR_LAB_000f62f4 + 0x3518);\n    do {\n      if ((param_7 == 0) ||\n         (sVar1 = *(short *)(*(int *)(param_7 + 4) + uVar8 * 2),\n         *(short *)(*(int *)(param_2 + 4) + uVar8 * 2) != sVar1)) {\n        iVar7 = (int)*(short *)(*(int *)(param_2 + 4) + uVar8 * 2);\n        if (iVar7 == -2) goto LAB_0009b5e8;\n        FUN_00093724(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar7,iVar6 + uVar8);\nLAB_0009b68c:\n        iVar7 = *(int *)(iVar9 + 0x6c);\n        if ((0 < iVar7) && (*(char *)(*(int *)(iVar9 + 0x68) + iVar7 * 0x14 + -0x14) == 'S')) {\n          (*pcVar3)(iVar9,iVar7 + -1);\n        }\n      }\n      else if (sVar1 == -2) {\nLAB_0009b5e8:\n        param_1[0xd] = param_3 + 1;\n        (*pcVar4)(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar8 * 0x10 + 4),iVar6 + uVar8\n                 );\n        param_1[0xd] = 0;\n        goto LAB_0009b68c;\n      }\n      uVar8 = uVar8 + 1;\n    } while (uVar10 != uVar8);\n  }" ({ "{") (expression_statement "pcVar3 = (code *)(PTR_LAB_000f6304 + -0x7e0);" (assignment_expression "pcVar3 = (code *)(PTR_LAB_000f6304 + -0x7e0)" (identifier "pcVar3") (= "=") (cast_expression "(code *)(PTR_LAB_000f6304 + -0x7e0)" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_LAB_000f6304 + -0x7e0)" (( "(") (binary_expression "PTR_LAB_000f6304 + -0x7e0" (identifier "PTR_LAB_000f6304") (+ "+") (number_literal "-0x7e0")) () ")")))) (; ";")) (expression_statement "pcVar4 = (code *)(PTR_LAB_000f62f4 + 0x3518);" (assignment_expression "pcVar4 = (code *)(PTR_LAB_000f62f4 + 0x3518)" (identifier "pcVar4") (= "=") (cast_expression "(code *)(PTR_LAB_000f62f4 + 0x3518)" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_LAB_000f62f4 + 0x3518)" (( "(") (binary_expression "PTR_LAB_000f62f4 + 0x3518" (identifier "PTR_LAB_000f62f4") (+ "+") (number_literal "0x3518")) () ")")))) (; ";")) (do_statement "do {\n      if ((param_7 == 0) ||\n         (sVar1 = *(short *)(*(int *)(param_7 + 4) + uVar8 * 2),\n         *(short *)(*(int *)(param_2 + 4) + uVar8 * 2) != sVar1)) {\n        iVar7 = (int)*(short *)(*(int *)(param_2 + 4) + uVar8 * 2);\n        if (iVar7 == -2) goto LAB_0009b5e8;\n        FUN_00093724(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar7,iVar6 + uVar8);\nLAB_0009b68c:\n        iVar7 = *(int *)(iVar9 + 0x6c);\n        if ((0 < iVar7) && (*(char *)(*(int *)(iVar9 + 0x68) + iVar7 * 0x14 + -0x14) == 'S')) {\n          (*pcVar3)(iVar9,iVar7 + -1);\n        }\n      }\n      else if (sVar1 == -2) {\nLAB_0009b5e8:\n        param_1[0xd] = param_3 + 1;\n        (*pcVar4)(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar8 * 0x10 + 4),iVar6 + uVar8\n                 );\n        param_1[0xd] = 0;\n        goto LAB_0009b68c;\n      }\n      uVar8 = uVar8 + 1;\n    } while (uVar10 != uVar8);" (do "do") (compound_statement "{\n      if ((param_7 == 0) ||\n         (sVar1 = *(short *)(*(int *)(param_7 + 4) + uVar8 * 2),\n         *(short *)(*(int *)(param_2 + 4) + uVar8 * 2) != sVar1)) {\n        iVar7 = (int)*(short *)(*(int *)(param_2 + 4) + uVar8 * 2);\n        if (iVar7 == -2) goto LAB_0009b5e8;\n        FUN_00093724(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar7,iVar6 + uVar8);\nLAB_0009b68c:\n        iVar7 = *(int *)(iVar9 + 0x6c);\n        if ((0 < iVar7) && (*(char *)(*(int *)(iVar9 + 0x68) + iVar7 * 0x14 + -0x14) == 'S')) {\n          (*pcVar3)(iVar9,iVar7 + -1);\n        }\n      }\n      else if (sVar1 == -2) {\nLAB_0009b5e8:\n        param_1[0xd] = param_3 + 1;\n        (*pcVar4)(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar8 * 0x10 + 4),iVar6 + uVar8\n                 );\n        param_1[0xd] = 0;\n        goto LAB_0009b68c;\n      }\n      uVar8 = uVar8 + 1;\n    }" ({ "{") (if_statement "if ((param_7 == 0) ||\n         (sVar1 = *(short *)(*(int *)(param_7 + 4) + uVar8 * 2),\n         *(short *)(*(int *)(param_2 + 4) + uVar8 * 2) != sVar1)) {\n        iVar7 = (int)*(short *)(*(int *)(param_2 + 4) + uVar8 * 2);\n        if (iVar7 == -2) goto LAB_0009b5e8;\n        FUN_00093724(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar7,iVar6 + uVar8);\nLAB_0009b68c:\n        iVar7 = *(int *)(iVar9 + 0x6c);\n        if ((0 < iVar7) && (*(char *)(*(int *)(iVar9 + 0x68) + iVar7 * 0x14 + -0x14) == 'S')) {\n          (*pcVar3)(iVar9,iVar7 + -1);\n        }\n      }\n      else if (sVar1 == -2) {\nLAB_0009b5e8:\n        param_1[0xd] = param_3 + 1;\n        (*pcVar4)(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar8 * 0x10 + 4),iVar6 + uVar8\n                 );\n        param_1[0xd] = 0;\n        goto LAB_0009b68c;\n      }" (if "if") (parenthesized_expression "((param_7 == 0) ||\n         (sVar1 = *(short *)(*(int *)(param_7 + 4) + uVar8 * 2),\n         *(short *)(*(int *)(param_2 + 4) + uVar8 * 2) != sVar1))" (( "(") (binary_expression "(param_7 == 0) ||\n         (sVar1 = *(short *)(*(int *)(param_7 + 4) + uVar8 * 2),\n         *(short *)(*(int *)(param_2 + 4) + uVar8 * 2) != sVar1)" (parenthesized_expression "(param_7 == 0)" (( "(") (binary_expression "param_7 == 0" (identifier "param_7") (== "==") (number_literal "0")) () ")")) (|| "||") (parenthesized_expression "(sVar1 = *(short *)(*(int *)(param_7 + 4) + uVar8 * 2),\n         *(short *)(*(int *)(param_2 + 4) + uVar8 * 2) != sVar1)" (( "(") (comma_expression "sVar1 = *(short *)(*(int *)(param_7 + 4) + uVar8 * 2),\n         *(short *)(*(int *)(param_2 + 4) + uVar8 * 2) != sVar1" (assignment_expression "sVar1 = *(short *)(*(int *)(param_7 + 4) + uVar8 * 2)" (identifier "sVar1") (= "=") (pointer_expression "*(short *)(*(int *)(param_7 + 4) + uVar8 * 2)" (* "*") (cast_expression "(short *)(*(int *)(param_7 + 4) + uVar8 * 2)" (( "(") (type_descriptor "short *" (sized_type_specifier "short" (short "short")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_7 + 4) + uVar8 * 2)" (( "(") (binary_expression "*(int *)(param_7 + 4) + uVar8 * 2" (pointer_expression "*(int *)(param_7 + 4)" (* "*") (cast_expression "(int *)(param_7 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_7 + 4)" (( "(") (binary_expression "param_7 + 4" (identifier "param_7") (+ "+") (number_literal "4")) () ")")))) (+ "+") (binary_expression "uVar8 * 2" (identifier "uVar8") (* "*") (number_literal "2"))) () ")"))))) (, ",") (binary_expression "*(short *)(*(int *)(param_2 + 4) + uVar8 * 2) != sVar1" (pointer_expression "*(short *)(*(int *)(param_2 + 4) + uVar8 * 2)" (* "*") (cast_expression "(short *)(*(int *)(param_2 + 4) + uVar8 * 2)" (( "(") (type_descriptor "short *" (sized_type_specifier "short" (short "short")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_2 + 4) + uVar8 * 2)" (( "(") (binary_expression "*(int *)(param_2 + 4) + uVar8 * 2" (pointer_expression "*(int *)(param_2 + 4)" (* "*") (cast_expression "(int *)(param_2 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 4)" (( "(") (binary_expression "param_2 + 4" (identifier "param_2") (+ "+") (number_literal "4")) () ")")))) (+ "+") (binary_expression "uVar8 * 2" (identifier "uVar8") (* "*") (number_literal "2"))) () ")")))) (!= "!=") (identifier "sVar1"))) () ")"))) () ")")) (compound_statement "{\n        iVar7 = (int)*(short *)(*(int *)(param_2 + 4) + uVar8 * 2);\n        if (iVar7 == -2) goto LAB_0009b5e8;\n        FUN_00093724(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar7,iVar6 + uVar8);\nLAB_0009b68c:\n        iVar7 = *(int *)(iVar9 + 0x6c);\n        if ((0 < iVar7) && (*(char *)(*(int *)(iVar9 + 0x68) + iVar7 * 0x14 + -0x14) == 'S')) {\n          (*pcVar3)(iVar9,iVar7 + -1);\n        }\n      }" ({ "{") (expression_statement "iVar7 = (int)*(short *)(*(int *)(param_2 + 4) + uVar8 * 2);" (assignment_expression "iVar7 = (int)*(short *)(*(int *)(param_2 + 4) + uVar8 * 2)" (identifier "iVar7") (= "=") (cast_expression "(int)*(short *)(*(int *)(param_2 + 4) + uVar8 * 2)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (pointer_expression "*(short *)(*(int *)(param_2 + 4) + uVar8 * 2)" (* "*") (cast_expression "(short *)(*(int *)(param_2 + 4) + uVar8 * 2)" (( "(") (type_descriptor "short *" (sized_type_specifier "short" (short "short")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_2 + 4) + uVar8 * 2)" (( "(") (binary_expression "*(int *)(param_2 + 4) + uVar8 * 2" (pointer_expression "*(int *)(param_2 + 4)" (* "*") (cast_expression "(int *)(param_2 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 4)" (( "(") (binary_expression "param_2 + 4" (identifier "param_2") (+ "+") (number_literal "4")) () ")")))) (+ "+") (binary_expression "uVar8 * 2" (identifier "uVar8") (* "*") (number_literal "2"))) () ")")))))) (; ";")) (if_statement "if (iVar7 == -2) goto LAB_0009b5e8;" (if "if") (parenthesized_expression "(iVar7 == -2)" (( "(") (binary_expression "iVar7 == -2" (identifier "iVar7") (== "==") (number_literal "-2")) () ")")) (goto_statement "goto LAB_0009b5e8;" (goto "goto") (statement_identifier "LAB_0009b5e8") (; ";"))) (expression_statement "FUN_00093724(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar7,iVar6 + uVar8);" (call_expression "FUN_00093724(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar7,iVar6 + uVar8)" (identifier "FUN_00093724") (argument_list "(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar7,iVar6 + uVar8)" (( "(") (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]")) (, ",") (pointer_expression "*(undefined4 *)(param_2 + 0xc)" (* "*") (cast_expression "(undefined4 *)(param_2 + 0xc)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0xc)" (( "(") (binary_expression "param_2 + 0xc" (identifier "param_2") (+ "+") (number_literal "0xc")) () ")")))) (, ",") (identifier "param_3") (, ",") (identifier "iVar7") (, ",") (binary_expression "iVar6 + uVar8" (identifier "iVar6") (+ "+") (identifier "uVar8")) () ")"))) (; ";")) (labeled_statement "LAB_0009b68c:\n        iVar7 = *(int *)(iVar9 + 0x6c);" (statement_identifier "LAB_0009b68c") (: ":") (expression_statement "iVar7 = *(int *)(iVar9 + 0x6c);" (assignment_expression "iVar7 = *(int *)(iVar9 + 0x6c)" (identifier "iVar7") (= "=") (pointer_expression "*(int *)(iVar9 + 0x6c)" (* "*") (cast_expression "(int *)(iVar9 + 0x6c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar9 + 0x6c)" (( "(") (binary_expression "iVar9 + 0x6c" (identifier "iVar9") (+ "+") (number_literal "0x6c")) () ")"))))) (; ";"))) (if_statement "if ((0 < iVar7) && (*(char *)(*(int *)(iVar9 + 0x68) + iVar7 * 0x14 + -0x14) == 'S')) {\n          (*pcVar3)(iVar9,iVar7 + -1);\n        }" (if "if") (parenthesized_expression "((0 < iVar7) && (*(char *)(*(int *)(iVar9 + 0x68) + iVar7 * 0x14 + -0x14) == 'S'))" (( "(") (binary_expression "(0 < iVar7) && (*(char *)(*(int *)(iVar9 + 0x68) + iVar7 * 0x14 + -0x14) == 'S')" (parenthesized_expression "(0 < iVar7)" (( "(") (binary_expression "0 < iVar7" (number_literal "0") (< "<") (identifier "iVar7")) () ")")) (&& "&&") (parenthesized_expression "(*(char *)(*(int *)(iVar9 + 0x68) + iVar7 * 0x14 + -0x14) == 'S')" (( "(") (binary_expression "*(char *)(*(int *)(iVar9 + 0x68) + iVar7 * 0x14 + -0x14) == 'S'" (pointer_expression "*(char *)(*(int *)(iVar9 + 0x68) + iVar7 * 0x14 + -0x14)" (* "*") (cast_expression "(char *)(*(int *)(iVar9 + 0x68) + iVar7 * 0x14 + -0x14)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(iVar9 + 0x68) + iVar7 * 0x14 + -0x14)" (( "(") (binary_expression "*(int *)(iVar9 + 0x68) + iVar7 * 0x14 + -0x14" (binary_expression "*(int *)(iVar9 + 0x68) + iVar7 * 0x14" (pointer_expression "*(int *)(iVar9 + 0x68)" (* "*") (cast_expression "(int *)(iVar9 + 0x68)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar9 + 0x68)" (( "(") (binary_expression "iVar9 + 0x68" (identifier "iVar9") (+ "+") (number_literal "0x68")) () ")")))) (+ "+") (binary_expression "iVar7 * 0x14" (identifier "iVar7") (* "*") (number_literal "0x14"))) (+ "+") (number_literal "-0x14")) () ")")))) (== "==") (char_literal "'S'" (' "'") (character "S") (' "'"))) () ")"))) () ")")) (compound_statement "{\n          (*pcVar3)(iVar9,iVar7 + -1);\n        }" ({ "{") (expression_statement "(*pcVar3)(iVar9,iVar7 + -1);" (call_expression "(*pcVar3)(iVar9,iVar7 + -1)" (parenthesized_expression "(*pcVar3)" (( "(") (pointer_expression "*pcVar3" (* "*") (identifier "pcVar3")) () ")")) (argument_list "(iVar9,iVar7 + -1)" (( "(") (identifier "iVar9") (, ",") (binary_expression "iVar7 + -1" (identifier "iVar7") (+ "+") (number_literal "-1")) () ")"))) (; ";")) (} "}"))) (} "}")) (else_clause "else if (sVar1 == -2) {\nLAB_0009b5e8:\n        param_1[0xd] = param_3 + 1;\n        (*pcVar4)(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar8 * 0x10 + 4),iVar6 + uVar8\n                 );\n        param_1[0xd] = 0;\n        goto LAB_0009b68c;\n      }" (else "else") (if_statement "if (sVar1 == -2) {\nLAB_0009b5e8:\n        param_1[0xd] = param_3 + 1;\n        (*pcVar4)(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar8 * 0x10 + 4),iVar6 + uVar8\n                 );\n        param_1[0xd] = 0;\n        goto LAB_0009b68c;\n      }" (if "if") (parenthesized_expression "(sVar1 == -2)" (( "(") (binary_expression "sVar1 == -2" (identifier "sVar1") (== "==") (number_literal "-2")) () ")")) (compound_statement "{\nLAB_0009b5e8:\n        param_1[0xd] = param_3 + 1;\n        (*pcVar4)(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar8 * 0x10 + 4),iVar6 + uVar8\n                 );\n        param_1[0xd] = 0;\n        goto LAB_0009b68c;\n      }" ({ "{") (labeled_statement "LAB_0009b5e8:\n        param_1[0xd] = param_3 + 1;" (statement_identifier "LAB_0009b5e8") (: ":") (expression_statement "param_1[0xd] = param_3 + 1;" (assignment_expression "param_1[0xd] = param_3 + 1" (subscript_expression "param_1[0xd]" (identifier "param_1") ([ "[") (number_literal "0xd") (] "]")) (= "=") (binary_expression "param_3 + 1" (identifier "param_3") (+ "+") (number_literal "1"))) (; ";"))) (expression_statement "(*pcVar4)(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar8 * 0x10 + 4),iVar6 + uVar8\n                 );" (call_expression "(*pcVar4)(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar8 * 0x10 + 4),iVar6 + uVar8\n                 )" (parenthesized_expression "(*pcVar4)" (( "(") (pointer_expression "*pcVar4" (* "*") (identifier "pcVar4")) () ")")) (argument_list "(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar8 * 0x10 + 4),iVar6 + uVar8\n                 )" (( "(") (identifier "param_1") (, ",") (pointer_expression "*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar8 * 0x10 + 4)" (* "*") (cast_expression "(undefined4 *)(*(int *)(param_2 + 0x28) + uVar8 * 0x10 + 4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_2 + 0x28) + uVar8 * 0x10 + 4)" (( "(") (binary_expression "*(int *)(param_2 + 0x28) + uVar8 * 0x10 + 4" (binary_expression "*(int *)(param_2 + 0x28) + uVar8 * 0x10" (pointer_expression "*(int *)(param_2 + 0x28)" (* "*") (cast_expression "(int *)(param_2 + 0x28)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x28)" (( "(") (binary_expression "param_2 + 0x28" (identifier "param_2") (+ "+") (number_literal "0x28")) () ")")))) (+ "+") (binary_expression "uVar8 * 0x10" (identifier "uVar8") (* "*") (number_literal "0x10"))) (+ "+") (number_literal "4")) () ")")))) (, ",") (binary_expression "iVar6 + uVar8" (identifier "iVar6") (+ "+") (identifier "uVar8")) () ")"))) (; ";")) (expression_statement "param_1[0xd] = 0;" (assignment_expression "param_1[0xd] = 0" (subscript_expression "param_1[0xd]" (identifier "param_1") ([ "[") (number_literal "0xd") (] "]")) (= "=") (number_literal "0")) (; ";")) (goto_statement "goto LAB_0009b68c;" (goto "goto") (statement_identifier "LAB_0009b68c") (; ";")) (} "}"))))) (expression_statement "uVar8 = uVar8 + 1;" (assignment_expression "uVar8 = uVar8 + 1" (identifier "uVar8") (= "=") (binary_expression "uVar8 + 1" (identifier "uVar8") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(uVar10 != uVar8)" (( "(") (binary_expression "uVar10 != uVar8" (identifier "uVar10") (!= "!=") (identifier "uVar8")) () ")")) (; ";")) (} "}"))) (if_statement "if ((param_4 != 0) &&\n     ((*(code *)(PTR_LAB_000f6310 + -0x6054))(iVar9,0x5b,iVar6,uVar10,param_4),\n     *(int *)(*(int *)(param_2 + 0xc) + 0xc) != 0)) {\n    uVar5 = (*(code *)(PTR_LAB_000f62e8 + -0x6130))(*param_1,param_2);\n    (*(code *)(PTR_LAB_000f6304 + 0x7c88))(iVar9,0xffffffff,uVar5,0);\n  }" (if "if") (parenthesized_expression "((param_4 != 0) &&\n     ((*(code *)(PTR_LAB_000f6310 + -0x6054))(iVar9,0x5b,iVar6,uVar10,param_4),\n     *(int *)(*(int *)(param_2 + 0xc) + 0xc) != 0))" (( "(") (binary_expression "(param_4 != 0) &&\n     ((*(code *)(PTR_LAB_000f6310 + -0x6054))(iVar9,0x5b,iVar6,uVar10,param_4),\n     *(int *)(*(int *)(param_2 + 0xc) + 0xc) != 0)" (parenthesized_expression "(param_4 != 0)" (( "(") (binary_expression "param_4 != 0" (identifier "param_4") (!= "!=") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "((*(code *)(PTR_LAB_000f6310 + -0x6054))(iVar9,0x5b,iVar6,uVar10,param_4),\n     *(int *)(*(int *)(param_2 + 0xc) + 0xc) != 0)" (( "(") (comma_expression "(*(code *)(PTR_LAB_000f6310 + -0x6054))(iVar9,0x5b,iVar6,uVar10,param_4),\n     *(int *)(*(int *)(param_2 + 0xc) + 0xc) != 0" (call_expression "(*(code *)(PTR_LAB_000f6310 + -0x6054))(iVar9,0x5b,iVar6,uVar10,param_4)" (parenthesized_expression "(*(code *)(PTR_LAB_000f6310 + -0x6054))" (( "(") (pointer_expression "*(code *)(PTR_LAB_000f6310 + -0x6054)" (* "*") (cast_expression "(code *)(PTR_LAB_000f6310 + -0x6054)" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_LAB_000f6310 + -0x6054)" (( "(") (binary_expression "PTR_LAB_000f6310 + -0x6054" (identifier "PTR_LAB_000f6310") (+ "+") (number_literal "-0x6054")) () ")")))) () ")")) (argument_list "(iVar9,0x5b,iVar6,uVar10,param_4)" (( "(") (identifier "iVar9") (, ",") (number_literal "0x5b") (, ",") (identifier "iVar6") (, ",") (identifier "uVar10") (, ",") (identifier "param_4") () ")"))) (, ",") (binary_expression "*(int *)(*(int *)(param_2 + 0xc) + 0xc) != 0" (pointer_expression "*(int *)(*(int *)(param_2 + 0xc) + 0xc)" (* "*") (cast_expression "(int *)(*(int *)(param_2 + 0xc) + 0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_2 + 0xc) + 0xc)" (( "(") (binary_expression "*(int *)(param_2 + 0xc) + 0xc" (pointer_expression "*(int *)(param_2 + 0xc)" (* "*") (cast_expression "(int *)(param_2 + 0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0xc)" (( "(") (binary_expression "param_2 + 0xc" (identifier "param_2") (+ "+") (number_literal "0xc")) () ")")))) (+ "+") (number_literal "0xc")) () ")")))) (!= "!=") (number_literal "0"))) () ")"))) () ")")) (compound_statement "{\n    uVar5 = (*(code *)(PTR_LAB_000f62e8 + -0x6130))(*param_1,param_2);\n    (*(code *)(PTR_LAB_000f6304 + 0x7c88))(iVar9,0xffffffff,uVar5,0);\n  }" ({ "{") (expression_statement "uVar5 = (*(code *)(PTR_LAB_000f62e8 + -0x6130))(*param_1,param_2);" (assignment_expression "uVar5 = (*(code *)(PTR_LAB_000f62e8 + -0x6130))(*param_1,param_2)" (identifier "uVar5") (= "=") (call_expression "(*(code *)(PTR_LAB_000f62e8 + -0x6130))(*param_1,param_2)" (parenthesized_expression "(*(code *)(PTR_LAB_000f62e8 + -0x6130))" (( "(") (pointer_expression "*(code *)(PTR_LAB_000f62e8 + -0x6130)" (* "*") (cast_expression "(code *)(PTR_LAB_000f62e8 + -0x6130)" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_LAB_000f62e8 + -0x6130)" (( "(") (binary_expression "PTR_LAB_000f62e8 + -0x6130" (identifier "PTR_LAB_000f62e8") (+ "+") (number_literal "-0x6130")) () ")")))) () ")")) (argument_list "(*param_1,param_2)" (( "(") (pointer_expression "*param_1" (* "*") (identifier "param_1")) (, ",") (identifier "param_2") () ")")))) (; ";")) (expression_statement "(*(code *)(PTR_LAB_000f6304 + 0x7c88))(iVar9,0xffffffff,uVar5,0);" (call_expression "(*(code *)(PTR_LAB_000f6304 + 0x7c88))(iVar9,0xffffffff,uVar5,0)" (parenthesized_expression "(*(code *)(PTR_LAB_000f6304 + 0x7c88))" (( "(") (pointer_expression "*(code *)(PTR_LAB_000f6304 + 0x7c88)" (* "*") (cast_expression "(code *)(PTR_LAB_000f6304 + 0x7c88)" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_LAB_000f6304 + 0x7c88)" (( "(") (binary_expression "PTR_LAB_000f6304 + 0x7c88" (identifier "PTR_LAB_000f6304") (+ "+") (number_literal "0x7c88")) () ")")))) () ")")) (argument_list "(iVar9,0xffffffff,uVar5,0)" (( "(") (identifier "iVar9") (, ",") (number_literal "0xffffffff") (, ",") (identifier "uVar5") (, ",") (number_literal "0") () ")"))) (; ";")) (} "}"))) (expression_statement "(*(code *)(PTR_LAB_000f62d8 + -0x1ed4))(param_1,iVar6,uVar10);" (call_expression "(*(code *)(PTR_LAB_000f62d8 + -0x1ed4))(param_1,iVar6,uVar10)" (parenthesized_expression "(*(code *)(PTR_LAB_000f62d8 + -0x1ed4))" (( "(") (pointer_expression "*(code *)(PTR_LAB_000f62d8 + -0x1ed4)" (* "*") (cast_expression "(code *)(PTR_LAB_000f62d8 + -0x1ed4)" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_LAB_000f62d8 + -0x1ed4)" (( "(") (binary_expression "PTR_LAB_000f62d8 + -0x1ed4" (identifier "PTR_LAB_000f62d8") (+ "+") (number_literal "-0x1ed4")) () ")")))) () ")")) (argument_list "(param_1,iVar6,uVar10)" (( "(") (identifier "param_1") (, ",") (identifier "iVar6") (, ",") (identifier "uVar10") () ")"))) (; ";")) (return_statement "return iVar6;" (return "return") (identifier "iVar6") (; ";")) (} "}")))

int function_1
              (type_1 *pParse,type_2 *pIdx,int var_2,int var_15,int var_4,int *var_1,
              type_2 *var_6,int var_8)

{
  type_3 uVar1;
  type_4 *pcVar2;
  type_4 *pcVar3;
  type_5 uVar4;
  int var_7;
  int var_14;
  type_6 var_13;
  type_7 *pVVar8;
  type_6 var_9;
  
  pVVar8 = pParse->pVdbe;
  if (var_1 != (int *)0x0) {
    if (pIdx->pPartIdxWhere == (type_8 *)0x0) {
      *var_1 = 0;
    }
    else {
      var_7 = pParse->nLabel + -1;
      pParse->nLabel = var_7;
      *var_1 = var_7;
      pParse->iSelfTab = var_2 + 1;
      var_3(pParse,pIdx->pPartIdxWhere,*var_1,0x10);
      pParse->iSelfTab = 0;
      var_6 = (type_2 *)0x0;
    }
  }
  if ((var_4 == 0) || ((pIdx->field_0x37 & 0x10) == 0)) {
    uVar1 = pIdx->nColumn;
  }
  else {
    uVar1 = pIdx->nKeyCol;
  }
  var_9 = (type_6)uVar1;
  var_7 = (*(type_4 *)(var_5 + -0x1f54))(pParse,var_9);
  if (var_6 != (type_2 *)0x0) {
    if (var_7 == var_8) {
      if (var_6->pPartIdxWhere != (type_8 *)0x0) {
        var_6 = (type_2 *)0x0;
      }
    }
    else {
      var_6 = (type_2 *)0x0;
    }
  }
  var_13 = 0;
  if (var_9 != 0) {
    pcVar2 = (type_4 *)(var_10 + -0x7e0);
    pcVar3 = (type_4 *)(var_11 + 0x3518);
    do {
      if ((var_6 == (type_2 *)0x0) || (pIdx->aiColumn[var_13] != var_6->aiColumn[var_13])) {
        if (pIdx->aiColumn[var_13] == -2) goto LAB_0009b5e8;
        var_12
                  (pParse->pVdbe,pIdx->pTable,var_2,(int)pIdx->aiColumn[var_13],var_7 + var_13);
LAB_0009b68c:
        var_14 = pVVar8->nOp;
        if ((0 < var_14) && (pVVar8->aOp[var_14 + -1].opcode == 'S')) {
          (*pcVar2)(pVVar8,var_14 + -1);
        }
      }
      else if (var_6->aiColumn[var_13] == -2) {
LAB_0009b5e8:
        pParse->iSelfTab = var_2 + 1;
        (*pcVar3)(pParse,pIdx->aColExpr->a[var_13].pExpr,var_7 + var_13);
        pParse->iSelfTab = 0;
        goto LAB_0009b68c;
      }
      var_13 = var_13 + 1;
    } while (var_9 != var_13);
  }
  if ((var_15 != 0) &&
     ((*(type_4 *)(var_16 + -0x6054))(pVVar8,0x5b,var_7,var_9,var_15),
     pIdx->pTable->pSelect != (type_9 *)0x0)) {
    uVar4 = (*(type_4 *)(var_17 + -0x6130))(pParse->db,pIdx);
    (*(type_4 *)(var_10 + 0x7c88))(pVVar8,0xffffffff,uVar4,0);
  }
  (*(type_4 *)(var_5 + -0x1ed4))(pParse,var_7,var_9);
  return var_7;
}


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

int MASKED(undefined4 *param_1,int param_2,int param_3,int param_4,int param_5,int *param_6,
                int param_7,int param_8)

{
  short sVar1;
  ushort uVar2;
  code *pcVar3;
  code *pcVar4;
  undefined4 uVar5;
  int iVar6;
  int iVar7;
  uint uVar8;
  int iVar9;
  uint uVar10;
  
  iVar9 = param_1[2];
  if (param_6 != (int *)0x0) {
    if (*(int *)(param_2 + 0x24) == 0) {
      *param_6 = 0;
    }
    else {
      iVar6 = param_1[0xe];
      param_1[0xe] = iVar6 + -1;
      *param_6 = iVar6 + -1;
      param_1[0xd] = param_3 + 1;
      FUN_0009b3d8(param_1,*(undefined4 *)(param_2 + 0x24),*param_6,0x10);
      param_1[0xd] = 0;
      param_7 = 0;
    }
  }
  if ((param_5 == 0) || ((*(byte *)(param_2 + 0x37) & 0x10) == 0)) {
    uVar2 = *(ushort *)(param_2 + 0x34);
  }
  else {
    uVar2 = *(ushort *)(param_2 + 0x32);
  }
  uVar10 = (uint)uVar2;
  iVar6 = (*(code *)(PTR_LAB_000f62d8 + -0x1f54))(param_1,uVar10);
  if (param_7 != 0) {
    if (iVar6 == param_8) {
      if (*(int *)(param_7 + 0x24) != 0) {
        param_7 = 0;
      }
    }
    else {
      param_7 = 0;
    }
  }
  uVar8 = 0;
  if (uVar10 != 0) {
    pcVar3 = (code *)(PTR_LAB_000f6304 + -0x7e0);
    pcVar4 = (code *)(PTR_LAB_000f62f4 + 0x3518);
    do {
      if ((param_7 == 0) ||
         (sVar1 = *(short *)(*(int *)(param_7 + 4) + uVar8 * 2),
         *(short *)(*(int *)(param_2 + 4) + uVar8 * 2) != sVar1)) {
        iVar7 = (int)*(short *)(*(int *)(param_2 + 4) + uVar8 * 2);
        if (iVar7 == -2) goto LAB_0009b5e8;
        FUN_00093724(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar7,iVar6 + uVar8);
LAB_0009b68c:
        iVar7 = *(int *)(iVar9 + 0x6c);
        if ((0 < iVar7) && (*(char *)(*(int *)(iVar9 + 0x68) + iVar7 * 0x14 + -0x14) == 'S')) {
          (*pcVar3)(iVar9,iVar7 + -1);
        }
      }
      else if (sVar1 == -2) {
LAB_0009b5e8:
        param_1[0xd] = param_3 + 1;
        (*pcVar4)(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar8 * 0x10 + 4),iVar6 + uVar8
                 );
        param_1[0xd] = 0;
        goto LAB_0009b68c;
      }
      uVar8 = uVar8 + 1;
    } while (uVar10 != uVar8);
  }
  if ((param_4 != 0) &&
     ((*(code *)(PTR_LAB_000f6310 + -0x6054))(iVar9,0x5b,iVar6,uVar10,param_4),
     *(int *)(*(int *)(param_2 + 0xc) + 0xc) != 0)) {
    uVar5 = (*(code *)(PTR_LAB_000f62e8 + -0x6130))(*param_1,param_2);
    (*(code *)(PTR_LAB_000f6304 + 0x7c88))(iVar9,0xffffffff,uVar5,0);
  }
  (*(code *)(PTR_LAB_000f62d8 + -0x1ed4))(param_1,iVar6,uVar10);
  return iVar6;
}

