ArbTestAllocation

__int64 __fastcall ArbTestAllocation(__int64 a1, __int64 **a2){
  __int64 *v2; 
  NTSTATUS v5; 
  int v6; 
  __int64 *v7; 
  int v8; 
  __int64 v9; 
  __int64 v10; 
  unsigned __int64 v11; 
  unsigned __int64 i; 
  int v13; 
  __int64 *v14; 
  char v15; 
  __int64 *v16; 
  __int64 result; 
  __int64 **v18; 
  __int64 v19; 
  v2 = a2[2];
  if( v2 )
    v5 = (*(__int64(__fastcall **)(__int64, _QWORD, __int64 *, _QWORD))(a1 + 280))(
           a1,
           *((unsigned int *)a2 + 2),
           v2,
           *(_QWORD *)(a1 + 48));
  else
    v5 = RtlCopyRangeList(*(PRTL_RANGE_LIST *)(a1 + 48), *(PRTL_RANGE_LIST *)(a1 + 40));
  v6 = v5;
  if( v5 < 0 )
    goto LABEL_24;
  v7 = *a2;
  v8 = 0;
  v9 = 0i64;
  v10 = **a2;
  while( v7 != (__int64 *)v10 )
  {
    ++v8;
    if( !a2[2] && v9 != *(_QWORD *)(v10 + 32) )
    {
      v9 = *(_QWORD *)(v10 + 32);
      v6 = (*(__int64(__fastcall **)(__int64))(a1 + 288))(a1);
      if( v6 < 0 )
        goto LABEL_24;
    }
    *(_QWORD *)(v10 + 48) = 0i64;
    if( *(_QWORD *)(a1 + 144) )
    {
      v11 = *(_QWORD *)(v10 + 24);
      for( i = v11 + 32i64 * *(unsigned int *)(v10 + 16);
            v11 < i;
            i = *(_QWORD *)(v10 + 24) + 32i64 * *(unsigned int *)(v10 + 16) )
      {
        v13 = (*(__int64(__fastcall **)(unsigned __int64))(a1 + 144))(v11);
        if( v13 < 0 )
        {
          v6 = -1073741438;
          goto LABEL_24;
        }
        v11 += 32i64;
        *(_QWORD *)(v10 + 48) += v13;
      }
    }
    v10 = *(_QWORD *)v10;
    v7 = *a2;
  }
  do
  {
    v14 = (__int64 *)*v7;
    v15 = 1;
    if( (__int64 *)*v7 == v7 )
      break;
    do
    {
      v16 = (__int64 *)*v14;
      if( (__int64 *)*v14 == v7 )
        break;
      if( v14[6] > v16[6] )
      {
        v18 = (__int64 **)v14[1];
        v19 = *v16;
        *v18 = v16;
        *(_QWORD *)(v19 + 8) = v14;
        *v14 = v19;
        v14[1] = (__int64)v16;
        v16[1] = (__int64)v18;
        v15 = 0;
        *v16 = (__int64)v14;
        v16 = (__int64 *)*v14;
      }
      v14 = v16;
    }
    while( v16 != v7 );
  }
  while( !v15 );
  v6 = ArbpBuildAllocationStack(a1, *a2, v8);
  if( v6 < 0
    || (result = (*(__int64(__fastcall **)(__int64, _QWORD))(a1 + 232))(a1, *(_QWORD *)(a1 + 112)),
        v6 = result,
        (int)result < 0) )
  {
LABEL_24:
    RtlFreeRangeList(*(_QWORD *)(a1 + 48));
    return(unsigned int)v6;
  }
  return result;
}

Referenced by:

No references.