L      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~None0bOptional resource data.Client subnet (RFC7871)Unknown optional typeEDNS0 Option Code (RFC 6891).From option code to number.&EDNS0 infromation defined in RFC 6891.UDP payload size.Extended RCODE. Is DNSSEC OK? EDNS0 option data. Raw data format for each type.  IPv4 address An authoritative name serve The canonical name for an alias&Marks the start of a zone of authority]A null RR (EXPERIMENTAL). Anything can be in a NULL record, for now we just drop this data.A domain name pointer Mail exchange Text strings IPv6 AddressServer Selection (RFC2782)DNAME (RFC6672) OPT (RFC6891),Delegation Signer (RFC4034) RD_RRSIG RD_NSEC'DNSKEY (RFC4034) RD_NSEC3 RD_NSEC3PARAM)TLSA (RFC6698) RD_CDS RD_CDNSKEY RD_CSYNCUnknown resource data%Raw data format for resource records.NameResource record typeResource record class  Time to live! Resource data"Time to live in second.#Resource record class.$"Raw data format for DNS questions.& A domain name'The type of the query(+Response code including EDNS0's 12bit ones.)From rcode to number.*Kind of query.+A standard query.,An inverse query.-A server status request..Query or response./Query.0 Response.18Raw data format for the flags of DNS Query and Response.3Query or response.4Kind of query.5Authoritative Answer - this bit is valid in responses, and specifies that the responding name server is an authority for the domain name in question section.6TrunCation - specifies that this message was truncated due to length greater than that permitted on the transmission channel.7Recursion Desired - this bit may be set in a query and is copied into the response. If RD is set, it directs the name server to pursue the query recursively. Recursive query support is optional.8Recursion Available - this be is set or cleared in a response, and denotes whether recursive query support is available in the name server.9Response code.:Authentic Data (RFC4035).;9Raw data format for the header of DNS Query and Response.=An identifier.>The second 16bit word.?JAn identifier assigned by the program that generates any kind of query.@For backward compatibility.A+Raw data format for DNS Query and Response.CHeaderD The question for the name serverERRs answering the questionF RRs pointing toward an authorityG"RRs holding additional informationH9An enumeration of all possible DNS errors that can occur.I\The sequence number of the answer doesn't match our query. This could indicate foul play.J3The number of retries for the request was exceeded.KTCP fallback request timed out.LWThe answer has the correct sequence number, but returned an unexpected RDATA format.M The domain for query is illegal.N2The name server was unable to interpret the query.OZThe name server was unable to process this query due to a problem with the name server.PSThis code signifies that the domain name referenced in the query does not exist.Q=The name server does not support the requested kind of query.R)The name server refuses to perform the specified operation for policy reasons. For example, a name server may not wish to provide the information to the particular requester, or a name server may not wish to perform a particular operation (e.g., zone transfer) for particular data.S'The server detected a malformed OPT RR.TConfiguration is wrong.UNetwork failure.VError is unknownWTypes for resource records.XFrom type to number.YType for a mailbox encoded on the wire as a DNS name, but the first label is conceptually the user name, and sometimes has internal + characters that are not label separators.ZType for domain.Client subnet (RFC7871)?Bad OPT Version (RFC 6891) or TSIG Signature Failure (RFC2845).NotZone - Dynamic update response, a name used in the Prerequisite or Update Section is not within the zone denoted by the Zone Section.kNotAuth - Dynamic update response, the server is not authoritative for the zone named in the Zone Section.\NXRRSet - Dynamic update response, a pre-requisite RRSet that should exist, does not exist.\YXRRSet - Dynamic update response, a pre-requisite RRSet that should not exist, does exist.^YXDomain - Dynamic update response, a pre-requisite domain that should not exist, does exist.9Refused - The name server refuses to perform the specified operation for policy reasons. For example, a name server may not wish to provide the information to the particular requester, or a name server may not wish to perform a particular operation (e.g., zone transfer) for particular data.RNot Implemented - The name server does not support the requested kind of query.Name Error - Meaningful only for responses from an authoritative name server, this code signifies that the domain name referenced in the query does not exist.nServer failure - The name server was unable to process this query due to a problem with the name server.DFormat error - The name server was unable to interpret the query.No error condition.8A request for all records the server/cache has available)Child-To-Parent Synchronization (RFC7477)3DNSKEY(s) the Child wants reflected in DS (RFC7344)Child DS (RFC7344)TLSA (RFC6698)NSEC3PARAM (RFC5155)NSEC3 (RFC5155)DNSKEY (RFC4034)NSEC (RFC4034)RRSIG (RFC4034)Delegation Signer (RFC4034) OPT (RFC6891)DNAME (RFC6672)Server Selection (RFC2782) IPv6 Address Text strings Mail exchangeA domain name pointerA null RR (EXPERIMENTAL)&Marks the start of a zone of authorityThe canonical name for an aliasAn authoritative name serve IPv4 address[From number to type.\From number to rcode.]-From rcode to number for header (4bits only).^,From number in header to rcode (4bits only)._'Resource record class for the Internet.`Default query.aDefault response.bDefault information for EDNS0. defaultEDNS0JEDNS0 {udpSize = 4096, extRCODE = NoError, dnssecOk = False, options = []}cIGenerating a resource record for the additional section based on EDNS0. 1& is not generated. Just set the same ( to 1.d-Generating EDNS0 information from the OPT RR.eFrom number to option code.hUse  /https://tools.ietf.org/html/rfc2929#section-2.3 names for DNS RCODEsi4Provide an Enum instance for backwards compatibility  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijk   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdem !Z#_"WXX[ ABCDEFG`a@;<=>?./0123456789:*+,-())\]^$%&'HIJKLMNOPQRSTUV b cdeYK   !"#$%&'()*+,-./01 23456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijkNone Perform both  and  on the given Zi. When comparing DNS names taken from user input, this is often necessary to avoid unexpected results.Examples:#let domain1 = BS.pack "ExAmPlE.COM"$let domain2 = BS.pack "example.com."domain1 == domain2False&normalize domain1 == normalize domain2TrueThe  function should be idempotent:2normalize (normalize domain1) == normalize domain1True(Ensure that we don't crash on the empty Z:6import qualified Data.ByteString.Char8 as BS ( empty )normalize BS.empty"."9Normalize the case of the given DNS name for comparisons.YAccording to RFC #1035, "For all parts of the DNS that are part of the official protocol, all comparisons between character strings (e.g., labels, domain names, etc.) are done in a case-insensitive manner." This function chooses to lowercase its argument, but that should be treated as an implementation detail if at all possible.Examples:#let domain1 = BS.pack "ExAmPlE.COM"#let domain2 = BS.pack "exAMPle.com"domain1 == domain2False.normalizeCase domain1 == normalizeCase domain2TrueThe  function should be idempotent:>normalizeCase (normalizeCase domain2) == normalizeCase domain2True(Ensure that we don't crash on the empty Z:6import qualified Data.ByteString.Char8 as BS ( empty )normalizeCase BS.empty""eNormalize the given name by appending a trailing dot (the DNS root) if one does not already exist.Warning: this does not produce an equivalent DNS name! However, users are often unaware of the effect that the absence of the root will have. In user interface design, it may therefore be wise to act as if the user supplied the trailing dot during comparisons.Per RFC #1034,"Since a complete domain name ends with the root label, this leads to a printed form which ends in a dot. We use this property to distinguish between:za character string which represents a complete domain name (often called 'absolute'). For example, 'poneria.ISI.EDU.' a character string that represents the starting labels of a domain name which is incomplete, and should be completed by local software using knowledge of the local domain (often called 'relative'). For example, 'poneria' used in the ISI.EDU domain.FRelative names are either taken relative to a well known origin, or to a list of domains used as a search list. Relative names appear mostly at the user interface, where their interpretation varies from implementation to implementation, and in master files, where they are relative to a single origin domain name."Examples:#let domain1 = BS.pack "example.com"$let domain2 = BS.pack "example.com."domain1 == domain2False.normalizeRoot domain1 == normalizeRoot domain2TrueThe  function should be idempotent:>normalizeRoot (normalizeRoot domain1) == normalizeRoot domain1True(Ensure that we don't crash on the empty Z:6import qualified Data.ByteString.Char8 as BS ( empty )normalizeRoot BS.empty"." None9;(         "      None !"#$%&'()*+,- !"#$%&'()*+,-  !"#$%&'()*+,- NoneAbstract data type of DNS Resolver. This includes newly seeded identifier generators for all specified DNS servers and a cache database.uIntermediate abstract data type for resolvers. IP address information of DNS servers is generated according to 4 internally. This value can be safely reused for  withResolver./The naming is confusing for historical reasons.'Type for resolver configuration. Use  to create a new value.CAn example to use Google's public DNS cache instead of resolv.conf:Blet conf = defaultResolvConf { resolvInfo = RCHostName "8.8.8.8" }BAn example to use multiple Google's public DNS cache concurrently:hlet conf = defaultResolvConf { resolvInfo = RCHostNames ["8.8.8.8","8.8.4.4"], resolvConcurrent = True }An example to disable EDNS0:0let conf = defaultResolvConf { resolvEDNS = [] }5An example to enable EDNS0 with a 1,280-bytes buffer:Ylet conf = defaultResolvConf { resolvEDNS = [fromEDNS0 defaultEDNS0 { udpSize = 1280 }] }An example to enable cache:Dlet conf = defaultResolvConf { resolvCache = Just defaultCacheConf }Server information.Timeout in micro seconds..The number of retries including the first try.,Additional resource records to specify EDNS.9Concurrent queries if multiple DNS servers are specified.Cache configuration."Cache configuration for responses.BIf RR's TTL is higher than this value, this value is used instead."Cache pruning interval in seconds.#The type to specify a cache server.A path for "resolv.conf" where one or more IP addresses of DNS servers should be found on Unix. Default DNS servers are automatically detected on Windows regardless of the value of the file name.A numeric IP address. Warning: host names are invalid.Numeric IP addresses. Warning: host names are invalid.&A numeric IP address and port number. Warning: host names are invalid.Default cache configuration.defaultCacheConf/CacheConf {maximumTTL = 300, pruningDelay = 10}Return a default : is  "/etc/resolv.conf". is 3,000,000 micro seconds. is 3.$ is EDNS0 with a 4,096-bytes buffer. is False. is Nothing../0123456./0123456./0123456None!"Encoding DNS query or response.Encoding DNS flags.Encoding DNS header.Encoding domain.Encoding mailbox.Encoding resource record.789:;<=>?@ABCD789:;<=>?@ABCD NoneEGet a domain name, using sep1 as the separate between the 1st and 2nd label. Subsequent labels (and always the trailing label) are terminated with a ".".FGHIJKLMNOPQRESFGHMNQRFGHIJKLMNOPQRESNone Receiving DNS data from T and parse it.Receive and parse a single virtual-circuit (TCP) query or response. It is up to the caller to implement any desired timeout.&Sending composed query or response to T.ESending composed query or response to a single virtual-circuit (TCP).UEncoding for virtual circuit.Creating query.Composing query without EDNS0.;Composing query with authentic data flag set without EDNS0.(Composing a response from IPv4 addresses(Composing a response from IPv6 addresses VUAdditional RRs for EDNS.Authentication VU None0WCheck response for a matching identifier. If we ever do pipelined TCP, we'll also need to match the QNAME, CLASS and QTYPE. See: -https://tools.ietf.org/html/rfc7766#section-7XYZ[\]W^_`abcdefghij./01^XYZ[\]W^_`abcdefghijNone!"Look up resource records of a specified type for a domain, collecting the results from the ANSWER section of the response. See manual the manual of = to understand the concrete behavior. Cache is used if  is k.Example:&rs <- makeResolvSeed defaultResolvConfBwithResolver rs $ \resolver -> lookup resolver "www.example.com" ARight [93.184.216.34]Look up resource records of a specified type for a domain, collecting the results from the AUTHORITY section of the response. See manual the manual of B to understand the concrete behavior. Cache is used even if  is k.leLooking up resource records of a domain. The first parameter is one of the field accessors of the A type -- this allows you to choose which section (answer, authority, or additional) you would like to inspect for the result.1Look up a name and return the entire DNS Response-For a given DNS server, the queries are done:A new UDP socket bound to a new local port is created and a new identifier is created atomically from the cryptographically secure pseudo random number generator for the target DNS server. Then UDP queries are tried with the limitation of  (use EDNS0 if specifiecd). If it appear that the target DNS server does not support EDNS0, it falls back to traditional queries.If the response is truncated, a new TCP socket bound to a new locla port is created. Then exactly one TCP query is retried.%If multiple DNS server are specified  ('RCHostNames ') or found (A), either sequential lookup or concurrent lookup is carried out:In sequential lookup ( is False), the query procedure above is processed in the order of the DNS servers sequentially until a successful response is received.In concurrent lookup ( is True), the query procedure above is processed for each DNS server concurrently. The first received response is accepted even if it is an error.Cache is not used even if  is k.The example code: s rs <- makeResolvSeed defaultResolvConf withResolver rs $ \resolver -> lookupRaw resolver "www.example.com" A $And the (formatted) expected output: H Right (DNSMessage { header = DNSHeader { identifier = 1, flags = DNSFlags { qOrR = QR_Response, opcode = OP_STD, authAnswer = False, trunCation = False, recDesired = True, recAvailable = True, rcode = NoErr, authenData = False }, }, question = [Question { qname = "www.example.com.", qtype = A}], answer = [ResourceRecord {rrname = "www.example.com.", rrtype = A, rrttl = 800, rdlen = 4, rdata = 93.184.216.119}], authority = [], additional = []}) Same as Q but the query sets the AD bit, which solicits the the authentication status in the server reply. In most applications (other than diagnostic tools) that want authenticated data It is unwise to trust the AD bit in the responses of non-local servers, this interface should in most cases only be used with a loopback resolver.#Extract necessary information from AFor backward compatibility.lmnopqrslmnopqrsNone!"Make a  from a . Examples:&rs <- makeResolvSeed defaultResolvConfGiving a thread-safe + to the function of the second argument.Giving thread-safe 7s to the function of the second argument. For each 2, multiple lookups must be done sequentially. s can be used concurrently.tuvwtuvwNone /Look up all 'A' records for the given hostname.A straightforward example:&rs <- makeResolvSeed defaultResolvConf=withResolver rs $ \resolver -> lookupA resolver "www.mew.org"Right [210.130.207.72]hThis function will also follow a CNAME and resolve its target if one exists for the queries hostname:&rs <- makeResolvSeed defaultResolvConf>withResolver rs $ \resolver -> lookupA resolver "www.kame.net"Right [203.178.141.194]9Look up all (IPv6) 'AAAA' records for the given hostname. Examples:&rs <- makeResolvSeed defaultResolvConfCwithResolver rs $ \resolver -> lookupAAAA resolver "www.wide.ad.jp",Right [2001:200:dff:fff1:216:3eff:fe4b:651c]Look up all 'MX' records for the given hostname. Two parts constitute an MX record: a hostname , and an integer priority. We therefore return each record as a (Z, Int).In this first example, we look up the MX for the domain "example.com". It has no MX (to prevent a deluge of spam from examples posted on the internet). But remember, "no results" is still a successful result.&rs <- makeResolvSeed defaultResolvConf>withResolver rs $ \resolver -> lookupMX resolver "example.com"Right []3The domain "mew.org" does however have a single MX:&rs <- makeResolvSeed defaultResolvConf:withResolver rs $ \resolver -> lookupMX resolver "mew.org"Right [("mail.mew.org.",10)]ZAlso note that all hostnames are returned with a trailing dot to indicate the DNS root.uLook up all 'MX' records for the given hostname, and then resolve their hostnames to IPv4 addresses by calling ". The priorities are not retained. Examples:import Data.List (sort)&rs <- makeResolvSeed defaultResolvConfHips <- withResolver rs $ \resolver -> lookupAviaMX resolver "wide.ad.jp" fmap sort ips$Right [133.138.10.39,203.178.136.30]hSince there is more than one result, it is necessary to sort the list in order to check for equality.uLook up all 'MX' records for the given hostname, and then resolve their hostnames to IPv6 addresses by calling ". The priorities are not retained.x.This function performs the real work for both  and >. The only difference between those two is which function,  or S, is used to perform the lookup. We take either of those as our first parameter.Look up all 'NS' records for the given hostname. The results are taken from the ANSWER section of the response (as opposed to AUTHORITY). For details, see e.g.  %http://www.zytrax.com/books/dns/ch15/.There will typically be more than one name server for a domain. It is therefore extra important to sort the results if you prefer them to be at all deterministic. Examples:import Data.List (sort)&rs <- makeResolvSeed defaultResolvConf@ns <- withResolver rs $ \resolver -> lookupNS resolver "mew.org" fmap sort ns%Right ["ns1.mew.org.","ns2.mew.org."]Look up all 'NS' records for the given hostname. The results are taken from the AUTHORITY section of the response and not the usual ANSWER (use % for that). For details, see e.g.  %http://www.zytrax.com/books/dns/ch15/.There will typically be more than one name server for a domain. It is therefore extra important to sort the results if you prefer them to be at all deterministic.For an example, we can look up the nameservers for "example.com" from one of the root servers, a.gtld-servers.net, the IP address of which was found beforehand:import Data.List (sort)6let ri = RCHostName "192.5.6.30" -- a.gtld-servers.net.let rc = defaultResolvConf { resolvInfo = ri }rs <- makeResolvSeed rcHns <- withResolver rs $ \resolver -> lookupNSAuth resolver "example.com" fmap sort ns3Right ["a.iana-servers.net.","b.iana-servers.net."]OLook up all 'TXT' records for the given hostname. The results are free-form ys.)Two common uses for 'TXT' records are  4http://en.wikipedia.org/wiki/Sender_Policy_Framework and  7http://en.wikipedia.org/wiki/DomainKeys_Identified_Mail9. As an example, we find the SPF record for "mew.org":&rs <- makeResolvSeed defaultResolvConf;withResolver rs $ \resolver -> lookupTXT resolver "mew.org"Right ["v=spf1 +mx -all"]Look up the 'SOA' record for the given domain. The results include the domain, mailbox, serial number, refresh time, retry time, expiration time, and minimum TTL.aThis can be useful to validate TTLs for a server or get an abuse contact address for a domain.&rs <- makeResolvSeed defaultResolvConf;withResolver rs $ \resolver -> lookupSOA resolver "mew.org"HRight [("ns1.mew.org.","kazu@mew.org.",201406240,3600,300,3600000,3600)]Look up all 'PTR' records for the given hostname. To perform a reverse lookup on an IP address, you must first reverse its octets and then append the suffix ".in-addr.arpa."gWe look up the PTR associated with the IP address 210.130.137.80, i.e., 80.137.130.210.in-addr.arpa:&rs <- makeResolvSeed defaultResolvConfNwithResolver rs $ \resolver -> lookupPTR resolver "164.2.232.202.in-addr.arpa"Right ["www.iij.ad.jp."]The 1 function is more suited to this particular task.Convenient wrapper around 7 to perform a reverse lookup on a single IP address.We repeat the example from 0, except now we pass the IP address directly:&rs <- makeResolvSeed defaultResolvConfBwithResolver rs $ \resolver -> lookupRDNS resolver "202.232.2.164"Right ["www.iij.ad.jp."]NLook up all 'SRV' records for the given hostname. SRV records consist (see  #https://tools.ietf.org/html/rfc2782") of the following four fields:"Priority (lower is more-preferred)kWeight (relative frequency with which to use this record amongst all results with the same priority)/Port (the port on which the service is offered)5Target (the hostname on which the service is offered)mThe first three are integral, and the target is another DNS hostname. We therefore return a four-tuple  (Int,Int,Int,Z). Examples:&rs <- makeResolvSeed defaultResolvConfUwithResolver rs $ \resolver -> lookupSRV resolver "_xmpp-server._tcp.jabber.ietf.org"%Right [(5,0,5269,"jabber.ietf.org.")]zx zxNoneDecoding DNS query or response.EParse many length-encoded DNS records, for example, from TCP traffic.Decoding DNS flags.Decoding DNS header.Decoding domain.Decoding mailbox.Decoding resource record.None  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcde{ !"#$%&'()**+,-./01223456789:;<=>>?@ABCDEFGGHIJKLLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~          5a                                    ! " # $ % & ' ( ) * + , - . / 0 1 2 3  4 5 6  7 8  9:;<=>?@ABCDEF G H I J K L M N O P Q R S T UVWXYZ [ \ ] ^ _ ` ` a b c d e f g h i j k l mnopqrstuvwxyz{|}~ dns-3.0.0-4MeP4jsR8qv9uMrS4aPJRzNetwork.DNS.TypesNetwork.DNS.UtilsNetwork.DNS.ResolverNetwork.DNS.EncodeNetwork.DNS.IONetwork.DNS.LookupRawNetwork.DNS.LookupNetwork.DNS.DecodeNetwork.DNS.StateBinaryNetwork.DNS.MemoNetwork.DNS.Types.InternalNetwork.DNS.Decode.InternalNetwork.DNS.Transport Network.DNSODataOD_ClientSubnet UnknownODataOptCode fromOptCodeEDNS0udpSizeextRCODEdnssecOkoptionsRDataRD_ARD_NSRD_CNAMERD_SOARD_NULLRD_PTRRD_MXRD_TXTRD_AAAARD_SRVRD_DNAMERD_OPTRD_DS RD_DNSKEYRD_TLSA UnknownRDataResourceRecordrrnamerrtyperrclassrrttlrdataTTLCLASSQuestionqnameqtypeRCODE fromRCODEOPCODEOP_STDOP_INVOP_SSRQorRQR_Query QR_ResponseDNSFlagsqOrRopcode authAnswer trunCation recDesired recAvailablercode authenData DNSHeader identifierflags Identifier DNSFormat DNSMessageheaderquestionanswer authority additionalDNSErrorSequenceNumberMismatchRetryLimitExceededTimeoutExpiredUnexpectedRDATA IllegalDomain FormatError ServerFailure NameErrorNotImplementedOperationRefused BadOptRecordBadConfigurationNetworkFailureUnknownDNSErrorTYPEfromTYPEMailboxDomaintoTYPEtoRCODEfromRCODEforHeadertoRCODEforHeaderclassIN defaultQuerydefaultResponse defaultEDNS0 fromEDNS0toEDNS0 toOptCode $fShowOptCode $fShowRData $fShowRCODE $fEnumRCODE$fExceptionDNSError $fShowTYPE$fEqTYPE $fOrdTYPE $fEqDNSError$fShowDNSError$fEqQorR $fShowQorR $fEnumQorR $fBoundedQorR $fEqOPCODE $fShowOPCODE $fEnumOPCODE$fBoundedOPCODE $fEqRCODE $fEqDNSFlags$fShowDNSFlags $fEqDNSHeader$fShowDNSHeader $fEqQuestion$fShowQuestion $fEqOptCode $fOrdOptCode $fEqOData $fShowOData $fOrdOData $fEqEDNS0 $fShowEDNS0 $fEqRData $fOrdRData$fEqResourceRecord$fShowResourceRecord$fEqDNSMessage$fShowDNSMessage normalize normalizeCase normalizeRootResolver ResolvSeed ResolvConf resolvInfo resolvTimeout resolvRetry resolvEDNSresolvConcurrent resolvCache CacheConf maximumTTL pruningDelayFileOrNumericHost RCFilePath RCHostName RCHostNames RCHostPortdefaultCacheConfdefaultResolvConfencodeencodeDNSFlagsencodeDNSHeader encodeDomain encodeMailboxencodeResourceRecordreceive receiveVCsendsendVCencodeQuestions composeQuerycomposeQueryAD responseA responseAAAAlookup lookupAuth lookupRaw lookupRawADfromDNSMessage fromDNSFormatmakeResolvSeed withResolver withResolverslookupA lookupAAAAlookupMX lookupAviaMXlookupAAAAviaMXlookupNS lookupNSAuth lookupTXT lookupSOA lookupPTR lookupRDNS lookupSRVdecode decodeManydecodeDNSFlagsdecodeDNSHeader decodeDomain decodeMailboxdecodeResourceRecordbaseGHC.Base. ClientSubnetBadOptNotZoneNotAuthNXRRSetYXRRSetYXDomainRefusedNotImplNameErrServFail FormatErrNoErrANYCSYNCCDNSKEYCDSTLSA NSEC3PARAMNSEC3DNSKEYNSECRRSIGDSOPTDNAMESRVAAAATXTMXPTRNULLSOACNAMENSA hexencode b64encodePStatepsDomain psPositionSGetWStatewsDomain wsPositionSPut initialWStateput8put16put32putInt8putInt16putInt32 putByteString addPositionW fixedSized writeSizedwsPopwsPush getPosition addPositionpushpopget8get16get32getInt8getInt16getInt32 getNBytesgetNByteString initialStaterunSGetrunSGetWithLeftoversrunSPut$fMonoidStateTCacheDBEntryPrioKeySectionAnswer AuthoritynewCache lookupCache insertCacheprunecopy copyOData resolvseedgenIdscache resolvconf nameservers putDNSMessage putHeader putDNSFlags putQuestionputResourceRecordputRDataputODataputByteStringWithLength rootDomain putDomain putMailbox putDomain' putPointerputPartialDomain getDomain' getResponse getDNSFlags getHeader getQueriesgetTYPE getOptCodegetQuerygetResourceRecordsgetResourceRecordgetRDatagetOData getDomain getMailbox ignoreClass&network-2.6.3.2-IsLM4TXcLoRI0fmmBYVyQzNetwork.Socket.TypesSocketencodeVCsink checkRespUdpRslvTcpRslvRslv1Rslv0 TCPFallbackresolveresolveSequentialresolveConcurrent resolveOne udpTcpLookupioErrorToDNSErrorudpOpen udpLookuptcpOpen tcpLookup badLength isIllegal$fExceptionTCPFallbackJust lookupSectionlookupFreshSectionlookupCacheSection cachePositiveinsertPositive cacheNegativeinsertNegativeisTypeOfgetDefaultDnsServers makeAddrInfo makeResolver getRandom lookupNSImplbytestring-0.10.8.1Data.ByteString.Internal ByteString lookupXviaMX