anchor.diff:        end
         || Channel <- Channels].
   
  -channel_id(Channel) when is_binary(Channel) ->
  -    list_to_integer(binary_to_list(Channel));
  -channel_id(Channel) when is_list(Channel) ->
  -    list_to_integer(Channel).
  +channel_id(Bin) when is_binary(Bin) ->
  +    list_to_integer(binary_to_list(Bin)).
  +
  +drain_id(Bin) when is_binary(Bin) ->
  +    list_to_integer(binary_to_list(Bin)).
  
positive.code:     ?INFO("at=setex type=session id=~p", [UUID]);
  
  handle({cmd, "del", [<<"ch:", Rest/binary>> | _Args]}) ->
      Id = list_to_integer(parse_id(Rest)),
      ?INFO("at=delete type=channel id=~p", [Id]),
      ets:delete(channels, Id);
  
  handle({cmd, "del", [<<"tok:", Rest/binary>> | _Args]}) ->
      Id = list_to_binary(parse_id(Rest)),
      ?INFO("at=delete type=token id=~p", [Id]),
      ets:delete(tokens, Id);
  
  handle({cmd, "del", [<<"drain:", Rest/binary>> | _Args]}) ->
      Id = list_to_integer(parse_id(Rest)),
      ?INFO("at=delete type=drain id=~p", [Id]),
      catch logplex_drain:stop(Id),
      ets:delete(drains, Id);
  
negative.code: 
  %% LOAD
  handle({load, <<"ch:", Rest/binary>>, Dict}) when is_tuple(Dict) ->
      Id = channel_id(parse_id(Rest)),
      create_channel(Id, Dict);
  
  handle({load, <<"tok:", Rest/binary>>, Dict}) when is_tuple(Dict) ->
      Id = parse_id(Rest),
      create_token(Id, Dict);
  
  handle({load, <<"drain:", Rest/binary>>, Dict}) when is_tuple(Dict) ->
      Id = drain_id(parse_id(Rest)),
      create_drain(Id, Dict);
  
  handle({load, <<"quarantine:channels">>, Channels}) when is_list(Channels) ->
  