RtlParseLeapSecondData

NTSTATUS __stdcall RtlParseLeapSecondData(INT64 a1, UINT64 a2, INT64 a3, INT64 a4){
  NTSTATUS v4; 
  signed __int64 v7; 
  unsigned int v8; 
  UINT64 *v9; 
  INT64 v10; 
  int v11; 
  UINT64 v12; 
  __int64 v13; 
  UINT64 v15; 
  INT64 v16; 
  __int64 v17; 
  __int16 v18[4]; 
  __int64 v19; 
  unsigned int v20; 
  int v21; 

  v20 = a2;
  v4 = 0;
  v15 = 0i64;
  *(_DWORD *)(a4 + 4) = 0;
  v7 = 0i64;
  v21 = 0;
  v8 = 0;
  if( (_DWORD)a2 )
  {
    v9 = (UINT64 *)(a4 + 8);
    v10 = a1 + 4;
    v16 = a3 - a4;
    while( 1 )
    {
      v18[0] = *(_WORD *)(v10 - 4);
      v18[1] = *(_WORD *)(v10 - 2);
      v18[2] = *(_WORD *)v10;
      v18[3] = *(_WORD *)(v10 + 2);
      v17 = v10;
      v19 = 3866683i64;
      if( !RtlpTimeFieldsToTimeNoLeapSeconds(v18, &v15) )
        break;
      if( (__int64)v15 <= v7 )
        return 5;
      v7 = v15;
      if( RtlLongLongAdd(v15, 10000000i64 * v21, &v15) < 0 )
        return 7;
      v12 = v15;
      if( (*(_BYTE *)(v10 + 4) & 1) != 0 )
      {
        v12 = v15 | 0x8000000000000000ui64;
        v15 |= 0x8000000000000000ui64;
      }
      if( a3 && v8 < *(_DWORD *)(a3 + 4) && v12 != *(UINT64 *)((char *)v9 + v16) )
        return 6;
      *v9 = v12;
      ++v8;
      v13 = v17;
      ++v9;
      ++*(_DWORD *)(a4 + 4);
      v10 += 12i64;
      v21 = v11 + 2 * ((*(_WORD *)(v13 + 4) & 1) == 0) - 1;
      if( v8 >= v20 )
        return v4;
    }
    return 4;
  }
  return v4;
}

Referenced by:

ExpParseAndUpdateLeapSecondData