CcGetBcbListHeadLargeOffset

INT64 __fastcall CcGetBcbListHeadLargeOffset(INT64 a1, INT64 a2, CHAR a3){
  __int64 v4; 
  __int64 v6; 
  int v7; 
  __int64 v8; 
  char v9; 
  char v10; 
  char v11; 
  INT64 v12; 
  __int64 v13; 
  __int128 v15[3]; 
  __int64 v16; 
  int v17[8]; 
  v4 = 0i64;
  v16 = 0i64;
  memset(v15, 0, sizeof(v15));
  v6 = *(_QWORD *)(a1 + 88);
  v7 = 0;
  v8 = *(_QWORD *)(a1 + 32);
  v9 = 25;
  do
  {
    v10 = v9;
    v9 += 7;
    ++v7;
  }
  while( v8 > 1i64 << v9 );
  if( a2 >= 1i64 << v9 )
    return a1 + 16;
  while( 1 )
  {
    v11 = v10;
    v12 = a2 >> v10;
    --v7;
    v13 = *(_QWORD *)(v6 + 8i64 * (unsigned int)(a2 >> v10));
    if( !v13 )
      break;
LABEL_5:
    *((_QWORD *)v15 + v4) = v6;
    v10 -= 7;
    v17[v4] = v12;
    a2 &= (1i64 << v11) - 1;
    v4 = (unsigned int)(v4 + 1);
    v6 = v13;
    if( !v7 )
      return v13 + 8 * (((a2 >> v10) & 0xFFFFFFFEi64) + 128);
  }
  while( 1 )
  {
    if( a3 )
    {
      if( (_DWORD)v12 != 127 )
      {
        do
        {
          if( (_DWORD)v12 == 127 )
            break;
          v12 = (unsigned int)(v12 + 1);
        }
        while( !*(_QWORD *)(v6 + 8 * v12) );
        v13 = *(_QWORD *)(v6 + 8i64 * (unsigned int)v12);
        if( v13 )
        {
          a2 = 0i64;
          goto LABEL_5;
        }
      }
    }
    else if( (_DWORD)v12 )
    {
      do
      {
        if( !(_DWORD)v12 )
          break;
        v12 = (unsigned int)(v12 - 1);
      }
      while( !*(_QWORD *)(v6 + 8 * v12) );
      v13 = *(_QWORD *)(v6 + 8i64 * (unsigned int)v12);
      if( v13 )
      {
        a2 = 0x7FFFFFFFFFFFFFFFi64;
        goto LABEL_5;
      }
    }
    if( !(_DWORD)v4 )
      return a1 + 16;
    if( (unsigned int)v4 >= 7 )
      return 0i64;
    ++v7;
    v4 = (unsigned int)(v4 - 1);
    LODWORD(v12) = v17[(unsigned int)v4];
    v6 = *((_QWORD *)v15 + (unsigned int)v4);
  }
}

Referenced by:

CcFindBcb
CcPinFileData
CcSetVacbLargeOffset