anchor.diff:  
   update_error_fun(Name, Fun) ->
       gen_server:cast(Name, {error_fun, Fun}).
  -%%%===================================================================
  -%%% gen_server callbacks
  -%%%===================================================================
  -
  -%%--------------------------------------------------------------------
  -%% @private
  -%% @doc
  -%% Initializes the server
  -%%
  -%% @spec init(Args) -> {ok, State} |
  -%%                     {ok, State, Timeout} |
  -%%                     ignore |
  -%%                     {stop, Reason}
  -%% @end
  -%%--------------------------------------------------------------------
  +
   init([Key, ErrorFun]) ->
       {ok, #state{key=Key, retry_after=0, error_fun=ErrorFun}}.
   
  -%%--------------------------------------------------------------------
  -%% @private
  -%% @doc
  -%% Handling call messages
  -%%
  -%% @spec handle_call(Request, From, State) ->
  -%%                                   {reply, Reply, State} |
  -%%                                   {reply, Reply, State, Timeout} |
  -%%                                   {noreply, State} |
  -%%                                   {noreply, State, Timeout} |
  -%%                                   {stop, Reason, Reply, State} |
  -%%                                   {stop, Reason, State}
  -%% @end
  -%%--------------------------------------------------------------------
   handle_call(stop, _From, State) ->
       {stop, normal, stopped, State};
   
  
positive.code: handle_cast(_Msg, State) ->
      {noreply, State}.
  
  %%--------------------------------------------------------------------
  %% @private
  %% @doc
  %% Handling all non call/cast messages
  %%
  %% @spec handle_info(Info, State) -> {noreply, State} |
  %%                                   {noreply, State, Timeout} |
  %%                                   {stop, Reason, State}
  %% @end
  %%--------------------------------------------------------------------
  handle_info(_Info, State) ->
      {noreply, State}.
  
  %%--------------------------------------------------------------------
  %% @private
  %% @doc
  %% This function is called by a gen_server when it is about to
  %% terminate. It should be the opposite of Module:init/1 and do any
  %% necessary cleaning up. When it returns, the gen_server terminates
  %% with Reason. The return value is ignored.
  %%
  %% @spec terminate(Reason, State) -> void()
  %% @end
  %%--------------------------------------------------------------------
  terminate(_Reason, _State) ->
      ok.
  
  %%--------------------------------------------------------------------
  %% @private
  %% @doc
  %% Convert process state when code is changed
  %%
  %% @spec code_change(OldVsn, State, Extra) -> {ok, NewState}
  %% @end
  %%--------------------------------------------------------------------
  code_change(_OldVsn, State, _Extra) ->
      {ok, State}.
  
  %%%===================================================================
  %%% Internal functions
  %%%===================================================================
  do_push(RegIds, Message, Key, ErrorFun) ->
      error_logger:info_msg("Message=~p; RegIds=~p~n", [Message, RegIds]),
      Request = jsx:encode([{<<"registration_ids">>, RegIds}|Message]),
      ApiKey = string:concat("key=", Key),
      
      try httpc:request(post, {?BASEURL, [{"Authorization", ApiKey}], "application/json", Request}, [], []) of
          {ok, {{_, 200, _}, _Headers, Body}} ->
              Json = jsx:decode(response_to_binary(Body)),
  
negative.code:     Reply = ok,
      {reply, Reply, State}.
  
  handle_cast({send, RegIds, Message}, #state{key=Key, error_fun=ErrorFun} = State) ->
      do_push(RegIds, Message, Key, ErrorFun),
      {noreply, State};
  