class KeyValueServiceCoordinationStore implements CoordinationStore<T> {

    @Override
    public CheckAndSetResult<ValueAndBound<T>> transformAgreedValue(Function<ValueAndBound<T>, T> transform) {
        Optional<CoordinationStoreState<T>> storeState = readLatestState();

        T targetValue = transform.apply(
                storeState.map(CoordinationStoreState::valueAndBound)
                        .orElseGet(() -> ValueAndBound.of(Optional.empty(), SequenceAndBound.INVALID_BOUND)));

        SequenceAndBound newSequenceAndBound = determineNewSequenceAndBound(storeState, targetValue);

        CheckAndSetResult<SequenceAndBound> casResult = checkAndSetCoordinationValue(
                storeState.map(CoordinationStoreState::sequenceAndBound), newSequenceAndBound);
        return extractRelevantValues(targetValue, newSequenceAndBound.bound(), casResult);
    }

    @VisibleForTesting  KeyValueServiceCoordinationStore(
            ObjectMapper objectMapper,
            KeyValueService kvs,
            byte[] coordinationRow,
            LongSupplier sequenceNumberSupplier,
            BiPredicate<T, T> shouldReuseExtantValue,
            Class<T> clazz);

}