anchor.diff:  
   %% @doc Resolve the questions in the message.
   -spec resolve(dns:message(), [dns:rr()], dns:ip()) -> dns:message().
  -resolve(Message, AuthorityRecords, Host) ->
  -  resolve(Message, AuthorityRecords, Host, Message#dns_message.questions).
  +resolve(Message, AuthorityRecords, ClientIP) ->
  +  resolve(Message, AuthorityRecords, ClientIP, Message#dns_message.questions).
   
   
   %% There were no questions in the message so just return it.
   -spec resolve(dns:message(), [dns:rr()], dns:ip(), [dns:question()]) -> dns:message().
  -resolve(Message, _AuthorityRecords, _Host, []) -> Message;
  +resolve(Message, _AuthorityRecords, _ClientIP, []) -> Message;
   %% There is one question in the message; resolve it.
  -resolve(Message, AuthorityRecords, Host, [Question]) -> resolve(Message, AuthorityRecords, Host, Question);
  +resolve(Message, AuthorityRecords, ClientIP, [Question]) -> resolve(Message, AuthorityRecords, ClientIP, Question);
   %% Resolve the first question. Additional questions will be thrown away for now.
  -resolve(Message, AuthorityRecords, Host, [Question|_]) -> resolve(Message, AuthorityRecords, Host, Question);
  +resolve(Message, AuthorityRecords, ClientIP, [Question|_]) -> resolve(Message, AuthorityRecords, ClientIP, Question);
   
   %% Start the resolution process on the given question.
   %% Step 1: Set the RA bit to false as we do not handle recursive queries.
  -resolve(Message, AuthorityRecords, Host, Question) when is_record(Question, dns_query) ->
  -  resolve(Message#dns_message{ra = false}, AuthorityRecords, Question#dns_query.name, Question#dns_query.type, Host).
  +resolve(Message, AuthorityRecords, ClientIP, Question) when is_record(Question, dns_query) ->
  +  resolve(Message#dns_message{ra = false}, AuthorityRecords, Question#dns_query.name, Question#dns_query.type, ClientIP).
   
   %% With the extracted Qname and Qtype in hand, find the nearest zone
   %% Step 2: Search the available zones for the zone which is the nearest ancestor to QNAME
  
positive.code: 
  
  %% See if additional processing is necessary.
  additional_processing(Message, _Host, {error, _}) ->
    Message;
  additional_processing(Message, Host, Zone) ->
    RequiresAdditionalProcessing = requires_additional_processing(Message#dns_message.answers ++ Message#dns_message.authority, []),
    additional_processing(Message, Host, Zone, lists:flatten(RequiresAdditionalProcessing)).
  %% No records require additional processing.
  additional_processing(Message, _Host, _Zone, []) ->
    Message;
  %% There are records with names that require additional processing.
  additional_processing(Message, Host, Zone, Names) ->
    RRs = lists:flatten(lists:map(fun(Name) -> erldns_zone_cache:get_records_by_name(Name) end, Names)),
    Records = lists:filter(erldns_records:match_types([?DNS_TYPE_A, ?DNS_TYPE_AAAA]), RRs),
    additional_processing(Message, Host, Zone, Names, Records).
  
  %% No additional A records were found, so just return the message.
  additional_processing(Message, _Host, _Zone, _Names, []) ->
    Message;
  %% Additional A records were found, so we add them to the additional section.
  additional_processing(Message, _Host, _Zone, _Names, Records) ->
    Message#dns_message{additional=Message#dns_message.additional ++ Records}.
  
  
  
negative.code:       % if it is a sibling then we should not restart
        case check_if_parent(Name, Answer#dns_rr.name) of
          true ->
            restart_delegated_query(Message, Name, Qtype, ClientIP, CnameChain, Zone, erldns_zone_cache:in_zone(Name));
          false ->
            Message#dns_message{aa = true, rc = ?DNS_RCODE_NOERROR, answers = Message#dns_message.answers ++ MatchedRecords}
        end
  