RtlpHpLfhContextInitialize

UINT64 __fastcall RtlpHpLfhContextInitialize(
        unsigned __int64 a1,
        __int64 a2,
        unsigned int a3,
        char a4,
        __int64 a5,
        __int16 a6,
        _DWORD *a7){
  __int128 v11; 
  __int64 v12; 
  __int64 i; 
  __int64 v14; 
  unsigned __int8 v15; 
  __int64 v16; 
  _QWORD *v17; 
  UINT64 result; 

  memset((VOID *)a1, 0i64, 0x4C0u);
  *(_QWORD *)a1 = a2;
  *(_BYTE *)(a1 + 57) = a4;
  v11 = *(_OWORD *)(a5 + 16);
  *(_OWORD *)(a1 + 8) = *(_OWORD *)a5;
  v12 = *(_QWORD *)(a5 + 32);
  *(_WORD *)(a1 + 58) = a6 - a1;
  *(_OWORD *)(a1 + 24) = v11;
  *(_QWORD *)(a1 + 40) = v12;
  *(_DWORD *)(a1 + 60) = *a7;
  for( i = 0i64; i < 4; ++i )
    *(_QWORD *)(a1 + 8 * i + 8) ^= a1 ^ RtlpHpHeapGlobals;
  v14 = *(_QWORD *)(a1 + 40);
  if( v14 )
    *(_QWORD *)(a1 + 40) = a1 ^ RtlpHpHeapGlobals ^ v14;
  v15 = 64;
  if( a3 <= 0x40 )
    v15 = a3;
  *(_BYTE *)(a1 + 56) = v15;
  if( v15 > 1u )
    *(_QWORD *)(a1 + 48) = (char *)qword_14000B580
                         + ((unsigned __int64)((62 - (64 - v15)) * (64 - (unsigned int)v15 + 61)) >> 1);
  v16 = 32i64;
  memset64((void *)(a1 + 128), 1ui64, 0x81ui64);
  v17 = RtlpLowFragHeapRandomData;
  do
  {
    result = RtlpHeapGenerateRandomValue64() & 0x7F7F7F7F7F7F7F7Fi64;
    *v17++ = result;
    --v16;
  }
  while( v16 );
  return result;
}

Referenced by:

RtlpHpHeapCreate