CmpMarkValueDataDirty

CHAR __fastcall CmpMarkValueDataDirty(UINT64 a1, INT64 a2){
  __int64 v3; 
  unsigned int v5; 
  unsigned int v6; 
  CHAR v7; 
  __int64(__fastcall *v9)(UINT64, __int64, int *); 
  __int64 v10; 
  __int64 v11; 
  __int64 v12; 
  __int64 v13; 
  unsigned __int16 v14; 
  UINT64 v15; 
  int v16; 
  int v17; 
  int v18; 
  int v19; 
  v3 = *(unsigned int *)(a2 + 8);
  if( (_DWORD)v3 == -1 )
    return 1;
  v5 = *(_DWORD *)(a2 + 4);
  v6 = v5 + 0x80000000;
  if( v5 < 0x80000000 )
    v6 = *(_DWORD *)(a2 + 4);
  if( v5 >= 0x80000000 )
    return 1;
  if( *(_DWORD *)(a1 + 212) < 4u || v6 - 16345 > 0x7FFFC026 )
    goto LABEL_7;
  v18 = -1;
  v19 = 0;
  v17 = 0;
  v9 = *(__int64(__fastcall **)(UINT64, __int64, int *))(a1 + 8);
  v10 = 0i64;
  v16 = -1;
  v11 = v9(a1, v3, &v18);
  v12 = v11;
  if( !v11 )
    return 0;
  v13 = *(unsigned int *)(v11 + 4);
  if( (_DWORD)v13 == -1 )
    goto LABEL_18;
  v10 = (*(__int64(__fastcall **)(UINT64, __int64, int *))(a1 + 8))(a1, v13, &v16);
  if( !v10 )
  {
    v7 = 0;
    goto LABEL_21;
  }
  v14 = 0;
  if( *(_WORD *)(v12 + 2) )
  {
    while( 1 )
    {
      v15 = *(unsigned int *)(v10 + 4i64 * v14);
      if( (_DWORD)v15 != -1 && !HvpMarkCellDirty(a1, v15, 0) )
        break;
      if( ++v14 >= *(_WORD *)(v12 + 2) )
        goto LABEL_17;
    }
    v7 = 0;
    goto LABEL_19;
  }
LABEL_17:
  v7 = 0;
  if( HvpMarkCellDirty(a1, *(unsigned int *)(v12 + 4), 0) )
LABEL_18:
    v7 = 1;
LABEL_19:
  if( v10 )
    (*(void(__fastcall **)(UINT64, int *))(a1 + 16))(a1, &v16);
LABEL_21:
  (*(void(__fastcall **)(UINT64, int *))(a1 + 16))(a1, &v18);
  if( !v7 )
    return v7;
LABEL_7:
  v7 = 0;
  if( HvpMarkCellDirty(a1, *(unsigned int *)(a2 + 8), 0) )
    return 1;
  return v7;
}

Referenced by:

CmDeleteValueKey
CmpCommitDeleteValueKeyUoW
CmpLightWeightPrepareDeleteValueKeyUoW
CmpLightWeightPrepareSetValueKeyUoW
CmpMarkKeyDirty
CmpMarkKeyValuesDirty
CmpSetValueKeyExisting