
/* WARNING: Function: __x86.get_pc_thunk.cx replaced with injection: get_pc_thunk_cx */

void __regparm3 sqlite3LeaveMutexAndCloseZombie(sqlite3 *db)

{
  void **ppvVar1;
  Savepoint *p;
  HashElem *pHVar2;
  void *pvVar3;
  Table *pTable;
  Schema *p_00;
  int iVar4;
  sqlite3_value *v;
  sqlite3 *psVar5;
  undefined **tripCode;
  Db *pDVar6;
  sqlite3 *psVar7;
  sqlite3 **ppsVar8;
  void *pvVar9;
  undefined4 *puVar10;
  sqlite3 *in_stack_ffffffd4;
  undefined **ppuVar11;
  
  tripCode = &_GLOBAL_OFFSET_TABLE_;
  ppuVar11 = tripCode;
  if (((db->magic != 0x64cffc7f) || (ppuVar11 = &_GLOBAL_OFFSET_TABLE_, db->pVdbe != (Vdbe *)0x0))
     || (iVar4 = connectionIsBusy(db), ppuVar11 = tripCode, iVar4 != 0)) {
    if (db->mutex != (sqlite3_mutex *)0x0) {
      (*(code *)ppuVar11[0x187])(db->mutex);
    }
    return;
  }
  sqlite3RollbackAll(in_stack_ffffffd4,(int)tripCode);
  p = db->pSavepoint;
  while (p != (Savepoint *)0x0) {
    db->pSavepoint = p->pNext;
    sqlite3DbFreeNN(db,p);
    p = db->pSavepoint;
  }
  pDVar6 = db->aDb;
  db->isTransactionSavepoint = '\0';
  iVar4 = 0;
  db->nSavepoint = 0;
  db->nStatement = 0;
  if (0 < db->nDb) {
    do {
      if (pDVar6[iVar4].pBt != (Btree *)0x0) {
        sqlite3BtreeClose((Btree *)in_stack_ffffffd4);
        pDVar6[iVar4].pBt = (Btree *)0x0;
        if (iVar4 != 1) {
          pDVar6[iVar4].pSchema = (Schema *)0x0;
        }
        pDVar6 = db->aDb;
      }
      iVar4 = iVar4 + 1;
    } while (iVar4 < db->nDb);
  }
  if (pDVar6[1].pSchema != (Schema *)0x0) {
    sqlite3SchemaClear(pDVar6[1].pSchema);
  }
  sqlite3VtabUnlockList(db);
  sqlite3CollapseDatabaseArray(db);
  sqlite3ConnectionUnlocked(db);
  enterMutex();
  psVar5 = (sqlite3 *)tripCode[0x73a];
  if (psVar5 != (sqlite3 *)0x0) {
    if (db == psVar5) {
      ppsVar8 = (sqlite3 **)(tripCode + 0x73a);
      psVar5 = db;
    }
    else {
      do {
        psVar7 = psVar5;
        psVar5 = psVar7->pNextBlocked;
        if (psVar5 == (sqlite3 *)0x0) goto LAB_000a7acc;
      } while (db != psVar5);
      ppsVar8 = &psVar7->pNextBlocked;
    }
    *ppsVar8 = psVar5->pNextBlocked;
  }
LAB_000a7acc:
  leaveMutex();
  for (pHVar2 = (db->aFunc).first; pHVar2 != (HashElem *)0x0; pHVar2 = pHVar2->next) {
    pvVar9 = pHVar2->data;
    do {
      functionDestroy(db,*(FuncDef **)((int)pvVar9 + 0x24));
      pvVar3 = *(void **)((int)pvVar9 + 0xc);
      sqlite3DbFreeNN(db,pvVar9);
      pvVar9 = pvVar3;
    } while (pvVar3 != (void *)0x0);
  }
  sqlite3HashClear(&db->aFunc);
  for (pHVar2 = (db->aCollSeq).first; pHVar2 != (HashElem *)0x0; pHVar2 = pHVar2->next) {
    pvVar9 = pHVar2->data;
    puVar10 = (undefined4 *)((int)pvVar9 + 8);
    do {
      if ((code *)puVar10[2] != (code *)0x0) {
        (*(code *)puVar10[2])(*puVar10);
      }
      puVar10 = puVar10 + 5;
    } while ((undefined4 *)((int)pvVar9 + 0x44) != puVar10);
    if (pvVar9 != (void *)0x0) {
      sqlite3DbFreeNN(db,pvVar9);
    }
  }
  sqlite3HashClear(&db->aCollSeq);
  for (pHVar2 = (db->aModule).first; pHVar2 != (HashElem *)0x0; pHVar2 = pHVar2->next) {
    pvVar9 = pHVar2->data;
    if (*(code **)((int)pvVar9 + 0xc) != (code *)0x0) {
      (**(code **)((int)pvVar9 + 0xc))(*(undefined4 *)((int)pvVar9 + 8));
    }
    pTable = *(Table **)((int)pvVar9 + 0x10);
    if (pTable != (Table *)0x0) {
      pTable->tabFlags = pTable->tabFlags | 2;
      sqlite3DeleteTable(db,pTable);
      *(undefined4 *)((int)pvVar9 + 0x10) = 0;
    }
    sqlite3DbFreeNN(db,pvVar9);
  }
  sqlite3HashClear(&db->aModule);
  v = db->pErr;
  db->errCode = 0;
  if (v != (sqlite3_value *)0x0) {
    sqlite3ErrorFinish(db,0);
    v = db->pErr;
  }
  sqlite3ValueFree(v);
  if (0 < db->nExtension) {
    iVar4 = 0;
    do {
      ppvVar1 = db->aExtension + iVar4;
      iVar4 = iVar4 + 1;
      (*db->pVfs->xDlClose)(db->pVfs,*ppvVar1);
    } while (iVar4 < db->nExtension);
  }
  if (db->aExtension != (void **)0x0) {
    sqlite3DbFreeNN(db,db->aExtension);
  }
  db->magic = 0xb5357930;
  p_00 = db->aDb[1].pSchema;
  if (p_00 != (Schema *)0x0) {
    sqlite3DbFreeNN(db,p_00);
  }
  if (db->mutex == (sqlite3_mutex *)0x0) {
    db->magic = 0x9f3c2d33;
  }
  else {
    (*(code *)tripCode[0x187])(db->mutex);
    db->magic = 0x9f3c2d33;
    if (db->mutex != (sqlite3_mutex *)0x0) {
      (*(code *)tripCode[0x184])(db->mutex);
    }
  }
  if ((db->lookaside).bMalloced != '\0') {
    sqlite3_free((db->lookaside).pStart);
  }
  sqlite3_free(db);
  return;
}



/* WARNING: Function: __i686.get_pc_thunk.cx replaced with injection: get_pc_thunk_cx */

void __regparm3 FUN_000a7990(int *param_1)

{
  uint *puVar1;
  undefined4 *puVar2;
  int iVar3;
  int *piVar4;
  int *piVar5;
  int iVar6;
  int iVar7;
  undefined4 *puVar8;
  
  if (((param_1[0x17] != 0x64cffc7f) || (param_1[1] != 0)) || (iVar3 = FUN_0004e1f0(), iVar3 != 0))
  {
    if (param_1[3] != 0) {
      (*DAT_0017c444)(param_1[3]);
    }
    return;
  }
  FUN_000a1a50();
  iVar3 = param_1[0x70];
  while (iVar3 != 0) {
    param_1[0x70] = *(int *)(iVar3 + 0x14);
    FUN_000428d0();
    iVar3 = param_1[0x70];
  }
  iVar3 = param_1[4];
  *(undefined1 *)((int)param_1 + 0x53) = 0;
  iVar6 = 0;
  param_1[0x72] = 0;
  param_1[0x73] = 0;
  if (0 < param_1[5]) {
    do {
      iVar7 = iVar6 * 0x10 + iVar3;
      if (*(int *)(iVar7 + 4) != 0) {
        FUN_000a77a0();
        *(undefined4 *)(iVar7 + 4) = 0;
        if (iVar6 != 1) {
          *(undefined4 *)(iVar7 + 0xc) = 0;
        }
        iVar3 = param_1[4];
      }
      iVar6 = iVar6 + 1;
    } while (iVar6 < param_1[5]);
  }
  if (*(int *)(iVar3 + 0x1c) != 0) {
    FUN_000579b0(*(int *)(iVar3 + 0x1c));
  }
  FUN_00043270();
  FUN_0004bc40();
  FUN_00043780();
  FUN_0003ad60();
  if (DAT_0017db10 != (int *)0x0) {
    piVar4 = DAT_0017db10;
    if (param_1 == DAT_0017db10) {
      piVar5 = (int *)&DAT_0017db10;
      piVar4 = param_1;
    }
    else {
      do {
        piVar5 = piVar4;
        piVar4 = (int *)piVar5[0x7d];
        if (piVar4 == (int *)0x0) goto LAB_000a7acc;
      } while (param_1 != piVar4);
      piVar5 = piVar5 + 0x7d;
    }
    *piVar5 = piVar4[0x7d];
  }
LAB_000a7acc:
  FUN_0003ada0();
  for (puVar2 = (undefined4 *)param_1[0x5e]; puVar2 != (undefined4 *)0x0;
      puVar2 = (undefined4 *)*puVar2) {
    iVar3 = puVar2[2];
    do {
      FUN_0004e1a0();
      iVar3 = *(int *)(iVar3 + 0xc);
      FUN_000428d0();
    } while (iVar3 != 0);
  }
  FUN_000434c0();
  for (puVar2 = (undefined4 *)param_1[0x62]; puVar2 != (undefined4 *)0x0;
      puVar2 = (undefined4 *)*puVar2) {
    iVar3 = puVar2[2];
    puVar8 = (undefined4 *)(iVar3 + 8);
    do {
      if ((code *)puVar8[2] != (code *)0x0) {
        (*(code *)puVar8[2])(*puVar8);
      }
      puVar8 = puVar8 + 5;
    } while ((undefined4 *)(iVar3 + 0x44) != puVar8);
    if (iVar3 != 0) {
      FUN_000428d0();
    }
  }
  FUN_000434c0();
  for (puVar2 = (undefined4 *)param_1[0x57]; puVar2 != (undefined4 *)0x0;
      puVar2 = (undefined4 *)*puVar2) {
    iVar3 = puVar2[2];
    if (*(code **)(iVar3 + 0xc) != (code *)0x0) {
      (**(code **)(iVar3 + 0xc))(*(undefined4 *)(iVar3 + 8));
    }
    if (*(int *)(iVar3 + 0x10) != 0) {
      puVar1 = (uint *)(*(int *)(iVar3 + 0x10) + 0x24);
      *puVar1 = *puVar1 | 2;
      FUN_00057430();
      *(undefined4 *)(iVar3 + 0x10) = 0;
    }
    FUN_000428d0();
  }
  FUN_000434c0();
  param_1[0xf] = 0;
  if (param_1[0x42] != 0) {
    FUN_00045400();
  }
  FUN_00042f80();
  if (0 < param_1[0x2e]) {
    iVar3 = 0;
    do {
      iVar6 = iVar3 * 4;
      iVar3 = iVar3 + 1;
      (**(code **)(*param_1 + 0x34))(*param_1,*(undefined4 *)(param_1[0x2f] + iVar6));
    } while (iVar3 < param_1[0x2e]);
  }
  if (param_1[0x2f] != 0) {
    FUN_000428d0();
  }
  param_1[0x17] = -0x4aca86d0;
  if (*(int *)(param_1[4] + 0x1c) != 0) {
    FUN_000428d0();
  }
  if (param_1[3] == 0) {
    param_1[0x17] = -0x60c3d2cd;
  }
  else {
    (*DAT_0017c444)(param_1[3]);
    param_1[0x17] = -0x60c3d2cd;
    if (param_1[3] != 0) {
      (*DAT_0017c438)(param_1[3]);
    }
  }
  if (*(char *)((int)param_1 + 0x11a) != '\0') {
    FUN_00042800(param_1[0x4d]);
  }
  FUN_00042800(param_1);
  return;
}


CALL 0x00036ac1
ADD ECX,0xd4493
PUSH EBP
PUSH EDI
PUSH ESI
PUSH EBX
MOV EBX,EAX
SUB ESP,0x1c
CMP dword ptr [EAX + 0x5c],0x64cffc7f
MOV dword ptr [ESP + 0x4],ECX
JNZ 0x000a79b8
MOV ESI,dword ptr [EAX + 0x4]
TEST ESI,ESI
JZ 0x000a79e0
MOV EAX,dword ptr [EBX + 0xc]
TEST EAX,EAX
JZ 0x000a79d0
SUB ESP,0xc
PUSH EAX
MOV EAX,dword ptr [ESP + 0x14]
CALL dword ptr [EAX + 0x61c]
ADD ESP,0x10
ADD ESP,0x1c
POP EBX
POP ESI
POP EDI
POP EBP
RET
CALL 0x0004e1f0
MOV dword ptr [ESP + 0xc],EAX
TEST EAX,EAX
JNZ 0x000a79b8
XOR EDX,EDX
MOV EAX,EBX
CALL 0x000a1a50
MOV EDX,dword ptr [EBX + 0x1c0]
TEST EDX,EDX
JZ 0x000a7a1a
MOV EAX,dword ptr [EDX + 0x14]
MOV dword ptr [EBX + 0x1c0],EAX
MOV EAX,EBX
CALL 0x000428d0
MOV EDX,dword ptr [EBX + 0x1c0]
TEST EDX,EDX
JNZ 0x000a7a00
MOV ECX,dword ptr [EBX + 0x14]
MOV EDX,dword ptr [EBX + 0x10]
MOV byte ptr [EBX + 0x53],0x0
XOR EBP,EBP
MOV dword ptr [EBX + 0x1c8],0x0
MOV dword ptr [EBX + 0x1cc],0x0
TEST ECX,ECX
JLE 0x000a7a71
NOP
MOV ESI,EBP
SHL ESI,0x4
ADD ESI,EDX
MOV EAX,dword ptr [ESI + 0x4]
TEST EAX,EAX
JZ 0x000a7a69
CALL 0x000a77a0
MOV dword ptr [ESI + 0x4],0x0
CMP EBP,0x1
JZ 0x000a7a66
MOV dword ptr [ESI + 0xc],0x0
MOV EDX,dword ptr [EBX + 0x10]
ADD EBP,0x1
CMP EBP,dword ptr [EBX + 0x14]
JL 0x000a7a40
MOV EAX,dword ptr [EDX + 0x1c]
TEST EAX,EAX
JZ 0x000a7a84
SUB ESP,0xc
PUSH EAX
CALL 0x000579b0
ADD ESP,0x10
MOV EAX,EBX
CALL 0x00043270
MOV EAX,EBX
CALL 0x0004bc40
MOV EAX,EBX
CALL 0x00043780
CALL 0x0003ad60
MOV EAX,dword ptr [ESP + 0x4]
MOV EDX,dword ptr [EAX + 0x1ce8]
TEST EDX,EDX
JZ 0x000a7acc
CMP EBX,EDX
JNZ 0x000a7ac2
JMP 0x000a7cc8
CMP EBX,EAX
JZ 0x000a7c99
MOV EDX,EAX
MOV EAX,dword ptr [EDX + 0x1f4]
TEST EAX,EAX
JNZ 0x000a7ab8
CALL 0x0003ada0
MOV EBP,dword ptr [EBX + 0x178]
TEST EBP,EBP
JZ 0x000a7b0b
LEA ESI,[ESI]
NOP
MOV ESI,dword ptr [EBP + 0x8]
LEA ESI,[ESI]
NOP
MOV EDX,dword ptr [ESI + 0x24]
MOV EAX,EBX
CALL 0x0004e1a0
MOV EDI,dword ptr [ESI + 0xc]
MOV EDX,ESI
MOV EAX,EBX
CALL 0x000428d0
MOV ESI,EDI
TEST EDI,EDI
JNZ 0x000a7ae8
MOV EBP,dword ptr [EBP]
TEST EBP,EBP
JNZ 0x000a7ae0
LEA EAX,[EBX + 0x170]
CALL 0x000434c0
MOV ESI,dword ptr [EBX + 0x188]
TEST ESI,ESI
JZ 0x000a7b62
MOV dword ptr [ESP + 0x8],EBX
LEA ESI,[ESI]
MOV EBX,dword ptr [ESI + 0x8]
LEA EDI,[EBX + 0x8]
LEA EBP,[EBX + 0x44]
MOV EAX,dword ptr [EDI + 0x8]
TEST EAX,EAX
JZ 0x000a7b42
SUB ESP,0xc
PUSH dword ptr [EDI]
CALL EAX
ADD ESP,0x10
ADD EDI,0x14
CMP EBP,EDI
JNZ 0x000a7b31
TEST EBX,EBX
JZ 0x000a7b58
MOV EAX,dword ptr [ESP + 0x8]
MOV EDX,EBX
CALL 0x000428d0
MOV ESI,dword ptr [ESI]
TEST ESI,ESI
JNZ 0x000a7b28
MOV EBX,dword ptr [ESP + 0x8]
LEA EAX,[EBX + 0x180]
CALL 0x000434c0
MOV ESI,dword ptr [EBX + 0x15c]
TEST ESI,ESI
JZ 0x000a7bbd
LEA ESI,[ESI]
NOP
MOV EDI,dword ptr [ESI + 0x8]
MOV EAX,dword ptr [EDI + 0xc]
TEST EAX,EAX
JZ 0x000a7b95
SUB ESP,0xc
PUSH dword ptr [EDI + 0x8]
CALL EAX
ADD ESP,0x10
MOV EDX,dword ptr [EDI + 0x10]
TEST EDX,EDX
JZ 0x000a7bae
OR dword ptr [EDX + 0x24],0x2
MOV EAX,EBX
CALL 0x00057430
MOV dword ptr [EDI + 0x10],0x0
MOV EDX,EDI
MOV EAX,EBX
CALL 0x000428d0
MOV ESI,dword ptr [ESI]
TEST ESI,ESI
JNZ 0x000a7b80
LEA EAX,[EBX + 0x154]
CALL 0x000434c0
MOV EAX,dword ptr [EBX + 0x108]
MOV dword ptr [EBX + 0x3c],0x0
TEST EAX,EAX
JZ 0x000a7be8
MOV EAX,EBX
XOR EDX,EDX
CALL 0x00045400
MOV EAX,dword ptr [EBX + 0x108]
CALL 0x00042f80
MOV EAX,dword ptr [EBX + 0xb8]
MOV ESI,dword ptr [ESP + 0xc]
TEST EAX,EAX
JLE 0x000a7c20
LEA ESI,[ESI]
NOP
MOV EAX,dword ptr [EBX]
MOV EDX,dword ptr [EBX + 0xbc]
SUB ESP,0x8
PUSH dword ptr [EDX + ESI*0x4]
ADD ESI,0x1
PUSH EAX
CALL dword ptr [EAX + 0x34]
ADD ESP,0x10
CMP ESI,dword ptr [EBX + 0xb8]
JL 0x000a7c00
MOV EDX,dword ptr [EBX + 0xbc]
TEST EDX,EDX
JZ 0x000a7c31
MOV EAX,EBX
CALL 0x000428d0
MOV EAX,dword ptr [EBX + 0x10]
MOV dword ptr [EBX + 0x5c],0xb5357930
MOV EDX,dword ptr [EAX + 0x1c]
TEST EDX,EDX
JZ 0x000a7c49
MOV EAX,EBX
CALL 0x000428d0
MOV EAX,dword ptr [EBX + 0xc]
TEST EAX,EAX
JZ 0x000a7cbf
SUB ESP,0xc
PUSH EAX
MOV EDI,dword ptr [ESP + 0x14]
CALL dword ptr [EDI + 0x61c]
MOV EAX,dword ptr [EBX + 0xc]
MOV dword ptr [EBX + 0x5c],0x9f3c2d33
ADD ESP,0x10
TEST EAX,EAX
JZ 0x000a7c7c
SUB ESP,0xc
PUSH EAX
CALL dword ptr [EDI + 0x610]
ADD ESP,0x10
CMP byte ptr [EBX + 0x11a],0x0
JNZ 0x000a7cac
SUB ESP,0xc
PUSH EBX
CALL 0x00042800
ADD ESP,0x10
ADD ESP,0x1c
POP EBX
POP ESI
POP EDI
POP EBP
RET
ADD EDX,0x1f4
MOV EAX,dword ptr [EAX + 0x1f4]
MOV dword ptr [EDX],EAX
JMP 0x000a7acc
SUB ESP,0xc
PUSH dword ptr [EBX + 0x134]
CALL 0x00042800
ADD ESP,0x10
JMP 0x000a7c85
MOV dword ptr [EBX + 0x5c],0x9f3c2d33
JMP 0x000a7c7c
MOV ECX,dword ptr [ESP + 0x4]
MOV EAX,EBX
LEA EDX,[ECX + 0x1ce8]
JMP 0x000a7c9f
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.cx replaced with injection: get_pc_thunk_cx */\n\nvoid __regparm3 FUN_000a7990(int *param_1)\n\n{\n  uint *puVar1;\n  undefined4 *puVar2;\n  int iVar3;\n  int *piVar4;\n  int *piVar5;\n  int iVar6;\n  int iVar7;\n  undefined4 *puVar8;\n  \n  if (((param_1[0x17] != 0x64cffc7f) || (param_1[1] != 0)) || (iVar3 = FUN_0004e1f0(), iVar3 != 0))\n  {\n    if (param_1[3] != 0) {\n      (*DAT_0017c444)(param_1[3]);\n    }\n    return;\n  }\n  FUN_000a1a50();\n  iVar3 = param_1[0x70];\n  while (iVar3 != 0) {\n    param_1[0x70] = *(int *)(iVar3 + 0x14);\n    FUN_000428d0();\n    iVar3 = param_1[0x70];\n  }\n  iVar3 = param_1[4];\n  *(undefined1 *)((int)param_1 + 0x53) = 0;\n  iVar6 = 0;\n  param_1[0x72] = 0;\n  param_1[0x73] = 0;\n  if (0 < param_1[5]) {\n    do {\n      iVar7 = iVar6 * 0x10 + iVar3;\n      if (*(int *)(iVar7 + 4) != 0) {\n        FUN_000a77a0();\n        *(undefined4 *)(iVar7 + 4) = 0;\n        if (iVar6 != 1) {\n          *(undefined4 *)(iVar7 + 0xc) = 0;\n        }\n        iVar3 = param_1[4];\n      }\n      iVar6 = iVar6 + 1;\n    } while (iVar6 < param_1[5]);\n  }\n  if (*(int *)(iVar3 + 0x1c) != 0) {\n    FUN_000579b0(*(int *)(iVar3 + 0x1c));\n  }\n  FUN_00043270();\n  FUN_0004bc40();\n  FUN_00043780();\n  FUN_0003ad60();\n  if (DAT_0017db10 != (int *)0x0) {\n    piVar4 = DAT_0017db10;\n    if (param_1 == DAT_0017db10) {\n      piVar5 = (int *)&DAT_0017db10;\n      piVar4 = param_1;\n    }\n    else {\n      do {\n        piVar5 = piVar4;\n        piVar4 = (int *)piVar5[0x7d];\n        if (piVar4 == (int *)0x0) goto LAB_000a7acc;\n      } while (param_1 != piVar4);\n      piVar5 = piVar5 + 0x7d;\n    }\n    *piVar5 = piVar4[0x7d];\n  }\nLAB_000a7acc:\n  FUN_0003ada0();\n  for (puVar2 = (undefined4 *)param_1[0x5e]; puVar2 != (undefined4 *)0x0;\n      puVar2 = (undefined4 *)*puVar2) {\n    iVar3 = puVar2[2];\n    do {\n      FUN_0004e1a0();\n      iVar3 = *(int *)(iVar3 + 0xc);\n      FUN_000428d0();\n    } while (iVar3 != 0);\n  }\n  FUN_000434c0();\n  for (puVar2 = (undefined4 *)param_1[0x62]; puVar2 != (undefined4 *)0x0;\n      puVar2 = (undefined4 *)*puVar2) {\n    iVar3 = puVar2[2];\n    puVar8 = (undefined4 *)(iVar3 + 8);\n    do {\n      if ((code *)puVar8[2] != (code *)0x0) {\n        (*(code *)puVar8[2])(*puVar8);\n      }\n      puVar8 = puVar8 + 5;\n    } while ((undefined4 *)(iVar3 + 0x44) != puVar8);\n    if (iVar3 != 0) {\n      FUN_000428d0();\n    }\n  }\n  FUN_000434c0();\n  for (puVar2 = (undefined4 *)param_1[0x57]; puVar2 != (undefined4 *)0x0;\n      puVar2 = (undefined4 *)*puVar2) {\n    iVar3 = puVar2[2];\n    if (*(code **)(iVar3 + 0xc) != (code *)0x0) {\n      (**(code **)(iVar3 + 0xc))(*(undefined4 *)(iVar3 + 8));\n    }\n    if (*(int *)(iVar3 + 0x10) != 0) {\n      puVar1 = (uint *)(*(int *)(iVar3 + 0x10) + 0x24);\n      *puVar1 = *puVar1 | 2;\n      FUN_00057430();\n      *(undefined4 *)(iVar3 + 0x10) = 0;\n    }\n    FUN_000428d0();\n  }\n  FUN_000434c0();\n  param_1[0xf] = 0;\n  if (param_1[0x42] != 0) {\n    FUN_00045400();\n  }\n  FUN_00042f80();\n  if (0 < param_1[0x2e]) {\n    iVar3 = 0;\n    do {\n      iVar6 = iVar3 * 4;\n      iVar3 = iVar3 + 1;\n      (**(code **)(*param_1 + 0x34))(*param_1,*(undefined4 *)(param_1[0x2f] + iVar6));\n    } while (iVar3 < param_1[0x2e]);\n  }\n  if (param_1[0x2f] != 0) {\n    FUN_000428d0();\n  }\n  param_1[0x17] = -0x4aca86d0;\n  if (*(int *)(param_1[4] + 0x1c) != 0) {\n    FUN_000428d0();\n  }\n  if (param_1[3] == 0) {\n    param_1[0x17] = -0x60c3d2cd;\n  }\n  else {\n    (*DAT_0017c444)(param_1[3]);\n    param_1[0x17] = -0x60c3d2cd;\n    if (param_1[3] != 0) {\n      (*DAT_0017c438)(param_1[3]);\n    }\n  }\n  if (*(char *)((int)param_1 + 0x11a) != '\0') {\n    FUN_00042800(param_1[0x4d]);\n  }\n  FUN_00042800(param_1);\n  return;\n}\n\n" comment (function_definition "void __regparm3 FUN_000a7990(int *param_1)\n\n{\n  uint *puVar1;\n  undefined4 *puVar2;\n  int iVar3;\n  int *piVar4;\n  int *piVar5;\n  int iVar6;\n  int iVar7;\n  undefined4 *puVar8;\n  \n  if (((param_1[0x17] != 0x64cffc7f) || (param_1[1] != 0)) || (iVar3 = FUN_0004e1f0(), iVar3 != 0))\n  {\n    if (param_1[3] != 0) {\n      (*DAT_0017c444)(param_1[3]);\n    }\n    return;\n  }\n  FUN_000a1a50();\n  iVar3 = param_1[0x70];\n  while (iVar3 != 0) {\n    param_1[0x70] = *(int *)(iVar3 + 0x14);\n    FUN_000428d0();\n    iVar3 = param_1[0x70];\n  }\n  iVar3 = param_1[4];\n  *(undefined1 *)((int)param_1 + 0x53) = 0;\n  iVar6 = 0;\n  param_1[0x72] = 0;\n  param_1[0x73] = 0;\n  if (0 < param_1[5]) {\n    do {\n      iVar7 = iVar6 * 0x10 + iVar3;\n      if (*(int *)(iVar7 + 4) != 0) {\n        FUN_000a77a0();\n        *(undefined4 *)(iVar7 + 4) = 0;\n        if (iVar6 != 1) {\n          *(undefined4 *)(iVar7 + 0xc) = 0;\n        }\n        iVar3 = param_1[4];\n      }\n      iVar6 = iVar6 + 1;\n    } while (iVar6 < param_1[5]);\n  }\n  if (*(int *)(iVar3 + 0x1c) != 0) {\n    FUN_000579b0(*(int *)(iVar3 + 0x1c));\n  }\n  FUN_00043270();\n  FUN_0004bc40();\n  FUN_00043780();\n  FUN_0003ad60();\n  if (DAT_0017db10 != (int *)0x0) {\n    piVar4 = DAT_0017db10;\n    if (param_1 == DAT_0017db10) {\n      piVar5 = (int *)&DAT_0017db10;\n      piVar4 = param_1;\n    }\n    else {\n      do {\n        piVar5 = piVar4;\n        piVar4 = (int *)piVar5[0x7d];\n        if (piVar4 == (int *)0x0) goto LAB_000a7acc;\n      } while (param_1 != piVar4);\n      piVar5 = piVar5 + 0x7d;\n    }\n    *piVar5 = piVar4[0x7d];\n  }\nLAB_000a7acc:\n  FUN_0003ada0();\n  for (puVar2 = (undefined4 *)param_1[0x5e]; puVar2 != (undefined4 *)0x0;\n      puVar2 = (undefined4 *)*puVar2) {\n    iVar3 = puVar2[2];\n    do {\n      FUN_0004e1a0();\n      iVar3 = *(int *)(iVar3 + 0xc);\n      FUN_000428d0();\n    } while (iVar3 != 0);\n  }\n  FUN_000434c0();\n  for (puVar2 = (undefined4 *)param_1[0x62]; puVar2 != (undefined4 *)0x0;\n      puVar2 = (undefined4 *)*puVar2) {\n    iVar3 = puVar2[2];\n    puVar8 = (undefined4 *)(iVar3 + 8);\n    do {\n      if ((code *)puVar8[2] != (code *)0x0) {\n        (*(code *)puVar8[2])(*puVar8);\n      }\n      puVar8 = puVar8 + 5;\n    } while ((undefined4 *)(iVar3 + 0x44) != puVar8);\n    if (iVar3 != 0) {\n      FUN_000428d0();\n    }\n  }\n  FUN_000434c0();\n  for (puVar2 = (undefined4 *)param_1[0x57]; puVar2 != (undefined4 *)0x0;\n      puVar2 = (undefined4 *)*puVar2) {\n    iVar3 = puVar2[2];\n    if (*(code **)(iVar3 + 0xc) != (code *)0x0) {\n      (**(code **)(iVar3 + 0xc))(*(undefined4 *)(iVar3 + 8));\n    }\n    if (*(int *)(iVar3 + 0x10) != 0) {\n      puVar1 = (uint *)(*(int *)(iVar3 + 0x10) + 0x24);\n      *puVar1 = *puVar1 | 2;\n      FUN_00057430();\n      *(undefined4 *)(iVar3 + 0x10) = 0;\n    }\n    FUN_000428d0();\n  }\n  FUN_000434c0();\n  param_1[0xf] = 0;\n  if (param_1[0x42] != 0) {\n    FUN_00045400();\n  }\n  FUN_00042f80();\n  if (0 < param_1[0x2e]) {\n    iVar3 = 0;\n    do {\n      iVar6 = iVar3 * 4;\n      iVar3 = iVar3 + 1;\n      (**(code **)(*param_1 + 0x34))(*param_1,*(undefined4 *)(param_1[0x2f] + iVar6));\n    } while (iVar3 < param_1[0x2e]);\n  }\n  if (param_1[0x2f] != 0) {\n    FUN_000428d0();\n  }\n  param_1[0x17] = -0x4aca86d0;\n  if (*(int *)(param_1[4] + 0x1c) != 0) {\n    FUN_000428d0();\n  }\n  if (param_1[3] == 0) {\n    param_1[0x17] = -0x60c3d2cd;\n  }\n  else {\n    (*DAT_0017c444)(param_1[3]);\n    param_1[0x17] = -0x60c3d2cd;\n    if (param_1[3] != 0) {\n      (*DAT_0017c438)(param_1[3]);\n    }\n  }\n  if (*(char *)((int)param_1 + 0x11a) != '\0') {\n    FUN_00042800(param_1[0x4d]);\n  }\n  FUN_00042800(param_1);\n  return;\n}" primitive_type (ERROR "__regparm3" identifier) (function_declarator "FUN_000a7990(int *param_1)" identifier (parameter_list "(int *param_1)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) ))) (compound_statement "{\n  uint *puVar1;\n  undefined4 *puVar2;\n  int iVar3;\n  int *piVar4;\n  int *piVar5;\n  int iVar6;\n  int iVar7;\n  undefined4 *puVar8;\n  \n  if (((param_1[0x17] != 0x64cffc7f) || (param_1[1] != 0)) || (iVar3 = FUN_0004e1f0(), iVar3 != 0))\n  {\n    if (param_1[3] != 0) {\n      (*DAT_0017c444)(param_1[3]);\n    }\n    return;\n  }\n  FUN_000a1a50();\n  iVar3 = param_1[0x70];\n  while (iVar3 != 0) {\n    param_1[0x70] = *(int *)(iVar3 + 0x14);\n    FUN_000428d0();\n    iVar3 = param_1[0x70];\n  }\n  iVar3 = param_1[4];\n  *(undefined1 *)((int)param_1 + 0x53) = 0;\n  iVar6 = 0;\n  param_1[0x72] = 0;\n  param_1[0x73] = 0;\n  if (0 < param_1[5]) {\n    do {\n      iVar7 = iVar6 * 0x10 + iVar3;\n      if (*(int *)(iVar7 + 4) != 0) {\n        FUN_000a77a0();\n        *(undefined4 *)(iVar7 + 4) = 0;\n        if (iVar6 != 1) {\n          *(undefined4 *)(iVar7 + 0xc) = 0;\n        }\n        iVar3 = param_1[4];\n      }\n      iVar6 = iVar6 + 1;\n    } while (iVar6 < param_1[5]);\n  }\n  if (*(int *)(iVar3 + 0x1c) != 0) {\n    FUN_000579b0(*(int *)(iVar3 + 0x1c));\n  }\n  FUN_00043270();\n  FUN_0004bc40();\n  FUN_00043780();\n  FUN_0003ad60();\n  if (DAT_0017db10 != (int *)0x0) {\n    piVar4 = DAT_0017db10;\n    if (param_1 == DAT_0017db10) {\n      piVar5 = (int *)&DAT_0017db10;\n      piVar4 = param_1;\n    }\n    else {\n      do {\n        piVar5 = piVar4;\n        piVar4 = (int *)piVar5[0x7d];\n        if (piVar4 == (int *)0x0) goto LAB_000a7acc;\n      } while (param_1 != piVar4);\n      piVar5 = piVar5 + 0x7d;\n    }\n    *piVar5 = piVar4[0x7d];\n  }\nLAB_000a7acc:\n  FUN_0003ada0();\n  for (puVar2 = (undefined4 *)param_1[0x5e]; puVar2 != (undefined4 *)0x0;\n      puVar2 = (undefined4 *)*puVar2) {\n    iVar3 = puVar2[2];\n    do {\n      FUN_0004e1a0();\n      iVar3 = *(int *)(iVar3 + 0xc);\n      FUN_000428d0();\n    } while (iVar3 != 0);\n  }\n  FUN_000434c0();\n  for (puVar2 = (undefined4 *)param_1[0x62]; puVar2 != (undefined4 *)0x0;\n      puVar2 = (undefined4 *)*puVar2) {\n    iVar3 = puVar2[2];\n    puVar8 = (undefined4 *)(iVar3 + 8);\n    do {\n      if ((code *)puVar8[2] != (code *)0x0) {\n        (*(code *)puVar8[2])(*puVar8);\n      }\n      puVar8 = puVar8 + 5;\n    } while ((undefined4 *)(iVar3 + 0x44) != puVar8);\n    if (iVar3 != 0) {\n      FUN_000428d0();\n    }\n  }\n  FUN_000434c0();\n  for (puVar2 = (undefined4 *)param_1[0x57]; puVar2 != (undefined4 *)0x0;\n      puVar2 = (undefined4 *)*puVar2) {\n    iVar3 = puVar2[2];\n    if (*(code **)(iVar3 + 0xc) != (code *)0x0) {\n      (**(code **)(iVar3 + 0xc))(*(undefined4 *)(iVar3 + 8));\n    }\n    if (*(int *)(iVar3 + 0x10) != 0) {\n      puVar1 = (uint *)(*(int *)(iVar3 + 0x10) + 0x24);\n      *puVar1 = *puVar1 | 2;\n      FUN_00057430();\n      *(undefined4 *)(iVar3 + 0x10) = 0;\n    }\n    FUN_000428d0();\n  }\n  FUN_000434c0();\n  param_1[0xf] = 0;\n  if (param_1[0x42] != 0) {\n    FUN_00045400();\n  }\n  FUN_00042f80();\n  if (0 < param_1[0x2e]) {\n    iVar3 = 0;\n    do {\n      iVar6 = iVar3 * 4;\n      iVar3 = iVar3 + 1;\n      (**(code **)(*param_1 + 0x34))(*param_1,*(undefined4 *)(param_1[0x2f] + iVar6));\n    } while (iVar3 < param_1[0x2e]);\n  }\n  if (param_1[0x2f] != 0) {\n    FUN_000428d0();\n  }\n  param_1[0x17] = -0x4aca86d0;\n  if (*(int *)(param_1[4] + 0x1c) != 0) {\n    FUN_000428d0();\n  }\n  if (param_1[3] == 0) {\n    param_1[0x17] = -0x60c3d2cd;\n  }\n  else {\n    (*DAT_0017c444)(param_1[3]);\n    param_1[0x17] = -0x60c3d2cd;\n    if (param_1[3] != 0) {\n      (*DAT_0017c438)(param_1[3]);\n    }\n  }\n  if (*(char *)((int)param_1 + 0x11a) != '\0') {\n    FUN_00042800(param_1[0x4d]);\n  }\n  FUN_00042800(param_1);\n  return;\n}" { (declaration "uint *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "undefined4 *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "int *piVar4;" primitive_type (pointer_declarator "*piVar4" * identifier) ;) (declaration "int *piVar5;" primitive_type (pointer_declarator "*piVar5" * identifier) ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "undefined4 *puVar8;" type_identifier (pointer_declarator "*puVar8" * identifier) ;) (if_statement "if (((param_1[0x17] != 0x64cffc7f) || (param_1[1] != 0)) || (iVar3 = FUN_0004e1f0(), iVar3 != 0))\n  {\n    if (param_1[3] != 0) {\n      (*DAT_0017c444)(param_1[3]);\n    }\n    return;\n  }" if (parenthesized_expression "(((param_1[0x17] != 0x64cffc7f) || (param_1[1] != 0)) || (iVar3 = FUN_0004e1f0(), iVar3 != 0))" ( (binary_expression "((param_1[0x17] != 0x64cffc7f) || (param_1[1] != 0)) || (iVar3 = FUN_0004e1f0(), iVar3 != 0)" (parenthesized_expression "((param_1[0x17] != 0x64cffc7f) || (param_1[1] != 0))" ( (binary_expression "(param_1[0x17] != 0x64cffc7f) || (param_1[1] != 0)" (parenthesized_expression "(param_1[0x17] != 0x64cffc7f)" ( (binary_expression "param_1[0x17] != 0x64cffc7f" (subscript_expression "param_1[0x17]" identifier [ number_literal ]) != number_literal) )) || (parenthesized_expression "(param_1[1] != 0)" ( (binary_expression "param_1[1] != 0" (subscript_expression "param_1[1]" identifier [ number_literal ]) != number_literal) ))) )) || (parenthesized_expression "(iVar3 = FUN_0004e1f0(), iVar3 != 0)" ( (comma_expression "iVar3 = FUN_0004e1f0(), iVar3 != 0" (assignment_expression "iVar3 = FUN_0004e1f0()" identifier = (call_expression "FUN_0004e1f0()" identifier (argument_list "()" ( )))) , (binary_expression "iVar3 != 0" identifier != number_literal)) ))) )) (compound_statement "{\n    if (param_1[3] != 0) {\n      (*DAT_0017c444)(param_1[3]);\n    }\n    return;\n  }" { (if_statement "if (param_1[3] != 0) {\n      (*DAT_0017c444)(param_1[3]);\n    }" if (parenthesized_expression "(param_1[3] != 0)" ( (binary_expression "param_1[3] != 0" (subscript_expression "param_1[3]" identifier [ number_literal ]) != number_literal) )) (compound_statement "{\n      (*DAT_0017c444)(param_1[3]);\n    }" { (expression_statement "(*DAT_0017c444)(param_1[3]);" (call_expression "(*DAT_0017c444)(param_1[3])" (parenthesized_expression "(*DAT_0017c444)" ( (pointer_expression "*DAT_0017c444" * identifier) )) (argument_list "(param_1[3])" ( (subscript_expression "param_1[3]" identifier [ number_literal ]) ))) ;) })) (return_statement "return;" return ;) })) (expression_statement "FUN_000a1a50();" (call_expression "FUN_000a1a50()" identifier (argument_list "()" ( ))) ;) (expression_statement "iVar3 = param_1[0x70];" (assignment_expression "iVar3 = param_1[0x70]" identifier = (subscript_expression "param_1[0x70]" identifier [ number_literal ])) ;) (while_statement "while (iVar3 != 0) {\n    param_1[0x70] = *(int *)(iVar3 + 0x14);\n    FUN_000428d0();\n    iVar3 = param_1[0x70];\n  }" while (parenthesized_expression "(iVar3 != 0)" ( (binary_expression "iVar3 != 0" identifier != number_literal) )) (compound_statement "{\n    param_1[0x70] = *(int *)(iVar3 + 0x14);\n    FUN_000428d0();\n    iVar3 = param_1[0x70];\n  }" { (expression_statement "param_1[0x70] = *(int *)(iVar3 + 0x14);" (assignment_expression "param_1[0x70] = *(int *)(iVar3 + 0x14)" (subscript_expression "param_1[0x70]" identifier [ number_literal ]) = (pointer_expression "*(int *)(iVar3 + 0x14)" * (cast_expression "(int *)(iVar3 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0x14)" ( (binary_expression "iVar3 + 0x14" identifier + number_literal) ))))) ;) (expression_statement "FUN_000428d0();" (call_expression "FUN_000428d0()" identifier (argument_list "()" ( ))) ;) (expression_statement "iVar3 = param_1[0x70];" (assignment_expression "iVar3 = param_1[0x70]" identifier = (subscript_expression "param_1[0x70]" identifier [ number_literal ])) ;) })) (expression_statement "iVar3 = param_1[4];" (assignment_expression "iVar3 = param_1[4]" identifier = (subscript_expression "param_1[4]" identifier [ number_literal ])) ;) (expression_statement "*(undefined1 *)((int)param_1 + 0x53) = 0;" (assignment_expression "*(undefined1 *)((int)param_1 + 0x53) = 0" (pointer_expression "*(undefined1 *)((int)param_1 + 0x53)" * (cast_expression "(undefined1 *)((int)param_1 + 0x53)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + 0x53)" ( (binary_expression "(int)param_1 + 0x53" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) = number_literal) ;) (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" identifier = number_literal) ;) (expression_statement "param_1[0x72] = 0;" (assignment_expression "param_1[0x72] = 0" (subscript_expression "param_1[0x72]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[0x73] = 0;" (assignment_expression "param_1[0x73] = 0" (subscript_expression "param_1[0x73]" identifier [ number_literal ]) = number_literal) ;) (if_statement "if (0 < param_1[5]) {\n    do {\n      iVar7 = iVar6 * 0x10 + iVar3;\n      if (*(int *)(iVar7 + 4) != 0) {\n        FUN_000a77a0();\n        *(undefined4 *)(iVar7 + 4) = 0;\n        if (iVar6 != 1) {\n          *(undefined4 *)(iVar7 + 0xc) = 0;\n        }\n        iVar3 = param_1[4];\n      }\n      iVar6 = iVar6 + 1;\n    } while (iVar6 < param_1[5]);\n  }" if (parenthesized_expression "(0 < param_1[5])" ( (binary_expression "0 < param_1[5]" number_literal < (subscript_expression "param_1[5]" identifier [ number_literal ])) )) (compound_statement "{\n    do {\n      iVar7 = iVar6 * 0x10 + iVar3;\n      if (*(int *)(iVar7 + 4) != 0) {\n        FUN_000a77a0();\n        *(undefined4 *)(iVar7 + 4) = 0;\n        if (iVar6 != 1) {\n          *(undefined4 *)(iVar7 + 0xc) = 0;\n        }\n        iVar3 = param_1[4];\n      }\n      iVar6 = iVar6 + 1;\n    } while (iVar6 < param_1[5]);\n  }" { (do_statement "do {\n      iVar7 = iVar6 * 0x10 + iVar3;\n      if (*(int *)(iVar7 + 4) != 0) {\n        FUN_000a77a0();\n        *(undefined4 *)(iVar7 + 4) = 0;\n        if (iVar6 != 1) {\n          *(undefined4 *)(iVar7 + 0xc) = 0;\n        }\n        iVar3 = param_1[4];\n      }\n      iVar6 = iVar6 + 1;\n    } while (iVar6 < param_1[5]);" do (compound_statement "{\n      iVar7 = iVar6 * 0x10 + iVar3;\n      if (*(int *)(iVar7 + 4) != 0) {\n        FUN_000a77a0();\n        *(undefined4 *)(iVar7 + 4) = 0;\n        if (iVar6 != 1) {\n          *(undefined4 *)(iVar7 + 0xc) = 0;\n        }\n        iVar3 = param_1[4];\n      }\n      iVar6 = iVar6 + 1;\n    }" { (expression_statement "iVar7 = iVar6 * 0x10 + iVar3;" (assignment_expression "iVar7 = iVar6 * 0x10 + iVar3" identifier = (binary_expression "iVar6 * 0x10 + iVar3" (binary_expression "iVar6 * 0x10" identifier * number_literal) + identifier)) ;) (if_statement "if (*(int *)(iVar7 + 4) != 0) {\n        FUN_000a77a0();\n        *(undefined4 *)(iVar7 + 4) = 0;\n        if (iVar6 != 1) {\n          *(undefined4 *)(iVar7 + 0xc) = 0;\n        }\n        iVar3 = param_1[4];\n      }" if (parenthesized_expression "(*(int *)(iVar7 + 4) != 0)" ( (binary_expression "*(int *)(iVar7 + 4) != 0" (pointer_expression "*(int *)(iVar7 + 4)" * (cast_expression "(int *)(iVar7 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 4)" ( (binary_expression "iVar7 + 4" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n        FUN_000a77a0();\n        *(undefined4 *)(iVar7 + 4) = 0;\n        if (iVar6 != 1) {\n          *(undefined4 *)(iVar7 + 0xc) = 0;\n        }\n        iVar3 = param_1[4];\n      }" { (expression_statement "FUN_000a77a0();" (call_expression "FUN_000a77a0()" identifier (argument_list "()" ( ))) ;) (expression_statement "*(undefined4 *)(iVar7 + 4) = 0;" (assignment_expression "*(undefined4 *)(iVar7 + 4) = 0" (pointer_expression "*(undefined4 *)(iVar7 + 4)" * (cast_expression "(undefined4 *)(iVar7 + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 4)" ( (binary_expression "iVar7 + 4" identifier + number_literal) )))) = number_literal) ;) (if_statement "if (iVar6 != 1) {\n          *(undefined4 *)(iVar7 + 0xc) = 0;\n        }" if (parenthesized_expression "(iVar6 != 1)" ( (binary_expression "iVar6 != 1" identifier != number_literal) )) (compound_statement "{\n          *(undefined4 *)(iVar7 + 0xc) = 0;\n        }" { (expression_statement "*(undefined4 *)(iVar7 + 0xc) = 0;" (assignment_expression "*(undefined4 *)(iVar7 + 0xc) = 0" (pointer_expression "*(undefined4 *)(iVar7 + 0xc)" * (cast_expression "(undefined4 *)(iVar7 + 0xc)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 0xc)" ( (binary_expression "iVar7 + 0xc" identifier + number_literal) )))) = number_literal) ;) })) (expression_statement "iVar3 = param_1[4];" (assignment_expression "iVar3 = param_1[4]" identifier = (subscript_expression "param_1[4]" identifier [ number_literal ])) ;) })) (expression_statement "iVar6 = iVar6 + 1;" (assignment_expression "iVar6 = iVar6 + 1" identifier = (binary_expression "iVar6 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar6 < param_1[5])" ( (binary_expression "iVar6 < param_1[5]" identifier < (subscript_expression "param_1[5]" identifier [ number_literal ])) )) ;) })) (if_statement "if (*(int *)(iVar3 + 0x1c) != 0) {\n    FUN_000579b0(*(int *)(iVar3 + 0x1c));\n  }" if (parenthesized_expression "(*(int *)(iVar3 + 0x1c) != 0)" ( (binary_expression "*(int *)(iVar3 + 0x1c) != 0" (pointer_expression "*(int *)(iVar3 + 0x1c)" * (cast_expression "(int *)(iVar3 + 0x1c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0x1c)" ( (binary_expression "iVar3 + 0x1c" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n    FUN_000579b0(*(int *)(iVar3 + 0x1c));\n  }" { (expression_statement "FUN_000579b0(*(int *)(iVar3 + 0x1c));" (call_expression "FUN_000579b0(*(int *)(iVar3 + 0x1c))" identifier (argument_list "(*(int *)(iVar3 + 0x1c))" ( (pointer_expression "*(int *)(iVar3 + 0x1c)" * (cast_expression "(int *)(iVar3 + 0x1c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0x1c)" ( (binary_expression "iVar3 + 0x1c" identifier + number_literal) )))) ))) ;) })) (expression_statement "FUN_00043270();" (call_expression "FUN_00043270()" identifier (argument_list "()" ( ))) ;) (expression_statement "FUN_0004bc40();" (call_expression "FUN_0004bc40()" identifier (argument_list "()" ( ))) ;) (expression_statement "FUN_00043780();" (call_expression "FUN_00043780()" identifier (argument_list "()" ( ))) ;) (expression_statement "FUN_0003ad60();" (call_expression "FUN_0003ad60()" identifier (argument_list "()" ( ))) ;) (if_statement "if (DAT_0017db10 != (int *)0x0) {\n    piVar4 = DAT_0017db10;\n    if (param_1 == DAT_0017db10) {\n      piVar5 = (int *)&DAT_0017db10;\n      piVar4 = param_1;\n    }\n    else {\n      do {\n        piVar5 = piVar4;\n        piVar4 = (int *)piVar5[0x7d];\n        if (piVar4 == (int *)0x0) goto LAB_000a7acc;\n      } while (param_1 != piVar4);\n      piVar5 = piVar5 + 0x7d;\n    }\n    *piVar5 = piVar4[0x7d];\n  }" if (parenthesized_expression "(DAT_0017db10 != (int *)0x0)" ( (binary_expression "DAT_0017db10 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    piVar4 = DAT_0017db10;\n    if (param_1 == DAT_0017db10) {\n      piVar5 = (int *)&DAT_0017db10;\n      piVar4 = param_1;\n    }\n    else {\n      do {\n        piVar5 = piVar4;\n        piVar4 = (int *)piVar5[0x7d];\n        if (piVar4 == (int *)0x0) goto LAB_000a7acc;\n      } while (param_1 != piVar4);\n      piVar5 = piVar5 + 0x7d;\n    }\n    *piVar5 = piVar4[0x7d];\n  }" { (expression_statement "piVar4 = DAT_0017db10;" (assignment_expression "piVar4 = DAT_0017db10" identifier = identifier) ;) (if_statement "if (param_1 == DAT_0017db10) {\n      piVar5 = (int *)&DAT_0017db10;\n      piVar4 = param_1;\n    }\n    else {\n      do {\n        piVar5 = piVar4;\n        piVar4 = (int *)piVar5[0x7d];\n        if (piVar4 == (int *)0x0) goto LAB_000a7acc;\n      } while (param_1 != piVar4);\n      piVar5 = piVar5 + 0x7d;\n    }" if (parenthesized_expression "(param_1 == DAT_0017db10)" ( (binary_expression "param_1 == DAT_0017db10" identifier == identifier) )) (compound_statement "{\n      piVar5 = (int *)&DAT_0017db10;\n      piVar4 = param_1;\n    }" { (expression_statement "piVar5 = (int *)&DAT_0017db10;" (assignment_expression "piVar5 = (int *)&DAT_0017db10" identifier = (cast_expression "(int *)&DAT_0017db10" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "&DAT_0017db10" & identifier))) ;) (expression_statement "piVar4 = param_1;" (assignment_expression "piVar4 = param_1" identifier = identifier) ;) }) (else_clause "else {\n      do {\n        piVar5 = piVar4;\n        piVar4 = (int *)piVar5[0x7d];\n        if (piVar4 == (int *)0x0) goto LAB_000a7acc;\n      } while (param_1 != piVar4);\n      piVar5 = piVar5 + 0x7d;\n    }" else (compound_statement "{\n      do {\n        piVar5 = piVar4;\n        piVar4 = (int *)piVar5[0x7d];\n        if (piVar4 == (int *)0x0) goto LAB_000a7acc;\n      } while (param_1 != piVar4);\n      piVar5 = piVar5 + 0x7d;\n    }" { (do_statement "do {\n        piVar5 = piVar4;\n        piVar4 = (int *)piVar5[0x7d];\n        if (piVar4 == (int *)0x0) goto LAB_000a7acc;\n      } while (param_1 != piVar4);" do (compound_statement "{\n        piVar5 = piVar4;\n        piVar4 = (int *)piVar5[0x7d];\n        if (piVar4 == (int *)0x0) goto LAB_000a7acc;\n      }" { (expression_statement "piVar5 = piVar4;" (assignment_expression "piVar5 = piVar4" identifier = identifier) ;) (expression_statement "piVar4 = (int *)piVar5[0x7d];" (assignment_expression "piVar4 = (int *)piVar5[0x7d]" identifier = (cast_expression "(int *)piVar5[0x7d]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar5[0x7d]" identifier [ number_literal ]))) ;) (if_statement "if (piVar4 == (int *)0x0) goto LAB_000a7acc;" if (parenthesized_expression "(piVar4 == (int *)0x0)" ( (binary_expression "piVar4 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_000a7acc;" goto statement_identifier ;)) }) while (parenthesized_expression "(param_1 != piVar4)" ( (binary_expression "param_1 != piVar4" identifier != identifier) )) ;) (expression_statement "piVar5 = piVar5 + 0x7d;" (assignment_expression "piVar5 = piVar5 + 0x7d" identifier = (binary_expression "piVar5 + 0x7d" identifier + number_literal)) ;) }))) (expression_statement "*piVar5 = piVar4[0x7d];" (assignment_expression "*piVar5 = piVar4[0x7d]" (pointer_expression "*piVar5" * identifier) = (subscript_expression "piVar4[0x7d]" identifier [ number_literal ])) ;) })) (labeled_statement "LAB_000a7acc:\n  FUN_0003ada0();" statement_identifier : (expression_statement "FUN_0003ada0();" (call_expression "FUN_0003ada0()" identifier (argument_list "()" ( ))) ;)) (for_statement "for (puVar2 = (undefined4 *)param_1[0x5e]; puVar2 != (undefined4 *)0x0;\n      puVar2 = (undefined4 *)*puVar2) {\n    iVar3 = puVar2[2];\n    do {\n      FUN_0004e1a0();\n      iVar3 = *(int *)(iVar3 + 0xc);\n      FUN_000428d0();\n    } while (iVar3 != 0);\n  }" for ( (assignment_expression "puVar2 = (undefined4 *)param_1[0x5e]" identifier = (cast_expression "(undefined4 *)param_1[0x5e]" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[0x5e]" identifier [ number_literal ]))) ; (binary_expression "puVar2 != (undefined4 *)0x0" identifier != (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ; (assignment_expression "puVar2 = (undefined4 *)*puVar2" identifier = (cast_expression "(undefined4 *)*puVar2" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar2" * identifier))) ) (compound_statement "{\n    iVar3 = puVar2[2];\n    do {\n      FUN_0004e1a0();\n      iVar3 = *(int *)(iVar3 + 0xc);\n      FUN_000428d0();\n    } while (iVar3 != 0);\n  }" { (expression_statement "iVar3 = puVar2[2];" (assignment_expression "iVar3 = puVar2[2]" identifier = (subscript_expression "puVar2[2]" identifier [ number_literal ])) ;) (do_statement "do {\n      FUN_0004e1a0();\n      iVar3 = *(int *)(iVar3 + 0xc);\n      FUN_000428d0();\n    } while (iVar3 != 0);" do (compound_statement "{\n      FUN_0004e1a0();\n      iVar3 = *(int *)(iVar3 + 0xc);\n      FUN_000428d0();\n    }" { (expression_statement "FUN_0004e1a0();" (call_expression "FUN_0004e1a0()" identifier (argument_list "()" ( ))) ;) (expression_statement "iVar3 = *(int *)(iVar3 + 0xc);" (assignment_expression "iVar3 = *(int *)(iVar3 + 0xc)" identifier = (pointer_expression "*(int *)(iVar3 + 0xc)" * (cast_expression "(int *)(iVar3 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0xc)" ( (binary_expression "iVar3 + 0xc" identifier + number_literal) ))))) ;) (expression_statement "FUN_000428d0();" (call_expression "FUN_000428d0()" identifier (argument_list "()" ( ))) ;) }) while (parenthesized_expression "(iVar3 != 0)" ( (binary_expression "iVar3 != 0" identifier != number_literal) )) ;) })) (expression_statement "FUN_000434c0();" (call_expression "FUN_000434c0()" identifier (argument_list "()" ( ))) ;) (for_statement "for (puVar2 = (undefined4 *)param_1[0x62]; puVar2 != (undefined4 *)0x0;\n      puVar2 = (undefined4 *)*puVar2) {\n    iVar3 = puVar2[2];\n    puVar8 = (undefined4 *)(iVar3 + 8);\n    do {\n      if ((code *)puVar8[2] != (code *)0x0) {\n        (*(code *)puVar8[2])(*puVar8);\n      }\n      puVar8 = puVar8 + 5;\n    } while ((undefined4 *)(iVar3 + 0x44) != puVar8);\n    if (iVar3 != 0) {\n      FUN_000428d0();\n    }\n  }" for ( (assignment_expression "puVar2 = (undefined4 *)param_1[0x62]" identifier = (cast_expression "(undefined4 *)param_1[0x62]" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[0x62]" identifier [ number_literal ]))) ; (binary_expression "puVar2 != (undefined4 *)0x0" identifier != (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ; (assignment_expression "puVar2 = (undefined4 *)*puVar2" identifier = (cast_expression "(undefined4 *)*puVar2" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar2" * identifier))) ) (compound_statement "{\n    iVar3 = puVar2[2];\n    puVar8 = (undefined4 *)(iVar3 + 8);\n    do {\n      if ((code *)puVar8[2] != (code *)0x0) {\n        (*(code *)puVar8[2])(*puVar8);\n      }\n      puVar8 = puVar8 + 5;\n    } while ((undefined4 *)(iVar3 + 0x44) != puVar8);\n    if (iVar3 != 0) {\n      FUN_000428d0();\n    }\n  }" { (expression_statement "iVar3 = puVar2[2];" (assignment_expression "iVar3 = puVar2[2]" identifier = (subscript_expression "puVar2[2]" identifier [ number_literal ])) ;) (expression_statement "puVar8 = (undefined4 *)(iVar3 + 8);" (assignment_expression "puVar8 = (undefined4 *)(iVar3 + 8)" identifier = (cast_expression "(undefined4 *)(iVar3 + 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 8)" ( (binary_expression "iVar3 + 8" identifier + number_literal) )))) ;) (do_statement "do {\n      if ((code *)puVar8[2] != (code *)0x0) {\n        (*(code *)puVar8[2])(*puVar8);\n      }\n      puVar8 = puVar8 + 5;\n    } while ((undefined4 *)(iVar3 + 0x44) != puVar8);" do (compound_statement "{\n      if ((code *)puVar8[2] != (code *)0x0) {\n        (*(code *)puVar8[2])(*puVar8);\n      }\n      puVar8 = puVar8 + 5;\n    }" { (if_statement "if ((code *)puVar8[2] != (code *)0x0) {\n        (*(code *)puVar8[2])(*puVar8);\n      }" if (parenthesized_expression "((code *)puVar8[2] != (code *)0x0)" ( (binary_expression "(code *)puVar8[2] != (code *)0x0" (cast_expression "(code *)puVar8[2]" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "puVar8[2]" identifier [ number_literal ])) != (cast_expression "(code *)0x0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        (*(code *)puVar8[2])(*puVar8);\n      }" { (expression_statement "(*(code *)puVar8[2])(*puVar8);" (call_expression "(*(code *)puVar8[2])(*puVar8)" (parenthesized_expression "(*(code *)puVar8[2])" ( (pointer_expression "*(code *)puVar8[2]" * (cast_expression "(code *)puVar8[2]" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "puVar8[2]" identifier [ number_literal ]))) )) (argument_list "(*puVar8)" ( (pointer_expression "*puVar8" * identifier) ))) ;) })) (expression_statement "puVar8 = puVar8 + 5;" (assignment_expression "puVar8 = puVar8 + 5" identifier = (binary_expression "puVar8 + 5" identifier + number_literal)) ;) }) while (parenthesized_expression "((undefined4 *)(iVar3 + 0x44) != puVar8)" ( (binary_expression "(undefined4 *)(iVar3 + 0x44) != puVar8" (cast_expression "(undefined4 *)(iVar3 + 0x44)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0x44)" ( (binary_expression "iVar3 + 0x44" identifier + number_literal) ))) != identifier) )) ;) (if_statement "if (iVar3 != 0) {\n      FUN_000428d0();\n    }" if (parenthesized_expression "(iVar3 != 0)" ( (binary_expression "iVar3 != 0" identifier != number_literal) )) (compound_statement "{\n      FUN_000428d0();\n    }" { (expression_statement "FUN_000428d0();" (call_expression "FUN_000428d0()" identifier (argument_list "()" ( ))) ;) })) })) (expression_statement "FUN_000434c0();" (call_expression "FUN_000434c0()" identifier (argument_list "()" ( ))) ;) (for_statement "for (puVar2 = (undefined4 *)param_1[0x57]; puVar2 != (undefined4 *)0x0;\n      puVar2 = (undefined4 *)*puVar2) {\n    iVar3 = puVar2[2];\n    if (*(code **)(iVar3 + 0xc) != (code *)0x0) {\n      (**(code **)(iVar3 + 0xc))(*(undefined4 *)(iVar3 + 8));\n    }\n    if (*(int *)(iVar3 + 0x10) != 0) {\n      puVar1 = (uint *)(*(int *)(iVar3 + 0x10) + 0x24);\n      *puVar1 = *puVar1 | 2;\n      FUN_00057430();\n      *(undefined4 *)(iVar3 + 0x10) = 0;\n    }\n    FUN_000428d0();\n  }" for ( (assignment_expression "puVar2 = (undefined4 *)param_1[0x57]" identifier = (cast_expression "(undefined4 *)param_1[0x57]" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[0x57]" identifier [ number_literal ]))) ; (binary_expression "puVar2 != (undefined4 *)0x0" identifier != (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ; (assignment_expression "puVar2 = (undefined4 *)*puVar2" identifier = (cast_expression "(undefined4 *)*puVar2" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar2" * identifier))) ) (compound_statement "{\n    iVar3 = puVar2[2];\n    if (*(code **)(iVar3 + 0xc) != (code *)0x0) {\n      (**(code **)(iVar3 + 0xc))(*(undefined4 *)(iVar3 + 8));\n    }\n    if (*(int *)(iVar3 + 0x10) != 0) {\n      puVar1 = (uint *)(*(int *)(iVar3 + 0x10) + 0x24);\n      *puVar1 = *puVar1 | 2;\n      FUN_00057430();\n      *(undefined4 *)(iVar3 + 0x10) = 0;\n    }\n    FUN_000428d0();\n  }" { (expression_statement "iVar3 = puVar2[2];" (assignment_expression "iVar3 = puVar2[2]" identifier = (subscript_expression "puVar2[2]" identifier [ number_literal ])) ;) (if_statement "if (*(code **)(iVar3 + 0xc) != (code *)0x0) {\n      (**(code **)(iVar3 + 0xc))(*(undefined4 *)(iVar3 + 8));\n    }" if (parenthesized_expression "(*(code **)(iVar3 + 0xc) != (code *)0x0)" ( (binary_expression "*(code **)(iVar3 + 0xc) != (code *)0x0" (pointer_expression "*(code **)(iVar3 + 0xc)" * (cast_expression "(code **)(iVar3 + 0xc)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar3 + 0xc)" ( (binary_expression "iVar3 + 0xc" identifier + number_literal) )))) != (cast_expression "(code *)0x0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      (**(code **)(iVar3 + 0xc))(*(undefined4 *)(iVar3 + 8));\n    }" { (expression_statement "(**(code **)(iVar3 + 0xc))(*(undefined4 *)(iVar3 + 8));" (call_expression "(**(code **)(iVar3 + 0xc))(*(undefined4 *)(iVar3 + 8))" (parenthesized_expression "(**(code **)(iVar3 + 0xc))" ( (pointer_expression "**(code **)(iVar3 + 0xc)" * (pointer_expression "*(code **)(iVar3 + 0xc)" * (cast_expression "(code **)(iVar3 + 0xc)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar3 + 0xc)" ( (binary_expression "iVar3 + 0xc" identifier + number_literal) ))))) )) (argument_list "(*(undefined4 *)(iVar3 + 8))" ( (pointer_expression "*(undefined4 *)(iVar3 + 8)" * (cast_expression "(undefined4 *)(iVar3 + 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 8)" ( (binary_expression "iVar3 + 8" identifier + number_literal) )))) ))) ;) })) (if_statement "if (*(int *)(iVar3 + 0x10) != 0) {\n      puVar1 = (uint *)(*(int *)(iVar3 + 0x10) + 0x24);\n      *puVar1 = *puVar1 | 2;\n      FUN_00057430();\n      *(undefined4 *)(iVar3 + 0x10) = 0;\n    }" if (parenthesized_expression "(*(int *)(iVar3 + 0x10) != 0)" ( (binary_expression "*(int *)(iVar3 + 0x10) != 0" (pointer_expression "*(int *)(iVar3 + 0x10)" * (cast_expression "(int *)(iVar3 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0x10)" ( (binary_expression "iVar3 + 0x10" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n      puVar1 = (uint *)(*(int *)(iVar3 + 0x10) + 0x24);\n      *puVar1 = *puVar1 | 2;\n      FUN_00057430();\n      *(undefined4 *)(iVar3 + 0x10) = 0;\n    }" { (expression_statement "puVar1 = (uint *)(*(int *)(iVar3 + 0x10) + 0x24);" (assignment_expression "puVar1 = (uint *)(*(int *)(iVar3 + 0x10) + 0x24)" identifier = (cast_expression "(uint *)(*(int *)(iVar3 + 0x10) + 0x24)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(iVar3 + 0x10) + 0x24)" ( (binary_expression "*(int *)(iVar3 + 0x10) + 0x24" (pointer_expression "*(int *)(iVar3 + 0x10)" * (cast_expression "(int *)(iVar3 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0x10)" ( (binary_expression "iVar3 + 0x10" identifier + number_literal) )))) + number_literal) )))) ;) (expression_statement "*puVar1 = *puVar1 | 2;" (assignment_expression "*puVar1 = *puVar1 | 2" (pointer_expression "*puVar1" * identifier) = (binary_expression "*puVar1 | 2" (pointer_expression "*puVar1" * identifier) | number_literal)) ;) (expression_statement "FUN_00057430();" (call_expression "FUN_00057430()" identifier (argument_list "()" ( ))) ;) (expression_statement "*(undefined4 *)(iVar3 + 0x10) = 0;" (assignment_expression "*(undefined4 *)(iVar3 + 0x10) = 0" (pointer_expression "*(undefined4 *)(iVar3 + 0x10)" * (cast_expression "(undefined4 *)(iVar3 + 0x10)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0x10)" ( (binary_expression "iVar3 + 0x10" identifier + number_literal) )))) = number_literal) ;) })) (expression_statement "FUN_000428d0();" (call_expression "FUN_000428d0()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "FUN_000434c0();" (call_expression "FUN_000434c0()" identifier (argument_list "()" ( ))) ;) (expression_statement "param_1[0xf] = 0;" (assignment_expression "param_1[0xf] = 0" (subscript_expression "param_1[0xf]" identifier [ number_literal ]) = number_literal) ;) (if_statement "if (param_1[0x42] != 0) {\n    FUN_00045400();\n  }" if (parenthesized_expression "(param_1[0x42] != 0)" ( (binary_expression "param_1[0x42] != 0" (subscript_expression "param_1[0x42]" identifier [ number_literal ]) != number_literal) )) (compound_statement "{\n    FUN_00045400();\n  }" { (expression_statement "FUN_00045400();" (call_expression "FUN_00045400()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "FUN_00042f80();" (call_expression "FUN_00042f80()" identifier (argument_list "()" ( ))) ;) (if_statement "if (0 < param_1[0x2e]) {\n    iVar3 = 0;\n    do {\n      iVar6 = iVar3 * 4;\n      iVar3 = iVar3 + 1;\n      (**(code **)(*param_1 + 0x34))(*param_1,*(undefined4 *)(param_1[0x2f] + iVar6));\n    } while (iVar3 < param_1[0x2e]);\n  }" if (parenthesized_expression "(0 < param_1[0x2e])" ( (binary_expression "0 < param_1[0x2e]" number_literal < (subscript_expression "param_1[0x2e]" identifier [ number_literal ])) )) (compound_statement "{\n    iVar3 = 0;\n    do {\n      iVar6 = iVar3 * 4;\n      iVar3 = iVar3 + 1;\n      (**(code **)(*param_1 + 0x34))(*param_1,*(undefined4 *)(param_1[0x2f] + iVar6));\n    } while (iVar3 < param_1[0x2e]);\n  }" { (expression_statement "iVar3 = 0;" (assignment_expression "iVar3 = 0" identifier = number_literal) ;) (do_statement "do {\n      iVar6 = iVar3 * 4;\n      iVar3 = iVar3 + 1;\n      (**(code **)(*param_1 + 0x34))(*param_1,*(undefined4 *)(param_1[0x2f] + iVar6));\n    } while (iVar3 < param_1[0x2e]);" do (compound_statement "{\n      iVar6 = iVar3 * 4;\n      iVar3 = iVar3 + 1;\n      (**(code **)(*param_1 + 0x34))(*param_1,*(undefined4 *)(param_1[0x2f] + iVar6));\n    }" { (expression_statement "iVar6 = iVar3 * 4;" (assignment_expression "iVar6 = iVar3 * 4" identifier = (binary_expression "iVar3 * 4" identifier * number_literal)) ;) (expression_statement "iVar3 = iVar3 + 1;" (assignment_expression "iVar3 = iVar3 + 1" identifier = (binary_expression "iVar3 + 1" identifier + number_literal)) ;) (expression_statement "(**(code **)(*param_1 + 0x34))(*param_1,*(undefined4 *)(param_1[0x2f] + iVar6));" (call_expression "(**(code **)(*param_1 + 0x34))(*param_1,*(undefined4 *)(param_1[0x2f] + iVar6))" (parenthesized_expression "(**(code **)(*param_1 + 0x34))" ( (pointer_expression "**(code **)(*param_1 + 0x34)" * (pointer_expression "*(code **)(*param_1 + 0x34)" * (cast_expression "(code **)(*param_1 + 0x34)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x34)" ( (binary_expression "*param_1 + 0x34" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(*param_1,*(undefined4 *)(param_1[0x2f] + iVar6))" ( (pointer_expression "*param_1" * identifier) , (pointer_expression "*(undefined4 *)(param_1[0x2f] + iVar6)" * (cast_expression "(undefined4 *)(param_1[0x2f] + iVar6)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[0x2f] + iVar6)" ( (binary_expression "param_1[0x2f] + iVar6" (subscript_expression "param_1[0x2f]" identifier [ number_literal ]) + identifier) )))) ))) ;) }) while (parenthesized_expression "(iVar3 < param_1[0x2e])" ( (binary_expression "iVar3 < param_1[0x2e]" identifier < (subscript_expression "param_1[0x2e]" identifier [ number_literal ])) )) ;) })) (if_statement "if (param_1[0x2f] != 0) {\n    FUN_000428d0();\n  }" if (parenthesized_expression "(param_1[0x2f] != 0)" ( (binary_expression "param_1[0x2f] != 0" (subscript_expression "param_1[0x2f]" identifier [ number_literal ]) != number_literal) )) (compound_statement "{\n    FUN_000428d0();\n  }" { (expression_statement "FUN_000428d0();" (call_expression "FUN_000428d0()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "param_1[0x17] = -0x4aca86d0;" (assignment_expression "param_1[0x17] = -0x4aca86d0" (subscript_expression "param_1[0x17]" identifier [ number_literal ]) = number_literal) ;) (if_statement "if (*(int *)(param_1[4] + 0x1c) != 0) {\n    FUN_000428d0();\n  }" if (parenthesized_expression "(*(int *)(param_1[4] + 0x1c) != 0)" ( (binary_expression "*(int *)(param_1[4] + 0x1c) != 0" (pointer_expression "*(int *)(param_1[4] + 0x1c)" * (cast_expression "(int *)(param_1[4] + 0x1c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[4] + 0x1c)" ( (binary_expression "param_1[4] + 0x1c" (subscript_expression "param_1[4]" identifier [ number_literal ]) + number_literal) )))) != number_literal) )) (compound_statement "{\n    FUN_000428d0();\n  }" { (expression_statement "FUN_000428d0();" (call_expression "FUN_000428d0()" identifier (argument_list "()" ( ))) ;) })) (if_statement "if (param_1[3] == 0) {\n    param_1[0x17] = -0x60c3d2cd;\n  }\n  else {\n    (*DAT_0017c444)(param_1[3]);\n    param_1[0x17] = -0x60c3d2cd;\n    if (param_1[3] != 0) {\n      (*DAT_0017c438)(param_1[3]);\n    }\n  }" if (parenthesized_expression "(param_1[3] == 0)" ( (binary_expression "param_1[3] == 0" (subscript_expression "param_1[3]" identifier [ number_literal ]) == number_literal) )) (compound_statement "{\n    param_1[0x17] = -0x60c3d2cd;\n  }" { (expression_statement "param_1[0x17] = -0x60c3d2cd;" (assignment_expression "param_1[0x17] = -0x60c3d2cd" (subscript_expression "param_1[0x17]" identifier [ number_literal ]) = number_literal) ;) }) (else_clause "else {\n    (*DAT_0017c444)(param_1[3]);\n    param_1[0x17] = -0x60c3d2cd;\n    if (param_1[3] != 0) {\n      (*DAT_0017c438)(param_1[3]);\n    }\n  }" else (compound_statement "{\n    (*DAT_0017c444)(param_1[3]);\n    param_1[0x17] = -0x60c3d2cd;\n    if (param_1[3] != 0) {\n      (*DAT_0017c438)(param_1[3]);\n    }\n  }" { (expression_statement "(*DAT_0017c444)(param_1[3]);" (call_expression "(*DAT_0017c444)(param_1[3])" (parenthesized_expression "(*DAT_0017c444)" ( (pointer_expression "*DAT_0017c444" * identifier) )) (argument_list "(param_1[3])" ( (subscript_expression "param_1[3]" identifier [ number_literal ]) ))) ;) (expression_statement "param_1[0x17] = -0x60c3d2cd;" (assignment_expression "param_1[0x17] = -0x60c3d2cd" (subscript_expression "param_1[0x17]" identifier [ number_literal ]) = number_literal) ;) (if_statement "if (param_1[3] != 0) {\n      (*DAT_0017c438)(param_1[3]);\n    }" if (parenthesized_expression "(param_1[3] != 0)" ( (binary_expression "param_1[3] != 0" (subscript_expression "param_1[3]" identifier [ number_literal ]) != number_literal) )) (compound_statement "{\n      (*DAT_0017c438)(param_1[3]);\n    }" { (expression_statement "(*DAT_0017c438)(param_1[3]);" (call_expression "(*DAT_0017c438)(param_1[3])" (parenthesized_expression "(*DAT_0017c438)" ( (pointer_expression "*DAT_0017c438" * identifier) )) (argument_list "(param_1[3])" ( (subscript_expression "param_1[3]" identifier [ number_literal ]) ))) ;) })) }))) (if_statement "if (*(char *)((int)param_1 + 0x11a) != '\0') {\n    FUN_00042800(param_1[0x4d]);\n  }" if (parenthesized_expression "(*(char *)((int)param_1 + 0x11a) != '\0')" ( (binary_expression "*(char *)((int)param_1 + 0x11a) != '\0'" (pointer_expression "*(char *)((int)param_1 + 0x11a)" * (cast_expression "(char *)((int)param_1 + 0x11a)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + 0x11a)" ( (binary_expression "(int)param_1 + 0x11a" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    FUN_00042800(param_1[0x4d]);\n  }" { (expression_statement "FUN_00042800(param_1[0x4d]);" (call_expression "FUN_00042800(param_1[0x4d])" identifier (argument_list "(param_1[0x4d])" ( (subscript_expression "param_1[0x4d]" identifier [ number_literal ]) ))) ;) })) (expression_statement "FUN_00042800(param_1);" (call_expression "FUN_00042800(param_1)" identifier (argument_list "(param_1)" ( identifier ))) ;) (return_statement "return;" return ;) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.cx replaced with injection: get_pc_thunk_cx */\n\nvoid __regparm3 sqlite3LeaveMutexAndCloseZombie(sqlite3 *db)\n\n{\n  void **ppvVar1;\n  Savepoint *p;\n  HashElem *pHVar2;\n  void *pvVar3;\n  Table *pTable;\n  Schema *p_00;\n  int iVar4;\n  sqlite3_value *v;\n  sqlite3 *psVar5;\n  undefined **tripCode;\n  Db *pDVar6;\n  sqlite3 *psVar7;\n  sqlite3 **ppsVar8;\n  void *pvVar9;\n  undefined4 *puVar10;\n  sqlite3 *in_stack_ffffffd4;\n  undefined **ppuVar11;\n  \n  tripCode = &_GLOBAL_OFFSET_TABLE_;\n  ppuVar11 = tripCode;\n  if (((db->magic != 0x64cffc7f) || (ppuVar11 = &_GLOBAL_OFFSET_TABLE_, db->pVdbe != (Vdbe *)0x0))\n     || (iVar4 = connectionIsBusy(db), ppuVar11 = tripCode, iVar4 != 0)) {\n    if (db->mutex != (sqlite3_mutex *)0x0) {\n      (*(code *)ppuVar11[0x187])(db->mutex);\n    }\n    return;\n  }\n  sqlite3RollbackAll(in_stack_ffffffd4,(int)tripCode);\n  p = db->pSavepoint;\n  while (p != (Savepoint *)0x0) {\n    db->pSavepoint = p->pNext;\n    sqlite3DbFreeNN(db,p);\n    p = db->pSavepoint;\n  }\n  pDVar6 = db->aDb;\n  db->isTransactionSavepoint = '\0';\n  iVar4 = 0;\n  db->nSavepoint = 0;\n  db->nStatement = 0;\n  if (0 < db->nDb) {\n    do {\n      if (pDVar6[iVar4].pBt != (Btree *)0x0) {\n        sqlite3BtreeClose((Btree *)in_stack_ffffffd4);\n        pDVar6[iVar4].pBt = (Btree *)0x0;\n        if (iVar4 != 1) {\n          pDVar6[iVar4].pSchema = (Schema *)0x0;\n        }\n        pDVar6 = db->aDb;\n      }\n      iVar4 = iVar4 + 1;\n    } while (iVar4 < db->nDb);\n  }\n  if (pDVar6[1].pSchema != (Schema *)0x0) {\n    sqlite3SchemaClear(pDVar6[1].pSchema);\n  }\n  sqlite3VtabUnlockList(db);\n  sqlite3CollapseDatabaseArray(db);\n  sqlite3ConnectionUnlocked(db);\n  enterMutex();\n  psVar5 = (sqlite3 *)tripCode[0x73a];\n  if (psVar5 != (sqlite3 *)0x0) {\n    if (db == psVar5) {\n      ppsVar8 = (sqlite3 **)(tripCode + 0x73a);\n      psVar5 = db;\n    }\n    else {\n      do {\n        psVar7 = psVar5;\n        psVar5 = psVar7->pNextBlocked;\n        if (psVar5 == (sqlite3 *)0x0) goto LAB_000a7acc;\n      } while (db != psVar5);\n      ppsVar8 = &psVar7->pNextBlocked;\n    }\n    *ppsVar8 = psVar5->pNextBlocked;\n  }\nLAB_000a7acc:\n  leaveMutex();\n  for (pHVar2 = (db->aFunc).first; pHVar2 != (HashElem *)0x0; pHVar2 = pHVar2->next) {\n    pvVar9 = pHVar2->data;\n    do {\n      functionDestroy(db,*(FuncDef **)((int)pvVar9 + 0x24));\n      pvVar3 = *(void **)((int)pvVar9 + 0xc);\n      sqlite3DbFreeNN(db,pvVar9);\n      pvVar9 = pvVar3;\n    } while (pvVar3 != (void *)0x0);\n  }\n  sqlite3HashClear(&db->aFunc);\n  for (pHVar2 = (db->aCollSeq).first; pHVar2 != (HashElem *)0x0; pHVar2 = pHVar2->next) {\n    pvVar9 = pHVar2->data;\n    puVar10 = (undefined4 *)((int)pvVar9 + 8);\n    do {\n      if ((code *)puVar10[2] != (code *)0x0) {\n        (*(code *)puVar10[2])(*puVar10);\n      }\n      puVar10 = puVar10 + 5;\n    } while ((undefined4 *)((int)pvVar9 + 0x44) != puVar10);\n    if (pvVar9 != (void *)0x0) {\n      sqlite3DbFreeNN(db,pvVar9);\n    }\n  }\n  sqlite3HashClear(&db->aCollSeq);\n  for (pHVar2 = (db->aModule).first; pHVar2 != (HashElem *)0x0; pHVar2 = pHVar2->next) {\n    pvVar9 = pHVar2->data;\n    if (*(code **)((int)pvVar9 + 0xc) != (code *)0x0) {\n      (**(code **)((int)pvVar9 + 0xc))(*(undefined4 *)((int)pvVar9 + 8));\n    }\n    pTable = *(Table **)((int)pvVar9 + 0x10);\n    if (pTable != (Table *)0x0) {\n      pTable->tabFlags = pTable->tabFlags | 2;\n      sqlite3DeleteTable(db,pTable);\n      *(undefined4 *)((int)pvVar9 + 0x10) = 0;\n    }\n    sqlite3DbFreeNN(db,pvVar9);\n  }\n  sqlite3HashClear(&db->aModule);\n  v = db->pErr;\n  db->errCode = 0;\n  if (v != (sqlite3_value *)0x0) {\n    sqlite3ErrorFinish(db,0);\n    v = db->pErr;\n  }\n  sqlite3ValueFree(v);\n  if (0 < db->nExtension) {\n    iVar4 = 0;\n    do {\n      ppvVar1 = db->aExtension + iVar4;\n      iVar4 = iVar4 + 1;\n      (*db->pVfs->xDlClose)(db->pVfs,*ppvVar1);\n    } while (iVar4 < db->nExtension);\n  }\n  if (db->aExtension != (void **)0x0) {\n    sqlite3DbFreeNN(db,db->aExtension);\n  }\n  db->magic = 0xb5357930;\n  p_00 = db->aDb[1].pSchema;\n  if (p_00 != (Schema *)0x0) {\n    sqlite3DbFreeNN(db,p_00);\n  }\n  if (db->mutex == (sqlite3_mutex *)0x0) {\n    db->magic = 0x9f3c2d33;\n  }\n  else {\n    (*(code *)tripCode[0x187])(db->mutex);\n    db->magic = 0x9f3c2d33;\n    if (db->mutex != (sqlite3_mutex *)0x0) {\n      (*(code *)tripCode[0x184])(db->mutex);\n    }\n  }\n  if ((db->lookaside).bMalloced != '\0') {\n    sqlite3_free((db->lookaside).pStart);\n  }\n  sqlite3_free(db);\n  return;\n}\n\n" comment (function_definition "void __regparm3 sqlite3LeaveMutexAndCloseZombie(sqlite3 *db)\n\n{\n  void **ppvVar1;\n  Savepoint *p;\n  HashElem *pHVar2;\n  void *pvVar3;\n  Table *pTable;\n  Schema *p_00;\n  int iVar4;\n  sqlite3_value *v;\n  sqlite3 *psVar5;\n  undefined **tripCode;\n  Db *pDVar6;\n  sqlite3 *psVar7;\n  sqlite3 **ppsVar8;\n  void *pvVar9;\n  undefined4 *puVar10;\n  sqlite3 *in_stack_ffffffd4;\n  undefined **ppuVar11;\n  \n  tripCode = &_GLOBAL_OFFSET_TABLE_;\n  ppuVar11 = tripCode;\n  if (((db->magic != 0x64cffc7f) || (ppuVar11 = &_GLOBAL_OFFSET_TABLE_, db->pVdbe != (Vdbe *)0x0))\n     || (iVar4 = connectionIsBusy(db), ppuVar11 = tripCode, iVar4 != 0)) {\n    if (db->mutex != (sqlite3_mutex *)0x0) {\n      (*(code *)ppuVar11[0x187])(db->mutex);\n    }\n    return;\n  }\n  sqlite3RollbackAll(in_stack_ffffffd4,(int)tripCode);\n  p = db->pSavepoint;\n  while (p != (Savepoint *)0x0) {\n    db->pSavepoint = p->pNext;\n    sqlite3DbFreeNN(db,p);\n    p = db->pSavepoint;\n  }\n  pDVar6 = db->aDb;\n  db->isTransactionSavepoint = '\0';\n  iVar4 = 0;\n  db->nSavepoint = 0;\n  db->nStatement = 0;\n  if (0 < db->nDb) {\n    do {\n      if (pDVar6[iVar4].pBt != (Btree *)0x0) {\n        sqlite3BtreeClose((Btree *)in_stack_ffffffd4);\n        pDVar6[iVar4].pBt = (Btree *)0x0;\n        if (iVar4 != 1) {\n          pDVar6[iVar4].pSchema = (Schema *)0x0;\n        }\n        pDVar6 = db->aDb;\n      }\n      iVar4 = iVar4 + 1;\n    } while (iVar4 < db->nDb);\n  }\n  if (pDVar6[1].pSchema != (Schema *)0x0) {\n    sqlite3SchemaClear(pDVar6[1].pSchema);\n  }\n  sqlite3VtabUnlockList(db);\n  sqlite3CollapseDatabaseArray(db);\n  sqlite3ConnectionUnlocked(db);\n  enterMutex();\n  psVar5 = (sqlite3 *)tripCode[0x73a];\n  if (psVar5 != (sqlite3 *)0x0) {\n    if (db == psVar5) {\n      ppsVar8 = (sqlite3 **)(tripCode + 0x73a);\n      psVar5 = db;\n    }\n    else {\n      do {\n        psVar7 = psVar5;\n        psVar5 = psVar7->pNextBlocked;\n        if (psVar5 == (sqlite3 *)0x0) goto LAB_000a7acc;\n      } while (db != psVar5);\n      ppsVar8 = &psVar7->pNextBlocked;\n    }\n    *ppsVar8 = psVar5->pNextBlocked;\n  }\nLAB_000a7acc:\n  leaveMutex();\n  for (pHVar2 = (db->aFunc).first; pHVar2 != (HashElem *)0x0; pHVar2 = pHVar2->next) {\n    pvVar9 = pHVar2->data;\n    do {\n      functionDestroy(db,*(FuncDef **)((int)pvVar9 + 0x24));\n      pvVar3 = *(void **)((int)pvVar9 + 0xc);\n      sqlite3DbFreeNN(db,pvVar9);\n      pvVar9 = pvVar3;\n    } while (pvVar3 != (void *)0x0);\n  }\n  sqlite3HashClear(&db->aFunc);\n  for (pHVar2 = (db->aCollSeq).first; pHVar2 != (HashElem *)0x0; pHVar2 = pHVar2->next) {\n    pvVar9 = pHVar2->data;\n    puVar10 = (undefined4 *)((int)pvVar9 + 8);\n    do {\n      if ((code *)puVar10[2] != (code *)0x0) {\n        (*(code *)puVar10[2])(*puVar10);\n      }\n      puVar10 = puVar10 + 5;\n    } while ((undefined4 *)((int)pvVar9 + 0x44) != puVar10);\n    if (pvVar9 != (void *)0x0) {\n      sqlite3DbFreeNN(db,pvVar9);\n    }\n  }\n  sqlite3HashClear(&db->aCollSeq);\n  for (pHVar2 = (db->aModule).first; pHVar2 != (HashElem *)0x0; pHVar2 = pHVar2->next) {\n    pvVar9 = pHVar2->data;\n    if (*(code **)((int)pvVar9 + 0xc) != (code *)0x0) {\n      (**(code **)((int)pvVar9 + 0xc))(*(undefined4 *)((int)pvVar9 + 8));\n    }\n    pTable = *(Table **)((int)pvVar9 + 0x10);\n    if (pTable != (Table *)0x0) {\n      pTable->tabFlags = pTable->tabFlags | 2;\n      sqlite3DeleteTable(db,pTable);\n      *(undefined4 *)((int)pvVar9 + 0x10) = 0;\n    }\n    sqlite3DbFreeNN(db,pvVar9);\n  }\n  sqlite3HashClear(&db->aModule);\n  v = db->pErr;\n  db->errCode = 0;\n  if (v != (sqlite3_value *)0x0) {\n    sqlite3ErrorFinish(db,0);\n    v = db->pErr;\n  }\n  sqlite3ValueFree(v);\n  if (0 < db->nExtension) {\n    iVar4 = 0;\n    do {\n      ppvVar1 = db->aExtension + iVar4;\n      iVar4 = iVar4 + 1;\n      (*db->pVfs->xDlClose)(db->pVfs,*ppvVar1);\n    } while (iVar4 < db->nExtension);\n  }\n  if (db->aExtension != (void **)0x0) {\n    sqlite3DbFreeNN(db,db->aExtension);\n  }\n  db->magic = 0xb5357930;\n  p_00 = db->aDb[1].pSchema;\n  if (p_00 != (Schema *)0x0) {\n    sqlite3DbFreeNN(db,p_00);\n  }\n  if (db->mutex == (sqlite3_mutex *)0x0) {\n    db->magic = 0x9f3c2d33;\n  }\n  else {\n    (*(code *)tripCode[0x187])(db->mutex);\n    db->magic = 0x9f3c2d33;\n    if (db->mutex != (sqlite3_mutex *)0x0) {\n      (*(code *)tripCode[0x184])(db->mutex);\n    }\n  }\n  if ((db->lookaside).bMalloced != '\0') {\n    sqlite3_free((db->lookaside).pStart);\n  }\n  sqlite3_free(db);\n  return;\n}" primitive_type (ERROR "__regparm3" identifier) (function_declarator "sqlite3LeaveMutexAndCloseZombie(sqlite3 *db)" identifier (parameter_list "(sqlite3 *db)" ( (parameter_declaration "sqlite3 *db" type_identifier (pointer_declarator "*db" * identifier)) ))) (compound_statement "{\n  void **ppvVar1;\n  Savepoint *p;\n  HashElem *pHVar2;\n  void *pvVar3;\n  Table *pTable;\n  Schema *p_00;\n  int iVar4;\n  sqlite3_value *v;\n  sqlite3 *psVar5;\n  undefined **tripCode;\n  Db *pDVar6;\n  sqlite3 *psVar7;\n  sqlite3 **ppsVar8;\n  void *pvVar9;\n  undefined4 *puVar10;\n  sqlite3 *in_stack_ffffffd4;\n  undefined **ppuVar11;\n  \n  tripCode = &_GLOBAL_OFFSET_TABLE_;\n  ppuVar11 = tripCode;\n  if (((db->magic != 0x64cffc7f) || (ppuVar11 = &_GLOBAL_OFFSET_TABLE_, db->pVdbe != (Vdbe *)0x0))\n     || (iVar4 = connectionIsBusy(db), ppuVar11 = tripCode, iVar4 != 0)) {\n    if (db->mutex != (sqlite3_mutex *)0x0) {\n      (*(code *)ppuVar11[0x187])(db->mutex);\n    }\n    return;\n  }\n  sqlite3RollbackAll(in_stack_ffffffd4,(int)tripCode);\n  p = db->pSavepoint;\n  while (p != (Savepoint *)0x0) {\n    db->pSavepoint = p->pNext;\n    sqlite3DbFreeNN(db,p);\n    p = db->pSavepoint;\n  }\n  pDVar6 = db->aDb;\n  db->isTransactionSavepoint = '\0';\n  iVar4 = 0;\n  db->nSavepoint = 0;\n  db->nStatement = 0;\n  if (0 < db->nDb) {\n    do {\n      if (pDVar6[iVar4].pBt != (Btree *)0x0) {\n        sqlite3BtreeClose((Btree *)in_stack_ffffffd4);\n        pDVar6[iVar4].pBt = (Btree *)0x0;\n        if (iVar4 != 1) {\n          pDVar6[iVar4].pSchema = (Schema *)0x0;\n        }\n        pDVar6 = db->aDb;\n      }\n      iVar4 = iVar4 + 1;\n    } while (iVar4 < db->nDb);\n  }\n  if (pDVar6[1].pSchema != (Schema *)0x0) {\n    sqlite3SchemaClear(pDVar6[1].pSchema);\n  }\n  sqlite3VtabUnlockList(db);\n  sqlite3CollapseDatabaseArray(db);\n  sqlite3ConnectionUnlocked(db);\n  enterMutex();\n  psVar5 = (sqlite3 *)tripCode[0x73a];\n  if (psVar5 != (sqlite3 *)0x0) {\n    if (db == psVar5) {\n      ppsVar8 = (sqlite3 **)(tripCode + 0x73a);\n      psVar5 = db;\n    }\n    else {\n      do {\n        psVar7 = psVar5;\n        psVar5 = psVar7->pNextBlocked;\n        if (psVar5 == (sqlite3 *)0x0) goto LAB_000a7acc;\n      } while (db != psVar5);\n      ppsVar8 = &psVar7->pNextBlocked;\n    }\n    *ppsVar8 = psVar5->pNextBlocked;\n  }\nLAB_000a7acc:\n  leaveMutex();\n  for (pHVar2 = (db->aFunc).first; pHVar2 != (HashElem *)0x0; pHVar2 = pHVar2->next) {\n    pvVar9 = pHVar2->data;\n    do {\n      functionDestroy(db,*(FuncDef **)((int)pvVar9 + 0x24));\n      pvVar3 = *(void **)((int)pvVar9 + 0xc);\n      sqlite3DbFreeNN(db,pvVar9);\n      pvVar9 = pvVar3;\n    } while (pvVar3 != (void *)0x0);\n  }\n  sqlite3HashClear(&db->aFunc);\n  for (pHVar2 = (db->aCollSeq).first; pHVar2 != (HashElem *)0x0; pHVar2 = pHVar2->next) {\n    pvVar9 = pHVar2->data;\n    puVar10 = (undefined4 *)((int)pvVar9 + 8);\n    do {\n      if ((code *)puVar10[2] != (code *)0x0) {\n        (*(code *)puVar10[2])(*puVar10);\n      }\n      puVar10 = puVar10 + 5;\n    } while ((undefined4 *)((int)pvVar9 + 0x44) != puVar10);\n    if (pvVar9 != (void *)0x0) {\n      sqlite3DbFreeNN(db,pvVar9);\n    }\n  }\n  sqlite3HashClear(&db->aCollSeq);\n  for (pHVar2 = (db->aModule).first; pHVar2 != (HashElem *)0x0; pHVar2 = pHVar2->next) {\n    pvVar9 = pHVar2->data;\n    if (*(code **)((int)pvVar9 + 0xc) != (code *)0x0) {\n      (**(code **)((int)pvVar9 + 0xc))(*(undefined4 *)((int)pvVar9 + 8));\n    }\n    pTable = *(Table **)((int)pvVar9 + 0x10);\n    if (pTable != (Table *)0x0) {\n      pTable->tabFlags = pTable->tabFlags | 2;\n      sqlite3DeleteTable(db,pTable);\n      *(undefined4 *)((int)pvVar9 + 0x10) = 0;\n    }\n    sqlite3DbFreeNN(db,pvVar9);\n  }\n  sqlite3HashClear(&db->aModule);\n  v = db->pErr;\n  db->errCode = 0;\n  if (v != (sqlite3_value *)0x0) {\n    sqlite3ErrorFinish(db,0);\n    v = db->pErr;\n  }\n  sqlite3ValueFree(v);\n  if (0 < db->nExtension) {\n    iVar4 = 0;\n    do {\n      ppvVar1 = db->aExtension + iVar4;\n      iVar4 = iVar4 + 1;\n      (*db->pVfs->xDlClose)(db->pVfs,*ppvVar1);\n    } while (iVar4 < db->nExtension);\n  }\n  if (db->aExtension != (void **)0x0) {\n    sqlite3DbFreeNN(db,db->aExtension);\n  }\n  db->magic = 0xb5357930;\n  p_00 = db->aDb[1].pSchema;\n  if (p_00 != (Schema *)0x0) {\n    sqlite3DbFreeNN(db,p_00);\n  }\n  if (db->mutex == (sqlite3_mutex *)0x0) {\n    db->magic = 0x9f3c2d33;\n  }\n  else {\n    (*(code *)tripCode[0x187])(db->mutex);\n    db->magic = 0x9f3c2d33;\n    if (db->mutex != (sqlite3_mutex *)0x0) {\n      (*(code *)tripCode[0x184])(db->mutex);\n    }\n  }\n  if ((db->lookaside).bMalloced != '\0') {\n    sqlite3_free((db->lookaside).pStart);\n  }\n  sqlite3_free(db);\n  return;\n}" { (declaration "void **ppvVar1;" primitive_type (pointer_declarator "**ppvVar1" * (pointer_declarator "*ppvVar1" * identifier)) ;) (declaration "Savepoint *p;" type_identifier (pointer_declarator "*p" * identifier) ;) (declaration "HashElem *pHVar2;" type_identifier (pointer_declarator "*pHVar2" * identifier) ;) (declaration "void *pvVar3;" primitive_type (pointer_declarator "*pvVar3" * identifier) ;) (declaration "Table *pTable;" type_identifier (pointer_declarator "*pTable" * identifier) ;) (declaration "Schema *p_00;" type_identifier (pointer_declarator "*p_00" * identifier) ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "sqlite3_value *v;" type_identifier (pointer_declarator "*v" * identifier) ;) (declaration "sqlite3 *psVar5;" type_identifier (pointer_declarator "*psVar5" * identifier) ;) (declaration "undefined **tripCode;" type_identifier (pointer_declarator "**tripCode" * (pointer_declarator "*tripCode" * identifier)) ;) (declaration "Db *pDVar6;" type_identifier (pointer_declarator "*pDVar6" * identifier) ;) (declaration "sqlite3 *psVar7;" type_identifier (pointer_declarator "*psVar7" * identifier) ;) (declaration "sqlite3 **ppsVar8;" type_identifier (pointer_declarator "**ppsVar8" * (pointer_declarator "*ppsVar8" * identifier)) ;) (declaration "void *pvVar9;" primitive_type (pointer_declarator "*pvVar9" * identifier) ;) (declaration "undefined4 *puVar10;" type_identifier (pointer_declarator "*puVar10" * identifier) ;) (declaration "sqlite3 *in_stack_ffffffd4;" type_identifier (pointer_declarator "*in_stack_ffffffd4" * identifier) ;) (declaration "undefined **ppuVar11;" type_identifier (pointer_declarator "**ppuVar11" * (pointer_declarator "*ppuVar11" * identifier)) ;) (expression_statement "tripCode = &_GLOBAL_OFFSET_TABLE_;" (assignment_expression "tripCode = &_GLOBAL_OFFSET_TABLE_" identifier = (pointer_expression "&_GLOBAL_OFFSET_TABLE_" & identifier)) ;) (expression_statement "ppuVar11 = tripCode;" (assignment_expression "ppuVar11 = tripCode" identifier = identifier) ;) (if_statement "if (((db->magic != 0x64cffc7f) || (ppuVar11 = &_GLOBAL_OFFSET_TABLE_, db->pVdbe != (Vdbe *)0x0))\n     || (iVar4 = connectionIsBusy(db), ppuVar11 = tripCode, iVar4 != 0)) {\n    if (db->mutex != (sqlite3_mutex *)0x0) {\n      (*(code *)ppuVar11[0x187])(db->mutex);\n    }\n    return;\n  }" if (parenthesized_expression "(((db->magic != 0x64cffc7f) || (ppuVar11 = &_GLOBAL_OFFSET_TABLE_, db->pVdbe != (Vdbe *)0x0))\n     || (iVar4 = connectionIsBusy(db), ppuVar11 = tripCode, iVar4 != 0))" ( (binary_expression "((db->magic != 0x64cffc7f) || (ppuVar11 = &_GLOBAL_OFFSET_TABLE_, db->pVdbe != (Vdbe *)0x0))\n     || (iVar4 = connectionIsBusy(db), ppuVar11 = tripCode, iVar4 != 0)" (parenthesized_expression "((db->magic != 0x64cffc7f) || (ppuVar11 = &_GLOBAL_OFFSET_TABLE_, db->pVdbe != (Vdbe *)0x0))" ( (binary_expression "(db->magic != 0x64cffc7f) || (ppuVar11 = &_GLOBAL_OFFSET_TABLE_, db->pVdbe != (Vdbe *)0x0)" (parenthesized_expression "(db->magic != 0x64cffc7f)" ( (binary_expression "db->magic != 0x64cffc7f" (field_expression "db->magic" identifier -> field_identifier) != number_literal) )) || (parenthesized_expression "(ppuVar11 = &_GLOBAL_OFFSET_TABLE_, db->pVdbe != (Vdbe *)0x0)" ( (comma_expression "ppuVar11 = &_GLOBAL_OFFSET_TABLE_, db->pVdbe != (Vdbe *)0x0" (assignment_expression "ppuVar11 = &_GLOBAL_OFFSET_TABLE_" identifier = (pointer_expression "&_GLOBAL_OFFSET_TABLE_" & identifier)) , (binary_expression "db->pVdbe != (Vdbe *)0x0" (field_expression "db->pVdbe" identifier -> field_identifier) != (cast_expression "(Vdbe *)0x0" ( (type_descriptor "Vdbe *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal))) ))) )) || (parenthesized_expression "(iVar4 = connectionIsBusy(db), ppuVar11 = tripCode, iVar4 != 0)" ( (comma_expression "iVar4 = connectionIsBusy(db), ppuVar11 = tripCode, iVar4 != 0" (assignment_expression "iVar4 = connectionIsBusy(db)" identifier = (call_expression "connectionIsBusy(db)" identifier (argument_list "(db)" ( identifier )))) , (comma_expression "ppuVar11 = tripCode, iVar4 != 0" (assignment_expression "ppuVar11 = tripCode" identifier = identifier) , (binary_expression "iVar4 != 0" identifier != number_literal))) ))) )) (compound_statement "{\n    if (db->mutex != (sqlite3_mutex *)0x0) {\n      (*(code *)ppuVar11[0x187])(db->mutex);\n    }\n    return;\n  }" { (if_statement "if (db->mutex != (sqlite3_mutex *)0x0) {\n      (*(code *)ppuVar11[0x187])(db->mutex);\n    }" if (parenthesized_expression "(db->mutex != (sqlite3_mutex *)0x0)" ( (binary_expression "db->mutex != (sqlite3_mutex *)0x0" (field_expression "db->mutex" identifier -> field_identifier) != (cast_expression "(sqlite3_mutex *)0x0" ( (type_descriptor "sqlite3_mutex *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      (*(code *)ppuVar11[0x187])(db->mutex);\n    }" { (expression_statement "(*(code *)ppuVar11[0x187])(db->mutex);" (call_expression "(*(code *)ppuVar11[0x187])(db->mutex)" (parenthesized_expression "(*(code *)ppuVar11[0x187])" ( (pointer_expression "*(code *)ppuVar11[0x187]" * (cast_expression "(code *)ppuVar11[0x187]" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "ppuVar11[0x187]" identifier [ number_literal ]))) )) (argument_list "(db->mutex)" ( (field_expression "db->mutex" identifier -> field_identifier) ))) ;) })) (return_statement "return;" return ;) })) (expression_statement "sqlite3RollbackAll(in_stack_ffffffd4,(int)tripCode);" (call_expression "sqlite3RollbackAll(in_stack_ffffffd4,(int)tripCode)" identifier (argument_list "(in_stack_ffffffd4,(int)tripCode)" ( identifier , (cast_expression "(int)tripCode" ( (type_descriptor "int" primitive_type) ) identifier) ))) ;) (expression_statement "p = db->pSavepoint;" (assignment_expression "p = db->pSavepoint" identifier = (field_expression "db->pSavepoint" identifier -> field_identifier)) ;) (while_statement "while (p != (Savepoint *)0x0) {\n    db->pSavepoint = p->pNext;\n    sqlite3DbFreeNN(db,p);\n    p = db->pSavepoint;\n  }" while (parenthesized_expression "(p != (Savepoint *)0x0)" ( (binary_expression "p != (Savepoint *)0x0" identifier != (cast_expression "(Savepoint *)0x0" ( (type_descriptor "Savepoint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    db->pSavepoint = p->pNext;\n    sqlite3DbFreeNN(db,p);\n    p = db->pSavepoint;\n  }" { (expression_statement "db->pSavepoint = p->pNext;" (assignment_expression "db->pSavepoint = p->pNext" (field_expression "db->pSavepoint" identifier -> field_identifier) = (field_expression "p->pNext" identifier -> field_identifier)) ;) (expression_statement "sqlite3DbFreeNN(db,p);" (call_expression "sqlite3DbFreeNN(db,p)" identifier (argument_list "(db,p)" ( identifier , identifier ))) ;) (expression_statement "p = db->pSavepoint;" (assignment_expression "p = db->pSavepoint" identifier = (field_expression "db->pSavepoint" identifier -> field_identifier)) ;) })) (expression_statement "pDVar6 = db->aDb;" (assignment_expression "pDVar6 = db->aDb" identifier = (field_expression "db->aDb" identifier -> field_identifier)) ;) (expression_statement "db->isTransactionSavepoint = '\0';" (assignment_expression "db->isTransactionSavepoint = '\0'" (field_expression "db->isTransactionSavepoint" identifier -> field_identifier) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "iVar4 = 0;" (assignment_expression "iVar4 = 0" identifier = number_literal) ;) (expression_statement "db->nSavepoint = 0;" (assignment_expression "db->nSavepoint = 0" (field_expression "db->nSavepoint" identifier -> field_identifier) = number_literal) ;) (expression_statement "db->nStatement = 0;" (assignment_expression "db->nStatement = 0" (field_expression "db->nStatement" identifier -> field_identifier) = number_literal) ;) (if_statement "if (0 < db->nDb) {\n    do {\n      if (pDVar6[iVar4].pBt != (Btree *)0x0) {\n        sqlite3BtreeClose((Btree *)in_stack_ffffffd4);\n        pDVar6[iVar4].pBt = (Btree *)0x0;\n        if (iVar4 != 1) {\n          pDVar6[iVar4].pSchema = (Schema *)0x0;\n        }\n        pDVar6 = db->aDb;\n      }\n      iVar4 = iVar4 + 1;\n    } while (iVar4 < db->nDb);\n  }" if (parenthesized_expression "(0 < db->nDb)" ( (binary_expression "0 < db->nDb" number_literal < (field_expression "db->nDb" identifier -> field_identifier)) )) (compound_statement "{\n    do {\n      if (pDVar6[iVar4].pBt != (Btree *)0x0) {\n        sqlite3BtreeClose((Btree *)in_stack_ffffffd4);\n        pDVar6[iVar4].pBt = (Btree *)0x0;\n        if (iVar4 != 1) {\n          pDVar6[iVar4].pSchema = (Schema *)0x0;\n        }\n        pDVar6 = db->aDb;\n      }\n      iVar4 = iVar4 + 1;\n    } while (iVar4 < db->nDb);\n  }" { (do_statement "do {\n      if (pDVar6[iVar4].pBt != (Btree *)0x0) {\n        sqlite3BtreeClose((Btree *)in_stack_ffffffd4);\n        pDVar6[iVar4].pBt = (Btree *)0x0;\n        if (iVar4 != 1) {\n          pDVar6[iVar4].pSchema = (Schema *)0x0;\n        }\n        pDVar6 = db->aDb;\n      }\n      iVar4 = iVar4 + 1;\n    } while (iVar4 < db->nDb);" do (compound_statement "{\n      if (pDVar6[iVar4].pBt != (Btree *)0x0) {\n        sqlite3BtreeClose((Btree *)in_stack_ffffffd4);\n        pDVar6[iVar4].pBt = (Btree *)0x0;\n        if (iVar4 != 1) {\n          pDVar6[iVar4].pSchema = (Schema *)0x0;\n        }\n        pDVar6 = db->aDb;\n      }\n      iVar4 = iVar4 + 1;\n    }" { (if_statement "if (pDVar6[iVar4].pBt != (Btree *)0x0) {\n        sqlite3BtreeClose((Btree *)in_stack_ffffffd4);\n        pDVar6[iVar4].pBt = (Btree *)0x0;\n        if (iVar4 != 1) {\n          pDVar6[iVar4].pSchema = (Schema *)0x0;\n        }\n        pDVar6 = db->aDb;\n      }" if (parenthesized_expression "(pDVar6[iVar4].pBt != (Btree *)0x0)" ( (binary_expression "pDVar6[iVar4].pBt != (Btree *)0x0" (field_expression "pDVar6[iVar4].pBt" (subscript_expression "pDVar6[iVar4]" identifier [ identifier ]) . field_identifier) != (cast_expression "(Btree *)0x0" ( (type_descriptor "Btree *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        sqlite3BtreeClose((Btree *)in_stack_ffffffd4);\n        pDVar6[iVar4].pBt = (Btree *)0x0;\n        if (iVar4 != 1) {\n          pDVar6[iVar4].pSchema = (Schema *)0x0;\n        }\n        pDVar6 = db->aDb;\n      }" { (expression_statement "sqlite3BtreeClose((Btree *)in_stack_ffffffd4);" (call_expression "sqlite3BtreeClose((Btree *)in_stack_ffffffd4)" identifier (argument_list "((Btree *)in_stack_ffffffd4)" ( (cast_expression "(Btree *)in_stack_ffffffd4" ( (type_descriptor "Btree *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) ))) ;) (expression_statement "pDVar6[iVar4].pBt = (Btree *)0x0;" (assignment_expression "pDVar6[iVar4].pBt = (Btree *)0x0" (field_expression "pDVar6[iVar4].pBt" (subscript_expression "pDVar6[iVar4]" identifier [ identifier ]) . field_identifier) = (cast_expression "(Btree *)0x0" ( (type_descriptor "Btree *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (if_statement "if (iVar4 != 1) {\n          pDVar6[iVar4].pSchema = (Schema *)0x0;\n        }" if (parenthesized_expression "(iVar4 != 1)" ( (binary_expression "iVar4 != 1" identifier != number_literal) )) (compound_statement "{\n          pDVar6[iVar4].pSchema = (Schema *)0x0;\n        }" { (expression_statement "pDVar6[iVar4].pSchema = (Schema *)0x0;" (assignment_expression "pDVar6[iVar4].pSchema = (Schema *)0x0" (field_expression "pDVar6[iVar4].pSchema" (subscript_expression "pDVar6[iVar4]" identifier [ identifier ]) . field_identifier) = (cast_expression "(Schema *)0x0" ( (type_descriptor "Schema *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) })) (expression_statement "pDVar6 = db->aDb;" (assignment_expression "pDVar6 = db->aDb" identifier = (field_expression "db->aDb" identifier -> field_identifier)) ;) })) (expression_statement "iVar4 = iVar4 + 1;" (assignment_expression "iVar4 = iVar4 + 1" identifier = (binary_expression "iVar4 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar4 < db->nDb)" ( (binary_expression "iVar4 < db->nDb" identifier < (field_expression "db->nDb" identifier -> field_identifier)) )) ;) })) (if_statement "if (pDVar6[1].pSchema != (Schema *)0x0) {\n    sqlite3SchemaClear(pDVar6[1].pSchema);\n  }" if (parenthesized_expression "(pDVar6[1].pSchema != (Schema *)0x0)" ( (binary_expression "pDVar6[1].pSchema != (Schema *)0x0" (field_expression "pDVar6[1].pSchema" (subscript_expression "pDVar6[1]" identifier [ number_literal ]) . field_identifier) != (cast_expression "(Schema *)0x0" ( (type_descriptor "Schema *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    sqlite3SchemaClear(pDVar6[1].pSchema);\n  }" { (expression_statement "sqlite3SchemaClear(pDVar6[1].pSchema);" (call_expression "sqlite3SchemaClear(pDVar6[1].pSchema)" identifier (argument_list "(pDVar6[1].pSchema)" ( (field_expression "pDVar6[1].pSchema" (subscript_expression "pDVar6[1]" identifier [ number_literal ]) . field_identifier) ))) ;) })) (expression_statement "sqlite3VtabUnlockList(db);" (call_expression "sqlite3VtabUnlockList(db)" identifier (argument_list "(db)" ( identifier ))) ;) (expression_statement "sqlite3CollapseDatabaseArray(db);" (call_expression "sqlite3CollapseDatabaseArray(db)" identifier (argument_list "(db)" ( identifier ))) ;) (expression_statement "sqlite3ConnectionUnlocked(db);" (call_expression "sqlite3ConnectionUnlocked(db)" identifier (argument_list "(db)" ( identifier ))) ;) (expression_statement "enterMutex();" (call_expression "enterMutex()" identifier (argument_list "()" ( ))) ;) (expression_statement "psVar5 = (sqlite3 *)tripCode[0x73a];" (assignment_expression "psVar5 = (sqlite3 *)tripCode[0x73a]" identifier = (cast_expression "(sqlite3 *)tripCode[0x73a]" ( (type_descriptor "sqlite3 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "tripCode[0x73a]" identifier [ number_literal ]))) ;) (if_statement "if (psVar5 != (sqlite3 *)0x0) {\n    if (db == psVar5) {\n      ppsVar8 = (sqlite3 **)(tripCode + 0x73a);\n      psVar5 = db;\n    }\n    else {\n      do {\n        psVar7 = psVar5;\n        psVar5 = psVar7->pNextBlocked;\n        if (psVar5 == (sqlite3 *)0x0) goto LAB_000a7acc;\n      } while (db != psVar5);\n      ppsVar8 = &psVar7->pNextBlocked;\n    }\n    *ppsVar8 = psVar5->pNextBlocked;\n  }" if (parenthesized_expression "(psVar5 != (sqlite3 *)0x0)" ( (binary_expression "psVar5 != (sqlite3 *)0x0" identifier != (cast_expression "(sqlite3 *)0x0" ( (type_descriptor "sqlite3 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    if (db == psVar5) {\n      ppsVar8 = (sqlite3 **)(tripCode + 0x73a);\n      psVar5 = db;\n    }\n    else {\n      do {\n        psVar7 = psVar5;\n        psVar5 = psVar7->pNextBlocked;\n        if (psVar5 == (sqlite3 *)0x0) goto LAB_000a7acc;\n      } while (db != psVar5);\n      ppsVar8 = &psVar7->pNextBlocked;\n    }\n    *ppsVar8 = psVar5->pNextBlocked;\n  }" { (if_statement "if (db == psVar5) {\n      ppsVar8 = (sqlite3 **)(tripCode + 0x73a);\n      psVar5 = db;\n    }\n    else {\n      do {\n        psVar7 = psVar5;\n        psVar5 = psVar7->pNextBlocked;\n        if (psVar5 == (sqlite3 *)0x0) goto LAB_000a7acc;\n      } while (db != psVar5);\n      ppsVar8 = &psVar7->pNextBlocked;\n    }" if (parenthesized_expression "(db == psVar5)" ( (binary_expression "db == psVar5" identifier == identifier) )) (compound_statement "{\n      ppsVar8 = (sqlite3 **)(tripCode + 0x73a);\n      psVar5 = db;\n    }" { (expression_statement "ppsVar8 = (sqlite3 **)(tripCode + 0x73a);" (assignment_expression "ppsVar8 = (sqlite3 **)(tripCode + 0x73a)" identifier = (cast_expression "(sqlite3 **)(tripCode + 0x73a)" ( (type_descriptor "sqlite3 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(tripCode + 0x73a)" ( (binary_expression "tripCode + 0x73a" identifier + number_literal) )))) ;) (expression_statement "psVar5 = db;" (assignment_expression "psVar5 = db" identifier = identifier) ;) }) (else_clause "else {\n      do {\n        psVar7 = psVar5;\n        psVar5 = psVar7->pNextBlocked;\n        if (psVar5 == (sqlite3 *)0x0) goto LAB_000a7acc;\n      } while (db != psVar5);\n      ppsVar8 = &psVar7->pNextBlocked;\n    }" else (compound_statement "{\n      do {\n        psVar7 = psVar5;\n        psVar5 = psVar7->pNextBlocked;\n        if (psVar5 == (sqlite3 *)0x0) goto LAB_000a7acc;\n      } while (db != psVar5);\n      ppsVar8 = &psVar7->pNextBlocked;\n    }" { (do_statement "do {\n        psVar7 = psVar5;\n        psVar5 = psVar7->pNextBlocked;\n        if (psVar5 == (sqlite3 *)0x0) goto LAB_000a7acc;\n      } while (db != psVar5);" do (compound_statement "{\n        psVar7 = psVar5;\n        psVar5 = psVar7->pNextBlocked;\n        if (psVar5 == (sqlite3 *)0x0) goto LAB_000a7acc;\n      }" { (expression_statement "psVar7 = psVar5;" (assignment_expression "psVar7 = psVar5" identifier = identifier) ;) (expression_statement "psVar5 = psVar7->pNextBlocked;" (assignment_expression "psVar5 = psVar7->pNextBlocked" identifier = (field_expression "psVar7->pNextBlocked" identifier -> field_identifier)) ;) (if_statement "if (psVar5 == (sqlite3 *)0x0) goto LAB_000a7acc;" if (parenthesized_expression "(psVar5 == (sqlite3 *)0x0)" ( (binary_expression "psVar5 == (sqlite3 *)0x0" identifier == (cast_expression "(sqlite3 *)0x0" ( (type_descriptor "sqlite3 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_000a7acc;" goto statement_identifier ;)) }) while (parenthesized_expression "(db != psVar5)" ( (binary_expression "db != psVar5" identifier != identifier) )) ;) (expression_statement "ppsVar8 = &psVar7->pNextBlocked;" (assignment_expression "ppsVar8 = &psVar7->pNextBlocked" identifier = (pointer_expression "&psVar7->pNextBlocked" & (field_expression "psVar7->pNextBlocked" identifier -> field_identifier))) ;) }))) (expression_statement "*ppsVar8 = psVar5->pNextBlocked;" (assignment_expression "*ppsVar8 = psVar5->pNextBlocked" (pointer_expression "*ppsVar8" * identifier) = (field_expression "psVar5->pNextBlocked" identifier -> field_identifier)) ;) })) (labeled_statement "LAB_000a7acc:\n  leaveMutex();" statement_identifier : (expression_statement "leaveMutex();" (call_expression "leaveMutex()" identifier (argument_list "()" ( ))) ;)) (for_statement "for (pHVar2 = (db->aFunc).first; pHVar2 != (HashElem *)0x0; pHVar2 = pHVar2->next) {\n    pvVar9 = pHVar2->data;\n    do {\n      functionDestroy(db,*(FuncDef **)((int)pvVar9 + 0x24));\n      pvVar3 = *(void **)((int)pvVar9 + 0xc);\n      sqlite3DbFreeNN(db,pvVar9);\n      pvVar9 = pvVar3;\n    } while (pvVar3 != (void *)0x0);\n  }" for ( (assignment_expression "pHVar2 = (db->aFunc).first" identifier = (field_expression "(db->aFunc).first" (parenthesized_expression "(db->aFunc)" ( (field_expression "db->aFunc" identifier -> field_identifier) )) . field_identifier)) ; (binary_expression "pHVar2 != (HashElem *)0x0" identifier != (cast_expression "(HashElem *)0x0" ( (type_descriptor "HashElem *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ; (assignment_expression "pHVar2 = pHVar2->next" identifier = (field_expression "pHVar2->next" identifier -> field_identifier)) ) (compound_statement "{\n    pvVar9 = pHVar2->data;\n    do {\n      functionDestroy(db,*(FuncDef **)((int)pvVar9 + 0x24));\n      pvVar3 = *(void **)((int)pvVar9 + 0xc);\n      sqlite3DbFreeNN(db,pvVar9);\n      pvVar9 = pvVar3;\n    } while (pvVar3 != (void *)0x0);\n  }" { (expression_statement "pvVar9 = pHVar2->data;" (assignment_expression "pvVar9 = pHVar2->data" identifier = (field_expression "pHVar2->data" identifier -> field_identifier)) ;) (do_statement "do {\n      functionDestroy(db,*(FuncDef **)((int)pvVar9 + 0x24));\n      pvVar3 = *(void **)((int)pvVar9 + 0xc);\n      sqlite3DbFreeNN(db,pvVar9);\n      pvVar9 = pvVar3;\n    } while (pvVar3 != (void *)0x0);" do (compound_statement "{\n      functionDestroy(db,*(FuncDef **)((int)pvVar9 + 0x24));\n      pvVar3 = *(void **)((int)pvVar9 + 0xc);\n      sqlite3DbFreeNN(db,pvVar9);\n      pvVar9 = pvVar3;\n    }" { (expression_statement "functionDestroy(db,*(FuncDef **)((int)pvVar9 + 0x24));" (call_expression "functionDestroy(db,*(FuncDef **)((int)pvVar9 + 0x24))" identifier (argument_list "(db,*(FuncDef **)((int)pvVar9 + 0x24))" ( identifier , (pointer_expression "*(FuncDef **)((int)pvVar9 + 0x24)" * (cast_expression "(FuncDef **)((int)pvVar9 + 0x24)" ( (type_descriptor "FuncDef **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "((int)pvVar9 + 0x24)" ( (binary_expression "(int)pvVar9 + 0x24" (cast_expression "(int)pvVar9" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) ))) ;) (expression_statement "pvVar3 = *(void **)((int)pvVar9 + 0xc);" (assignment_expression "pvVar3 = *(void **)((int)pvVar9 + 0xc)" identifier = (pointer_expression "*(void **)((int)pvVar9 + 0xc)" * (cast_expression "(void **)((int)pvVar9 + 0xc)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "((int)pvVar9 + 0xc)" ( (binary_expression "(int)pvVar9 + 0xc" (cast_expression "(int)pvVar9" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) ))))) ;) (expression_statement "sqlite3DbFreeNN(db,pvVar9);" (call_expression "sqlite3DbFreeNN(db,pvVar9)" identifier (argument_list "(db,pvVar9)" ( identifier , identifier ))) ;) (expression_statement "pvVar9 = pvVar3;" (assignment_expression "pvVar9 = pvVar3" identifier = identifier) ;) }) while (parenthesized_expression "(pvVar3 != (void *)0x0)" ( (binary_expression "pvVar3 != (void *)0x0" identifier != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) ;) })) (expression_statement "sqlite3HashClear(&db->aFunc);" (call_expression "sqlite3HashClear(&db->aFunc)" identifier (argument_list "(&db->aFunc)" ( (pointer_expression "&db->aFunc" & (field_expression "db->aFunc" identifier -> field_identifier)) ))) ;) (for_statement "for (pHVar2 = (db->aCollSeq).first; pHVar2 != (HashElem *)0x0; pHVar2 = pHVar2->next) {\n    pvVar9 = pHVar2->data;\n    puVar10 = (undefined4 *)((int)pvVar9 + 8);\n    do {\n      if ((code *)puVar10[2] != (code *)0x0) {\n        (*(code *)puVar10[2])(*puVar10);\n      }\n      puVar10 = puVar10 + 5;\n    } while ((undefined4 *)((int)pvVar9 + 0x44) != puVar10);\n    if (pvVar9 != (void *)0x0) {\n      sqlite3DbFreeNN(db,pvVar9);\n    }\n  }" for ( (assignment_expression "pHVar2 = (db->aCollSeq).first" identifier = (field_expression "(db->aCollSeq).first" (parenthesized_expression "(db->aCollSeq)" ( (field_expression "db->aCollSeq" identifier -> field_identifier) )) . field_identifier)) ; (binary_expression "pHVar2 != (HashElem *)0x0" identifier != (cast_expression "(HashElem *)0x0" ( (type_descriptor "HashElem *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ; (assignment_expression "pHVar2 = pHVar2->next" identifier = (field_expression "pHVar2->next" identifier -> field_identifier)) ) (compound_statement "{\n    pvVar9 = pHVar2->data;\n    puVar10 = (undefined4 *)((int)pvVar9 + 8);\n    do {\n      if ((code *)puVar10[2] != (code *)0x0) {\n        (*(code *)puVar10[2])(*puVar10);\n      }\n      puVar10 = puVar10 + 5;\n    } while ((undefined4 *)((int)pvVar9 + 0x44) != puVar10);\n    if (pvVar9 != (void *)0x0) {\n      sqlite3DbFreeNN(db,pvVar9);\n    }\n  }" { (expression_statement "pvVar9 = pHVar2->data;" (assignment_expression "pvVar9 = pHVar2->data" identifier = (field_expression "pHVar2->data" identifier -> field_identifier)) ;) (expression_statement "puVar10 = (undefined4 *)((int)pvVar9 + 8);" (assignment_expression "puVar10 = (undefined4 *)((int)pvVar9 + 8)" identifier = (cast_expression "(undefined4 *)((int)pvVar9 + 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pvVar9 + 8)" ( (binary_expression "(int)pvVar9 + 8" (cast_expression "(int)pvVar9" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) ;) (do_statement "do {\n      if ((code *)puVar10[2] != (code *)0x0) {\n        (*(code *)puVar10[2])(*puVar10);\n      }\n      puVar10 = puVar10 + 5;\n    } while ((undefined4 *)((int)pvVar9 + 0x44) != puVar10);" do (compound_statement "{\n      if ((code *)puVar10[2] != (code *)0x0) {\n        (*(code *)puVar10[2])(*puVar10);\n      }\n      puVar10 = puVar10 + 5;\n    }" { (if_statement "if ((code *)puVar10[2] != (code *)0x0) {\n        (*(code *)puVar10[2])(*puVar10);\n      }" if (parenthesized_expression "((code *)puVar10[2] != (code *)0x0)" ( (binary_expression "(code *)puVar10[2] != (code *)0x0" (cast_expression "(code *)puVar10[2]" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "puVar10[2]" identifier [ number_literal ])) != (cast_expression "(code *)0x0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        (*(code *)puVar10[2])(*puVar10);\n      }" { (expression_statement "(*(code *)puVar10[2])(*puVar10);" (call_expression "(*(code *)puVar10[2])(*puVar10)" (parenthesized_expression "(*(code *)puVar10[2])" ( (pointer_expression "*(code *)puVar10[2]" * (cast_expression "(code *)puVar10[2]" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "puVar10[2]" identifier [ number_literal ]))) )) (argument_list "(*puVar10)" ( (pointer_expression "*puVar10" * identifier) ))) ;) })) (expression_statement "puVar10 = puVar10 + 5;" (assignment_expression "puVar10 = puVar10 + 5" identifier = (binary_expression "puVar10 + 5" identifier + number_literal)) ;) }) while (parenthesized_expression "((undefined4 *)((int)pvVar9 + 0x44) != puVar10)" ( (binary_expression "(undefined4 *)((int)pvVar9 + 0x44) != puVar10" (cast_expression "(undefined4 *)((int)pvVar9 + 0x44)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pvVar9 + 0x44)" ( (binary_expression "(int)pvVar9 + 0x44" (cast_expression "(int)pvVar9" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) ))) != identifier) )) ;) (if_statement "if (pvVar9 != (void *)0x0) {\n      sqlite3DbFreeNN(db,pvVar9);\n    }" if (parenthesized_expression "(pvVar9 != (void *)0x0)" ( (binary_expression "pvVar9 != (void *)0x0" identifier != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      sqlite3DbFreeNN(db,pvVar9);\n    }" { (expression_statement "sqlite3DbFreeNN(db,pvVar9);" (call_expression "sqlite3DbFreeNN(db,pvVar9)" identifier (argument_list "(db,pvVar9)" ( identifier , identifier ))) ;) })) })) (expression_statement "sqlite3HashClear(&db->aCollSeq);" (call_expression "sqlite3HashClear(&db->aCollSeq)" identifier (argument_list "(&db->aCollSeq)" ( (pointer_expression "&db->aCollSeq" & (field_expression "db->aCollSeq" identifier -> field_identifier)) ))) ;) (for_statement "for (pHVar2 = (db->aModule).first; pHVar2 != (HashElem *)0x0; pHVar2 = pHVar2->next) {\n    pvVar9 = pHVar2->data;\n    if (*(code **)((int)pvVar9 + 0xc) != (code *)0x0) {\n      (**(code **)((int)pvVar9 + 0xc))(*(undefined4 *)((int)pvVar9 + 8));\n    }\n    pTable = *(Table **)((int)pvVar9 + 0x10);\n    if (pTable != (Table *)0x0) {\n      pTable->tabFlags = pTable->tabFlags | 2;\n      sqlite3DeleteTable(db,pTable);\n      *(undefined4 *)((int)pvVar9 + 0x10) = 0;\n    }\n    sqlite3DbFreeNN(db,pvVar9);\n  }" for ( (assignment_expression "pHVar2 = (db->aModule).first" identifier = (field_expression "(db->aModule).first" (parenthesized_expression "(db->aModule)" ( (field_expression "db->aModule" identifier -> field_identifier) )) . field_identifier)) ; (binary_expression "pHVar2 != (HashElem *)0x0" identifier != (cast_expression "(HashElem *)0x0" ( (type_descriptor "HashElem *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ; (assignment_expression "pHVar2 = pHVar2->next" identifier = (field_expression "pHVar2->next" identifier -> field_identifier)) ) (compound_statement "{\n    pvVar9 = pHVar2->data;\n    if (*(code **)((int)pvVar9 + 0xc) != (code *)0x0) {\n      (**(code **)((int)pvVar9 + 0xc))(*(undefined4 *)((int)pvVar9 + 8));\n    }\n    pTable = *(Table **)((int)pvVar9 + 0x10);\n    if (pTable != (Table *)0x0) {\n      pTable->tabFlags = pTable->tabFlags | 2;\n      sqlite3DeleteTable(db,pTable);\n      *(undefined4 *)((int)pvVar9 + 0x10) = 0;\n    }\n    sqlite3DbFreeNN(db,pvVar9);\n  }" { (expression_statement "pvVar9 = pHVar2->data;" (assignment_expression "pvVar9 = pHVar2->data" identifier = (field_expression "pHVar2->data" identifier -> field_identifier)) ;) (if_statement "if (*(code **)((int)pvVar9 + 0xc) != (code *)0x0) {\n      (**(code **)((int)pvVar9 + 0xc))(*(undefined4 *)((int)pvVar9 + 8));\n    }" if (parenthesized_expression "(*(code **)((int)pvVar9 + 0xc) != (code *)0x0)" ( (binary_expression "*(code **)((int)pvVar9 + 0xc) != (code *)0x0" (pointer_expression "*(code **)((int)pvVar9 + 0xc)" * (cast_expression "(code **)((int)pvVar9 + 0xc)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "((int)pvVar9 + 0xc)" ( (binary_expression "(int)pvVar9 + 0xc" (cast_expression "(int)pvVar9" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) != (cast_expression "(code *)0x0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      (**(code **)((int)pvVar9 + 0xc))(*(undefined4 *)((int)pvVar9 + 8));\n    }" { (expression_statement "(**(code **)((int)pvVar9 + 0xc))(*(undefined4 *)((int)pvVar9 + 8));" (call_expression "(**(code **)((int)pvVar9 + 0xc))(*(undefined4 *)((int)pvVar9 + 8))" (parenthesized_expression "(**(code **)((int)pvVar9 + 0xc))" ( (pointer_expression "**(code **)((int)pvVar9 + 0xc)" * (pointer_expression "*(code **)((int)pvVar9 + 0xc)" * (cast_expression "(code **)((int)pvVar9 + 0xc)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "((int)pvVar9 + 0xc)" ( (binary_expression "(int)pvVar9 + 0xc" (cast_expression "(int)pvVar9" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) ))))) )) (argument_list "(*(undefined4 *)((int)pvVar9 + 8))" ( (pointer_expression "*(undefined4 *)((int)pvVar9 + 8)" * (cast_expression "(undefined4 *)((int)pvVar9 + 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pvVar9 + 8)" ( (binary_expression "(int)pvVar9 + 8" (cast_expression "(int)pvVar9" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) ))) ;) })) (expression_statement "pTable = *(Table **)((int)pvVar9 + 0x10);" (assignment_expression "pTable = *(Table **)((int)pvVar9 + 0x10)" identifier = (pointer_expression "*(Table **)((int)pvVar9 + 0x10)" * (cast_expression "(Table **)((int)pvVar9 + 0x10)" ( (type_descriptor "Table **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "((int)pvVar9 + 0x10)" ( (binary_expression "(int)pvVar9 + 0x10" (cast_expression "(int)pvVar9" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) ))))) ;) (if_statement "if (pTable != (Table *)0x0) {\n      pTable->tabFlags = pTable->tabFlags | 2;\n      sqlite3DeleteTable(db,pTable);\n      *(undefined4 *)((int)pvVar9 + 0x10) = 0;\n    }" if (parenthesized_expression "(pTable != (Table *)0x0)" ( (binary_expression "pTable != (Table *)0x0" identifier != (cast_expression "(Table *)0x0" ( (type_descriptor "Table *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      pTable->tabFlags = pTable->tabFlags | 2;\n      sqlite3DeleteTable(db,pTable);\n      *(undefined4 *)((int)pvVar9 + 0x10) = 0;\n    }" { (expression_statement "pTable->tabFlags = pTable->tabFlags | 2;" (assignment_expression "pTable->tabFlags = pTable->tabFlags | 2" (field_expression "pTable->tabFlags" identifier -> field_identifier) = (binary_expression "pTable->tabFlags | 2" (field_expression "pTable->tabFlags" identifier -> field_identifier) | number_literal)) ;) (expression_statement "sqlite3DeleteTable(db,pTable);" (call_expression "sqlite3DeleteTable(db,pTable)" identifier (argument_list "(db,pTable)" ( identifier , identifier ))) ;) (expression_statement "*(undefined4 *)((int)pvVar9 + 0x10) = 0;" (assignment_expression "*(undefined4 *)((int)pvVar9 + 0x10) = 0" (pointer_expression "*(undefined4 *)((int)pvVar9 + 0x10)" * (cast_expression "(undefined4 *)((int)pvVar9 + 0x10)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pvVar9 + 0x10)" ( (binary_expression "(int)pvVar9 + 0x10" (cast_expression "(int)pvVar9" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) = number_literal) ;) })) (expression_statement "sqlite3DbFreeNN(db,pvVar9);" (call_expression "sqlite3DbFreeNN(db,pvVar9)" identifier (argument_list "(db,pvVar9)" ( identifier , identifier ))) ;) })) (expression_statement "sqlite3HashClear(&db->aModule);" (call_expression "sqlite3HashClear(&db->aModule)" identifier (argument_list "(&db->aModule)" ( (pointer_expression "&db->aModule" & (field_expression "db->aModule" identifier -> field_identifier)) ))) ;) (expression_statement "v = db->pErr;" (assignment_expression "v = db->pErr" identifier = (field_expression "db->pErr" identifier -> field_identifier)) ;) (expression_statement "db->errCode = 0;" (assignment_expression "db->errCode = 0" (field_expression "db->errCode" identifier -> field_identifier) = number_literal) ;) (if_statement "if (v != (sqlite3_value *)0x0) {\n    sqlite3ErrorFinish(db,0);\n    v = db->pErr;\n  }" if (parenthesized_expression "(v != (sqlite3_value *)0x0)" ( (binary_expression "v != (sqlite3_value *)0x0" identifier != (cast_expression "(sqlite3_value *)0x0" ( (type_descriptor "sqlite3_value *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    sqlite3ErrorFinish(db,0);\n    v = db->pErr;\n  }" { (expression_statement "sqlite3ErrorFinish(db,0);" (call_expression "sqlite3ErrorFinish(db,0)" identifier (argument_list "(db,0)" ( identifier , number_literal ))) ;) (expression_statement "v = db->pErr;" (assignment_expression "v = db->pErr" identifier = (field_expression "db->pErr" identifier -> field_identifier)) ;) })) (expression_statement "sqlite3ValueFree(v);" (call_expression "sqlite3ValueFree(v)" identifier (argument_list "(v)" ( identifier ))) ;) (if_statement "if (0 < db->nExtension) {\n    iVar4 = 0;\n    do {\n      ppvVar1 = db->aExtension + iVar4;\n      iVar4 = iVar4 + 1;\n      (*db->pVfs->xDlClose)(db->pVfs,*ppvVar1);\n    } while (iVar4 < db->nExtension);\n  }" if (parenthesized_expression "(0 < db->nExtension)" ( (binary_expression "0 < db->nExtension" number_literal < (field_expression "db->nExtension" identifier -> field_identifier)) )) (compound_statement "{\n    iVar4 = 0;\n    do {\n      ppvVar1 = db->aExtension + iVar4;\n      iVar4 = iVar4 + 1;\n      (*db->pVfs->xDlClose)(db->pVfs,*ppvVar1);\n    } while (iVar4 < db->nExtension);\n  }" { (expression_statement "iVar4 = 0;" (assignment_expression "iVar4 = 0" identifier = number_literal) ;) (do_statement "do {\n      ppvVar1 = db->aExtension + iVar4;\n      iVar4 = iVar4 + 1;\n      (*db->pVfs->xDlClose)(db->pVfs,*ppvVar1);\n    } while (iVar4 < db->nExtension);" do (compound_statement "{\n      ppvVar1 = db->aExtension + iVar4;\n      iVar4 = iVar4 + 1;\n      (*db->pVfs->xDlClose)(db->pVfs,*ppvVar1);\n    }" { (expression_statement "ppvVar1 = db->aExtension + iVar4;" (assignment_expression "ppvVar1 = db->aExtension + iVar4" identifier = (binary_expression "db->aExtension + iVar4" (field_expression "db->aExtension" identifier -> field_identifier) + identifier)) ;) (expression_statement "iVar4 = iVar4 + 1;" (assignment_expression "iVar4 = iVar4 + 1" identifier = (binary_expression "iVar4 + 1" identifier + number_literal)) ;) (expression_statement "(*db->pVfs->xDlClose)(db->pVfs,*ppvVar1);" (call_expression "(*db->pVfs->xDlClose)(db->pVfs,*ppvVar1)" (parenthesized_expression "(*db->pVfs->xDlClose)" ( (pointer_expression "*db->pVfs->xDlClose" * (field_expression "db->pVfs->xDlClose" (field_expression "db->pVfs" identifier -> field_identifier) -> field_identifier)) )) (argument_list "(db->pVfs,*ppvVar1)" ( (field_expression "db->pVfs" identifier -> field_identifier) , (pointer_expression "*ppvVar1" * identifier) ))) ;) }) while (parenthesized_expression "(iVar4 < db->nExtension)" ( (binary_expression "iVar4 < db->nExtension" identifier < (field_expression "db->nExtension" identifier -> field_identifier)) )) ;) })) (if_statement "if (db->aExtension != (void **)0x0) {\n    sqlite3DbFreeNN(db,db->aExtension);\n  }" if (parenthesized_expression "(db->aExtension != (void **)0x0)" ( (binary_expression "db->aExtension != (void **)0x0" (field_expression "db->aExtension" identifier -> field_identifier) != (cast_expression "(void **)0x0" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) )) (compound_statement "{\n    sqlite3DbFreeNN(db,db->aExtension);\n  }" { (expression_statement "sqlite3DbFreeNN(db,db->aExtension);" (call_expression "sqlite3DbFreeNN(db,db->aExtension)" identifier (argument_list "(db,db->aExtension)" ( identifier , (field_expression "db->aExtension" identifier -> field_identifier) ))) ;) })) (expression_statement "db->magic = 0xb5357930;" (assignment_expression "db->magic = 0xb5357930" (field_expression "db->magic" identifier -> field_identifier) = number_literal) ;) (expression_statement "p_00 = db->aDb[1].pSchema;" (assignment_expression "p_00 = db->aDb[1].pSchema" identifier = (field_expression "db->aDb[1].pSchema" (subscript_expression "db->aDb[1]" (field_expression "db->aDb" identifier -> field_identifier) [ number_literal ]) . field_identifier)) ;) (if_statement "if (p_00 != (Schema *)0x0) {\n    sqlite3DbFreeNN(db,p_00);\n  }" if (parenthesized_expression "(p_00 != (Schema *)0x0)" ( (binary_expression "p_00 != (Schema *)0x0" identifier != (cast_expression "(Schema *)0x0" ( (type_descriptor "Schema *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    sqlite3DbFreeNN(db,p_00);\n  }" { (expression_statement "sqlite3DbFreeNN(db,p_00);" (call_expression "sqlite3DbFreeNN(db,p_00)" identifier (argument_list "(db,p_00)" ( identifier , identifier ))) ;) })) (if_statement "if (db->mutex == (sqlite3_mutex *)0x0) {\n    db->magic = 0x9f3c2d33;\n  }\n  else {\n    (*(code *)tripCode[0x187])(db->mutex);\n    db->magic = 0x9f3c2d33;\n    if (db->mutex != (sqlite3_mutex *)0x0) {\n      (*(code *)tripCode[0x184])(db->mutex);\n    }\n  }" if (parenthesized_expression "(db->mutex == (sqlite3_mutex *)0x0)" ( (binary_expression "db->mutex == (sqlite3_mutex *)0x0" (field_expression "db->mutex" identifier -> field_identifier) == (cast_expression "(sqlite3_mutex *)0x0" ( (type_descriptor "sqlite3_mutex *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    db->magic = 0x9f3c2d33;\n  }" { (expression_statement "db->magic = 0x9f3c2d33;" (assignment_expression "db->magic = 0x9f3c2d33" (field_expression "db->magic" identifier -> field_identifier) = number_literal) ;) }) (else_clause "else {\n    (*(code *)tripCode[0x187])(db->mutex);\n    db->magic = 0x9f3c2d33;\n    if (db->mutex != (sqlite3_mutex *)0x0) {\n      (*(code *)tripCode[0x184])(db->mutex);\n    }\n  }" else (compound_statement "{\n    (*(code *)tripCode[0x187])(db->mutex);\n    db->magic = 0x9f3c2d33;\n    if (db->mutex != (sqlite3_mutex *)0x0) {\n      (*(code *)tripCode[0x184])(db->mutex);\n    }\n  }" { (expression_statement "(*(code *)tripCode[0x187])(db->mutex);" (call_expression "(*(code *)tripCode[0x187])(db->mutex)" (parenthesized_expression "(*(code *)tripCode[0x187])" ( (pointer_expression "*(code *)tripCode[0x187]" * (cast_expression "(code *)tripCode[0x187]" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "tripCode[0x187]" identifier [ number_literal ]))) )) (argument_list "(db->mutex)" ( (field_expression "db->mutex" identifier -> field_identifier) ))) ;) (expression_statement "db->magic = 0x9f3c2d33;" (assignment_expression "db->magic = 0x9f3c2d33" (field_expression "db->magic" identifier -> field_identifier) = number_literal) ;) (if_statement "if (db->mutex != (sqlite3_mutex *)0x0) {\n      (*(code *)tripCode[0x184])(db->mutex);\n    }" if (parenthesized_expression "(db->mutex != (sqlite3_mutex *)0x0)" ( (binary_expression "db->mutex != (sqlite3_mutex *)0x0" (field_expression "db->mutex" identifier -> field_identifier) != (cast_expression "(sqlite3_mutex *)0x0" ( (type_descriptor "sqlite3_mutex *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      (*(code *)tripCode[0x184])(db->mutex);\n    }" { (expression_statement "(*(code *)tripCode[0x184])(db->mutex);" (call_expression "(*(code *)tripCode[0x184])(db->mutex)" (parenthesized_expression "(*(code *)tripCode[0x184])" ( (pointer_expression "*(code *)tripCode[0x184]" * (cast_expression "(code *)tripCode[0x184]" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "tripCode[0x184]" identifier [ number_literal ]))) )) (argument_list "(db->mutex)" ( (field_expression "db->mutex" identifier -> field_identifier) ))) ;) })) }))) (if_statement "if ((db->lookaside).bMalloced != '\0') {\n    sqlite3_free((db->lookaside).pStart);\n  }" if (parenthesized_expression "((db->lookaside).bMalloced != '\0')" ( (binary_expression "(db->lookaside).bMalloced != '\0'" (field_expression "(db->lookaside).bMalloced" (parenthesized_expression "(db->lookaside)" ( (field_expression "db->lookaside" identifier -> field_identifier) )) . field_identifier) != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    sqlite3_free((db->lookaside).pStart);\n  }" { (expression_statement "sqlite3_free((db->lookaside).pStart);" (call_expression "sqlite3_free((db->lookaside).pStart)" identifier (argument_list "((db->lookaside).pStart)" ( (field_expression "(db->lookaside).pStart" (parenthesized_expression "(db->lookaside)" ( (field_expression "db->lookaside" identifier -> field_identifier) )) . field_identifier) ))) ;) })) (expression_statement "sqlite3_free(db);" (call_expression "sqlite3_free(db)" identifier (argument_list "(db)" ( identifier ))) ;) (return_statement "return;" return ;) })))
(translation_unit "void __regparm3 FUN_000a7990(int *param_1)\n\n{\n  uint *puVar1;\n  undefined4 *puVar2;\n  int iVar3;\n  int *piVar4;\n  int *piVar5;\n  int iVar6;\n  int iVar7;\n  undefined4 *puVar8;\n  \n  if (((param_1[0x17] != 0x64cffc7f) || (param_1[1] != 0)) || (iVar3 = FUN_0004e1f0(), iVar3 != 0))\n  {\n    if (param_1[3] != 0) {\n      (*DAT_0017c444)(param_1[3]);\n    }\n    return;\n  }\n  FUN_000a1a50();\n  iVar3 = param_1[0x70];\n  while (iVar3 != 0) {\n    param_1[0x70] = *(int *)(iVar3 + 0x14);\n    FUN_000428d0();\n    iVar3 = param_1[0x70];\n  }\n  iVar3 = param_1[4];\n  *(undefined1 *)((int)param_1 + 0x53) = 0;\n  iVar6 = 0;\n  param_1[0x72] = 0;\n  param_1[0x73] = 0;\n  if (0 < param_1[5]) {\n    do {\n      iVar7 = iVar6 * 0x10 + iVar3;\n      if (*(int *)(iVar7 + 4) != 0) {\n        FUN_000a77a0();\n        *(undefined4 *)(iVar7 + 4) = 0;\n        if (iVar6 != 1) {\n          *(undefined4 *)(iVar7 + 0xc) = 0;\n        }\n        iVar3 = param_1[4];\n      }\n      iVar6 = iVar6 + 1;\n    } while (iVar6 < param_1[5]);\n  }\n  if (*(int *)(iVar3 + 0x1c) != 0) {\n    FUN_000579b0(*(int *)(iVar3 + 0x1c));\n  }\n  FUN_00043270();\n  FUN_0004bc40();\n  FUN_00043780();\n  FUN_0003ad60();\n  if (DAT_0017db10 != (int *)0x0) {\n    piVar4 = DAT_0017db10;\n    if (param_1 == DAT_0017db10) {\n      piVar5 = (int *)&DAT_0017db10;\n      piVar4 = param_1;\n    }\n    else {\n      do {\n        piVar5 = piVar4;\n        piVar4 = (int *)piVar5[0x7d];\n        if (piVar4 == (int *)0x0) goto LAB_000a7acc;\n      } while (param_1 != piVar4);\n      piVar5 = piVar5 + 0x7d;\n    }\n    *piVar5 = piVar4[0x7d];\n  }\nLAB_000a7acc:\n  FUN_0003ada0();\n  for (puVar2 = (undefined4 *)param_1[0x5e]; puVar2 != (undefined4 *)0x0;\n      puVar2 = (undefined4 *)*puVar2) {\n    iVar3 = puVar2[2];\n    do {\n      FUN_0004e1a0();\n      iVar3 = *(int *)(iVar3 + 0xc);\n      FUN_000428d0();\n    } while (iVar3 != 0);\n  }\n  FUN_000434c0();\n  for (puVar2 = (undefined4 *)param_1[0x62]; puVar2 != (undefined4 *)0x0;\n      puVar2 = (undefined4 *)*puVar2) {\n    iVar3 = puVar2[2];\n    puVar8 = (undefined4 *)(iVar3 + 8);\n    do {\n      if ((code *)puVar8[2] != (code *)0x0) {\n        (*(code *)puVar8[2])(*puVar8);\n      }\n      puVar8 = puVar8 + 5;\n    } while ((undefined4 *)(iVar3 + 0x44) != puVar8);\n    if (iVar3 != 0) {\n      FUN_000428d0();\n    }\n  }\n  FUN_000434c0();\n  for (puVar2 = (undefined4 *)param_1[0x57]; puVar2 != (undefined4 *)0x0;\n      puVar2 = (undefined4 *)*puVar2) {\n    iVar3 = puVar2[2];\n    if (*(code **)(iVar3 + 0xc) != (code *)0x0) {\n      (**(code **)(iVar3 + 0xc))(*(undefined4 *)(iVar3 + 8));\n    }\n    if (*(int *)(iVar3 + 0x10) != 0) {\n      puVar1 = (uint *)(*(int *)(iVar3 + 0x10) + 0x24);\n      *puVar1 = *puVar1 | 2;\n      FUN_00057430();\n      *(undefined4 *)(iVar3 + 0x10) = 0;\n    }\n    FUN_000428d0();\n  }\n  FUN_000434c0();\n  param_1[0xf] = 0;\n  if (param_1[0x42] != 0) {\n    FUN_00045400();\n  }\n  FUN_00042f80();\n  if (0 < param_1[0x2e]) {\n    iVar3 = 0;\n    do {\n      iVar6 = iVar3 * 4;\n      iVar3 = iVar3 + 1;\n      (**(code **)(*param_1 + 0x34))(*param_1,*(undefined4 *)(param_1[0x2f] + iVar6));\n    } while (iVar3 < param_1[0x2e]);\n  }\n  if (param_1[0x2f] != 0) {\n    FUN_000428d0();\n  }\n  param_1[0x17] = -0x4aca86d0;\n  if (*(int *)(param_1[4] + 0x1c) != 0) {\n    FUN_000428d0();\n  }\n  if (param_1[3] == 0) {\n    param_1[0x17] = -0x60c3d2cd;\n  }\n  else {\n    (*DAT_0017c444)(param_1[3]);\n    param_1[0x17] = -0x60c3d2cd;\n    if (param_1[3] != 0) {\n      (*DAT_0017c438)(param_1[3]);\n    }\n  }\n  if (*(char *)((int)param_1 + 0x11a) != '\0') {\n    FUN_00042800(param_1[0x4d]);\n  }\n  FUN_00042800(param_1);\n  return;\n}\n\n" (function_definition "void __regparm3 FUN_000a7990(int *param_1)\n\n{\n  uint *puVar1;\n  undefined4 *puVar2;\n  int iVar3;\n  int *piVar4;\n  int *piVar5;\n  int iVar6;\n  int iVar7;\n  undefined4 *puVar8;\n  \n  if (((param_1[0x17] != 0x64cffc7f) || (param_1[1] != 0)) || (iVar3 = FUN_0004e1f0(), iVar3 != 0))\n  {\n    if (param_1[3] != 0) {\n      (*DAT_0017c444)(param_1[3]);\n    }\n    return;\n  }\n  FUN_000a1a50();\n  iVar3 = param_1[0x70];\n  while (iVar3 != 0) {\n    param_1[0x70] = *(int *)(iVar3 + 0x14);\n    FUN_000428d0();\n    iVar3 = param_1[0x70];\n  }\n  iVar3 = param_1[4];\n  *(undefined1 *)((int)param_1 + 0x53) = 0;\n  iVar6 = 0;\n  param_1[0x72] = 0;\n  param_1[0x73] = 0;\n  if (0 < param_1[5]) {\n    do {\n      iVar7 = iVar6 * 0x10 + iVar3;\n      if (*(int *)(iVar7 + 4) != 0) {\n        FUN_000a77a0();\n        *(undefined4 *)(iVar7 + 4) = 0;\n        if (iVar6 != 1) {\n          *(undefined4 *)(iVar7 + 0xc) = 0;\n        }\n        iVar3 = param_1[4];\n      }\n      iVar6 = iVar6 + 1;\n    } while (iVar6 < param_1[5]);\n  }\n  if (*(int *)(iVar3 + 0x1c) != 0) {\n    FUN_000579b0(*(int *)(iVar3 + 0x1c));\n  }\n  FUN_00043270();\n  FUN_0004bc40();\n  FUN_00043780();\n  FUN_0003ad60();\n  if (DAT_0017db10 != (int *)0x0) {\n    piVar4 = DAT_0017db10;\n    if (param_1 == DAT_0017db10) {\n      piVar5 = (int *)&DAT_0017db10;\n      piVar4 = param_1;\n    }\n    else {\n      do {\n        piVar5 = piVar4;\n        piVar4 = (int *)piVar5[0x7d];\n        if (piVar4 == (int *)0x0) goto LAB_000a7acc;\n      } while (param_1 != piVar4);\n      piVar5 = piVar5 + 0x7d;\n    }\n    *piVar5 = piVar4[0x7d];\n  }\nLAB_000a7acc:\n  FUN_0003ada0();\n  for (puVar2 = (undefined4 *)param_1[0x5e]; puVar2 != (undefined4 *)0x0;\n      puVar2 = (undefined4 *)*puVar2) {\n    iVar3 = puVar2[2];\n    do {\n      FUN_0004e1a0();\n      iVar3 = *(int *)(iVar3 + 0xc);\n      FUN_000428d0();\n    } while (iVar3 != 0);\n  }\n  FUN_000434c0();\n  for (puVar2 = (undefined4 *)param_1[0x62]; puVar2 != (undefined4 *)0x0;\n      puVar2 = (undefined4 *)*puVar2) {\n    iVar3 = puVar2[2];\n    puVar8 = (undefined4 *)(iVar3 + 8);\n    do {\n      if ((code *)puVar8[2] != (code *)0x0) {\n        (*(code *)puVar8[2])(*puVar8);\n      }\n      puVar8 = puVar8 + 5;\n    } while ((undefined4 *)(iVar3 + 0x44) != puVar8);\n    if (iVar3 != 0) {\n      FUN_000428d0();\n    }\n  }\n  FUN_000434c0();\n  for (puVar2 = (undefined4 *)param_1[0x57]; puVar2 != (undefined4 *)0x0;\n      puVar2 = (undefined4 *)*puVar2) {\n    iVar3 = puVar2[2];\n    if (*(code **)(iVar3 + 0xc) != (code *)0x0) {\n      (**(code **)(iVar3 + 0xc))(*(undefined4 *)(iVar3 + 8));\n    }\n    if (*(int *)(iVar3 + 0x10) != 0) {\n      puVar1 = (uint *)(*(int *)(iVar3 + 0x10) + 0x24);\n      *puVar1 = *puVar1 | 2;\n      FUN_00057430();\n      *(undefined4 *)(iVar3 + 0x10) = 0;\n    }\n    FUN_000428d0();\n  }\n  FUN_000434c0();\n  param_1[0xf] = 0;\n  if (param_1[0x42] != 0) {\n    FUN_00045400();\n  }\n  FUN_00042f80();\n  if (0 < param_1[0x2e]) {\n    iVar3 = 0;\n    do {\n      iVar6 = iVar3 * 4;\n      iVar3 = iVar3 + 1;\n      (**(code **)(*param_1 + 0x34))(*param_1,*(undefined4 *)(param_1[0x2f] + iVar6));\n    } while (iVar3 < param_1[0x2e]);\n  }\n  if (param_1[0x2f] != 0) {\n    FUN_000428d0();\n  }\n  param_1[0x17] = -0x4aca86d0;\n  if (*(int *)(param_1[4] + 0x1c) != 0) {\n    FUN_000428d0();\n  }\n  if (param_1[3] == 0) {\n    param_1[0x17] = -0x60c3d2cd;\n  }\n  else {\n    (*DAT_0017c444)(param_1[3]);\n    param_1[0x17] = -0x60c3d2cd;\n    if (param_1[3] != 0) {\n      (*DAT_0017c438)(param_1[3]);\n    }\n  }\n  if (*(char *)((int)param_1 + 0x11a) != '\0') {\n    FUN_00042800(param_1[0x4d]);\n  }\n  FUN_00042800(param_1);\n  return;\n}" primitive_type (ERROR "__regparm3" identifier) (function_declarator "FUN_000a7990(int *param_1)" identifier (parameter_list "(int *param_1)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) ))) (compound_statement "{\n  uint *puVar1;\n  undefined4 *puVar2;\n  int iVar3;\n  int *piVar4;\n  int *piVar5;\n  int iVar6;\n  int iVar7;\n  undefined4 *puVar8;\n  \n  if (((param_1[0x17] != 0x64cffc7f) || (param_1[1] != 0)) || (iVar3 = FUN_0004e1f0(), iVar3 != 0))\n  {\n    if (param_1[3] != 0) {\n      (*DAT_0017c444)(param_1[3]);\n    }\n    return;\n  }\n  FUN_000a1a50();\n  iVar3 = param_1[0x70];\n  while (iVar3 != 0) {\n    param_1[0x70] = *(int *)(iVar3 + 0x14);\n    FUN_000428d0();\n    iVar3 = param_1[0x70];\n  }\n  iVar3 = param_1[4];\n  *(undefined1 *)((int)param_1 + 0x53) = 0;\n  iVar6 = 0;\n  param_1[0x72] = 0;\n  param_1[0x73] = 0;\n  if (0 < param_1[5]) {\n    do {\n      iVar7 = iVar6 * 0x10 + iVar3;\n      if (*(int *)(iVar7 + 4) != 0) {\n        FUN_000a77a0();\n        *(undefined4 *)(iVar7 + 4) = 0;\n        if (iVar6 != 1) {\n          *(undefined4 *)(iVar7 + 0xc) = 0;\n        }\n        iVar3 = param_1[4];\n      }\n      iVar6 = iVar6 + 1;\n    } while (iVar6 < param_1[5]);\n  }\n  if (*(int *)(iVar3 + 0x1c) != 0) {\n    FUN_000579b0(*(int *)(iVar3 + 0x1c));\n  }\n  FUN_00043270();\n  FUN_0004bc40();\n  FUN_00043780();\n  FUN_0003ad60();\n  if (DAT_0017db10 != (int *)0x0) {\n    piVar4 = DAT_0017db10;\n    if (param_1 == DAT_0017db10) {\n      piVar5 = (int *)&DAT_0017db10;\n      piVar4 = param_1;\n    }\n    else {\n      do {\n        piVar5 = piVar4;\n        piVar4 = (int *)piVar5[0x7d];\n        if (piVar4 == (int *)0x0) goto LAB_000a7acc;\n      } while (param_1 != piVar4);\n      piVar5 = piVar5 + 0x7d;\n    }\n    *piVar5 = piVar4[0x7d];\n  }\nLAB_000a7acc:\n  FUN_0003ada0();\n  for (puVar2 = (undefined4 *)param_1[0x5e]; puVar2 != (undefined4 *)0x0;\n      puVar2 = (undefined4 *)*puVar2) {\n    iVar3 = puVar2[2];\n    do {\n      FUN_0004e1a0();\n      iVar3 = *(int *)(iVar3 + 0xc);\n      FUN_000428d0();\n    } while (iVar3 != 0);\n  }\n  FUN_000434c0();\n  for (puVar2 = (undefined4 *)param_1[0x62]; puVar2 != (undefined4 *)0x0;\n      puVar2 = (undefined4 *)*puVar2) {\n    iVar3 = puVar2[2];\n    puVar8 = (undefined4 *)(iVar3 + 8);\n    do {\n      if ((code *)puVar8[2] != (code *)0x0) {\n        (*(code *)puVar8[2])(*puVar8);\n      }\n      puVar8 = puVar8 + 5;\n    } while ((undefined4 *)(iVar3 + 0x44) != puVar8);\n    if (iVar3 != 0) {\n      FUN_000428d0();\n    }\n  }\n  FUN_000434c0();\n  for (puVar2 = (undefined4 *)param_1[0x57]; puVar2 != (undefined4 *)0x0;\n      puVar2 = (undefined4 *)*puVar2) {\n    iVar3 = puVar2[2];\n    if (*(code **)(iVar3 + 0xc) != (code *)0x0) {\n      (**(code **)(iVar3 + 0xc))(*(undefined4 *)(iVar3 + 8));\n    }\n    if (*(int *)(iVar3 + 0x10) != 0) {\n      puVar1 = (uint *)(*(int *)(iVar3 + 0x10) + 0x24);\n      *puVar1 = *puVar1 | 2;\n      FUN_00057430();\n      *(undefined4 *)(iVar3 + 0x10) = 0;\n    }\n    FUN_000428d0();\n  }\n  FUN_000434c0();\n  param_1[0xf] = 0;\n  if (param_1[0x42] != 0) {\n    FUN_00045400();\n  }\n  FUN_00042f80();\n  if (0 < param_1[0x2e]) {\n    iVar3 = 0;\n    do {\n      iVar6 = iVar3 * 4;\n      iVar3 = iVar3 + 1;\n      (**(code **)(*param_1 + 0x34))(*param_1,*(undefined4 *)(param_1[0x2f] + iVar6));\n    } while (iVar3 < param_1[0x2e]);\n  }\n  if (param_1[0x2f] != 0) {\n    FUN_000428d0();\n  }\n  param_1[0x17] = -0x4aca86d0;\n  if (*(int *)(param_1[4] + 0x1c) != 0) {\n    FUN_000428d0();\n  }\n  if (param_1[3] == 0) {\n    param_1[0x17] = -0x60c3d2cd;\n  }\n  else {\n    (*DAT_0017c444)(param_1[3]);\n    param_1[0x17] = -0x60c3d2cd;\n    if (param_1[3] != 0) {\n      (*DAT_0017c438)(param_1[3]);\n    }\n  }\n  if (*(char *)((int)param_1 + 0x11a) != '\0') {\n    FUN_00042800(param_1[0x4d]);\n  }\n  FUN_00042800(param_1);\n  return;\n}" { (declaration "uint *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "undefined4 *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "int *piVar4;" primitive_type (pointer_declarator "*piVar4" * identifier) ;) (declaration "int *piVar5;" primitive_type (pointer_declarator "*piVar5" * identifier) ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "undefined4 *puVar8;" type_identifier (pointer_declarator "*puVar8" * identifier) ;) (if_statement "if (((param_1[0x17] != 0x64cffc7f) || (param_1[1] != 0)) || (iVar3 = FUN_0004e1f0(), iVar3 != 0))\n  {\n    if (param_1[3] != 0) {\n      (*DAT_0017c444)(param_1[3]);\n    }\n    return;\n  }" if (parenthesized_expression "(((param_1[0x17] != 0x64cffc7f) || (param_1[1] != 0)) || (iVar3 = FUN_0004e1f0(), iVar3 != 0))" ( (binary_expression "((param_1[0x17] != 0x64cffc7f) || (param_1[1] != 0)) || (iVar3 = FUN_0004e1f0(), iVar3 != 0)" (parenthesized_expression "((param_1[0x17] != 0x64cffc7f) || (param_1[1] != 0))" ( (binary_expression "(param_1[0x17] != 0x64cffc7f) || (param_1[1] != 0)" (parenthesized_expression "(param_1[0x17] != 0x64cffc7f)" ( (binary_expression "param_1[0x17] != 0x64cffc7f" (subscript_expression "param_1[0x17]" identifier [ number_literal ]) != number_literal) )) || (parenthesized_expression "(param_1[1] != 0)" ( (binary_expression "param_1[1] != 0" (subscript_expression "param_1[1]" identifier [ number_literal ]) != number_literal) ))) )) || (parenthesized_expression "(iVar3 = FUN_0004e1f0(), iVar3 != 0)" ( (comma_expression "iVar3 = FUN_0004e1f0(), iVar3 != 0" (assignment_expression "iVar3 = FUN_0004e1f0()" identifier = (call_expression "FUN_0004e1f0()" identifier (argument_list "()" ( )))) , (binary_expression "iVar3 != 0" identifier != number_literal)) ))) )) (compound_statement "{\n    if (param_1[3] != 0) {\n      (*DAT_0017c444)(param_1[3]);\n    }\n    return;\n  }" { (if_statement "if (param_1[3] != 0) {\n      (*DAT_0017c444)(param_1[3]);\n    }" if (parenthesized_expression "(param_1[3] != 0)" ( (binary_expression "param_1[3] != 0" (subscript_expression "param_1[3]" identifier [ number_literal ]) != number_literal) )) (compound_statement "{\n      (*DAT_0017c444)(param_1[3]);\n    }" { (expression_statement "(*DAT_0017c444)(param_1[3]);" (call_expression "(*DAT_0017c444)(param_1[3])" (parenthesized_expression "(*DAT_0017c444)" ( (pointer_expression "*DAT_0017c444" * identifier) )) (argument_list "(param_1[3])" ( (subscript_expression "param_1[3]" identifier [ number_literal ]) ))) ;) })) (return_statement "return;" return ;) })) (expression_statement "FUN_000a1a50();" (call_expression "FUN_000a1a50()" identifier (argument_list "()" ( ))) ;) (expression_statement "iVar3 = param_1[0x70];" (assignment_expression "iVar3 = param_1[0x70]" identifier = (subscript_expression "param_1[0x70]" identifier [ number_literal ])) ;) (while_statement "while (iVar3 != 0) {\n    param_1[0x70] = *(int *)(iVar3 + 0x14);\n    FUN_000428d0();\n    iVar3 = param_1[0x70];\n  }" while (parenthesized_expression "(iVar3 != 0)" ( (binary_expression "iVar3 != 0" identifier != number_literal) )) (compound_statement "{\n    param_1[0x70] = *(int *)(iVar3 + 0x14);\n    FUN_000428d0();\n    iVar3 = param_1[0x70];\n  }" { (expression_statement "param_1[0x70] = *(int *)(iVar3 + 0x14);" (assignment_expression "param_1[0x70] = *(int *)(iVar3 + 0x14)" (subscript_expression "param_1[0x70]" identifier [ number_literal ]) = (pointer_expression "*(int *)(iVar3 + 0x14)" * (cast_expression "(int *)(iVar3 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0x14)" ( (binary_expression "iVar3 + 0x14" identifier + number_literal) ))))) ;) (expression_statement "FUN_000428d0();" (call_expression "FUN_000428d0()" identifier (argument_list "()" ( ))) ;) (expression_statement "iVar3 = param_1[0x70];" (assignment_expression "iVar3 = param_1[0x70]" identifier = (subscript_expression "param_1[0x70]" identifier [ number_literal ])) ;) })) (expression_statement "iVar3 = param_1[4];" (assignment_expression "iVar3 = param_1[4]" identifier = (subscript_expression "param_1[4]" identifier [ number_literal ])) ;) (expression_statement "*(undefined1 *)((int)param_1 + 0x53) = 0;" (assignment_expression "*(undefined1 *)((int)param_1 + 0x53) = 0" (pointer_expression "*(undefined1 *)((int)param_1 + 0x53)" * (cast_expression "(undefined1 *)((int)param_1 + 0x53)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + 0x53)" ( (binary_expression "(int)param_1 + 0x53" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) = number_literal) ;) (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" identifier = number_literal) ;) (expression_statement "param_1[0x72] = 0;" (assignment_expression "param_1[0x72] = 0" (subscript_expression "param_1[0x72]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[0x73] = 0;" (assignment_expression "param_1[0x73] = 0" (subscript_expression "param_1[0x73]" identifier [ number_literal ]) = number_literal) ;) (if_statement "if (0 < param_1[5]) {\n    do {\n      iVar7 = iVar6 * 0x10 + iVar3;\n      if (*(int *)(iVar7 + 4) != 0) {\n        FUN_000a77a0();\n        *(undefined4 *)(iVar7 + 4) = 0;\n        if (iVar6 != 1) {\n          *(undefined4 *)(iVar7 + 0xc) = 0;\n        }\n        iVar3 = param_1[4];\n      }\n      iVar6 = iVar6 + 1;\n    } while (iVar6 < param_1[5]);\n  }" if (parenthesized_expression "(0 < param_1[5])" ( (binary_expression "0 < param_1[5]" number_literal < (subscript_expression "param_1[5]" identifier [ number_literal ])) )) (compound_statement "{\n    do {\n      iVar7 = iVar6 * 0x10 + iVar3;\n      if (*(int *)(iVar7 + 4) != 0) {\n        FUN_000a77a0();\n        *(undefined4 *)(iVar7 + 4) = 0;\n        if (iVar6 != 1) {\n          *(undefined4 *)(iVar7 + 0xc) = 0;\n        }\n        iVar3 = param_1[4];\n      }\n      iVar6 = iVar6 + 1;\n    } while (iVar6 < param_1[5]);\n  }" { (do_statement "do {\n      iVar7 = iVar6 * 0x10 + iVar3;\n      if (*(int *)(iVar7 + 4) != 0) {\n        FUN_000a77a0();\n        *(undefined4 *)(iVar7 + 4) = 0;\n        if (iVar6 != 1) {\n          *(undefined4 *)(iVar7 + 0xc) = 0;\n        }\n        iVar3 = param_1[4];\n      }\n      iVar6 = iVar6 + 1;\n    } while (iVar6 < param_1[5]);" do (compound_statement "{\n      iVar7 = iVar6 * 0x10 + iVar3;\n      if (*(int *)(iVar7 + 4) != 0) {\n        FUN_000a77a0();\n        *(undefined4 *)(iVar7 + 4) = 0;\n        if (iVar6 != 1) {\n          *(undefined4 *)(iVar7 + 0xc) = 0;\n        }\n        iVar3 = param_1[4];\n      }\n      iVar6 = iVar6 + 1;\n    }" { (expression_statement "iVar7 = iVar6 * 0x10 + iVar3;" (assignment_expression "iVar7 = iVar6 * 0x10 + iVar3" identifier = (binary_expression "iVar6 * 0x10 + iVar3" (binary_expression "iVar6 * 0x10" identifier * number_literal) + identifier)) ;) (if_statement "if (*(int *)(iVar7 + 4) != 0) {\n        FUN_000a77a0();\n        *(undefined4 *)(iVar7 + 4) = 0;\n        if (iVar6 != 1) {\n          *(undefined4 *)(iVar7 + 0xc) = 0;\n        }\n        iVar3 = param_1[4];\n      }" if (parenthesized_expression "(*(int *)(iVar7 + 4) != 0)" ( (binary_expression "*(int *)(iVar7 + 4) != 0" (pointer_expression "*(int *)(iVar7 + 4)" * (cast_expression "(int *)(iVar7 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 4)" ( (binary_expression "iVar7 + 4" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n        FUN_000a77a0();\n        *(undefined4 *)(iVar7 + 4) = 0;\n        if (iVar6 != 1) {\n          *(undefined4 *)(iVar7 + 0xc) = 0;\n        }\n        iVar3 = param_1[4];\n      }" { (expression_statement "FUN_000a77a0();" (call_expression "FUN_000a77a0()" identifier (argument_list "()" ( ))) ;) (expression_statement "*(undefined4 *)(iVar7 + 4) = 0;" (assignment_expression "*(undefined4 *)(iVar7 + 4) = 0" (pointer_expression "*(undefined4 *)(iVar7 + 4)" * (cast_expression "(undefined4 *)(iVar7 + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 4)" ( (binary_expression "iVar7 + 4" identifier + number_literal) )))) = number_literal) ;) (if_statement "if (iVar6 != 1) {\n          *(undefined4 *)(iVar7 + 0xc) = 0;\n        }" if (parenthesized_expression "(iVar6 != 1)" ( (binary_expression "iVar6 != 1" identifier != number_literal) )) (compound_statement "{\n          *(undefined4 *)(iVar7 + 0xc) = 0;\n        }" { (expression_statement "*(undefined4 *)(iVar7 + 0xc) = 0;" (assignment_expression "*(undefined4 *)(iVar7 + 0xc) = 0" (pointer_expression "*(undefined4 *)(iVar7 + 0xc)" * (cast_expression "(undefined4 *)(iVar7 + 0xc)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 0xc)" ( (binary_expression "iVar7 + 0xc" identifier + number_literal) )))) = number_literal) ;) })) (expression_statement "iVar3 = param_1[4];" (assignment_expression "iVar3 = param_1[4]" identifier = (subscript_expression "param_1[4]" identifier [ number_literal ])) ;) })) (expression_statement "iVar6 = iVar6 + 1;" (assignment_expression "iVar6 = iVar6 + 1" identifier = (binary_expression "iVar6 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar6 < param_1[5])" ( (binary_expression "iVar6 < param_1[5]" identifier < (subscript_expression "param_1[5]" identifier [ number_literal ])) )) ;) })) (if_statement "if (*(int *)(iVar3 + 0x1c) != 0) {\n    FUN_000579b0(*(int *)(iVar3 + 0x1c));\n  }" if (parenthesized_expression "(*(int *)(iVar3 + 0x1c) != 0)" ( (binary_expression "*(int *)(iVar3 + 0x1c) != 0" (pointer_expression "*(int *)(iVar3 + 0x1c)" * (cast_expression "(int *)(iVar3 + 0x1c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0x1c)" ( (binary_expression "iVar3 + 0x1c" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n    FUN_000579b0(*(int *)(iVar3 + 0x1c));\n  }" { (expression_statement "FUN_000579b0(*(int *)(iVar3 + 0x1c));" (call_expression "FUN_000579b0(*(int *)(iVar3 + 0x1c))" identifier (argument_list "(*(int *)(iVar3 + 0x1c))" ( (pointer_expression "*(int *)(iVar3 + 0x1c)" * (cast_expression "(int *)(iVar3 + 0x1c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0x1c)" ( (binary_expression "iVar3 + 0x1c" identifier + number_literal) )))) ))) ;) })) (expression_statement "FUN_00043270();" (call_expression "FUN_00043270()" identifier (argument_list "()" ( ))) ;) (expression_statement "FUN_0004bc40();" (call_expression "FUN_0004bc40()" identifier (argument_list "()" ( ))) ;) (expression_statement "FUN_00043780();" (call_expression "FUN_00043780()" identifier (argument_list "()" ( ))) ;) (expression_statement "FUN_0003ad60();" (call_expression "FUN_0003ad60()" identifier (argument_list "()" ( ))) ;) (if_statement "if (DAT_0017db10 != (int *)0x0) {\n    piVar4 = DAT_0017db10;\n    if (param_1 == DAT_0017db10) {\n      piVar5 = (int *)&DAT_0017db10;\n      piVar4 = param_1;\n    }\n    else {\n      do {\n        piVar5 = piVar4;\n        piVar4 = (int *)piVar5[0x7d];\n        if (piVar4 == (int *)0x0) goto LAB_000a7acc;\n      } while (param_1 != piVar4);\n      piVar5 = piVar5 + 0x7d;\n    }\n    *piVar5 = piVar4[0x7d];\n  }" if (parenthesized_expression "(DAT_0017db10 != (int *)0x0)" ( (binary_expression "DAT_0017db10 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    piVar4 = DAT_0017db10;\n    if (param_1 == DAT_0017db10) {\n      piVar5 = (int *)&DAT_0017db10;\n      piVar4 = param_1;\n    }\n    else {\n      do {\n        piVar5 = piVar4;\n        piVar4 = (int *)piVar5[0x7d];\n        if (piVar4 == (int *)0x0) goto LAB_000a7acc;\n      } while (param_1 != piVar4);\n      piVar5 = piVar5 + 0x7d;\n    }\n    *piVar5 = piVar4[0x7d];\n  }" { (expression_statement "piVar4 = DAT_0017db10;" (assignment_expression "piVar4 = DAT_0017db10" identifier = identifier) ;) (if_statement "if (param_1 == DAT_0017db10) {\n      piVar5 = (int *)&DAT_0017db10;\n      piVar4 = param_1;\n    }\n    else {\n      do {\n        piVar5 = piVar4;\n        piVar4 = (int *)piVar5[0x7d];\n        if (piVar4 == (int *)0x0) goto LAB_000a7acc;\n      } while (param_1 != piVar4);\n      piVar5 = piVar5 + 0x7d;\n    }" if (parenthesized_expression "(param_1 == DAT_0017db10)" ( (binary_expression "param_1 == DAT_0017db10" identifier == identifier) )) (compound_statement "{\n      piVar5 = (int *)&DAT_0017db10;\n      piVar4 = param_1;\n    }" { (expression_statement "piVar5 = (int *)&DAT_0017db10;" (assignment_expression "piVar5 = (int *)&DAT_0017db10" identifier = (cast_expression "(int *)&DAT_0017db10" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "&DAT_0017db10" & identifier))) ;) (expression_statement "piVar4 = param_1;" (assignment_expression "piVar4 = param_1" identifier = identifier) ;) }) (else_clause "else {\n      do {\n        piVar5 = piVar4;\n        piVar4 = (int *)piVar5[0x7d];\n        if (piVar4 == (int *)0x0) goto LAB_000a7acc;\n      } while (param_1 != piVar4);\n      piVar5 = piVar5 + 0x7d;\n    }" else (compound_statement "{\n      do {\n        piVar5 = piVar4;\n        piVar4 = (int *)piVar5[0x7d];\n        if (piVar4 == (int *)0x0) goto LAB_000a7acc;\n      } while (param_1 != piVar4);\n      piVar5 = piVar5 + 0x7d;\n    }" { (do_statement "do {\n        piVar5 = piVar4;\n        piVar4 = (int *)piVar5[0x7d];\n        if (piVar4 == (int *)0x0) goto LAB_000a7acc;\n      } while (param_1 != piVar4);" do (compound_statement "{\n        piVar5 = piVar4;\n        piVar4 = (int *)piVar5[0x7d];\n        if (piVar4 == (int *)0x0) goto LAB_000a7acc;\n      }" { (expression_statement "piVar5 = piVar4;" (assignment_expression "piVar5 = piVar4" identifier = identifier) ;) (expression_statement "piVar4 = (int *)piVar5[0x7d];" (assignment_expression "piVar4 = (int *)piVar5[0x7d]" identifier = (cast_expression "(int *)piVar5[0x7d]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar5[0x7d]" identifier [ number_literal ]))) ;) (if_statement "if (piVar4 == (int *)0x0) goto LAB_000a7acc;" if (parenthesized_expression "(piVar4 == (int *)0x0)" ( (binary_expression "piVar4 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_000a7acc;" goto statement_identifier ;)) }) while (parenthesized_expression "(param_1 != piVar4)" ( (binary_expression "param_1 != piVar4" identifier != identifier) )) ;) (expression_statement "piVar5 = piVar5 + 0x7d;" (assignment_expression "piVar5 = piVar5 + 0x7d" identifier = (binary_expression "piVar5 + 0x7d" identifier + number_literal)) ;) }))) (expression_statement "*piVar5 = piVar4[0x7d];" (assignment_expression "*piVar5 = piVar4[0x7d]" (pointer_expression "*piVar5" * identifier) = (subscript_expression "piVar4[0x7d]" identifier [ number_literal ])) ;) })) (labeled_statement "LAB_000a7acc:\n  FUN_0003ada0();" statement_identifier : (expression_statement "FUN_0003ada0();" (call_expression "FUN_0003ada0()" identifier (argument_list "()" ( ))) ;)) (for_statement "for (puVar2 = (undefined4 *)param_1[0x5e]; puVar2 != (undefined4 *)0x0;\n      puVar2 = (undefined4 *)*puVar2) {\n    iVar3 = puVar2[2];\n    do {\n      FUN_0004e1a0();\n      iVar3 = *(int *)(iVar3 + 0xc);\n      FUN_000428d0();\n    } while (iVar3 != 0);\n  }" for ( (assignment_expression "puVar2 = (undefined4 *)param_1[0x5e]" identifier = (cast_expression "(undefined4 *)param_1[0x5e]" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[0x5e]" identifier [ number_literal ]))) ; (binary_expression "puVar2 != (undefined4 *)0x0" identifier != (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ; (assignment_expression "puVar2 = (undefined4 *)*puVar2" identifier = (cast_expression "(undefined4 *)*puVar2" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar2" * identifier))) ) (compound_statement "{\n    iVar3 = puVar2[2];\n    do {\n      FUN_0004e1a0();\n      iVar3 = *(int *)(iVar3 + 0xc);\n      FUN_000428d0();\n    } while (iVar3 != 0);\n  }" { (expression_statement "iVar3 = puVar2[2];" (assignment_expression "iVar3 = puVar2[2]" identifier = (subscript_expression "puVar2[2]" identifier [ number_literal ])) ;) (do_statement "do {\n      FUN_0004e1a0();\n      iVar3 = *(int *)(iVar3 + 0xc);\n      FUN_000428d0();\n    } while (iVar3 != 0);" do (compound_statement "{\n      FUN_0004e1a0();\n      iVar3 = *(int *)(iVar3 + 0xc);\n      FUN_000428d0();\n    }" { (expression_statement "FUN_0004e1a0();" (call_expression "FUN_0004e1a0()" identifier (argument_list "()" ( ))) ;) (expression_statement "iVar3 = *(int *)(iVar3 + 0xc);" (assignment_expression "iVar3 = *(int *)(iVar3 + 0xc)" identifier = (pointer_expression "*(int *)(iVar3 + 0xc)" * (cast_expression "(int *)(iVar3 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0xc)" ( (binary_expression "iVar3 + 0xc" identifier + number_literal) ))))) ;) (expression_statement "FUN_000428d0();" (call_expression "FUN_000428d0()" identifier (argument_list "()" ( ))) ;) }) while (parenthesized_expression "(iVar3 != 0)" ( (binary_expression "iVar3 != 0" identifier != number_literal) )) ;) })) (expression_statement "FUN_000434c0();" (call_expression "FUN_000434c0()" identifier (argument_list "()" ( ))) ;) (for_statement "for (puVar2 = (undefined4 *)param_1[0x62]; puVar2 != (undefined4 *)0x0;\n      puVar2 = (undefined4 *)*puVar2) {\n    iVar3 = puVar2[2];\n    puVar8 = (undefined4 *)(iVar3 + 8);\n    do {\n      if ((code *)puVar8[2] != (code *)0x0) {\n        (*(code *)puVar8[2])(*puVar8);\n      }\n      puVar8 = puVar8 + 5;\n    } while ((undefined4 *)(iVar3 + 0x44) != puVar8);\n    if (iVar3 != 0) {\n      FUN_000428d0();\n    }\n  }" for ( (assignment_expression "puVar2 = (undefined4 *)param_1[0x62]" identifier = (cast_expression "(undefined4 *)param_1[0x62]" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[0x62]" identifier [ number_literal ]))) ; (binary_expression "puVar2 != (undefined4 *)0x0" identifier != (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ; (assignment_expression "puVar2 = (undefined4 *)*puVar2" identifier = (cast_expression "(undefined4 *)*puVar2" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar2" * identifier))) ) (compound_statement "{\n    iVar3 = puVar2[2];\n    puVar8 = (undefined4 *)(iVar3 + 8);\n    do {\n      if ((code *)puVar8[2] != (code *)0x0) {\n        (*(code *)puVar8[2])(*puVar8);\n      }\n      puVar8 = puVar8 + 5;\n    } while ((undefined4 *)(iVar3 + 0x44) != puVar8);\n    if (iVar3 != 0) {\n      FUN_000428d0();\n    }\n  }" { (expression_statement "iVar3 = puVar2[2];" (assignment_expression "iVar3 = puVar2[2]" identifier = (subscript_expression "puVar2[2]" identifier [ number_literal ])) ;) (expression_statement "puVar8 = (undefined4 *)(iVar3 + 8);" (assignment_expression "puVar8 = (undefined4 *)(iVar3 + 8)" identifier = (cast_expression "(undefined4 *)(iVar3 + 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 8)" ( (binary_expression "iVar3 + 8" identifier + number_literal) )))) ;) (do_statement "do {\n      if ((code *)puVar8[2] != (code *)0x0) {\n        (*(code *)puVar8[2])(*puVar8);\n      }\n      puVar8 = puVar8 + 5;\n    } while ((undefined4 *)(iVar3 + 0x44) != puVar8);" do (compound_statement "{\n      if ((code *)puVar8[2] != (code *)0x0) {\n        (*(code *)puVar8[2])(*puVar8);\n      }\n      puVar8 = puVar8 + 5;\n    }" { (if_statement "if ((code *)puVar8[2] != (code *)0x0) {\n        (*(code *)puVar8[2])(*puVar8);\n      }" if (parenthesized_expression "((code *)puVar8[2] != (code *)0x0)" ( (binary_expression "(code *)puVar8[2] != (code *)0x0" (cast_expression "(code *)puVar8[2]" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "puVar8[2]" identifier [ number_literal ])) != (cast_expression "(code *)0x0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        (*(code *)puVar8[2])(*puVar8);\n      }" { (expression_statement "(*(code *)puVar8[2])(*puVar8);" (call_expression "(*(code *)puVar8[2])(*puVar8)" (parenthesized_expression "(*(code *)puVar8[2])" ( (pointer_expression "*(code *)puVar8[2]" * (cast_expression "(code *)puVar8[2]" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "puVar8[2]" identifier [ number_literal ]))) )) (argument_list "(*puVar8)" ( (pointer_expression "*puVar8" * identifier) ))) ;) })) (expression_statement "puVar8 = puVar8 + 5;" (assignment_expression "puVar8 = puVar8 + 5" identifier = (binary_expression "puVar8 + 5" identifier + number_literal)) ;) }) while (parenthesized_expression "((undefined4 *)(iVar3 + 0x44) != puVar8)" ( (binary_expression "(undefined4 *)(iVar3 + 0x44) != puVar8" (cast_expression "(undefined4 *)(iVar3 + 0x44)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0x44)" ( (binary_expression "iVar3 + 0x44" identifier + number_literal) ))) != identifier) )) ;) (if_statement "if (iVar3 != 0) {\n      FUN_000428d0();\n    }" if (parenthesized_expression "(iVar3 != 0)" ( (binary_expression "iVar3 != 0" identifier != number_literal) )) (compound_statement "{\n      FUN_000428d0();\n    }" { (expression_statement "FUN_000428d0();" (call_expression "FUN_000428d0()" identifier (argument_list "()" ( ))) ;) })) })) (expression_statement "FUN_000434c0();" (call_expression "FUN_000434c0()" identifier (argument_list "()" ( ))) ;) (for_statement "for (puVar2 = (undefined4 *)param_1[0x57]; puVar2 != (undefined4 *)0x0;\n      puVar2 = (undefined4 *)*puVar2) {\n    iVar3 = puVar2[2];\n    if (*(code **)(iVar3 + 0xc) != (code *)0x0) {\n      (**(code **)(iVar3 + 0xc))(*(undefined4 *)(iVar3 + 8));\n    }\n    if (*(int *)(iVar3 + 0x10) != 0) {\n      puVar1 = (uint *)(*(int *)(iVar3 + 0x10) + 0x24);\n      *puVar1 = *puVar1 | 2;\n      FUN_00057430();\n      *(undefined4 *)(iVar3 + 0x10) = 0;\n    }\n    FUN_000428d0();\n  }" for ( (assignment_expression "puVar2 = (undefined4 *)param_1[0x57]" identifier = (cast_expression "(undefined4 *)param_1[0x57]" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[0x57]" identifier [ number_literal ]))) ; (binary_expression "puVar2 != (undefined4 *)0x0" identifier != (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ; (assignment_expression "puVar2 = (undefined4 *)*puVar2" identifier = (cast_expression "(undefined4 *)*puVar2" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar2" * identifier))) ) (compound_statement "{\n    iVar3 = puVar2[2];\n    if (*(code **)(iVar3 + 0xc) != (code *)0x0) {\n      (**(code **)(iVar3 + 0xc))(*(undefined4 *)(iVar3 + 8));\n    }\n    if (*(int *)(iVar3 + 0x10) != 0) {\n      puVar1 = (uint *)(*(int *)(iVar3 + 0x10) + 0x24);\n      *puVar1 = *puVar1 | 2;\n      FUN_00057430();\n      *(undefined4 *)(iVar3 + 0x10) = 0;\n    }\n    FUN_000428d0();\n  }" { (expression_statement "iVar3 = puVar2[2];" (assignment_expression "iVar3 = puVar2[2]" identifier = (subscript_expression "puVar2[2]" identifier [ number_literal ])) ;) (if_statement "if (*(code **)(iVar3 + 0xc) != (code *)0x0) {\n      (**(code **)(iVar3 + 0xc))(*(undefined4 *)(iVar3 + 8));\n    }" if (parenthesized_expression "(*(code **)(iVar3 + 0xc) != (code *)0x0)" ( (binary_expression "*(code **)(iVar3 + 0xc) != (code *)0x0" (pointer_expression "*(code **)(iVar3 + 0xc)" * (cast_expression "(code **)(iVar3 + 0xc)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar3 + 0xc)" ( (binary_expression "iVar3 + 0xc" identifier + number_literal) )))) != (cast_expression "(code *)0x0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      (**(code **)(iVar3 + 0xc))(*(undefined4 *)(iVar3 + 8));\n    }" { (expression_statement "(**(code **)(iVar3 + 0xc))(*(undefined4 *)(iVar3 + 8));" (call_expression "(**(code **)(iVar3 + 0xc))(*(undefined4 *)(iVar3 + 8))" (parenthesized_expression "(**(code **)(iVar3 + 0xc))" ( (pointer_expression "**(code **)(iVar3 + 0xc)" * (pointer_expression "*(code **)(iVar3 + 0xc)" * (cast_expression "(code **)(iVar3 + 0xc)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar3 + 0xc)" ( (binary_expression "iVar3 + 0xc" identifier + number_literal) ))))) )) (argument_list "(*(undefined4 *)(iVar3 + 8))" ( (pointer_expression "*(undefined4 *)(iVar3 + 8)" * (cast_expression "(undefined4 *)(iVar3 + 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 8)" ( (binary_expression "iVar3 + 8" identifier + number_literal) )))) ))) ;) })) (if_statement "if (*(int *)(iVar3 + 0x10) != 0) {\n      puVar1 = (uint *)(*(int *)(iVar3 + 0x10) + 0x24);\n      *puVar1 = *puVar1 | 2;\n      FUN_00057430();\n      *(undefined4 *)(iVar3 + 0x10) = 0;\n    }" if (parenthesized_expression "(*(int *)(iVar3 + 0x10) != 0)" ( (binary_expression "*(int *)(iVar3 + 0x10) != 0" (pointer_expression "*(int *)(iVar3 + 0x10)" * (cast_expression "(int *)(iVar3 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0x10)" ( (binary_expression "iVar3 + 0x10" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n      puVar1 = (uint *)(*(int *)(iVar3 + 0x10) + 0x24);\n      *puVar1 = *puVar1 | 2;\n      FUN_00057430();\n      *(undefined4 *)(iVar3 + 0x10) = 0;\n    }" { (expression_statement "puVar1 = (uint *)(*(int *)(iVar3 + 0x10) + 0x24);" (assignment_expression "puVar1 = (uint *)(*(int *)(iVar3 + 0x10) + 0x24)" identifier = (cast_expression "(uint *)(*(int *)(iVar3 + 0x10) + 0x24)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(iVar3 + 0x10) + 0x24)" ( (binary_expression "*(int *)(iVar3 + 0x10) + 0x24" (pointer_expression "*(int *)(iVar3 + 0x10)" * (cast_expression "(int *)(iVar3 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0x10)" ( (binary_expression "iVar3 + 0x10" identifier + number_literal) )))) + number_literal) )))) ;) (expression_statement "*puVar1 = *puVar1 | 2;" (assignment_expression "*puVar1 = *puVar1 | 2" (pointer_expression "*puVar1" * identifier) = (binary_expression "*puVar1 | 2" (pointer_expression "*puVar1" * identifier) | number_literal)) ;) (expression_statement "FUN_00057430();" (call_expression "FUN_00057430()" identifier (argument_list "()" ( ))) ;) (expression_statement "*(undefined4 *)(iVar3 + 0x10) = 0;" (assignment_expression "*(undefined4 *)(iVar3 + 0x10) = 0" (pointer_expression "*(undefined4 *)(iVar3 + 0x10)" * (cast_expression "(undefined4 *)(iVar3 + 0x10)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0x10)" ( (binary_expression "iVar3 + 0x10" identifier + number_literal) )))) = number_literal) ;) })) (expression_statement "FUN_000428d0();" (call_expression "FUN_000428d0()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "FUN_000434c0();" (call_expression "FUN_000434c0()" identifier (argument_list "()" ( ))) ;) (expression_statement "param_1[0xf] = 0;" (assignment_expression "param_1[0xf] = 0" (subscript_expression "param_1[0xf]" identifier [ number_literal ]) = number_literal) ;) (if_statement "if (param_1[0x42] != 0) {\n    FUN_00045400();\n  }" if (parenthesized_expression "(param_1[0x42] != 0)" ( (binary_expression "param_1[0x42] != 0" (subscript_expression "param_1[0x42]" identifier [ number_literal ]) != number_literal) )) (compound_statement "{\n    FUN_00045400();\n  }" { (expression_statement "FUN_00045400();" (call_expression "FUN_00045400()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "FUN_00042f80();" (call_expression "FUN_00042f80()" identifier (argument_list "()" ( ))) ;) (if_statement "if (0 < param_1[0x2e]) {\n    iVar3 = 0;\n    do {\n      iVar6 = iVar3 * 4;\n      iVar3 = iVar3 + 1;\n      (**(code **)(*param_1 + 0x34))(*param_1,*(undefined4 *)(param_1[0x2f] + iVar6));\n    } while (iVar3 < param_1[0x2e]);\n  }" if (parenthesized_expression "(0 < param_1[0x2e])" ( (binary_expression "0 < param_1[0x2e]" number_literal < (subscript_expression "param_1[0x2e]" identifier [ number_literal ])) )) (compound_statement "{\n    iVar3 = 0;\n    do {\n      iVar6 = iVar3 * 4;\n      iVar3 = iVar3 + 1;\n      (**(code **)(*param_1 + 0x34))(*param_1,*(undefined4 *)(param_1[0x2f] + iVar6));\n    } while (iVar3 < param_1[0x2e]);\n  }" { (expression_statement "iVar3 = 0;" (assignment_expression "iVar3 = 0" identifier = number_literal) ;) (do_statement "do {\n      iVar6 = iVar3 * 4;\n      iVar3 = iVar3 + 1;\n      (**(code **)(*param_1 + 0x34))(*param_1,*(undefined4 *)(param_1[0x2f] + iVar6));\n    } while (iVar3 < param_1[0x2e]);" do (compound_statement "{\n      iVar6 = iVar3 * 4;\n      iVar3 = iVar3 + 1;\n      (**(code **)(*param_1 + 0x34))(*param_1,*(undefined4 *)(param_1[0x2f] + iVar6));\n    }" { (expression_statement "iVar6 = iVar3 * 4;" (assignment_expression "iVar6 = iVar3 * 4" identifier = (binary_expression "iVar3 * 4" identifier * number_literal)) ;) (expression_statement "iVar3 = iVar3 + 1;" (assignment_expression "iVar3 = iVar3 + 1" identifier = (binary_expression "iVar3 + 1" identifier + number_literal)) ;) (expression_statement "(**(code **)(*param_1 + 0x34))(*param_1,*(undefined4 *)(param_1[0x2f] + iVar6));" (call_expression "(**(code **)(*param_1 + 0x34))(*param_1,*(undefined4 *)(param_1[0x2f] + iVar6))" (parenthesized_expression "(**(code **)(*param_1 + 0x34))" ( (pointer_expression "**(code **)(*param_1 + 0x34)" * (pointer_expression "*(code **)(*param_1 + 0x34)" * (cast_expression "(code **)(*param_1 + 0x34)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x34)" ( (binary_expression "*param_1 + 0x34" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(*param_1,*(undefined4 *)(param_1[0x2f] + iVar6))" ( (pointer_expression "*param_1" * identifier) , (pointer_expression "*(undefined4 *)(param_1[0x2f] + iVar6)" * (cast_expression "(undefined4 *)(param_1[0x2f] + iVar6)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[0x2f] + iVar6)" ( (binary_expression "param_1[0x2f] + iVar6" (subscript_expression "param_1[0x2f]" identifier [ number_literal ]) + identifier) )))) ))) ;) }) while (parenthesized_expression "(iVar3 < param_1[0x2e])" ( (binary_expression "iVar3 < param_1[0x2e]" identifier < (subscript_expression "param_1[0x2e]" identifier [ number_literal ])) )) ;) })) (if_statement "if (param_1[0x2f] != 0) {\n    FUN_000428d0();\n  }" if (parenthesized_expression "(param_1[0x2f] != 0)" ( (binary_expression "param_1[0x2f] != 0" (subscript_expression "param_1[0x2f]" identifier [ number_literal ]) != number_literal) )) (compound_statement "{\n    FUN_000428d0();\n  }" { (expression_statement "FUN_000428d0();" (call_expression "FUN_000428d0()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "param_1[0x17] = -0x4aca86d0;" (assignment_expression "param_1[0x17] = -0x4aca86d0" (subscript_expression "param_1[0x17]" identifier [ number_literal ]) = number_literal) ;) (if_statement "if (*(int *)(param_1[4] + 0x1c) != 0) {\n    FUN_000428d0();\n  }" if (parenthesized_expression "(*(int *)(param_1[4] + 0x1c) != 0)" ( (binary_expression "*(int *)(param_1[4] + 0x1c) != 0" (pointer_expression "*(int *)(param_1[4] + 0x1c)" * (cast_expression "(int *)(param_1[4] + 0x1c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[4] + 0x1c)" ( (binary_expression "param_1[4] + 0x1c" (subscript_expression "param_1[4]" identifier [ number_literal ]) + number_literal) )))) != number_literal) )) (compound_statement "{\n    FUN_000428d0();\n  }" { (expression_statement "FUN_000428d0();" (call_expression "FUN_000428d0()" identifier (argument_list "()" ( ))) ;) })) (if_statement "if (param_1[3] == 0) {\n    param_1[0x17] = -0x60c3d2cd;\n  }\n  else {\n    (*DAT_0017c444)(param_1[3]);\n    param_1[0x17] = -0x60c3d2cd;\n    if (param_1[3] != 0) {\n      (*DAT_0017c438)(param_1[3]);\n    }\n  }" if (parenthesized_expression "(param_1[3] == 0)" ( (binary_expression "param_1[3] == 0" (subscript_expression "param_1[3]" identifier [ number_literal ]) == number_literal) )) (compound_statement "{\n    param_1[0x17] = -0x60c3d2cd;\n  }" { (expression_statement "param_1[0x17] = -0x60c3d2cd;" (assignment_expression "param_1[0x17] = -0x60c3d2cd" (subscript_expression "param_1[0x17]" identifier [ number_literal ]) = number_literal) ;) }) (else_clause "else {\n    (*DAT_0017c444)(param_1[3]);\n    param_1[0x17] = -0x60c3d2cd;\n    if (param_1[3] != 0) {\n      (*DAT_0017c438)(param_1[3]);\n    }\n  }" else (compound_statement "{\n    (*DAT_0017c444)(param_1[3]);\n    param_1[0x17] = -0x60c3d2cd;\n    if (param_1[3] != 0) {\n      (*DAT_0017c438)(param_1[3]);\n    }\n  }" { (expression_statement "(*DAT_0017c444)(param_1[3]);" (call_expression "(*DAT_0017c444)(param_1[3])" (parenthesized_expression "(*DAT_0017c444)" ( (pointer_expression "*DAT_0017c444" * identifier) )) (argument_list "(param_1[3])" ( (subscript_expression "param_1[3]" identifier [ number_literal ]) ))) ;) (expression_statement "param_1[0x17] = -0x60c3d2cd;" (assignment_expression "param_1[0x17] = -0x60c3d2cd" (subscript_expression "param_1[0x17]" identifier [ number_literal ]) = number_literal) ;) (if_statement "if (param_1[3] != 0) {\n      (*DAT_0017c438)(param_1[3]);\n    }" if (parenthesized_expression "(param_1[3] != 0)" ( (binary_expression "param_1[3] != 0" (subscript_expression "param_1[3]" identifier [ number_literal ]) != number_literal) )) (compound_statement "{\n      (*DAT_0017c438)(param_1[3]);\n    }" { (expression_statement "(*DAT_0017c438)(param_1[3]);" (call_expression "(*DAT_0017c438)(param_1[3])" (parenthesized_expression "(*DAT_0017c438)" ( (pointer_expression "*DAT_0017c438" * identifier) )) (argument_list "(param_1[3])" ( (subscript_expression "param_1[3]" identifier [ number_literal ]) ))) ;) })) }))) (if_statement "if (*(char *)((int)param_1 + 0x11a) != '\0') {\n    FUN_00042800(param_1[0x4d]);\n  }" if (parenthesized_expression "(*(char *)((int)param_1 + 0x11a) != '\0')" ( (binary_expression "*(char *)((int)param_1 + 0x11a) != '\0'" (pointer_expression "*(char *)((int)param_1 + 0x11a)" * (cast_expression "(char *)((int)param_1 + 0x11a)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + 0x11a)" ( (binary_expression "(int)param_1 + 0x11a" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    FUN_00042800(param_1[0x4d]);\n  }" { (expression_statement "FUN_00042800(param_1[0x4d]);" (call_expression "FUN_00042800(param_1[0x4d])" identifier (argument_list "(param_1[0x4d])" ( (subscript_expression "param_1[0x4d]" identifier [ number_literal ]) ))) ;) })) (expression_statement "FUN_00042800(param_1);" (call_expression "FUN_00042800(param_1)" identifier (argument_list "(param_1)" ( identifier ))) ;) (return_statement "return;" return ;) })))
(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 (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) != LIT) )) || (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) != LIT) ))) )) || (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) , (binary_expression IDENT != LIT)) ))) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) != LIT) )) (compound_statement { (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( (subscript_expression IDENT [ LIT ]) ))) ;) })) (return_statement return ;) })) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (while_statement while (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) })) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) )))) = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < (subscript_expression IDENT [ LIT ])) )) (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT * LIT) + IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) })) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT < (subscript_expression IDENT [ LIT ])) )) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ))) ;) })) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression & IDENT))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) (else_clause else (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (goto_statement goto statement_identifier ;)) }) while (parenthesized_expression ( (binary_expression IDENT != IDENT) )) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }))) (expression_statement (assignment_expression (pointer_expression * IDENT) = (subscript_expression IDENT [ LIT ])) ;) })) (labeled_statement statement_identifier : (expression_statement (call_expression IDENT (argument_list ( ))) ;)) (for_statement for ( (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ; (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ; (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (do_statement do (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) }) while (parenthesized_expression ( (binary_expression IDENT != LIT) )) ;) })) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (for_statement for ( (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ; (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ; (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) (do_statement do (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])) != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) )) (argument_list ( (pointer_expression * IDENT) ))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))) != IDENT) )) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) })) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (for_statement for ( (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ; (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ; (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (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 ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (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) )))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression (pointer_expression * IDENT) | LIT)) ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) })) (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < (subscript_expression IDENT [ LIT ])) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT * LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( (pointer_expression * IDENT) , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + IDENT) )))) ))) ;) }) while (parenthesized_expression ( (binary_expression IDENT < (subscript_expression IDENT [ LIT ])) )) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) )))) != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) == LIT) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) }) (else_clause else (compound_statement { (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( (subscript_expression IDENT [ LIT ]) ))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) != LIT) )) (compound_statement { (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( (subscript_expression IDENT [ LIT ]) ))) ;) })) }))) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) )))) != (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (subscript_expression IDENT [ LIT ]) ))) ;) })) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (return_statement return ;) })))
(function_definition "void __regparm3 FUN_000a7990(int *param_1)\n\n{\n  uint *puVar1;\n  undefined4 *puVar2;\n  int iVar3;\n  int *piVar4;\n  int *piVar5;\n  int iVar6;\n  int iVar7;\n  undefined4 *puVar8;\n  \n  if (((param_1[0x17] != 0x64cffc7f) || (param_1[1] != 0)) || (iVar3 = FUN_0004e1f0(), iVar3 != 0))\n  {\n    if (param_1[3] != 0) {\n      (*DAT_0017c444)(param_1[3]);\n    }\n    return;\n  }\n  FUN_000a1a50();\n  iVar3 = param_1[0x70];\n  while (iVar3 != 0) {\n    param_1[0x70] = *(int *)(iVar3 + 0x14);\n    FUN_000428d0();\n    iVar3 = param_1[0x70];\n  }\n  iVar3 = param_1[4];\n  *(undefined1 *)((int)param_1 + 0x53) = 0;\n  iVar6 = 0;\n  param_1[0x72] = 0;\n  param_1[0x73] = 0;\n  if (0 < param_1[5]) {\n    do {\n      iVar7 = iVar6 * 0x10 + iVar3;\n      if (*(int *)(iVar7 + 4) != 0) {\n        FUN_000a77a0();\n        *(undefined4 *)(iVar7 + 4) = 0;\n        if (iVar6 != 1) {\n          *(undefined4 *)(iVar7 + 0xc) = 0;\n        }\n        iVar3 = param_1[4];\n      }\n      iVar6 = iVar6 + 1;\n    } while (iVar6 < param_1[5]);\n  }\n  if (*(int *)(iVar3 + 0x1c) != 0) {\n    FUN_000579b0(*(int *)(iVar3 + 0x1c));\n  }\n  FUN_00043270();\n  FUN_0004bc40();\n  FUN_00043780();\n  FUN_0003ad60();\n  if (DAT_0017db10 != (int *)0x0) {\n    piVar4 = DAT_0017db10;\n    if (param_1 == DAT_0017db10) {\n      piVar5 = (int *)&DAT_0017db10;\n      piVar4 = param_1;\n    }\n    else {\n      do {\n        piVar5 = piVar4;\n        piVar4 = (int *)piVar5[0x7d];\n        if (piVar4 == (int *)0x0) goto LAB_000a7acc;\n      } while (param_1 != piVar4);\n      piVar5 = piVar5 + 0x7d;\n    }\n    *piVar5 = piVar4[0x7d];\n  }\nLAB_000a7acc:\n  FUN_0003ada0();\n  for (puVar2 = (undefined4 *)param_1[0x5e]; puVar2 != (undefined4 *)0x0;\n      puVar2 = (undefined4 *)*puVar2) {\n    iVar3 = puVar2[2];\n    do {\n      FUN_0004e1a0();\n      iVar3 = *(int *)(iVar3 + 0xc);\n      FUN_000428d0();\n    } while (iVar3 != 0);\n  }\n  FUN_000434c0();\n  for (puVar2 = (undefined4 *)param_1[0x62]; puVar2 != (undefined4 *)0x0;\n      puVar2 = (undefined4 *)*puVar2) {\n    iVar3 = puVar2[2];\n    puVar8 = (undefined4 *)(iVar3 + 8);\n    do {\n      if ((code *)puVar8[2] != (code *)0x0) {\n        (*(code *)puVar8[2])(*puVar8);\n      }\n      puVar8 = puVar8 + 5;\n    } while ((undefined4 *)(iVar3 + 0x44) != puVar8);\n    if (iVar3 != 0) {\n      FUN_000428d0();\n    }\n  }\n  FUN_000434c0();\n  for (puVar2 = (undefined4 *)param_1[0x57]; puVar2 != (undefined4 *)0x0;\n      puVar2 = (undefined4 *)*puVar2) {\n    iVar3 = puVar2[2];\n    if (*(code **)(iVar3 + 0xc) != (code *)0x0) {\n      (**(code **)(iVar3 + 0xc))(*(undefined4 *)(iVar3 + 8));\n    }\n    if (*(int *)(iVar3 + 0x10) != 0) {\n      puVar1 = (uint *)(*(int *)(iVar3 + 0x10) + 0x24);\n      *puVar1 = *puVar1 | 2;\n      FUN_00057430();\n      *(undefined4 *)(iVar3 + 0x10) = 0;\n    }\n    FUN_000428d0();\n  }\n  FUN_000434c0();\n  param_1[0xf] = 0;\n  if (param_1[0x42] != 0) {\n    FUN_00045400();\n  }\n  FUN_00042f80();\n  if (0 < param_1[0x2e]) {\n    iVar3 = 0;\n    do {\n      iVar6 = iVar3 * 4;\n      iVar3 = iVar3 + 1;\n      (**(code **)(*param_1 + 0x34))(*param_1,*(undefined4 *)(param_1[0x2f] + iVar6));\n    } while (iVar3 < param_1[0x2e]);\n  }\n  if (param_1[0x2f] != 0) {\n    FUN_000428d0();\n  }\n  param_1[0x17] = -0x4aca86d0;\n  if (*(int *)(param_1[4] + 0x1c) != 0) {\n    FUN_000428d0();\n  }\n  if (param_1[3] == 0) {\n    param_1[0x17] = -0x60c3d2cd;\n  }\n  else {\n    (*DAT_0017c444)(param_1[3]);\n    param_1[0x17] = -0x60c3d2cd;\n    if (param_1[3] != 0) {\n      (*DAT_0017c438)(param_1[3]);\n    }\n  }\n  if (*(char *)((int)param_1 + 0x11a) != '\0') {\n    FUN_00042800(param_1[0x4d]);\n  }\n  FUN_00042800(param_1);\n  return;\n}" (primitive_type "void") (ERROR "__regparm3" (identifier "__regparm3")) (function_declarator "FUN_000a7990(int *param_1)" (identifier "FUN_000a7990") (parameter_list "(int *param_1)" (( "(") (parameter_declaration "int *param_1" (primitive_type "int") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) () ")"))) (compound_statement "{\n  uint *puVar1;\n  undefined4 *puVar2;\n  int iVar3;\n  int *piVar4;\n  int *piVar5;\n  int iVar6;\n  int iVar7;\n  undefined4 *puVar8;\n  \n  if (((param_1[0x17] != 0x64cffc7f) || (param_1[1] != 0)) || (iVar3 = FUN_0004e1f0(), iVar3 != 0))\n  {\n    if (param_1[3] != 0) {\n      (*DAT_0017c444)(param_1[3]);\n    }\n    return;\n  }\n  FUN_000a1a50();\n  iVar3 = param_1[0x70];\n  while (iVar3 != 0) {\n    param_1[0x70] = *(int *)(iVar3 + 0x14);\n    FUN_000428d0();\n    iVar3 = param_1[0x70];\n  }\n  iVar3 = param_1[4];\n  *(undefined1 *)((int)param_1 + 0x53) = 0;\n  iVar6 = 0;\n  param_1[0x72] = 0;\n  param_1[0x73] = 0;\n  if (0 < param_1[5]) {\n    do {\n      iVar7 = iVar6 * 0x10 + iVar3;\n      if (*(int *)(iVar7 + 4) != 0) {\n        FUN_000a77a0();\n        *(undefined4 *)(iVar7 + 4) = 0;\n        if (iVar6 != 1) {\n          *(undefined4 *)(iVar7 + 0xc) = 0;\n        }\n        iVar3 = param_1[4];\n      }\n      iVar6 = iVar6 + 1;\n    } while (iVar6 < param_1[5]);\n  }\n  if (*(int *)(iVar3 + 0x1c) != 0) {\n    FUN_000579b0(*(int *)(iVar3 + 0x1c));\n  }\n  FUN_00043270();\n  FUN_0004bc40();\n  FUN_00043780();\n  FUN_0003ad60();\n  if (DAT_0017db10 != (int *)0x0) {\n    piVar4 = DAT_0017db10;\n    if (param_1 == DAT_0017db10) {\n      piVar5 = (int *)&DAT_0017db10;\n      piVar4 = param_1;\n    }\n    else {\n      do {\n        piVar5 = piVar4;\n        piVar4 = (int *)piVar5[0x7d];\n        if (piVar4 == (int *)0x0) goto LAB_000a7acc;\n      } while (param_1 != piVar4);\n      piVar5 = piVar5 + 0x7d;\n    }\n    *piVar5 = piVar4[0x7d];\n  }\nLAB_000a7acc:\n  FUN_0003ada0();\n  for (puVar2 = (undefined4 *)param_1[0x5e]; puVar2 != (undefined4 *)0x0;\n      puVar2 = (undefined4 *)*puVar2) {\n    iVar3 = puVar2[2];\n    do {\n      FUN_0004e1a0();\n      iVar3 = *(int *)(iVar3 + 0xc);\n      FUN_000428d0();\n    } while (iVar3 != 0);\n  }\n  FUN_000434c0();\n  for (puVar2 = (undefined4 *)param_1[0x62]; puVar2 != (undefined4 *)0x0;\n      puVar2 = (undefined4 *)*puVar2) {\n    iVar3 = puVar2[2];\n    puVar8 = (undefined4 *)(iVar3 + 8);\n    do {\n      if ((code *)puVar8[2] != (code *)0x0) {\n        (*(code *)puVar8[2])(*puVar8);\n      }\n      puVar8 = puVar8 + 5;\n    } while ((undefined4 *)(iVar3 + 0x44) != puVar8);\n    if (iVar3 != 0) {\n      FUN_000428d0();\n    }\n  }\n  FUN_000434c0();\n  for (puVar2 = (undefined4 *)param_1[0x57]; puVar2 != (undefined4 *)0x0;\n      puVar2 = (undefined4 *)*puVar2) {\n    iVar3 = puVar2[2];\n    if (*(code **)(iVar3 + 0xc) != (code *)0x0) {\n      (**(code **)(iVar3 + 0xc))(*(undefined4 *)(iVar3 + 8));\n    }\n    if (*(int *)(iVar3 + 0x10) != 0) {\n      puVar1 = (uint *)(*(int *)(iVar3 + 0x10) + 0x24);\n      *puVar1 = *puVar1 | 2;\n      FUN_00057430();\n      *(undefined4 *)(iVar3 + 0x10) = 0;\n    }\n    FUN_000428d0();\n  }\n  FUN_000434c0();\n  param_1[0xf] = 0;\n  if (param_1[0x42] != 0) {\n    FUN_00045400();\n  }\n  FUN_00042f80();\n  if (0 < param_1[0x2e]) {\n    iVar3 = 0;\n    do {\n      iVar6 = iVar3 * 4;\n      iVar3 = iVar3 + 1;\n      (**(code **)(*param_1 + 0x34))(*param_1,*(undefined4 *)(param_1[0x2f] + iVar6));\n    } while (iVar3 < param_1[0x2e]);\n  }\n  if (param_1[0x2f] != 0) {\n    FUN_000428d0();\n  }\n  param_1[0x17] = -0x4aca86d0;\n  if (*(int *)(param_1[4] + 0x1c) != 0) {\n    FUN_000428d0();\n  }\n  if (param_1[3] == 0) {\n    param_1[0x17] = -0x60c3d2cd;\n  }\n  else {\n    (*DAT_0017c444)(param_1[3]);\n    param_1[0x17] = -0x60c3d2cd;\n    if (param_1[3] != 0) {\n      (*DAT_0017c438)(param_1[3]);\n    }\n  }\n  if (*(char *)((int)param_1 + 0x11a) != '\0') {\n    FUN_00042800(param_1[0x4d]);\n  }\n  FUN_00042800(param_1);\n  return;\n}" ({ "{") (declaration "uint *puVar1;" (type_identifier "uint") (pointer_declarator "*puVar1" (* "*") (identifier "puVar1")) (; ";")) (declaration "undefined4 *puVar2;" (type_identifier "undefined4") (pointer_declarator "*puVar2" (* "*") (identifier "puVar2")) (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (declaration "int *piVar4;" (primitive_type "int") (pointer_declarator "*piVar4" (* "*") (identifier "piVar4")) (; ";")) (declaration "int *piVar5;" (primitive_type "int") (pointer_declarator "*piVar5" (* "*") (identifier "piVar5")) (; ";")) (declaration "int iVar6;" (primitive_type "int") (identifier "iVar6") (; ";")) (declaration "int iVar7;" (primitive_type "int") (identifier "iVar7") (; ";")) (declaration "undefined4 *puVar8;" (type_identifier "undefined4") (pointer_declarator "*puVar8" (* "*") (identifier "puVar8")) (; ";")) (if_statement "if (((param_1[0x17] != 0x64cffc7f) || (param_1[1] != 0)) || (iVar3 = FUN_0004e1f0(), iVar3 != 0))\n  {\n    if (param_1[3] != 0) {\n      (*DAT_0017c444)(param_1[3]);\n    }\n    return;\n  }" (if "if") (parenthesized_expression "(((param_1[0x17] != 0x64cffc7f) || (param_1[1] != 0)) || (iVar3 = FUN_0004e1f0(), iVar3 != 0))" (( "(") (binary_expression "((param_1[0x17] != 0x64cffc7f) || (param_1[1] != 0)) || (iVar3 = FUN_0004e1f0(), iVar3 != 0)" (parenthesized_expression "((param_1[0x17] != 0x64cffc7f) || (param_1[1] != 0))" (( "(") (binary_expression "(param_1[0x17] != 0x64cffc7f) || (param_1[1] != 0)" (parenthesized_expression "(param_1[0x17] != 0x64cffc7f)" (( "(") (binary_expression "param_1[0x17] != 0x64cffc7f" (subscript_expression "param_1[0x17]" (identifier "param_1") ([ "[") (number_literal "0x17") (] "]")) (!= "!=") (number_literal "0x64cffc7f")) () ")")) (|| "||") (parenthesized_expression "(param_1[1] != 0)" (( "(") (binary_expression "param_1[1] != 0" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (!= "!=") (number_literal "0")) () ")"))) () ")")) (|| "||") (parenthesized_expression "(iVar3 = FUN_0004e1f0(), iVar3 != 0)" (( "(") (comma_expression "iVar3 = FUN_0004e1f0(), iVar3 != 0" (assignment_expression "iVar3 = FUN_0004e1f0()" (identifier "iVar3") (= "=") (call_expression "FUN_0004e1f0()" (identifier "FUN_0004e1f0") (argument_list "()" (( "(") () ")")))) (, ",") (binary_expression "iVar3 != 0" (identifier "iVar3") (!= "!=") (number_literal "0"))) () ")"))) () ")")) (compound_statement "{\n    if (param_1[3] != 0) {\n      (*DAT_0017c444)(param_1[3]);\n    }\n    return;\n  }" ({ "{") (if_statement "if (param_1[3] != 0) {\n      (*DAT_0017c444)(param_1[3]);\n    }" (if "if") (parenthesized_expression "(param_1[3] != 0)" (( "(") (binary_expression "param_1[3] != 0" (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      (*DAT_0017c444)(param_1[3]);\n    }" ({ "{") (expression_statement "(*DAT_0017c444)(param_1[3]);" (call_expression "(*DAT_0017c444)(param_1[3])" (parenthesized_expression "(*DAT_0017c444)" (( "(") (pointer_expression "*DAT_0017c444" (* "*") (identifier "DAT_0017c444")) () ")")) (argument_list "(param_1[3])" (( "(") (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]")) () ")"))) (; ";")) (} "}"))) (return_statement "return;" (return "return") (; ";")) (} "}"))) (expression_statement "FUN_000a1a50();" (call_expression "FUN_000a1a50()" (identifier "FUN_000a1a50") (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "iVar3 = param_1[0x70];" (assignment_expression "iVar3 = param_1[0x70]" (identifier "iVar3") (= "=") (subscript_expression "param_1[0x70]" (identifier "param_1") ([ "[") (number_literal "0x70") (] "]"))) (; ";")) (while_statement "while (iVar3 != 0) {\n    param_1[0x70] = *(int *)(iVar3 + 0x14);\n    FUN_000428d0();\n    iVar3 = param_1[0x70];\n  }" (while "while") (parenthesized_expression "(iVar3 != 0)" (( "(") (binary_expression "iVar3 != 0" (identifier "iVar3") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    param_1[0x70] = *(int *)(iVar3 + 0x14);\n    FUN_000428d0();\n    iVar3 = param_1[0x70];\n  }" ({ "{") (expression_statement "param_1[0x70] = *(int *)(iVar3 + 0x14);" (assignment_expression "param_1[0x70] = *(int *)(iVar3 + 0x14)" (subscript_expression "param_1[0x70]" (identifier "param_1") ([ "[") (number_literal "0x70") (] "]")) (= "=") (pointer_expression "*(int *)(iVar3 + 0x14)" (* "*") (cast_expression "(int *)(iVar3 + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar3 + 0x14)" (( "(") (binary_expression "iVar3 + 0x14" (identifier "iVar3") (+ "+") (number_literal "0x14")) () ")"))))) (; ";")) (expression_statement "FUN_000428d0();" (call_expression "FUN_000428d0()" (identifier "FUN_000428d0") (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "iVar3 = param_1[0x70];" (assignment_expression "iVar3 = param_1[0x70]" (identifier "iVar3") (= "=") (subscript_expression "param_1[0x70]" (identifier "param_1") ([ "[") (number_literal "0x70") (] "]"))) (; ";")) (} "}"))) (expression_statement "iVar3 = param_1[4];" (assignment_expression "iVar3 = param_1[4]" (identifier "iVar3") (= "=") (subscript_expression "param_1[4]" (identifier "param_1") ([ "[") (number_literal "4") (] "]"))) (; ";")) (expression_statement "*(undefined1 *)((int)param_1 + 0x53) = 0;" (assignment_expression "*(undefined1 *)((int)param_1 + 0x53) = 0" (pointer_expression "*(undefined1 *)((int)param_1 + 0x53)" (* "*") (cast_expression "(undefined1 *)((int)param_1 + 0x53)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)param_1 + 0x53)" (( "(") (binary_expression "(int)param_1 + 0x53" (cast_expression "(int)param_1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_1")) (+ "+") (number_literal "0x53")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" (identifier "iVar6") (= "=") (number_literal "0")) (; ";")) (expression_statement "param_1[0x72] = 0;" (assignment_expression "param_1[0x72] = 0" (subscript_expression "param_1[0x72]" (identifier "param_1") ([ "[") (number_literal "0x72") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "param_1[0x73] = 0;" (assignment_expression "param_1[0x73] = 0" (subscript_expression "param_1[0x73]" (identifier "param_1") ([ "[") (number_literal "0x73") (] "]")) (= "=") (number_literal "0")) (; ";")) (if_statement "if (0 < param_1[5]) {\n    do {\n      iVar7 = iVar6 * 0x10 + iVar3;\n      if (*(int *)(iVar7 + 4) != 0) {\n        FUN_000a77a0();\n        *(undefined4 *)(iVar7 + 4) = 0;\n        if (iVar6 != 1) {\n          *(undefined4 *)(iVar7 + 0xc) = 0;\n        }\n        iVar3 = param_1[4];\n      }\n      iVar6 = iVar6 + 1;\n    } while (iVar6 < param_1[5]);\n  }" (if "if") (parenthesized_expression "(0 < param_1[5])" (( "(") (binary_expression "0 < param_1[5]" (number_literal "0") (< "<") (subscript_expression "param_1[5]" (identifier "param_1") ([ "[") (number_literal "5") (] "]"))) () ")")) (compound_statement "{\n    do {\n      iVar7 = iVar6 * 0x10 + iVar3;\n      if (*(int *)(iVar7 + 4) != 0) {\n        FUN_000a77a0();\n        *(undefined4 *)(iVar7 + 4) = 0;\n        if (iVar6 != 1) {\n          *(undefined4 *)(iVar7 + 0xc) = 0;\n        }\n        iVar3 = param_1[4];\n      }\n      iVar6 = iVar6 + 1;\n    } while (iVar6 < param_1[5]);\n  }" ({ "{") (do_statement "do {\n      iVar7 = iVar6 * 0x10 + iVar3;\n      if (*(int *)(iVar7 + 4) != 0) {\n        FUN_000a77a0();\n        *(undefined4 *)(iVar7 + 4) = 0;\n        if (iVar6 != 1) {\n          *(undefined4 *)(iVar7 + 0xc) = 0;\n        }\n        iVar3 = param_1[4];\n      }\n      iVar6 = iVar6 + 1;\n    } while (iVar6 < param_1[5]);" (do "do") (compound_statement "{\n      iVar7 = iVar6 * 0x10 + iVar3;\n      if (*(int *)(iVar7 + 4) != 0) {\n        FUN_000a77a0();\n        *(undefined4 *)(iVar7 + 4) = 0;\n        if (iVar6 != 1) {\n          *(undefined4 *)(iVar7 + 0xc) = 0;\n        }\n        iVar3 = param_1[4];\n      }\n      iVar6 = iVar6 + 1;\n    }" ({ "{") (expression_statement "iVar7 = iVar6 * 0x10 + iVar3;" (assignment_expression "iVar7 = iVar6 * 0x10 + iVar3" (identifier "iVar7") (= "=") (binary_expression "iVar6 * 0x10 + iVar3" (binary_expression "iVar6 * 0x10" (identifier "iVar6") (* "*") (number_literal "0x10")) (+ "+") (identifier "iVar3"))) (; ";")) (if_statement "if (*(int *)(iVar7 + 4) != 0) {\n        FUN_000a77a0();\n        *(undefined4 *)(iVar7 + 4) = 0;\n        if (iVar6 != 1) {\n          *(undefined4 *)(iVar7 + 0xc) = 0;\n        }\n        iVar3 = param_1[4];\n      }" (if "if") (parenthesized_expression "(*(int *)(iVar7 + 4) != 0)" (( "(") (binary_expression "*(int *)(iVar7 + 4) != 0" (pointer_expression "*(int *)(iVar7 + 4)" (* "*") (cast_expression "(int *)(iVar7 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar7 + 4)" (( "(") (binary_expression "iVar7 + 4" (identifier "iVar7") (+ "+") (number_literal "4")) () ")")))) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        FUN_000a77a0();\n        *(undefined4 *)(iVar7 + 4) = 0;\n        if (iVar6 != 1) {\n          *(undefined4 *)(iVar7 + 0xc) = 0;\n        }\n        iVar3 = param_1[4];\n      }" ({ "{") (expression_statement "FUN_000a77a0();" (call_expression "FUN_000a77a0()" (identifier "FUN_000a77a0") (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "*(undefined4 *)(iVar7 + 4) = 0;" (assignment_expression "*(undefined4 *)(iVar7 + 4) = 0" (pointer_expression "*(undefined4 *)(iVar7 + 4)" (* "*") (cast_expression "(undefined4 *)(iVar7 + 4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar7 + 4)" (( "(") (binary_expression "iVar7 + 4" (identifier "iVar7") (+ "+") (number_literal "4")) () ")")))) (= "=") (number_literal "0")) (; ";")) (if_statement "if (iVar6 != 1) {\n          *(undefined4 *)(iVar7 + 0xc) = 0;\n        }" (if "if") (parenthesized_expression "(iVar6 != 1)" (( "(") (binary_expression "iVar6 != 1" (identifier "iVar6") (!= "!=") (number_literal "1")) () ")")) (compound_statement "{\n          *(undefined4 *)(iVar7 + 0xc) = 0;\n        }" ({ "{") (expression_statement "*(undefined4 *)(iVar7 + 0xc) = 0;" (assignment_expression "*(undefined4 *)(iVar7 + 0xc) = 0" (pointer_expression "*(undefined4 *)(iVar7 + 0xc)" (* "*") (cast_expression "(undefined4 *)(iVar7 + 0xc)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar7 + 0xc)" (( "(") (binary_expression "iVar7 + 0xc" (identifier "iVar7") (+ "+") (number_literal "0xc")) () ")")))) (= "=") (number_literal "0")) (; ";")) (} "}"))) (expression_statement "iVar3 = param_1[4];" (assignment_expression "iVar3 = param_1[4]" (identifier "iVar3") (= "=") (subscript_expression "param_1[4]" (identifier "param_1") ([ "[") (number_literal "4") (] "]"))) (; ";")) (} "}"))) (expression_statement "iVar6 = iVar6 + 1;" (assignment_expression "iVar6 = iVar6 + 1" (identifier "iVar6") (= "=") (binary_expression "iVar6 + 1" (identifier "iVar6") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar6 < param_1[5])" (( "(") (binary_expression "iVar6 < param_1[5]" (identifier "iVar6") (< "<") (subscript_expression "param_1[5]" (identifier "param_1") ([ "[") (number_literal "5") (] "]"))) () ")")) (; ";")) (} "}"))) (if_statement "if (*(int *)(iVar3 + 0x1c) != 0) {\n    FUN_000579b0(*(int *)(iVar3 + 0x1c));\n  }" (if "if") (parenthesized_expression "(*(int *)(iVar3 + 0x1c) != 0)" (( "(") (binary_expression "*(int *)(iVar3 + 0x1c) != 0" (pointer_expression "*(int *)(iVar3 + 0x1c)" (* "*") (cast_expression "(int *)(iVar3 + 0x1c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar3 + 0x1c)" (( "(") (binary_expression "iVar3 + 0x1c" (identifier "iVar3") (+ "+") (number_literal "0x1c")) () ")")))) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    FUN_000579b0(*(int *)(iVar3 + 0x1c));\n  }" ({ "{") (expression_statement "FUN_000579b0(*(int *)(iVar3 + 0x1c));" (call_expression "FUN_000579b0(*(int *)(iVar3 + 0x1c))" (identifier "FUN_000579b0") (argument_list "(*(int *)(iVar3 + 0x1c))" (( "(") (pointer_expression "*(int *)(iVar3 + 0x1c)" (* "*") (cast_expression "(int *)(iVar3 + 0x1c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar3 + 0x1c)" (( "(") (binary_expression "iVar3 + 0x1c" (identifier "iVar3") (+ "+") (number_literal "0x1c")) () ")")))) () ")"))) (; ";")) (} "}"))) (expression_statement "FUN_00043270();" (call_expression "FUN_00043270()" (identifier "FUN_00043270") (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "FUN_0004bc40();" (call_expression "FUN_0004bc40()" (identifier "FUN_0004bc40") (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "FUN_00043780();" (call_expression "FUN_00043780()" (identifier "FUN_00043780") (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "FUN_0003ad60();" (call_expression "FUN_0003ad60()" (identifier "FUN_0003ad60") (argument_list "()" (( "(") () ")"))) (; ";")) (if_statement "if (DAT_0017db10 != (int *)0x0) {\n    piVar4 = DAT_0017db10;\n    if (param_1 == DAT_0017db10) {\n      piVar5 = (int *)&DAT_0017db10;\n      piVar4 = param_1;\n    }\n    else {\n      do {\n        piVar5 = piVar4;\n        piVar4 = (int *)piVar5[0x7d];\n        if (piVar4 == (int *)0x0) goto LAB_000a7acc;\n      } while (param_1 != piVar4);\n      piVar5 = piVar5 + 0x7d;\n    }\n    *piVar5 = piVar4[0x7d];\n  }" (if "if") (parenthesized_expression "(DAT_0017db10 != (int *)0x0)" (( "(") (binary_expression "DAT_0017db10 != (int *)0x0" (identifier "DAT_0017db10") (!= "!=") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    piVar4 = DAT_0017db10;\n    if (param_1 == DAT_0017db10) {\n      piVar5 = (int *)&DAT_0017db10;\n      piVar4 = param_1;\n    }\n    else {\n      do {\n        piVar5 = piVar4;\n        piVar4 = (int *)piVar5[0x7d];\n        if (piVar4 == (int *)0x0) goto LAB_000a7acc;\n      } while (param_1 != piVar4);\n      piVar5 = piVar5 + 0x7d;\n    }\n    *piVar5 = piVar4[0x7d];\n  }" ({ "{") (expression_statement "piVar4 = DAT_0017db10;" (assignment_expression "piVar4 = DAT_0017db10" (identifier "piVar4") (= "=") (identifier "DAT_0017db10")) (; ";")) (if_statement "if (param_1 == DAT_0017db10) {\n      piVar5 = (int *)&DAT_0017db10;\n      piVar4 = param_1;\n    }\n    else {\n      do {\n        piVar5 = piVar4;\n        piVar4 = (int *)piVar5[0x7d];\n        if (piVar4 == (int *)0x0) goto LAB_000a7acc;\n      } while (param_1 != piVar4);\n      piVar5 = piVar5 + 0x7d;\n    }" (if "if") (parenthesized_expression "(param_1 == DAT_0017db10)" (( "(") (binary_expression "param_1 == DAT_0017db10" (identifier "param_1") (== "==") (identifier "DAT_0017db10")) () ")")) (compound_statement "{\n      piVar5 = (int *)&DAT_0017db10;\n      piVar4 = param_1;\n    }" ({ "{") (expression_statement "piVar5 = (int *)&DAT_0017db10;" (assignment_expression "piVar5 = (int *)&DAT_0017db10" (identifier "piVar5") (= "=") (cast_expression "(int *)&DAT_0017db10" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "&DAT_0017db10" (& "&") (identifier "DAT_0017db10")))) (; ";")) (expression_statement "piVar4 = param_1;" (assignment_expression "piVar4 = param_1" (identifier "piVar4") (= "=") (identifier "param_1")) (; ";")) (} "}")) (else_clause "else {\n      do {\n        piVar5 = piVar4;\n        piVar4 = (int *)piVar5[0x7d];\n        if (piVar4 == (int *)0x0) goto LAB_000a7acc;\n      } while (param_1 != piVar4);\n      piVar5 = piVar5 + 0x7d;\n    }" (else "else") (compound_statement "{\n      do {\n        piVar5 = piVar4;\n        piVar4 = (int *)piVar5[0x7d];\n        if (piVar4 == (int *)0x0) goto LAB_000a7acc;\n      } while (param_1 != piVar4);\n      piVar5 = piVar5 + 0x7d;\n    }" ({ "{") (do_statement "do {\n        piVar5 = piVar4;\n        piVar4 = (int *)piVar5[0x7d];\n        if (piVar4 == (int *)0x0) goto LAB_000a7acc;\n      } while (param_1 != piVar4);" (do "do") (compound_statement "{\n        piVar5 = piVar4;\n        piVar4 = (int *)piVar5[0x7d];\n        if (piVar4 == (int *)0x0) goto LAB_000a7acc;\n      }" ({ "{") (expression_statement "piVar5 = piVar4;" (assignment_expression "piVar5 = piVar4" (identifier "piVar5") (= "=") (identifier "piVar4")) (; ";")) (expression_statement "piVar4 = (int *)piVar5[0x7d];" (assignment_expression "piVar4 = (int *)piVar5[0x7d]" (identifier "piVar4") (= "=") (cast_expression "(int *)piVar5[0x7d]" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "piVar5[0x7d]" (identifier "piVar5") ([ "[") (number_literal "0x7d") (] "]")))) (; ";")) (if_statement "if (piVar4 == (int *)0x0) goto LAB_000a7acc;" (if "if") (parenthesized_expression "(piVar4 == (int *)0x0)" (( "(") (binary_expression "piVar4 == (int *)0x0" (identifier "piVar4") (== "==") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (goto_statement "goto LAB_000a7acc;" (goto "goto") (statement_identifier "LAB_000a7acc") (; ";"))) (} "}")) (while "while") (parenthesized_expression "(param_1 != piVar4)" (( "(") (binary_expression "param_1 != piVar4" (identifier "param_1") (!= "!=") (identifier "piVar4")) () ")")) (; ";")) (expression_statement "piVar5 = piVar5 + 0x7d;" (assignment_expression "piVar5 = piVar5 + 0x7d" (identifier "piVar5") (= "=") (binary_expression "piVar5 + 0x7d" (identifier "piVar5") (+ "+") (number_literal "0x7d"))) (; ";")) (} "}")))) (expression_statement "*piVar5 = piVar4[0x7d];" (assignment_expression "*piVar5 = piVar4[0x7d]" (pointer_expression "*piVar5" (* "*") (identifier "piVar5")) (= "=") (subscript_expression "piVar4[0x7d]" (identifier "piVar4") ([ "[") (number_literal "0x7d") (] "]"))) (; ";")) (} "}"))) (labeled_statement "LAB_000a7acc:\n  FUN_0003ada0();" (statement_identifier "LAB_000a7acc") (: ":") (expression_statement "FUN_0003ada0();" (call_expression "FUN_0003ada0()" (identifier "FUN_0003ada0") (argument_list "()" (( "(") () ")"))) (; ";"))) (for_statement "for (puVar2 = (undefined4 *)param_1[0x5e]; puVar2 != (undefined4 *)0x0;\n      puVar2 = (undefined4 *)*puVar2) {\n    iVar3 = puVar2[2];\n    do {\n      FUN_0004e1a0();\n      iVar3 = *(int *)(iVar3 + 0xc);\n      FUN_000428d0();\n    } while (iVar3 != 0);\n  }" (for "for") (( "(") (assignment_expression "puVar2 = (undefined4 *)param_1[0x5e]" (identifier "puVar2") (= "=") (cast_expression "(undefined4 *)param_1[0x5e]" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[0x5e]" (identifier "param_1") ([ "[") (number_literal "0x5e") (] "]")))) (; ";") (binary_expression "puVar2 != (undefined4 *)0x0" (identifier "puVar2") (!= "!=") (cast_expression "(undefined4 *)0x0" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";") (assignment_expression "puVar2 = (undefined4 *)*puVar2" (identifier "puVar2") (= "=") (cast_expression "(undefined4 *)*puVar2" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar2" (* "*") (identifier "puVar2")))) () ")") (compound_statement "{\n    iVar3 = puVar2[2];\n    do {\n      FUN_0004e1a0();\n      iVar3 = *(int *)(iVar3 + 0xc);\n      FUN_000428d0();\n    } while (iVar3 != 0);\n  }" ({ "{") (expression_statement "iVar3 = puVar2[2];" (assignment_expression "iVar3 = puVar2[2]" (identifier "iVar3") (= "=") (subscript_expression "puVar2[2]" (identifier "puVar2") ([ "[") (number_literal "2") (] "]"))) (; ";")) (do_statement "do {\n      FUN_0004e1a0();\n      iVar3 = *(int *)(iVar3 + 0xc);\n      FUN_000428d0();\n    } while (iVar3 != 0);" (do "do") (compound_statement "{\n      FUN_0004e1a0();\n      iVar3 = *(int *)(iVar3 + 0xc);\n      FUN_000428d0();\n    }" ({ "{") (expression_statement "FUN_0004e1a0();" (call_expression "FUN_0004e1a0()" (identifier "FUN_0004e1a0") (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "iVar3 = *(int *)(iVar3 + 0xc);" (assignment_expression "iVar3 = *(int *)(iVar3 + 0xc)" (identifier "iVar3") (= "=") (pointer_expression "*(int *)(iVar3 + 0xc)" (* "*") (cast_expression "(int *)(iVar3 + 0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar3 + 0xc)" (( "(") (binary_expression "iVar3 + 0xc" (identifier "iVar3") (+ "+") (number_literal "0xc")) () ")"))))) (; ";")) (expression_statement "FUN_000428d0();" (call_expression "FUN_000428d0()" (identifier "FUN_000428d0") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar3 != 0)" (( "(") (binary_expression "iVar3 != 0" (identifier "iVar3") (!= "!=") (number_literal "0")) () ")")) (; ";")) (} "}"))) (expression_statement "FUN_000434c0();" (call_expression "FUN_000434c0()" (identifier "FUN_000434c0") (argument_list "()" (( "(") () ")"))) (; ";")) (for_statement "for (puVar2 = (undefined4 *)param_1[0x62]; puVar2 != (undefined4 *)0x0;\n      puVar2 = (undefined4 *)*puVar2) {\n    iVar3 = puVar2[2];\n    puVar8 = (undefined4 *)(iVar3 + 8);\n    do {\n      if ((code *)puVar8[2] != (code *)0x0) {\n        (*(code *)puVar8[2])(*puVar8);\n      }\n      puVar8 = puVar8 + 5;\n    } while ((undefined4 *)(iVar3 + 0x44) != puVar8);\n    if (iVar3 != 0) {\n      FUN_000428d0();\n    }\n  }" (for "for") (( "(") (assignment_expression "puVar2 = (undefined4 *)param_1[0x62]" (identifier "puVar2") (= "=") (cast_expression "(undefined4 *)param_1[0x62]" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[0x62]" (identifier "param_1") ([ "[") (number_literal "0x62") (] "]")))) (; ";") (binary_expression "puVar2 != (undefined4 *)0x0" (identifier "puVar2") (!= "!=") (cast_expression "(undefined4 *)0x0" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";") (assignment_expression "puVar2 = (undefined4 *)*puVar2" (identifier "puVar2") (= "=") (cast_expression "(undefined4 *)*puVar2" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar2" (* "*") (identifier "puVar2")))) () ")") (compound_statement "{\n    iVar3 = puVar2[2];\n    puVar8 = (undefined4 *)(iVar3 + 8);\n    do {\n      if ((code *)puVar8[2] != (code *)0x0) {\n        (*(code *)puVar8[2])(*puVar8);\n      }\n      puVar8 = puVar8 + 5;\n    } while ((undefined4 *)(iVar3 + 0x44) != puVar8);\n    if (iVar3 != 0) {\n      FUN_000428d0();\n    }\n  }" ({ "{") (expression_statement "iVar3 = puVar2[2];" (assignment_expression "iVar3 = puVar2[2]" (identifier "iVar3") (= "=") (subscript_expression "puVar2[2]" (identifier "puVar2") ([ "[") (number_literal "2") (] "]"))) (; ";")) (expression_statement "puVar8 = (undefined4 *)(iVar3 + 8);" (assignment_expression "puVar8 = (undefined4 *)(iVar3 + 8)" (identifier "puVar8") (= "=") (cast_expression "(undefined4 *)(iVar3 + 8)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar3 + 8)" (( "(") (binary_expression "iVar3 + 8" (identifier "iVar3") (+ "+") (number_literal "8")) () ")")))) (; ";")) (do_statement "do {\n      if ((code *)puVar8[2] != (code *)0x0) {\n        (*(code *)puVar8[2])(*puVar8);\n      }\n      puVar8 = puVar8 + 5;\n    } while ((undefined4 *)(iVar3 + 0x44) != puVar8);" (do "do") (compound_statement "{\n      if ((code *)puVar8[2] != (code *)0x0) {\n        (*(code *)puVar8[2])(*puVar8);\n      }\n      puVar8 = puVar8 + 5;\n    }" ({ "{") (if_statement "if ((code *)puVar8[2] != (code *)0x0) {\n        (*(code *)puVar8[2])(*puVar8);\n      }" (if "if") (parenthesized_expression "((code *)puVar8[2] != (code *)0x0)" (( "(") (binary_expression "(code *)puVar8[2] != (code *)0x0" (cast_expression "(code *)puVar8[2]" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "puVar8[2]" (identifier "puVar8") ([ "[") (number_literal "2") (] "]"))) (!= "!=") (cast_expression "(code *)0x0" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n        (*(code *)puVar8[2])(*puVar8);\n      }" ({ "{") (expression_statement "(*(code *)puVar8[2])(*puVar8);" (call_expression "(*(code *)puVar8[2])(*puVar8)" (parenthesized_expression "(*(code *)puVar8[2])" (( "(") (pointer_expression "*(code *)puVar8[2]" (* "*") (cast_expression "(code *)puVar8[2]" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "puVar8[2]" (identifier "puVar8") ([ "[") (number_literal "2") (] "]")))) () ")")) (argument_list "(*puVar8)" (( "(") (pointer_expression "*puVar8" (* "*") (identifier "puVar8")) () ")"))) (; ";")) (} "}"))) (expression_statement "puVar8 = puVar8 + 5;" (assignment_expression "puVar8 = puVar8 + 5" (identifier "puVar8") (= "=") (binary_expression "puVar8 + 5" (identifier "puVar8") (+ "+") (number_literal "5"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "((undefined4 *)(iVar3 + 0x44) != puVar8)" (( "(") (binary_expression "(undefined4 *)(iVar3 + 0x44) != puVar8" (cast_expression "(undefined4 *)(iVar3 + 0x44)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar3 + 0x44)" (( "(") (binary_expression "iVar3 + 0x44" (identifier "iVar3") (+ "+") (number_literal "0x44")) () ")"))) (!= "!=") (identifier "puVar8")) () ")")) (; ";")) (if_statement "if (iVar3 != 0) {\n      FUN_000428d0();\n    }" (if "if") (parenthesized_expression "(iVar3 != 0)" (( "(") (binary_expression "iVar3 != 0" (identifier "iVar3") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      FUN_000428d0();\n    }" ({ "{") (expression_statement "FUN_000428d0();" (call_expression "FUN_000428d0()" (identifier "FUN_000428d0") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (} "}"))) (expression_statement "FUN_000434c0();" (call_expression "FUN_000434c0()" (identifier "FUN_000434c0") (argument_list "()" (( "(") () ")"))) (; ";")) (for_statement "for (puVar2 = (undefined4 *)param_1[0x57]; puVar2 != (undefined4 *)0x0;\n      puVar2 = (undefined4 *)*puVar2) {\n    iVar3 = puVar2[2];\n    if (*(code **)(iVar3 + 0xc) != (code *)0x0) {\n      (**(code **)(iVar3 + 0xc))(*(undefined4 *)(iVar3 + 8));\n    }\n    if (*(int *)(iVar3 + 0x10) != 0) {\n      puVar1 = (uint *)(*(int *)(iVar3 + 0x10) + 0x24);\n      *puVar1 = *puVar1 | 2;\n      FUN_00057430();\n      *(undefined4 *)(iVar3 + 0x10) = 0;\n    }\n    FUN_000428d0();\n  }" (for "for") (( "(") (assignment_expression "puVar2 = (undefined4 *)param_1[0x57]" (identifier "puVar2") (= "=") (cast_expression "(undefined4 *)param_1[0x57]" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[0x57]" (identifier "param_1") ([ "[") (number_literal "0x57") (] "]")))) (; ";") (binary_expression "puVar2 != (undefined4 *)0x0" (identifier "puVar2") (!= "!=") (cast_expression "(undefined4 *)0x0" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";") (assignment_expression "puVar2 = (undefined4 *)*puVar2" (identifier "puVar2") (= "=") (cast_expression "(undefined4 *)*puVar2" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar2" (* "*") (identifier "puVar2")))) () ")") (compound_statement "{\n    iVar3 = puVar2[2];\n    if (*(code **)(iVar3 + 0xc) != (code *)0x0) {\n      (**(code **)(iVar3 + 0xc))(*(undefined4 *)(iVar3 + 8));\n    }\n    if (*(int *)(iVar3 + 0x10) != 0) {\n      puVar1 = (uint *)(*(int *)(iVar3 + 0x10) + 0x24);\n      *puVar1 = *puVar1 | 2;\n      FUN_00057430();\n      *(undefined4 *)(iVar3 + 0x10) = 0;\n    }\n    FUN_000428d0();\n  }" ({ "{") (expression_statement "iVar3 = puVar2[2];" (assignment_expression "iVar3 = puVar2[2]" (identifier "iVar3") (= "=") (subscript_expression "puVar2[2]" (identifier "puVar2") ([ "[") (number_literal "2") (] "]"))) (; ";")) (if_statement "if (*(code **)(iVar3 + 0xc) != (code *)0x0) {\n      (**(code **)(iVar3 + 0xc))(*(undefined4 *)(iVar3 + 8));\n    }" (if "if") (parenthesized_expression "(*(code **)(iVar3 + 0xc) != (code *)0x0)" (( "(") (binary_expression "*(code **)(iVar3 + 0xc) != (code *)0x0" (pointer_expression "*(code **)(iVar3 + 0xc)" (* "*") (cast_expression "(code **)(iVar3 + 0xc)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(iVar3 + 0xc)" (( "(") (binary_expression "iVar3 + 0xc" (identifier "iVar3") (+ "+") (number_literal "0xc")) () ")")))) (!= "!=") (cast_expression "(code *)0x0" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      (**(code **)(iVar3 + 0xc))(*(undefined4 *)(iVar3 + 8));\n    }" ({ "{") (expression_statement "(**(code **)(iVar3 + 0xc))(*(undefined4 *)(iVar3 + 8));" (call_expression "(**(code **)(iVar3 + 0xc))(*(undefined4 *)(iVar3 + 8))" (parenthesized_expression "(**(code **)(iVar3 + 0xc))" (( "(") (pointer_expression "**(code **)(iVar3 + 0xc)" (* "*") (pointer_expression "*(code **)(iVar3 + 0xc)" (* "*") (cast_expression "(code **)(iVar3 + 0xc)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(iVar3 + 0xc)" (( "(") (binary_expression "iVar3 + 0xc" (identifier "iVar3") (+ "+") (number_literal "0xc")) () ")"))))) () ")")) (argument_list "(*(undefined4 *)(iVar3 + 8))" (( "(") (pointer_expression "*(undefined4 *)(iVar3 + 8)" (* "*") (cast_expression "(undefined4 *)(iVar3 + 8)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar3 + 8)" (( "(") (binary_expression "iVar3 + 8" (identifier "iVar3") (+ "+") (number_literal "8")) () ")")))) () ")"))) (; ";")) (} "}"))) (if_statement "if (*(int *)(iVar3 + 0x10) != 0) {\n      puVar1 = (uint *)(*(int *)(iVar3 + 0x10) + 0x24);\n      *puVar1 = *puVar1 | 2;\n      FUN_00057430();\n      *(undefined4 *)(iVar3 + 0x10) = 0;\n    }" (if "if") (parenthesized_expression "(*(int *)(iVar3 + 0x10) != 0)" (( "(") (binary_expression "*(int *)(iVar3 + 0x10) != 0" (pointer_expression "*(int *)(iVar3 + 0x10)" (* "*") (cast_expression "(int *)(iVar3 + 0x10)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar3 + 0x10)" (( "(") (binary_expression "iVar3 + 0x10" (identifier "iVar3") (+ "+") (number_literal "0x10")) () ")")))) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      puVar1 = (uint *)(*(int *)(iVar3 + 0x10) + 0x24);\n      *puVar1 = *puVar1 | 2;\n      FUN_00057430();\n      *(undefined4 *)(iVar3 + 0x10) = 0;\n    }" ({ "{") (expression_statement "puVar1 = (uint *)(*(int *)(iVar3 + 0x10) + 0x24);" (assignment_expression "puVar1 = (uint *)(*(int *)(iVar3 + 0x10) + 0x24)" (identifier "puVar1") (= "=") (cast_expression "(uint *)(*(int *)(iVar3 + 0x10) + 0x24)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(iVar3 + 0x10) + 0x24)" (( "(") (binary_expression "*(int *)(iVar3 + 0x10) + 0x24" (pointer_expression "*(int *)(iVar3 + 0x10)" (* "*") (cast_expression "(int *)(iVar3 + 0x10)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar3 + 0x10)" (( "(") (binary_expression "iVar3 + 0x10" (identifier "iVar3") (+ "+") (number_literal "0x10")) () ")")))) (+ "+") (number_literal "0x24")) () ")")))) (; ";")) (expression_statement "*puVar1 = *puVar1 | 2;" (assignment_expression "*puVar1 = *puVar1 | 2" (pointer_expression "*puVar1" (* "*") (identifier "puVar1")) (= "=") (binary_expression "*puVar1 | 2" (pointer_expression "*puVar1" (* "*") (identifier "puVar1")) (| "|") (number_literal "2"))) (; ";")) (expression_statement "FUN_00057430();" (call_expression "FUN_00057430()" (identifier "FUN_00057430") (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "*(undefined4 *)(iVar3 + 0x10) = 0;" (assignment_expression "*(undefined4 *)(iVar3 + 0x10) = 0" (pointer_expression "*(undefined4 *)(iVar3 + 0x10)" (* "*") (cast_expression "(undefined4 *)(iVar3 + 0x10)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar3 + 0x10)" (( "(") (binary_expression "iVar3 + 0x10" (identifier "iVar3") (+ "+") (number_literal "0x10")) () ")")))) (= "=") (number_literal "0")) (; ";")) (} "}"))) (expression_statement "FUN_000428d0();" (call_expression "FUN_000428d0()" (identifier "FUN_000428d0") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (expression_statement "FUN_000434c0();" (call_expression "FUN_000434c0()" (identifier "FUN_000434c0") (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "param_1[0xf] = 0;" (assignment_expression "param_1[0xf] = 0" (subscript_expression "param_1[0xf]" (identifier "param_1") ([ "[") (number_literal "0xf") (] "]")) (= "=") (number_literal "0")) (; ";")) (if_statement "if (param_1[0x42] != 0) {\n    FUN_00045400();\n  }" (if "if") (parenthesized_expression "(param_1[0x42] != 0)" (( "(") (binary_expression "param_1[0x42] != 0" (subscript_expression "param_1[0x42]" (identifier "param_1") ([ "[") (number_literal "0x42") (] "]")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    FUN_00045400();\n  }" ({ "{") (expression_statement "FUN_00045400();" (call_expression "FUN_00045400()" (identifier "FUN_00045400") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (expression_statement "FUN_00042f80();" (call_expression "FUN_00042f80()" (identifier "FUN_00042f80") (argument_list "()" (( "(") () ")"))) (; ";")) (if_statement "if (0 < param_1[0x2e]) {\n    iVar3 = 0;\n    do {\n      iVar6 = iVar3 * 4;\n      iVar3 = iVar3 + 1;\n      (**(code **)(*param_1 + 0x34))(*param_1,*(undefined4 *)(param_1[0x2f] + iVar6));\n    } while (iVar3 < param_1[0x2e]);\n  }" (if "if") (parenthesized_expression "(0 < param_1[0x2e])" (( "(") (binary_expression "0 < param_1[0x2e]" (number_literal "0") (< "<") (subscript_expression "param_1[0x2e]" (identifier "param_1") ([ "[") (number_literal "0x2e") (] "]"))) () ")")) (compound_statement "{\n    iVar3 = 0;\n    do {\n      iVar6 = iVar3 * 4;\n      iVar3 = iVar3 + 1;\n      (**(code **)(*param_1 + 0x34))(*param_1,*(undefined4 *)(param_1[0x2f] + iVar6));\n    } while (iVar3 < param_1[0x2e]);\n  }" ({ "{") (expression_statement "iVar3 = 0;" (assignment_expression "iVar3 = 0" (identifier "iVar3") (= "=") (number_literal "0")) (; ";")) (do_statement "do {\n      iVar6 = iVar3 * 4;\n      iVar3 = iVar3 + 1;\n      (**(code **)(*param_1 + 0x34))(*param_1,*(undefined4 *)(param_1[0x2f] + iVar6));\n    } while (iVar3 < param_1[0x2e]);" (do "do") (compound_statement "{\n      iVar6 = iVar3 * 4;\n      iVar3 = iVar3 + 1;\n      (**(code **)(*param_1 + 0x34))(*param_1,*(undefined4 *)(param_1[0x2f] + iVar6));\n    }" ({ "{") (expression_statement "iVar6 = iVar3 * 4;" (assignment_expression "iVar6 = iVar3 * 4" (identifier "iVar6") (= "=") (binary_expression "iVar3 * 4" (identifier "iVar3") (* "*") (number_literal "4"))) (; ";")) (expression_statement "iVar3 = iVar3 + 1;" (assignment_expression "iVar3 = iVar3 + 1" (identifier "iVar3") (= "=") (binary_expression "iVar3 + 1" (identifier "iVar3") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "(**(code **)(*param_1 + 0x34))(*param_1,*(undefined4 *)(param_1[0x2f] + iVar6));" (call_expression "(**(code **)(*param_1 + 0x34))(*param_1,*(undefined4 *)(param_1[0x2f] + iVar6))" (parenthesized_expression "(**(code **)(*param_1 + 0x34))" (( "(") (pointer_expression "**(code **)(*param_1 + 0x34)" (* "*") (pointer_expression "*(code **)(*param_1 + 0x34)" (* "*") (cast_expression "(code **)(*param_1 + 0x34)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_1 + 0x34)" (( "(") (binary_expression "*param_1 + 0x34" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x34")) () ")"))))) () ")")) (argument_list "(*param_1,*(undefined4 *)(param_1[0x2f] + iVar6))" (( "(") (pointer_expression "*param_1" (* "*") (identifier "param_1")) (, ",") (pointer_expression "*(undefined4 *)(param_1[0x2f] + iVar6)" (* "*") (cast_expression "(undefined4 *)(param_1[0x2f] + iVar6)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1[0x2f] + iVar6)" (( "(") (binary_expression "param_1[0x2f] + iVar6" (subscript_expression "param_1[0x2f]" (identifier "param_1") ([ "[") (number_literal "0x2f") (] "]")) (+ "+") (identifier "iVar6")) () ")")))) () ")"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar3 < param_1[0x2e])" (( "(") (binary_expression "iVar3 < param_1[0x2e]" (identifier "iVar3") (< "<") (subscript_expression "param_1[0x2e]" (identifier "param_1") ([ "[") (number_literal "0x2e") (] "]"))) () ")")) (; ";")) (} "}"))) (if_statement "if (param_1[0x2f] != 0) {\n    FUN_000428d0();\n  }" (if "if") (parenthesized_expression "(param_1[0x2f] != 0)" (( "(") (binary_expression "param_1[0x2f] != 0" (subscript_expression "param_1[0x2f]" (identifier "param_1") ([ "[") (number_literal "0x2f") (] "]")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    FUN_000428d0();\n  }" ({ "{") (expression_statement "FUN_000428d0();" (call_expression "FUN_000428d0()" (identifier "FUN_000428d0") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (expression_statement "param_1[0x17] = -0x4aca86d0;" (assignment_expression "param_1[0x17] = -0x4aca86d0" (subscript_expression "param_1[0x17]" (identifier "param_1") ([ "[") (number_literal "0x17") (] "]")) (= "=") (number_literal "-0x4aca86d0")) (; ";")) (if_statement "if (*(int *)(param_1[4] + 0x1c) != 0) {\n    FUN_000428d0();\n  }" (if "if") (parenthesized_expression "(*(int *)(param_1[4] + 0x1c) != 0)" (( "(") (binary_expression "*(int *)(param_1[4] + 0x1c) != 0" (pointer_expression "*(int *)(param_1[4] + 0x1c)" (* "*") (cast_expression "(int *)(param_1[4] + 0x1c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1[4] + 0x1c)" (( "(") (binary_expression "param_1[4] + 0x1c" (subscript_expression "param_1[4]" (identifier "param_1") ([ "[") (number_literal "4") (] "]")) (+ "+") (number_literal "0x1c")) () ")")))) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    FUN_000428d0();\n  }" ({ "{") (expression_statement "FUN_000428d0();" (call_expression "FUN_000428d0()" (identifier "FUN_000428d0") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (if_statement "if (param_1[3] == 0) {\n    param_1[0x17] = -0x60c3d2cd;\n  }\n  else {\n    (*DAT_0017c444)(param_1[3]);\n    param_1[0x17] = -0x60c3d2cd;\n    if (param_1[3] != 0) {\n      (*DAT_0017c438)(param_1[3]);\n    }\n  }" (if "if") (parenthesized_expression "(param_1[3] == 0)" (( "(") (binary_expression "param_1[3] == 0" (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    param_1[0x17] = -0x60c3d2cd;\n  }" ({ "{") (expression_statement "param_1[0x17] = -0x60c3d2cd;" (assignment_expression "param_1[0x17] = -0x60c3d2cd" (subscript_expression "param_1[0x17]" (identifier "param_1") ([ "[") (number_literal "0x17") (] "]")) (= "=") (number_literal "-0x60c3d2cd")) (; ";")) (} "}")) (else_clause "else {\n    (*DAT_0017c444)(param_1[3]);\n    param_1[0x17] = -0x60c3d2cd;\n    if (param_1[3] != 0) {\n      (*DAT_0017c438)(param_1[3]);\n    }\n  }" (else "else") (compound_statement "{\n    (*DAT_0017c444)(param_1[3]);\n    param_1[0x17] = -0x60c3d2cd;\n    if (param_1[3] != 0) {\n      (*DAT_0017c438)(param_1[3]);\n    }\n  }" ({ "{") (expression_statement "(*DAT_0017c444)(param_1[3]);" (call_expression "(*DAT_0017c444)(param_1[3])" (parenthesized_expression "(*DAT_0017c444)" (( "(") (pointer_expression "*DAT_0017c444" (* "*") (identifier "DAT_0017c444")) () ")")) (argument_list "(param_1[3])" (( "(") (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]")) () ")"))) (; ";")) (expression_statement "param_1[0x17] = -0x60c3d2cd;" (assignment_expression "param_1[0x17] = -0x60c3d2cd" (subscript_expression "param_1[0x17]" (identifier "param_1") ([ "[") (number_literal "0x17") (] "]")) (= "=") (number_literal "-0x60c3d2cd")) (; ";")) (if_statement "if (param_1[3] != 0) {\n      (*DAT_0017c438)(param_1[3]);\n    }" (if "if") (parenthesized_expression "(param_1[3] != 0)" (( "(") (binary_expression "param_1[3] != 0" (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      (*DAT_0017c438)(param_1[3]);\n    }" ({ "{") (expression_statement "(*DAT_0017c438)(param_1[3]);" (call_expression "(*DAT_0017c438)(param_1[3])" (parenthesized_expression "(*DAT_0017c438)" (( "(") (pointer_expression "*DAT_0017c438" (* "*") (identifier "DAT_0017c438")) () ")")) (argument_list "(param_1[3])" (( "(") (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]")) () ")"))) (; ";")) (} "}"))) (} "}")))) (if_statement "if (*(char *)((int)param_1 + 0x11a) != '\0') {\n    FUN_00042800(param_1[0x4d]);\n  }" (if "if") (parenthesized_expression "(*(char *)((int)param_1 + 0x11a) != '\0')" (( "(") (binary_expression "*(char *)((int)param_1 + 0x11a) != '\0'" (pointer_expression "*(char *)((int)param_1 + 0x11a)" (* "*") (cast_expression "(char *)((int)param_1 + 0x11a)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)param_1 + 0x11a)" (( "(") (binary_expression "(int)param_1 + 0x11a" (cast_expression "(int)param_1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_1")) (+ "+") (number_literal "0x11a")) () ")")))) (!= "!=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n    FUN_00042800(param_1[0x4d]);\n  }" ({ "{") (expression_statement "FUN_00042800(param_1[0x4d]);" (call_expression "FUN_00042800(param_1[0x4d])" (identifier "FUN_00042800") (argument_list "(param_1[0x4d])" (( "(") (subscript_expression "param_1[0x4d]" (identifier "param_1") ([ "[") (number_literal "0x4d") (] "]")) () ")"))) (; ";")) (} "}"))) (expression_statement "FUN_00042800(param_1);" (call_expression "FUN_00042800(param_1)" (identifier "FUN_00042800") (argument_list "(param_1)" (( "(") (identifier "param_1") () ")"))) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}")))

/* WARNING: Function: __x86.get_pc_thunk.cx replaced with injection: get_pc_thunk_cx */

void __regparm3 function_1(type_1 *var_13)

{
  void **ppvVar1;
  type_2 *var_4;
  type_3 *var_16;
  void *var_18;
  type_4 *var_22;
  type_5 *var_27;
  int var_2;
  type_6 *var_24;
  type_1 *var_12;
  type_7 **var_14;
  type_8 *pDVar6;
  type_1 *psVar7;
  type_1 **ppsVar8;
  void *var_21;
  type_9 *var_20;
  type_1 *in_stack_ffffffd4;
  type_7 **ppuVar11;
  
  var_14 = &_GLOBAL_OFFSET_TABLE_;
  ppuVar11 = var_14;
  if (((var_13->magic != 0x64cffc7f) || (ppuVar11 = &_GLOBAL_OFFSET_TABLE_, var_13->pVdbe != (type_10 *)0x0))
     || (var_2 = var_1(var_13), ppuVar11 = var_14, var_2 != 0)) {
    if (var_13->mutex != (type_11 *)0x0) {
      (*(type_12 *)ppuVar11[0x187])(var_13->mutex);
    }
    return;
  }
  var_3(in_stack_ffffffd4,(int)var_14);
  var_4 = var_13->pSavepoint;
  while (var_4 != (type_2 *)0x0) {
    var_13->pSavepoint = var_4->pNext;
    var_5(var_13,var_4);
    var_4 = var_13->pSavepoint;
  }
  pDVar6 = var_13->aDb;
  var_13->isTransactionSavepoint = '\0';
  var_2 = 0;
  var_13->nSavepoint = 0;
  var_13->nStatement = 0;
  if (0 < var_13->nDb) {
    do {
      if (pDVar6[var_2].pBt != (type_13 *)0x0) {
        var_6((type_13 *)in_stack_ffffffd4);
        pDVar6[var_2].pBt = (type_13 *)0x0;
        if (var_2 != 1) {
          pDVar6[var_2].pSchema = (type_5 *)0x0;
        }
        pDVar6 = var_13->aDb;
      }
      var_2 = var_2 + 1;
    } while (var_2 < var_13->nDb);
  }
  if (pDVar6[1].pSchema != (type_5 *)0x0) {
    var_7(pDVar6[1].pSchema);
  }
  var_8(var_13);
  var_9(var_13);
  var_10(var_13);
  var_11();
  var_12 = (type_1 *)var_14[0x73a];
  if (var_12 != (type_1 *)0x0) {
    if (var_13 == var_12) {
      ppsVar8 = (type_1 **)(var_14 + 0x73a);
      var_12 = var_13;
    }
    else {
      do {
        psVar7 = var_12;
        var_12 = psVar7->pNextBlocked;
        if (var_12 == (type_1 *)0x0) goto LAB_000a7acc;
      } while (var_13 != var_12);
      ppsVar8 = &psVar7->pNextBlocked;
    }
    *ppsVar8 = var_12->pNextBlocked;
  }
LAB_000a7acc:
  var_15();
  for (var_16 = (var_13->aFunc).first; var_16 != (type_3 *)0x0; var_16 = var_16->next) {
    var_21 = var_16->data;
    do {
      var_17(var_13,*(type_14 **)((int)var_21 + 0x24));
      var_18 = *(void **)((int)var_21 + 0xc);
      var_5(var_13,var_21);
      var_21 = var_18;
    } while (var_18 != (void *)0x0);
  }
  var_19(&var_13->aFunc);
  for (var_16 = (var_13->aCollSeq).first; var_16 != (type_3 *)0x0; var_16 = var_16->next) {
    var_21 = var_16->data;
    var_20 = (type_9 *)((int)var_21 + 8);
    do {
      if ((type_12 *)var_20[2] != (type_12 *)0x0) {
        (*(type_12 *)var_20[2])(*var_20);
      }
      var_20 = var_20 + 5;
    } while ((type_9 *)((int)var_21 + 0x44) != var_20);
    if (var_21 != (void *)0x0) {
      var_5(var_13,var_21);
    }
  }
  var_19(&var_13->aCollSeq);
  for (var_16 = (var_13->aModule).first; var_16 != (type_3 *)0x0; var_16 = var_16->next) {
    var_21 = var_16->data;
    if (*(type_12 **)((int)var_21 + 0xc) != (type_12 *)0x0) {
      (**(type_12 **)((int)var_21 + 0xc))(*(type_9 *)((int)var_21 + 8));
    }
    var_22 = *(type_4 **)((int)var_21 + 0x10);
    if (var_22 != (type_4 *)0x0) {
      var_22->tabFlags = var_22->tabFlags | 2;
      var_23(var_13,var_22);
      *(type_9 *)((int)var_21 + 0x10) = 0;
    }
    var_5(var_13,var_21);
  }
  var_19(&var_13->aModule);
  var_24 = var_13->pErr;
  var_13->errCode = 0;
  if (var_24 != (type_6 *)0x0) {
    var_25(var_13,0);
    var_24 = var_13->pErr;
  }
  var_26(var_24);
  if (0 < var_13->nExtension) {
    var_2 = 0;
    do {
      ppvVar1 = var_13->aExtension + var_2;
      var_2 = var_2 + 1;
      (*var_13->pVfs->xDlClose)(var_13->pVfs,*ppvVar1);
    } while (var_2 < var_13->nExtension);
  }
  if (var_13->aExtension != (void **)0x0) {
    var_5(var_13,var_13->aExtension);
  }
  var_13->magic = 0xb5357930;
  var_27 = var_13->aDb[1].pSchema;
  if (var_27 != (type_5 *)0x0) {
    var_5(var_13,var_27);
  }
  if (var_13->mutex == (type_11 *)0x0) {
    var_13->magic = 0x9f3c2d33;
  }
  else {
    (*(type_12 *)var_14[0x187])(var_13->mutex);
    var_13->magic = 0x9f3c2d33;
    if (var_13->mutex != (type_11 *)0x0) {
      (*(type_12 *)var_14[0x184])(var_13->mutex);
    }
  }
  if ((var_13->lookaside).bMalloced != '\0') {
    var_28((var_13->lookaside).pStart);
  }
  var_28(var_13);
  return;
}


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

/* WARNING: Function: __i686.get_pc_thunk.cx replaced with injection: get_pc_thunk_cx */

void __regparm3 MASKED(int *param_1)

{
  uint *puVar1;
  undefined4 *puVar2;
  int iVar3;
  int *piVar4;
  int *piVar5;
  int iVar6;
  int iVar7;
  undefined4 *puVar8;
  
  if (((param_1[0x17] != 0x64cffc7f) || (param_1[1] != 0)) || (iVar3 = FUN_0004e1f0(), iVar3 != 0))
  {
    if (param_1[3] != 0) {
      (*DAT_0017c444)(param_1[3]);
    }
    return;
  }
  FUN_000a1a50();
  iVar3 = param_1[0x70];
  while (iVar3 != 0) {
    param_1[0x70] = *(int *)(iVar3 + 0x14);
    FUN_000428d0();
    iVar3 = param_1[0x70];
  }
  iVar3 = param_1[4];
  *(undefined1 *)((int)param_1 + 0x53) = 0;
  iVar6 = 0;
  param_1[0x72] = 0;
  param_1[0x73] = 0;
  if (0 < param_1[5]) {
    do {
      iVar7 = iVar6 * 0x10 + iVar3;
      if (*(int *)(iVar7 + 4) != 0) {
        FUN_000a77a0();
        *(undefined4 *)(iVar7 + 4) = 0;
        if (iVar6 != 1) {
          *(undefined4 *)(iVar7 + 0xc) = 0;
        }
        iVar3 = param_1[4];
      }
      iVar6 = iVar6 + 1;
    } while (iVar6 < param_1[5]);
  }
  if (*(int *)(iVar3 + 0x1c) != 0) {
    FUN_000579b0(*(int *)(iVar3 + 0x1c));
  }
  FUN_00043270();
  FUN_0004bc40();
  FUN_00043780();
  FUN_0003ad60();
  if (DAT_0017db10 != (int *)0x0) {
    piVar4 = DAT_0017db10;
    if (param_1 == DAT_0017db10) {
      piVar5 = (int *)&DAT_0017db10;
      piVar4 = param_1;
    }
    else {
      do {
        piVar5 = piVar4;
        piVar4 = (int *)piVar5[0x7d];
        if (piVar4 == (int *)0x0) goto LAB_000a7acc;
      } while (param_1 != piVar4);
      piVar5 = piVar5 + 0x7d;
    }
    *piVar5 = piVar4[0x7d];
  }
LAB_000a7acc:
  FUN_0003ada0();
  for (puVar2 = (undefined4 *)param_1[0x5e]; puVar2 != (undefined4 *)0x0;
      puVar2 = (undefined4 *)*puVar2) {
    iVar3 = puVar2[2];
    do {
      FUN_0004e1a0();
      iVar3 = *(int *)(iVar3 + 0xc);
      FUN_000428d0();
    } while (iVar3 != 0);
  }
  FUN_000434c0();
  for (puVar2 = (undefined4 *)param_1[0x62]; puVar2 != (undefined4 *)0x0;
      puVar2 = (undefined4 *)*puVar2) {
    iVar3 = puVar2[2];
    puVar8 = (undefined4 *)(iVar3 + 8);
    do {
      if ((code *)puVar8[2] != (code *)0x0) {
        (*(code *)puVar8[2])(*puVar8);
      }
      puVar8 = puVar8 + 5;
    } while ((undefined4 *)(iVar3 + 0x44) != puVar8);
    if (iVar3 != 0) {
      FUN_000428d0();
    }
  }
  FUN_000434c0();
  for (puVar2 = (undefined4 *)param_1[0x57]; puVar2 != (undefined4 *)0x0;
      puVar2 = (undefined4 *)*puVar2) {
    iVar3 = puVar2[2];
    if (*(code **)(iVar3 + 0xc) != (code *)0x0) {
      (**(code **)(iVar3 + 0xc))(*(undefined4 *)(iVar3 + 8));
    }
    if (*(int *)(iVar3 + 0x10) != 0) {
      puVar1 = (uint *)(*(int *)(iVar3 + 0x10) + 0x24);
      *puVar1 = *puVar1 | 2;
      FUN_00057430();
      *(undefined4 *)(iVar3 + 0x10) = 0;
    }
    FUN_000428d0();
  }
  FUN_000434c0();
  param_1[0xf] = 0;
  if (param_1[0x42] != 0) {
    FUN_00045400();
  }
  FUN_00042f80();
  if (0 < param_1[0x2e]) {
    iVar3 = 0;
    do {
      iVar6 = iVar3 * 4;
      iVar3 = iVar3 + 1;
      (**(code **)(*param_1 + 0x34))(*param_1,*(undefined4 *)(param_1[0x2f] + iVar6));
    } while (iVar3 < param_1[0x2e]);
  }
  if (param_1[0x2f] != 0) {
    FUN_000428d0();
  }
  param_1[0x17] = -0x4aca86d0;
  if (*(int *)(param_1[4] + 0x1c) != 0) {
    FUN_000428d0();
  }
  if (param_1[3] == 0) {
    param_1[0x17] = -0x60c3d2cd;
  }
  else {
    (*DAT_0017c444)(param_1[3]);
    param_1[0x17] = -0x60c3d2cd;
    if (param_1[3] != 0) {
      (*DAT_0017c438)(param_1[3]);
    }
  }
  if (*(char *)((int)param_1 + 0x11a) != '\0') {
    FUN_00042800(param_1[0x4d]);
  }
  FUN_00042800(param_1);
  return;
}

