anchor.diff:  -spec cast(GrainRef :: erleans:grain_ref(), Request :: term()) -> Reply :: term().
   cast(GrainRef, Request) ->
       ReqType = req_type(GrainRef),
  -    do_for_ref(GrainRef, fun(Pid) -> gen_server:cast(Pid, {ReqType, Request}) end).
  +    do_for_ref(GrainRef, fun(Pid) -> gen_statem:cast(Pid, {ReqType, Request}) end).
   
   req_type(GrainRef) when is_map(GrainRef) -> refresh_timer;
   req_type(GrainRef) when is_pid(GrainRef) -> leave_timer.
  
positive.code:     ReqType = req_type(GrainRef),
      do_for_ref(GrainRef, fun(Pid) ->
                               try
                                   gen_server:call(Pid, {ReqType, Request}, Timeout)
                               catch
                                   exit:{bad_etag, _} ->
                                       lager:error("at=grain_exit reason=bad_etag", []),
  
negative.code:          unsubscribe/2]).
  
  -export([init/1,
           callback_mode/0,
           active/3,
           deactivating/3,
           terminate/3,
           code_change/4]).
  
  -include("erleans.hrl").
  
  