anchor.diff:        15 * trunc(math:pow(2,N))).
   
   announce_reply(_Peers, _Status, none) -> ignore;
  -announce_reply(Peers, Status, {announce, Requestor, _PL, Ref}) ->
  -    Requestor ! {announce, Peers, Status, Ref}.
  +announce_reply(Peers, Status, {announce, _PL, From}) ->
  +    gen_fsm:reply(From, {announce, Peers, Status}).
   
   announce_requests(ConnID, ReqL) ->
       announce_requests(ConnID, ReqL, 0).
  
positive.code:     [begin
  	 Tid = announce_req(N, ConnID, PL),
  	 {Tid, AnnReq}
       end || {announce, _Req, PL, _Ref} = AnnReq <- ReqL].
  
  announce_req(N, ConnID, PropL) ->
      [IH, PeerId, Down, Left, Up, Event, IPAddr, Key, Port] =
  
negative.code: start_link(Tracker) ->
      gen_fsm:start_link(?MODULE, [Tracker], []).
  
  %% @doc carry out an announce request and block until message or timeout
  %%  if timeout, the caller is obliged to get a late reply as {ref(), term()}
  %%  in its inbox, which it may either consume or ignore.
  %% @end
  announce(Pid, Proplist, Timeout) ->
      case catch gen_fsm:sync_send_event(Pid, {announce, Proplist}, Timeout) of
  	{'EXIT', {timeout, _}} ->
  	    timeout;
  	R -> {ok, R}
      end.
  
  %%====================================================================
  %% Retrieve a message from the socket.
  