anchor.diff:  client(SetType, CounterType, SyncInterval, Runner, Id, AdsWithContractsId, AdsWithContracts0, Counters0) ->
       receive
           {runner, terminate} ->
  +            Runner ! {runner, ok},
               ok;
           {runner, view_ad} ->
               Counters = case dict:size(Counters0) of
  
positive.code:     {ok, {Servers, _, _, _}} = lasp:declare(SetType),
  
      %% Get the current advertisement list.
      {ok, {_, _, _, AdList0}} = lasp:read(AdsWithContracts, {strict, undefined}),
      AdList = SetType:value(AdList0),
  
      %% For each advertisement, launch one server for tracking it's
      %% impressions and wait to disable.
      lists:map(fun(Ad) ->
                  ServerPid = spawn_link(?MODULE, server, [Ad, Ads]),
                  {ok, _} = lasp:update(Servers, {add, ServerPid}, undefined),
                  ServerPid
  
negative.code: %% @doc Terminate any running clients gracefully issuing final
  %%      synchronization.
  terminate(#state{client_list=ClientList}=State) ->
      TerminateFun = fun(Pid) ->
              Pid ! {runner, terminate},
              %% Message might be queued, if synchronization is in
              %% progress, which would trigger a race with shutdown, so
              %% wait for the client to explicitly ack the terminate call.
              receive
                  {runner, ok} ->
                      ok
              end
      end,
      lists:foreach(TerminateFun, ClientList),
      lager:info("All clients terminated!"),
      {ok, State}.
  
  %% @doc Simulate clients viewing advertisements.
  