
    Eqg              #          d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlmZmZmZmZmZmZ ddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddl Zddl!Zddl"Zd Z#d Z$ej%        &                    d          Z'e'rBddl(Z)ddl*Z*e)j+        Z,e)j-        j.        j/        Z0 G d de,          Z1 G d	 d
e*j2                  Z3n G d d
          Z3e'Z4	 ddl5Z5n# e6$ r  G d d          Z5Y nw xY we	j	        Z7 G d dej8        j9                  Z: G d dej8        j;                  Z< G d dej8        j9                  Z= G d dej8        j9                  Z>ej?        j@        Z@d ZAd ZBd ZCd ZDd ZEd ZF	 dtdZGdudZHded          d!d fd"ZI G d# d$ejJ                  ZKdd%ddd&d&dd'dddde	jL        eKjM        fd(ejN        jO        d)ePd*eeQ         d+eRd,eeP         d-eRd.eSd/eSd0ee         d1ePd2eSd3eeP         d4eeSePf         ded          d5eRd6eKd!ejN        jO        f"d7ZTd8ejU        jV        d9eWd!eWfd:ZXd8ejU        jV        d;ePd<eWd!dfd=ZY	 	 	 	 	 	 	 	 	 dvd(ejN        jO        d)ePd?ePd*eeQ         d+eRd,eeP         d-eRd.eSd/eSd4eeSePf         d@eeP         d2eSd!ejN        jO        fdAZZdB Z[dC Z\	 dwdDedEeejN        jO        eWf         dFedGeeQ         d!eeReQf         f
dHZ]	 	 	 	 	 	 	 	 	 	 dxdDedFee         dGeeQ         dJeSd.eSdKeeej^        j_        ej`        ja        f                  dLeeW         d/eSdMeSdNeSdOeejN        jO                 d!efdPZb	 	 	 	 	 	 	 	 	 	 dyd(ejN        jO        d)ePd*eeQ         d+eRd,eeP         d-eRdJeSd.eSd/eSdMeSdDee         dNeSd!ejN        jO        fdRZc	 	 	 	 	 	 	 	 	 	 dzd(ejN        jO        d)ePd*eeQ         d+eRd,eeP         d-eRdJeSd.eSd/eSdSee         dTee         dNeSd!eejN        jO        eSf         fdUZddV ZedW Zf	 dwdDedEeejN        jO        eWf         dGeeQ         d!eeReQf         fdXZg	 	 	 	 	 d{dDedGeeQ         d.eSdKeeej^        j_        ej`        ja        f                  dLeeW         d/eSd!eejN        jO        eQf         fdYZhdZ Zi	 	 	 	 	 	 	 d|d(ejN        jO        d)ePd*eeQ         d+eRd,eeP         d-eRd.eSd/eSdDee         d!ejN        jO        fd[Zjd\ Zkd]eeP         d4eeSePf         d!e5jl        fd^Zm	 	 	 	 	 	 	 	 	 	 d}d(ejN        jO        d)ePd*eeQ         d+eRd,eeP         d-eRd.eSd/eSdDee5jn                 d_ee5jl                 d]eeP         d4eeSePf         d!ejN        jO        fd`Zo	 	 	 	 	 	 	 	 	 	 d~d(ejN        jO        d)ePd*eeQ         d+eRd,eeP         d-eRd.eSd/eSdaeejU        jp                 d4eeSePf         d@eeP         d]eeP         d!ejN        jO        fdbZU G dc ddejJ                  Zqdeejr        js        dfe	j	        dOejN        jO        dgeeR         d*eeQ         dGeQd!efdhZteju        jv        ejw        jx        ddQdddddddd&ej`        jy        fd)ePdieej^        j_        ePf         djeeju        jz        ePf         dkeejw        j{        ePf         d*eeQ         d+eRdKeeej^        j_        ej`        ja        f                  dleeej^        j_        ePf                  dmeSdneeQ         d,eeP         d-eRdgeRdoeSdpeej^        j_        ePf         d!ef dqZ?ddQddddeqj|        fd)ePdeejr        js        dOeejN        jO                 d+eRd*eeQ         dneeQ         d,eeP         d-eRdreqd!dfdsZ}dS )zTalk to a DNS server.    N)AnyDictOptionalTupleUnioncastc                 h    | d S | t          j                     z
  }|dk    rt          j        j        |S )N        )timedns	exceptionTimeout)
expirationtimeouts     ;/var/www/html/env/lib/python3.11/site-packages/dns/query.py
_remainingr   1   s6    t49;;&G#~~m##N    c                 R    |d S t          t          j                    | z   |          S N)minr   )r   r   s     r   _expiration_for_this_attemptr   :   s(    tty{{W$j111r   dohc                   2     e Zd Z fdZ	 ddZ	 ddZ xZS )_NetworkBackendc                     t                                                       || _        || _        || _        || _        d S r   )super__init___local_port	_resolver_bootstrap_address_family)selfresolver
local_portbootstrap_addressfamily	__class__s        r   r   z_NetworkBackend.__init__I   s;    GG)D%DN&7D#!DLLLr   Nc                 p   g }t          |          \  }}t          j                            |          r|                    |           n| j        |                    | j                   nht          |          }| j        }	|rt          j                            |          }	| j	        
                    ||	|          }
|
                                }|D ]}t          j                            |          }|| j        dk    r(t          j                            || j        f|          }nd }t          |t          j        |          }t#          d|          }	 t%          |t          j                            ||f|          |           t'          |          c S # t(          $ r Y w xY wt*          j        )N)r&   lifetimer   g       @)_compute_timesr   inet
is_addressappendr    r   r!   af_for_addressr   resolve_name	addressesr   low_level_address_tuple_make_socketsocketSOCK_STREAMr   _connect_CoreSyncStream	ExceptionhttpcoreConnectError)r"   hostportr   local_addresssocket_optionsr0   _r   r&   answersaddressafsourcesockattempt_expirations                   r   connect_tcpz_NetworkBackend.connect_tcpP   s    I*733MAzx""4(( 0  &&&&(4  !89999$Z00  D X44]CCF.55' 6   $--//	$  X,,W55 ,0@A0E0E X==&(892 FF "F#B(:FCC%A#z%R%R"88'4"MM*  
 +400000    D''s   ?F
F)(F)c                     t           r   NotImplementedError)r"   pathr   r=   s       r   connect_unix_socketz#_NetworkBackend.connect_unix_socketw   s
     &%r   r   )__name__
__module____qualname__r   rE   rJ   __classcell__r'   s   @r   r   r   H   sm        	" 	" 	" 	" 	" FJ%	( %	( %	( %	(P 15	& 	& 	& 	& 	& 	& 	& 	&r   r   c                   4     e Zd Zdddej        d fd
Z xZS )_HTTPTransportr   N)r$   r%   r#   r&   c                    ||dd l }|j                                        } t                      j        |i | t          ||||          | j        _        d S Nr   )dns.resolverr#   Resolverr   r   r   _pool_network_backend)	r"   r$   r%   r#   r&   argskwargsr   r'   s	           r   r   z_HTTPTransport.__init__}   sp     $5$=####<0022EGGd-f---*9*&7+ +DJ'''r   )rK   rL   rM   r3   	AF_UNSPECr   rN   rO   s   @r   rQ   rQ   |   sS         "#	 	 	 	 	 	 	 	 	 	 	r   rQ   c                       e Zd Zd ZdS )rQ   c                     t           r   rG   )r"   r:   r;   r   r<   s        r   rE   z_HTTPTransport.connect_tcp       %%r   N)rK   rL   rM   rE    r   r   rQ   rQ      s#        	& 	& 	& 	& 	&r   c                       e Zd ZdZ G d de          Z G d de          Z G d d          Z G d d	          Ze	d
             Z
dS )sslr   c                       e Zd ZdS )ssl.WantReadExceptionNrK   rL   rM   r^   r   r   WantReadExceptionrb              Dr   rd   c                       e Zd ZdS )ssl.WantWriteExceptionNrc   r^   r   r   WantWriteExceptionrg      re   r   rh   c                       e Zd ZdS )ssl.SSLContextNrc   r^   r   r   
SSLContextrj      re   r   rk   c                       e Zd ZdS )ssl.SSLSocketNrc   r^   r   r   	SSLSocketrm      re   r   rn   c                      t          d          )Nzno ssl support)r7   )clsrX   rY   s      r   create_default_contextzssl.create_default_context   s    ,---r   N)rK   rL   rM   	CERT_NONEr7   rd   rh   rk   rn   classmethodrq   r^   r   r   r`   r`      s        		 	 	 	 		 	 	 		 	 	 	 	 	 	 		 	 	 	 	 	 	 		 	 	 	 	 	 	 	 
	. 	. 
	. 	. 	.r   r`   c                       e Zd ZdZdS )UnexpectedSourcez=A DNS query response came from an unexpected address or port.NrK   rL   rM   __doc__r^   r   r   ru   ru      s        GGGGr   ru   c                       e Zd ZdZdS )BadResponsez<A DNS query response does not respond to the question asked.Nrv   r^   r   r   ry   ry      s        FFFFr   ry   c                       e Zd ZdZdS )NoDOHzMDNS over HTTPS (DOH) was requested but the httpx module is not
    available.Nrv   r^   r   r   r{   r{                 r   r{   c                       e Zd ZdZdS )NoDOQzNDNS over QUIC (DOQ) was requested but the aioquic module is not
    available.Nrv   r^   r   r   r~   r~      r|   r   r~   c                 B    t          j                     }| |d fS ||| z   fS r   )r   )r   nows     r   r*   r*      s+    
)++CT{S7]##r   c                    |r4t          | t          j                  r|                                 dk    rdS t	          j                    }d}|r|t          j        z  }|r|t          j        z  }|r|                    | |           |d }n-|t          j	                    z
  }|dk    rt          j        j        |                    |          st          j        j        d S )Nr   Tr
   )
isinstancer`   rn   pending	selectorsDefaultSelector
EVENT_READEVENT_WRITEregisterr   r   r   r   select)fdreadablewritabler>   r   seleventsr   s           r   	_wait_forr      s      Jr3=11 bjjllQ6F6Ft

#
%
%CF ')&& ()'' !R   ty{{*c>>-''::g $m##$ $r   c                 ,    t          | ddd|           d S )NTFr   sr   s     r   _wait_for_readabler      s    audJ/////r   c                 ,    t          | ddd|           d S )NFTr   r   s     r   _wait_for_writabler      s    adJ/////r   c                    	 t           j                            | |d                   }t           j                            | |d                   }n# t           j        j        $ r Y dS w xY w||k    o|dd          |dd          k    S )Nr   F   )r   r+   	inet_ptonr   SyntaxError)rA   a1a2n1n2s        r   _addresses_equalr      s    XBqE**XBqE**=$   uu8(122"QRR&((s   AA A'&A'c                     |sdS t          | ||          s;t          j                            |d                   r|dd          |dd          k    rdS |rdS t	          d| d|           )NTr   r   Fzgot a response from z instead of )r   r   r+   is_multicastru   )rA   from_addressdestinationignore_unexpecteds       r   _matches_destinationr     s      tL+66 k!n--2>qrr2BkRSRTRTo2U2Ut	 u
J|JJ[JJ  r   Tc                 
   d }d }	 t           j                            |           }| }n# t          $ r |r Y nw xY w|r9t           j                            |          }|r||k    rt	          d          n|}|r@|s>	 t           j                            |          }n# t          $ r t	          d          w xY w|r"t           j                            ||f|          }|r"t           j                            ||f|          }|||fS )Nz5different address families for source and destinationz3source_port specified but address family is unknown)r   r+   r.   r7   
ValueError
any_for_afr1   )wherer;   rB   source_portwhere_must_be_addressrA   r   safs           r   _destination_and_sourcer     se   
 
BKX$$U++     		 	  h%%f-- 		byy K    B T6 T	TX((,,FF 	T 	T 	TRSSS	T
  Ph66T7JBOO M116;2GLLV$$s   !( 88;B B5c                     t          | |          }	 |                    d           ||                    |           |r|                    |d|          S |S # t          $ r |                                  w xY w)NF)do_handshake_on_connectserver_hostname)socket_factorysetblockingbindwrap_socketr7   close)rA   typerB   ssl_contextr   r   s         r   r2   r2   @  s    r4  A	eFF6NNN 	**(- / +    H   				s   AA A  A:r#   zdns.resolver.Resolverreturnc                 D    | dd l }|j                                        } | S rS   )rT   r#   rU   )r#   r   s     r   _maybe_get_resolverr   T  s.     <((**Or   c                   .    e Zd ZdZdZdZdZdZdZdZ	dZ
dS )HTTPVersionzWhich version of HTTP should be used?

    DEFAULT will select the first version from the list [2, 1.1, 3] that
    is available.
    r   r         N)rK   rL   rM   rw   DEFAULTHTTP_1H1HTTP_2H2HTTP_3H3r^   r   r   r   r   b  s=          GF	
BF	
BF	
BBBr   r   i  Fz
/dns-queryqr   r   r;   rB   r   one_rr_per_rrsetignore_trailingsessionrI   postr%   verifyr&   http_versionc                    t          ||||d          \  }}}|Ut          j                            |          r6|t          j        k    rd| d| |	 }n|t          j        k    r
d| d| |	 }n|}i }|xt          j        	                    |          }|j
        t          d          t          j                            |j
                  r|j
        }|j
        |d<   |j        |j        }|t          j        k    s|t          j        k    rt           s|ft#          |          }|j
        J |                    |j
        |          }t'          j        t+          |                                                    }t/          | ||||||||||
	          S t           st0          |r)t3          |t4          j                  st          d
          |                                 }ddi}|t          j        t          j        fv }|t          j        t          j        fv }|d}d}n|d         }|d         }|rt?          j         |          }n/tC          ||||||||          }t5          j        ||||          }|5 }|
rM|"                    dtG          tI          |                    d           |%                    |||||          }nWtM          j'        |          (                    d          }|)                                } |*                    |||d| i|          }ddd           n# 1 swxY w Y   |j+        dk     s|j+        dk    r!t          | d|j+         d|j,                   t          j-        .                    |j,        | j/        | j0        ||          }!|j1        2                                |!_3        | 4                    |!          stj          |!S )a	  Return the response obtained after sending a query via DNS-over-HTTPS.

    *q*, a ``dns.message.Message``, the query to send.

    *where*, a ``str``, the nameserver IP address or the full URL. If an IP address is
    given, the URL will be constructed using the following schema:
    https://<IP-address>:<port>/<path>.

    *timeout*, a ``float`` or ``None``, the number of seconds to wait before the query
    times out. If ``None``, the default, wait forever.

    *port*, a ``int``, the port to send the query to. The default is 443.

    *source*, a ``str`` containing an IPv4 or IPv6 address, specifying the source
    address.  The default is the wildcard address.

    *source_port*, an ``int``, the port from which to send the message. The default is
    0.

    *one_rr_per_rrset*, a ``bool``. If ``True``, put each RR into its own RRset.

    *ignore_trailing*, a ``bool``. If ``True``, ignore trailing junk at end of the
    received message.

    *session*, an ``httpx.Client``.  If provided, the client session to use to send the
    queries.

    *path*, a ``str``. If *where* is an IP address, then *path* will be used to
    construct the URL to send the DNS query to.

    *post*, a ``bool``. If ``True``, the default, POST method will be used.

    *bootstrap_address*, a ``str``, the IP address to use to bypass resolution.

    *verify*, a ``bool`` or ``str``.  If a ``True``, then TLS certificate verification
    of the server is done using the default CA bundle; if ``False``, then no
    verification is done; if a `str` then it specifies the path to a certificate file or
    directory which will be used for verification.

    *resolver*, a ``dns.resolver.Resolver`` or ``None``, the resolver to use for
    resolution of hostnames in URLs.  If not specified, a new resolver with a default
    configuration will be used; note this is *not* the default resolver as that resolver
    might have been configured to use DoH causing a chicken-and-egg problem.  This
    parameter only has an effect if the HTTP library is httpx.

    *family*, an ``int``, the address family.  If socket.AF_UNSPEC (the default), both A
    and AAAA records will be retrieved.

    *http_version*, a ``dns.query.HTTPVersion``, indicating which HTTP version to use.

    Returns a ``dns.message.Message``.
    FNzhttps://:z	https://[z]:zno hostname in URLsni_hostname)r   r   z)session parameter must be an httpx.Clientacceptzapplication/dns-messager   r   )r<   http1http2r   r$   r%   r#   r&   )r   r   r   	transport)zcontent-typezcontent-length)headerscontentr   
extensions   =r   )r   r   paramsr      +   responded with status code z
Response body: keyringrequest_macr   r   )6r   r   r+   r,   r3   AF_INETAF_INET6urllibparseurlparsehostnamer   r;   r   r   r   have_dohr   r/   randomchoicelistr0   _http3r{   r   httpxClientto_wirer   r   
contextlibnullcontextrQ   updatestrlenr   base64urlsafe_b64encoderstripdecodegetstatus_coder   message	from_wirer   r   elapsedtotal_secondsr   is_responsery   )"r   r   r   r;   rB   r   r   r   r   rI   r   r%   r   r#   r&   r   rA   r>   
the_sourceurlr   parsedr?   wirer   h1h2r<   r$   cmr   responsetwirers"                                     r   httpsr  r  s   N 2tV[% RJ 
~#(--e44~1U11T1411CC6?""3e33t3T33CJ &&s++?"12228v// 	9 &)/J~&;";D{~%%+++H+$*844H?...++FOVDDG &d73D3D3F3F.G.G H H
 
 
 	
   Fz'5<88 FDEEE99;;D23G	+.+*=>	>B	+.+*=>	>B 

"1]
 R0:0Fw0O0O"'!/	
 	
 	
	 \"VyQQQ	 w  	NN$=&)#d))nn    ||% $  HH +D1188>>DKKMME{{u~% #  H)              < c!!X%9C%?%? 3 3(2F 3 3 ( 03 3
 
 	
 		M)' 	 	 	A ++--AF== Hs   :B'L--L14L1r   namec                 F    | t           | D ]\  }}||k    r|c S t           r   )KeyError)r   r  headervalues       r   _find_headerr  9  s;       T>>LLL 
Nr   peerr   c                 P   t          | d          }|t          d          t          |          }|dk     rt          d          |dk     s|dk    rTd}t          |          dk    r)	 d|                                z   }n# t
          $ r Y nw xY wt          | d	| |           d S )
Ns   :statuszno :status header in responser   zstatus is negativer   r    z: r   )r  r   intr   r   r7   r   )r   r  r   r  statuserrors         r   _check_statusr  B  s    *--E}9:::ZZFzz.///||v||t99q==t{{}},   DMMfMeMMNNN $|s   (B   
BBU  r   r   c                    t           j        j        st          d          t          j                            |          }|j        }
|j        |j        }d| _	        | 
                                }t           j                            |	|
d          }|5  |                    ||||          }t          |          \  }}|                    |          5 }|                    |||           |                    t#          |                    }t%          |                                ||           d d d            n# 1 swxY w Y   t)          j                    }d d d            n# 1 swxY w Y   t           j                            || j        | j        ||          }t3          ||z
  d          |_        |                     |          st6          |S )Nz DNS-over-HTTP3 is not available.r   T)verify_modeserver_nameh3r   r
   )r   quic	have_quicr{   r   r   r   r   r;   idr   SyncQuicManagerconnectr*   make_streamsend_h3receiver   r  r   r   r   r   r   r   maxr   ry   )r   r   r   r   r;   rB   r   r   r   r   r   r   	url_partsr   manager
connectionstartr   streamfinishr  s                        r   r   r   S  s.    8 86777%%c**I!H~!~AD99;;Dh&&T '  G 
  __UD&+FF
,W55
##G,, 	9NN3d+++>>*Z"8"899D&..**E4888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9                		M)' 	 	 	A %%%AF== Hs8   A E'AD=1E'=E	E'E	E''E+.E+c                 r    	 	 |                      |          S # t          $ r t          | |           Y nw xY w7)zReads a datagram from the socket.
    A Timeout exception will be raised if the operation is not completed
    by the expiration time.
    )recvfromBlockingIOErrorr   )rC   max_sizer   s      r   	_udp_recvr-    sT    
1	1==*** 	1 	1 	1tZ00000	11s    55c                     	 	 |r|                      ||          S |                     |          S # t          $ r t          | |           Y nw xY wO)zSends the specified datagram to destination over the socket.
    A Timeout exception will be raised if the operation is not completed
    by the expiration time.
    )sendtosendr+  r   )rC   datar   r   s       r   	_udp_sendr2    sn    
1	1 '{{4555yy& 	1 	1 	1tZ00000	11s   0 0 AArC   whatr   r   c                     t          |t          j        j                  r|                                }t          j                    }t          | |||          }||fS )a  Send a DNS message to the specified UDP socket.

    *sock*, a ``socket``.

    *what*, a ``bytes`` or ``dns.message.Message``, the message to send.

    *destination*, a destination tuple appropriate for the address family
    of the socket, specifying where to send the query.

    *expiration*, a ``float`` or ``None``, the absolute time at which
    a timeout exception should be raised.  If ``None``, no timeout will
    occur.

    Returns an ``(int, float)`` tuple of bytes sent and the sent time.
    )r   r   r   Messager   r   r2  )rC   r3  r   r   	sent_timens         r   send_udpr8    sP    , $+,, ||~~	I$k:66Ay>r   r   r   r   r   raise_on_truncationignore_errorsqueryc                    d}	 t          | d|          \  }}t          | j        |||          s-t          j                    }	 t          j                            ||||||          }n[# t          j        j        $ r6}|	r.|
,|
                    |                                          sY d}~ d}~wt          $ r |	rY  w xY w|	r|
|
                    |          s|r||fS |||fS )a  Read a DNS message from a UDP socket.

    *sock*, a ``socket``.

    *destination*, a destination tuple appropriate for the address family
    of the socket, specifying where the message is expected to arrive from.
    When receiving a response, this would be where the associated query was
    sent.

    *expiration*, a ``float`` or ``None``, the absolute time at which
    a timeout exception should be raised.  If ``None``, no timeout will
    occur.

    *ignore_unexpected*, a ``bool``.  If ``True``, ignore responses from
    unexpected sources.

    *one_rr_per_rrset*, a ``bool``.  If ``True``, put each RR into its own
    RRset.

    *keyring*, a ``dict``, the keyring to use for TSIG.

    *request_mac*, a ``bytes`` or ``None``, the MAC of the request (for TSIG).

    *ignore_trailing*, a ``bool``.  If ``True``, ignore trailing
    junk at end of the received message.

    *raise_on_truncation*, a ``bool``.  If ``True``, raise an exception if
    the TC bit is set.

    Raises if the message is malformed, if network errors occur, of if
    there is a timeout.

    If *destination* is not ``None``, returns a ``(dns.message.Message, float)``
    tuple of the received message and the received time.

    If *destination* is ``None``, returns a
    ``(dns.message.Message, float, tuple)``
    tuple of the received message, the received time, and the address where
    the message arrived from.

    *ignore_errors*, a ``bool``.  If various format errors or response
    mismatches occur, ignore them and keep listening for a valid response.
    The default is ``False``.

    *query*, a ``dns.message.Message`` or ``None``.  If not ``None`` and
    *ignore_errors* is ``True``, check that the received message is a response
    to this query, and if not keep listening for a valid response.
    r   T  )r   r   r   r   r9  N)
r-  r   r&   r   r   r   r   	Truncatedr   r7   )rC   r   r   r   r   r   r   r   r9  r:  r;  r   r   received_timer  es                   r   receive_udprA    sS   | D(4(ujAA|#K{4E
 
 	 		%%'!1 /$7 &  AA {$ 	 	 	 %))!))++66 &  	 	 	 		
  	U.u7H7H7K7K. 	4}%%}l33s$   %A* *C>+B/.B//C C5   c                    |                                  }t          ||||          \  }}}t          |          \  }}|
rt          j        |
          }nt          |t          j        |          }|5 }t          ||||           t          |||||| j
        | j        ||	||           \  }}||z
  |_        |s|                     |          st          |cddd           S # 1 swxY w Y   	 J )a  Return the response obtained after sending a query via UDP.

    *q*, a ``dns.message.Message``, the query to send

    *where*, a ``str`` containing an IPv4 or IPv6 address,  where
    to send the message.

    *timeout*, a ``float`` or ``None``, the number of seconds to wait before the
    query times out.  If ``None``, the default, wait forever.

    *port*, an ``int``, the port send the message to.  The default is 53.

    *source*, a ``str`` containing an IPv4 or IPv6 address, specifying
    the source address.  The default is the wildcard address.

    *source_port*, an ``int``, the port from which to send the message.
    The default is 0.

    *ignore_unexpected*, a ``bool``.  If ``True``, ignore responses from
    unexpected sources.

    *one_rr_per_rrset*, a ``bool``.  If ``True``, put each RR into its own
    RRset.

    *ignore_trailing*, a ``bool``.  If ``True``, ignore trailing
    junk at end of the received message.

    *raise_on_truncation*, a ``bool``.  If ``True``, raise an exception if
    the TC bit is set.

    *sock*, a ``socket.socket``, or ``None``, the socket to use for the
    query.  If ``None``, the default, a socket is created.  Note that
    if a socket is provided, it must be a nonblocking datagram socket,
    and the *source* and *source_port* are ignored.

    *ignore_errors*, a ``bool``.  If various format errors or response
    mismatches occur, ignore them and keep listening for a valid response.
    The default is ``False``.

    Returns a ``dns.message.Message``.
    N)r   r   r*   r   r   r2   r3   
SOCK_DGRAMr8  rA  r   macr   r   ry   )r   r   r   r;   rB   r   r   r   r   r9  rC   r:  r   rA   r   
begin_timer   r  r   r  r?  s                        r   udprG  &  s^   p 99;;D 7tV[! !Rf  .g66Z 90:0Ft0L0L"f/88	 qD+z222(IE
 
M +  	q!1!1 	)               , 	s   1A"C  C$'C$udp_socktcp_sockc                     	 t          | ||||||||d|	|          }|dfS # t          j        j        $ r t	          | ||||||||
	  	        }|dfcY S w xY w)a|  Return the response to the query, trying UDP first and falling back
    to TCP if UDP results in a truncated response.

    *q*, a ``dns.message.Message``, the query to send

    *where*, a ``str`` containing an IPv4 or IPv6 address,  where to send the message.

    *timeout*, a ``float`` or ``None``, the number of seconds to wait before the query
    times out.  If ``None``, the default, wait forever.

    *port*, an ``int``, the port send the message to.  The default is 53.

    *source*, a ``str`` containing an IPv4 or IPv6 address, specifying the source
    address.  The default is the wildcard address.

    *source_port*, an ``int``, the port from which to send the message. The default is
    0.

    *ignore_unexpected*, a ``bool``.  If ``True``, ignore responses from unexpected
    sources.

    *one_rr_per_rrset*, a ``bool``.  If ``True``, put each RR into its own RRset.

    *ignore_trailing*, a ``bool``.  If ``True``, ignore trailing junk at end of the
    received message.

    *udp_sock*, a ``socket.socket``, or ``None``, the socket to use for the UDP query.
    If ``None``, the default, a socket is created.  Note that if a socket is provided,
    it must be a nonblocking datagram socket, and the *source* and *source_port* are
    ignored for the UDP query.

    *tcp_sock*, a ``socket.socket``, or ``None``, the connected socket to use for the
    TCP query.  If ``None``, the default, a socket is created.  Note that if a socket is
    provided, it must be a nonblocking connected stream socket, and *where*, *source*
    and *source_port* are ignored for the TCP query.

    *ignore_errors*, a ``bool``.  If various format errors or response mismatches occur
    while listening for UDP, ignore them and keep listening for a valid response. The
    default is ``False``.

    Returns a (``dns.message.Message``, tcp) tuple where tcp is ``True`` if and only if
    TCP was used.
    TF)rG  r   r   r>  tcp)r   r   r   r;   rB   r   r   r   r   rH  rI  r:  r  s                r   udp_with_fallbackrL    s    r 
 
 %  ;       

 

 $ s     /AAc                 @   d}|dk    r	 |                      |          }|dk    rt          d          |t          |          z  }||z  }nL# t          t          j        f$ r t          | |           Y n$t          j        $ r t          | |           Y nw xY w|dk    |S )zRead the specified number of bytes from sock.  Keep trying until we
    either get the desired amount, or we hit EOF.
    A Timeout exception will be raised if the operation is not completed
    by the expiration time.
    r   r   EOF)	recvEOFErrorr   r+  r`   SSLWantReadErrorr   SSLWantWriteErrorr   )rC   countr   r   r7  s        r   	_net_readrT    s     	A
!))		1		%  ACxxuoo%SVVOEFAA!56 	1 	1 	1tZ00000$ 	1 	1 	1tZ00000	1 !)) Hs   AA &B4BBc                     d}t          |          }||k     rv	 ||                     ||d                   z  }nL# t          t          j        f$ r t          | |           Y n$t          j        $ r t          | |           Y nw xY w||k     tdS dS )zWrite the specified data to the socket.
    A Timeout exception will be raised if the operation is not completed
    by the expiration time.
    r   N)r   r0  r+  r`   rR  r   rQ  r   )rC   r1  r   currentls        r   
_net_writerX    s    
 GD		A
A++	1tyyghh000GG!67 	1 	1 	1tZ00000# 	1 	1 	1tZ00000	1 A++++++s    : &B"BBc                 $   t          |t          j        j                  r|                    d          }n&t          |                              dd          |z   }t          j                    }t          | ||           t          |          |fS )a{  Send a DNS message to the specified TCP socket.

    *sock*, a ``socket``.

    *what*, a ``bytes`` or ``dns.message.Message``, the message to send.

    *expiration*, a ``float`` or ``None``, the absolute time at which
    a timeout exception should be raised.  If ``None``, no timeout will
    occur.

    Returns an ``(int, float)`` tuple of bytes sent and the sent time.
    T)prepend_lengthr   big)	r   r   r   r5  r   r   to_bytesr   rX  )rC   r3  r   tcpmsgr6  s        r   send_tcpr^    s    $ $+,, 5T22
 T##Au--4	ItVZ(((KK##r   c                     t          | d|          }t          j        d|          \  }t          | ||          }t          j                    }	t          j                            |||||          }
|
|	fS )a  Read a DNS message from a TCP socket.

    *sock*, a ``socket``.

    *expiration*, a ``float`` or ``None``, the absolute time at which
    a timeout exception should be raised.  If ``None``, no timeout will
    occur.

    *one_rr_per_rrset*, a ``bool``.  If ``True``, put each RR into its own
    RRset.

    *keyring*, a ``dict``, the keyring to use for TSIG.

    *request_mac*, a ``bytes`` or ``None``, the MAC of the request (for TSIG).

    *ignore_trailing*, a ``bool``.  If ``True``, ignore trailing
    junk at end of the received message.

    Raises if the message is malformed, if network errors occur, of if
    there is a timeout.

    Returns a ``(dns.message.Message, float)`` tuple of the received message
    and the received time.
    r   !Hr   )rT  structunpackr   r   r   r   )rC   r   r   r   r   r   ldatarW  r   r?  r  s              r   receive_tcprd    s}    B dAz**E=u%%DQT1j))DIKKM)' 	 	 	A }r   c                 N   |                      |          }|dk    rd S |t          j        t          j        t          j        fv r:t          | |           |                     t          j        t          j	                  }|dk    r"t          |t          j        |                    d S rS   )
connect_exerrnoEINPROGRESSEWOULDBLOCKEALREADYr   
getsockoptr3   
SOL_SOCKETSO_ERROROSErrorosstrerror)r   r@   r   errs       r   r5   r5   K  s    
,,w

C
axx
u %"3U^DDD1j)))ll6,fo>>
axxc2;s++,,, xr   c	           	         |                                  }	t          |          \  }
}|rt          j        |          }n1t	          ||||          \  }}}t          |t          j        |          }|5 }|st          |||           t          ||	|           t          |||| j        | j        |          \  }}||
z
  |_        |                     |          st          |cddd           S # 1 swxY w Y   	 J )a  Return the response obtained after sending a query via TCP.

    *q*, a ``dns.message.Message``, the query to send

    *where*, a ``str`` containing an IPv4 or IPv6 address, where
    to send the message.

    *timeout*, a ``float`` or ``None``, the number of seconds to wait before the
    query times out.  If ``None``, the default, wait forever.

    *port*, an ``int``, the port send the message to.  The default is 53.

    *source*, a ``str`` containing an IPv4 or IPv6 address, specifying
    the source address.  The default is the wildcard address.

    *source_port*, an ``int``, the port from which to send the message.
    The default is 0.

    *one_rr_per_rrset*, a ``bool``.  If ``True``, put each RR into its own
    RRset.

    *ignore_trailing*, a ``bool``.  If ``True``, ignore trailing
    junk at end of the received message.

    *sock*, a ``socket.socket``, or ``None``, the connected socket to use for the
    query.  If ``None``, the default, a socket is created.  Note that
    if a socket is provided, it must be a nonblocking connected stream
    socket, and *where*, *port*, *source* and *source_port* are ignored.

    Returns a ``dns.message.Message``.
    N)r   r*   r   r   r   r2   r3   r4   r5   r^  rd  r   rE  r   r   ry   )r   r   r   r;   rB   r   r   r   rC   r   rF  r   r  rA   r   r   r  r?  s                     r   rK  rK  V  sZ   V 99;;D-g66Z :0:0Ft0L0L$;4%
 %
![& "f0&99	 q 	1QZ000D*%%%(z+QY
 
M +}}Q 	                	s   1A-C++C/2C/c                     	 	 |                                   d S # t          j        $ r t          | |           Y n$t          j        $ r t          | |           Y nw xY w]r   )do_handshaker`   rQ  r   rR  r   r   s     r   _tls_handshakeru    s    .	.NNF# 	. 	. 	.q*-----$ 	. 	. 	.q*-----	..s    AAAr   c                    d }d }t          |t                    rSt          j                            |          r|}n1t          j                            |          r|}nt          d          t          j        ||          }t          j	        j
        |_        | d|_        |                    dg           |du rt          j        |_        |S )Nzinvalid verify string)cafilecapathFdot)r   r   ro  rI   isfileisdirr   r`   rq   
TLSVersionTLSv1_2minimum_versioncheck_hostnameset_alpn_protocolsrr   r  )r   r   rw  rx  r   s        r   _make_dot_ssl_contextr    s     !F F&# 67>>&!! 	6FFW]]6"" 	6FF4555,F6JJJK"%."8K%*"""E7+++"%-r   r   c                 <   |rt          | ||||||||	  	        S |                                 }t          |          \  }}t          ||||          \  }}}|	|st	          |
|          }	t          |t          j        ||	|
          5 }t          |||           t          ||           t          |||           t          |||| j        | j        |          \  }}||z
  |_        |                     |          st           |cddd           S # 1 swxY w Y   	 J )ak  Return the response obtained after sending a query via TLS.

    *q*, a ``dns.message.Message``, the query to send

    *where*, a ``str`` containing an IPv4 or IPv6 address,  where
    to send the message.

    *timeout*, a ``float`` or ``None``, the number of seconds to wait before the
    query times out.  If ``None``, the default, wait forever.

    *port*, an ``int``, the port send the message to.  The default is 853.

    *source*, a ``str`` containing an IPv4 or IPv6 address, specifying
    the source address.  The default is the wildcard address.

    *source_port*, an ``int``, the port from which to send the message.
    The default is 0.

    *one_rr_per_rrset*, a ``bool``.  If ``True``, put each RR into its own
    RRset.

    *ignore_trailing*, a ``bool``.  If ``True``, ignore trailing
    junk at end of the received message.

    *sock*, an ``ssl.SSLSocket``, or ``None``, the socket to use for
    the query.  If ``None``, the default, a socket is created.  Note
    that if a socket is provided, it must be a nonblocking connected
    SSL stream socket, and *where*, *port*, *source*, *source_port*,
    and *ssl_context* are ignored.

    *ssl_context*, an ``ssl.SSLContext``, the context to use when establishing
    a TLS connection. If ``None``, the default, creates one with the default
    configuration.

    *server_hostname*, a ``str`` containing the server's hostname.  The
    default is ``None``, which means that no hostname is known, and if an
    SSL context is created, hostname checking will be disabled.

    *verify*, a ``bool`` or ``str``.  If a ``True``, then TLS certificate verification
    of the server is done using the default CA bundle; if ``False``, then no
    verification is done; if a `str` then it specifies the path to a certificate file or
    directory which will be used for verification.

    Returns a ``dns.message.Message``.

    N)r   r   )rK  r   r*   r   r  r2   r3   r4   r5   ru  r^  rd  r   rE  r   r   ry   )r   r   r   r;   rB   r   r   r   rC   r   r   r   r   rF  r   rA   r   r   r  r?  s                       r   tlsr    s   z  
 

 

 
	
 99;;D-g66Z 7tV[! !Rf 4+OVDD	
'
 
 
  
K,,,q*%%%D*%%%(z+QY
 
M +}}Q 	!               $ 	s   A;DDDr%  c                 @   t           j        j        st          d          ||
|}
d| _        |                                 }|rt          j        d          }|}n#t           j                            |	|
          }|}|5  |s|	                    ||||          }t          |          \  }}|                    |          5 }|                    |d           |                    t          |                    }ddd           n# 1 swxY w Y   t          j                    }ddd           n# 1 swxY w Y   t           j                            || j        | j        ||          }t)          ||z
  d          |_        |                     |          st,          |S )a  Return the response obtained after sending a query via DNS-over-QUIC.

    *q*, a ``dns.message.Message``, the query to send.

    *where*, a ``str``, the nameserver IP address.

    *timeout*, a ``float`` or ``None``, the number of seconds to wait before the query
    times out. If ``None``, the default, wait forever.

    *port*, a ``int``, the port to send the query to. The default is 853.

    *source*, a ``str`` containing an IPv4 or IPv6 address, specifying the source
    address.  The default is the wildcard address.

    *source_port*, an ``int``, the port from which to send the message. The default is
    0.

    *one_rr_per_rrset*, a ``bool``. If ``True``, put each RR into its own RRset.

    *ignore_trailing*, a ``bool``. If ``True``, ignore trailing junk at end of the
    received message.

    *connection*, a ``dns.quic.SyncQuicConnection``.  If provided, the connection to use
    to send the query.

    *verify*, a ``bool`` or ``str``.  If a ``True``, then TLS certificate verification
    of the server is done using the default CA bundle; if ``False``, then no
    verification is done; if a `str` then it specifies the path to a certificate file or
    directory which will be used for verification.

    *hostname*, a ``str`` containing the server's hostname or ``None``.  The default is
    ``None``, which means that no hostname is known, and if an SSL context is created,
    hostname checking will be disabled.  This value is ignored if *url* is not
    ``None``.

    *server_hostname*, a ``str`` or ``None``.  This item is for backwards compatibility
    only, and has the same meaning as *hostname*.

    Returns a ``dns.message.Message``.
    zDNS-over-QUIC is not available.Nr   )r  r  Tr   r
   )r   r  r  r~   r  r   r   r   r  r  r*   r  r0  r!  r   r   r   r   r   r   r"  r   ry   )r   r   r   r;   rB   r   r   r   r%  r   r   r   r   r$  the_connectionthe_managerr&  r   r'  r(  r  s                        r   r  r  '  s   n 8 75666"x'7"AD99;;D  5?5KD5Q5Q#(**v8*TT	   	S(00fkRRN,W55
''00 	:FKKd###>>*Z"8"899D	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:                		M)' 	 	 	A %%%AF== Hs7    AD19D;D1D	D1D	D11D58D5c                       e Zd ZdZdZdZdZdS )UDPModea  How should UDP be used in an IXFR from :py:func:`inbound_xfr()`?

    NEVER means "never use UDP; always use TCP"
    TRY_FIRST means "try to use UDP but fall back to TCP if needed"
    ONLY means "raise ``dns.xfr.UseTCP`` if trying UDP does not succeed"
    r   r   r   N)rK   rL   rM   rw   NEVER	TRY_FIRSTONLYr^   r   r   r  r    s)          EIDDDr   r  txn_managerr   serialc              #     K   |j         d         j        }|t          j        j        k    }|                                 }|                                }	|j        t          j	        k    }
|
rt          ||	d|           n6t          j        dt          |	                    |	z   }t          |||           t          j                            | |||
          5 }d}d}|st#          |          \  }}||||k    r|}|
rt%          |d|          \  }}n9t'          |d|          }t          j        d|          \  }t'          |||          }t          j                            ||j        |j        d|||
 |          }|                    |          }|V  |j        }||j        r&|j        st          j                            d	          ddd           dS # 1 swxY w Y   dS )
z'Given a socket, does the zone transfer.r   Nr`  Fr=  r   T)r   r   xfrorigintsig_ctxmultir   zmissing TSIG)questionrdtyper   	rdatatypeIXFRfrom_wire_originr   r   r3   rD  r2  ra  packr   rX  r  Inboundr*   r-  rT  rb  r   r   r   rE  process_messager  had_tsigr   	FormError)r  r   r;  r  r   r   r  is_ixfrr  r   is_udpr]  inbounddoner  r>   mexpirationrwirerc  rW  r  s                        r   _inbound_xfrr    sB      ^A%F**G))++F==??DVv((F *!T4,,,,T3t99--41fj)))	fff	=	= : 	"-g66Q"&;+C+C( 5&q%==
!!Q44}T511!!Q44%%!I!!z!( & 	 	A **1--DGGGzH1  	"2 = 	: 	:-)).999;: : : : : : : : : : : : : : : : : :s   C6GGGzoner  rdclasskeyname
relativizer)   use_udpkeyalgorithmc           	   #     K    G d dt           j        j                  }t          |t                    rt           j                            |          }t           j        j        	                    |          }t           j
                            |||          }|t           j        j        k    rw|                    |j        |t           j        j        t           j        j        d          }t           j                            ddd|z            }|                    |d           ||                    |||
           t+          | ||
|          \  }}}
t-          |	          \  }} |||          }|r$|t           j        j        k    rt/          d          |rt0          j        nt0          j        }t7          |||
          5 }t9          |||           t;          ||||||          E d	{V  d	d	d	           d	S # 1 swxY w Y   d	S )a  Return a generator for the responses to a zone transfer.

    *where*, a ``str`` containing an IPv4 or IPv6 address,  where
    to send the message.

    *zone*, a ``dns.name.Name`` or ``str``, the name of the zone to transfer.

    *rdtype*, an ``int`` or ``str``, the type of zone transfer.  The
    default is ``dns.rdatatype.AXFR``.  ``dns.rdatatype.IXFR`` can be
    used to do an incremental transfer instead.

    *rdclass*, an ``int`` or ``str``, the class of the zone transfer.
    The default is ``dns.rdataclass.IN``.

    *timeout*, a ``float``, the number of seconds to wait for each
    response message.  If None, the default, wait forever.

    *port*, an ``int``, the port send the message to.  The default is 53.

    *keyring*, a ``dict``, the keyring to use for TSIG.

    *keyname*, a ``dns.name.Name`` or ``str``, the name of the TSIG
    key to use.

    *relativize*, a ``bool``.  If ``True``, all names in the zone will be
    relativized to the zone origin.  It is essential that the
    relativize setting matches the one specified to
    ``dns.zone.from_xfr()`` if using this generator to make a zone.

    *lifetime*, a ``float``, the total number of seconds to spend
    doing the transfer.  If ``None``, the default, then there is no
    limit on the time the transfer may take.

    *source*, a ``str`` containing an IPv4 or IPv6 address, specifying
    the source address.  The default is the wildcard address.

    *source_port*, an ``int``, the port from which to send the message.
    The default is 0.

    *serial*, an ``int``, the SOA serial number to use as the base for
    an IXFR diff sequence (only meaningful if *rdtype* is
    ``dns.rdatatype.IXFR``).

    *use_udp*, a ``bool``.  If ``True``, use UDP (only meaningful for IXFR).

    *keyalgorithm*, a ``dns.name.Name`` or ``str``, the TSIG algorithm to use.

    Raises on errors, and so does the generator.

    Returns a generator of ``dns.message.Message`` objects.
    c                   f    e Zd Zd Zd Zdej        j        fdZd Z	d
de
dej        j        fdZd	S )$xfr.<locals>.DummyTransactionManagerc                 @    |||rt           j        j        n|f| _        d S r   )r   r  emptyinfo)r"   r  r  s      r   r   z-xfr.<locals>.DummyTransactionManager.__init__
  s!    z-USX^^vVDIIIr   c                     | j         S r   )r  r"   s    r   origin_informationz7xfr.<locals>.DummyTransactionManager.origin_information  s
    9r   r   c                     t           r   rG   r  s    r   	get_classz.xfr.<locals>.DummyTransactionManager.get_class  r]   r   c                     t           r   rG   r  s    r   readerz+xfr.<locals>.DummyTransactionManager.reader  r]   r   Freplacementc                 j     G d d          }t          t          j        j         |                      S )Nc                       e Zd Zd Zd ZdS )Exfr.<locals>.DummyTransactionManager.writer.<locals>.DummyTransactionc                     d S r   r^   )r"   rX   kws      r   nopzIxfr.<locals>.DummyTransactionManager.writer.<locals>.DummyTransaction.nop  s    Dr   c                     | j         S r   )r  )r"   r>   s     r   __getattr__zQxfr.<locals>.DummyTransactionManager.writer.<locals>.DummyTransaction.__getattr__  s	    8Or   N)rK   rL   rM   r  r  r^   r   r   DummyTransactionr    s2          $ $ $ $ $r   r  )r   r   transactionTransaction)r"   r  r  s      r   writerz+xfr.<locals>.DummyTransactionManager.writer  sK    $ $ $ $ $ $ $ $ 35E5E5G5GHHHr   N)F)rK   rL   rM   r   r  r   
rdataclass
RdataClassr  r  boolr  r  r  r^   r   r   DummyTransactionManagerr  	  s        	W 	W 	W	 	 		&s~8 	& 	& 	& 	&	& 	& 	&	I 	Id 	Is7R 	I 	I 	I 	I 	I 	Ir   r  T)createINSOAz. . %u 0 0 0 0r   N)	algorithmzcannot do a UDP AXFR)r   r  TransactionManagerr   r   r  	from_textr  	RdataTypemaker   
make_queryr  
find_rrset	authorityr  r  r  rdataadduse_tsigr   r*   r   r3   rD  r4   r2   r5   r  )r   r  r  r  r   r;   r   r  r  r)   rB   r   r  r  r  r  r   rrsetsoarA   r   r>   r   tm	sock_typer   s                             r   r  r    sk     JI I I I I#/"D I I I. $ (x!!$'']$))&11FtVW55A###Ks~0#-2CD  
 
 i!!$/?&/HII		#q	

7G|
<<< 7tV[! !Rf %X..OQ
	 	 z	2	2B 16S]////000%,D!!&2DI	b)V	,	, GK,,,Aq&':FFFFFFFFFG G G G G G G G G G G G G G G G G Gs   ,G==HHudp_modec	           	      .   |#t           j                            |          \  }}	nt           j                            |          }	t	          | |||          \  }
}}t          |          \  }}|j        d         j        t           j        j	        k    r|t          j        k    rt          |
t          j        |          5 }t          |||           	 t!          ||||	||          D ]}	 ddd           dS # t           j        j        $ r |t          j        k    r Y nw xY w	 ddd           n# 1 swxY w Y   t          |
t          j        |          5 }t          |||           t!          ||||	||          D ]}	 ddd           dS # 1 swxY w Y   dS )a  Conduct an inbound transfer and apply it via a transaction from the
    txn_manager.

    *where*, a ``str`` containing an IPv4 or IPv6 address,  where
    to send the message.

    *txn_manager*, a ``dns.transaction.TransactionManager``, the txn_manager
    for this transfer (typically a ``dns.zone.Zone``).

    *query*, the query to send.  If not supplied, a default query is
    constructed using information from the *txn_manager*.

    *port*, an ``int``, the port send the message to.  The default is 53.

    *timeout*, a ``float``, the number of seconds to wait for each
    response message.  If None, the default, wait forever.

    *lifetime*, a ``float``, the total number of seconds to spend
    doing the transfer.  If ``None``, the default, then there is no
    limit on the time the transfer may take.

    *source*, a ``str`` containing an IPv4 or IPv6 address, specifying
    the source address.  The default is the wildcard address.

    *source_port*, an ``int``, the port from which to send the message.
    The default is 0.

    *udp_mode*, a ``dns.query.UDPMode``, determines how UDP is used
    for IXFRs.  The default is ``dns.UDPMode.NEVER``, i.e. only use
    TCP.  Other possibilities are ``dns.UDPMode.TRY_FIRST``, which
    means "try UDP but fallback to TCP if needed", and
    ``dns.UDPMode.ONLY``, which means "try UDP and raise
    ``dns.xfr.UseTCP`` if it does not succeed.

    Raises on errors.
    Nr   )r   r  r  extract_serial_from_queryr   r*   r  r  r  r  r  r  r2   r3   rD  r5   r  UseTCPr  r4   )r   r  r;  r;   r   r)   rB   r   r  r  rA   r   r>   r   r   s                  r   inbound_xfrr  9  sU   ^ }',,[9922599 7tV[! !Rf %X..OQ
~a3=#555(gm:S:S"f/88 
	AQZ000%E67J   A 
	 
	 
	 
	 
	 
	 
	 
	 7>   w|++ ,++
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
b&,f	5	5 K,,,k1eVWjQQ 	 	A	                 sB   =D-C55%DD-DD--D14D1)F

FF)T)NN)	Nr  Nr   FFTNTr   )
NNFFNr   FFFN)
NrB  Nr   FFFFNF)
NrB  Nr   FFFNNF)NFNr   F)NrB  Nr   FFN)
Nr  Nr   FFNNNT)
Nr  Nr   FFNTNN)~rw   r   r   enumrg  ro  os.pathr   r   r3   ra  r   urllib.parser   typingr   r   r   r   r   r   dns._featuresr   dns.exceptiondns.inetdns.messagedns.namedns.quic	dns.rcodedns.rdataclassdns.rdatatype
dns.serialdns.transactiondns.tsigdns.xfrr   r   	_featureshave_have_httpxhttpcore._backends.syncr8   r   NetworkBackend_CoreNetworkBackend	_backendssync
SyncStreamr6   r   HTTPTransportrQ   r   r`   ImportErrorr   r   DNSExceptionru   r  ry   r{   r~   r  TransferErrorr*   r   r   r   r   r   r   r2   r   IntEnumr   rZ   r   r   r5  r   floatr  r  r  r  Headersbytesr  r  r   r-  r2  r8  r  NametsigKeyrA  rG  rL  rT  rX  r^  rd  r5   rK  ru  rk   r  rn   r  SyncQuicConnectionr  r  r  r  r  AXFRr  r  default_algorithmr  r  r  r  r^   r   r   <module>r     s  $          				              : : : : : : : : : : : : : : : :                                       2 2 2 m  '' S&""""LLL"1(-8O2& 2& 2& 2& 2&- 2& 2& 2&h    ,    ,& & & & & & & &
 .JJJJ . . .. . . . . . . . . ..0 H H H H Hs}1 H H HG G G G G#-) G G G    CM&   
    CM&    %$ $ $$ $ $80 0 00 0 0	) 	) 	)  " =A)% )% )% )%X   (./       $,   &  $ "!!'+#26" + 3!D D
{DD e_D 	D
 SMD D D D c]D D D  }D $)D ./D D  !D" 	[#D D D DN#(* % E    O38+ O3 Oe O O O O O*  $ "!#". .
{.. 
. e_	.
 . SM. . . . $). sm. . 	[. . . .b	1 	1 	11 1 1& #'	 

#U*
+  	
 3:   > "&"&#";?#&! %+/g4 g4
g4#g4 g4 	g4
 g4 d38=#(,678g4 %g4 g4 g4 g4 CK'(g4 	g4 g4 g4 g4Z  $ #"! %X X
{XX e_X 	X
 SMX X X X X X 3-X X 	[X X X X|  $ #"!""U  U 
{U U  e_U  	U 
 SMU  U  U  U  U  smU  smU  U  3;$%U  U  U  U p  *1 1 1& #'$ $
$
#U*
+$ $ 3:	$ $ $ $@ #'";?#&!, ,
,, , d38=#(,678	,
 %, , 3;%&, , , ,^- - -  $ "!B B
{BB e_B 	B
 SMB B B B 3-B 	[B B B BJ. . .c],1$),<^   2  $ "!$(,0%)#h h
{hh e_h 	h
 SMh h h h 3=
!h #.)h c]h $)h 	[h h h h\  $ "!8<#"%)Z Z
{ZZ e_Z 	Z
 SMZ Z Z Z 45Z $)Z smZ c]Z 	[Z Z Z Zz
 
 
 
 
dl 
 
 
0:30:}0: ;0: SM	0:
 e_0: 0: 	0: 0: 0: 0:l 36-2D58^5F#;?37 $ .1h.HrG rGrG
s"
#rG #-)3./rG 3>,c12	rG
 e_rG rG d38=#(,678rG eCHM3./0rG rG uorG SMrG rG rG rG s*+rG  	!rG rG rG rGp ,0# $ H HH3H CK'(H 	H
 e_H uoH SMH H H 
H H H H H Hs   +C0 0DD