// File: /workspace/github_c_makefile_star2_O0/shifengbin[P]bishe/Output/../Persistence/sqlite3.c
// Function: analyzeOneTable
static void analyzeOneTable(
  Parse *pParse,   /* Parser context */
  Table *pTab,     /* Table whose indices are to be analyzed */
  Index *pOnlyIdx, /* If not NULL, only analyze this one index */
  int iStatCur,    /* Index of VdbeCursor that writes the sqlite_stat1 table */
  int iMem,        /* Available memory locations begin here */
  int iTab         /* Next available cursor */
){
  sqlite3 *db = pParse->db;    /* Database handle */
  Index *pIdx;                 /* An index to being analyzed */
  int iIdxCur;                 /* Cursor open on index being analyzed */
  int iTabCur;                 /* Table cursor */
  Vdbe *v;                     /* The virtual machine being built up */
  int i;                       /* Loop counter */
  int jZeroRows = -1;          /* Jump from here if number of rows is zero */
  int iDb;                     /* Index of database containing pTab */
  u8 needTableCnt = 1;         /* True to count the table */
  int regNewRowid = iMem++;    /* Rowid for the inserted record */
  int regStat4 = iMem++;       /* Register to hold Stat4Accum object */
  int regChng = iMem++;        /* Index of changed index field */
#ifdef SQLITE_ENABLE_STAT3_OR_STAT4
  int regRowid = iMem++;       /* Rowid argument passed to stat_push() */
#endif
  int regTemp = iMem++;        /* Temporary use register */
  int regTabname = iMem++;     /* Register containing table name */
  int regIdxname = iMem++;     /* Register containing index name */
  int regStat1 = iMem++;       /* Value for the stat column of sqlite_stat1 */
  int regPrev = iMem;          /* MUST BE LAST (see below) */

  pParse->nMem = MAX(pParse->nMem, iMem);
  v = sqlite3GetVdbe(pParse);
  if( v==0 || NEVER(pTab==0) ){
    return;
  }
  if( pTab->tnum==0 ){
    /* Do not gather statistics on views or virtual tables */
    return;
  }
  if( sqlite3_strlike("sqlite_%", pTab->zName, 0)==0 ){
    /* Do not gather statistics on system tables */
    return;
  }
  assert( sqlite3BtreeHoldsAllMutexes(db) );
  iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
  assert( iDb>=0 );
  assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
#ifndef SQLITE_OMIT_AUTHORIZATION
  if( sqlite3AuthCheck(pParse, SQLITE_ANALYZE, pTab->zName, 0,
      db->aDb[iDb].zName ) ){
    return;
  }
#endif

  /* Establish a read-lock on the table at the shared-cache level. 
  ** Open a read-only cursor on the table. Also allocate a cursor number
  ** to use for scanning indexes (iIdxCur). No index cursor is opened at
  ** this time though.  */
  sqlite3TableLock(pParse, iDb, pTab->tnum, 0, pTab->zName);
  iTabCur = iTab++;
  iIdxCur = iTab++;
  pParse->nTab = MAX(pParse->nTab, iTab);
  sqlite3OpenTable(pParse, iTabCur, iDb, pTab, OP_OpenRead);
  sqlite3VdbeLoadString(v, regTabname, pTab->zName);

  for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
    int nCol;                     /* Number of columns in pIdx. "N" */
    int addrRewind;               /* Address of "OP_Rewind iIdxCur" */
    int addrNextRow;              /* Address of "next_row:" */
    const char *zIdxName;         /* Name of the index */
    int nColTest;                 /* Number of columns to test for changes */

    if( pOnlyIdx && pOnlyIdx!=pIdx ) continue;
    if( pIdx->pPartIdxWhere==0 ) needTableCnt = 0;
    if( !HasRowid(pTab) && IsPrimaryKeyIndex(pIdx) ){
      nCol = pIdx->nKeyCol;
      zIdxName = pTab->zName;
      nColTest = nCol - 1;
    }else{
      nCol = pIdx->nColumn;
      zIdxName = pIdx->zName;
      nColTest = pIdx->uniqNotNull ? pIdx->nKeyCol-1 : nCol-1;
    }

    /* Populate the register containing the index name. */
    sqlite3VdbeLoadString(v, regIdxname, zIdxName);
    VdbeComment((v, "Analysis for %s.%s", pTab->zName, zIdxName));

    /*
    ** Pseudo-code for loop that calls stat_push():
    **
    **   Rewind csr
    **   if eof(csr) goto end_of_scan;
    **   regChng = 0
    **   goto chng_addr_0;
    **
    **  next_row:
    **   regChng = 0
    **   if( idx(0) != regPrev(0) ) goto chng_addr_0
    **   regChng = 1
    **   if( idx(1) != regPrev(1) ) goto chng_addr_1
    **   ...
    **   regChng = N
    **   goto chng_addr_N
    **
    **  chng_addr_0:
    **   regPrev(0) = idx(0)
    **  chng_addr_1:
    **   regPrev(1) = idx(1)
    **  ...
    **
    **  endDistinctTest:
    **   regRowid = idx(rowid)
    **   stat_push(P, regChng, regRowid)
    **   Next csr
    **   if !eof(csr) goto next_row;
    **
    **  end_of_scan:
    */

    /* Make sure there are enough memory cells allocated to accommodate 
    ** the regPrev array and a trailing rowid (the rowid slot is required
    ** when building a record to insert into the sample column of 
    ** the sqlite_stat4 table.  */
    pParse->nMem = MAX(pParse->nMem, regPrev+nColTest);

    /* Open a read-only cursor on the index being analyzed. */
    assert( iDb==sqlite3SchemaToIndex(db, pIdx->pSchema) );
    sqlite3VdbeAddOp3(v, OP_OpenRead, iIdxCur, pIdx->tnum, iDb);
    sqlite3VdbeSetP4KeyInfo(pParse, pIdx);
    VdbeComment((v, "%s", pIdx->zName));

    /* Invoke the stat_init() function. The arguments are:
    ** 
    **    (1) the number of columns in the index including the rowid
    **        (or for a WITHOUT ROWID table, the number of PK columns),
    **    (2) the number of columns in the key without the rowid/pk
    **    (3) the number of rows in the index,
    **
    **
    ** The third argument is only used for STAT3 and STAT4
    */
#ifdef SQLITE_ENABLE_STAT3_OR_STAT4
    sqlite3VdbeAddOp2(v, OP_Count, iIdxCur, regStat4+3);
#endif
    sqlite3VdbeAddOp2(v, OP_Integer, nCol, regStat4+1);
    sqlite3VdbeAddOp2(v, OP_Integer, pIdx->nKeyCol, regStat4+2);
    sqlite3VdbeAddOp3(v, OP_Function0, 0, regStat4+1, regStat4);
    sqlite3VdbeChangeP4(v, -1, (char*)&statInitFuncdef, P4_FUNCDEF);
    sqlite3VdbeChangeP5(v, 2+IsStat34);

    /* Implementation of the following:
    **
    **   Rewind csr
    **   if eof(csr) goto end_of_scan;
    **   regChng = 0
    **   goto next_push_0;
    **
    */
    addrRewind = sqlite3VdbeAddOp1(v, OP_Rewind, iIdxCur);
    VdbeCoverage(v);
    sqlite3VdbeAddOp2(v, OP_Integer, 0, regChng);
    addrNextRow = sqlite3VdbeCurrentAddr(v);

    if( nColTest>0 ){
      int endDistinctTest = sqlite3VdbeMakeLabel(v);
      int *aGotoChng;               /* Array of jump instruction addresses */
      aGotoChng = sqlite3DbMallocRaw(db, sizeof(int)*nColTest);
      if( aGotoChng==0 ) continue;

      /*
      **  next_row:
      **   regChng = 0
      **   if( idx(0) != regPrev(0) ) goto chng_addr_0
      **   regChng = 1
      **   if( idx(1) != regPrev(1) ) goto chng_addr_1
      **   ...
      **   regChng = N
      **   goto endDistinctTest
      */
      sqlite3VdbeAddOp0(v, OP_Goto);
      addrNextRow = sqlite3VdbeCurrentAddr(v);
      if( nColTest==1 && pIdx->nKeyCol==1 && IsUniqueIndex(pIdx) ){
        /* For a single-column UNIQUE index, once we have found a non-NULL
        ** row, we know that all the rest will be distinct, so skip 
        ** subsequent distinctness tests. */
        sqlite3VdbeAddOp2(v, OP_NotNull, regPrev, endDistinctTest);
        VdbeCoverage(v);
      }
      for(i=0; i<nColTest; i++){
        char *pColl = (char*)sqlite3LocateCollSeq(pParse, pIdx->azColl[i]);
        sqlite3VdbeAddOp2(v, OP_Integer, i, regChng);
        sqlite3VdbeAddOp3(v, OP_Column, iIdxCur, i, regTemp);
        aGotoChng[i] = 
        sqlite3VdbeAddOp4(v, OP_Ne, regTemp, 0, regPrev+i, pColl, P4_COLLSEQ);
        sqlite3VdbeChangeP5(v, SQLITE_NULLEQ);
        VdbeCoverage(v);
      }
      sqlite3VdbeAddOp2(v, OP_Integer, nColTest, regChng);
      sqlite3VdbeGoto(v, endDistinctTest);
  
  
      /*
      **  chng_addr_0:
      **   regPrev(0) = idx(0)
      **  chng_addr_1:
      **   regPrev(1) = idx(1)
      **  ...
      */
      sqlite3VdbeJumpHere(v, addrNextRow-1);
      for(i=0; i<nColTest; i++){
        sqlite3VdbeJumpHere(v, aGotoChng[i]);
        sqlite3VdbeAddOp3(v, OP_Column, iIdxCur, i, regPrev+i);
      }
      sqlite3VdbeResolveLabel(v, endDistinctTest);
      sqlite3DbFree(db, aGotoChng);
    }
  
    /*
    **  chng_addr_N:
    **   regRowid = idx(rowid)            // STAT34 only
    **   stat_push(P, regChng, regRowid)  // 3rd parameter STAT34 only
    **   Next csr
    **   if !eof(csr) goto next_row;
    */
#ifdef SQLITE_ENABLE_STAT3_OR_STAT4
    assert( regRowid==(regStat4+2) );
    if( HasRowid(pTab) ){
      sqlite3VdbeAddOp2(v, OP_IdxRowid, iIdxCur, regRowid);
    }else{
      Index *pPk = sqlite3PrimaryKeyIndex(pIdx->pTable);
      int j, k, regKey;
      regKey = sqlite3GetTempRange(pParse, pPk->nKeyCol);
      for(j=0; j<pPk->nKeyCol; j++){
        k = sqlite3ColumnOfIndex(pIdx, pPk->aiColumn[j]);
        assert( k>=0 && k<pTab->nCol );
        sqlite3VdbeAddOp3(v, OP_Column, iIdxCur, k, regKey+j);
        VdbeComment((v, "%s", pTab->aCol[pPk->aiColumn[j]].zName));
      }
      sqlite3VdbeAddOp3(v, OP_MakeRecord, regKey, pPk->nKeyCol, regRowid);
      sqlite3ReleaseTempRange(pParse, regKey, pPk->nKeyCol);
    }
#endif
    assert( regChng==(regStat4+1) );
    sqlite3VdbeAddOp3(v, OP_Function0, 1, regStat4, regTemp);
    sqlite3VdbeChangeP4(v, -1, (char*)&statPushFuncdef, P4_FUNCDEF);
    sqlite3VdbeChangeP5(v, 2+IsStat34);
    sqlite3VdbeAddOp2(v, OP_Next, iIdxCur, addrNextRow); VdbeCoverage(v);

    /* Add the entry to the stat1 table. */
    callStatGet(v, regStat4, STAT_GET_STAT1, regStat1);
    assert( "BBB"[0]==SQLITE_AFF_TEXT );
    sqlite3VdbeAddOp4(v, OP_MakeRecord, regTabname, 3, regTemp, "BBB", 0);
    sqlite3VdbeAddOp2(v, OP_NewRowid, iStatCur, regNewRowid);
    sqlite3VdbeAddOp3(v, OP_Insert, iStatCur, regTemp, regNewRowid);
    sqlite3VdbeChangeP5(v, OPFLAG_APPEND);

    /* Add the entries to the stat3 or stat4 table. */
#ifdef SQLITE_ENABLE_STAT3_OR_STAT4
    {
      int regEq = regStat1;
      int regLt = regStat1+1;
      int regDLt = regStat1+2;
      int regSample = regStat1+3;
      int regCol = regStat1+4;
      int regSampleRowid = regCol + nCol;
      int addrNext;
      int addrIsNull;
      u8 seekOp = HasRowid(pTab) ? OP_NotExists : OP_NotFound;

      pParse->nMem = MAX(pParse->nMem, regCol+nCol);

      addrNext = sqlite3VdbeCurrentAddr(v);
      callStatGet(v, regStat4, STAT_GET_ROWID, regSampleRowid);
      addrIsNull = sqlite3VdbeAddOp1(v, OP_IsNull, regSampleRowid);
      VdbeCoverage(v);
      callStatGet(v, regStat4, STAT_GET_NEQ, regEq);
      callStatGet(v, regStat4, STAT_GET_NLT, regLt);
      callStatGet(v, regStat4, STAT_GET_NDLT, regDLt);
      sqlite3VdbeAddOp4Int(v, seekOp, iTabCur, addrNext, regSampleRowid, 0);
      /* We know that the regSampleRowid row exists because it was read by
      ** the previous loop.  Thus the not-found jump of seekOp will never
      ** be taken */
      VdbeCoverageNeverTaken(v);
#ifdef SQLITE_ENABLE_STAT3
      sqlite3ExprCodeLoadIndexColumn(pParse, pIdx, iTabCur, 0, regSample);
#else
      for(i=0; i<nCol; i++){
        sqlite3ExprCodeLoadIndexColumn(pParse, pIdx, iTabCur, i, regCol+i);
      }
      sqlite3VdbeAddOp3(v, OP_MakeRecord, regCol, nCol, regSample);
#endif
      sqlite3VdbeAddOp3(v, OP_MakeRecord, regTabname, 6, regTemp);
      sqlite3VdbeAddOp2(v, OP_NewRowid, iStatCur+1, regNewRowid);
      sqlite3VdbeAddOp3(v, OP_Insert, iStatCur+1, regTemp, regNewRowid);
      sqlite3VdbeAddOp2(v, OP_Goto, 1, addrNext); /* P1==1 for end-of-loop */
      sqlite3VdbeJumpHere(v, addrIsNull);
    }
#endif /* SQLITE_ENABLE_STAT3_OR_STAT4 */

    /* End of analysis */
    sqlite3VdbeJumpHere(v, addrRewind);
  }


  /* Create a single sqlite_stat1 entry containing NULL as the index
  ** name and the row count as the content.
  */
  if( pOnlyIdx==0 && needTableCnt ){
    VdbeComment((v, "%s", pTab->zName));
    sqlite3VdbeAddOp2(v, OP_Count, iTabCur, regStat1);
    jZeroRows = sqlite3VdbeAddOp1(v, OP_IfNot, regStat1); VdbeCoverage(v);
    sqlite3VdbeAddOp2(v, OP_Null, 0, regIdxname);
    assert( "BBB"[0]==SQLITE_AFF_TEXT );
    sqlite3VdbeAddOp4(v, OP_MakeRecord, regTabname, 3, regTemp, "BBB", 0);
    sqlite3VdbeAddOp2(v, OP_NewRowid, iStatCur, regNewRowid);
    sqlite3VdbeAddOp3(v, OP_Insert, iStatCur, regTemp, regNewRowid);
    sqlite3VdbeChangeP5(v, OPFLAG_APPEND);
    sqlite3VdbeJumpHere(v, jZeroRows);
  }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xc0, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movl %ecx, -0x1c(%rbp)
movl %r8d, -0x20(%rbp)
movl %r9d, -0x24(%rbp)
movq -0x8(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x30(%rbp)
movl $0xffffffff, -0x50(%rbp) # imm = 0xFFFFFFFF
movb $0x1, -0x55(%rbp)
movl -0x20(%rbp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, -0x20(%rbp)
movl %eax, -0x5c(%rbp)
movl -0x20(%rbp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, -0x20(%rbp)
movl %eax, -0x60(%rbp)
movl -0x20(%rbp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, -0x20(%rbp)
movl %eax, -0x64(%rbp)
movl -0x20(%rbp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, -0x20(%rbp)
movl %eax, -0x68(%rbp)
movl -0x20(%rbp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, -0x20(%rbp)
movl %eax, -0x6c(%rbp)
movl -0x20(%rbp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, -0x20(%rbp)
movl %eax, -0x70(%rbp)
movl -0x20(%rbp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, -0x20(%rbp)
movl %eax, -0x74(%rbp)
movl -0x20(%rbp), %eax
movl %eax, -0x78(%rbp)
movq -0x8(%rbp), %rax
movl 0x54(%rax), %eax
cmpl -0x20(%rbp), %eax
jle 0x9828b
movq -0x8(%rbp), %rax
movl 0x54(%rax), %eax
movl %eax, -0xac(%rbp)
jmp 0x98294
movl -0x20(%rbp), %eax
movl %eax, -0xac(%rbp)
movl -0xac(%rbp), %ecx
movq -0x8(%rbp), %rax
movl %ecx, 0x54(%rax)
movq -0x8(%rbp), %rdi
callq 0x6bd00
movq %rax, -0x48(%rbp)
cmpq $0x0, -0x48(%rbp)
je 0x982bc
cmpq $0x0, -0x10(%rbp)
jne 0x982c1
jmp 0x9897c
movq -0x10(%rbp), %rax
cmpl $0x0, 0x38(%rax)
jne 0x982d0
jmp 0x9897c
movq -0x10(%rbp), %rax
movq (%rax), %rsi
leaq 0x10f14(%rip), %rdi     # 0xa91f2
xorl %edx, %edx
callq 0xb110
cmpl $0x0, %eax
jne 0x982ef
jmp 0x9897c
movq -0x30(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x68(%rax), %rsi
callq 0x17ab0
movl %eax, -0x54(%rbp)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq (%rax), %rdx
movq -0x30(%rbp), %rax
movq 0x20(%rax), %rax
movslq -0x54(%rbp), %rcx
shlq $0x5, %rcx
addq %rcx, %rax
movq (%rax), %r8
movl $0x1c, %esi
xorl %eax, %eax
movl %eax, %ecx
callq 0x73440
cmpl $0x0, %eax
je 0x9833c
jmp 0x9897c
movq -0x8(%rbp), %rdi
movl -0x54(%rbp), %esi
movq -0x10(%rbp), %rax
movl 0x38(%rax), %edx
movq -0x10(%rbp), %rax
movq (%rax), %r8
xorl %ecx, %ecx
callq 0x6c340
movl -0x24(%rbp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, -0x24(%rbp)
movl %eax, -0x40(%rbp)
movl -0x24(%rbp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, -0x24(%rbp)
movl %eax, -0x3c(%rbp)
movq -0x8(%rbp), %rax
movl 0x50(%rax), %eax
cmpl -0x24(%rbp), %eax
jle 0x9838f
movq -0x8(%rbp), %rax
movl 0x50(%rax), %eax
movl %eax, -0xb0(%rbp)
jmp 0x98398
movl -0x24(%rbp), %eax
movl %eax, -0xb0(%rbp)
movl -0xb0(%rbp), %ecx
movq -0x8(%rbp), %rax
movl %ecx, 0x50(%rax)
movq -0x8(%rbp), %rdi
movl -0x40(%rbp), %esi
movl -0x54(%rbp), %edx
movq -0x10(%rbp), %rcx
movl $0x37, %r8d
callq 0x6c1e0
movq -0x48(%rbp), %rdi
movl -0x6c(%rbp), %esi
movq -0x10(%rbp), %rax
movq (%rax), %rdx
callq 0x6c2d0
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x38(%rbp)
cmpq $0x0, -0x38(%rbp)
je 0x988b9
cmpq $0x0, -0x18(%rbp)
je 0x983fe
movq -0x18(%rbp), %rax
cmpq -0x38(%rbp), %rax
je 0x983fe
jmp 0x988a8
movq -0x38(%rbp), %rax
cmpq $0x0, 0x48(%rax)
jne 0x9840d
movb $0x0, -0x55(%rbp)
movq -0x10(%rbp), %rax
movzbl 0x46(%rax), %eax
andl $0x20, %eax
cmpl $0x0, %eax
je 0x98455
movq -0x38(%rbp), %rax
movb 0x63(%rax), %al
andb $0x3, %al
movzbl %al, %eax
cmpl $0x2, %eax
jne 0x98455
movq -0x38(%rbp), %rax
movzwl 0x5e(%rax), %eax
movl %eax, -0x7c(%rbp)
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x90(%rbp)
movl -0x7c(%rbp), %eax
subl $0x1, %eax
movl %eax, -0x94(%rbp)
jmp 0x984ad
movq -0x38(%rbp), %rax
movzwl 0x60(%rax), %eax
movl %eax, -0x7c(%rbp)
movq -0x38(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x90(%rbp)
movq -0x38(%rbp), %rax
movb 0x63(%rax), %al
shrb $0x3, %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
je 0x98495
movq -0x38(%rbp), %rax
movzwl 0x5e(%rax), %eax
subl $0x1, %eax
movl %eax, -0xb4(%rbp)
jmp 0x984a1
movl -0x7c(%rbp), %eax
subl $0x1, %eax
movl %eax, -0xb4(%rbp)
movl -0xb4(%rbp), %eax
movl %eax, -0x94(%rbp)
movq -0x48(%rbp), %rdi
movl -0x70(%rbp), %esi
movq -0x90(%rbp), %rdx
callq 0x6c2d0
movq -0x8(%rbp), %rax
movl 0x54(%rax), %eax
movl -0x78(%rbp), %ecx
addl -0x94(%rbp), %ecx
cmpl %ecx, %eax
jle 0x984e3
movq -0x8(%rbp), %rax
movl 0x54(%rax), %eax
movl %eax, -0xb8(%rbp)
jmp 0x984f2
movl -0x78(%rbp), %eax
addl -0x94(%rbp), %eax
movl %eax, -0xb8(%rbp)
movl -0xb8(%rbp), %ecx
movq -0x8(%rbp), %rax
movl %ecx, 0x54(%rax)
movq -0x48(%rbp), %rdi
movl -0x3c(%rbp), %edx
movq -0x38(%rbp), %rax
movl 0x58(%rax), %ecx
movl -0x54(%rbp), %r8d
movl $0x37, %esi
callq 0x56c10
movq -0x8(%rbp), %rdi
movq -0x38(%rbp), %rsi
callq 0x6c4e0
movq -0x48(%rbp), %rdi
movl -0x7c(%rbp), %edx
movl -0x60(%rbp), %ecx
addl $0x1, %ecx
movl $0x17, %esi
callq 0x6c310
movq -0x48(%rbp), %rdi
movq -0x38(%rbp), %rax
movzwl 0x5e(%rax), %edx
movl -0x60(%rbp), %ecx
addl $0x2, %ecx
movl $0x17, %esi
callq 0x6c310
movq -0x48(%rbp), %rdi
movl -0x60(%rbp), %ecx
addl $0x1, %ecx
movl -0x60(%rbp), %r8d
movl $0x24, %esi
xorl %edx, %edx
callq 0x56c10
movq -0x48(%rbp), %rdi
movl $0xffffffff, %esi       # imm = 0xFFFFFFFF
leaq 0x265fb(%rip), %rdx     # 0xbeb80
movl $0xfffffffb, %ecx       # imm = 0xFFFFFFFB
callq 0x17dd0
movq -0x48(%rbp), %rdi
movl $0x2, %esi
callq 0x17b70
movq -0x48(%rbp), %rdi
movl -0x3c(%rbp), %edx
movl $0x6e, %esi
callq 0x6e570
movl %eax, -0x80(%rbp)
movq -0x48(%rbp), %rdi
movl -0x64(%rbp), %ecx
movl $0x17, %esi
xorl %edx, %edx
callq 0x6c310
movq -0x48(%rbp), %rdi
callq 0x6c2b0
movl %eax, -0x84(%rbp)
cmpl $0x0, -0x94(%rbp)
jle 0x987ce
movq -0x48(%rbp), %rdi
callq 0x6e5a0
movl %eax, -0x98(%rbp)
movq -0x30(%rbp), %rdi
movslq -0x94(%rbp), %rsi
shlq $0x2, %rsi
callq 0x175d0
movq %rax, -0xa0(%rbp)
cmpq $0x0, -0xa0(%rbp)
jne 0x98619
jmp 0x988a8
movq -0x48(%rbp), %rdi
movl $0xe, %esi
callq 0x6be00
movq -0x48(%rbp), %rdi
callq 0x6c2b0
movl %eax, -0x84(%rbp)
cmpl $0x1, -0x94(%rbp)
jne 0x98670
movq -0x38(%rbp), %rax
movzwl 0x5e(%rax), %eax
cmpl $0x1, %eax
jne 0x98670
movq -0x38(%rbp), %rax
movzbl 0x62(%rax), %eax
cmpl $0x0, %eax
je 0x98670
movq -0x48(%rbp), %rdi
movl -0x78(%rbp), %edx
movl -0x98(%rbp), %ecx
movl $0x4d, %esi
callq 0x6c310
movl $0x0, -0x4c(%rbp)
movl -0x4c(%rbp), %eax
cmpl -0x94(%rbp), %eax
jge 0x98727
movq -0x8(%rbp), %rdi
movq -0x38(%rbp), %rax
movq 0x40(%rax), %rax
movslq -0x4c(%rbp), %rcx
movq (%rax,%rcx,8), %rsi
callq 0x6c720
movq %rax, -0xa8(%rbp)
movq -0x48(%rbp), %rdi
movl -0x4c(%rbp), %edx
movl -0x64(%rbp), %ecx
movl $0x17, %esi
callq 0x6c310
movq -0x48(%rbp), %rdi
movl -0x3c(%rbp), %edx
movl -0x4c(%rbp), %ecx
movl -0x68(%rbp), %r8d
movl $0x30, %esi
callq 0x56c10
movq -0x48(%rbp), %rdi
movl -0x68(%rbp), %edx
movl -0x78(%rbp), %r8d
addl -0x4c(%rbp), %r8d
movq -0xa8(%rbp), %r9
movl $0x4e, %esi
xorl %ecx, %ecx
movl $0xfffffffc, (%rsp)     # imm = 0xFFFFFFFC
callq 0x6be70
movl %eax, %edx
movq -0xa0(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movl %edx, (%rax,%rcx,4)
movq -0x48(%rbp), %rdi
movl $0x80, %esi
callq 0x17b70
movl -0x4c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4c(%rbp)
jmp 0x98677
movq -0x48(%rbp), %rdi
movl -0x94(%rbp), %edx
movl -0x64(%rbp), %ecx
movl $0x17, %esi
callq 0x6c310
movq -0x48(%rbp), %rdi
movl -0x98(%rbp), %esi
callq 0x6c1b0
movq -0x48(%rbp), %rdi
movl -0x84(%rbp), %esi
subl $0x1, %esi
callq 0x6be30
movl $0x0, -0x4c(%rbp)
movl -0x4c(%rbp), %eax
cmpl -0x94(%rbp), %eax
jge 0x987af
movq -0x48(%rbp), %rdi
movq -0xa0(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movl (%rax,%rcx,4), %esi
callq 0x6be30
movq -0x48(%rbp), %rdi
movl -0x3c(%rbp), %edx
movl -0x4c(%rbp), %ecx
movl -0x78(%rbp), %r8d
addl -0x4c(%rbp), %r8d
movl $0x30, %esi
callq 0x56c10
movl -0x4c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4c(%rbp)
jmp 0x98766
movq -0x48(%rbp), %rdi
movl -0x98(%rbp), %esi
callq 0x6e780
movq -0x30(%rbp), %rdi
movq -0xa0(%rbp), %rsi
callq 0xd260
movq -0x48(%rbp), %rdi
movl -0x60(%rbp), %ecx
movl -0x68(%rbp), %r8d
movl $0x24, %esi
movl $0x1, %edx
callq 0x56c10
movq -0x48(%rbp), %rdi
movl $0xffffffff, %esi       # imm = 0xFFFFFFFF
leaq 0x263d0(%rip), %rdx     # 0xbebc8
movl $0xfffffffb, %ecx       # imm = 0xFFFFFFFB
callq 0x17dd0
movq -0x48(%rbp), %rdi
movl $0x2, %esi
callq 0x17b70
movq -0x48(%rbp), %rdi
movl -0x3c(%rbp), %edx
movl -0x84(%rbp), %ecx
movl $0x8, %esi
callq 0x6c310
movq -0x48(%rbp), %rdi
movl -0x60(%rbp), %esi
movl -0x74(%rbp), %ecx
xorl %edx, %edx
callq 0x989d0
movq -0x48(%rbp), %rdi
movl -0x6c(%rbp), %edx
movl -0x68(%rbp), %r8d
movl $0x32, %esi
movl $0x3, %ecx
leaq 0x109a7(%rip), %r9      # 0xa91fb
xorl %eax, %eax
movl $0x0, (%rsp)
callq 0x6be70
movq -0x48(%rbp), %rdi
movl -0x1c(%rbp), %edx
movl -0x5c(%rbp), %ecx
movl $0x54, %esi
callq 0x6c310
movq -0x48(%rbp), %rdi
movl -0x1c(%rbp), %edx
movl -0x68(%rbp), %ecx
movl -0x5c(%rbp), %r8d
movl $0x5f, %esi
callq 0x56c10
movq -0x48(%rbp), %rdi
movl $0x8, %esi
callq 0x17b70
movq -0x48(%rbp), %rdi
movl -0x80(%rbp), %esi
callq 0x6be30
movq -0x38(%rbp), %rax
movq 0x28(%rax), %rax
movq %rax, -0x38(%rbp)
jmp 0x983dd
cmpq $0x0, -0x18(%rbp)
jne 0x9897c
movzbl -0x55(%rbp), %eax
cmpl $0x0, %eax
je 0x9897c
movq -0x48(%rbp), %rdi
movl -0x40(%rbp), %edx
movl -0x74(%rbp), %ecx
movl $0x33, %esi
callq 0x6c310
movq -0x48(%rbp), %rdi
movl -0x74(%rbp), %edx
movl $0x2f, %esi
callq 0x6e570
movl %eax, -0x50(%rbp)
movq -0x48(%rbp), %rdi
movl -0x70(%rbp), %ecx
movl $0x1a, %esi
xorl %edx, %edx
callq 0x6c310
movq -0x48(%rbp), %rdi
movl -0x6c(%rbp), %edx
movl -0x68(%rbp), %r8d
movl $0x32, %esi
movl $0x3, %ecx
leaq 0x108d3(%rip), %r9      # 0xa91fb
xorl %eax, %eax
movl $0x0, (%rsp)
callq 0x6be70
movq -0x48(%rbp), %rdi
movl -0x1c(%rbp), %edx
movl -0x5c(%rbp), %ecx
movl $0x54, %esi
callq 0x6c310
movq -0x48(%rbp), %rdi
movl -0x1c(%rbp), %edx
movl -0x68(%rbp), %ecx
movl -0x5c(%rbp), %r8d
movl $0x5f, %esi
callq 0x56c10
movq -0x48(%rbp), %rdi
movl $0x8, %esi
callq 0x17b70
movq -0x48(%rbp), %rdi
movl -0x50(%rbp), %esi
callq 0x6be30
addq $0xc0, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)