HalpAuditSelectRsdtOrXsdt

__int64 __fastcall HalpAuditSelectRsdtOrXsdt(__int64 a1, __int64 a2){
  int v3; 
  unsigned int v4; 
  unsigned int v5; 
  unsigned int v6; 
  __int64 v7; 
  char v8; 
  char *v9; 
  char v10; 
  int v11; 
  unsigned int v12; 
  __int64 v13; 
  int v14; 
  v3 = 0;
  v4 = -1072431079;
  while( 1 )
  {
    v5 = *(unsigned __int8 *)(a1 + 15);
    v6 = v3 == 0 ? 2 : 0;
    if( v5 >= v6 )
      v5 = v3 == 0 ? 2 : 0;
    if( v5 < 2 )
    {
      v7 = 20i64;
      goto LABEL_7;
    }
    v7 = *(unsigned int *)(a1 + 20);
    if( (unsigned int)(v7 - 33) <= 0x63 )
      break;
LABEL_20:
    if( (unsigned int)++v3 >= 2 )
      return v4;
  }
  v8 = 0;
  if( !(_DWORD)v7 )
    goto LABEL_9;
LABEL_7:
  v9 = (char *)a1;
  v8 = 0;
  do
  {
    v10 = *v9++;
    v8 += v10;
    --v7;
  }
  while( v7 );
LABEL_9:
  if( v8 )
  {
    v4 = -1073741823;
    goto LABEL_20;
  }
  v11 = *(_DWORD *)(a2 + 12) | 2;
  *(_DWORD *)(a2 + 12) = v11;
  v12 = *(unsigned __int8 *)(a1 + 15);
  if( v12 >= v6 )
    v12 = v3 == 0 ? 2 : 0;
  if( v12 >= 2 && (v13 = *(_QWORD *)(a1 + 24)) != 0 )
  {
    *(_QWORD *)a2 = v13;
    *(_DWORD *)(a2 + 12) = v11 | 4;
    v14 = 0;
  }
  else
  {
    *(_QWORD *)a2 = *(unsigned int *)(a1 + 16);
    v14 = *(_DWORD *)(a1 + 20);
  }
  *(_DWORD *)(a2 + 8) = v14;
  return 0;
}

Referenced by:

HalpAuditEnumerateRsdtsInRange