anchor.diff:      {noreply, State};
   
   %% @private
  -handle_info({collaborate, {FromPid, FromRequestId}=From, SourceNode, Key, Value}, #state{nodes=[_Primary, _Collaborator | Backups], store=Store0}=State) ->
  +handle_info({collaborate, {FromPid, FromRequestId}=From, SourceNode, Key, Value}, #state{membership=[_Primary, _Collaborator | Backups], store=Store0}=State) ->
       %% Write value locally.
       Store = write(Key, Value, Store0),
       lager:info("~p: node ~p storing updated value key ~p value ~p", [?MODULE, node(), Key, Value]),
  
positive.code:             {noreply, State}
      end;
  %% @private
  handle_cast({read, {FromPid, FromRequestId}=From, Key}, #state{nodes=[Primary|_Rest], store=Store}=State) ->
      case node() of 
          Primary ->
              Value = read(Key, Store),
  
negative.code: %%%===================================================================
  
  %% @private
  init([]) ->
      Store = dict:new(),
  
      %% Seed the random number generator using the deterministic seed.
      partisan_config:seed(),
  
      %% Register membership update callback.
      partisan_peer_service:add_sup_callback(fun ?MODULE:update/1),
  
      %% Start with initial membership.
      {ok, Membership} = partisan_peer_service:members(),
      lager:info("Starting with membership: ~p", [Membership]),
  
      {ok, #state{membership=Membership, store=Store}}.
  
  %% @private
  handle_call(_Msg, _From, State) ->
      {reply, ok, State}.
  
  %% @private
  handle_cast({update, Membership0}, State) ->
      Membership = lists:usort(Membership0), %% Must sort list or random selection with seed is *nondeterministic.*
      {noreply, State#state{membership=Membership}};
  
  handle_cast({write, {FromPid, FromRequestId}=From, Key, Value}, #state{membership=[Primary, Collaborator|_Rest], store=Store0}=State) ->
      case node() of 
          Primary ->
              lager:info("~p: node ~p received write for key ~p with value ~p", [?MODULE, node(), Key, Value]),
  