RtlFindClearRunsEx

INT64 __fastcall RtlFindClearRunsEx(UINT64 *a1, INT64 a2){
  UINT64 v2; 
  unsigned __int8 *v3; 
  UINT64 v4; 
  int v5; 
  unsigned int v6; 
  unsigned int v8; 
  __int64 v9; 
  unsigned __int64 v10; 
  __int64 v11; 
  unsigned __int64 v12; 
  int v13; 
  unsigned __int8 v14; 
  __int64 v15; 
  unsigned int v16; 
  unsigned __int8 v17; 
  unsigned int v18; 
  unsigned int v19; 
  __int64 v20; 
  _QWORD *k; 
  unsigned int v23; 
  unsigned int v24; 
  __int64 v25; 
  _QWORD *i; 
  __int64 v27; 
  __int64 v28; 
  int v29; 
  char j; 
  unsigned int v31; 
  int v32; 
  unsigned int v33; 
  __int64 v34; 
  _QWORD *v35; 
  unsigned __int8 *v36; 
  unsigned int v37; 
  v2 = *a1;
  v3 = (unsigned __int8 *)a1[1];
  v4 = v2 & 7;
  v5 = 0;
  v6 = 0;
  v37 = 0;
  v8 = 0;
  LODWORD(v9) = 0;
  v10 = (v2 >> 3) + ((v2 & 7) != 0);
  if( v10 )
  {
    v11 = 0i64;
    v12 = v10 - 1;
    v13 = 0;
    do
    {
      v14 = *v3++;
      v36 = v3;
      if( v11 == v12 && v4 )
        v14 |= byte_14001A768[v4];
      if( v14 )
      {
        v15 = *((unsigned __int8 *)RtlpBitsClearLow + v14);
        v16 = v15 + v9;
        if( v16 && (!v8 || *(_DWORD *)(a2 + 8i64 * (v8 - 1) + 4) < v16) )
        {
          v23 = v8 + 1;
          if( v8 )
            v23 = v8;
          v8 = v23;
          v24 = v23 - 2;
          v25 = (int)(v23 - 2);
          for( i = (_QWORD *)(a2 + 8 + 8 * v25); v25 >= 0 && *((_DWORD *)i - 1) < v16; --i )
          {
            --v24;
            --v25;
            *i = *(i - 1);
          }
          v27 = (int)v24;
          v6 = v37;
          *(_DWORD *)(a2 + 8 * v27 + 12) = v16;
          *(_DWORD *)(a2 + 8 * v27 + 8) = v5;
        }
        v9 = *((unsigned __int8 *)RtlpBitsClearHigh + v14);
        v5 = v13 - v9 + 8;
        v17 = *((_BYTE *)qword_14001A770 - v9) | byte_14001DA00[v15] | v14;
        if( v17 != 0xFF )
        {
          do
          {
            if( v8
              && *(_DWORD *)(a2 + 8i64 * (v8 - 1) + 4) >= (unsigned int)*((unsigned __int8 *)RtlpBitsClearAnywhere + v17) )
            {
              break;
            }
            v28 = *((unsigned __int8 *)RtlpBitsClearAnywhere + v17);
            v29 = 0;
            for( j = byte_14001DA00[v28]; ((unsigned __int8)j & v17) != 0; j *= 2 )
              ++v29;
            v31 = v8 + 1;
            v32 = *((unsigned __int8 *)RtlpBitsClearAnywhere + v17);
            if( v8 )
              v31 = v8;
            v8 = v31;
            v33 = v31 - 2;
            v34 = (int)(v31 - 2);
            v35 = (_QWORD *)(a2 + 8 + 8 * v34);
            while( v34 >= 0 )
            {
              v32 = v28;
              if( *((_DWORD *)v35 - 1) >= (unsigned int)v28 )
                break;
              --v33;
              --v34;
              *v35 = *(v35 - 1);
              --v35;
            }
            v17 |= j;
            *(_DWORD *)(a2 + 8i64 * (int)v33 + 12) = v32;
            *(_DWORD *)(a2 + 8i64 * (int)v33 + 8) = v13 + v29;
          }
          while( v17 != 0xFF );
          v5 = v13 - v9 + 8;
          v6 = v37;
        }
        v3 = v36;
        v12 = v10 - 1;
      }
      else
      {
        LODWORD(v9) = v9 + 8;
      }
      ++v6;
      v13 += 8;
      v11 = v6;
      v37 = v6;
    }
    while( v6 < v10 );
  }
  if( (_DWORD)v9 && (!v8 || *(_DWORD *)(a2 + 8i64 * (v8 - 1) + 4) < (unsigned int)v9) )
  {
    v18 = v8 + 1;
    if( v8 )
      v18 = v8;
    v8 = v18;
    v19 = v18 - 2;
    v20 = (int)(v18 - 2);
    for( k = (_QWORD *)(a2 + 8 + 8 * v20); v20 >= 0 && *((_DWORD *)k - 1) < (unsigned int)v9; --k )
    {
      --v19;
      --v20;
      *k = *(k - 1);
    }
    *(_DWORD *)(a2 + 8i64 * (int)v19 + 12) = v9;
    *(_DWORD *)(a2 + 8i64 * (int)v19 + 8) = v5;
  }
  return v8;
}

Referenced by:

RtlFindLongestRunClearEx