anchor.diff:  % delete(state(), Key :: binary()) ->
   %   ok | {error, Reason :: term()}
   % key must be 160b
  -delete(State, Key) ->
  -    File = location(State,Key),
  +delete(State, BKey) ->
  +    File = location(State,BKey),
       case file:delete(File) of
           ok -> ok;
           {error, enoent} -> ok;
  
positive.code: % list(state()) -> [Key :: binary()]
  list(State) ->
      % this is slow slow slow
      [location_to_key(X) || X <- filelib:wildcard("*/*/*/*/*/*/*/*/*/*",
                                                   State#state.dir)].
  
  location_to_key(Path) ->
      % Path is a list of strings giving the path beneath Dir to a file
      list_to_binary([list_to_integer(A) || A <- 
        lists:append([string:tokens(X,".") || X <- string:tokens(Path,"/")])]).
  
  % location(state(), Key :: binary()) -> Path :: string()
  location(State, Key) ->
      location(Key,State#state.dir,
               [integer_to_list(X) || X <- binary_to_list(Key)]).
  location(_Key,Dir,[A|[B|[]]]) ->
      filename:join([Dir,A++"."++B]);
  location(Key,Dir,[A|[B|Rest]]) ->
      location(Key,filename:join([Dir,A++"."++B]),Rest).
  
negative.code: % put(state(), Key :: binary(), Val :: binary()) ->
  %   ok | {error, Reason :: term()}
  % key must be 160b
  put(State,BKey,Val) ->       
      File = location(State,BKey),
      case filelib:ensure_dir(File) of
          ok -> file:write_file(File,Val);
          X -> X
  