anchor.diff:                  NewBinStr =:= H ->
                   {fun sgml_mutate/2, Ll, Meta, -1};
               true ->
  -                {fun sgml_mutate/2, [NewBinStr | T], [{Name, 1} | Meta], D}
  +                {fun sgml_mutate/2, [NewBinStr | T], [{Name, 1} | Meta], 
  +                 D + trunc(size(NewBinStr)/(?AVG_BLOCK_SIZE*10))} %% limiting next rounds based on a size
               end
       catch
           incorrect_sgml ->
  
positive.code: push_till([], _) -> [].
  
  parse(Str) ->
      Tokens = tokenize(Str),
      %io:format("~w~n", [Tokens]),
      build_ast2(Tokens, [], [], {0, 0}).
  
  % list(token()), list(ast_elem()), list(strings) -> atom(), list(ast_elem()), list(ast_elem(),
  %		{non_neg_int(), non_neg_int()})
  
negative.code: tz({end_tag,Tag},?D(X,S)) when ?ev(X)     -> {{end_tag,Tag,'>'},ws(S)};
  tz({end_tag,Tag,'>'},?m(">",Str))         -> {text,Str,{close,Tag,string:to_lower(Tag)}};
  tz({end_tag,Tag},?d(X,Str))               -> {{end_tag,Tag++[X]},Str};
  tz({end_tag,_,_},_)              	      -> throw(incorrect_sgml);
  tz({end_tag,_},_)              			  -> throw(incorrect_sgml);
  
  tz({attr,"",{Tag,As}},?D(X,S))when ?ev(X) -> {{etag,Tag,As},S};
  