anchor.diff:  
   %% API
   -export([advices_for_dnses/1, choose_nodes_for_dns/1, choose_ns_nodes_for_dns/1, initial_advice_for_dns/1]).
  --export([advices_for_dispatchers/1, choose_node_for_dispatcher/2]).
  +-export([advices_for_dispatchers/2, choose_node_for_dispatcher/2]).
   -export([initial_advice_for_dispatcher/0, all_nodes_for_dispatcher/1]).
   
   
  
positive.code: %% based on node states of all nodes.
  %% @end
  %%--------------------------------------------------------------------
  -spec choose_node_for_dispatcher(DSNAdvice :: #dispatcher_lb_advice{}, WorkerName::atom()) -> node().
  choose_node_for_dispatcher(Advice, WorkerName) ->
      #dispatcher_lb_advice{should_delegate = ShouldDelegate,
          nodes_and_frequency = NodesAndFreq} = Advice,
  
negative.code: %% based on node states of all nodes. The list must not be empty.
  %% @end
  %%--------------------------------------------------------------------
  -spec advices_for_dispatchers(NodeStates :: [#node_state{}], LBState :: #load_balancing_state{}) ->
      [{node(), #dispatcher_lb_advice{}}].
  advices_for_dispatchers(NodeStates, #load_balancing_state{expected_extra_load = ExtraLoads} = LBState) ->
      Nodes = [NodeState#node_state.node || NodeState <- NodeStates],
      LoadsForDisp = lists:foreach(
          fun(NodeState) ->
              L = load_for_dispatcher(NodeState),
              ExtraLoad = proplists:get_value(NodeState#node_state.node, ExtraLoads, 0.0),
              L * (1.0 - ExtraLoad)
          end, NodeStates),
      AvgLoadForDisp = average(LoadsForDisp),
      MinLoadForDisp = lists:min(LoadsForDisp),
      LoadsAndNodes = lists:zip(LoadsForDisp, Nodes),
  