anchor.diff:                        {read_concurrency, true}],
       _ = ets:new(vmq_trie, [{keypos, 2}|DefaultETSOpts]),
       _ = ets:new(vmq_trie_node, [{keypos, 2}|DefaultETSOpts]),
  -    _ = ets:new(vmq_trie_topic, [bag, {keypos, 1}|DefaultETSOpts]),
  +    _ = ets:new(vmq_trie_topic, [{keypos, 1}|DefaultETSOpts]),
       _ = ets:new(vmq_trie_subs, [bag|DefaultETSOpts]),
       Self = self(),
       spawn_link(
  
positive.code: 
  del_topic(MP, Topic, Node) ->
      MPTopic = {MP, Topic},
      ets:delete_object(vmq_trie_topic, {MPTopic, Node}),
      case ets:lookup(vmq_trie_topic, MPTopic) of
          [] ->
              trie_delete(MP, Topic);
          _ ->
              ignore
      end.
  
negative.code: 
  add_topic(MP, Topic, Node) ->
      MPTopic = {MP, Topic},
      case ets:lookup(vmq_trie_topic, MPTopic) of
          [] ->
              ets:insert(vmq_trie_topic, {MPTopic, 1, maps:put(Node, 1, maps:new()), [Node]});
          [{_, TotalCnt, NodeMap, _}] ->
              NewNodeMap =
              case maps:find(Node, NodeMap) of
                  error ->
                      maps:put(Node, 1, NodeMap);
                  {ok, Cnt} ->
                      maps:put(Node, Cnt + 1, NodeMap)
              end,
              ets:insert(vmq_trie_topic, {MPTopic, TotalCnt + 1, NewNodeMap,
                                          [N || {N, _} <- maps:to_list(NewNodeMap)]})
      end,
  
      case ets:lookup(vmq_trie_node, MPTopic) of
          [#trie_node{topic=Topic}] ->
              ignore;
  