anchor.diff:  %%      Begin==End, the whole key range is split in halves.
   %%      Beware: SplitFactor must be in [0, 1]; the final key will be rounded
   %%      down and may thus be Begin.
  --spec get_split_key(Begin::key(), End::key() | ?PLUS_INFINITY_TYPE, SplitFraction::{Num::0..100, Denom::0..100}) -> key().
   get_split_key(Begin, _End, {Num, _Denom}) when Num == 0 -> Begin;
   get_split_key(_Begin, End, {Num, Denom}) when Num == Denom -> End;
   get_split_key(Begin, End, {Num, Denom}) ->
  
positive.code:     ;
  
  handle_custom_message({get_rt_reply, RT}, State) ->
      io:format("Got my succs RT~n", []),
      %% merge the routing tables
      LocalRT = rt_loop:get_rt(State),
      io:format("Got local RT~n"),
      NewRT = case LocalRT =:= RT of
          true ->
              io:format("Will try to merge ~p~n", [to_list(RT)]),
              %% TODO should all entries be converted to normal nodes here?
              lists:foldl(
                  fun(Entry, Acc) ->
                          entry_learn(Entry, Acc)
                  end
                  , LocalRT, to_list(RT))
              ;
          false ->
              io:format("RTs are already the same."),
              LocalRT
      end,
      io:format("Merged RTs"),
      rt_loop:set_rt(State, NewRT)
  
negative.code: %% userdevguide-begin rt_frtchord:handle_custom_message
  %% @doc Handle custom messages. The following messages can occur:
  %%      - TODO explain messages
  
  % send the RT to a node asking for it
  handle_custom_message({get_rt, Pid}, State) ->
  