PopEtEnergyTrackerCleanup

INT64 __fastcall PopEtEnergyTrackerCleanup(INT64 a1){
  __int64 v2; 
  _QWORD *v3; 
  void *v4; 
  INT64 *v5; 
  INT64 *v6; 
  INT64 v7; 
  _QWORD *i; 
  INT64 *v9; 
  INT64 *j; 
  void *v11; 
  PopAcquireRwLockExclusive((_POP_RW_LOCK *)(PopEtGlobals + 16));
  v2 = *(_QWORD *)a1;
  if( *(_QWORD *)(*(_QWORD *)a1 + 8i64) != a1 || (v3 = *(_QWORD **)(a1 + 8), *v3 != a1) )
    __fastfail(3u);
  *v3 = v2;
  *(_QWORD *)(v2 + 8) = v3;
  PopReleaseRwLock(PopEtGlobals + 16);
  PopEtEnergyTrackerCleanupAggregates(a1);
  v4 = *(void **)(a1 + 56);
  if( v4 )
    ExFreePoolWithTag(v4, 0x54456F50u);
  v5 = *(INT64 **)(a1 + 72);
  v6 = v5;
  while( 1 )
  {
    if( !v6 )
      goto LABEL_11;
    v7 = *v6;
    if( (*v6 & 0x8000000000000002ui64) == 0x8000000000000002ui64 )
      v7 = *v6;
    if( (v7 & 1) != 0 )
    {
LABEL_11:
      for( i = v5 + 1; ; ++i )
      {
        if( (unsigned __int64)i >= *(_QWORD *)(a1 + 72) + 8 * ((unsigned __int64)*(unsigned int *)(a1 + 68) >> 5) )
        {
          v7 = 0i64;
          goto LABEL_16;
        }
        if( (*i & 1) == 0 )
          break;
      }
      v6 = (INT64 *)*i;
      v5 = i;
      v7 = *i;
    }
    else
    {
      v6 = (INT64 *)v7;
    }
LABEL_16:
    if( !v7 )
      break;
    v9 = v6;
    for( j = v5; (*j & 1) == 0; j = (INT64 *)*j )
    {
      if( (INT64 *)*j == v6 )
      {
        *j = *v6;
        --*(_DWORD *)(a1 + 64);
        *v6 |= 0x8000000000000002ui64;
        v6 = j;
        goto LABEL_24;
      }
    }
    v9 = 0i64;
LABEL_24:
    PopEtAggregateKeyCleanup(v9 + 2);
    ExFreePoolWithTag(v9, 0x54456F50u);
  }
  v11 = *(void **)(a1 + 72);
  if( v11 )
    ExFreePoolWithTag(v11, 0x54456F50u);
  return PopEtAggregateKeyCleanup((INT64 *)(a1 + 96));
}

Referenced by:

PopEtEnergyTrackerDelete