
int __regparm3 btreeInitPage(MemPage *pPage)

{
  ushort *puVar1;
  uint uVar2;
  byte bVar3;
  u8 uVar4;
  u8 uVar5;
  u8 *puVar6;
  BtShared *pBVar7;
  uint uVar8;
  ushort uVar9;
  u32 uVar10;
  u16 uVar11;
  int iVar12;
  int lineno;
  uint uVar13;
  uint uVar14;
  uint uVar15;
  int local_30;
  short local_2c;
  
  bVar3 = pPage->hdrOffset;
  puVar6 = pPage->aData;
  pBVar7 = pPage->pBt;
  iVar12 = decodeFlags(pPage,(uint)puVar6[bVar3]);
  if (iVar12 != 0) {
    iVar12 = sqlite3CorruptError(0xfdab);
    return iVar12;
  }
  uVar10 = pBVar7->pageSize;
  pPage->nOverflow = '\0';
  iVar12 = bVar3 + 8 + (uint)pPage->childPtrSize;
  pPage->maskPage = (short)uVar10 - 1;
  uVar8 = pBVar7->usableSize;
  pPage->cellOffset = (u16)iVar12;
  pPage->aDataOfst = puVar6 + pPage->childPtrSize;
  pPage->aDataEnd = puVar6 + uVar8;
  puVar1 = (ushort *)(puVar6 + iVar12);
  pPage->aCellIdx = (u8 *)puVar1;
  uVar4 = puVar6[bVar3 + 5];
  uVar5 = puVar6[bVar3 + 6];
  uVar9 = CONCAT11(puVar6[bVar3 + 3],puVar6[bVar3 + 4]);
  pPage->nCell = uVar9;
  lineno = 0xfdbe;
  if ((pBVar7->pageSize - 8) / 6 < (uint)uVar9) goto LAB_0005170d;
  uVar2 = iVar12 + (uint)uVar9 * 2;
  local_30 = uVar8 - 4;
  if ((pBVar7->db->flags & 0x200000) != 0) {
    if (pPage->leaf == '\0') {
      local_30 = uVar8 - 5;
      if (uVar9 != 0) goto LAB_00051733;
LAB_000517f0:
      local_30 = local_30 + 1;
    }
    else if (uVar9 != 0) {
LAB_00051733:
      uVar13 = (uint)(ushort)(*puVar1 << 8 | *puVar1 >> 8);
      if (((int)uVar13 <= local_30) && (uVar2 <= uVar13)) {
        iVar12 = 0;
        do {
          uVar11 = (*pPage->xCellSize)(pPage,puVar6 + uVar13);
          if ((int)uVar8 < (int)(uVar13 + uVar11)) {
            iVar12 = sqlite3CorruptError(0xfddf);
            return iVar12;
          }
          iVar12 = iVar12 + 1;
          if ((int)(uint)pPage->nCell <= iVar12) {
            if (pPage->leaf == '\0') goto LAB_000517f0;
            goto LAB_00051647;
          }
          uVar13 = (uint)(ushort)(puVar1[iVar12] << 8 | puVar1[iVar12] >> 8);
        } while ((uVar2 <= uVar13) && ((int)uVar13 <= local_30));
      }
      iVar12 = sqlite3CorruptError(0xfdda);
      return iVar12;
    }
  }
LAB_00051647:
  iVar12 = (CONCAT11(uVar4,uVar5) - 1 & 0xffff) + 1 + (uint)puVar6[bVar3 + 7];
  uVar13 = (uint)CONCAT11(puVar6[bVar3 + 1],puVar6[bVar3 + 2]);
  if (uVar13 != 0) {
    if (uVar13 < uVar2) {
      lineno = 0xfdf1;
      goto LAB_0005170d;
    }
    do {
      if (local_30 < (int)uVar13) {
        iVar12 = sqlite3CorruptError(0xfdf6);
        return iVar12;
      }
      uVar14 = (uint)CONCAT11(puVar6[uVar13],puVar6[uVar13 + 1]);
      uVar15 = uVar13 + CONCAT11(puVar6[uVar13 + 2],puVar6[uVar13 + 3]);
      iVar12 = iVar12 + (uint)CONCAT11(puVar6[uVar13 + 2],puVar6[uVar13 + 3]);
      uVar13 = uVar14;
    } while (uVar15 + 3 < uVar14);
    if (uVar14 != 0) {
      lineno = 0xfe00;
      goto LAB_0005170d;
    }
    lineno = 0xfe04;
    if (uVar8 < uVar15) goto LAB_0005170d;
  }
  if (iVar12 <= (int)uVar8) {
    local_2c = (short)uVar2;
    pPage->isInit = '\x01';
    pPage->nFree = (short)iVar12 - local_2c;
    return 0;
  }
  lineno = 0xfe10;
LAB_0005170d:
  iVar12 = sqlite3CorruptError(lineno);
  return iVar12;
}



undefined4 __regparm3 FUN_00051560(undefined1 *param_1)

{
  ushort *puVar1;
  uint uVar2;
  byte bVar3;
  undefined1 uVar4;
  undefined1 uVar5;
  short sVar6;
  int iVar7;
  uint uVar8;
  ushort uVar9;
  uint uVar10;
  int iVar11;
  uint uVar12;
  undefined4 uVar13;
  uint uVar14;
  uint uVar15;
  int iVar16;
  int local_30;
  short local_2c;
  
  bVar3 = param_1[9];
  iVar7 = *(int *)(param_1 + 0x38);
  iVar16 = *(int *)(param_1 + 0x34);
  uVar10 = (uint)bVar3;
  iVar11 = FUN_000513a0();
  if (iVar11 != 0) {
    uVar13 = FUN_00051360();
    return uVar13;
  }
  sVar6 = *(short *)(iVar16 + 0x20);
  param_1[0xc] = 0;
  iVar11 = bVar3 + 8 + (uint)(byte)param_1[10];
  *(short *)(param_1 + 0x18) = sVar6 + -1;
  uVar8 = *(uint *)(iVar16 + 0x24);
  *(short *)(param_1 + 0x12) = (short)iVar11;
  *(uint *)(param_1 + 0x44) = (uint)(byte)param_1[10] + iVar7;
  *(uint *)(param_1 + 0x3c) = uVar8 + iVar7;
  puVar1 = (ushort *)(iVar7 + iVar11);
  *(ushort **)(param_1 + 0x40) = puVar1;
  uVar4 = *(undefined1 *)(iVar7 + 5 + uVar10);
  uVar5 = *(undefined1 *)(iVar7 + 6 + uVar10);
  uVar9 = CONCAT11(*(undefined1 *)(iVar7 + 3 + uVar10),*(undefined1 *)(iVar7 + 4 + uVar10));
  *(ushort *)(param_1 + 0x16) = uVar9;
  if ((*(int *)(iVar16 + 0x20) - 8U) / 6 < (uint)uVar9) goto LAB_0005170d;
  uVar2 = iVar11 + (uint)uVar9 * 2;
  local_30 = uVar8 - 4;
  if ((*(byte *)(*(int *)(iVar16 + 4) + 0x1e) & 0x20) != 0) {
    if (param_1[8] == '\0') {
      local_30 = uVar8 - 5;
      if (uVar9 != 0) goto LAB_00051733;
LAB_000517f0:
      local_30 = local_30 + 1;
    }
    else if (uVar9 != 0) {
LAB_00051733:
      uVar12 = (uint)(ushort)(*puVar1 << 8 | *puVar1 >> 8);
      if (((int)uVar12 <= local_30) && (uVar2 <= uVar12)) {
        iVar16 = 0;
        do {
          uVar14 = (**(code **)(param_1 + 0x4c))(param_1,iVar7 + uVar12);
          if ((int)uVar8 < (int)(uVar12 + (uVar14 & 0xffff))) {
            uVar13 = FUN_00051360();
            return uVar13;
          }
          iVar16 = iVar16 + 1;
          if ((int)(uint)*(ushort *)(param_1 + 0x16) <= iVar16) {
            if (param_1[8] == '\0') goto LAB_000517f0;
            goto LAB_00051647;
          }
          uVar12 = (uint)(ushort)(puVar1[iVar16] << 8 | puVar1[iVar16] >> 8);
        } while ((uVar2 <= uVar12) && ((int)uVar12 <= local_30));
      }
      uVar13 = FUN_00051360();
      return uVar13;
    }
  }
LAB_00051647:
  iVar16 = (CONCAT11(uVar4,uVar5) - 1 & 0xffff) + 1 + (uint)*(byte *)(iVar7 + 7 + uVar10);
  uVar10 = (uint)CONCAT11(*(undefined1 *)(iVar7 + 1 + uVar10),*(undefined1 *)(iVar7 + 2 + uVar10));
  if (uVar10 != 0) {
    if (uVar10 < uVar2) goto LAB_0005170d;
    do {
      if (local_30 < (int)uVar10) {
        uVar13 = FUN_00051360();
        return uVar13;
      }
      uVar12 = (uint)CONCAT11(*(undefined1 *)(iVar7 + uVar10),*(undefined1 *)(iVar7 + 1 + uVar10));
      uVar14 = (uint)CONCAT11(*(undefined1 *)(iVar7 + 2 + uVar10),
                              *(undefined1 *)(iVar7 + 3 + uVar10));
      uVar15 = uVar10 + uVar14;
      iVar16 = iVar16 + uVar14;
      uVar10 = uVar12;
    } while (uVar15 + 3 < uVar12);
    if ((uVar12 != 0) || (uVar8 < uVar15)) goto LAB_0005170d;
  }
  if (iVar16 <= (int)uVar8) {
    local_2c = (short)uVar2;
    *param_1 = 1;
    *(short *)(param_1 + 0x14) = (short)iVar16 - local_2c;
    return 0;
  }
LAB_0005170d:
  uVar13 = FUN_00051360();
  return uVar13;
}


PUSH EBP
PUSH EDI
PUSH ESI
PUSH EBX
MOV EBX,EAX
SUB ESP,0x2c
MOVZX EBP,byte ptr [EAX + 0x9]
MOV ESI,dword ptr [EAX + 0x38]
MOV EDI,dword ptr [EAX + 0x34]
MOV EAX,EBP
MOVZX EAX,AL
MOVZX EDX,byte ptr [ESI + EAX*0x1]
MOV dword ptr [ESP + 0x18],EAX
MOV EAX,EBX
CALL 0x000513a0
TEST EAX,EAX
JNZ 0x000517c0
MOVZX EAX,word ptr [EDI + 0x20]
MOVZX EDX,byte ptr [EBX + 0xa]
MOV byte ptr [EBX + 0xc],0x0
MOV ECX,EBP
MOVZX EBP,CL
MOV ECX,dword ptr [ESP + 0x18]
SUB EAX,0x1
LEA EBP,[EBP + EDX*0x1 + 0x8]
MOV word ptr [EBX + 0x18],AX
MOV EAX,dword ptr [EDI + 0x24]
MOV word ptr [EBX + 0x12],BP
MOVZX EBP,BP
MOV dword ptr [ESP + 0x8],EAX
MOV EAX,EDX
MOV EDX,dword ptr [ESP + 0x8]
ADD EAX,ESI
ADD EDX,ESI
MOV dword ptr [EBX + 0x44],EAX
MOV dword ptr [EBX + 0x3c],EDX
LEA EDX,[ESI + EBP*0x1]
MOV dword ptr [EBX + 0x40],EDX
MOVZX EAX,byte ptr [ESI + ECX*0x1 + 0x5]
MOV dword ptr [ESP + 0x14],EDX
MOV byte ptr [ESP + 0x1e],AL
MOVZX EAX,byte ptr [ESI + ECX*0x1 + 0x6]
MOV byte ptr [ESP + 0x1f],AL
MOV EAX,ECX
MOVZX ECX,byte ptr [ESI + ECX*0x1 + 0x3]
MOVZX EAX,byte ptr [ESI + EAX*0x1 + 0x4]
SHL ECX,0x8
OR ECX,EAX
MOV word ptr [EBX + 0x16],CX
MOV EDX,dword ptr [EDI + 0x20]
MOVZX EAX,CX
MOV dword ptr [ESP + 0xc],EAX
LEA EAX,[EDX + -0x8]
MOV EDX,0xaaaaaaab
MUL EDX
MOV EAX,0xfdbe
SHR EDX,0x2
CMP dword ptr [ESP + 0xc],EDX
JA 0x0005170d
MOVZX EAX,CX
MOV EDX,dword ptr [ESP + 0x8]
LEA EAX,[EBP + EAX*0x2]
MOV dword ptr [ESP + 0x10],EAX
LEA EAX,[EDX + -0x4]
MOV dword ptr [ESP + 0xc],EAX
MOV EAX,dword ptr [EDI + 0x4]
TEST byte ptr [EAX + 0x1e],0x20
JNZ 0x00051720
MOVZX EDX,byte ptr [ESP + 0x1e]
MOV EBP,dword ptr [ESP + 0x18]
MOVZX EDI,byte ptr [ESP + 0x1f]
SHL EDX,0x8
MOVZX EAX,byte ptr [ESI + EBP*0x1 + 0x1]
MOVZX ECX,byte ptr [ESI + EBP*0x1 + 0x2]
OR EDX,EDI
MOVZX EDI,byte ptr [ESI + EBP*0x1 + 0x7]
SUB EDX,0x1
SHL EAX,0x8
MOVZX EDX,DX
LEA EDI,[EDX + EDI*0x1 + 0x1]
OR EAX,ECX
JZ 0x000516e9
CMP dword ptr [ESP + 0x10],EAX
JG 0x00051840
CMP dword ptr [ESP + 0xc],EAX
JL 0x00051800
MOV EBP,dword ptr [ESP + 0xc]
MOV dword ptr [ESP + 0xc],EBX
JMP 0x000516a8
CMP EAX,EBP
JG 0x00051800
MOV EDX,EAX
MOVZX EAX,byte ptr [ESI + EAX*0x1]
MOVZX ECX,byte ptr [ESI + EDX*0x1 + 0x1]
MOVZX EBX,byte ptr [ESI + EDX*0x1 + 0x3]
SHL EAX,0x8
OR EAX,ECX
MOVZX ECX,byte ptr [ESI + EDX*0x1 + 0x2]
SHL ECX,0x8
OR ECX,EBX
ADD EDX,ECX
ADD EDI,ECX
LEA ECX,[EDX + 0x3]
CMP ECX,EAX
JC 0x000516a0
MOV EBX,dword ptr [ESP + 0xc]
TEST EAX,EAX
JNZ 0x0005184a
MOV EAX,0xfe04
CMP dword ptr [ESP + 0x8],EDX
JC 0x0005170d
CMP EDI,dword ptr [ESP + 0x8]
JG 0x00051708
SUB DI,word ptr [ESP + 0x10]
MOV byte ptr [EBX],0x1
XOR EAX,EAX
MOV word ptr [EBX + 0x14],DI
ADD ESP,0x2c
POP EBX
POP ESI
POP EDI
POP EBP
RET
MOV EAX,0xfe10
ADD ESP,0x2c
POP EBX
POP ESI
POP EDI
POP EBP
JMP 0x00051360
CMP byte ptr [EBX + 0x8],0x0
JZ 0x000517d8
TEST CX,CX
JZ 0x00051647
MOV EAX,dword ptr [ESP + 0x14]
MOVZX EDI,word ptr [EAX]
ROL DI,0x8
MOVZX EDI,DI
CMP EDI,dword ptr [ESP + 0xc]
JG 0x00051818
CMP dword ptr [ESP + 0x10],EDI
JG 0x00051818
XOR EBP,EBP
JMP 0x00051792
MOVZX EAX,word ptr [EBX + 0x16]
ADD EBP,0x1
CMP EAX,EBP
JLE 0x00051830
MOV EAX,dword ptr [ESP + 0x14]
MOVZX EDI,word ptr [EAX + EBP*0x2]
ROL DI,0x8
MOVZX EDI,DI
CMP dword ptr [ESP + 0x10],EDI
JG 0x00051818
CMP EDI,dword ptr [ESP + 0xc]
JG 0x00051818
SUB ESP,0x8
LEA EAX,[ESI + EDI*0x1]
PUSH EAX
PUSH EBX
CALL dword ptr [EBX + 0x4c]
MOVZX EAX,AX
ADD ESP,0x10
ADD EDI,EAX
CMP EDI,dword ptr [ESP + 0x8]
JLE 0x00051760
ADD ESP,0x2c
MOV EAX,0xfddf
POP EBX
POP ESI
POP EDI
POP EBP
JMP 0x00051360
ADD ESP,0x2c
MOV EAX,0xfdab
POP EBX
POP ESI
POP EDI
POP EBP
JMP 0x00051360
LEA EAX,[EDX + -0x5]
MOV dword ptr [ESP + 0xc],EAX
TEST CX,CX
JNZ 0x00051733
LEA ESI,[ESI]
NOP
ADD dword ptr [ESP + 0xc],0x1
JMP 0x00051647
ADD ESP,0x2c
MOV EAX,0xfdf6
POP EBX
POP ESI
POP EDI
POP EBP
JMP 0x00051360
ADD ESP,0x2c
MOV EAX,0xfdda
POP EBX
POP ESI
POP EDI
POP EBP
JMP 0x00051360
CMP byte ptr [EBX + 0x8],0x0
JNZ 0x00051647
JMP 0x000517f0
MOV EAX,0xfdf1
JMP 0x0005170d
MOV EAX,0xfe00
JMP 0x0005170d
(translation_unit "undefined4 __regparm3 FUN_00051560(undefined1 *param_1)\n\n{\n  ushort *puVar1;\n  uint uVar2;\n  byte bVar3;\n  undefined1 uVar4;\n  undefined1 uVar5;\n  short sVar6;\n  int iVar7;\n  uint uVar8;\n  ushort uVar9;\n  uint uVar10;\n  int iVar11;\n  uint uVar12;\n  undefined4 uVar13;\n  uint uVar14;\n  uint uVar15;\n  int iVar16;\n  int local_30;\n  short local_2c;\n  \n  bVar3 = param_1[9];\n  iVar7 = *(int *)(param_1 + 0x38);\n  iVar16 = *(int *)(param_1 + 0x34);\n  uVar10 = (uint)bVar3;\n  iVar11 = FUN_000513a0();\n  if (iVar11 != 0) {\n    uVar13 = FUN_00051360();\n    return uVar13;\n  }\n  sVar6 = *(short *)(iVar16 + 0x20);\n  param_1[0xc] = 0;\n  iVar11 = bVar3 + 8 + (uint)(byte)param_1[10];\n  *(short *)(param_1 + 0x18) = sVar6 + -1;\n  uVar8 = *(uint *)(iVar16 + 0x24);\n  *(short *)(param_1 + 0x12) = (short)iVar11;\n  *(uint *)(param_1 + 0x44) = (uint)(byte)param_1[10] + iVar7;\n  *(uint *)(param_1 + 0x3c) = uVar8 + iVar7;\n  puVar1 = (ushort *)(iVar7 + iVar11);\n  *(ushort **)(param_1 + 0x40) = puVar1;\n  uVar4 = *(undefined1 *)(iVar7 + 5 + uVar10);\n  uVar5 = *(undefined1 *)(iVar7 + 6 + uVar10);\n  uVar9 = CONCAT11(*(undefined1 *)(iVar7 + 3 + uVar10),*(undefined1 *)(iVar7 + 4 + uVar10));\n  *(ushort *)(param_1 + 0x16) = uVar9;\n  if ((*(int *)(iVar16 + 0x20) - 8U) / 6 < (uint)uVar9) goto LAB_0005170d;\n  uVar2 = iVar11 + (uint)uVar9 * 2;\n  local_30 = uVar8 - 4;\n  if ((*(byte *)(*(int *)(iVar16 + 4) + 0x1e) & 0x20) != 0) {\n    if (param_1[8] == '\0') {\n      local_30 = uVar8 - 5;\n      if (uVar9 != 0) goto LAB_00051733;\nLAB_000517f0:\n      local_30 = local_30 + 1;\n    }\n    else if (uVar9 != 0) {\nLAB_00051733:\n      uVar12 = (uint)(ushort)(*puVar1 << 8 | *puVar1 >> 8);\n      if (((int)uVar12 <= local_30) && (uVar2 <= uVar12)) {\n        iVar16 = 0;\n        do {\n          uVar14 = (**(code **)(param_1 + 0x4c))(param_1,iVar7 + uVar12);\n          if ((int)uVar8 < (int)(uVar12 + (uVar14 & 0xffff))) {\n            uVar13 = FUN_00051360();\n            return uVar13;\n          }\n          iVar16 = iVar16 + 1;\n          if ((int)(uint)*(ushort *)(param_1 + 0x16) <= iVar16) {\n            if (param_1[8] == '\0') goto LAB_000517f0;\n            goto LAB_00051647;\n          }\n          uVar12 = (uint)(ushort)(puVar1[iVar16] << 8 | puVar1[iVar16] >> 8);\n        } while ((uVar2 <= uVar12) && ((int)uVar12 <= local_30));\n      }\n      uVar13 = FUN_00051360();\n      return uVar13;\n    }\n  }\nLAB_00051647:\n  iVar16 = (CONCAT11(uVar4,uVar5) - 1 & 0xffff) + 1 + (uint)*(byte *)(iVar7 + 7 + uVar10);\n  uVar10 = (uint)CONCAT11(*(undefined1 *)(iVar7 + 1 + uVar10),*(undefined1 *)(iVar7 + 2 + uVar10));\n  if (uVar10 != 0) {\n    if (uVar10 < uVar2) goto LAB_0005170d;\n    do {\n      if (local_30 < (int)uVar10) {\n        uVar13 = FUN_00051360();\n        return uVar13;\n      }\n      uVar12 = (uint)CONCAT11(*(undefined1 *)(iVar7 + uVar10),*(undefined1 *)(iVar7 + 1 + uVar10));\n      uVar14 = (uint)CONCAT11(*(undefined1 *)(iVar7 + 2 + uVar10),\n                              *(undefined1 *)(iVar7 + 3 + uVar10));\n      uVar15 = uVar10 + uVar14;\n      iVar16 = iVar16 + uVar14;\n      uVar10 = uVar12;\n    } while (uVar15 + 3 < uVar12);\n    if ((uVar12 != 0) || (uVar8 < uVar15)) goto LAB_0005170d;\n  }\n  if (iVar16 <= (int)uVar8) {\n    local_2c = (short)uVar2;\n    *param_1 = 1;\n    *(short *)(param_1 + 0x14) = (short)iVar16 - local_2c;\n    return 0;\n  }\nLAB_0005170d:\n  uVar13 = FUN_00051360();\n  return uVar13;\n}\n\n" (function_definition "undefined4 __regparm3 FUN_00051560(undefined1 *param_1)\n\n{\n  ushort *puVar1;\n  uint uVar2;\n  byte bVar3;\n  undefined1 uVar4;\n  undefined1 uVar5;\n  short sVar6;\n  int iVar7;\n  uint uVar8;\n  ushort uVar9;\n  uint uVar10;\n  int iVar11;\n  uint uVar12;\n  undefined4 uVar13;\n  uint uVar14;\n  uint uVar15;\n  int iVar16;\n  int local_30;\n  short local_2c;\n  \n  bVar3 = param_1[9];\n  iVar7 = *(int *)(param_1 + 0x38);\n  iVar16 = *(int *)(param_1 + 0x34);\n  uVar10 = (uint)bVar3;\n  iVar11 = FUN_000513a0();\n  if (iVar11 != 0) {\n    uVar13 = FUN_00051360();\n    return uVar13;\n  }\n  sVar6 = *(short *)(iVar16 + 0x20);\n  param_1[0xc] = 0;\n  iVar11 = bVar3 + 8 + (uint)(byte)param_1[10];\n  *(short *)(param_1 + 0x18) = sVar6 + -1;\n  uVar8 = *(uint *)(iVar16 + 0x24);\n  *(short *)(param_1 + 0x12) = (short)iVar11;\n  *(uint *)(param_1 + 0x44) = (uint)(byte)param_1[10] + iVar7;\n  *(uint *)(param_1 + 0x3c) = uVar8 + iVar7;\n  puVar1 = (ushort *)(iVar7 + iVar11);\n  *(ushort **)(param_1 + 0x40) = puVar1;\n  uVar4 = *(undefined1 *)(iVar7 + 5 + uVar10);\n  uVar5 = *(undefined1 *)(iVar7 + 6 + uVar10);\n  uVar9 = CONCAT11(*(undefined1 *)(iVar7 + 3 + uVar10),*(undefined1 *)(iVar7 + 4 + uVar10));\n  *(ushort *)(param_1 + 0x16) = uVar9;\n  if ((*(int *)(iVar16 + 0x20) - 8U) / 6 < (uint)uVar9) goto LAB_0005170d;\n  uVar2 = iVar11 + (uint)uVar9 * 2;\n  local_30 = uVar8 - 4;\n  if ((*(byte *)(*(int *)(iVar16 + 4) + 0x1e) & 0x20) != 0) {\n    if (param_1[8] == '\0') {\n      local_30 = uVar8 - 5;\n      if (uVar9 != 0) goto LAB_00051733;\nLAB_000517f0:\n      local_30 = local_30 + 1;\n    }\n    else if (uVar9 != 0) {\nLAB_00051733:\n      uVar12 = (uint)(ushort)(*puVar1 << 8 | *puVar1 >> 8);\n      if (((int)uVar12 <= local_30) && (uVar2 <= uVar12)) {\n        iVar16 = 0;\n        do {\n          uVar14 = (**(code **)(param_1 + 0x4c))(param_1,iVar7 + uVar12);\n          if ((int)uVar8 < (int)(uVar12 + (uVar14 & 0xffff))) {\n            uVar13 = FUN_00051360();\n            return uVar13;\n          }\n          iVar16 = iVar16 + 1;\n          if ((int)(uint)*(ushort *)(param_1 + 0x16) <= iVar16) {\n            if (param_1[8] == '\0') goto LAB_000517f0;\n            goto LAB_00051647;\n          }\n          uVar12 = (uint)(ushort)(puVar1[iVar16] << 8 | puVar1[iVar16] >> 8);\n        } while ((uVar2 <= uVar12) && ((int)uVar12 <= local_30));\n      }\n      uVar13 = FUN_00051360();\n      return uVar13;\n    }\n  }\nLAB_00051647:\n  iVar16 = (CONCAT11(uVar4,uVar5) - 1 & 0xffff) + 1 + (uint)*(byte *)(iVar7 + 7 + uVar10);\n  uVar10 = (uint)CONCAT11(*(undefined1 *)(iVar7 + 1 + uVar10),*(undefined1 *)(iVar7 + 2 + uVar10));\n  if (uVar10 != 0) {\n    if (uVar10 < uVar2) goto LAB_0005170d;\n    do {\n      if (local_30 < (int)uVar10) {\n        uVar13 = FUN_00051360();\n        return uVar13;\n      }\n      uVar12 = (uint)CONCAT11(*(undefined1 *)(iVar7 + uVar10),*(undefined1 *)(iVar7 + 1 + uVar10));\n      uVar14 = (uint)CONCAT11(*(undefined1 *)(iVar7 + 2 + uVar10),\n                              *(undefined1 *)(iVar7 + 3 + uVar10));\n      uVar15 = uVar10 + uVar14;\n      iVar16 = iVar16 + uVar14;\n      uVar10 = uVar12;\n    } while (uVar15 + 3 < uVar12);\n    if ((uVar12 != 0) || (uVar8 < uVar15)) goto LAB_0005170d;\n  }\n  if (iVar16 <= (int)uVar8) {\n    local_2c = (short)uVar2;\n    *param_1 = 1;\n    *(short *)(param_1 + 0x14) = (short)iVar16 - local_2c;\n    return 0;\n  }\nLAB_0005170d:\n  uVar13 = FUN_00051360();\n  return uVar13;\n}" type_identifier (ERROR "__regparm3" identifier) (function_declarator "FUN_00051560(undefined1 *param_1)" identifier (parameter_list "(undefined1 *param_1)" ( (parameter_declaration "undefined1 *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) ))) (compound_statement "{\n  ushort *puVar1;\n  uint uVar2;\n  byte bVar3;\n  undefined1 uVar4;\n  undefined1 uVar5;\n  short sVar6;\n  int iVar7;\n  uint uVar8;\n  ushort uVar9;\n  uint uVar10;\n  int iVar11;\n  uint uVar12;\n  undefined4 uVar13;\n  uint uVar14;\n  uint uVar15;\n  int iVar16;\n  int local_30;\n  short local_2c;\n  \n  bVar3 = param_1[9];\n  iVar7 = *(int *)(param_1 + 0x38);\n  iVar16 = *(int *)(param_1 + 0x34);\n  uVar10 = (uint)bVar3;\n  iVar11 = FUN_000513a0();\n  if (iVar11 != 0) {\n    uVar13 = FUN_00051360();\n    return uVar13;\n  }\n  sVar6 = *(short *)(iVar16 + 0x20);\n  param_1[0xc] = 0;\n  iVar11 = bVar3 + 8 + (uint)(byte)param_1[10];\n  *(short *)(param_1 + 0x18) = sVar6 + -1;\n  uVar8 = *(uint *)(iVar16 + 0x24);\n  *(short *)(param_1 + 0x12) = (short)iVar11;\n  *(uint *)(param_1 + 0x44) = (uint)(byte)param_1[10] + iVar7;\n  *(uint *)(param_1 + 0x3c) = uVar8 + iVar7;\n  puVar1 = (ushort *)(iVar7 + iVar11);\n  *(ushort **)(param_1 + 0x40) = puVar1;\n  uVar4 = *(undefined1 *)(iVar7 + 5 + uVar10);\n  uVar5 = *(undefined1 *)(iVar7 + 6 + uVar10);\n  uVar9 = CONCAT11(*(undefined1 *)(iVar7 + 3 + uVar10),*(undefined1 *)(iVar7 + 4 + uVar10));\n  *(ushort *)(param_1 + 0x16) = uVar9;\n  if ((*(int *)(iVar16 + 0x20) - 8U) / 6 < (uint)uVar9) goto LAB_0005170d;\n  uVar2 = iVar11 + (uint)uVar9 * 2;\n  local_30 = uVar8 - 4;\n  if ((*(byte *)(*(int *)(iVar16 + 4) + 0x1e) & 0x20) != 0) {\n    if (param_1[8] == '\0') {\n      local_30 = uVar8 - 5;\n      if (uVar9 != 0) goto LAB_00051733;\nLAB_000517f0:\n      local_30 = local_30 + 1;\n    }\n    else if (uVar9 != 0) {\nLAB_00051733:\n      uVar12 = (uint)(ushort)(*puVar1 << 8 | *puVar1 >> 8);\n      if (((int)uVar12 <= local_30) && (uVar2 <= uVar12)) {\n        iVar16 = 0;\n        do {\n          uVar14 = (**(code **)(param_1 + 0x4c))(param_1,iVar7 + uVar12);\n          if ((int)uVar8 < (int)(uVar12 + (uVar14 & 0xffff))) {\n            uVar13 = FUN_00051360();\n            return uVar13;\n          }\n          iVar16 = iVar16 + 1;\n          if ((int)(uint)*(ushort *)(param_1 + 0x16) <= iVar16) {\n            if (param_1[8] == '\0') goto LAB_000517f0;\n            goto LAB_00051647;\n          }\n          uVar12 = (uint)(ushort)(puVar1[iVar16] << 8 | puVar1[iVar16] >> 8);\n        } while ((uVar2 <= uVar12) && ((int)uVar12 <= local_30));\n      }\n      uVar13 = FUN_00051360();\n      return uVar13;\n    }\n  }\nLAB_00051647:\n  iVar16 = (CONCAT11(uVar4,uVar5) - 1 & 0xffff) + 1 + (uint)*(byte *)(iVar7 + 7 + uVar10);\n  uVar10 = (uint)CONCAT11(*(undefined1 *)(iVar7 + 1 + uVar10),*(undefined1 *)(iVar7 + 2 + uVar10));\n  if (uVar10 != 0) {\n    if (uVar10 < uVar2) goto LAB_0005170d;\n    do {\n      if (local_30 < (int)uVar10) {\n        uVar13 = FUN_00051360();\n        return uVar13;\n      }\n      uVar12 = (uint)CONCAT11(*(undefined1 *)(iVar7 + uVar10),*(undefined1 *)(iVar7 + 1 + uVar10));\n      uVar14 = (uint)CONCAT11(*(undefined1 *)(iVar7 + 2 + uVar10),\n                              *(undefined1 *)(iVar7 + 3 + uVar10));\n      uVar15 = uVar10 + uVar14;\n      iVar16 = iVar16 + uVar14;\n      uVar10 = uVar12;\n    } while (uVar15 + 3 < uVar12);\n    if ((uVar12 != 0) || (uVar8 < uVar15)) goto LAB_0005170d;\n  }\n  if (iVar16 <= (int)uVar8) {\n    local_2c = (short)uVar2;\n    *param_1 = 1;\n    *(short *)(param_1 + 0x14) = (short)iVar16 - local_2c;\n    return 0;\n  }\nLAB_0005170d:\n  uVar13 = FUN_00051360();\n  return uVar13;\n}" { (declaration "ushort *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "byte bVar3;" type_identifier identifier ;) (declaration "undefined1 uVar4;" type_identifier identifier ;) (declaration "undefined1 uVar5;" type_identifier identifier ;) (declaration "short sVar6;" (sized_type_specifier "short" short) identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "uint uVar8;" type_identifier identifier ;) (declaration "ushort uVar9;" type_identifier identifier ;) (declaration "uint uVar10;" type_identifier identifier ;) (declaration "int iVar11;" primitive_type identifier ;) (declaration "uint uVar12;" type_identifier identifier ;) (declaration "undefined4 uVar13;" type_identifier identifier ;) (declaration "uint uVar14;" type_identifier identifier ;) (declaration "uint uVar15;" type_identifier identifier ;) (declaration "int iVar16;" primitive_type identifier ;) (declaration "int local_30;" primitive_type identifier ;) (declaration "short local_2c;" (sized_type_specifier "short" short) identifier ;) (expression_statement "bVar3 = param_1[9];" (assignment_expression "bVar3 = param_1[9]" identifier = (subscript_expression "param_1[9]" identifier [ number_literal ])) ;) (expression_statement "iVar7 = *(int *)(param_1 + 0x38);" (assignment_expression "iVar7 = *(int *)(param_1 + 0x38)" identifier = (pointer_expression "*(int *)(param_1 + 0x38)" * (cast_expression "(int *)(param_1 + 0x38)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x38)" ( (binary_expression "param_1 + 0x38" identifier + number_literal) ))))) ;) (expression_statement "iVar16 = *(int *)(param_1 + 0x34);" (assignment_expression "iVar16 = *(int *)(param_1 + 0x34)" identifier = (pointer_expression "*(int *)(param_1 + 0x34)" * (cast_expression "(int *)(param_1 + 0x34)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x34)" ( (binary_expression "param_1 + 0x34" identifier + number_literal) ))))) ;) (expression_statement "uVar10 = (uint)bVar3;" (assignment_expression "uVar10 = (uint)bVar3" identifier = (cast_expression "(uint)bVar3" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "iVar11 = FUN_000513a0();" (assignment_expression "iVar11 = FUN_000513a0()" identifier = (call_expression "FUN_000513a0()" identifier (argument_list "()" ( )))) ;) (if_statement "if (iVar11 != 0) {\n    uVar13 = FUN_00051360();\n    return uVar13;\n  }" if (parenthesized_expression "(iVar11 != 0)" ( (binary_expression "iVar11 != 0" identifier != number_literal) )) (compound_statement "{\n    uVar13 = FUN_00051360();\n    return uVar13;\n  }" { (expression_statement "uVar13 = FUN_00051360();" (assignment_expression "uVar13 = FUN_00051360()" identifier = (call_expression "FUN_00051360()" identifier (argument_list "()" ( )))) ;) (return_statement "return uVar13;" return identifier ;) })) (expression_statement "sVar6 = *(short *)(iVar16 + 0x20);" (assignment_expression "sVar6 = *(short *)(iVar16 + 0x20)" identifier = (pointer_expression "*(short *)(iVar16 + 0x20)" * (cast_expression "(short *)(iVar16 + 0x20)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar16 + 0x20)" ( (binary_expression "iVar16 + 0x20" identifier + number_literal) ))))) ;) (expression_statement "param_1[0xc] = 0;" (assignment_expression "param_1[0xc] = 0" (subscript_expression "param_1[0xc]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "iVar11 = bVar3 + 8 + (uint)(byte)param_1[10];" (assignment_expression "iVar11 = bVar3 + 8 + (uint)(byte)param_1[10]" identifier = (binary_expression "bVar3 + 8 + (uint)(byte)param_1[10]" (binary_expression "bVar3 + 8" identifier + number_literal) + (cast_expression "(uint)(byte)param_1[10]" ( (type_descriptor "uint" type_identifier) ) (cast_expression "(byte)param_1[10]" ( (type_descriptor "byte" type_identifier) ) (subscript_expression "param_1[10]" identifier [ number_literal ]))))) ;) (expression_statement "*(short *)(param_1 + 0x18) = sVar6 + -1;" (assignment_expression "*(short *)(param_1 + 0x18) = sVar6 + -1" (pointer_expression "*(short *)(param_1 + 0x18)" * (cast_expression "(short *)(param_1 + 0x18)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) )))) = (binary_expression "sVar6 + -1" identifier + number_literal)) ;) (expression_statement "uVar8 = *(uint *)(iVar16 + 0x24);" (assignment_expression "uVar8 = *(uint *)(iVar16 + 0x24)" identifier = (pointer_expression "*(uint *)(iVar16 + 0x24)" * (cast_expression "(uint *)(iVar16 + 0x24)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar16 + 0x24)" ( (binary_expression "iVar16 + 0x24" identifier + number_literal) ))))) ;) (expression_statement "*(short *)(param_1 + 0x12) = (short)iVar11;" (assignment_expression "*(short *)(param_1 + 0x12) = (short)iVar11" (pointer_expression "*(short *)(param_1 + 0x12)" * (cast_expression "(short *)(param_1 + 0x12)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x12)" ( (binary_expression "param_1 + 0x12" identifier + number_literal) )))) = (cast_expression "(short)iVar11" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) identifier)) ;) (expression_statement "*(uint *)(param_1 + 0x44) = (uint)(byte)param_1[10] + iVar7;" (assignment_expression "*(uint *)(param_1 + 0x44) = (uint)(byte)param_1[10] + iVar7" (pointer_expression "*(uint *)(param_1 + 0x44)" * (cast_expression "(uint *)(param_1 + 0x44)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x44)" ( (binary_expression "param_1 + 0x44" identifier + number_literal) )))) = (binary_expression "(uint)(byte)param_1[10] + iVar7" (cast_expression "(uint)(byte)param_1[10]" ( (type_descriptor "uint" type_identifier) ) (cast_expression "(byte)param_1[10]" ( (type_descriptor "byte" type_identifier) ) (subscript_expression "param_1[10]" identifier [ number_literal ]))) + identifier)) ;) (expression_statement "*(uint *)(param_1 + 0x3c) = uVar8 + iVar7;" (assignment_expression "*(uint *)(param_1 + 0x3c) = uVar8 + iVar7" (pointer_expression "*(uint *)(param_1 + 0x3c)" * (cast_expression "(uint *)(param_1 + 0x3c)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x3c)" ( (binary_expression "param_1 + 0x3c" identifier + number_literal) )))) = (binary_expression "uVar8 + iVar7" identifier + identifier)) ;) (expression_statement "puVar1 = (ushort *)(iVar7 + iVar11);" (assignment_expression "puVar1 = (ushort *)(iVar7 + iVar11)" identifier = (cast_expression "(ushort *)(iVar7 + iVar11)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + iVar11)" ( (binary_expression "iVar7 + iVar11" identifier + identifier) )))) ;) (expression_statement "*(ushort **)(param_1 + 0x40) = puVar1;" (assignment_expression "*(ushort **)(param_1 + 0x40) = puVar1" (pointer_expression "*(ushort **)(param_1 + 0x40)" * (cast_expression "(ushort **)(param_1 + 0x40)" ( (type_descriptor "ushort **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) )))) = identifier) ;) (expression_statement "uVar4 = *(undefined1 *)(iVar7 + 5 + uVar10);" (assignment_expression "uVar4 = *(undefined1 *)(iVar7 + 5 + uVar10)" identifier = (pointer_expression "*(undefined1 *)(iVar7 + 5 + uVar10)" * (cast_expression "(undefined1 *)(iVar7 + 5 + uVar10)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 5 + uVar10)" ( (binary_expression "iVar7 + 5 + uVar10" (binary_expression "iVar7 + 5" identifier + number_literal) + identifier) ))))) ;) (expression_statement "uVar5 = *(undefined1 *)(iVar7 + 6 + uVar10);" (assignment_expression "uVar5 = *(undefined1 *)(iVar7 + 6 + uVar10)" identifier = (pointer_expression "*(undefined1 *)(iVar7 + 6 + uVar10)" * (cast_expression "(undefined1 *)(iVar7 + 6 + uVar10)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 6 + uVar10)" ( (binary_expression "iVar7 + 6 + uVar10" (binary_expression "iVar7 + 6" identifier + number_literal) + identifier) ))))) ;) (expression_statement "uVar9 = CONCAT11(*(undefined1 *)(iVar7 + 3 + uVar10),*(undefined1 *)(iVar7 + 4 + uVar10));" (assignment_expression "uVar9 = CONCAT11(*(undefined1 *)(iVar7 + 3 + uVar10),*(undefined1 *)(iVar7 + 4 + uVar10))" identifier = (call_expression "CONCAT11(*(undefined1 *)(iVar7 + 3 + uVar10),*(undefined1 *)(iVar7 + 4 + uVar10))" identifier (argument_list "(*(undefined1 *)(iVar7 + 3 + uVar10),*(undefined1 *)(iVar7 + 4 + uVar10))" ( (pointer_expression "*(undefined1 *)(iVar7 + 3 + uVar10)" * (cast_expression "(undefined1 *)(iVar7 + 3 + uVar10)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 3 + uVar10)" ( (binary_expression "iVar7 + 3 + uVar10" (binary_expression "iVar7 + 3" identifier + number_literal) + identifier) )))) , (pointer_expression "*(undefined1 *)(iVar7 + 4 + uVar10)" * (cast_expression "(undefined1 *)(iVar7 + 4 + uVar10)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 4 + uVar10)" ( (binary_expression "iVar7 + 4 + uVar10" (binary_expression "iVar7 + 4" identifier + number_literal) + identifier) )))) )))) ;) (expression_statement "*(ushort *)(param_1 + 0x16) = uVar9;" (assignment_expression "*(ushort *)(param_1 + 0x16) = uVar9" (pointer_expression "*(ushort *)(param_1 + 0x16)" * (cast_expression "(ushort *)(param_1 + 0x16)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16)" ( (binary_expression "param_1 + 0x16" identifier + number_literal) )))) = identifier) ;) (if_statement "if ((*(int *)(iVar16 + 0x20) - 8U) / 6 < (uint)uVar9) goto LAB_0005170d;" if (parenthesized_expression "((*(int *)(iVar16 + 0x20) - 8U) / 6 < (uint)uVar9)" ( (binary_expression "(*(int *)(iVar16 + 0x20) - 8U) / 6 < (uint)uVar9" (binary_expression "(*(int *)(iVar16 + 0x20) - 8U) / 6" (parenthesized_expression "(*(int *)(iVar16 + 0x20) - 8U)" ( (binary_expression "*(int *)(iVar16 + 0x20) - 8U" (pointer_expression "*(int *)(iVar16 + 0x20)" * (cast_expression "(int *)(iVar16 + 0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar16 + 0x20)" ( (binary_expression "iVar16 + 0x20" identifier + number_literal) )))) - number_literal) )) / number_literal) < (cast_expression "(uint)uVar9" ( (type_descriptor "uint" type_identifier) ) identifier)) )) (goto_statement "goto LAB_0005170d;" goto statement_identifier ;)) (expression_statement "uVar2 = iVar11 + (uint)uVar9 * 2;" (assignment_expression "uVar2 = iVar11 + (uint)uVar9 * 2" identifier = (binary_expression "iVar11 + (uint)uVar9 * 2" identifier + (binary_expression "(uint)uVar9 * 2" (cast_expression "(uint)uVar9" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal))) ;) (expression_statement "local_30 = uVar8 - 4;" (assignment_expression "local_30 = uVar8 - 4" identifier = (binary_expression "uVar8 - 4" identifier - number_literal)) ;) (if_statement "if ((*(byte *)(*(int *)(iVar16 + 4) + 0x1e) & 0x20) != 0) {\n    if (param_1[8] == '\0') {\n      local_30 = uVar8 - 5;\n      if (uVar9 != 0) goto LAB_00051733;\nLAB_000517f0:\n      local_30 = local_30 + 1;\n    }\n    else if (uVar9 != 0) {\nLAB_00051733:\n      uVar12 = (uint)(ushort)(*puVar1 << 8 | *puVar1 >> 8);\n      if (((int)uVar12 <= local_30) && (uVar2 <= uVar12)) {\n        iVar16 = 0;\n        do {\n          uVar14 = (**(code **)(param_1 + 0x4c))(param_1,iVar7 + uVar12);\n          if ((int)uVar8 < (int)(uVar12 + (uVar14 & 0xffff))) {\n            uVar13 = FUN_00051360();\n            return uVar13;\n          }\n          iVar16 = iVar16 + 1;\n          if ((int)(uint)*(ushort *)(param_1 + 0x16) <= iVar16) {\n            if (param_1[8] == '\0') goto LAB_000517f0;\n            goto LAB_00051647;\n          }\n          uVar12 = (uint)(ushort)(puVar1[iVar16] << 8 | puVar1[iVar16] >> 8);\n        } while ((uVar2 <= uVar12) && ((int)uVar12 <= local_30));\n      }\n      uVar13 = FUN_00051360();\n      return uVar13;\n    }\n  }" if (parenthesized_expression "((*(byte *)(*(int *)(iVar16 + 4) + 0x1e) & 0x20) != 0)" ( (binary_expression "(*(byte *)(*(int *)(iVar16 + 4) + 0x1e) & 0x20) != 0" (parenthesized_expression "(*(byte *)(*(int *)(iVar16 + 4) + 0x1e) & 0x20)" ( (binary_expression "*(byte *)(*(int *)(iVar16 + 4) + 0x1e) & 0x20" (pointer_expression "*(byte *)(*(int *)(iVar16 + 4) + 0x1e)" * (cast_expression "(byte *)(*(int *)(iVar16 + 4) + 0x1e)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(iVar16 + 4) + 0x1e)" ( (binary_expression "*(int *)(iVar16 + 4) + 0x1e" (pointer_expression "*(int *)(iVar16 + 4)" * (cast_expression "(int *)(iVar16 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar16 + 4)" ( (binary_expression "iVar16 + 4" identifier + number_literal) )))) + number_literal) )))) & number_literal) )) != number_literal) )) (compound_statement "{\n    if (param_1[8] == '\0') {\n      local_30 = uVar8 - 5;\n      if (uVar9 != 0) goto LAB_00051733;\nLAB_000517f0:\n      local_30 = local_30 + 1;\n    }\n    else if (uVar9 != 0) {\nLAB_00051733:\n      uVar12 = (uint)(ushort)(*puVar1 << 8 | *puVar1 >> 8);\n      if (((int)uVar12 <= local_30) && (uVar2 <= uVar12)) {\n        iVar16 = 0;\n        do {\n          uVar14 = (**(code **)(param_1 + 0x4c))(param_1,iVar7 + uVar12);\n          if ((int)uVar8 < (int)(uVar12 + (uVar14 & 0xffff))) {\n            uVar13 = FUN_00051360();\n            return uVar13;\n          }\n          iVar16 = iVar16 + 1;\n          if ((int)(uint)*(ushort *)(param_1 + 0x16) <= iVar16) {\n            if (param_1[8] == '\0') goto LAB_000517f0;\n            goto LAB_00051647;\n          }\n          uVar12 = (uint)(ushort)(puVar1[iVar16] << 8 | puVar1[iVar16] >> 8);\n        } while ((uVar2 <= uVar12) && ((int)uVar12 <= local_30));\n      }\n      uVar13 = FUN_00051360();\n      return uVar13;\n    }\n  }" { (if_statement "if (param_1[8] == '\0') {\n      local_30 = uVar8 - 5;\n      if (uVar9 != 0) goto LAB_00051733;\nLAB_000517f0:\n      local_30 = local_30 + 1;\n    }\n    else if (uVar9 != 0) {\nLAB_00051733:\n      uVar12 = (uint)(ushort)(*puVar1 << 8 | *puVar1 >> 8);\n      if (((int)uVar12 <= local_30) && (uVar2 <= uVar12)) {\n        iVar16 = 0;\n        do {\n          uVar14 = (**(code **)(param_1 + 0x4c))(param_1,iVar7 + uVar12);\n          if ((int)uVar8 < (int)(uVar12 + (uVar14 & 0xffff))) {\n            uVar13 = FUN_00051360();\n            return uVar13;\n          }\n          iVar16 = iVar16 + 1;\n          if ((int)(uint)*(ushort *)(param_1 + 0x16) <= iVar16) {\n            if (param_1[8] == '\0') goto LAB_000517f0;\n            goto LAB_00051647;\n          }\n          uVar12 = (uint)(ushort)(puVar1[iVar16] << 8 | puVar1[iVar16] >> 8);\n        } while ((uVar2 <= uVar12) && ((int)uVar12 <= local_30));\n      }\n      uVar13 = FUN_00051360();\n      return uVar13;\n    }" if (parenthesized_expression "(param_1[8] == '\0')" ( (binary_expression "param_1[8] == '\0'" (subscript_expression "param_1[8]" identifier [ number_literal ]) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      local_30 = uVar8 - 5;\n      if (uVar9 != 0) goto LAB_00051733;\nLAB_000517f0:\n      local_30 = local_30 + 1;\n    }" { (expression_statement "local_30 = uVar8 - 5;" (assignment_expression "local_30 = uVar8 - 5" identifier = (binary_expression "uVar8 - 5" identifier - number_literal)) ;) (if_statement "if (uVar9 != 0) goto LAB_00051733;" if (parenthesized_expression "(uVar9 != 0)" ( (binary_expression "uVar9 != 0" identifier != number_literal) )) (goto_statement "goto LAB_00051733;" goto statement_identifier ;)) (labeled_statement "LAB_000517f0:\n      local_30 = local_30 + 1;" statement_identifier : (expression_statement "local_30 = local_30 + 1;" (assignment_expression "local_30 = local_30 + 1" identifier = (binary_expression "local_30 + 1" identifier + number_literal)) ;)) }) (else_clause "else if (uVar9 != 0) {\nLAB_00051733:\n      uVar12 = (uint)(ushort)(*puVar1 << 8 | *puVar1 >> 8);\n      if (((int)uVar12 <= local_30) && (uVar2 <= uVar12)) {\n        iVar16 = 0;\n        do {\n          uVar14 = (**(code **)(param_1 + 0x4c))(param_1,iVar7 + uVar12);\n          if ((int)uVar8 < (int)(uVar12 + (uVar14 & 0xffff))) {\n            uVar13 = FUN_00051360();\n            return uVar13;\n          }\n          iVar16 = iVar16 + 1;\n          if ((int)(uint)*(ushort *)(param_1 + 0x16) <= iVar16) {\n            if (param_1[8] == '\0') goto LAB_000517f0;\n            goto LAB_00051647;\n          }\n          uVar12 = (uint)(ushort)(puVar1[iVar16] << 8 | puVar1[iVar16] >> 8);\n        } while ((uVar2 <= uVar12) && ((int)uVar12 <= local_30));\n      }\n      uVar13 = FUN_00051360();\n      return uVar13;\n    }" else (if_statement "if (uVar9 != 0) {\nLAB_00051733:\n      uVar12 = (uint)(ushort)(*puVar1 << 8 | *puVar1 >> 8);\n      if (((int)uVar12 <= local_30) && (uVar2 <= uVar12)) {\n        iVar16 = 0;\n        do {\n          uVar14 = (**(code **)(param_1 + 0x4c))(param_1,iVar7 + uVar12);\n          if ((int)uVar8 < (int)(uVar12 + (uVar14 & 0xffff))) {\n            uVar13 = FUN_00051360();\n            return uVar13;\n          }\n          iVar16 = iVar16 + 1;\n          if ((int)(uint)*(ushort *)(param_1 + 0x16) <= iVar16) {\n            if (param_1[8] == '\0') goto LAB_000517f0;\n            goto LAB_00051647;\n          }\n          uVar12 = (uint)(ushort)(puVar1[iVar16] << 8 | puVar1[iVar16] >> 8);\n        } while ((uVar2 <= uVar12) && ((int)uVar12 <= local_30));\n      }\n      uVar13 = FUN_00051360();\n      return uVar13;\n    }" if (parenthesized_expression "(uVar9 != 0)" ( (binary_expression "uVar9 != 0" identifier != number_literal) )) (compound_statement "{\nLAB_00051733:\n      uVar12 = (uint)(ushort)(*puVar1 << 8 | *puVar1 >> 8);\n      if (((int)uVar12 <= local_30) && (uVar2 <= uVar12)) {\n        iVar16 = 0;\n        do {\n          uVar14 = (**(code **)(param_1 + 0x4c))(param_1,iVar7 + uVar12);\n          if ((int)uVar8 < (int)(uVar12 + (uVar14 & 0xffff))) {\n            uVar13 = FUN_00051360();\n            return uVar13;\n          }\n          iVar16 = iVar16 + 1;\n          if ((int)(uint)*(ushort *)(param_1 + 0x16) <= iVar16) {\n            if (param_1[8] == '\0') goto LAB_000517f0;\n            goto LAB_00051647;\n          }\n          uVar12 = (uint)(ushort)(puVar1[iVar16] << 8 | puVar1[iVar16] >> 8);\n        } while ((uVar2 <= uVar12) && ((int)uVar12 <= local_30));\n      }\n      uVar13 = FUN_00051360();\n      return uVar13;\n    }" { (labeled_statement "LAB_00051733:\n      uVar12 = (uint)(ushort)(*puVar1 << 8 | *puVar1 >> 8);" statement_identifier : (expression_statement "uVar12 = (uint)(ushort)(*puVar1 << 8 | *puVar1 >> 8);" (assignment_expression "uVar12 = (uint)(ushort)(*puVar1 << 8 | *puVar1 >> 8)" identifier = (call_expression "(uint)(ushort)(*puVar1 << 8 | *puVar1 >> 8)" (call_expression "(uint)(ushort)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(ushort)" ( identifier ))) (argument_list "(*puVar1 << 8 | *puVar1 >> 8)" ( (binary_expression "*puVar1 << 8 | *puVar1 >> 8" (binary_expression "*puVar1 << 8" (pointer_expression "*puVar1" * identifier) << number_literal) | (binary_expression "*puVar1 >> 8" (pointer_expression "*puVar1" * identifier) >> number_literal)) )))) ;)) (if_statement "if (((int)uVar12 <= local_30) && (uVar2 <= uVar12)) {\n        iVar16 = 0;\n        do {\n          uVar14 = (**(code **)(param_1 + 0x4c))(param_1,iVar7 + uVar12);\n          if ((int)uVar8 < (int)(uVar12 + (uVar14 & 0xffff))) {\n            uVar13 = FUN_00051360();\n            return uVar13;\n          }\n          iVar16 = iVar16 + 1;\n          if ((int)(uint)*(ushort *)(param_1 + 0x16) <= iVar16) {\n            if (param_1[8] == '\0') goto LAB_000517f0;\n            goto LAB_00051647;\n          }\n          uVar12 = (uint)(ushort)(puVar1[iVar16] << 8 | puVar1[iVar16] >> 8);\n        } while ((uVar2 <= uVar12) && ((int)uVar12 <= local_30));\n      }" if (parenthesized_expression "(((int)uVar12 <= local_30) && (uVar2 <= uVar12))" ( (binary_expression "((int)uVar12 <= local_30) && (uVar2 <= uVar12)" (parenthesized_expression "((int)uVar12 <= local_30)" ( (binary_expression "(int)uVar12 <= local_30" (cast_expression "(int)uVar12" ( (type_descriptor "int" primitive_type) ) identifier) <= identifier) )) && (parenthesized_expression "(uVar2 <= uVar12)" ( (binary_expression "uVar2 <= uVar12" identifier <= identifier) ))) )) (compound_statement "{\n        iVar16 = 0;\n        do {\n          uVar14 = (**(code **)(param_1 + 0x4c))(param_1,iVar7 + uVar12);\n          if ((int)uVar8 < (int)(uVar12 + (uVar14 & 0xffff))) {\n            uVar13 = FUN_00051360();\n            return uVar13;\n          }\n          iVar16 = iVar16 + 1;\n          if ((int)(uint)*(ushort *)(param_1 + 0x16) <= iVar16) {\n            if (param_1[8] == '\0') goto LAB_000517f0;\n            goto LAB_00051647;\n          }\n          uVar12 = (uint)(ushort)(puVar1[iVar16] << 8 | puVar1[iVar16] >> 8);\n        } while ((uVar2 <= uVar12) && ((int)uVar12 <= local_30));\n      }" { (expression_statement "iVar16 = 0;" (assignment_expression "iVar16 = 0" identifier = number_literal) ;) (do_statement "do {\n          uVar14 = (**(code **)(param_1 + 0x4c))(param_1,iVar7 + uVar12);\n          if ((int)uVar8 < (int)(uVar12 + (uVar14 & 0xffff))) {\n            uVar13 = FUN_00051360();\n            return uVar13;\n          }\n          iVar16 = iVar16 + 1;\n          if ((int)(uint)*(ushort *)(param_1 + 0x16) <= iVar16) {\n            if (param_1[8] == '\0') goto LAB_000517f0;\n            goto LAB_00051647;\n          }\n          uVar12 = (uint)(ushort)(puVar1[iVar16] << 8 | puVar1[iVar16] >> 8);\n        } while ((uVar2 <= uVar12) && ((int)uVar12 <= local_30));" do (compound_statement "{\n          uVar14 = (**(code **)(param_1 + 0x4c))(param_1,iVar7 + uVar12);\n          if ((int)uVar8 < (int)(uVar12 + (uVar14 & 0xffff))) {\n            uVar13 = FUN_00051360();\n            return uVar13;\n          }\n          iVar16 = iVar16 + 1;\n          if ((int)(uint)*(ushort *)(param_1 + 0x16) <= iVar16) {\n            if (param_1[8] == '\0') goto LAB_000517f0;\n            goto LAB_00051647;\n          }\n          uVar12 = (uint)(ushort)(puVar1[iVar16] << 8 | puVar1[iVar16] >> 8);\n        }" { (expression_statement "uVar14 = (**(code **)(param_1 + 0x4c))(param_1,iVar7 + uVar12);" (assignment_expression "uVar14 = (**(code **)(param_1 + 0x4c))(param_1,iVar7 + uVar12)" identifier = (call_expression "(**(code **)(param_1 + 0x4c))(param_1,iVar7 + uVar12)" (parenthesized_expression "(**(code **)(param_1 + 0x4c))" ( (pointer_expression "**(code **)(param_1 + 0x4c)" * (pointer_expression "*(code **)(param_1 + 0x4c)" * (cast_expression "(code **)(param_1 + 0x4c)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x4c)" ( (binary_expression "param_1 + 0x4c" identifier + number_literal) ))))) )) (argument_list "(param_1,iVar7 + uVar12)" ( identifier , (binary_expression "iVar7 + uVar12" identifier + identifier) )))) ;) (if_statement "if ((int)uVar8 < (int)(uVar12 + (uVar14 & 0xffff))) {\n            uVar13 = FUN_00051360();\n            return uVar13;\n          }" if (parenthesized_expression "((int)uVar8 < (int)(uVar12 + (uVar14 & 0xffff)))" ( (binary_expression "(int)uVar8 < (int)(uVar12 + (uVar14 & 0xffff))" (cast_expression "(int)uVar8" ( (type_descriptor "int" primitive_type) ) identifier) < (cast_expression "(int)(uVar12 + (uVar14 & 0xffff))" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar12 + (uVar14 & 0xffff))" ( (binary_expression "uVar12 + (uVar14 & 0xffff)" identifier + (parenthesized_expression "(uVar14 & 0xffff)" ( (binary_expression "uVar14 & 0xffff" identifier & number_literal) ))) )))) )) (compound_statement "{\n            uVar13 = FUN_00051360();\n            return uVar13;\n          }" { (expression_statement "uVar13 = FUN_00051360();" (assignment_expression "uVar13 = FUN_00051360()" identifier = (call_expression "FUN_00051360()" identifier (argument_list "()" ( )))) ;) (return_statement "return uVar13;" return identifier ;) })) (expression_statement "iVar16 = iVar16 + 1;" (assignment_expression "iVar16 = iVar16 + 1" identifier = (binary_expression "iVar16 + 1" identifier + number_literal)) ;) (if_statement "if ((int)(uint)*(ushort *)(param_1 + 0x16) <= iVar16) {\n            if (param_1[8] == '\0') goto LAB_000517f0;\n            goto LAB_00051647;\n          }" if (parenthesized_expression "((int)(uint)*(ushort *)(param_1 + 0x16) <= iVar16)" ( (binary_expression "(int)(uint)*(ushort *)(param_1 + 0x16) <= iVar16" (binary_expression "(int)(uint)*(ushort *)(param_1 + 0x16)" (cast_expression "(int)(uint)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uint)" ( identifier ))) * (cast_expression "(ushort *)(param_1 + 0x16)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16)" ( (binary_expression "param_1 + 0x16" identifier + number_literal) )))) <= identifier) )) (compound_statement "{\n            if (param_1[8] == '\0') goto LAB_000517f0;\n            goto LAB_00051647;\n          }" { (if_statement "if (param_1[8] == '\0') goto LAB_000517f0;" if (parenthesized_expression "(param_1[8] == '\0')" ( (binary_expression "param_1[8] == '\0'" (subscript_expression "param_1[8]" identifier [ number_literal ]) == (char_literal "'\0'" ' escape_sequence ')) )) (goto_statement "goto LAB_000517f0;" goto statement_identifier ;)) (goto_statement "goto LAB_00051647;" goto statement_identifier ;) })) (expression_statement "uVar12 = (uint)(ushort)(puVar1[iVar16] << 8 | puVar1[iVar16] >> 8);" (assignment_expression "uVar12 = (uint)(ushort)(puVar1[iVar16] << 8 | puVar1[iVar16] >> 8)" identifier = (call_expression "(uint)(ushort)(puVar1[iVar16] << 8 | puVar1[iVar16] >> 8)" (call_expression "(uint)(ushort)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(ushort)" ( identifier ))) (argument_list "(puVar1[iVar16] << 8 | puVar1[iVar16] >> 8)" ( (binary_expression "puVar1[iVar16] << 8 | puVar1[iVar16] >> 8" (binary_expression "puVar1[iVar16] << 8" (subscript_expression "puVar1[iVar16]" identifier [ identifier ]) << number_literal) | (binary_expression "puVar1[iVar16] >> 8" (subscript_expression "puVar1[iVar16]" identifier [ identifier ]) >> number_literal)) )))) ;) }) while (parenthesized_expression "((uVar2 <= uVar12) && ((int)uVar12 <= local_30))" ( (binary_expression "(uVar2 <= uVar12) && ((int)uVar12 <= local_30)" (parenthesized_expression "(uVar2 <= uVar12)" ( (binary_expression "uVar2 <= uVar12" identifier <= identifier) )) && (parenthesized_expression "((int)uVar12 <= local_30)" ( (binary_expression "(int)uVar12 <= local_30" (cast_expression "(int)uVar12" ( (type_descriptor "int" primitive_type) ) identifier) <= identifier) ))) )) ;) })) (expression_statement "uVar13 = FUN_00051360();" (assignment_expression "uVar13 = FUN_00051360()" identifier = (call_expression "FUN_00051360()" identifier (argument_list "()" ( )))) ;) (return_statement "return uVar13;" return identifier ;) })))) })) (labeled_statement "LAB_00051647:\n  iVar16 = (CONCAT11(uVar4,uVar5) - 1 & 0xffff) + 1 + (uint)*(byte *)(iVar7 + 7 + uVar10);" statement_identifier : (expression_statement "iVar16 = (CONCAT11(uVar4,uVar5) - 1 & 0xffff) + 1 + (uint)*(byte *)(iVar7 + 7 + uVar10);" (assignment_expression "iVar16 = (CONCAT11(uVar4,uVar5) - 1 & 0xffff) + 1 + (uint)*(byte *)(iVar7 + 7 + uVar10)" identifier = (binary_expression "(CONCAT11(uVar4,uVar5) - 1 & 0xffff) + 1 + (uint)*(byte *)(iVar7 + 7 + uVar10)" (binary_expression "(CONCAT11(uVar4,uVar5) - 1 & 0xffff) + 1" (parenthesized_expression "(CONCAT11(uVar4,uVar5) - 1 & 0xffff)" ( (binary_expression "CONCAT11(uVar4,uVar5) - 1 & 0xffff" (binary_expression "CONCAT11(uVar4,uVar5) - 1" (call_expression "CONCAT11(uVar4,uVar5)" identifier (argument_list "(uVar4,uVar5)" ( identifier , identifier ))) - number_literal) & number_literal) )) + number_literal) + (binary_expression "(uint)*(byte *)(iVar7 + 7 + uVar10)" (parenthesized_expression "(uint)" ( identifier )) * (cast_expression "(byte *)(iVar7 + 7 + uVar10)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 7 + uVar10)" ( (binary_expression "iVar7 + 7 + uVar10" (binary_expression "iVar7 + 7" identifier + number_literal) + identifier) )))))) ;)) (expression_statement "uVar10 = (uint)CONCAT11(*(undefined1 *)(iVar7 + 1 + uVar10),*(undefined1 *)(iVar7 + 2 + uVar10));" (assignment_expression "uVar10 = (uint)CONCAT11(*(undefined1 *)(iVar7 + 1 + uVar10),*(undefined1 *)(iVar7 + 2 + uVar10))" identifier = (cast_expression "(uint)CONCAT11(*(undefined1 *)(iVar7 + 1 + uVar10),*(undefined1 *)(iVar7 + 2 + uVar10))" ( (type_descriptor "uint" type_identifier) ) (call_expression "CONCAT11(*(undefined1 *)(iVar7 + 1 + uVar10),*(undefined1 *)(iVar7 + 2 + uVar10))" identifier (argument_list "(*(undefined1 *)(iVar7 + 1 + uVar10),*(undefined1 *)(iVar7 + 2 + uVar10))" ( (pointer_expression "*(undefined1 *)(iVar7 + 1 + uVar10)" * (cast_expression "(undefined1 *)(iVar7 + 1 + uVar10)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 1 + uVar10)" ( (binary_expression "iVar7 + 1 + uVar10" (binary_expression "iVar7 + 1" identifier + number_literal) + identifier) )))) , (pointer_expression "*(undefined1 *)(iVar7 + 2 + uVar10)" * (cast_expression "(undefined1 *)(iVar7 + 2 + uVar10)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 2 + uVar10)" ( (binary_expression "iVar7 + 2 + uVar10" (binary_expression "iVar7 + 2" identifier + number_literal) + identifier) )))) ))))) ;) (if_statement "if (uVar10 != 0) {\n    if (uVar10 < uVar2) goto LAB_0005170d;\n    do {\n      if (local_30 < (int)uVar10) {\n        uVar13 = FUN_00051360();\n        return uVar13;\n      }\n      uVar12 = (uint)CONCAT11(*(undefined1 *)(iVar7 + uVar10),*(undefined1 *)(iVar7 + 1 + uVar10));\n      uVar14 = (uint)CONCAT11(*(undefined1 *)(iVar7 + 2 + uVar10),\n                              *(undefined1 *)(iVar7 + 3 + uVar10));\n      uVar15 = uVar10 + uVar14;\n      iVar16 = iVar16 + uVar14;\n      uVar10 = uVar12;\n    } while (uVar15 + 3 < uVar12);\n    if ((uVar12 != 0) || (uVar8 < uVar15)) goto LAB_0005170d;\n  }" if (parenthesized_expression "(uVar10 != 0)" ( (binary_expression "uVar10 != 0" identifier != number_literal) )) (compound_statement "{\n    if (uVar10 < uVar2) goto LAB_0005170d;\n    do {\n      if (local_30 < (int)uVar10) {\n        uVar13 = FUN_00051360();\n        return uVar13;\n      }\n      uVar12 = (uint)CONCAT11(*(undefined1 *)(iVar7 + uVar10),*(undefined1 *)(iVar7 + 1 + uVar10));\n      uVar14 = (uint)CONCAT11(*(undefined1 *)(iVar7 + 2 + uVar10),\n                              *(undefined1 *)(iVar7 + 3 + uVar10));\n      uVar15 = uVar10 + uVar14;\n      iVar16 = iVar16 + uVar14;\n      uVar10 = uVar12;\n    } while (uVar15 + 3 < uVar12);\n    if ((uVar12 != 0) || (uVar8 < uVar15)) goto LAB_0005170d;\n  }" { (if_statement "if (uVar10 < uVar2) goto LAB_0005170d;" if (parenthesized_expression "(uVar10 < uVar2)" ( (binary_expression "uVar10 < uVar2" identifier < identifier) )) (goto_statement "goto LAB_0005170d;" goto statement_identifier ;)) (do_statement "do {\n      if (local_30 < (int)uVar10) {\n        uVar13 = FUN_00051360();\n        return uVar13;\n      }\n      uVar12 = (uint)CONCAT11(*(undefined1 *)(iVar7 + uVar10),*(undefined1 *)(iVar7 + 1 + uVar10));\n      uVar14 = (uint)CONCAT11(*(undefined1 *)(iVar7 + 2 + uVar10),\n                              *(undefined1 *)(iVar7 + 3 + uVar10));\n      uVar15 = uVar10 + uVar14;\n      iVar16 = iVar16 + uVar14;\n      uVar10 = uVar12;\n    } while (uVar15 + 3 < uVar12);" do (compound_statement "{\n      if (local_30 < (int)uVar10) {\n        uVar13 = FUN_00051360();\n        return uVar13;\n      }\n      uVar12 = (uint)CONCAT11(*(undefined1 *)(iVar7 + uVar10),*(undefined1 *)(iVar7 + 1 + uVar10));\n      uVar14 = (uint)CONCAT11(*(undefined1 *)(iVar7 + 2 + uVar10),\n                              *(undefined1 *)(iVar7 + 3 + uVar10));\n      uVar15 = uVar10 + uVar14;\n      iVar16 = iVar16 + uVar14;\n      uVar10 = uVar12;\n    }" { (if_statement "if (local_30 < (int)uVar10) {\n        uVar13 = FUN_00051360();\n        return uVar13;\n      }" if (parenthesized_expression "(local_30 < (int)uVar10)" ( (binary_expression "local_30 < (int)uVar10" identifier < (cast_expression "(int)uVar10" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n        uVar13 = FUN_00051360();\n        return uVar13;\n      }" { (expression_statement "uVar13 = FUN_00051360();" (assignment_expression "uVar13 = FUN_00051360()" identifier = (call_expression "FUN_00051360()" identifier (argument_list "()" ( )))) ;) (return_statement "return uVar13;" return identifier ;) })) (expression_statement "uVar12 = (uint)CONCAT11(*(undefined1 *)(iVar7 + uVar10),*(undefined1 *)(iVar7 + 1 + uVar10));" (assignment_expression "uVar12 = (uint)CONCAT11(*(undefined1 *)(iVar7 + uVar10),*(undefined1 *)(iVar7 + 1 + uVar10))" identifier = (cast_expression "(uint)CONCAT11(*(undefined1 *)(iVar7 + uVar10),*(undefined1 *)(iVar7 + 1 + uVar10))" ( (type_descriptor "uint" type_identifier) ) (call_expression "CONCAT11(*(undefined1 *)(iVar7 + uVar10),*(undefined1 *)(iVar7 + 1 + uVar10))" identifier (argument_list "(*(undefined1 *)(iVar7 + uVar10),*(undefined1 *)(iVar7 + 1 + uVar10))" ( (pointer_expression "*(undefined1 *)(iVar7 + uVar10)" * (cast_expression "(undefined1 *)(iVar7 + uVar10)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + uVar10)" ( (binary_expression "iVar7 + uVar10" identifier + identifier) )))) , (pointer_expression "*(undefined1 *)(iVar7 + 1 + uVar10)" * (cast_expression "(undefined1 *)(iVar7 + 1 + uVar10)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 1 + uVar10)" ( (binary_expression "iVar7 + 1 + uVar10" (binary_expression "iVar7 + 1" identifier + number_literal) + identifier) )))) ))))) ;) (expression_statement "uVar14 = (uint)CONCAT11(*(undefined1 *)(iVar7 + 2 + uVar10),\n                              *(undefined1 *)(iVar7 + 3 + uVar10));" (assignment_expression "uVar14 = (uint)CONCAT11(*(undefined1 *)(iVar7 + 2 + uVar10),\n                              *(undefined1 *)(iVar7 + 3 + uVar10))" identifier = (cast_expression "(uint)CONCAT11(*(undefined1 *)(iVar7 + 2 + uVar10),\n                              *(undefined1 *)(iVar7 + 3 + uVar10))" ( (type_descriptor "uint" type_identifier) ) (call_expression "CONCAT11(*(undefined1 *)(iVar7 + 2 + uVar10),\n                              *(undefined1 *)(iVar7 + 3 + uVar10))" identifier (argument_list "(*(undefined1 *)(iVar7 + 2 + uVar10),\n                              *(undefined1 *)(iVar7 + 3 + uVar10))" ( (pointer_expression "*(undefined1 *)(iVar7 + 2 + uVar10)" * (cast_expression "(undefined1 *)(iVar7 + 2 + uVar10)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 2 + uVar10)" ( (binary_expression "iVar7 + 2 + uVar10" (binary_expression "iVar7 + 2" identifier + number_literal) + identifier) )))) , (pointer_expression "*(undefined1 *)(iVar7 + 3 + uVar10)" * (cast_expression "(undefined1 *)(iVar7 + 3 + uVar10)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 3 + uVar10)" ( (binary_expression "iVar7 + 3 + uVar10" (binary_expression "iVar7 + 3" identifier + number_literal) + identifier) )))) ))))) ;) (expression_statement "uVar15 = uVar10 + uVar14;" (assignment_expression "uVar15 = uVar10 + uVar14" identifier = (binary_expression "uVar10 + uVar14" identifier + identifier)) ;) (expression_statement "iVar16 = iVar16 + uVar14;" (assignment_expression "iVar16 = iVar16 + uVar14" identifier = (binary_expression "iVar16 + uVar14" identifier + identifier)) ;) (expression_statement "uVar10 = uVar12;" (assignment_expression "uVar10 = uVar12" identifier = identifier) ;) }) while (parenthesized_expression "(uVar15 + 3 < uVar12)" ( (binary_expression "uVar15 + 3 < uVar12" (binary_expression "uVar15 + 3" identifier + number_literal) < identifier) )) ;) (if_statement "if ((uVar12 != 0) || (uVar8 < uVar15)) goto LAB_0005170d;" if (parenthesized_expression "((uVar12 != 0) || (uVar8 < uVar15))" ( (binary_expression "(uVar12 != 0) || (uVar8 < uVar15)" (parenthesized_expression "(uVar12 != 0)" ( (binary_expression "uVar12 != 0" identifier != number_literal) )) || (parenthesized_expression "(uVar8 < uVar15)" ( (binary_expression "uVar8 < uVar15" identifier < identifier) ))) )) (goto_statement "goto LAB_0005170d;" goto statement_identifier ;)) })) (if_statement "if (iVar16 <= (int)uVar8) {\n    local_2c = (short)uVar2;\n    *param_1 = 1;\n    *(short *)(param_1 + 0x14) = (short)iVar16 - local_2c;\n    return 0;\n  }" if (parenthesized_expression "(iVar16 <= (int)uVar8)" ( (binary_expression "iVar16 <= (int)uVar8" identifier <= (cast_expression "(int)uVar8" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n    local_2c = (short)uVar2;\n    *param_1 = 1;\n    *(short *)(param_1 + 0x14) = (short)iVar16 - local_2c;\n    return 0;\n  }" { (expression_statement "local_2c = (short)uVar2;" (assignment_expression "local_2c = (short)uVar2" identifier = (cast_expression "(short)uVar2" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) identifier)) ;) (expression_statement "*param_1 = 1;" (assignment_expression "*param_1 = 1" (pointer_expression "*param_1" * identifier) = number_literal) ;) (expression_statement "*(short *)(param_1 + 0x14) = (short)iVar16 - local_2c;" (assignment_expression "*(short *)(param_1 + 0x14) = (short)iVar16 - local_2c" (pointer_expression "*(short *)(param_1 + 0x14)" * (cast_expression "(short *)(param_1 + 0x14)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) )))) = (binary_expression "(short)iVar16 - local_2c" (cast_expression "(short)iVar16" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) identifier) - identifier)) ;) (return_statement "return 0;" return number_literal ;) })) (labeled_statement "LAB_0005170d:\n  uVar13 = FUN_00051360();" statement_identifier : (expression_statement "uVar13 = FUN_00051360();" (assignment_expression "uVar13 = FUN_00051360()" identifier = (call_expression "FUN_00051360()" identifier (argument_list "()" ( )))) ;)) (return_statement "return uVar13;" return identifier ;) })))
(translation_unit "int __regparm3 btreeInitPage(MemPage *pPage)\n\n{\n  ushort *puVar1;\n  uint uVar2;\n  byte bVar3;\n  u8 uVar4;\n  u8 uVar5;\n  u8 *puVar6;\n  BtShared *pBVar7;\n  uint uVar8;\n  ushort uVar9;\n  u32 uVar10;\n  u16 uVar11;\n  int iVar12;\n  int lineno;\n  uint uVar13;\n  uint uVar14;\n  uint uVar15;\n  int local_30;\n  short local_2c;\n  \n  bVar3 = pPage->hdrOffset;\n  puVar6 = pPage->aData;\n  pBVar7 = pPage->pBt;\n  iVar12 = decodeFlags(pPage,(uint)puVar6[bVar3]);\n  if (iVar12 != 0) {\n    iVar12 = sqlite3CorruptError(0xfdab);\n    return iVar12;\n  }\n  uVar10 = pBVar7->pageSize;\n  pPage->nOverflow = '\0';\n  iVar12 = bVar3 + 8 + (uint)pPage->childPtrSize;\n  pPage->maskPage = (short)uVar10 - 1;\n  uVar8 = pBVar7->usableSize;\n  pPage->cellOffset = (u16)iVar12;\n  pPage->aDataOfst = puVar6 + pPage->childPtrSize;\n  pPage->aDataEnd = puVar6 + uVar8;\n  puVar1 = (ushort *)(puVar6 + iVar12);\n  pPage->aCellIdx = (u8 *)puVar1;\n  uVar4 = puVar6[bVar3 + 5];\n  uVar5 = puVar6[bVar3 + 6];\n  uVar9 = CONCAT11(puVar6[bVar3 + 3],puVar6[bVar3 + 4]);\n  pPage->nCell = uVar9;\n  lineno = 0xfdbe;\n  if ((pBVar7->pageSize - 8) / 6 < (uint)uVar9) goto LAB_0005170d;\n  uVar2 = iVar12 + (uint)uVar9 * 2;\n  local_30 = uVar8 - 4;\n  if ((pBVar7->db->flags & 0x200000) != 0) {\n    if (pPage->leaf == '\0') {\n      local_30 = uVar8 - 5;\n      if (uVar9 != 0) goto LAB_00051733;\nLAB_000517f0:\n      local_30 = local_30 + 1;\n    }\n    else if (uVar9 != 0) {\nLAB_00051733:\n      uVar13 = (uint)(ushort)(*puVar1 << 8 | *puVar1 >> 8);\n      if (((int)uVar13 <= local_30) && (uVar2 <= uVar13)) {\n        iVar12 = 0;\n        do {\n          uVar11 = (*pPage->xCellSize)(pPage,puVar6 + uVar13);\n          if ((int)uVar8 < (int)(uVar13 + uVar11)) {\n            iVar12 = sqlite3CorruptError(0xfddf);\n            return iVar12;\n          }\n          iVar12 = iVar12 + 1;\n          if ((int)(uint)pPage->nCell <= iVar12) {\n            if (pPage->leaf == '\0') goto LAB_000517f0;\n            goto LAB_00051647;\n          }\n          uVar13 = (uint)(ushort)(puVar1[iVar12] << 8 | puVar1[iVar12] >> 8);\n        } while ((uVar2 <= uVar13) && ((int)uVar13 <= local_30));\n      }\n      iVar12 = sqlite3CorruptError(0xfdda);\n      return iVar12;\n    }\n  }\nLAB_00051647:\n  iVar12 = (CONCAT11(uVar4,uVar5) - 1 & 0xffff) + 1 + (uint)puVar6[bVar3 + 7];\n  uVar13 = (uint)CONCAT11(puVar6[bVar3 + 1],puVar6[bVar3 + 2]);\n  if (uVar13 != 0) {\n    if (uVar13 < uVar2) {\n      lineno = 0xfdf1;\n      goto LAB_0005170d;\n    }\n    do {\n      if (local_30 < (int)uVar13) {\n        iVar12 = sqlite3CorruptError(0xfdf6);\n        return iVar12;\n      }\n      uVar14 = (uint)CONCAT11(puVar6[uVar13],puVar6[uVar13 + 1]);\n      uVar15 = uVar13 + CONCAT11(puVar6[uVar13 + 2],puVar6[uVar13 + 3]);\n      iVar12 = iVar12 + (uint)CONCAT11(puVar6[uVar13 + 2],puVar6[uVar13 + 3]);\n      uVar13 = uVar14;\n    } while (uVar15 + 3 < uVar14);\n    if (uVar14 != 0) {\n      lineno = 0xfe00;\n      goto LAB_0005170d;\n    }\n    lineno = 0xfe04;\n    if (uVar8 < uVar15) goto LAB_0005170d;\n  }\n  if (iVar12 <= (int)uVar8) {\n    local_2c = (short)uVar2;\n    pPage->isInit = '\x01';\n    pPage->nFree = (short)iVar12 - local_2c;\n    return 0;\n  }\n  lineno = 0xfe10;\nLAB_0005170d:\n  iVar12 = sqlite3CorruptError(lineno);\n  return iVar12;\n}\n\n" (function_definition "int __regparm3 btreeInitPage(MemPage *pPage)\n\n{\n  ushort *puVar1;\n  uint uVar2;\n  byte bVar3;\n  u8 uVar4;\n  u8 uVar5;\n  u8 *puVar6;\n  BtShared *pBVar7;\n  uint uVar8;\n  ushort uVar9;\n  u32 uVar10;\n  u16 uVar11;\n  int iVar12;\n  int lineno;\n  uint uVar13;\n  uint uVar14;\n  uint uVar15;\n  int local_30;\n  short local_2c;\n  \n  bVar3 = pPage->hdrOffset;\n  puVar6 = pPage->aData;\n  pBVar7 = pPage->pBt;\n  iVar12 = decodeFlags(pPage,(uint)puVar6[bVar3]);\n  if (iVar12 != 0) {\n    iVar12 = sqlite3CorruptError(0xfdab);\n    return iVar12;\n  }\n  uVar10 = pBVar7->pageSize;\n  pPage->nOverflow = '\0';\n  iVar12 = bVar3 + 8 + (uint)pPage->childPtrSize;\n  pPage->maskPage = (short)uVar10 - 1;\n  uVar8 = pBVar7->usableSize;\n  pPage->cellOffset = (u16)iVar12;\n  pPage->aDataOfst = puVar6 + pPage->childPtrSize;\n  pPage->aDataEnd = puVar6 + uVar8;\n  puVar1 = (ushort *)(puVar6 + iVar12);\n  pPage->aCellIdx = (u8 *)puVar1;\n  uVar4 = puVar6[bVar3 + 5];\n  uVar5 = puVar6[bVar3 + 6];\n  uVar9 = CONCAT11(puVar6[bVar3 + 3],puVar6[bVar3 + 4]);\n  pPage->nCell = uVar9;\n  lineno = 0xfdbe;\n  if ((pBVar7->pageSize - 8) / 6 < (uint)uVar9) goto LAB_0005170d;\n  uVar2 = iVar12 + (uint)uVar9 * 2;\n  local_30 = uVar8 - 4;\n  if ((pBVar7->db->flags & 0x200000) != 0) {\n    if (pPage->leaf == '\0') {\n      local_30 = uVar8 - 5;\n      if (uVar9 != 0) goto LAB_00051733;\nLAB_000517f0:\n      local_30 = local_30 + 1;\n    }\n    else if (uVar9 != 0) {\nLAB_00051733:\n      uVar13 = (uint)(ushort)(*puVar1 << 8 | *puVar1 >> 8);\n      if (((int)uVar13 <= local_30) && (uVar2 <= uVar13)) {\n        iVar12 = 0;\n        do {\n          uVar11 = (*pPage->xCellSize)(pPage,puVar6 + uVar13);\n          if ((int)uVar8 < (int)(uVar13 + uVar11)) {\n            iVar12 = sqlite3CorruptError(0xfddf);\n            return iVar12;\n          }\n          iVar12 = iVar12 + 1;\n          if ((int)(uint)pPage->nCell <= iVar12) {\n            if (pPage->leaf == '\0') goto LAB_000517f0;\n            goto LAB_00051647;\n          }\n          uVar13 = (uint)(ushort)(puVar1[iVar12] << 8 | puVar1[iVar12] >> 8);\n        } while ((uVar2 <= uVar13) && ((int)uVar13 <= local_30));\n      }\n      iVar12 = sqlite3CorruptError(0xfdda);\n      return iVar12;\n    }\n  }\nLAB_00051647:\n  iVar12 = (CONCAT11(uVar4,uVar5) - 1 & 0xffff) + 1 + (uint)puVar6[bVar3 + 7];\n  uVar13 = (uint)CONCAT11(puVar6[bVar3 + 1],puVar6[bVar3 + 2]);\n  if (uVar13 != 0) {\n    if (uVar13 < uVar2) {\n      lineno = 0xfdf1;\n      goto LAB_0005170d;\n    }\n    do {\n      if (local_30 < (int)uVar13) {\n        iVar12 = sqlite3CorruptError(0xfdf6);\n        return iVar12;\n      }\n      uVar14 = (uint)CONCAT11(puVar6[uVar13],puVar6[uVar13 + 1]);\n      uVar15 = uVar13 + CONCAT11(puVar6[uVar13 + 2],puVar6[uVar13 + 3]);\n      iVar12 = iVar12 + (uint)CONCAT11(puVar6[uVar13 + 2],puVar6[uVar13 + 3]);\n      uVar13 = uVar14;\n    } while (uVar15 + 3 < uVar14);\n    if (uVar14 != 0) {\n      lineno = 0xfe00;\n      goto LAB_0005170d;\n    }\n    lineno = 0xfe04;\n    if (uVar8 < uVar15) goto LAB_0005170d;\n  }\n  if (iVar12 <= (int)uVar8) {\n    local_2c = (short)uVar2;\n    pPage->isInit = '\x01';\n    pPage->nFree = (short)iVar12 - local_2c;\n    return 0;\n  }\n  lineno = 0xfe10;\nLAB_0005170d:\n  iVar12 = sqlite3CorruptError(lineno);\n  return iVar12;\n}" primitive_type (ERROR "__regparm3" identifier) (function_declarator "btreeInitPage(MemPage *pPage)" identifier (parameter_list "(MemPage *pPage)" ( (parameter_declaration "MemPage *pPage" type_identifier (pointer_declarator "*pPage" * identifier)) ))) (compound_statement "{\n  ushort *puVar1;\n  uint uVar2;\n  byte bVar3;\n  u8 uVar4;\n  u8 uVar5;\n  u8 *puVar6;\n  BtShared *pBVar7;\n  uint uVar8;\n  ushort uVar9;\n  u32 uVar10;\n  u16 uVar11;\n  int iVar12;\n  int lineno;\n  uint uVar13;\n  uint uVar14;\n  uint uVar15;\n  int local_30;\n  short local_2c;\n  \n  bVar3 = pPage->hdrOffset;\n  puVar6 = pPage->aData;\n  pBVar7 = pPage->pBt;\n  iVar12 = decodeFlags(pPage,(uint)puVar6[bVar3]);\n  if (iVar12 != 0) {\n    iVar12 = sqlite3CorruptError(0xfdab);\n    return iVar12;\n  }\n  uVar10 = pBVar7->pageSize;\n  pPage->nOverflow = '\0';\n  iVar12 = bVar3 + 8 + (uint)pPage->childPtrSize;\n  pPage->maskPage = (short)uVar10 - 1;\n  uVar8 = pBVar7->usableSize;\n  pPage->cellOffset = (u16)iVar12;\n  pPage->aDataOfst = puVar6 + pPage->childPtrSize;\n  pPage->aDataEnd = puVar6 + uVar8;\n  puVar1 = (ushort *)(puVar6 + iVar12);\n  pPage->aCellIdx = (u8 *)puVar1;\n  uVar4 = puVar6[bVar3 + 5];\n  uVar5 = puVar6[bVar3 + 6];\n  uVar9 = CONCAT11(puVar6[bVar3 + 3],puVar6[bVar3 + 4]);\n  pPage->nCell = uVar9;\n  lineno = 0xfdbe;\n  if ((pBVar7->pageSize - 8) / 6 < (uint)uVar9) goto LAB_0005170d;\n  uVar2 = iVar12 + (uint)uVar9 * 2;\n  local_30 = uVar8 - 4;\n  if ((pBVar7->db->flags & 0x200000) != 0) {\n    if (pPage->leaf == '\0') {\n      local_30 = uVar8 - 5;\n      if (uVar9 != 0) goto LAB_00051733;\nLAB_000517f0:\n      local_30 = local_30 + 1;\n    }\n    else if (uVar9 != 0) {\nLAB_00051733:\n      uVar13 = (uint)(ushort)(*puVar1 << 8 | *puVar1 >> 8);\n      if (((int)uVar13 <= local_30) && (uVar2 <= uVar13)) {\n        iVar12 = 0;\n        do {\n          uVar11 = (*pPage->xCellSize)(pPage,puVar6 + uVar13);\n          if ((int)uVar8 < (int)(uVar13 + uVar11)) {\n            iVar12 = sqlite3CorruptError(0xfddf);\n            return iVar12;\n          }\n          iVar12 = iVar12 + 1;\n          if ((int)(uint)pPage->nCell <= iVar12) {\n            if (pPage->leaf == '\0') goto LAB_000517f0;\n            goto LAB_00051647;\n          }\n          uVar13 = (uint)(ushort)(puVar1[iVar12] << 8 | puVar1[iVar12] >> 8);\n        } while ((uVar2 <= uVar13) && ((int)uVar13 <= local_30));\n      }\n      iVar12 = sqlite3CorruptError(0xfdda);\n      return iVar12;\n    }\n  }\nLAB_00051647:\n  iVar12 = (CONCAT11(uVar4,uVar5) - 1 & 0xffff) + 1 + (uint)puVar6[bVar3 + 7];\n  uVar13 = (uint)CONCAT11(puVar6[bVar3 + 1],puVar6[bVar3 + 2]);\n  if (uVar13 != 0) {\n    if (uVar13 < uVar2) {\n      lineno = 0xfdf1;\n      goto LAB_0005170d;\n    }\n    do {\n      if (local_30 < (int)uVar13) {\n        iVar12 = sqlite3CorruptError(0xfdf6);\n        return iVar12;\n      }\n      uVar14 = (uint)CONCAT11(puVar6[uVar13],puVar6[uVar13 + 1]);\n      uVar15 = uVar13 + CONCAT11(puVar6[uVar13 + 2],puVar6[uVar13 + 3]);\n      iVar12 = iVar12 + (uint)CONCAT11(puVar6[uVar13 + 2],puVar6[uVar13 + 3]);\n      uVar13 = uVar14;\n    } while (uVar15 + 3 < uVar14);\n    if (uVar14 != 0) {\n      lineno = 0xfe00;\n      goto LAB_0005170d;\n    }\n    lineno = 0xfe04;\n    if (uVar8 < uVar15) goto LAB_0005170d;\n  }\n  if (iVar12 <= (int)uVar8) {\n    local_2c = (short)uVar2;\n    pPage->isInit = '\x01';\n    pPage->nFree = (short)iVar12 - local_2c;\n    return 0;\n  }\n  lineno = 0xfe10;\nLAB_0005170d:\n  iVar12 = sqlite3CorruptError(lineno);\n  return iVar12;\n}" { (declaration "ushort *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "byte bVar3;" type_identifier identifier ;) (declaration "u8 uVar4;" type_identifier identifier ;) (declaration "u8 uVar5;" type_identifier identifier ;) (declaration "u8 *puVar6;" type_identifier (pointer_declarator "*puVar6" * identifier) ;) (declaration "BtShared *pBVar7;" type_identifier (pointer_declarator "*pBVar7" * identifier) ;) (declaration "uint uVar8;" type_identifier identifier ;) (declaration "ushort uVar9;" type_identifier identifier ;) (declaration "u32 uVar10;" type_identifier identifier ;) (declaration "u16 uVar11;" type_identifier identifier ;) (declaration "int iVar12;" primitive_type identifier ;) (declaration "int lineno;" primitive_type identifier ;) (declaration "uint uVar13;" type_identifier identifier ;) (declaration "uint uVar14;" type_identifier identifier ;) (declaration "uint uVar15;" type_identifier identifier ;) (declaration "int local_30;" primitive_type identifier ;) (declaration "short local_2c;" (sized_type_specifier "short" short) identifier ;) (expression_statement "bVar3 = pPage->hdrOffset;" (assignment_expression "bVar3 = pPage->hdrOffset" identifier = (field_expression "pPage->hdrOffset" identifier -> field_identifier)) ;) (expression_statement "puVar6 = pPage->aData;" (assignment_expression "puVar6 = pPage->aData" identifier = (field_expression "pPage->aData" identifier -> field_identifier)) ;) (expression_statement "pBVar7 = pPage->pBt;" (assignment_expression "pBVar7 = pPage->pBt" identifier = (field_expression "pPage->pBt" identifier -> field_identifier)) ;) (expression_statement "iVar12 = decodeFlags(pPage,(uint)puVar6[bVar3]);" (assignment_expression "iVar12 = decodeFlags(pPage,(uint)puVar6[bVar3])" identifier = (call_expression "decodeFlags(pPage,(uint)puVar6[bVar3])" identifier (argument_list "(pPage,(uint)puVar6[bVar3])" ( identifier , (cast_expression "(uint)puVar6[bVar3]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "puVar6[bVar3]" identifier [ identifier ])) )))) ;) (if_statement "if (iVar12 != 0) {\n    iVar12 = sqlite3CorruptError(0xfdab);\n    return iVar12;\n  }" if (parenthesized_expression "(iVar12 != 0)" ( (binary_expression "iVar12 != 0" identifier != number_literal) )) (compound_statement "{\n    iVar12 = sqlite3CorruptError(0xfdab);\n    return iVar12;\n  }" { (expression_statement "iVar12 = sqlite3CorruptError(0xfdab);" (assignment_expression "iVar12 = sqlite3CorruptError(0xfdab)" identifier = (call_expression "sqlite3CorruptError(0xfdab)" identifier (argument_list "(0xfdab)" ( number_literal )))) ;) (return_statement "return iVar12;" return identifier ;) })) (expression_statement "uVar10 = pBVar7->pageSize;" (assignment_expression "uVar10 = pBVar7->pageSize" identifier = (field_expression "pBVar7->pageSize" identifier -> field_identifier)) ;) (expression_statement "pPage->nOverflow = '\0';" (assignment_expression "pPage->nOverflow = '\0'" (field_expression "pPage->nOverflow" identifier -> field_identifier) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "iVar12 = bVar3 + 8 + (uint)pPage->childPtrSize;" (assignment_expression "iVar12 = bVar3 + 8 + (uint)pPage->childPtrSize" identifier = (binary_expression "bVar3 + 8 + (uint)pPage->childPtrSize" (binary_expression "bVar3 + 8" identifier + number_literal) + (cast_expression "(uint)pPage->childPtrSize" ( (type_descriptor "uint" type_identifier) ) (field_expression "pPage->childPtrSize" identifier -> field_identifier)))) ;) (expression_statement "pPage->maskPage = (short)uVar10 - 1;" (assignment_expression "pPage->maskPage = (short)uVar10 - 1" (field_expression "pPage->maskPage" identifier -> field_identifier) = (binary_expression "(short)uVar10 - 1" (cast_expression "(short)uVar10" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) identifier) - number_literal)) ;) (expression_statement "uVar8 = pBVar7->usableSize;" (assignment_expression "uVar8 = pBVar7->usableSize" identifier = (field_expression "pBVar7->usableSize" identifier -> field_identifier)) ;) (expression_statement "pPage->cellOffset = (u16)iVar12;" (assignment_expression "pPage->cellOffset = (u16)iVar12" (field_expression "pPage->cellOffset" identifier -> field_identifier) = (cast_expression "(u16)iVar12" ( (type_descriptor "u16" type_identifier) ) identifier)) ;) (expression_statement "pPage->aDataOfst = puVar6 + pPage->childPtrSize;" (assignment_expression "pPage->aDataOfst = puVar6 + pPage->childPtrSize" (field_expression "pPage->aDataOfst" identifier -> field_identifier) = (binary_expression "puVar6 + pPage->childPtrSize" identifier + (field_expression "pPage->childPtrSize" identifier -> field_identifier))) ;) (expression_statement "pPage->aDataEnd = puVar6 + uVar8;" (assignment_expression "pPage->aDataEnd = puVar6 + uVar8" (field_expression "pPage->aDataEnd" identifier -> field_identifier) = (binary_expression "puVar6 + uVar8" identifier + identifier)) ;) (expression_statement "puVar1 = (ushort *)(puVar6 + iVar12);" (assignment_expression "puVar1 = (ushort *)(puVar6 + iVar12)" identifier = (cast_expression "(ushort *)(puVar6 + iVar12)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar6 + iVar12)" ( (binary_expression "puVar6 + iVar12" identifier + identifier) )))) ;) (expression_statement "pPage->aCellIdx = (u8 *)puVar1;" (assignment_expression "pPage->aCellIdx = (u8 *)puVar1" (field_expression "pPage->aCellIdx" identifier -> field_identifier) = (cast_expression "(u8 *)puVar1" ( (type_descriptor "u8 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "uVar4 = puVar6[bVar3 + 5];" (assignment_expression "uVar4 = puVar6[bVar3 + 5]" identifier = (subscript_expression "puVar6[bVar3 + 5]" identifier [ (binary_expression "bVar3 + 5" identifier + number_literal) ])) ;) (expression_statement "uVar5 = puVar6[bVar3 + 6];" (assignment_expression "uVar5 = puVar6[bVar3 + 6]" identifier = (subscript_expression "puVar6[bVar3 + 6]" identifier [ (binary_expression "bVar3 + 6" identifier + number_literal) ])) ;) (expression_statement "uVar9 = CONCAT11(puVar6[bVar3 + 3],puVar6[bVar3 + 4]);" (assignment_expression "uVar9 = CONCAT11(puVar6[bVar3 + 3],puVar6[bVar3 + 4])" identifier = (call_expression "CONCAT11(puVar6[bVar3 + 3],puVar6[bVar3 + 4])" identifier (argument_list "(puVar6[bVar3 + 3],puVar6[bVar3 + 4])" ( (subscript_expression "puVar6[bVar3 + 3]" identifier [ (binary_expression "bVar3 + 3" identifier + number_literal) ]) , (subscript_expression "puVar6[bVar3 + 4]" identifier [ (binary_expression "bVar3 + 4" identifier + number_literal) ]) )))) ;) (expression_statement "pPage->nCell = uVar9;" (assignment_expression "pPage->nCell = uVar9" (field_expression "pPage->nCell" identifier -> field_identifier) = identifier) ;) (expression_statement "lineno = 0xfdbe;" (assignment_expression "lineno = 0xfdbe" identifier = number_literal) ;) (if_statement "if ((pBVar7->pageSize - 8) / 6 < (uint)uVar9) goto LAB_0005170d;" if (parenthesized_expression "((pBVar7->pageSize - 8) / 6 < (uint)uVar9)" ( (binary_expression "(pBVar7->pageSize - 8) / 6 < (uint)uVar9" (binary_expression "(pBVar7->pageSize - 8) / 6" (parenthesized_expression "(pBVar7->pageSize - 8)" ( (binary_expression "pBVar7->pageSize - 8" (field_expression "pBVar7->pageSize" identifier -> field_identifier) - number_literal) )) / number_literal) < (cast_expression "(uint)uVar9" ( (type_descriptor "uint" type_identifier) ) identifier)) )) (goto_statement "goto LAB_0005170d;" goto statement_identifier ;)) (expression_statement "uVar2 = iVar12 + (uint)uVar9 * 2;" (assignment_expression "uVar2 = iVar12 + (uint)uVar9 * 2" identifier = (binary_expression "iVar12 + (uint)uVar9 * 2" identifier + (binary_expression "(uint)uVar9 * 2" (cast_expression "(uint)uVar9" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal))) ;) (expression_statement "local_30 = uVar8 - 4;" (assignment_expression "local_30 = uVar8 - 4" identifier = (binary_expression "uVar8 - 4" identifier - number_literal)) ;) (if_statement "if ((pBVar7->db->flags & 0x200000) != 0) {\n    if (pPage->leaf == '\0') {\n      local_30 = uVar8 - 5;\n      if (uVar9 != 0) goto LAB_00051733;\nLAB_000517f0:\n      local_30 = local_30 + 1;\n    }\n    else if (uVar9 != 0) {\nLAB_00051733:\n      uVar13 = (uint)(ushort)(*puVar1 << 8 | *puVar1 >> 8);\n      if (((int)uVar13 <= local_30) && (uVar2 <= uVar13)) {\n        iVar12 = 0;\n        do {\n          uVar11 = (*pPage->xCellSize)(pPage,puVar6 + uVar13);\n          if ((int)uVar8 < (int)(uVar13 + uVar11)) {\n            iVar12 = sqlite3CorruptError(0xfddf);\n            return iVar12;\n          }\n          iVar12 = iVar12 + 1;\n          if ((int)(uint)pPage->nCell <= iVar12) {\n            if (pPage->leaf == '\0') goto LAB_000517f0;\n            goto LAB_00051647;\n          }\n          uVar13 = (uint)(ushort)(puVar1[iVar12] << 8 | puVar1[iVar12] >> 8);\n        } while ((uVar2 <= uVar13) && ((int)uVar13 <= local_30));\n      }\n      iVar12 = sqlite3CorruptError(0xfdda);\n      return iVar12;\n    }\n  }" if (parenthesized_expression "((pBVar7->db->flags & 0x200000) != 0)" ( (binary_expression "(pBVar7->db->flags & 0x200000) != 0" (parenthesized_expression "(pBVar7->db->flags & 0x200000)" ( (binary_expression "pBVar7->db->flags & 0x200000" (field_expression "pBVar7->db->flags" (field_expression "pBVar7->db" identifier -> field_identifier) -> field_identifier) & number_literal) )) != number_literal) )) (compound_statement "{\n    if (pPage->leaf == '\0') {\n      local_30 = uVar8 - 5;\n      if (uVar9 != 0) goto LAB_00051733;\nLAB_000517f0:\n      local_30 = local_30 + 1;\n    }\n    else if (uVar9 != 0) {\nLAB_00051733:\n      uVar13 = (uint)(ushort)(*puVar1 << 8 | *puVar1 >> 8);\n      if (((int)uVar13 <= local_30) && (uVar2 <= uVar13)) {\n        iVar12 = 0;\n        do {\n          uVar11 = (*pPage->xCellSize)(pPage,puVar6 + uVar13);\n          if ((int)uVar8 < (int)(uVar13 + uVar11)) {\n            iVar12 = sqlite3CorruptError(0xfddf);\n            return iVar12;\n          }\n          iVar12 = iVar12 + 1;\n          if ((int)(uint)pPage->nCell <= iVar12) {\n            if (pPage->leaf == '\0') goto LAB_000517f0;\n            goto LAB_00051647;\n          }\n          uVar13 = (uint)(ushort)(puVar1[iVar12] << 8 | puVar1[iVar12] >> 8);\n        } while ((uVar2 <= uVar13) && ((int)uVar13 <= local_30));\n      }\n      iVar12 = sqlite3CorruptError(0xfdda);\n      return iVar12;\n    }\n  }" { (if_statement "if (pPage->leaf == '\0') {\n      local_30 = uVar8 - 5;\n      if (uVar9 != 0) goto LAB_00051733;\nLAB_000517f0:\n      local_30 = local_30 + 1;\n    }\n    else if (uVar9 != 0) {\nLAB_00051733:\n      uVar13 = (uint)(ushort)(*puVar1 << 8 | *puVar1 >> 8);\n      if (((int)uVar13 <= local_30) && (uVar2 <= uVar13)) {\n        iVar12 = 0;\n        do {\n          uVar11 = (*pPage->xCellSize)(pPage,puVar6 + uVar13);\n          if ((int)uVar8 < (int)(uVar13 + uVar11)) {\n            iVar12 = sqlite3CorruptError(0xfddf);\n            return iVar12;\n          }\n          iVar12 = iVar12 + 1;\n          if ((int)(uint)pPage->nCell <= iVar12) {\n            if (pPage->leaf == '\0') goto LAB_000517f0;\n            goto LAB_00051647;\n          }\n          uVar13 = (uint)(ushort)(puVar1[iVar12] << 8 | puVar1[iVar12] >> 8);\n        } while ((uVar2 <= uVar13) && ((int)uVar13 <= local_30));\n      }\n      iVar12 = sqlite3CorruptError(0xfdda);\n      return iVar12;\n    }" if (parenthesized_expression "(pPage->leaf == '\0')" ( (binary_expression "pPage->leaf == '\0'" (field_expression "pPage->leaf" identifier -> field_identifier) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      local_30 = uVar8 - 5;\n      if (uVar9 != 0) goto LAB_00051733;\nLAB_000517f0:\n      local_30 = local_30 + 1;\n    }" { (expression_statement "local_30 = uVar8 - 5;" (assignment_expression "local_30 = uVar8 - 5" identifier = (binary_expression "uVar8 - 5" identifier - number_literal)) ;) (if_statement "if (uVar9 != 0) goto LAB_00051733;" if (parenthesized_expression "(uVar9 != 0)" ( (binary_expression "uVar9 != 0" identifier != number_literal) )) (goto_statement "goto LAB_00051733;" goto statement_identifier ;)) (labeled_statement "LAB_000517f0:\n      local_30 = local_30 + 1;" statement_identifier : (expression_statement "local_30 = local_30 + 1;" (assignment_expression "local_30 = local_30 + 1" identifier = (binary_expression "local_30 + 1" identifier + number_literal)) ;)) }) (else_clause "else if (uVar9 != 0) {\nLAB_00051733:\n      uVar13 = (uint)(ushort)(*puVar1 << 8 | *puVar1 >> 8);\n      if (((int)uVar13 <= local_30) && (uVar2 <= uVar13)) {\n        iVar12 = 0;\n        do {\n          uVar11 = (*pPage->xCellSize)(pPage,puVar6 + uVar13);\n          if ((int)uVar8 < (int)(uVar13 + uVar11)) {\n            iVar12 = sqlite3CorruptError(0xfddf);\n            return iVar12;\n          }\n          iVar12 = iVar12 + 1;\n          if ((int)(uint)pPage->nCell <= iVar12) {\n            if (pPage->leaf == '\0') goto LAB_000517f0;\n            goto LAB_00051647;\n          }\n          uVar13 = (uint)(ushort)(puVar1[iVar12] << 8 | puVar1[iVar12] >> 8);\n        } while ((uVar2 <= uVar13) && ((int)uVar13 <= local_30));\n      }\n      iVar12 = sqlite3CorruptError(0xfdda);\n      return iVar12;\n    }" else (if_statement "if (uVar9 != 0) {\nLAB_00051733:\n      uVar13 = (uint)(ushort)(*puVar1 << 8 | *puVar1 >> 8);\n      if (((int)uVar13 <= local_30) && (uVar2 <= uVar13)) {\n        iVar12 = 0;\n        do {\n          uVar11 = (*pPage->xCellSize)(pPage,puVar6 + uVar13);\n          if ((int)uVar8 < (int)(uVar13 + uVar11)) {\n            iVar12 = sqlite3CorruptError(0xfddf);\n            return iVar12;\n          }\n          iVar12 = iVar12 + 1;\n          if ((int)(uint)pPage->nCell <= iVar12) {\n            if (pPage->leaf == '\0') goto LAB_000517f0;\n            goto LAB_00051647;\n          }\n          uVar13 = (uint)(ushort)(puVar1[iVar12] << 8 | puVar1[iVar12] >> 8);\n        } while ((uVar2 <= uVar13) && ((int)uVar13 <= local_30));\n      }\n      iVar12 = sqlite3CorruptError(0xfdda);\n      return iVar12;\n    }" if (parenthesized_expression "(uVar9 != 0)" ( (binary_expression "uVar9 != 0" identifier != number_literal) )) (compound_statement "{\nLAB_00051733:\n      uVar13 = (uint)(ushort)(*puVar1 << 8 | *puVar1 >> 8);\n      if (((int)uVar13 <= local_30) && (uVar2 <= uVar13)) {\n        iVar12 = 0;\n        do {\n          uVar11 = (*pPage->xCellSize)(pPage,puVar6 + uVar13);\n          if ((int)uVar8 < (int)(uVar13 + uVar11)) {\n            iVar12 = sqlite3CorruptError(0xfddf);\n            return iVar12;\n          }\n          iVar12 = iVar12 + 1;\n          if ((int)(uint)pPage->nCell <= iVar12) {\n            if (pPage->leaf == '\0') goto LAB_000517f0;\n            goto LAB_00051647;\n          }\n          uVar13 = (uint)(ushort)(puVar1[iVar12] << 8 | puVar1[iVar12] >> 8);\n        } while ((uVar2 <= uVar13) && ((int)uVar13 <= local_30));\n      }\n      iVar12 = sqlite3CorruptError(0xfdda);\n      return iVar12;\n    }" { (labeled_statement "LAB_00051733:\n      uVar13 = (uint)(ushort)(*puVar1 << 8 | *puVar1 >> 8);" statement_identifier : (expression_statement "uVar13 = (uint)(ushort)(*puVar1 << 8 | *puVar1 >> 8);" (assignment_expression "uVar13 = (uint)(ushort)(*puVar1 << 8 | *puVar1 >> 8)" identifier = (call_expression "(uint)(ushort)(*puVar1 << 8 | *puVar1 >> 8)" (call_expression "(uint)(ushort)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(ushort)" ( identifier ))) (argument_list "(*puVar1 << 8 | *puVar1 >> 8)" ( (binary_expression "*puVar1 << 8 | *puVar1 >> 8" (binary_expression "*puVar1 << 8" (pointer_expression "*puVar1" * identifier) << number_literal) | (binary_expression "*puVar1 >> 8" (pointer_expression "*puVar1" * identifier) >> number_literal)) )))) ;)) (if_statement "if (((int)uVar13 <= local_30) && (uVar2 <= uVar13)) {\n        iVar12 = 0;\n        do {\n          uVar11 = (*pPage->xCellSize)(pPage,puVar6 + uVar13);\n          if ((int)uVar8 < (int)(uVar13 + uVar11)) {\n            iVar12 = sqlite3CorruptError(0xfddf);\n            return iVar12;\n          }\n          iVar12 = iVar12 + 1;\n          if ((int)(uint)pPage->nCell <= iVar12) {\n            if (pPage->leaf == '\0') goto LAB_000517f0;\n            goto LAB_00051647;\n          }\n          uVar13 = (uint)(ushort)(puVar1[iVar12] << 8 | puVar1[iVar12] >> 8);\n        } while ((uVar2 <= uVar13) && ((int)uVar13 <= local_30));\n      }" if (parenthesized_expression "(((int)uVar13 <= local_30) && (uVar2 <= uVar13))" ( (binary_expression "((int)uVar13 <= local_30) && (uVar2 <= uVar13)" (parenthesized_expression "((int)uVar13 <= local_30)" ( (binary_expression "(int)uVar13 <= local_30" (cast_expression "(int)uVar13" ( (type_descriptor "int" primitive_type) ) identifier) <= identifier) )) && (parenthesized_expression "(uVar2 <= uVar13)" ( (binary_expression "uVar2 <= uVar13" identifier <= identifier) ))) )) (compound_statement "{\n        iVar12 = 0;\n        do {\n          uVar11 = (*pPage->xCellSize)(pPage,puVar6 + uVar13);\n          if ((int)uVar8 < (int)(uVar13 + uVar11)) {\n            iVar12 = sqlite3CorruptError(0xfddf);\n            return iVar12;\n          }\n          iVar12 = iVar12 + 1;\n          if ((int)(uint)pPage->nCell <= iVar12) {\n            if (pPage->leaf == '\0') goto LAB_000517f0;\n            goto LAB_00051647;\n          }\n          uVar13 = (uint)(ushort)(puVar1[iVar12] << 8 | puVar1[iVar12] >> 8);\n        } while ((uVar2 <= uVar13) && ((int)uVar13 <= local_30));\n      }" { (expression_statement "iVar12 = 0;" (assignment_expression "iVar12 = 0" identifier = number_literal) ;) (do_statement "do {\n          uVar11 = (*pPage->xCellSize)(pPage,puVar6 + uVar13);\n          if ((int)uVar8 < (int)(uVar13 + uVar11)) {\n            iVar12 = sqlite3CorruptError(0xfddf);\n            return iVar12;\n          }\n          iVar12 = iVar12 + 1;\n          if ((int)(uint)pPage->nCell <= iVar12) {\n            if (pPage->leaf == '\0') goto LAB_000517f0;\n            goto LAB_00051647;\n          }\n          uVar13 = (uint)(ushort)(puVar1[iVar12] << 8 | puVar1[iVar12] >> 8);\n        } while ((uVar2 <= uVar13) && ((int)uVar13 <= local_30));" do (compound_statement "{\n          uVar11 = (*pPage->xCellSize)(pPage,puVar6 + uVar13);\n          if ((int)uVar8 < (int)(uVar13 + uVar11)) {\n            iVar12 = sqlite3CorruptError(0xfddf);\n            return iVar12;\n          }\n          iVar12 = iVar12 + 1;\n          if ((int)(uint)pPage->nCell <= iVar12) {\n            if (pPage->leaf == '\0') goto LAB_000517f0;\n            goto LAB_00051647;\n          }\n          uVar13 = (uint)(ushort)(puVar1[iVar12] << 8 | puVar1[iVar12] >> 8);\n        }" { (expression_statement "uVar11 = (*pPage->xCellSize)(pPage,puVar6 + uVar13);" (assignment_expression "uVar11 = (*pPage->xCellSize)(pPage,puVar6 + uVar13)" identifier = (call_expression "(*pPage->xCellSize)(pPage,puVar6 + uVar13)" (parenthesized_expression "(*pPage->xCellSize)" ( (pointer_expression "*pPage->xCellSize" * (field_expression "pPage->xCellSize" identifier -> field_identifier)) )) (argument_list "(pPage,puVar6 + uVar13)" ( identifier , (binary_expression "puVar6 + uVar13" identifier + identifier) )))) ;) (if_statement "if ((int)uVar8 < (int)(uVar13 + uVar11)) {\n            iVar12 = sqlite3CorruptError(0xfddf);\n            return iVar12;\n          }" if (parenthesized_expression "((int)uVar8 < (int)(uVar13 + uVar11))" ( (binary_expression "(int)uVar8 < (int)(uVar13 + uVar11)" (cast_expression "(int)uVar8" ( (type_descriptor "int" primitive_type) ) identifier) < (cast_expression "(int)(uVar13 + uVar11)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar13 + uVar11)" ( (binary_expression "uVar13 + uVar11" identifier + identifier) )))) )) (compound_statement "{\n            iVar12 = sqlite3CorruptError(0xfddf);\n            return iVar12;\n          }" { (expression_statement "iVar12 = sqlite3CorruptError(0xfddf);" (assignment_expression "iVar12 = sqlite3CorruptError(0xfddf)" identifier = (call_expression "sqlite3CorruptError(0xfddf)" identifier (argument_list "(0xfddf)" ( number_literal )))) ;) (return_statement "return iVar12;" return identifier ;) })) (expression_statement "iVar12 = iVar12 + 1;" (assignment_expression "iVar12 = iVar12 + 1" identifier = (binary_expression "iVar12 + 1" identifier + number_literal)) ;) (if_statement "if ((int)(uint)pPage->nCell <= iVar12) {\n            if (pPage->leaf == '\0') goto LAB_000517f0;\n            goto LAB_00051647;\n          }" if (parenthesized_expression "((int)(uint)pPage->nCell <= iVar12)" ( (binary_expression "(int)(uint)pPage->nCell <= iVar12" (cast_expression "(int)(uint)pPage->nCell" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)pPage->nCell" ( (type_descriptor "uint" type_identifier) ) (field_expression "pPage->nCell" identifier -> field_identifier))) <= identifier) )) (compound_statement "{\n            if (pPage->leaf == '\0') goto LAB_000517f0;\n            goto LAB_00051647;\n          }" { (if_statement "if (pPage->leaf == '\0') goto LAB_000517f0;" if (parenthesized_expression "(pPage->leaf == '\0')" ( (binary_expression "pPage->leaf == '\0'" (field_expression "pPage->leaf" identifier -> field_identifier) == (char_literal "'\0'" ' escape_sequence ')) )) (goto_statement "goto LAB_000517f0;" goto statement_identifier ;)) (goto_statement "goto LAB_00051647;" goto statement_identifier ;) })) (expression_statement "uVar13 = (uint)(ushort)(puVar1[iVar12] << 8 | puVar1[iVar12] >> 8);" (assignment_expression "uVar13 = (uint)(ushort)(puVar1[iVar12] << 8 | puVar1[iVar12] >> 8)" identifier = (call_expression "(uint)(ushort)(puVar1[iVar12] << 8 | puVar1[iVar12] >> 8)" (call_expression "(uint)(ushort)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(ushort)" ( identifier ))) (argument_list "(puVar1[iVar12] << 8 | puVar1[iVar12] >> 8)" ( (binary_expression "puVar1[iVar12] << 8 | puVar1[iVar12] >> 8" (binary_expression "puVar1[iVar12] << 8" (subscript_expression "puVar1[iVar12]" identifier [ identifier ]) << number_literal) | (binary_expression "puVar1[iVar12] >> 8" (subscript_expression "puVar1[iVar12]" identifier [ identifier ]) >> number_literal)) )))) ;) }) while (parenthesized_expression "((uVar2 <= uVar13) && ((int)uVar13 <= local_30))" ( (binary_expression "(uVar2 <= uVar13) && ((int)uVar13 <= local_30)" (parenthesized_expression "(uVar2 <= uVar13)" ( (binary_expression "uVar2 <= uVar13" identifier <= identifier) )) && (parenthesized_expression "((int)uVar13 <= local_30)" ( (binary_expression "(int)uVar13 <= local_30" (cast_expression "(int)uVar13" ( (type_descriptor "int" primitive_type) ) identifier) <= identifier) ))) )) ;) })) (expression_statement "iVar12 = sqlite3CorruptError(0xfdda);" (assignment_expression "iVar12 = sqlite3CorruptError(0xfdda)" identifier = (call_expression "sqlite3CorruptError(0xfdda)" identifier (argument_list "(0xfdda)" ( number_literal )))) ;) (return_statement "return iVar12;" return identifier ;) })))) })) (labeled_statement "LAB_00051647:\n  iVar12 = (CONCAT11(uVar4,uVar5) - 1 & 0xffff) + 1 + (uint)puVar6[bVar3 + 7];" statement_identifier : (expression_statement "iVar12 = (CONCAT11(uVar4,uVar5) - 1 & 0xffff) + 1 + (uint)puVar6[bVar3 + 7];" (assignment_expression "iVar12 = (CONCAT11(uVar4,uVar5) - 1 & 0xffff) + 1 + (uint)puVar6[bVar3 + 7]" identifier = (binary_expression "(CONCAT11(uVar4,uVar5) - 1 & 0xffff) + 1 + (uint)puVar6[bVar3 + 7]" (binary_expression "(CONCAT11(uVar4,uVar5) - 1 & 0xffff) + 1" (parenthesized_expression "(CONCAT11(uVar4,uVar5) - 1 & 0xffff)" ( (binary_expression "CONCAT11(uVar4,uVar5) - 1 & 0xffff" (binary_expression "CONCAT11(uVar4,uVar5) - 1" (call_expression "CONCAT11(uVar4,uVar5)" identifier (argument_list "(uVar4,uVar5)" ( identifier , identifier ))) - number_literal) & number_literal) )) + number_literal) + (cast_expression "(uint)puVar6[bVar3 + 7]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "puVar6[bVar3 + 7]" identifier [ (binary_expression "bVar3 + 7" identifier + number_literal) ])))) ;)) (expression_statement "uVar13 = (uint)CONCAT11(puVar6[bVar3 + 1],puVar6[bVar3 + 2]);" (assignment_expression "uVar13 = (uint)CONCAT11(puVar6[bVar3 + 1],puVar6[bVar3 + 2])" identifier = (cast_expression "(uint)CONCAT11(puVar6[bVar3 + 1],puVar6[bVar3 + 2])" ( (type_descriptor "uint" type_identifier) ) (call_expression "CONCAT11(puVar6[bVar3 + 1],puVar6[bVar3 + 2])" identifier (argument_list "(puVar6[bVar3 + 1],puVar6[bVar3 + 2])" ( (subscript_expression "puVar6[bVar3 + 1]" identifier [ (binary_expression "bVar3 + 1" identifier + number_literal) ]) , (subscript_expression "puVar6[bVar3 + 2]" identifier [ (binary_expression "bVar3 + 2" identifier + number_literal) ]) ))))) ;) (if_statement "if (uVar13 != 0) {\n    if (uVar13 < uVar2) {\n      lineno = 0xfdf1;\n      goto LAB_0005170d;\n    }\n    do {\n      if (local_30 < (int)uVar13) {\n        iVar12 = sqlite3CorruptError(0xfdf6);\n        return iVar12;\n      }\n      uVar14 = (uint)CONCAT11(puVar6[uVar13],puVar6[uVar13 + 1]);\n      uVar15 = uVar13 + CONCAT11(puVar6[uVar13 + 2],puVar6[uVar13 + 3]);\n      iVar12 = iVar12 + (uint)CONCAT11(puVar6[uVar13 + 2],puVar6[uVar13 + 3]);\n      uVar13 = uVar14;\n    } while (uVar15 + 3 < uVar14);\n    if (uVar14 != 0) {\n      lineno = 0xfe00;\n      goto LAB_0005170d;\n    }\n    lineno = 0xfe04;\n    if (uVar8 < uVar15) goto LAB_0005170d;\n  }" if (parenthesized_expression "(uVar13 != 0)" ( (binary_expression "uVar13 != 0" identifier != number_literal) )) (compound_statement "{\n    if (uVar13 < uVar2) {\n      lineno = 0xfdf1;\n      goto LAB_0005170d;\n    }\n    do {\n      if (local_30 < (int)uVar13) {\n        iVar12 = sqlite3CorruptError(0xfdf6);\n        return iVar12;\n      }\n      uVar14 = (uint)CONCAT11(puVar6[uVar13],puVar6[uVar13 + 1]);\n      uVar15 = uVar13 + CONCAT11(puVar6[uVar13 + 2],puVar6[uVar13 + 3]);\n      iVar12 = iVar12 + (uint)CONCAT11(puVar6[uVar13 + 2],puVar6[uVar13 + 3]);\n      uVar13 = uVar14;\n    } while (uVar15 + 3 < uVar14);\n    if (uVar14 != 0) {\n      lineno = 0xfe00;\n      goto LAB_0005170d;\n    }\n    lineno = 0xfe04;\n    if (uVar8 < uVar15) goto LAB_0005170d;\n  }" { (if_statement "if (uVar13 < uVar2) {\n      lineno = 0xfdf1;\n      goto LAB_0005170d;\n    }" if (parenthesized_expression "(uVar13 < uVar2)" ( (binary_expression "uVar13 < uVar2" identifier < identifier) )) (compound_statement "{\n      lineno = 0xfdf1;\n      goto LAB_0005170d;\n    }" { (expression_statement "lineno = 0xfdf1;" (assignment_expression "lineno = 0xfdf1" identifier = number_literal) ;) (goto_statement "goto LAB_0005170d;" goto statement_identifier ;) })) (do_statement "do {\n      if (local_30 < (int)uVar13) {\n        iVar12 = sqlite3CorruptError(0xfdf6);\n        return iVar12;\n      }\n      uVar14 = (uint)CONCAT11(puVar6[uVar13],puVar6[uVar13 + 1]);\n      uVar15 = uVar13 + CONCAT11(puVar6[uVar13 + 2],puVar6[uVar13 + 3]);\n      iVar12 = iVar12 + (uint)CONCAT11(puVar6[uVar13 + 2],puVar6[uVar13 + 3]);\n      uVar13 = uVar14;\n    } while (uVar15 + 3 < uVar14);" do (compound_statement "{\n      if (local_30 < (int)uVar13) {\n        iVar12 = sqlite3CorruptError(0xfdf6);\n        return iVar12;\n      }\n      uVar14 = (uint)CONCAT11(puVar6[uVar13],puVar6[uVar13 + 1]);\n      uVar15 = uVar13 + CONCAT11(puVar6[uVar13 + 2],puVar6[uVar13 + 3]);\n      iVar12 = iVar12 + (uint)CONCAT11(puVar6[uVar13 + 2],puVar6[uVar13 + 3]);\n      uVar13 = uVar14;\n    }" { (if_statement "if (local_30 < (int)uVar13) {\n        iVar12 = sqlite3CorruptError(0xfdf6);\n        return iVar12;\n      }" if (parenthesized_expression "(local_30 < (int)uVar13)" ( (binary_expression "local_30 < (int)uVar13" identifier < (cast_expression "(int)uVar13" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n        iVar12 = sqlite3CorruptError(0xfdf6);\n        return iVar12;\n      }" { (expression_statement "iVar12 = sqlite3CorruptError(0xfdf6);" (assignment_expression "iVar12 = sqlite3CorruptError(0xfdf6)" identifier = (call_expression "sqlite3CorruptError(0xfdf6)" identifier (argument_list "(0xfdf6)" ( number_literal )))) ;) (return_statement "return iVar12;" return identifier ;) })) (expression_statement "uVar14 = (uint)CONCAT11(puVar6[uVar13],puVar6[uVar13 + 1]);" (assignment_expression "uVar14 = (uint)CONCAT11(puVar6[uVar13],puVar6[uVar13 + 1])" identifier = (cast_expression "(uint)CONCAT11(puVar6[uVar13],puVar6[uVar13 + 1])" ( (type_descriptor "uint" type_identifier) ) (call_expression "CONCAT11(puVar6[uVar13],puVar6[uVar13 + 1])" identifier (argument_list "(puVar6[uVar13],puVar6[uVar13 + 1])" ( (subscript_expression "puVar6[uVar13]" identifier [ identifier ]) , (subscript_expression "puVar6[uVar13 + 1]" identifier [ (binary_expression "uVar13 + 1" identifier + number_literal) ]) ))))) ;) (expression_statement "uVar15 = uVar13 + CONCAT11(puVar6[uVar13 + 2],puVar6[uVar13 + 3]);" (assignment_expression "uVar15 = uVar13 + CONCAT11(puVar6[uVar13 + 2],puVar6[uVar13 + 3])" identifier = (binary_expression "uVar13 + CONCAT11(puVar6[uVar13 + 2],puVar6[uVar13 + 3])" identifier + (call_expression "CONCAT11(puVar6[uVar13 + 2],puVar6[uVar13 + 3])" identifier (argument_list "(puVar6[uVar13 + 2],puVar6[uVar13 + 3])" ( (subscript_expression "puVar6[uVar13 + 2]" identifier [ (binary_expression "uVar13 + 2" identifier + number_literal) ]) , (subscript_expression "puVar6[uVar13 + 3]" identifier [ (binary_expression "uVar13 + 3" identifier + number_literal) ]) ))))) ;) (expression_statement "iVar12 = iVar12 + (uint)CONCAT11(puVar6[uVar13 + 2],puVar6[uVar13 + 3]);" (assignment_expression "iVar12 = iVar12 + (uint)CONCAT11(puVar6[uVar13 + 2],puVar6[uVar13 + 3])" identifier = (binary_expression "iVar12 + (uint)CONCAT11(puVar6[uVar13 + 2],puVar6[uVar13 + 3])" identifier + (cast_expression "(uint)CONCAT11(puVar6[uVar13 + 2],puVar6[uVar13 + 3])" ( (type_descriptor "uint" type_identifier) ) (call_expression "CONCAT11(puVar6[uVar13 + 2],puVar6[uVar13 + 3])" identifier (argument_list "(puVar6[uVar13 + 2],puVar6[uVar13 + 3])" ( (subscript_expression "puVar6[uVar13 + 2]" identifier [ (binary_expression "uVar13 + 2" identifier + number_literal) ]) , (subscript_expression "puVar6[uVar13 + 3]" identifier [ (binary_expression "uVar13 + 3" identifier + number_literal) ]) )))))) ;) (expression_statement "uVar13 = uVar14;" (assignment_expression "uVar13 = uVar14" identifier = identifier) ;) }) while (parenthesized_expression "(uVar15 + 3 < uVar14)" ( (binary_expression "uVar15 + 3 < uVar14" (binary_expression "uVar15 + 3" identifier + number_literal) < identifier) )) ;) (if_statement "if (uVar14 != 0) {\n      lineno = 0xfe00;\n      goto LAB_0005170d;\n    }" if (parenthesized_expression "(uVar14 != 0)" ( (binary_expression "uVar14 != 0" identifier != number_literal) )) (compound_statement "{\n      lineno = 0xfe00;\n      goto LAB_0005170d;\n    }" { (expression_statement "lineno = 0xfe00;" (assignment_expression "lineno = 0xfe00" identifier = number_literal) ;) (goto_statement "goto LAB_0005170d;" goto statement_identifier ;) })) (expression_statement "lineno = 0xfe04;" (assignment_expression "lineno = 0xfe04" identifier = number_literal) ;) (if_statement "if (uVar8 < uVar15) goto LAB_0005170d;" if (parenthesized_expression "(uVar8 < uVar15)" ( (binary_expression "uVar8 < uVar15" identifier < identifier) )) (goto_statement "goto LAB_0005170d;" goto statement_identifier ;)) })) (if_statement "if (iVar12 <= (int)uVar8) {\n    local_2c = (short)uVar2;\n    pPage->isInit = '\x01';\n    pPage->nFree = (short)iVar12 - local_2c;\n    return 0;\n  }" if (parenthesized_expression "(iVar12 <= (int)uVar8)" ( (binary_expression "iVar12 <= (int)uVar8" identifier <= (cast_expression "(int)uVar8" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n    local_2c = (short)uVar2;\n    pPage->isInit = '\x01';\n    pPage->nFree = (short)iVar12 - local_2c;\n    return 0;\n  }" { (expression_statement "local_2c = (short)uVar2;" (assignment_expression "local_2c = (short)uVar2" identifier = (cast_expression "(short)uVar2" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) identifier)) ;) (expression_statement "pPage->isInit = '\x01';" (assignment_expression "pPage->isInit = '\x01'" (field_expression "pPage->isInit" identifier -> field_identifier) = (char_literal "'\x01'" ' escape_sequence ')) ;) (expression_statement "pPage->nFree = (short)iVar12 - local_2c;" (assignment_expression "pPage->nFree = (short)iVar12 - local_2c" (field_expression "pPage->nFree" identifier -> field_identifier) = (binary_expression "(short)iVar12 - local_2c" (cast_expression "(short)iVar12" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) identifier) - identifier)) ;) (return_statement "return 0;" return number_literal ;) })) (expression_statement "lineno = 0xfe10;" (assignment_expression "lineno = 0xfe10" identifier = number_literal) ;) (labeled_statement "LAB_0005170d:\n  iVar12 = sqlite3CorruptError(lineno);" statement_identifier : (expression_statement "iVar12 = sqlite3CorruptError(lineno);" (assignment_expression "iVar12 = sqlite3CorruptError(lineno)" identifier = (call_expression "sqlite3CorruptError(lineno)" identifier (argument_list "(lineno)" ( identifier )))) ;)) (return_statement "return iVar12;" return identifier ;) })))
(translation_unit "undefined4 __regparm3 FUN_00051560(undefined1 *param_1)\n\n{\n  ushort *puVar1;\n  uint uVar2;\n  byte bVar3;\n  undefined1 uVar4;\n  undefined1 uVar5;\n  short sVar6;\n  int iVar7;\n  uint uVar8;\n  ushort uVar9;\n  uint uVar10;\n  int iVar11;\n  uint uVar12;\n  undefined4 uVar13;\n  uint uVar14;\n  uint uVar15;\n  int iVar16;\n  int local_30;\n  short local_2c;\n  \n  bVar3 = param_1[9];\n  iVar7 = *(int *)(param_1 + 0x38);\n  iVar16 = *(int *)(param_1 + 0x34);\n  uVar10 = (uint)bVar3;\n  iVar11 = FUN_000513a0();\n  if (iVar11 != 0) {\n    uVar13 = FUN_00051360();\n    return uVar13;\n  }\n  sVar6 = *(short *)(iVar16 + 0x20);\n  param_1[0xc] = 0;\n  iVar11 = bVar3 + 8 + (uint)(byte)param_1[10];\n  *(short *)(param_1 + 0x18) = sVar6 + -1;\n  uVar8 = *(uint *)(iVar16 + 0x24);\n  *(short *)(param_1 + 0x12) = (short)iVar11;\n  *(uint *)(param_1 + 0x44) = (uint)(byte)param_1[10] + iVar7;\n  *(uint *)(param_1 + 0x3c) = uVar8 + iVar7;\n  puVar1 = (ushort *)(iVar7 + iVar11);\n  *(ushort **)(param_1 + 0x40) = puVar1;\n  uVar4 = *(undefined1 *)(iVar7 + 5 + uVar10);\n  uVar5 = *(undefined1 *)(iVar7 + 6 + uVar10);\n  uVar9 = CONCAT11(*(undefined1 *)(iVar7 + 3 + uVar10),*(undefined1 *)(iVar7 + 4 + uVar10));\n  *(ushort *)(param_1 + 0x16) = uVar9;\n  if ((*(int *)(iVar16 + 0x20) - 8U) / 6 < (uint)uVar9) goto LAB_0005170d;\n  uVar2 = iVar11 + (uint)uVar9 * 2;\n  local_30 = uVar8 - 4;\n  if ((*(byte *)(*(int *)(iVar16 + 4) + 0x1e) & 0x20) != 0) {\n    if (param_1[8] == '\0') {\n      local_30 = uVar8 - 5;\n      if (uVar9 != 0) goto LAB_00051733;\nLAB_000517f0:\n      local_30 = local_30 + 1;\n    }\n    else if (uVar9 != 0) {\nLAB_00051733:\n      uVar12 = (uint)(ushort)(*puVar1 << 8 | *puVar1 >> 8);\n      if (((int)uVar12 <= local_30) && (uVar2 <= uVar12)) {\n        iVar16 = 0;\n        do {\n          uVar14 = (**(code **)(param_1 + 0x4c))(param_1,iVar7 + uVar12);\n          if ((int)uVar8 < (int)(uVar12 + (uVar14 & 0xffff))) {\n            uVar13 = FUN_00051360();\n            return uVar13;\n          }\n          iVar16 = iVar16 + 1;\n          if ((int)(uint)*(ushort *)(param_1 + 0x16) <= iVar16) {\n            if (param_1[8] == '\0') goto LAB_000517f0;\n            goto LAB_00051647;\n          }\n          uVar12 = (uint)(ushort)(puVar1[iVar16] << 8 | puVar1[iVar16] >> 8);\n        } while ((uVar2 <= uVar12) && ((int)uVar12 <= local_30));\n      }\n      uVar13 = FUN_00051360();\n      return uVar13;\n    }\n  }\nLAB_00051647:\n  iVar16 = (CONCAT11(uVar4,uVar5) - 1 & 0xffff) + 1 + (uint)*(byte *)(iVar7 + 7 + uVar10);\n  uVar10 = (uint)CONCAT11(*(undefined1 *)(iVar7 + 1 + uVar10),*(undefined1 *)(iVar7 + 2 + uVar10));\n  if (uVar10 != 0) {\n    if (uVar10 < uVar2) goto LAB_0005170d;\n    do {\n      if (local_30 < (int)uVar10) {\n        uVar13 = FUN_00051360();\n        return uVar13;\n      }\n      uVar12 = (uint)CONCAT11(*(undefined1 *)(iVar7 + uVar10),*(undefined1 *)(iVar7 + 1 + uVar10));\n      uVar14 = (uint)CONCAT11(*(undefined1 *)(iVar7 + 2 + uVar10),\n                              *(undefined1 *)(iVar7 + 3 + uVar10));\n      uVar15 = uVar10 + uVar14;\n      iVar16 = iVar16 + uVar14;\n      uVar10 = uVar12;\n    } while (uVar15 + 3 < uVar12);\n    if ((uVar12 != 0) || (uVar8 < uVar15)) goto LAB_0005170d;\n  }\n  if (iVar16 <= (int)uVar8) {\n    local_2c = (short)uVar2;\n    *param_1 = 1;\n    *(short *)(param_1 + 0x14) = (short)iVar16 - local_2c;\n    return 0;\n  }\nLAB_0005170d:\n  uVar13 = FUN_00051360();\n  return uVar13;\n}\n\n" (function_definition "undefined4 __regparm3 FUN_00051560(undefined1 *param_1)\n\n{\n  ushort *puVar1;\n  uint uVar2;\n  byte bVar3;\n  undefined1 uVar4;\n  undefined1 uVar5;\n  short sVar6;\n  int iVar7;\n  uint uVar8;\n  ushort uVar9;\n  uint uVar10;\n  int iVar11;\n  uint uVar12;\n  undefined4 uVar13;\n  uint uVar14;\n  uint uVar15;\n  int iVar16;\n  int local_30;\n  short local_2c;\n  \n  bVar3 = param_1[9];\n  iVar7 = *(int *)(param_1 + 0x38);\n  iVar16 = *(int *)(param_1 + 0x34);\n  uVar10 = (uint)bVar3;\n  iVar11 = FUN_000513a0();\n  if (iVar11 != 0) {\n    uVar13 = FUN_00051360();\n    return uVar13;\n  }\n  sVar6 = *(short *)(iVar16 + 0x20);\n  param_1[0xc] = 0;\n  iVar11 = bVar3 + 8 + (uint)(byte)param_1[10];\n  *(short *)(param_1 + 0x18) = sVar6 + -1;\n  uVar8 = *(uint *)(iVar16 + 0x24);\n  *(short *)(param_1 + 0x12) = (short)iVar11;\n  *(uint *)(param_1 + 0x44) = (uint)(byte)param_1[10] + iVar7;\n  *(uint *)(param_1 + 0x3c) = uVar8 + iVar7;\n  puVar1 = (ushort *)(iVar7 + iVar11);\n  *(ushort **)(param_1 + 0x40) = puVar1;\n  uVar4 = *(undefined1 *)(iVar7 + 5 + uVar10);\n  uVar5 = *(undefined1 *)(iVar7 + 6 + uVar10);\n  uVar9 = CONCAT11(*(undefined1 *)(iVar7 + 3 + uVar10),*(undefined1 *)(iVar7 + 4 + uVar10));\n  *(ushort *)(param_1 + 0x16) = uVar9;\n  if ((*(int *)(iVar16 + 0x20) - 8U) / 6 < (uint)uVar9) goto LAB_0005170d;\n  uVar2 = iVar11 + (uint)uVar9 * 2;\n  local_30 = uVar8 - 4;\n  if ((*(byte *)(*(int *)(iVar16 + 4) + 0x1e) & 0x20) != 0) {\n    if (param_1[8] == '\0') {\n      local_30 = uVar8 - 5;\n      if (uVar9 != 0) goto LAB_00051733;\nLAB_000517f0:\n      local_30 = local_30 + 1;\n    }\n    else if (uVar9 != 0) {\nLAB_00051733:\n      uVar12 = (uint)(ushort)(*puVar1 << 8 | *puVar1 >> 8);\n      if (((int)uVar12 <= local_30) && (uVar2 <= uVar12)) {\n        iVar16 = 0;\n        do {\n          uVar14 = (**(code **)(param_1 + 0x4c))(param_1,iVar7 + uVar12);\n          if ((int)uVar8 < (int)(uVar12 + (uVar14 & 0xffff))) {\n            uVar13 = FUN_00051360();\n            return uVar13;\n          }\n          iVar16 = iVar16 + 1;\n          if ((int)(uint)*(ushort *)(param_1 + 0x16) <= iVar16) {\n            if (param_1[8] == '\0') goto LAB_000517f0;\n            goto LAB_00051647;\n          }\n          uVar12 = (uint)(ushort)(puVar1[iVar16] << 8 | puVar1[iVar16] >> 8);\n        } while ((uVar2 <= uVar12) && ((int)uVar12 <= local_30));\n      }\n      uVar13 = FUN_00051360();\n      return uVar13;\n    }\n  }\nLAB_00051647:\n  iVar16 = (CONCAT11(uVar4,uVar5) - 1 & 0xffff) + 1 + (uint)*(byte *)(iVar7 + 7 + uVar10);\n  uVar10 = (uint)CONCAT11(*(undefined1 *)(iVar7 + 1 + uVar10),*(undefined1 *)(iVar7 + 2 + uVar10));\n  if (uVar10 != 0) {\n    if (uVar10 < uVar2) goto LAB_0005170d;\n    do {\n      if (local_30 < (int)uVar10) {\n        uVar13 = FUN_00051360();\n        return uVar13;\n      }\n      uVar12 = (uint)CONCAT11(*(undefined1 *)(iVar7 + uVar10),*(undefined1 *)(iVar7 + 1 + uVar10));\n      uVar14 = (uint)CONCAT11(*(undefined1 *)(iVar7 + 2 + uVar10),\n                              *(undefined1 *)(iVar7 + 3 + uVar10));\n      uVar15 = uVar10 + uVar14;\n      iVar16 = iVar16 + uVar14;\n      uVar10 = uVar12;\n    } while (uVar15 + 3 < uVar12);\n    if ((uVar12 != 0) || (uVar8 < uVar15)) goto LAB_0005170d;\n  }\n  if (iVar16 <= (int)uVar8) {\n    local_2c = (short)uVar2;\n    *param_1 = 1;\n    *(short *)(param_1 + 0x14) = (short)iVar16 - local_2c;\n    return 0;\n  }\nLAB_0005170d:\n  uVar13 = FUN_00051360();\n  return uVar13;\n}" type_identifier (ERROR "__regparm3" identifier) (function_declarator "FUN_00051560(undefined1 *param_1)" identifier (parameter_list "(undefined1 *param_1)" ( (parameter_declaration "undefined1 *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) ))) (compound_statement "{\n  ushort *puVar1;\n  uint uVar2;\n  byte bVar3;\n  undefined1 uVar4;\n  undefined1 uVar5;\n  short sVar6;\n  int iVar7;\n  uint uVar8;\n  ushort uVar9;\n  uint uVar10;\n  int iVar11;\n  uint uVar12;\n  undefined4 uVar13;\n  uint uVar14;\n  uint uVar15;\n  int iVar16;\n  int local_30;\n  short local_2c;\n  \n  bVar3 = param_1[9];\n  iVar7 = *(int *)(param_1 + 0x38);\n  iVar16 = *(int *)(param_1 + 0x34);\n  uVar10 = (uint)bVar3;\n  iVar11 = FUN_000513a0();\n  if (iVar11 != 0) {\n    uVar13 = FUN_00051360();\n    return uVar13;\n  }\n  sVar6 = *(short *)(iVar16 + 0x20);\n  param_1[0xc] = 0;\n  iVar11 = bVar3 + 8 + (uint)(byte)param_1[10];\n  *(short *)(param_1 + 0x18) = sVar6 + -1;\n  uVar8 = *(uint *)(iVar16 + 0x24);\n  *(short *)(param_1 + 0x12) = (short)iVar11;\n  *(uint *)(param_1 + 0x44) = (uint)(byte)param_1[10] + iVar7;\n  *(uint *)(param_1 + 0x3c) = uVar8 + iVar7;\n  puVar1 = (ushort *)(iVar7 + iVar11);\n  *(ushort **)(param_1 + 0x40) = puVar1;\n  uVar4 = *(undefined1 *)(iVar7 + 5 + uVar10);\n  uVar5 = *(undefined1 *)(iVar7 + 6 + uVar10);\n  uVar9 = CONCAT11(*(undefined1 *)(iVar7 + 3 + uVar10),*(undefined1 *)(iVar7 + 4 + uVar10));\n  *(ushort *)(param_1 + 0x16) = uVar9;\n  if ((*(int *)(iVar16 + 0x20) - 8U) / 6 < (uint)uVar9) goto LAB_0005170d;\n  uVar2 = iVar11 + (uint)uVar9 * 2;\n  local_30 = uVar8 - 4;\n  if ((*(byte *)(*(int *)(iVar16 + 4) + 0x1e) & 0x20) != 0) {\n    if (param_1[8] == '\0') {\n      local_30 = uVar8 - 5;\n      if (uVar9 != 0) goto LAB_00051733;\nLAB_000517f0:\n      local_30 = local_30 + 1;\n    }\n    else if (uVar9 != 0) {\nLAB_00051733:\n      uVar12 = (uint)(ushort)(*puVar1 << 8 | *puVar1 >> 8);\n      if (((int)uVar12 <= local_30) && (uVar2 <= uVar12)) {\n        iVar16 = 0;\n        do {\n          uVar14 = (**(code **)(param_1 + 0x4c))(param_1,iVar7 + uVar12);\n          if ((int)uVar8 < (int)(uVar12 + (uVar14 & 0xffff))) {\n            uVar13 = FUN_00051360();\n            return uVar13;\n          }\n          iVar16 = iVar16 + 1;\n          if ((int)(uint)*(ushort *)(param_1 + 0x16) <= iVar16) {\n            if (param_1[8] == '\0') goto LAB_000517f0;\n            goto LAB_00051647;\n          }\n          uVar12 = (uint)(ushort)(puVar1[iVar16] << 8 | puVar1[iVar16] >> 8);\n        } while ((uVar2 <= uVar12) && ((int)uVar12 <= local_30));\n      }\n      uVar13 = FUN_00051360();\n      return uVar13;\n    }\n  }\nLAB_00051647:\n  iVar16 = (CONCAT11(uVar4,uVar5) - 1 & 0xffff) + 1 + (uint)*(byte *)(iVar7 + 7 + uVar10);\n  uVar10 = (uint)CONCAT11(*(undefined1 *)(iVar7 + 1 + uVar10),*(undefined1 *)(iVar7 + 2 + uVar10));\n  if (uVar10 != 0) {\n    if (uVar10 < uVar2) goto LAB_0005170d;\n    do {\n      if (local_30 < (int)uVar10) {\n        uVar13 = FUN_00051360();\n        return uVar13;\n      }\n      uVar12 = (uint)CONCAT11(*(undefined1 *)(iVar7 + uVar10),*(undefined1 *)(iVar7 + 1 + uVar10));\n      uVar14 = (uint)CONCAT11(*(undefined1 *)(iVar7 + 2 + uVar10),\n                              *(undefined1 *)(iVar7 + 3 + uVar10));\n      uVar15 = uVar10 + uVar14;\n      iVar16 = iVar16 + uVar14;\n      uVar10 = uVar12;\n    } while (uVar15 + 3 < uVar12);\n    if ((uVar12 != 0) || (uVar8 < uVar15)) goto LAB_0005170d;\n  }\n  if (iVar16 <= (int)uVar8) {\n    local_2c = (short)uVar2;\n    *param_1 = 1;\n    *(short *)(param_1 + 0x14) = (short)iVar16 - local_2c;\n    return 0;\n  }\nLAB_0005170d:\n  uVar13 = FUN_00051360();\n  return uVar13;\n}" { (declaration "ushort *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "byte bVar3;" type_identifier identifier ;) (declaration "undefined1 uVar4;" type_identifier identifier ;) (declaration "undefined1 uVar5;" type_identifier identifier ;) (declaration "short sVar6;" (sized_type_specifier "short" short) identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "uint uVar8;" type_identifier identifier ;) (declaration "ushort uVar9;" type_identifier identifier ;) (declaration "uint uVar10;" type_identifier identifier ;) (declaration "int iVar11;" primitive_type identifier ;) (declaration "uint uVar12;" type_identifier identifier ;) (declaration "undefined4 uVar13;" type_identifier identifier ;) (declaration "uint uVar14;" type_identifier identifier ;) (declaration "uint uVar15;" type_identifier identifier ;) (declaration "int iVar16;" primitive_type identifier ;) (declaration "int local_30;" primitive_type identifier ;) (declaration "short local_2c;" (sized_type_specifier "short" short) identifier ;) (expression_statement "bVar3 = param_1[9];" (assignment_expression "bVar3 = param_1[9]" identifier = (subscript_expression "param_1[9]" identifier [ number_literal ])) ;) (expression_statement "iVar7 = *(int *)(param_1 + 0x38);" (assignment_expression "iVar7 = *(int *)(param_1 + 0x38)" identifier = (pointer_expression "*(int *)(param_1 + 0x38)" * (cast_expression "(int *)(param_1 + 0x38)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x38)" ( (binary_expression "param_1 + 0x38" identifier + number_literal) ))))) ;) (expression_statement "iVar16 = *(int *)(param_1 + 0x34);" (assignment_expression "iVar16 = *(int *)(param_1 + 0x34)" identifier = (pointer_expression "*(int *)(param_1 + 0x34)" * (cast_expression "(int *)(param_1 + 0x34)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x34)" ( (binary_expression "param_1 + 0x34" identifier + number_literal) ))))) ;) (expression_statement "uVar10 = (uint)bVar3;" (assignment_expression "uVar10 = (uint)bVar3" identifier = (cast_expression "(uint)bVar3" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "iVar11 = FUN_000513a0();" (assignment_expression "iVar11 = FUN_000513a0()" identifier = (call_expression "FUN_000513a0()" identifier (argument_list "()" ( )))) ;) (if_statement "if (iVar11 != 0) {\n    uVar13 = FUN_00051360();\n    return uVar13;\n  }" if (parenthesized_expression "(iVar11 != 0)" ( (binary_expression "iVar11 != 0" identifier != number_literal) )) (compound_statement "{\n    uVar13 = FUN_00051360();\n    return uVar13;\n  }" { (expression_statement "uVar13 = FUN_00051360();" (assignment_expression "uVar13 = FUN_00051360()" identifier = (call_expression "FUN_00051360()" identifier (argument_list "()" ( )))) ;) (return_statement "return uVar13;" return identifier ;) })) (expression_statement "sVar6 = *(short *)(iVar16 + 0x20);" (assignment_expression "sVar6 = *(short *)(iVar16 + 0x20)" identifier = (pointer_expression "*(short *)(iVar16 + 0x20)" * (cast_expression "(short *)(iVar16 + 0x20)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar16 + 0x20)" ( (binary_expression "iVar16 + 0x20" identifier + number_literal) ))))) ;) (expression_statement "param_1[0xc] = 0;" (assignment_expression "param_1[0xc] = 0" (subscript_expression "param_1[0xc]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "iVar11 = bVar3 + 8 + (uint)(byte)param_1[10];" (assignment_expression "iVar11 = bVar3 + 8 + (uint)(byte)param_1[10]" identifier = (binary_expression "bVar3 + 8 + (uint)(byte)param_1[10]" (binary_expression "bVar3 + 8" identifier + number_literal) + (cast_expression "(uint)(byte)param_1[10]" ( (type_descriptor "uint" type_identifier) ) (cast_expression "(byte)param_1[10]" ( (type_descriptor "byte" type_identifier) ) (subscript_expression "param_1[10]" identifier [ number_literal ]))))) ;) (expression_statement "*(short *)(param_1 + 0x18) = sVar6 + -1;" (assignment_expression "*(short *)(param_1 + 0x18) = sVar6 + -1" (pointer_expression "*(short *)(param_1 + 0x18)" * (cast_expression "(short *)(param_1 + 0x18)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) )))) = (binary_expression "sVar6 + -1" identifier + number_literal)) ;) (expression_statement "uVar8 = *(uint *)(iVar16 + 0x24);" (assignment_expression "uVar8 = *(uint *)(iVar16 + 0x24)" identifier = (pointer_expression "*(uint *)(iVar16 + 0x24)" * (cast_expression "(uint *)(iVar16 + 0x24)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar16 + 0x24)" ( (binary_expression "iVar16 + 0x24" identifier + number_literal) ))))) ;) (expression_statement "*(short *)(param_1 + 0x12) = (short)iVar11;" (assignment_expression "*(short *)(param_1 + 0x12) = (short)iVar11" (pointer_expression "*(short *)(param_1 + 0x12)" * (cast_expression "(short *)(param_1 + 0x12)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x12)" ( (binary_expression "param_1 + 0x12" identifier + number_literal) )))) = (cast_expression "(short)iVar11" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) identifier)) ;) (expression_statement "*(uint *)(param_1 + 0x44) = (uint)(byte)param_1[10] + iVar7;" (assignment_expression "*(uint *)(param_1 + 0x44) = (uint)(byte)param_1[10] + iVar7" (pointer_expression "*(uint *)(param_1 + 0x44)" * (cast_expression "(uint *)(param_1 + 0x44)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x44)" ( (binary_expression "param_1 + 0x44" identifier + number_literal) )))) = (binary_expression "(uint)(byte)param_1[10] + iVar7" (cast_expression "(uint)(byte)param_1[10]" ( (type_descriptor "uint" type_identifier) ) (cast_expression "(byte)param_1[10]" ( (type_descriptor "byte" type_identifier) ) (subscript_expression "param_1[10]" identifier [ number_literal ]))) + identifier)) ;) (expression_statement "*(uint *)(param_1 + 0x3c) = uVar8 + iVar7;" (assignment_expression "*(uint *)(param_1 + 0x3c) = uVar8 + iVar7" (pointer_expression "*(uint *)(param_1 + 0x3c)" * (cast_expression "(uint *)(param_1 + 0x3c)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x3c)" ( (binary_expression "param_1 + 0x3c" identifier + number_literal) )))) = (binary_expression "uVar8 + iVar7" identifier + identifier)) ;) (expression_statement "puVar1 = (ushort *)(iVar7 + iVar11);" (assignment_expression "puVar1 = (ushort *)(iVar7 + iVar11)" identifier = (cast_expression "(ushort *)(iVar7 + iVar11)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + iVar11)" ( (binary_expression "iVar7 + iVar11" identifier + identifier) )))) ;) (expression_statement "*(ushort **)(param_1 + 0x40) = puVar1;" (assignment_expression "*(ushort **)(param_1 + 0x40) = puVar1" (pointer_expression "*(ushort **)(param_1 + 0x40)" * (cast_expression "(ushort **)(param_1 + 0x40)" ( (type_descriptor "ushort **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) )))) = identifier) ;) (expression_statement "uVar4 = *(undefined1 *)(iVar7 + 5 + uVar10);" (assignment_expression "uVar4 = *(undefined1 *)(iVar7 + 5 + uVar10)" identifier = (pointer_expression "*(undefined1 *)(iVar7 + 5 + uVar10)" * (cast_expression "(undefined1 *)(iVar7 + 5 + uVar10)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 5 + uVar10)" ( (binary_expression "iVar7 + 5 + uVar10" (binary_expression "iVar7 + 5" identifier + number_literal) + identifier) ))))) ;) (expression_statement "uVar5 = *(undefined1 *)(iVar7 + 6 + uVar10);" (assignment_expression "uVar5 = *(undefined1 *)(iVar7 + 6 + uVar10)" identifier = (pointer_expression "*(undefined1 *)(iVar7 + 6 + uVar10)" * (cast_expression "(undefined1 *)(iVar7 + 6 + uVar10)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 6 + uVar10)" ( (binary_expression "iVar7 + 6 + uVar10" (binary_expression "iVar7 + 6" identifier + number_literal) + identifier) ))))) ;) (expression_statement "uVar9 = CONCAT11(*(undefined1 *)(iVar7 + 3 + uVar10),*(undefined1 *)(iVar7 + 4 + uVar10));" (assignment_expression "uVar9 = CONCAT11(*(undefined1 *)(iVar7 + 3 + uVar10),*(undefined1 *)(iVar7 + 4 + uVar10))" identifier = (call_expression "CONCAT11(*(undefined1 *)(iVar7 + 3 + uVar10),*(undefined1 *)(iVar7 + 4 + uVar10))" identifier (argument_list "(*(undefined1 *)(iVar7 + 3 + uVar10),*(undefined1 *)(iVar7 + 4 + uVar10))" ( (pointer_expression "*(undefined1 *)(iVar7 + 3 + uVar10)" * (cast_expression "(undefined1 *)(iVar7 + 3 + uVar10)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 3 + uVar10)" ( (binary_expression "iVar7 + 3 + uVar10" (binary_expression "iVar7 + 3" identifier + number_literal) + identifier) )))) , (pointer_expression "*(undefined1 *)(iVar7 + 4 + uVar10)" * (cast_expression "(undefined1 *)(iVar7 + 4 + uVar10)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 4 + uVar10)" ( (binary_expression "iVar7 + 4 + uVar10" (binary_expression "iVar7 + 4" identifier + number_literal) + identifier) )))) )))) ;) (expression_statement "*(ushort *)(param_1 + 0x16) = uVar9;" (assignment_expression "*(ushort *)(param_1 + 0x16) = uVar9" (pointer_expression "*(ushort *)(param_1 + 0x16)" * (cast_expression "(ushort *)(param_1 + 0x16)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16)" ( (binary_expression "param_1 + 0x16" identifier + number_literal) )))) = identifier) ;) (if_statement "if ((*(int *)(iVar16 + 0x20) - 8U) / 6 < (uint)uVar9) goto LAB_0005170d;" if (parenthesized_expression "((*(int *)(iVar16 + 0x20) - 8U) / 6 < (uint)uVar9)" ( (binary_expression "(*(int *)(iVar16 + 0x20) - 8U) / 6 < (uint)uVar9" (binary_expression "(*(int *)(iVar16 + 0x20) - 8U) / 6" (parenthesized_expression "(*(int *)(iVar16 + 0x20) - 8U)" ( (binary_expression "*(int *)(iVar16 + 0x20) - 8U" (pointer_expression "*(int *)(iVar16 + 0x20)" * (cast_expression "(int *)(iVar16 + 0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar16 + 0x20)" ( (binary_expression "iVar16 + 0x20" identifier + number_literal) )))) - number_literal) )) / number_literal) < (cast_expression "(uint)uVar9" ( (type_descriptor "uint" type_identifier) ) identifier)) )) (goto_statement "goto LAB_0005170d;" goto statement_identifier ;)) (expression_statement "uVar2 = iVar11 + (uint)uVar9 * 2;" (assignment_expression "uVar2 = iVar11 + (uint)uVar9 * 2" identifier = (binary_expression "iVar11 + (uint)uVar9 * 2" identifier + (binary_expression "(uint)uVar9 * 2" (cast_expression "(uint)uVar9" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal))) ;) (expression_statement "local_30 = uVar8 - 4;" (assignment_expression "local_30 = uVar8 - 4" identifier = (binary_expression "uVar8 - 4" identifier - number_literal)) ;) (if_statement "if ((*(byte *)(*(int *)(iVar16 + 4) + 0x1e) & 0x20) != 0) {\n    if (param_1[8] == '\0') {\n      local_30 = uVar8 - 5;\n      if (uVar9 != 0) goto LAB_00051733;\nLAB_000517f0:\n      local_30 = local_30 + 1;\n    }\n    else if (uVar9 != 0) {\nLAB_00051733:\n      uVar12 = (uint)(ushort)(*puVar1 << 8 | *puVar1 >> 8);\n      if (((int)uVar12 <= local_30) && (uVar2 <= uVar12)) {\n        iVar16 = 0;\n        do {\n          uVar14 = (**(code **)(param_1 + 0x4c))(param_1,iVar7 + uVar12);\n          if ((int)uVar8 < (int)(uVar12 + (uVar14 & 0xffff))) {\n            uVar13 = FUN_00051360();\n            return uVar13;\n          }\n          iVar16 = iVar16 + 1;\n          if ((int)(uint)*(ushort *)(param_1 + 0x16) <= iVar16) {\n            if (param_1[8] == '\0') goto LAB_000517f0;\n            goto LAB_00051647;\n          }\n          uVar12 = (uint)(ushort)(puVar1[iVar16] << 8 | puVar1[iVar16] >> 8);\n        } while ((uVar2 <= uVar12) && ((int)uVar12 <= local_30));\n      }\n      uVar13 = FUN_00051360();\n      return uVar13;\n    }\n  }" if (parenthesized_expression "((*(byte *)(*(int *)(iVar16 + 4) + 0x1e) & 0x20) != 0)" ( (binary_expression "(*(byte *)(*(int *)(iVar16 + 4) + 0x1e) & 0x20) != 0" (parenthesized_expression "(*(byte *)(*(int *)(iVar16 + 4) + 0x1e) & 0x20)" ( (binary_expression "*(byte *)(*(int *)(iVar16 + 4) + 0x1e) & 0x20" (pointer_expression "*(byte *)(*(int *)(iVar16 + 4) + 0x1e)" * (cast_expression "(byte *)(*(int *)(iVar16 + 4) + 0x1e)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(iVar16 + 4) + 0x1e)" ( (binary_expression "*(int *)(iVar16 + 4) + 0x1e" (pointer_expression "*(int *)(iVar16 + 4)" * (cast_expression "(int *)(iVar16 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar16 + 4)" ( (binary_expression "iVar16 + 4" identifier + number_literal) )))) + number_literal) )))) & number_literal) )) != number_literal) )) (compound_statement "{\n    if (param_1[8] == '\0') {\n      local_30 = uVar8 - 5;\n      if (uVar9 != 0) goto LAB_00051733;\nLAB_000517f0:\n      local_30 = local_30 + 1;\n    }\n    else if (uVar9 != 0) {\nLAB_00051733:\n      uVar12 = (uint)(ushort)(*puVar1 << 8 | *puVar1 >> 8);\n      if (((int)uVar12 <= local_30) && (uVar2 <= uVar12)) {\n        iVar16 = 0;\n        do {\n          uVar14 = (**(code **)(param_1 + 0x4c))(param_1,iVar7 + uVar12);\n          if ((int)uVar8 < (int)(uVar12 + (uVar14 & 0xffff))) {\n            uVar13 = FUN_00051360();\n            return uVar13;\n          }\n          iVar16 = iVar16 + 1;\n          if ((int)(uint)*(ushort *)(param_1 + 0x16) <= iVar16) {\n            if (param_1[8] == '\0') goto LAB_000517f0;\n            goto LAB_00051647;\n          }\n          uVar12 = (uint)(ushort)(puVar1[iVar16] << 8 | puVar1[iVar16] >> 8);\n        } while ((uVar2 <= uVar12) && ((int)uVar12 <= local_30));\n      }\n      uVar13 = FUN_00051360();\n      return uVar13;\n    }\n  }" { (if_statement "if (param_1[8] == '\0') {\n      local_30 = uVar8 - 5;\n      if (uVar9 != 0) goto LAB_00051733;\nLAB_000517f0:\n      local_30 = local_30 + 1;\n    }\n    else if (uVar9 != 0) {\nLAB_00051733:\n      uVar12 = (uint)(ushort)(*puVar1 << 8 | *puVar1 >> 8);\n      if (((int)uVar12 <= local_30) && (uVar2 <= uVar12)) {\n        iVar16 = 0;\n        do {\n          uVar14 = (**(code **)(param_1 + 0x4c))(param_1,iVar7 + uVar12);\n          if ((int)uVar8 < (int)(uVar12 + (uVar14 & 0xffff))) {\n            uVar13 = FUN_00051360();\n            return uVar13;\n          }\n          iVar16 = iVar16 + 1;\n          if ((int)(uint)*(ushort *)(param_1 + 0x16) <= iVar16) {\n            if (param_1[8] == '\0') goto LAB_000517f0;\n            goto LAB_00051647;\n          }\n          uVar12 = (uint)(ushort)(puVar1[iVar16] << 8 | puVar1[iVar16] >> 8);\n        } while ((uVar2 <= uVar12) && ((int)uVar12 <= local_30));\n      }\n      uVar13 = FUN_00051360();\n      return uVar13;\n    }" if (parenthesized_expression "(param_1[8] == '\0')" ( (binary_expression "param_1[8] == '\0'" (subscript_expression "param_1[8]" identifier [ number_literal ]) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      local_30 = uVar8 - 5;\n      if (uVar9 != 0) goto LAB_00051733;\nLAB_000517f0:\n      local_30 = local_30 + 1;\n    }" { (expression_statement "local_30 = uVar8 - 5;" (assignment_expression "local_30 = uVar8 - 5" identifier = (binary_expression "uVar8 - 5" identifier - number_literal)) ;) (if_statement "if (uVar9 != 0) goto LAB_00051733;" if (parenthesized_expression "(uVar9 != 0)" ( (binary_expression "uVar9 != 0" identifier != number_literal) )) (goto_statement "goto LAB_00051733;" goto statement_identifier ;)) (labeled_statement "LAB_000517f0:\n      local_30 = local_30 + 1;" statement_identifier : (expression_statement "local_30 = local_30 + 1;" (assignment_expression "local_30 = local_30 + 1" identifier = (binary_expression "local_30 + 1" identifier + number_literal)) ;)) }) (else_clause "else if (uVar9 != 0) {\nLAB_00051733:\n      uVar12 = (uint)(ushort)(*puVar1 << 8 | *puVar1 >> 8);\n      if (((int)uVar12 <= local_30) && (uVar2 <= uVar12)) {\n        iVar16 = 0;\n        do {\n          uVar14 = (**(code **)(param_1 + 0x4c))(param_1,iVar7 + uVar12);\n          if ((int)uVar8 < (int)(uVar12 + (uVar14 & 0xffff))) {\n            uVar13 = FUN_00051360();\n            return uVar13;\n          }\n          iVar16 = iVar16 + 1;\n          if ((int)(uint)*(ushort *)(param_1 + 0x16) <= iVar16) {\n            if (param_1[8] == '\0') goto LAB_000517f0;\n            goto LAB_00051647;\n          }\n          uVar12 = (uint)(ushort)(puVar1[iVar16] << 8 | puVar1[iVar16] >> 8);\n        } while ((uVar2 <= uVar12) && ((int)uVar12 <= local_30));\n      }\n      uVar13 = FUN_00051360();\n      return uVar13;\n    }" else (if_statement "if (uVar9 != 0) {\nLAB_00051733:\n      uVar12 = (uint)(ushort)(*puVar1 << 8 | *puVar1 >> 8);\n      if (((int)uVar12 <= local_30) && (uVar2 <= uVar12)) {\n        iVar16 = 0;\n        do {\n          uVar14 = (**(code **)(param_1 + 0x4c))(param_1,iVar7 + uVar12);\n          if ((int)uVar8 < (int)(uVar12 + (uVar14 & 0xffff))) {\n            uVar13 = FUN_00051360();\n            return uVar13;\n          }\n          iVar16 = iVar16 + 1;\n          if ((int)(uint)*(ushort *)(param_1 + 0x16) <= iVar16) {\n            if (param_1[8] == '\0') goto LAB_000517f0;\n            goto LAB_00051647;\n          }\n          uVar12 = (uint)(ushort)(puVar1[iVar16] << 8 | puVar1[iVar16] >> 8);\n        } while ((uVar2 <= uVar12) && ((int)uVar12 <= local_30));\n      }\n      uVar13 = FUN_00051360();\n      return uVar13;\n    }" if (parenthesized_expression "(uVar9 != 0)" ( (binary_expression "uVar9 != 0" identifier != number_literal) )) (compound_statement "{\nLAB_00051733:\n      uVar12 = (uint)(ushort)(*puVar1 << 8 | *puVar1 >> 8);\n      if (((int)uVar12 <= local_30) && (uVar2 <= uVar12)) {\n        iVar16 = 0;\n        do {\n          uVar14 = (**(code **)(param_1 + 0x4c))(param_1,iVar7 + uVar12);\n          if ((int)uVar8 < (int)(uVar12 + (uVar14 & 0xffff))) {\n            uVar13 = FUN_00051360();\n            return uVar13;\n          }\n          iVar16 = iVar16 + 1;\n          if ((int)(uint)*(ushort *)(param_1 + 0x16) <= iVar16) {\n            if (param_1[8] == '\0') goto LAB_000517f0;\n            goto LAB_00051647;\n          }\n          uVar12 = (uint)(ushort)(puVar1[iVar16] << 8 | puVar1[iVar16] >> 8);\n        } while ((uVar2 <= uVar12) && ((int)uVar12 <= local_30));\n      }\n      uVar13 = FUN_00051360();\n      return uVar13;\n    }" { (labeled_statement "LAB_00051733:\n      uVar12 = (uint)(ushort)(*puVar1 << 8 | *puVar1 >> 8);" statement_identifier : (expression_statement "uVar12 = (uint)(ushort)(*puVar1 << 8 | *puVar1 >> 8);" (assignment_expression "uVar12 = (uint)(ushort)(*puVar1 << 8 | *puVar1 >> 8)" identifier = (call_expression "(uint)(ushort)(*puVar1 << 8 | *puVar1 >> 8)" (call_expression "(uint)(ushort)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(ushort)" ( identifier ))) (argument_list "(*puVar1 << 8 | *puVar1 >> 8)" ( (binary_expression "*puVar1 << 8 | *puVar1 >> 8" (binary_expression "*puVar1 << 8" (pointer_expression "*puVar1" * identifier) << number_literal) | (binary_expression "*puVar1 >> 8" (pointer_expression "*puVar1" * identifier) >> number_literal)) )))) ;)) (if_statement "if (((int)uVar12 <= local_30) && (uVar2 <= uVar12)) {\n        iVar16 = 0;\n        do {\n          uVar14 = (**(code **)(param_1 + 0x4c))(param_1,iVar7 + uVar12);\n          if ((int)uVar8 < (int)(uVar12 + (uVar14 & 0xffff))) {\n            uVar13 = FUN_00051360();\n            return uVar13;\n          }\n          iVar16 = iVar16 + 1;\n          if ((int)(uint)*(ushort *)(param_1 + 0x16) <= iVar16) {\n            if (param_1[8] == '\0') goto LAB_000517f0;\n            goto LAB_00051647;\n          }\n          uVar12 = (uint)(ushort)(puVar1[iVar16] << 8 | puVar1[iVar16] >> 8);\n        } while ((uVar2 <= uVar12) && ((int)uVar12 <= local_30));\n      }" if (parenthesized_expression "(((int)uVar12 <= local_30) && (uVar2 <= uVar12))" ( (binary_expression "((int)uVar12 <= local_30) && (uVar2 <= uVar12)" (parenthesized_expression "((int)uVar12 <= local_30)" ( (binary_expression "(int)uVar12 <= local_30" (cast_expression "(int)uVar12" ( (type_descriptor "int" primitive_type) ) identifier) <= identifier) )) && (parenthesized_expression "(uVar2 <= uVar12)" ( (binary_expression "uVar2 <= uVar12" identifier <= identifier) ))) )) (compound_statement "{\n        iVar16 = 0;\n        do {\n          uVar14 = (**(code **)(param_1 + 0x4c))(param_1,iVar7 + uVar12);\n          if ((int)uVar8 < (int)(uVar12 + (uVar14 & 0xffff))) {\n            uVar13 = FUN_00051360();\n            return uVar13;\n          }\n          iVar16 = iVar16 + 1;\n          if ((int)(uint)*(ushort *)(param_1 + 0x16) <= iVar16) {\n            if (param_1[8] == '\0') goto LAB_000517f0;\n            goto LAB_00051647;\n          }\n          uVar12 = (uint)(ushort)(puVar1[iVar16] << 8 | puVar1[iVar16] >> 8);\n        } while ((uVar2 <= uVar12) && ((int)uVar12 <= local_30));\n      }" { (expression_statement "iVar16 = 0;" (assignment_expression "iVar16 = 0" identifier = number_literal) ;) (do_statement "do {\n          uVar14 = (**(code **)(param_1 + 0x4c))(param_1,iVar7 + uVar12);\n          if ((int)uVar8 < (int)(uVar12 + (uVar14 & 0xffff))) {\n            uVar13 = FUN_00051360();\n            return uVar13;\n          }\n          iVar16 = iVar16 + 1;\n          if ((int)(uint)*(ushort *)(param_1 + 0x16) <= iVar16) {\n            if (param_1[8] == '\0') goto LAB_000517f0;\n            goto LAB_00051647;\n          }\n          uVar12 = (uint)(ushort)(puVar1[iVar16] << 8 | puVar1[iVar16] >> 8);\n        } while ((uVar2 <= uVar12) && ((int)uVar12 <= local_30));" do (compound_statement "{\n          uVar14 = (**(code **)(param_1 + 0x4c))(param_1,iVar7 + uVar12);\n          if ((int)uVar8 < (int)(uVar12 + (uVar14 & 0xffff))) {\n            uVar13 = FUN_00051360();\n            return uVar13;\n          }\n          iVar16 = iVar16 + 1;\n          if ((int)(uint)*(ushort *)(param_1 + 0x16) <= iVar16) {\n            if (param_1[8] == '\0') goto LAB_000517f0;\n            goto LAB_00051647;\n          }\n          uVar12 = (uint)(ushort)(puVar1[iVar16] << 8 | puVar1[iVar16] >> 8);\n        }" { (expression_statement "uVar14 = (**(code **)(param_1 + 0x4c))(param_1,iVar7 + uVar12);" (assignment_expression "uVar14 = (**(code **)(param_1 + 0x4c))(param_1,iVar7 + uVar12)" identifier = (call_expression "(**(code **)(param_1 + 0x4c))(param_1,iVar7 + uVar12)" (parenthesized_expression "(**(code **)(param_1 + 0x4c))" ( (pointer_expression "**(code **)(param_1 + 0x4c)" * (pointer_expression "*(code **)(param_1 + 0x4c)" * (cast_expression "(code **)(param_1 + 0x4c)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x4c)" ( (binary_expression "param_1 + 0x4c" identifier + number_literal) ))))) )) (argument_list "(param_1,iVar7 + uVar12)" ( identifier , (binary_expression "iVar7 + uVar12" identifier + identifier) )))) ;) (if_statement "if ((int)uVar8 < (int)(uVar12 + (uVar14 & 0xffff))) {\n            uVar13 = FUN_00051360();\n            return uVar13;\n          }" if (parenthesized_expression "((int)uVar8 < (int)(uVar12 + (uVar14 & 0xffff)))" ( (binary_expression "(int)uVar8 < (int)(uVar12 + (uVar14 & 0xffff))" (cast_expression "(int)uVar8" ( (type_descriptor "int" primitive_type) ) identifier) < (cast_expression "(int)(uVar12 + (uVar14 & 0xffff))" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar12 + (uVar14 & 0xffff))" ( (binary_expression "uVar12 + (uVar14 & 0xffff)" identifier + (parenthesized_expression "(uVar14 & 0xffff)" ( (binary_expression "uVar14 & 0xffff" identifier & number_literal) ))) )))) )) (compound_statement "{\n            uVar13 = FUN_00051360();\n            return uVar13;\n          }" { (expression_statement "uVar13 = FUN_00051360();" (assignment_expression "uVar13 = FUN_00051360()" identifier = (call_expression "FUN_00051360()" identifier (argument_list "()" ( )))) ;) (return_statement "return uVar13;" return identifier ;) })) (expression_statement "iVar16 = iVar16 + 1;" (assignment_expression "iVar16 = iVar16 + 1" identifier = (binary_expression "iVar16 + 1" identifier + number_literal)) ;) (if_statement "if ((int)(uint)*(ushort *)(param_1 + 0x16) <= iVar16) {\n            if (param_1[8] == '\0') goto LAB_000517f0;\n            goto LAB_00051647;\n          }" if (parenthesized_expression "((int)(uint)*(ushort *)(param_1 + 0x16) <= iVar16)" ( (binary_expression "(int)(uint)*(ushort *)(param_1 + 0x16) <= iVar16" (binary_expression "(int)(uint)*(ushort *)(param_1 + 0x16)" (cast_expression "(int)(uint)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uint)" ( identifier ))) * (cast_expression "(ushort *)(param_1 + 0x16)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16)" ( (binary_expression "param_1 + 0x16" identifier + number_literal) )))) <= identifier) )) (compound_statement "{\n            if (param_1[8] == '\0') goto LAB_000517f0;\n            goto LAB_00051647;\n          }" { (if_statement "if (param_1[8] == '\0') goto LAB_000517f0;" if (parenthesized_expression "(param_1[8] == '\0')" ( (binary_expression "param_1[8] == '\0'" (subscript_expression "param_1[8]" identifier [ number_literal ]) == (char_literal "'\0'" ' escape_sequence ')) )) (goto_statement "goto LAB_000517f0;" goto statement_identifier ;)) (goto_statement "goto LAB_00051647;" goto statement_identifier ;) })) (expression_statement "uVar12 = (uint)(ushort)(puVar1[iVar16] << 8 | puVar1[iVar16] >> 8);" (assignment_expression "uVar12 = (uint)(ushort)(puVar1[iVar16] << 8 | puVar1[iVar16] >> 8)" identifier = (call_expression "(uint)(ushort)(puVar1[iVar16] << 8 | puVar1[iVar16] >> 8)" (call_expression "(uint)(ushort)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(ushort)" ( identifier ))) (argument_list "(puVar1[iVar16] << 8 | puVar1[iVar16] >> 8)" ( (binary_expression "puVar1[iVar16] << 8 | puVar1[iVar16] >> 8" (binary_expression "puVar1[iVar16] << 8" (subscript_expression "puVar1[iVar16]" identifier [ identifier ]) << number_literal) | (binary_expression "puVar1[iVar16] >> 8" (subscript_expression "puVar1[iVar16]" identifier [ identifier ]) >> number_literal)) )))) ;) }) while (parenthesized_expression "((uVar2 <= uVar12) && ((int)uVar12 <= local_30))" ( (binary_expression "(uVar2 <= uVar12) && ((int)uVar12 <= local_30)" (parenthesized_expression "(uVar2 <= uVar12)" ( (binary_expression "uVar2 <= uVar12" identifier <= identifier) )) && (parenthesized_expression "((int)uVar12 <= local_30)" ( (binary_expression "(int)uVar12 <= local_30" (cast_expression "(int)uVar12" ( (type_descriptor "int" primitive_type) ) identifier) <= identifier) ))) )) ;) })) (expression_statement "uVar13 = FUN_00051360();" (assignment_expression "uVar13 = FUN_00051360()" identifier = (call_expression "FUN_00051360()" identifier (argument_list "()" ( )))) ;) (return_statement "return uVar13;" return identifier ;) })))) })) (labeled_statement "LAB_00051647:\n  iVar16 = (CONCAT11(uVar4,uVar5) - 1 & 0xffff) + 1 + (uint)*(byte *)(iVar7 + 7 + uVar10);" statement_identifier : (expression_statement "iVar16 = (CONCAT11(uVar4,uVar5) - 1 & 0xffff) + 1 + (uint)*(byte *)(iVar7 + 7 + uVar10);" (assignment_expression "iVar16 = (CONCAT11(uVar4,uVar5) - 1 & 0xffff) + 1 + (uint)*(byte *)(iVar7 + 7 + uVar10)" identifier = (binary_expression "(CONCAT11(uVar4,uVar5) - 1 & 0xffff) + 1 + (uint)*(byte *)(iVar7 + 7 + uVar10)" (binary_expression "(CONCAT11(uVar4,uVar5) - 1 & 0xffff) + 1" (parenthesized_expression "(CONCAT11(uVar4,uVar5) - 1 & 0xffff)" ( (binary_expression "CONCAT11(uVar4,uVar5) - 1 & 0xffff" (binary_expression "CONCAT11(uVar4,uVar5) - 1" (call_expression "CONCAT11(uVar4,uVar5)" identifier (argument_list "(uVar4,uVar5)" ( identifier , identifier ))) - number_literal) & number_literal) )) + number_literal) + (binary_expression "(uint)*(byte *)(iVar7 + 7 + uVar10)" (parenthesized_expression "(uint)" ( identifier )) * (cast_expression "(byte *)(iVar7 + 7 + uVar10)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 7 + uVar10)" ( (binary_expression "iVar7 + 7 + uVar10" (binary_expression "iVar7 + 7" identifier + number_literal) + identifier) )))))) ;)) (expression_statement "uVar10 = (uint)CONCAT11(*(undefined1 *)(iVar7 + 1 + uVar10),*(undefined1 *)(iVar7 + 2 + uVar10));" (assignment_expression "uVar10 = (uint)CONCAT11(*(undefined1 *)(iVar7 + 1 + uVar10),*(undefined1 *)(iVar7 + 2 + uVar10))" identifier = (cast_expression "(uint)CONCAT11(*(undefined1 *)(iVar7 + 1 + uVar10),*(undefined1 *)(iVar7 + 2 + uVar10))" ( (type_descriptor "uint" type_identifier) ) (call_expression "CONCAT11(*(undefined1 *)(iVar7 + 1 + uVar10),*(undefined1 *)(iVar7 + 2 + uVar10))" identifier (argument_list "(*(undefined1 *)(iVar7 + 1 + uVar10),*(undefined1 *)(iVar7 + 2 + uVar10))" ( (pointer_expression "*(undefined1 *)(iVar7 + 1 + uVar10)" * (cast_expression "(undefined1 *)(iVar7 + 1 + uVar10)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 1 + uVar10)" ( (binary_expression "iVar7 + 1 + uVar10" (binary_expression "iVar7 + 1" identifier + number_literal) + identifier) )))) , (pointer_expression "*(undefined1 *)(iVar7 + 2 + uVar10)" * (cast_expression "(undefined1 *)(iVar7 + 2 + uVar10)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 2 + uVar10)" ( (binary_expression "iVar7 + 2 + uVar10" (binary_expression "iVar7 + 2" identifier + number_literal) + identifier) )))) ))))) ;) (if_statement "if (uVar10 != 0) {\n    if (uVar10 < uVar2) goto LAB_0005170d;\n    do {\n      if (local_30 < (int)uVar10) {\n        uVar13 = FUN_00051360();\n        return uVar13;\n      }\n      uVar12 = (uint)CONCAT11(*(undefined1 *)(iVar7 + uVar10),*(undefined1 *)(iVar7 + 1 + uVar10));\n      uVar14 = (uint)CONCAT11(*(undefined1 *)(iVar7 + 2 + uVar10),\n                              *(undefined1 *)(iVar7 + 3 + uVar10));\n      uVar15 = uVar10 + uVar14;\n      iVar16 = iVar16 + uVar14;\n      uVar10 = uVar12;\n    } while (uVar15 + 3 < uVar12);\n    if ((uVar12 != 0) || (uVar8 < uVar15)) goto LAB_0005170d;\n  }" if (parenthesized_expression "(uVar10 != 0)" ( (binary_expression "uVar10 != 0" identifier != number_literal) )) (compound_statement "{\n    if (uVar10 < uVar2) goto LAB_0005170d;\n    do {\n      if (local_30 < (int)uVar10) {\n        uVar13 = FUN_00051360();\n        return uVar13;\n      }\n      uVar12 = (uint)CONCAT11(*(undefined1 *)(iVar7 + uVar10),*(undefined1 *)(iVar7 + 1 + uVar10));\n      uVar14 = (uint)CONCAT11(*(undefined1 *)(iVar7 + 2 + uVar10),\n                              *(undefined1 *)(iVar7 + 3 + uVar10));\n      uVar15 = uVar10 + uVar14;\n      iVar16 = iVar16 + uVar14;\n      uVar10 = uVar12;\n    } while (uVar15 + 3 < uVar12);\n    if ((uVar12 != 0) || (uVar8 < uVar15)) goto LAB_0005170d;\n  }" { (if_statement "if (uVar10 < uVar2) goto LAB_0005170d;" if (parenthesized_expression "(uVar10 < uVar2)" ( (binary_expression "uVar10 < uVar2" identifier < identifier) )) (goto_statement "goto LAB_0005170d;" goto statement_identifier ;)) (do_statement "do {\n      if (local_30 < (int)uVar10) {\n        uVar13 = FUN_00051360();\n        return uVar13;\n      }\n      uVar12 = (uint)CONCAT11(*(undefined1 *)(iVar7 + uVar10),*(undefined1 *)(iVar7 + 1 + uVar10));\n      uVar14 = (uint)CONCAT11(*(undefined1 *)(iVar7 + 2 + uVar10),\n                              *(undefined1 *)(iVar7 + 3 + uVar10));\n      uVar15 = uVar10 + uVar14;\n      iVar16 = iVar16 + uVar14;\n      uVar10 = uVar12;\n    } while (uVar15 + 3 < uVar12);" do (compound_statement "{\n      if (local_30 < (int)uVar10) {\n        uVar13 = FUN_00051360();\n        return uVar13;\n      }\n      uVar12 = (uint)CONCAT11(*(undefined1 *)(iVar7 + uVar10),*(undefined1 *)(iVar7 + 1 + uVar10));\n      uVar14 = (uint)CONCAT11(*(undefined1 *)(iVar7 + 2 + uVar10),\n                              *(undefined1 *)(iVar7 + 3 + uVar10));\n      uVar15 = uVar10 + uVar14;\n      iVar16 = iVar16 + uVar14;\n      uVar10 = uVar12;\n    }" { (if_statement "if (local_30 < (int)uVar10) {\n        uVar13 = FUN_00051360();\n        return uVar13;\n      }" if (parenthesized_expression "(local_30 < (int)uVar10)" ( (binary_expression "local_30 < (int)uVar10" identifier < (cast_expression "(int)uVar10" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n        uVar13 = FUN_00051360();\n        return uVar13;\n      }" { (expression_statement "uVar13 = FUN_00051360();" (assignment_expression "uVar13 = FUN_00051360()" identifier = (call_expression "FUN_00051360()" identifier (argument_list "()" ( )))) ;) (return_statement "return uVar13;" return identifier ;) })) (expression_statement "uVar12 = (uint)CONCAT11(*(undefined1 *)(iVar7 + uVar10),*(undefined1 *)(iVar7 + 1 + uVar10));" (assignment_expression "uVar12 = (uint)CONCAT11(*(undefined1 *)(iVar7 + uVar10),*(undefined1 *)(iVar7 + 1 + uVar10))" identifier = (cast_expression "(uint)CONCAT11(*(undefined1 *)(iVar7 + uVar10),*(undefined1 *)(iVar7 + 1 + uVar10))" ( (type_descriptor "uint" type_identifier) ) (call_expression "CONCAT11(*(undefined1 *)(iVar7 + uVar10),*(undefined1 *)(iVar7 + 1 + uVar10))" identifier (argument_list "(*(undefined1 *)(iVar7 + uVar10),*(undefined1 *)(iVar7 + 1 + uVar10))" ( (pointer_expression "*(undefined1 *)(iVar7 + uVar10)" * (cast_expression "(undefined1 *)(iVar7 + uVar10)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + uVar10)" ( (binary_expression "iVar7 + uVar10" identifier + identifier) )))) , (pointer_expression "*(undefined1 *)(iVar7 + 1 + uVar10)" * (cast_expression "(undefined1 *)(iVar7 + 1 + uVar10)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 1 + uVar10)" ( (binary_expression "iVar7 + 1 + uVar10" (binary_expression "iVar7 + 1" identifier + number_literal) + identifier) )))) ))))) ;) (expression_statement "uVar14 = (uint)CONCAT11(*(undefined1 *)(iVar7 + 2 + uVar10),\n                              *(undefined1 *)(iVar7 + 3 + uVar10));" (assignment_expression "uVar14 = (uint)CONCAT11(*(undefined1 *)(iVar7 + 2 + uVar10),\n                              *(undefined1 *)(iVar7 + 3 + uVar10))" identifier = (cast_expression "(uint)CONCAT11(*(undefined1 *)(iVar7 + 2 + uVar10),\n                              *(undefined1 *)(iVar7 + 3 + uVar10))" ( (type_descriptor "uint" type_identifier) ) (call_expression "CONCAT11(*(undefined1 *)(iVar7 + 2 + uVar10),\n                              *(undefined1 *)(iVar7 + 3 + uVar10))" identifier (argument_list "(*(undefined1 *)(iVar7 + 2 + uVar10),\n                              *(undefined1 *)(iVar7 + 3 + uVar10))" ( (pointer_expression "*(undefined1 *)(iVar7 + 2 + uVar10)" * (cast_expression "(undefined1 *)(iVar7 + 2 + uVar10)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 2 + uVar10)" ( (binary_expression "iVar7 + 2 + uVar10" (binary_expression "iVar7 + 2" identifier + number_literal) + identifier) )))) , (pointer_expression "*(undefined1 *)(iVar7 + 3 + uVar10)" * (cast_expression "(undefined1 *)(iVar7 + 3 + uVar10)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 3 + uVar10)" ( (binary_expression "iVar7 + 3 + uVar10" (binary_expression "iVar7 + 3" identifier + number_literal) + identifier) )))) ))))) ;) (expression_statement "uVar15 = uVar10 + uVar14;" (assignment_expression "uVar15 = uVar10 + uVar14" identifier = (binary_expression "uVar10 + uVar14" identifier + identifier)) ;) (expression_statement "iVar16 = iVar16 + uVar14;" (assignment_expression "iVar16 = iVar16 + uVar14" identifier = (binary_expression "iVar16 + uVar14" identifier + identifier)) ;) (expression_statement "uVar10 = uVar12;" (assignment_expression "uVar10 = uVar12" identifier = identifier) ;) }) while (parenthesized_expression "(uVar15 + 3 < uVar12)" ( (binary_expression "uVar15 + 3 < uVar12" (binary_expression "uVar15 + 3" identifier + number_literal) < identifier) )) ;) (if_statement "if ((uVar12 != 0) || (uVar8 < uVar15)) goto LAB_0005170d;" if (parenthesized_expression "((uVar12 != 0) || (uVar8 < uVar15))" ( (binary_expression "(uVar12 != 0) || (uVar8 < uVar15)" (parenthesized_expression "(uVar12 != 0)" ( (binary_expression "uVar12 != 0" identifier != number_literal) )) || (parenthesized_expression "(uVar8 < uVar15)" ( (binary_expression "uVar8 < uVar15" identifier < identifier) ))) )) (goto_statement "goto LAB_0005170d;" goto statement_identifier ;)) })) (if_statement "if (iVar16 <= (int)uVar8) {\n    local_2c = (short)uVar2;\n    *param_1 = 1;\n    *(short *)(param_1 + 0x14) = (short)iVar16 - local_2c;\n    return 0;\n  }" if (parenthesized_expression "(iVar16 <= (int)uVar8)" ( (binary_expression "iVar16 <= (int)uVar8" identifier <= (cast_expression "(int)uVar8" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n    local_2c = (short)uVar2;\n    *param_1 = 1;\n    *(short *)(param_1 + 0x14) = (short)iVar16 - local_2c;\n    return 0;\n  }" { (expression_statement "local_2c = (short)uVar2;" (assignment_expression "local_2c = (short)uVar2" identifier = (cast_expression "(short)uVar2" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) identifier)) ;) (expression_statement "*param_1 = 1;" (assignment_expression "*param_1 = 1" (pointer_expression "*param_1" * identifier) = number_literal) ;) (expression_statement "*(short *)(param_1 + 0x14) = (short)iVar16 - local_2c;" (assignment_expression "*(short *)(param_1 + 0x14) = (short)iVar16 - local_2c" (pointer_expression "*(short *)(param_1 + 0x14)" * (cast_expression "(short *)(param_1 + 0x14)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) )))) = (binary_expression "(short)iVar16 - local_2c" (cast_expression "(short)iVar16" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) identifier) - identifier)) ;) (return_statement "return 0;" return number_literal ;) })) (labeled_statement "LAB_0005170d:\n  uVar13 = FUN_00051360();" statement_identifier : (expression_statement "uVar13 = FUN_00051360();" (assignment_expression "uVar13 = FUN_00051360()" identifier = (call_expression "FUN_00051360()" identifier (argument_list "()" ( )))) ;)) (return_statement "return uVar13;" return identifier ;) })))
(translation_unit (function_definition TYPE (ERROR IDENT) (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier short) IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier short) IDENT ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (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 = (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 IDENT (argument_list ( )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (return_statement return IDENT ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier short) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + LIT) + (cast_expression ( (type_descriptor TYPE) ) (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ]))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier short) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression IDENT + LIT)) ;) (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 (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier short) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (cast_expression ( (type_descriptor (sized_type_specifier short)) ) IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (cast_expression ( (type_descriptor TYPE) ) (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ]))) + IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + IDENT) )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + IDENT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + IDENT) ))))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + IDENT) )))) , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + IDENT) )))) )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_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) < (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (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) )) != LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) == (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (goto_statement goto statement_identifier ;)) (labeled_statement statement_identifier : (expression_statement (assignment_expression 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 IDENT = (call_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( IDENT ))) (argument_list ( (binary_expression (binary_expression (pointer_expression * IDENT) << LIT) | (binary_expression (pointer_expression * IDENT) >> LIT)) )))) ;)) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) <= IDENT) )) && (parenthesized_expression ( (binary_expression IDENT <= IDENT) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (argument_list ( IDENT , (binary_expression IDENT + IDENT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression IDENT + (parenthesized_expression ( (binary_expression IDENT & LIT) ))) )))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (return_statement return IDENT ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( IDENT ))) * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) <= IDENT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) == (char_literal ' escape_sequence ')) )) (goto_statement goto statement_identifier ;)) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = (call_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( IDENT ))) (argument_list ( (binary_expression (binary_expression (subscript_expression IDENT [ IDENT ]) << LIT) | (binary_expression (subscript_expression IDENT [ IDENT ]) >> LIT)) )))) ;) }) while (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) && (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) <= IDENT) ))) )) ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (return_statement return IDENT ;) })))) })) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (parenthesized_expression ( (binary_expression (binary_expression (call_expression IDENT (argument_list ( IDENT , IDENT ))) - LIT) & LIT) )) + LIT) + (binary_expression (parenthesized_expression ( IDENT )) * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + IDENT) )))))) ;)) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + IDENT) )))) , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + IDENT) )))) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (goto_statement goto statement_identifier ;)) (do_statement do (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT < (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (return_statement return IDENT ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + IDENT) )))) , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + IDENT) )))) ))))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + IDENT) )))) , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + IDENT) )))) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) while (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) < IDENT) )) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != LIT) )) || (parenthesized_expression ( (binary_expression IDENT < IDENT) ))) )) (goto_statement goto statement_identifier ;)) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier short)) ) IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier short) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier short)) ) IDENT) - IDENT)) ;) (return_statement return LIT ;) })) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;)) (return_statement return IDENT ;) })))
(function_definition "undefined4 __regparm3 FUN_00051560(undefined1 *param_1)\n\n{\n  ushort *puVar1;\n  uint uVar2;\n  byte bVar3;\n  undefined1 uVar4;\n  undefined1 uVar5;\n  short sVar6;\n  int iVar7;\n  uint uVar8;\n  ushort uVar9;\n  uint uVar10;\n  int iVar11;\n  uint uVar12;\n  undefined4 uVar13;\n  uint uVar14;\n  uint uVar15;\n  int iVar16;\n  int local_30;\n  short local_2c;\n  \n  bVar3 = param_1[9];\n  iVar7 = *(int *)(param_1 + 0x38);\n  iVar16 = *(int *)(param_1 + 0x34);\n  uVar10 = (uint)bVar3;\n  iVar11 = FUN_000513a0();\n  if (iVar11 != 0) {\n    uVar13 = FUN_00051360();\n    return uVar13;\n  }\n  sVar6 = *(short *)(iVar16 + 0x20);\n  param_1[0xc] = 0;\n  iVar11 = bVar3 + 8 + (uint)(byte)param_1[10];\n  *(short *)(param_1 + 0x18) = sVar6 + -1;\n  uVar8 = *(uint *)(iVar16 + 0x24);\n  *(short *)(param_1 + 0x12) = (short)iVar11;\n  *(uint *)(param_1 + 0x44) = (uint)(byte)param_1[10] + iVar7;\n  *(uint *)(param_1 + 0x3c) = uVar8 + iVar7;\n  puVar1 = (ushort *)(iVar7 + iVar11);\n  *(ushort **)(param_1 + 0x40) = puVar1;\n  uVar4 = *(undefined1 *)(iVar7 + 5 + uVar10);\n  uVar5 = *(undefined1 *)(iVar7 + 6 + uVar10);\n  uVar9 = CONCAT11(*(undefined1 *)(iVar7 + 3 + uVar10),*(undefined1 *)(iVar7 + 4 + uVar10));\n  *(ushort *)(param_1 + 0x16) = uVar9;\n  if ((*(int *)(iVar16 + 0x20) - 8U) / 6 < (uint)uVar9) goto LAB_0005170d;\n  uVar2 = iVar11 + (uint)uVar9 * 2;\n  local_30 = uVar8 - 4;\n  if ((*(byte *)(*(int *)(iVar16 + 4) + 0x1e) & 0x20) != 0) {\n    if (param_1[8] == '\0') {\n      local_30 = uVar8 - 5;\n      if (uVar9 != 0) goto LAB_00051733;\nLAB_000517f0:\n      local_30 = local_30 + 1;\n    }\n    else if (uVar9 != 0) {\nLAB_00051733:\n      uVar12 = (uint)(ushort)(*puVar1 << 8 | *puVar1 >> 8);\n      if (((int)uVar12 <= local_30) && (uVar2 <= uVar12)) {\n        iVar16 = 0;\n        do {\n          uVar14 = (**(code **)(param_1 + 0x4c))(param_1,iVar7 + uVar12);\n          if ((int)uVar8 < (int)(uVar12 + (uVar14 & 0xffff))) {\n            uVar13 = FUN_00051360();\n            return uVar13;\n          }\n          iVar16 = iVar16 + 1;\n          if ((int)(uint)*(ushort *)(param_1 + 0x16) <= iVar16) {\n            if (param_1[8] == '\0') goto LAB_000517f0;\n            goto LAB_00051647;\n          }\n          uVar12 = (uint)(ushort)(puVar1[iVar16] << 8 | puVar1[iVar16] >> 8);\n        } while ((uVar2 <= uVar12) && ((int)uVar12 <= local_30));\n      }\n      uVar13 = FUN_00051360();\n      return uVar13;\n    }\n  }\nLAB_00051647:\n  iVar16 = (CONCAT11(uVar4,uVar5) - 1 & 0xffff) + 1 + (uint)*(byte *)(iVar7 + 7 + uVar10);\n  uVar10 = (uint)CONCAT11(*(undefined1 *)(iVar7 + 1 + uVar10),*(undefined1 *)(iVar7 + 2 + uVar10));\n  if (uVar10 != 0) {\n    if (uVar10 < uVar2) goto LAB_0005170d;\n    do {\n      if (local_30 < (int)uVar10) {\n        uVar13 = FUN_00051360();\n        return uVar13;\n      }\n      uVar12 = (uint)CONCAT11(*(undefined1 *)(iVar7 + uVar10),*(undefined1 *)(iVar7 + 1 + uVar10));\n      uVar14 = (uint)CONCAT11(*(undefined1 *)(iVar7 + 2 + uVar10),\n                              *(undefined1 *)(iVar7 + 3 + uVar10));\n      uVar15 = uVar10 + uVar14;\n      iVar16 = iVar16 + uVar14;\n      uVar10 = uVar12;\n    } while (uVar15 + 3 < uVar12);\n    if ((uVar12 != 0) || (uVar8 < uVar15)) goto LAB_0005170d;\n  }\n  if (iVar16 <= (int)uVar8) {\n    local_2c = (short)uVar2;\n    *param_1 = 1;\n    *(short *)(param_1 + 0x14) = (short)iVar16 - local_2c;\n    return 0;\n  }\nLAB_0005170d:\n  uVar13 = FUN_00051360();\n  return uVar13;\n}" (type_identifier "undefined4") (ERROR "__regparm3" (identifier "__regparm3")) (function_declarator "FUN_00051560(undefined1 *param_1)" (identifier "FUN_00051560") (parameter_list "(undefined1 *param_1)" (( "(") (parameter_declaration "undefined1 *param_1" (type_identifier "undefined1") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) () ")"))) (compound_statement "{\n  ushort *puVar1;\n  uint uVar2;\n  byte bVar3;\n  undefined1 uVar4;\n  undefined1 uVar5;\n  short sVar6;\n  int iVar7;\n  uint uVar8;\n  ushort uVar9;\n  uint uVar10;\n  int iVar11;\n  uint uVar12;\n  undefined4 uVar13;\n  uint uVar14;\n  uint uVar15;\n  int iVar16;\n  int local_30;\n  short local_2c;\n  \n  bVar3 = param_1[9];\n  iVar7 = *(int *)(param_1 + 0x38);\n  iVar16 = *(int *)(param_1 + 0x34);\n  uVar10 = (uint)bVar3;\n  iVar11 = FUN_000513a0();\n  if (iVar11 != 0) {\n    uVar13 = FUN_00051360();\n    return uVar13;\n  }\n  sVar6 = *(short *)(iVar16 + 0x20);\n  param_1[0xc] = 0;\n  iVar11 = bVar3 + 8 + (uint)(byte)param_1[10];\n  *(short *)(param_1 + 0x18) = sVar6 + -1;\n  uVar8 = *(uint *)(iVar16 + 0x24);\n  *(short *)(param_1 + 0x12) = (short)iVar11;\n  *(uint *)(param_1 + 0x44) = (uint)(byte)param_1[10] + iVar7;\n  *(uint *)(param_1 + 0x3c) = uVar8 + iVar7;\n  puVar1 = (ushort *)(iVar7 + iVar11);\n  *(ushort **)(param_1 + 0x40) = puVar1;\n  uVar4 = *(undefined1 *)(iVar7 + 5 + uVar10);\n  uVar5 = *(undefined1 *)(iVar7 + 6 + uVar10);\n  uVar9 = CONCAT11(*(undefined1 *)(iVar7 + 3 + uVar10),*(undefined1 *)(iVar7 + 4 + uVar10));\n  *(ushort *)(param_1 + 0x16) = uVar9;\n  if ((*(int *)(iVar16 + 0x20) - 8U) / 6 < (uint)uVar9) goto LAB_0005170d;\n  uVar2 = iVar11 + (uint)uVar9 * 2;\n  local_30 = uVar8 - 4;\n  if ((*(byte *)(*(int *)(iVar16 + 4) + 0x1e) & 0x20) != 0) {\n    if (param_1[8] == '\0') {\n      local_30 = uVar8 - 5;\n      if (uVar9 != 0) goto LAB_00051733;\nLAB_000517f0:\n      local_30 = local_30 + 1;\n    }\n    else if (uVar9 != 0) {\nLAB_00051733:\n      uVar12 = (uint)(ushort)(*puVar1 << 8 | *puVar1 >> 8);\n      if (((int)uVar12 <= local_30) && (uVar2 <= uVar12)) {\n        iVar16 = 0;\n        do {\n          uVar14 = (**(code **)(param_1 + 0x4c))(param_1,iVar7 + uVar12);\n          if ((int)uVar8 < (int)(uVar12 + (uVar14 & 0xffff))) {\n            uVar13 = FUN_00051360();\n            return uVar13;\n          }\n          iVar16 = iVar16 + 1;\n          if ((int)(uint)*(ushort *)(param_1 + 0x16) <= iVar16) {\n            if (param_1[8] == '\0') goto LAB_000517f0;\n            goto LAB_00051647;\n          }\n          uVar12 = (uint)(ushort)(puVar1[iVar16] << 8 | puVar1[iVar16] >> 8);\n        } while ((uVar2 <= uVar12) && ((int)uVar12 <= local_30));\n      }\n      uVar13 = FUN_00051360();\n      return uVar13;\n    }\n  }\nLAB_00051647:\n  iVar16 = (CONCAT11(uVar4,uVar5) - 1 & 0xffff) + 1 + (uint)*(byte *)(iVar7 + 7 + uVar10);\n  uVar10 = (uint)CONCAT11(*(undefined1 *)(iVar7 + 1 + uVar10),*(undefined1 *)(iVar7 + 2 + uVar10));\n  if (uVar10 != 0) {\n    if (uVar10 < uVar2) goto LAB_0005170d;\n    do {\n      if (local_30 < (int)uVar10) {\n        uVar13 = FUN_00051360();\n        return uVar13;\n      }\n      uVar12 = (uint)CONCAT11(*(undefined1 *)(iVar7 + uVar10),*(undefined1 *)(iVar7 + 1 + uVar10));\n      uVar14 = (uint)CONCAT11(*(undefined1 *)(iVar7 + 2 + uVar10),\n                              *(undefined1 *)(iVar7 + 3 + uVar10));\n      uVar15 = uVar10 + uVar14;\n      iVar16 = iVar16 + uVar14;\n      uVar10 = uVar12;\n    } while (uVar15 + 3 < uVar12);\n    if ((uVar12 != 0) || (uVar8 < uVar15)) goto LAB_0005170d;\n  }\n  if (iVar16 <= (int)uVar8) {\n    local_2c = (short)uVar2;\n    *param_1 = 1;\n    *(short *)(param_1 + 0x14) = (short)iVar16 - local_2c;\n    return 0;\n  }\nLAB_0005170d:\n  uVar13 = FUN_00051360();\n  return uVar13;\n}" ({ "{") (declaration "ushort *puVar1;" (type_identifier "ushort") (pointer_declarator "*puVar1" (* "*") (identifier "puVar1")) (; ";")) (declaration "uint uVar2;" (type_identifier "uint") (identifier "uVar2") (; ";")) (declaration "byte bVar3;" (type_identifier "byte") (identifier "bVar3") (; ";")) (declaration "undefined1 uVar4;" (type_identifier "undefined1") (identifier "uVar4") (; ";")) (declaration "undefined1 uVar5;" (type_identifier "undefined1") (identifier "uVar5") (; ";")) (declaration "short sVar6;" (sized_type_specifier "short" (short "short")) (identifier "sVar6") (; ";")) (declaration "int iVar7;" (primitive_type "int") (identifier "iVar7") (; ";")) (declaration "uint uVar8;" (type_identifier "uint") (identifier "uVar8") (; ";")) (declaration "ushort uVar9;" (type_identifier "ushort") (identifier "uVar9") (; ";")) (declaration "uint uVar10;" (type_identifier "uint") (identifier "uVar10") (; ";")) (declaration "int iVar11;" (primitive_type "int") (identifier "iVar11") (; ";")) (declaration "uint uVar12;" (type_identifier "uint") (identifier "uVar12") (; ";")) (declaration "undefined4 uVar13;" (type_identifier "undefined4") (identifier "uVar13") (; ";")) (declaration "uint uVar14;" (type_identifier "uint") (identifier "uVar14") (; ";")) (declaration "uint uVar15;" (type_identifier "uint") (identifier "uVar15") (; ";")) (declaration "int iVar16;" (primitive_type "int") (identifier "iVar16") (; ";")) (declaration "int local_30;" (primitive_type "int") (identifier "local_30") (; ";")) (declaration "short local_2c;" (sized_type_specifier "short" (short "short")) (identifier "local_2c") (; ";")) (expression_statement "bVar3 = param_1[9];" (assignment_expression "bVar3 = param_1[9]" (identifier "bVar3") (= "=") (subscript_expression "param_1[9]" (identifier "param_1") ([ "[") (number_literal "9") (] "]"))) (; ";")) (expression_statement "iVar7 = *(int *)(param_1 + 0x38);" (assignment_expression "iVar7 = *(int *)(param_1 + 0x38)" (identifier "iVar7") (= "=") (pointer_expression "*(int *)(param_1 + 0x38)" (* "*") (cast_expression "(int *)(param_1 + 0x38)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x38)" (( "(") (binary_expression "param_1 + 0x38" (identifier "param_1") (+ "+") (number_literal "0x38")) () ")"))))) (; ";")) (expression_statement "iVar16 = *(int *)(param_1 + 0x34);" (assignment_expression "iVar16 = *(int *)(param_1 + 0x34)" (identifier "iVar16") (= "=") (pointer_expression "*(int *)(param_1 + 0x34)" (* "*") (cast_expression "(int *)(param_1 + 0x34)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x34)" (( "(") (binary_expression "param_1 + 0x34" (identifier "param_1") (+ "+") (number_literal "0x34")) () ")"))))) (; ";")) (expression_statement "uVar10 = (uint)bVar3;" (assignment_expression "uVar10 = (uint)bVar3" (identifier "uVar10") (= "=") (cast_expression "(uint)bVar3" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "bVar3"))) (; ";")) (expression_statement "iVar11 = FUN_000513a0();" (assignment_expression "iVar11 = FUN_000513a0()" (identifier "iVar11") (= "=") (call_expression "FUN_000513a0()" (identifier "FUN_000513a0") (argument_list "()" (( "(") () ")")))) (; ";")) (if_statement "if (iVar11 != 0) {\n    uVar13 = FUN_00051360();\n    return uVar13;\n  }" (if "if") (parenthesized_expression "(iVar11 != 0)" (( "(") (binary_expression "iVar11 != 0" (identifier "iVar11") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    uVar13 = FUN_00051360();\n    return uVar13;\n  }" ({ "{") (expression_statement "uVar13 = FUN_00051360();" (assignment_expression "uVar13 = FUN_00051360()" (identifier "uVar13") (= "=") (call_expression "FUN_00051360()" (identifier "FUN_00051360") (argument_list "()" (( "(") () ")")))) (; ";")) (return_statement "return uVar13;" (return "return") (identifier "uVar13") (; ";")) (} "}"))) (expression_statement "sVar6 = *(short *)(iVar16 + 0x20);" (assignment_expression "sVar6 = *(short *)(iVar16 + 0x20)" (identifier "sVar6") (= "=") (pointer_expression "*(short *)(iVar16 + 0x20)" (* "*") (cast_expression "(short *)(iVar16 + 0x20)" (( "(") (type_descriptor "short *" (sized_type_specifier "short" (short "short")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar16 + 0x20)" (( "(") (binary_expression "iVar16 + 0x20" (identifier "iVar16") (+ "+") (number_literal "0x20")) () ")"))))) (; ";")) (expression_statement "param_1[0xc] = 0;" (assignment_expression "param_1[0xc] = 0" (subscript_expression "param_1[0xc]" (identifier "param_1") ([ "[") (number_literal "0xc") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "iVar11 = bVar3 + 8 + (uint)(byte)param_1[10];" (assignment_expression "iVar11 = bVar3 + 8 + (uint)(byte)param_1[10]" (identifier "iVar11") (= "=") (binary_expression "bVar3 + 8 + (uint)(byte)param_1[10]" (binary_expression "bVar3 + 8" (identifier "bVar3") (+ "+") (number_literal "8")) (+ "+") (cast_expression "(uint)(byte)param_1[10]" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (cast_expression "(byte)param_1[10]" (( "(") (type_descriptor "byte" (type_identifier "byte")) () ")") (subscript_expression "param_1[10]" (identifier "param_1") ([ "[") (number_literal "10") (] "]")))))) (; ";")) (expression_statement "*(short *)(param_1 + 0x18) = sVar6 + -1;" (assignment_expression "*(short *)(param_1 + 0x18) = sVar6 + -1" (pointer_expression "*(short *)(param_1 + 0x18)" (* "*") (cast_expression "(short *)(param_1 + 0x18)" (( "(") (type_descriptor "short *" (sized_type_specifier "short" (short "short")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x18)" (( "(") (binary_expression "param_1 + 0x18" (identifier "param_1") (+ "+") (number_literal "0x18")) () ")")))) (= "=") (binary_expression "sVar6 + -1" (identifier "sVar6") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "uVar8 = *(uint *)(iVar16 + 0x24);" (assignment_expression "uVar8 = *(uint *)(iVar16 + 0x24)" (identifier "uVar8") (= "=") (pointer_expression "*(uint *)(iVar16 + 0x24)" (* "*") (cast_expression "(uint *)(iVar16 + 0x24)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar16 + 0x24)" (( "(") (binary_expression "iVar16 + 0x24" (identifier "iVar16") (+ "+") (number_literal "0x24")) () ")"))))) (; ";")) (expression_statement "*(short *)(param_1 + 0x12) = (short)iVar11;" (assignment_expression "*(short *)(param_1 + 0x12) = (short)iVar11" (pointer_expression "*(short *)(param_1 + 0x12)" (* "*") (cast_expression "(short *)(param_1 + 0x12)" (( "(") (type_descriptor "short *" (sized_type_specifier "short" (short "short")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x12)" (( "(") (binary_expression "param_1 + 0x12" (identifier "param_1") (+ "+") (number_literal "0x12")) () ")")))) (= "=") (cast_expression "(short)iVar11" (( "(") (type_descriptor "short" (sized_type_specifier "short" (short "short"))) () ")") (identifier "iVar11"))) (; ";")) (expression_statement "*(uint *)(param_1 + 0x44) = (uint)(byte)param_1[10] + iVar7;" (assignment_expression "*(uint *)(param_1 + 0x44) = (uint)(byte)param_1[10] + iVar7" (pointer_expression "*(uint *)(param_1 + 0x44)" (* "*") (cast_expression "(uint *)(param_1 + 0x44)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x44)" (( "(") (binary_expression "param_1 + 0x44" (identifier "param_1") (+ "+") (number_literal "0x44")) () ")")))) (= "=") (binary_expression "(uint)(byte)param_1[10] + iVar7" (cast_expression "(uint)(byte)param_1[10]" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (cast_expression "(byte)param_1[10]" (( "(") (type_descriptor "byte" (type_identifier "byte")) () ")") (subscript_expression "param_1[10]" (identifier "param_1") ([ "[") (number_literal "10") (] "]")))) (+ "+") (identifier "iVar7"))) (; ";")) (expression_statement "*(uint *)(param_1 + 0x3c) = uVar8 + iVar7;" (assignment_expression "*(uint *)(param_1 + 0x3c) = uVar8 + iVar7" (pointer_expression "*(uint *)(param_1 + 0x3c)" (* "*") (cast_expression "(uint *)(param_1 + 0x3c)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x3c)" (( "(") (binary_expression "param_1 + 0x3c" (identifier "param_1") (+ "+") (number_literal "0x3c")) () ")")))) (= "=") (binary_expression "uVar8 + iVar7" (identifier "uVar8") (+ "+") (identifier "iVar7"))) (; ";")) (expression_statement "puVar1 = (ushort *)(iVar7 + iVar11);" (assignment_expression "puVar1 = (ushort *)(iVar7 + iVar11)" (identifier "puVar1") (= "=") (cast_expression "(ushort *)(iVar7 + iVar11)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar7 + iVar11)" (( "(") (binary_expression "iVar7 + iVar11" (identifier "iVar7") (+ "+") (identifier "iVar11")) () ")")))) (; ";")) (expression_statement "*(ushort **)(param_1 + 0x40) = puVar1;" (assignment_expression "*(ushort **)(param_1 + 0x40) = puVar1" (pointer_expression "*(ushort **)(param_1 + 0x40)" (* "*") (cast_expression "(ushort **)(param_1 + 0x40)" (( "(") (type_descriptor "ushort **" (type_identifier "ushort") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x40)" (( "(") (binary_expression "param_1 + 0x40" (identifier "param_1") (+ "+") (number_literal "0x40")) () ")")))) (= "=") (identifier "puVar1")) (; ";")) (expression_statement "uVar4 = *(undefined1 *)(iVar7 + 5 + uVar10);" (assignment_expression "uVar4 = *(undefined1 *)(iVar7 + 5 + uVar10)" (identifier "uVar4") (= "=") (pointer_expression "*(undefined1 *)(iVar7 + 5 + uVar10)" (* "*") (cast_expression "(undefined1 *)(iVar7 + 5 + uVar10)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar7 + 5 + uVar10)" (( "(") (binary_expression "iVar7 + 5 + uVar10" (binary_expression "iVar7 + 5" (identifier "iVar7") (+ "+") (number_literal "5")) (+ "+") (identifier "uVar10")) () ")"))))) (; ";")) (expression_statement "uVar5 = *(undefined1 *)(iVar7 + 6 + uVar10);" (assignment_expression "uVar5 = *(undefined1 *)(iVar7 + 6 + uVar10)" (identifier "uVar5") (= "=") (pointer_expression "*(undefined1 *)(iVar7 + 6 + uVar10)" (* "*") (cast_expression "(undefined1 *)(iVar7 + 6 + uVar10)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar7 + 6 + uVar10)" (( "(") (binary_expression "iVar7 + 6 + uVar10" (binary_expression "iVar7 + 6" (identifier "iVar7") (+ "+") (number_literal "6")) (+ "+") (identifier "uVar10")) () ")"))))) (; ";")) (expression_statement "uVar9 = CONCAT11(*(undefined1 *)(iVar7 + 3 + uVar10),*(undefined1 *)(iVar7 + 4 + uVar10));" (assignment_expression "uVar9 = CONCAT11(*(undefined1 *)(iVar7 + 3 + uVar10),*(undefined1 *)(iVar7 + 4 + uVar10))" (identifier "uVar9") (= "=") (call_expression "CONCAT11(*(undefined1 *)(iVar7 + 3 + uVar10),*(undefined1 *)(iVar7 + 4 + uVar10))" (identifier "CONCAT11") (argument_list "(*(undefined1 *)(iVar7 + 3 + uVar10),*(undefined1 *)(iVar7 + 4 + uVar10))" (( "(") (pointer_expression "*(undefined1 *)(iVar7 + 3 + uVar10)" (* "*") (cast_expression "(undefined1 *)(iVar7 + 3 + uVar10)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar7 + 3 + uVar10)" (( "(") (binary_expression "iVar7 + 3 + uVar10" (binary_expression "iVar7 + 3" (identifier "iVar7") (+ "+") (number_literal "3")) (+ "+") (identifier "uVar10")) () ")")))) (, ",") (pointer_expression "*(undefined1 *)(iVar7 + 4 + uVar10)" (* "*") (cast_expression "(undefined1 *)(iVar7 + 4 + uVar10)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar7 + 4 + uVar10)" (( "(") (binary_expression "iVar7 + 4 + uVar10" (binary_expression "iVar7 + 4" (identifier "iVar7") (+ "+") (number_literal "4")) (+ "+") (identifier "uVar10")) () ")")))) () ")")))) (; ";")) (expression_statement "*(ushort *)(param_1 + 0x16) = uVar9;" (assignment_expression "*(ushort *)(param_1 + 0x16) = uVar9" (pointer_expression "*(ushort *)(param_1 + 0x16)" (* "*") (cast_expression "(ushort *)(param_1 + 0x16)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16)" (( "(") (binary_expression "param_1 + 0x16" (identifier "param_1") (+ "+") (number_literal "0x16")) () ")")))) (= "=") (identifier "uVar9")) (; ";")) (if_statement "if ((*(int *)(iVar16 + 0x20) - 8U) / 6 < (uint)uVar9) goto LAB_0005170d;" (if "if") (parenthesized_expression "((*(int *)(iVar16 + 0x20) - 8U) / 6 < (uint)uVar9)" (( "(") (binary_expression "(*(int *)(iVar16 + 0x20) - 8U) / 6 < (uint)uVar9" (binary_expression "(*(int *)(iVar16 + 0x20) - 8U) / 6" (parenthesized_expression "(*(int *)(iVar16 + 0x20) - 8U)" (( "(") (binary_expression "*(int *)(iVar16 + 0x20) - 8U" (pointer_expression "*(int *)(iVar16 + 0x20)" (* "*") (cast_expression "(int *)(iVar16 + 0x20)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar16 + 0x20)" (( "(") (binary_expression "iVar16 + 0x20" (identifier "iVar16") (+ "+") (number_literal "0x20")) () ")")))) (- "-") (number_literal "8U")) () ")")) (/ "/") (number_literal "6")) (< "<") (cast_expression "(uint)uVar9" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "uVar9"))) () ")")) (goto_statement "goto LAB_0005170d;" (goto "goto") (statement_identifier "LAB_0005170d") (; ";"))) (expression_statement "uVar2 = iVar11 + (uint)uVar9 * 2;" (assignment_expression "uVar2 = iVar11 + (uint)uVar9 * 2" (identifier "uVar2") (= "=") (binary_expression "iVar11 + (uint)uVar9 * 2" (identifier "iVar11") (+ "+") (binary_expression "(uint)uVar9 * 2" (cast_expression "(uint)uVar9" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "uVar9")) (* "*") (number_literal "2")))) (; ";")) (expression_statement "local_30 = uVar8 - 4;" (assignment_expression "local_30 = uVar8 - 4" (identifier "local_30") (= "=") (binary_expression "uVar8 - 4" (identifier "uVar8") (- "-") (number_literal "4"))) (; ";")) (if_statement "if ((*(byte *)(*(int *)(iVar16 + 4) + 0x1e) & 0x20) != 0) {\n    if (param_1[8] == '\0') {\n      local_30 = uVar8 - 5;\n      if (uVar9 != 0) goto LAB_00051733;\nLAB_000517f0:\n      local_30 = local_30 + 1;\n    }\n    else if (uVar9 != 0) {\nLAB_00051733:\n      uVar12 = (uint)(ushort)(*puVar1 << 8 | *puVar1 >> 8);\n      if (((int)uVar12 <= local_30) && (uVar2 <= uVar12)) {\n        iVar16 = 0;\n        do {\n          uVar14 = (**(code **)(param_1 + 0x4c))(param_1,iVar7 + uVar12);\n          if ((int)uVar8 < (int)(uVar12 + (uVar14 & 0xffff))) {\n            uVar13 = FUN_00051360();\n            return uVar13;\n          }\n          iVar16 = iVar16 + 1;\n          if ((int)(uint)*(ushort *)(param_1 + 0x16) <= iVar16) {\n            if (param_1[8] == '\0') goto LAB_000517f0;\n            goto LAB_00051647;\n          }\n          uVar12 = (uint)(ushort)(puVar1[iVar16] << 8 | puVar1[iVar16] >> 8);\n        } while ((uVar2 <= uVar12) && ((int)uVar12 <= local_30));\n      }\n      uVar13 = FUN_00051360();\n      return uVar13;\n    }\n  }" (if "if") (parenthesized_expression "((*(byte *)(*(int *)(iVar16 + 4) + 0x1e) & 0x20) != 0)" (( "(") (binary_expression "(*(byte *)(*(int *)(iVar16 + 4) + 0x1e) & 0x20) != 0" (parenthesized_expression "(*(byte *)(*(int *)(iVar16 + 4) + 0x1e) & 0x20)" (( "(") (binary_expression "*(byte *)(*(int *)(iVar16 + 4) + 0x1e) & 0x20" (pointer_expression "*(byte *)(*(int *)(iVar16 + 4) + 0x1e)" (* "*") (cast_expression "(byte *)(*(int *)(iVar16 + 4) + 0x1e)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(iVar16 + 4) + 0x1e)" (( "(") (binary_expression "*(int *)(iVar16 + 4) + 0x1e" (pointer_expression "*(int *)(iVar16 + 4)" (* "*") (cast_expression "(int *)(iVar16 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar16 + 4)" (( "(") (binary_expression "iVar16 + 4" (identifier "iVar16") (+ "+") (number_literal "4")) () ")")))) (+ "+") (number_literal "0x1e")) () ")")))) (& "&") (number_literal "0x20")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    if (param_1[8] == '\0') {\n      local_30 = uVar8 - 5;\n      if (uVar9 != 0) goto LAB_00051733;\nLAB_000517f0:\n      local_30 = local_30 + 1;\n    }\n    else if (uVar9 != 0) {\nLAB_00051733:\n      uVar12 = (uint)(ushort)(*puVar1 << 8 | *puVar1 >> 8);\n      if (((int)uVar12 <= local_30) && (uVar2 <= uVar12)) {\n        iVar16 = 0;\n        do {\n          uVar14 = (**(code **)(param_1 + 0x4c))(param_1,iVar7 + uVar12);\n          if ((int)uVar8 < (int)(uVar12 + (uVar14 & 0xffff))) {\n            uVar13 = FUN_00051360();\n            return uVar13;\n          }\n          iVar16 = iVar16 + 1;\n          if ((int)(uint)*(ushort *)(param_1 + 0x16) <= iVar16) {\n            if (param_1[8] == '\0') goto LAB_000517f0;\n            goto LAB_00051647;\n          }\n          uVar12 = (uint)(ushort)(puVar1[iVar16] << 8 | puVar1[iVar16] >> 8);\n        } while ((uVar2 <= uVar12) && ((int)uVar12 <= local_30));\n      }\n      uVar13 = FUN_00051360();\n      return uVar13;\n    }\n  }" ({ "{") (if_statement "if (param_1[8] == '\0') {\n      local_30 = uVar8 - 5;\n      if (uVar9 != 0) goto LAB_00051733;\nLAB_000517f0:\n      local_30 = local_30 + 1;\n    }\n    else if (uVar9 != 0) {\nLAB_00051733:\n      uVar12 = (uint)(ushort)(*puVar1 << 8 | *puVar1 >> 8);\n      if (((int)uVar12 <= local_30) && (uVar2 <= uVar12)) {\n        iVar16 = 0;\n        do {\n          uVar14 = (**(code **)(param_1 + 0x4c))(param_1,iVar7 + uVar12);\n          if ((int)uVar8 < (int)(uVar12 + (uVar14 & 0xffff))) {\n            uVar13 = FUN_00051360();\n            return uVar13;\n          }\n          iVar16 = iVar16 + 1;\n          if ((int)(uint)*(ushort *)(param_1 + 0x16) <= iVar16) {\n            if (param_1[8] == '\0') goto LAB_000517f0;\n            goto LAB_00051647;\n          }\n          uVar12 = (uint)(ushort)(puVar1[iVar16] << 8 | puVar1[iVar16] >> 8);\n        } while ((uVar2 <= uVar12) && ((int)uVar12 <= local_30));\n      }\n      uVar13 = FUN_00051360();\n      return uVar13;\n    }" (if "if") (parenthesized_expression "(param_1[8] == '\0')" (( "(") (binary_expression "param_1[8] == '\0'" (subscript_expression "param_1[8]" (identifier "param_1") ([ "[") (number_literal "8") (] "]")) (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n      local_30 = uVar8 - 5;\n      if (uVar9 != 0) goto LAB_00051733;\nLAB_000517f0:\n      local_30 = local_30 + 1;\n    }" ({ "{") (expression_statement "local_30 = uVar8 - 5;" (assignment_expression "local_30 = uVar8 - 5" (identifier "local_30") (= "=") (binary_expression "uVar8 - 5" (identifier "uVar8") (- "-") (number_literal "5"))) (; ";")) (if_statement "if (uVar9 != 0) goto LAB_00051733;" (if "if") (parenthesized_expression "(uVar9 != 0)" (( "(") (binary_expression "uVar9 != 0" (identifier "uVar9") (!= "!=") (number_literal "0")) () ")")) (goto_statement "goto LAB_00051733;" (goto "goto") (statement_identifier "LAB_00051733") (; ";"))) (labeled_statement "LAB_000517f0:\n      local_30 = local_30 + 1;" (statement_identifier "LAB_000517f0") (: ":") (expression_statement "local_30 = local_30 + 1;" (assignment_expression "local_30 = local_30 + 1" (identifier "local_30") (= "=") (binary_expression "local_30 + 1" (identifier "local_30") (+ "+") (number_literal "1"))) (; ";"))) (} "}")) (else_clause "else if (uVar9 != 0) {\nLAB_00051733:\n      uVar12 = (uint)(ushort)(*puVar1 << 8 | *puVar1 >> 8);\n      if (((int)uVar12 <= local_30) && (uVar2 <= uVar12)) {\n        iVar16 = 0;\n        do {\n          uVar14 = (**(code **)(param_1 + 0x4c))(param_1,iVar7 + uVar12);\n          if ((int)uVar8 < (int)(uVar12 + (uVar14 & 0xffff))) {\n            uVar13 = FUN_00051360();\n            return uVar13;\n          }\n          iVar16 = iVar16 + 1;\n          if ((int)(uint)*(ushort *)(param_1 + 0x16) <= iVar16) {\n            if (param_1[8] == '\0') goto LAB_000517f0;\n            goto LAB_00051647;\n          }\n          uVar12 = (uint)(ushort)(puVar1[iVar16] << 8 | puVar1[iVar16] >> 8);\n        } while ((uVar2 <= uVar12) && ((int)uVar12 <= local_30));\n      }\n      uVar13 = FUN_00051360();\n      return uVar13;\n    }" (else "else") (if_statement "if (uVar9 != 0) {\nLAB_00051733:\n      uVar12 = (uint)(ushort)(*puVar1 << 8 | *puVar1 >> 8);\n      if (((int)uVar12 <= local_30) && (uVar2 <= uVar12)) {\n        iVar16 = 0;\n        do {\n          uVar14 = (**(code **)(param_1 + 0x4c))(param_1,iVar7 + uVar12);\n          if ((int)uVar8 < (int)(uVar12 + (uVar14 & 0xffff))) {\n            uVar13 = FUN_00051360();\n            return uVar13;\n          }\n          iVar16 = iVar16 + 1;\n          if ((int)(uint)*(ushort *)(param_1 + 0x16) <= iVar16) {\n            if (param_1[8] == '\0') goto LAB_000517f0;\n            goto LAB_00051647;\n          }\n          uVar12 = (uint)(ushort)(puVar1[iVar16] << 8 | puVar1[iVar16] >> 8);\n        } while ((uVar2 <= uVar12) && ((int)uVar12 <= local_30));\n      }\n      uVar13 = FUN_00051360();\n      return uVar13;\n    }" (if "if") (parenthesized_expression "(uVar9 != 0)" (( "(") (binary_expression "uVar9 != 0" (identifier "uVar9") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\nLAB_00051733:\n      uVar12 = (uint)(ushort)(*puVar1 << 8 | *puVar1 >> 8);\n      if (((int)uVar12 <= local_30) && (uVar2 <= uVar12)) {\n        iVar16 = 0;\n        do {\n          uVar14 = (**(code **)(param_1 + 0x4c))(param_1,iVar7 + uVar12);\n          if ((int)uVar8 < (int)(uVar12 + (uVar14 & 0xffff))) {\n            uVar13 = FUN_00051360();\n            return uVar13;\n          }\n          iVar16 = iVar16 + 1;\n          if ((int)(uint)*(ushort *)(param_1 + 0x16) <= iVar16) {\n            if (param_1[8] == '\0') goto LAB_000517f0;\n            goto LAB_00051647;\n          }\n          uVar12 = (uint)(ushort)(puVar1[iVar16] << 8 | puVar1[iVar16] >> 8);\n        } while ((uVar2 <= uVar12) && ((int)uVar12 <= local_30));\n      }\n      uVar13 = FUN_00051360();\n      return uVar13;\n    }" ({ "{") (labeled_statement "LAB_00051733:\n      uVar12 = (uint)(ushort)(*puVar1 << 8 | *puVar1 >> 8);" (statement_identifier "LAB_00051733") (: ":") (expression_statement "uVar12 = (uint)(ushort)(*puVar1 << 8 | *puVar1 >> 8);" (assignment_expression "uVar12 = (uint)(ushort)(*puVar1 << 8 | *puVar1 >> 8)" (identifier "uVar12") (= "=") (call_expression "(uint)(ushort)(*puVar1 << 8 | *puVar1 >> 8)" (call_expression "(uint)(ushort)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(ushort)" (( "(") (identifier "ushort") () ")"))) (argument_list "(*puVar1 << 8 | *puVar1 >> 8)" (( "(") (binary_expression "*puVar1 << 8 | *puVar1 >> 8" (binary_expression "*puVar1 << 8" (pointer_expression "*puVar1" (* "*") (identifier "puVar1")) (<< "<<") (number_literal "8")) (| "|") (binary_expression "*puVar1 >> 8" (pointer_expression "*puVar1" (* "*") (identifier "puVar1")) (>> ">>") (number_literal "8"))) () ")")))) (; ";"))) (if_statement "if (((int)uVar12 <= local_30) && (uVar2 <= uVar12)) {\n        iVar16 = 0;\n        do {\n          uVar14 = (**(code **)(param_1 + 0x4c))(param_1,iVar7 + uVar12);\n          if ((int)uVar8 < (int)(uVar12 + (uVar14 & 0xffff))) {\n            uVar13 = FUN_00051360();\n            return uVar13;\n          }\n          iVar16 = iVar16 + 1;\n          if ((int)(uint)*(ushort *)(param_1 + 0x16) <= iVar16) {\n            if (param_1[8] == '\0') goto LAB_000517f0;\n            goto LAB_00051647;\n          }\n          uVar12 = (uint)(ushort)(puVar1[iVar16] << 8 | puVar1[iVar16] >> 8);\n        } while ((uVar2 <= uVar12) && ((int)uVar12 <= local_30));\n      }" (if "if") (parenthesized_expression "(((int)uVar12 <= local_30) && (uVar2 <= uVar12))" (( "(") (binary_expression "((int)uVar12 <= local_30) && (uVar2 <= uVar12)" (parenthesized_expression "((int)uVar12 <= local_30)" (( "(") (binary_expression "(int)uVar12 <= local_30" (cast_expression "(int)uVar12" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar12")) (<= "<=") (identifier "local_30")) () ")")) (&& "&&") (parenthesized_expression "(uVar2 <= uVar12)" (( "(") (binary_expression "uVar2 <= uVar12" (identifier "uVar2") (<= "<=") (identifier "uVar12")) () ")"))) () ")")) (compound_statement "{\n        iVar16 = 0;\n        do {\n          uVar14 = (**(code **)(param_1 + 0x4c))(param_1,iVar7 + uVar12);\n          if ((int)uVar8 < (int)(uVar12 + (uVar14 & 0xffff))) {\n            uVar13 = FUN_00051360();\n            return uVar13;\n          }\n          iVar16 = iVar16 + 1;\n          if ((int)(uint)*(ushort *)(param_1 + 0x16) <= iVar16) {\n            if (param_1[8] == '\0') goto LAB_000517f0;\n            goto LAB_00051647;\n          }\n          uVar12 = (uint)(ushort)(puVar1[iVar16] << 8 | puVar1[iVar16] >> 8);\n        } while ((uVar2 <= uVar12) && ((int)uVar12 <= local_30));\n      }" ({ "{") (expression_statement "iVar16 = 0;" (assignment_expression "iVar16 = 0" (identifier "iVar16") (= "=") (number_literal "0")) (; ";")) (do_statement "do {\n          uVar14 = (**(code **)(param_1 + 0x4c))(param_1,iVar7 + uVar12);\n          if ((int)uVar8 < (int)(uVar12 + (uVar14 & 0xffff))) {\n            uVar13 = FUN_00051360();\n            return uVar13;\n          }\n          iVar16 = iVar16 + 1;\n          if ((int)(uint)*(ushort *)(param_1 + 0x16) <= iVar16) {\n            if (param_1[8] == '\0') goto LAB_000517f0;\n            goto LAB_00051647;\n          }\n          uVar12 = (uint)(ushort)(puVar1[iVar16] << 8 | puVar1[iVar16] >> 8);\n        } while ((uVar2 <= uVar12) && ((int)uVar12 <= local_30));" (do "do") (compound_statement "{\n          uVar14 = (**(code **)(param_1 + 0x4c))(param_1,iVar7 + uVar12);\n          if ((int)uVar8 < (int)(uVar12 + (uVar14 & 0xffff))) {\n            uVar13 = FUN_00051360();\n            return uVar13;\n          }\n          iVar16 = iVar16 + 1;\n          if ((int)(uint)*(ushort *)(param_1 + 0x16) <= iVar16) {\n            if (param_1[8] == '\0') goto LAB_000517f0;\n            goto LAB_00051647;\n          }\n          uVar12 = (uint)(ushort)(puVar1[iVar16] << 8 | puVar1[iVar16] >> 8);\n        }" ({ "{") (expression_statement "uVar14 = (**(code **)(param_1 + 0x4c))(param_1,iVar7 + uVar12);" (assignment_expression "uVar14 = (**(code **)(param_1 + 0x4c))(param_1,iVar7 + uVar12)" (identifier "uVar14") (= "=") (call_expression "(**(code **)(param_1 + 0x4c))(param_1,iVar7 + uVar12)" (parenthesized_expression "(**(code **)(param_1 + 0x4c))" (( "(") (pointer_expression "**(code **)(param_1 + 0x4c)" (* "*") (pointer_expression "*(code **)(param_1 + 0x4c)" (* "*") (cast_expression "(code **)(param_1 + 0x4c)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x4c)" (( "(") (binary_expression "param_1 + 0x4c" (identifier "param_1") (+ "+") (number_literal "0x4c")) () ")"))))) () ")")) (argument_list "(param_1,iVar7 + uVar12)" (( "(") (identifier "param_1") (, ",") (binary_expression "iVar7 + uVar12" (identifier "iVar7") (+ "+") (identifier "uVar12")) () ")")))) (; ";")) (if_statement "if ((int)uVar8 < (int)(uVar12 + (uVar14 & 0xffff))) {\n            uVar13 = FUN_00051360();\n            return uVar13;\n          }" (if "if") (parenthesized_expression "((int)uVar8 < (int)(uVar12 + (uVar14 & 0xffff)))" (( "(") (binary_expression "(int)uVar8 < (int)(uVar12 + (uVar14 & 0xffff))" (cast_expression "(int)uVar8" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar8")) (< "<") (cast_expression "(int)(uVar12 + (uVar14 & 0xffff))" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(uVar12 + (uVar14 & 0xffff))" (( "(") (binary_expression "uVar12 + (uVar14 & 0xffff)" (identifier "uVar12") (+ "+") (parenthesized_expression "(uVar14 & 0xffff)" (( "(") (binary_expression "uVar14 & 0xffff" (identifier "uVar14") (& "&") (number_literal "0xffff")) () ")"))) () ")")))) () ")")) (compound_statement "{\n            uVar13 = FUN_00051360();\n            return uVar13;\n          }" ({ "{") (expression_statement "uVar13 = FUN_00051360();" (assignment_expression "uVar13 = FUN_00051360()" (identifier "uVar13") (= "=") (call_expression "FUN_00051360()" (identifier "FUN_00051360") (argument_list "()" (( "(") () ")")))) (; ";")) (return_statement "return uVar13;" (return "return") (identifier "uVar13") (; ";")) (} "}"))) (expression_statement "iVar16 = iVar16 + 1;" (assignment_expression "iVar16 = iVar16 + 1" (identifier "iVar16") (= "=") (binary_expression "iVar16 + 1" (identifier "iVar16") (+ "+") (number_literal "1"))) (; ";")) (if_statement "if ((int)(uint)*(ushort *)(param_1 + 0x16) <= iVar16) {\n            if (param_1[8] == '\0') goto LAB_000517f0;\n            goto LAB_00051647;\n          }" (if "if") (parenthesized_expression "((int)(uint)*(ushort *)(param_1 + 0x16) <= iVar16)" (( "(") (binary_expression "(int)(uint)*(ushort *)(param_1 + 0x16) <= iVar16" (binary_expression "(int)(uint)*(ushort *)(param_1 + 0x16)" (cast_expression "(int)(uint)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")"))) (* "*") (cast_expression "(ushort *)(param_1 + 0x16)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16)" (( "(") (binary_expression "param_1 + 0x16" (identifier "param_1") (+ "+") (number_literal "0x16")) () ")")))) (<= "<=") (identifier "iVar16")) () ")")) (compound_statement "{\n            if (param_1[8] == '\0') goto LAB_000517f0;\n            goto LAB_00051647;\n          }" ({ "{") (if_statement "if (param_1[8] == '\0') goto LAB_000517f0;" (if "if") (parenthesized_expression "(param_1[8] == '\0')" (( "(") (binary_expression "param_1[8] == '\0'" (subscript_expression "param_1[8]" (identifier "param_1") ([ "[") (number_literal "8") (] "]")) (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (goto_statement "goto LAB_000517f0;" (goto "goto") (statement_identifier "LAB_000517f0") (; ";"))) (goto_statement "goto LAB_00051647;" (goto "goto") (statement_identifier "LAB_00051647") (; ";")) (} "}"))) (expression_statement "uVar12 = (uint)(ushort)(puVar1[iVar16] << 8 | puVar1[iVar16] >> 8);" (assignment_expression "uVar12 = (uint)(ushort)(puVar1[iVar16] << 8 | puVar1[iVar16] >> 8)" (identifier "uVar12") (= "=") (call_expression "(uint)(ushort)(puVar1[iVar16] << 8 | puVar1[iVar16] >> 8)" (call_expression "(uint)(ushort)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(ushort)" (( "(") (identifier "ushort") () ")"))) (argument_list "(puVar1[iVar16] << 8 | puVar1[iVar16] >> 8)" (( "(") (binary_expression "puVar1[iVar16] << 8 | puVar1[iVar16] >> 8" (binary_expression "puVar1[iVar16] << 8" (subscript_expression "puVar1[iVar16]" (identifier "puVar1") ([ "[") (identifier "iVar16") (] "]")) (<< "<<") (number_literal "8")) (| "|") (binary_expression "puVar1[iVar16] >> 8" (subscript_expression "puVar1[iVar16]" (identifier "puVar1") ([ "[") (identifier "iVar16") (] "]")) (>> ">>") (number_literal "8"))) () ")")))) (; ";")) (} "}")) (while "while") (parenthesized_expression "((uVar2 <= uVar12) && ((int)uVar12 <= local_30))" (( "(") (binary_expression "(uVar2 <= uVar12) && ((int)uVar12 <= local_30)" (parenthesized_expression "(uVar2 <= uVar12)" (( "(") (binary_expression "uVar2 <= uVar12" (identifier "uVar2") (<= "<=") (identifier "uVar12")) () ")")) (&& "&&") (parenthesized_expression "((int)uVar12 <= local_30)" (( "(") (binary_expression "(int)uVar12 <= local_30" (cast_expression "(int)uVar12" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar12")) (<= "<=") (identifier "local_30")) () ")"))) () ")")) (; ";")) (} "}"))) (expression_statement "uVar13 = FUN_00051360();" (assignment_expression "uVar13 = FUN_00051360()" (identifier "uVar13") (= "=") (call_expression "FUN_00051360()" (identifier "FUN_00051360") (argument_list "()" (( "(") () ")")))) (; ";")) (return_statement "return uVar13;" (return "return") (identifier "uVar13") (; ";")) (} "}"))))) (} "}"))) (labeled_statement "LAB_00051647:\n  iVar16 = (CONCAT11(uVar4,uVar5) - 1 & 0xffff) + 1 + (uint)*(byte *)(iVar7 + 7 + uVar10);" (statement_identifier "LAB_00051647") (: ":") (expression_statement "iVar16 = (CONCAT11(uVar4,uVar5) - 1 & 0xffff) + 1 + (uint)*(byte *)(iVar7 + 7 + uVar10);" (assignment_expression "iVar16 = (CONCAT11(uVar4,uVar5) - 1 & 0xffff) + 1 + (uint)*(byte *)(iVar7 + 7 + uVar10)" (identifier "iVar16") (= "=") (binary_expression "(CONCAT11(uVar4,uVar5) - 1 & 0xffff) + 1 + (uint)*(byte *)(iVar7 + 7 + uVar10)" (binary_expression "(CONCAT11(uVar4,uVar5) - 1 & 0xffff) + 1" (parenthesized_expression "(CONCAT11(uVar4,uVar5) - 1 & 0xffff)" (( "(") (binary_expression "CONCAT11(uVar4,uVar5) - 1 & 0xffff" (binary_expression "CONCAT11(uVar4,uVar5) - 1" (call_expression "CONCAT11(uVar4,uVar5)" (identifier "CONCAT11") (argument_list "(uVar4,uVar5)" (( "(") (identifier "uVar4") (, ",") (identifier "uVar5") () ")"))) (- "-") (number_literal "1")) (& "&") (number_literal "0xffff")) () ")")) (+ "+") (number_literal "1")) (+ "+") (binary_expression "(uint)*(byte *)(iVar7 + 7 + uVar10)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (* "*") (cast_expression "(byte *)(iVar7 + 7 + uVar10)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar7 + 7 + uVar10)" (( "(") (binary_expression "iVar7 + 7 + uVar10" (binary_expression "iVar7 + 7" (identifier "iVar7") (+ "+") (number_literal "7")) (+ "+") (identifier "uVar10")) () ")")))))) (; ";"))) (expression_statement "uVar10 = (uint)CONCAT11(*(undefined1 *)(iVar7 + 1 + uVar10),*(undefined1 *)(iVar7 + 2 + uVar10));" (assignment_expression "uVar10 = (uint)CONCAT11(*(undefined1 *)(iVar7 + 1 + uVar10),*(undefined1 *)(iVar7 + 2 + uVar10))" (identifier "uVar10") (= "=") (cast_expression "(uint)CONCAT11(*(undefined1 *)(iVar7 + 1 + uVar10),*(undefined1 *)(iVar7 + 2 + uVar10))" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (call_expression "CONCAT11(*(undefined1 *)(iVar7 + 1 + uVar10),*(undefined1 *)(iVar7 + 2 + uVar10))" (identifier "CONCAT11") (argument_list "(*(undefined1 *)(iVar7 + 1 + uVar10),*(undefined1 *)(iVar7 + 2 + uVar10))" (( "(") (pointer_expression "*(undefined1 *)(iVar7 + 1 + uVar10)" (* "*") (cast_expression "(undefined1 *)(iVar7 + 1 + uVar10)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar7 + 1 + uVar10)" (( "(") (binary_expression "iVar7 + 1 + uVar10" (binary_expression "iVar7 + 1" (identifier "iVar7") (+ "+") (number_literal "1")) (+ "+") (identifier "uVar10")) () ")")))) (, ",") (pointer_expression "*(undefined1 *)(iVar7 + 2 + uVar10)" (* "*") (cast_expression "(undefined1 *)(iVar7 + 2 + uVar10)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar7 + 2 + uVar10)" (( "(") (binary_expression "iVar7 + 2 + uVar10" (binary_expression "iVar7 + 2" (identifier "iVar7") (+ "+") (number_literal "2")) (+ "+") (identifier "uVar10")) () ")")))) () ")"))))) (; ";")) (if_statement "if (uVar10 != 0) {\n    if (uVar10 < uVar2) goto LAB_0005170d;\n    do {\n      if (local_30 < (int)uVar10) {\n        uVar13 = FUN_00051360();\n        return uVar13;\n      }\n      uVar12 = (uint)CONCAT11(*(undefined1 *)(iVar7 + uVar10),*(undefined1 *)(iVar7 + 1 + uVar10));\n      uVar14 = (uint)CONCAT11(*(undefined1 *)(iVar7 + 2 + uVar10),\n                              *(undefined1 *)(iVar7 + 3 + uVar10));\n      uVar15 = uVar10 + uVar14;\n      iVar16 = iVar16 + uVar14;\n      uVar10 = uVar12;\n    } while (uVar15 + 3 < uVar12);\n    if ((uVar12 != 0) || (uVar8 < uVar15)) goto LAB_0005170d;\n  }" (if "if") (parenthesized_expression "(uVar10 != 0)" (( "(") (binary_expression "uVar10 != 0" (identifier "uVar10") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    if (uVar10 < uVar2) goto LAB_0005170d;\n    do {\n      if (local_30 < (int)uVar10) {\n        uVar13 = FUN_00051360();\n        return uVar13;\n      }\n      uVar12 = (uint)CONCAT11(*(undefined1 *)(iVar7 + uVar10),*(undefined1 *)(iVar7 + 1 + uVar10));\n      uVar14 = (uint)CONCAT11(*(undefined1 *)(iVar7 + 2 + uVar10),\n                              *(undefined1 *)(iVar7 + 3 + uVar10));\n      uVar15 = uVar10 + uVar14;\n      iVar16 = iVar16 + uVar14;\n      uVar10 = uVar12;\n    } while (uVar15 + 3 < uVar12);\n    if ((uVar12 != 0) || (uVar8 < uVar15)) goto LAB_0005170d;\n  }" ({ "{") (if_statement "if (uVar10 < uVar2) goto LAB_0005170d;" (if "if") (parenthesized_expression "(uVar10 < uVar2)" (( "(") (binary_expression "uVar10 < uVar2" (identifier "uVar10") (< "<") (identifier "uVar2")) () ")")) (goto_statement "goto LAB_0005170d;" (goto "goto") (statement_identifier "LAB_0005170d") (; ";"))) (do_statement "do {\n      if (local_30 < (int)uVar10) {\n        uVar13 = FUN_00051360();\n        return uVar13;\n      }\n      uVar12 = (uint)CONCAT11(*(undefined1 *)(iVar7 + uVar10),*(undefined1 *)(iVar7 + 1 + uVar10));\n      uVar14 = (uint)CONCAT11(*(undefined1 *)(iVar7 + 2 + uVar10),\n                              *(undefined1 *)(iVar7 + 3 + uVar10));\n      uVar15 = uVar10 + uVar14;\n      iVar16 = iVar16 + uVar14;\n      uVar10 = uVar12;\n    } while (uVar15 + 3 < uVar12);" (do "do") (compound_statement "{\n      if (local_30 < (int)uVar10) {\n        uVar13 = FUN_00051360();\n        return uVar13;\n      }\n      uVar12 = (uint)CONCAT11(*(undefined1 *)(iVar7 + uVar10),*(undefined1 *)(iVar7 + 1 + uVar10));\n      uVar14 = (uint)CONCAT11(*(undefined1 *)(iVar7 + 2 + uVar10),\n                              *(undefined1 *)(iVar7 + 3 + uVar10));\n      uVar15 = uVar10 + uVar14;\n      iVar16 = iVar16 + uVar14;\n      uVar10 = uVar12;\n    }" ({ "{") (if_statement "if (local_30 < (int)uVar10) {\n        uVar13 = FUN_00051360();\n        return uVar13;\n      }" (if "if") (parenthesized_expression "(local_30 < (int)uVar10)" (( "(") (binary_expression "local_30 < (int)uVar10" (identifier "local_30") (< "<") (cast_expression "(int)uVar10" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar10"))) () ")")) (compound_statement "{\n        uVar13 = FUN_00051360();\n        return uVar13;\n      }" ({ "{") (expression_statement "uVar13 = FUN_00051360();" (assignment_expression "uVar13 = FUN_00051360()" (identifier "uVar13") (= "=") (call_expression "FUN_00051360()" (identifier "FUN_00051360") (argument_list "()" (( "(") () ")")))) (; ";")) (return_statement "return uVar13;" (return "return") (identifier "uVar13") (; ";")) (} "}"))) (expression_statement "uVar12 = (uint)CONCAT11(*(undefined1 *)(iVar7 + uVar10),*(undefined1 *)(iVar7 + 1 + uVar10));" (assignment_expression "uVar12 = (uint)CONCAT11(*(undefined1 *)(iVar7 + uVar10),*(undefined1 *)(iVar7 + 1 + uVar10))" (identifier "uVar12") (= "=") (cast_expression "(uint)CONCAT11(*(undefined1 *)(iVar7 + uVar10),*(undefined1 *)(iVar7 + 1 + uVar10))" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (call_expression "CONCAT11(*(undefined1 *)(iVar7 + uVar10),*(undefined1 *)(iVar7 + 1 + uVar10))" (identifier "CONCAT11") (argument_list "(*(undefined1 *)(iVar7 + uVar10),*(undefined1 *)(iVar7 + 1 + uVar10))" (( "(") (pointer_expression "*(undefined1 *)(iVar7 + uVar10)" (* "*") (cast_expression "(undefined1 *)(iVar7 + uVar10)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar7 + uVar10)" (( "(") (binary_expression "iVar7 + uVar10" (identifier "iVar7") (+ "+") (identifier "uVar10")) () ")")))) (, ",") (pointer_expression "*(undefined1 *)(iVar7 + 1 + uVar10)" (* "*") (cast_expression "(undefined1 *)(iVar7 + 1 + uVar10)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar7 + 1 + uVar10)" (( "(") (binary_expression "iVar7 + 1 + uVar10" (binary_expression "iVar7 + 1" (identifier "iVar7") (+ "+") (number_literal "1")) (+ "+") (identifier "uVar10")) () ")")))) () ")"))))) (; ";")) (expression_statement "uVar14 = (uint)CONCAT11(*(undefined1 *)(iVar7 + 2 + uVar10),\n                              *(undefined1 *)(iVar7 + 3 + uVar10));" (assignment_expression "uVar14 = (uint)CONCAT11(*(undefined1 *)(iVar7 + 2 + uVar10),\n                              *(undefined1 *)(iVar7 + 3 + uVar10))" (identifier "uVar14") (= "=") (cast_expression "(uint)CONCAT11(*(undefined1 *)(iVar7 + 2 + uVar10),\n                              *(undefined1 *)(iVar7 + 3 + uVar10))" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (call_expression "CONCAT11(*(undefined1 *)(iVar7 + 2 + uVar10),\n                              *(undefined1 *)(iVar7 + 3 + uVar10))" (identifier "CONCAT11") (argument_list "(*(undefined1 *)(iVar7 + 2 + uVar10),\n                              *(undefined1 *)(iVar7 + 3 + uVar10))" (( "(") (pointer_expression "*(undefined1 *)(iVar7 + 2 + uVar10)" (* "*") (cast_expression "(undefined1 *)(iVar7 + 2 + uVar10)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar7 + 2 + uVar10)" (( "(") (binary_expression "iVar7 + 2 + uVar10" (binary_expression "iVar7 + 2" (identifier "iVar7") (+ "+") (number_literal "2")) (+ "+") (identifier "uVar10")) () ")")))) (, ",") (pointer_expression "*(undefined1 *)(iVar7 + 3 + uVar10)" (* "*") (cast_expression "(undefined1 *)(iVar7 + 3 + uVar10)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar7 + 3 + uVar10)" (( "(") (binary_expression "iVar7 + 3 + uVar10" (binary_expression "iVar7 + 3" (identifier "iVar7") (+ "+") (number_literal "3")) (+ "+") (identifier "uVar10")) () ")")))) () ")"))))) (; ";")) (expression_statement "uVar15 = uVar10 + uVar14;" (assignment_expression "uVar15 = uVar10 + uVar14" (identifier "uVar15") (= "=") (binary_expression "uVar10 + uVar14" (identifier "uVar10") (+ "+") (identifier "uVar14"))) (; ";")) (expression_statement "iVar16 = iVar16 + uVar14;" (assignment_expression "iVar16 = iVar16 + uVar14" (identifier "iVar16") (= "=") (binary_expression "iVar16 + uVar14" (identifier "iVar16") (+ "+") (identifier "uVar14"))) (; ";")) (expression_statement "uVar10 = uVar12;" (assignment_expression "uVar10 = uVar12" (identifier "uVar10") (= "=") (identifier "uVar12")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(uVar15 + 3 < uVar12)" (( "(") (binary_expression "uVar15 + 3 < uVar12" (binary_expression "uVar15 + 3" (identifier "uVar15") (+ "+") (number_literal "3")) (< "<") (identifier "uVar12")) () ")")) (; ";")) (if_statement "if ((uVar12 != 0) || (uVar8 < uVar15)) goto LAB_0005170d;" (if "if") (parenthesized_expression "((uVar12 != 0) || (uVar8 < uVar15))" (( "(") (binary_expression "(uVar12 != 0) || (uVar8 < uVar15)" (parenthesized_expression "(uVar12 != 0)" (( "(") (binary_expression "uVar12 != 0" (identifier "uVar12") (!= "!=") (number_literal "0")) () ")")) (|| "||") (parenthesized_expression "(uVar8 < uVar15)" (( "(") (binary_expression "uVar8 < uVar15" (identifier "uVar8") (< "<") (identifier "uVar15")) () ")"))) () ")")) (goto_statement "goto LAB_0005170d;" (goto "goto") (statement_identifier "LAB_0005170d") (; ";"))) (} "}"))) (if_statement "if (iVar16 <= (int)uVar8) {\n    local_2c = (short)uVar2;\n    *param_1 = 1;\n    *(short *)(param_1 + 0x14) = (short)iVar16 - local_2c;\n    return 0;\n  }" (if "if") (parenthesized_expression "(iVar16 <= (int)uVar8)" (( "(") (binary_expression "iVar16 <= (int)uVar8" (identifier "iVar16") (<= "<=") (cast_expression "(int)uVar8" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar8"))) () ")")) (compound_statement "{\n    local_2c = (short)uVar2;\n    *param_1 = 1;\n    *(short *)(param_1 + 0x14) = (short)iVar16 - local_2c;\n    return 0;\n  }" ({ "{") (expression_statement "local_2c = (short)uVar2;" (assignment_expression "local_2c = (short)uVar2" (identifier "local_2c") (= "=") (cast_expression "(short)uVar2" (( "(") (type_descriptor "short" (sized_type_specifier "short" (short "short"))) () ")") (identifier "uVar2"))) (; ";")) (expression_statement "*param_1 = 1;" (assignment_expression "*param_1 = 1" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (= "=") (number_literal "1")) (; ";")) (expression_statement "*(short *)(param_1 + 0x14) = (short)iVar16 - local_2c;" (assignment_expression "*(short *)(param_1 + 0x14) = (short)iVar16 - local_2c" (pointer_expression "*(short *)(param_1 + 0x14)" (* "*") (cast_expression "(short *)(param_1 + 0x14)" (( "(") (type_descriptor "short *" (sized_type_specifier "short" (short "short")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x14)" (( "(") (binary_expression "param_1 + 0x14" (identifier "param_1") (+ "+") (number_literal "0x14")) () ")")))) (= "=") (binary_expression "(short)iVar16 - local_2c" (cast_expression "(short)iVar16" (( "(") (type_descriptor "short" (sized_type_specifier "short" (short "short"))) () ")") (identifier "iVar16")) (- "-") (identifier "local_2c"))) (; ";")) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (labeled_statement "LAB_0005170d:\n  uVar13 = FUN_00051360();" (statement_identifier "LAB_0005170d") (: ":") (expression_statement "uVar13 = FUN_00051360();" (assignment_expression "uVar13 = FUN_00051360()" (identifier "uVar13") (= "=") (call_expression "FUN_00051360()" (identifier "FUN_00051360") (argument_list "()" (( "(") () ")")))) (; ";"))) (return_statement "return uVar13;" (return "return") (identifier "uVar13") (; ";")) (} "}")))

int __regparm3 function_1(type_1 *pPage)

{
  type_2 *puVar1;
  type_3 var_10;
  type_4 var_4;
  type_5 uVar4;
  type_5 uVar5;
  type_5 *var_5;
  type_6 *pBVar7;
  type_3 var_6;
  type_2 var_8;
  type_7 uVar10;
  type_8 var_12;
  int var_2;
  int lineno;
  type_3 var_11;
  type_3 var_14;
  type_3 var_13;
  int var_9;
  short var_15;
  
  var_4 = pPage->hdrOffset;
  var_5 = pPage->aData;
  pBVar7 = pPage->pBt;
  var_2 = var_1(pPage,(type_3)var_5[var_4]);
  if (var_2 != 0) {
    var_2 = var_3(0xfdab);
    return var_2;
  }
  uVar10 = pBVar7->pageSize;
  pPage->nOverflow = '\0';
  var_2 = var_4 + 8 + (type_3)pPage->childPtrSize;
  pPage->maskPage = (short)uVar10 - 1;
  var_6 = pBVar7->usableSize;
  pPage->cellOffset = (type_8)var_2;
  pPage->aDataOfst = var_5 + pPage->childPtrSize;
  pPage->aDataEnd = var_5 + var_6;
  puVar1 = (type_2 *)(var_5 + var_2);
  pPage->aCellIdx = (type_5 *)puVar1;
  uVar4 = var_5[var_4 + 5];
  uVar5 = var_5[var_4 + 6];
  var_8 = var_7(var_5[var_4 + 3],var_5[var_4 + 4]);
  pPage->nCell = var_8;
  lineno = 0xfdbe;
  if ((pBVar7->pageSize - 8) / 6 < (type_3)var_8) goto LAB_0005170d;
  var_10 = var_2 + (type_3)var_8 * 2;
  var_9 = var_6 - 4;
  if ((pBVar7->db->flags & 0x200000) != 0) {
    if (pPage->leaf == '\0') {
      var_9 = var_6 - 5;
      if (var_8 != 0) goto LAB_00051733;
LAB_000517f0:
      var_9 = var_9 + 1;
    }
    else if (var_8 != 0) {
LAB_00051733:
      var_11 = (type_3)(type_2)(*puVar1 << 8 | *puVar1 >> 8);
      if (((int)var_11 <= var_9) && (var_10 <= var_11)) {
        var_2 = 0;
        do {
          var_12 = (*pPage->xCellSize)(pPage,var_5 + var_11);
          if ((int)var_6 < (int)(var_11 + var_12)) {
            var_2 = var_3(0xfddf);
            return var_2;
          }
          var_2 = var_2 + 1;
          if ((int)(type_3)pPage->nCell <= var_2) {
            if (pPage->leaf == '\0') goto LAB_000517f0;
            goto LAB_00051647;
          }
          var_11 = (type_3)(type_2)(puVar1[var_2] << 8 | puVar1[var_2] >> 8);
        } while ((var_10 <= var_11) && ((int)var_11 <= var_9));
      }
      var_2 = var_3(0xfdda);
      return var_2;
    }
  }
LAB_00051647:
  var_2 = (var_7(uVar4,uVar5) - 1 & 0xffff) + 1 + (type_3)var_5[var_4 + 7];
  var_11 = (type_3)var_7(var_5[var_4 + 1],var_5[var_4 + 2]);
  if (var_11 != 0) {
    if (var_11 < var_10) {
      lineno = 0xfdf1;
      goto LAB_0005170d;
    }
    do {
      if (var_9 < (int)var_11) {
        var_2 = var_3(0xfdf6);
        return var_2;
      }
      var_14 = (type_3)var_7(var_5[var_11],var_5[var_11 + 1]);
      var_13 = var_11 + var_7(var_5[var_11 + 2],var_5[var_11 + 3]);
      var_2 = var_2 + (type_3)var_7(var_5[var_11 + 2],var_5[var_11 + 3]);
      var_11 = var_14;
    } while (var_13 + 3 < var_14);
    if (var_14 != 0) {
      lineno = 0xfe00;
      goto LAB_0005170d;
    }
    lineno = 0xfe04;
    if (var_6 < var_13) goto LAB_0005170d;
  }
  if (var_2 <= (int)var_6) {
    var_15 = (short)var_10;
    pPage->isInit = '\x01';
    pPage->nFree = (short)var_2 - var_15;
    return 0;
  }
  lineno = 0xfe10;
LAB_0005170d:
  var_2 = var_3(lineno);
  return var_2;
}


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

undefined4 __regparm3 MASKED(undefined1 *param_1)

{
  ushort *puVar1;
  uint uVar2;
  byte bVar3;
  undefined1 uVar4;
  undefined1 uVar5;
  short sVar6;
  int iVar7;
  uint uVar8;
  ushort uVar9;
  uint uVar10;
  int iVar11;
  uint uVar12;
  undefined4 uVar13;
  uint uVar14;
  uint uVar15;
  int iVar16;
  int local_30;
  short local_2c;
  
  bVar3 = param_1[9];
  iVar7 = *(int *)(param_1 + 0x38);
  iVar16 = *(int *)(param_1 + 0x34);
  uVar10 = (uint)bVar3;
  iVar11 = FUN_000513a0();
  if (iVar11 != 0) {
    uVar13 = FUN_00051360();
    return uVar13;
  }
  sVar6 = *(short *)(iVar16 + 0x20);
  param_1[0xc] = 0;
  iVar11 = bVar3 + 8 + (uint)(byte)param_1[10];
  *(short *)(param_1 + 0x18) = sVar6 + -1;
  uVar8 = *(uint *)(iVar16 + 0x24);
  *(short *)(param_1 + 0x12) = (short)iVar11;
  *(uint *)(param_1 + 0x44) = (uint)(byte)param_1[10] + iVar7;
  *(uint *)(param_1 + 0x3c) = uVar8 + iVar7;
  puVar1 = (ushort *)(iVar7 + iVar11);
  *(ushort **)(param_1 + 0x40) = puVar1;
  uVar4 = *(undefined1 *)(iVar7 + 5 + uVar10);
  uVar5 = *(undefined1 *)(iVar7 + 6 + uVar10);
  uVar9 = CONCAT11(*(undefined1 *)(iVar7 + 3 + uVar10),*(undefined1 *)(iVar7 + 4 + uVar10));
  *(ushort *)(param_1 + 0x16) = uVar9;
  if ((*(int *)(iVar16 + 0x20) - 8U) / 6 < (uint)uVar9) goto LAB_0005170d;
  uVar2 = iVar11 + (uint)uVar9 * 2;
  local_30 = uVar8 - 4;
  if ((*(byte *)(*(int *)(iVar16 + 4) + 0x1e) & 0x20) != 0) {
    if (param_1[8] == '\0') {
      local_30 = uVar8 - 5;
      if (uVar9 != 0) goto LAB_00051733;
LAB_000517f0:
      local_30 = local_30 + 1;
    }
    else if (uVar9 != 0) {
LAB_00051733:
      uVar12 = (uint)(ushort)(*puVar1 << 8 | *puVar1 >> 8);
      if (((int)uVar12 <= local_30) && (uVar2 <= uVar12)) {
        iVar16 = 0;
        do {
          uVar14 = (**(code **)(param_1 + 0x4c))(param_1,iVar7 + uVar12);
          if ((int)uVar8 < (int)(uVar12 + (uVar14 & 0xffff))) {
            uVar13 = FUN_00051360();
            return uVar13;
          }
          iVar16 = iVar16 + 1;
          if ((int)(uint)*(ushort *)(param_1 + 0x16) <= iVar16) {
            if (param_1[8] == '\0') goto LAB_000517f0;
            goto LAB_00051647;
          }
          uVar12 = (uint)(ushort)(puVar1[iVar16] << 8 | puVar1[iVar16] >> 8);
        } while ((uVar2 <= uVar12) && ((int)uVar12 <= local_30));
      }
      uVar13 = FUN_00051360();
      return uVar13;
    }
  }
LAB_00051647:
  iVar16 = (CONCAT11(uVar4,uVar5) - 1 & 0xffff) + 1 + (uint)*(byte *)(iVar7 + 7 + uVar10);
  uVar10 = (uint)CONCAT11(*(undefined1 *)(iVar7 + 1 + uVar10),*(undefined1 *)(iVar7 + 2 + uVar10));
  if (uVar10 != 0) {
    if (uVar10 < uVar2) goto LAB_0005170d;
    do {
      if (local_30 < (int)uVar10) {
        uVar13 = FUN_00051360();
        return uVar13;
      }
      uVar12 = (uint)CONCAT11(*(undefined1 *)(iVar7 + uVar10),*(undefined1 *)(iVar7 + 1 + uVar10));
      uVar14 = (uint)CONCAT11(*(undefined1 *)(iVar7 + 2 + uVar10),
                              *(undefined1 *)(iVar7 + 3 + uVar10));
      uVar15 = uVar10 + uVar14;
      iVar16 = iVar16 + uVar14;
      uVar10 = uVar12;
    } while (uVar15 + 3 < uVar12);
    if ((uVar12 != 0) || (uVar8 < uVar15)) goto LAB_0005170d;
  }
  if (iVar16 <= (int)uVar8) {
    local_2c = (short)uVar2;
    *param_1 = 1;
    *(short *)(param_1 + 0x14) = (short)iVar16 - local_2c;
    return 0;
  }
LAB_0005170d:
  uVar13 = FUN_00051360();
  return uVar13;
}

