
    hI~              #       $   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	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mZ ddlmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z' 	 ddl(Z(e&rddl,Z,ejZ                  j\                  Z/d Z0dFdZ1	 dFdejd                  jf                  d	ejh                  jj                  e6z  d
e
de7dz  dee8e7f   f
dZ9	 	 	 	 	 	 	 	 	 	 dGdejd                  jf                  d
e
dz  de7dz  de:de:deejv                  jx                  ejz                  j|                  f   dz  de6dz  de:de:de:dejh                  jj                  dz  de
fdZ?	 	 	 	 	 	 	 	 	 	 	 dHdejh                  jj                  de@de7dz  de8de@dz  de8de:de:de:de:dejd                  jf                  dz  dejd                  j                  dz  de:dejh                  jj                  fd ZB	 	 	 	 	 	 	 	 	 	 	 dIdejh                  jj                  de@de7dz  de8de@dz  de8de:de:de:d!ejd                  jf                  dz  d"ejd                  j                  dz  dejd                  j                  dz  de:deejh                  jj                  e:f   fd#ZD	 dFdejd                  j                  d	ejh                  jj                  e6z  de7dz  dee8e7f   fd$ZEd% ZF	 	 	 	 	 dJdejd                  j                  de7dz  de:deejv                  jx                  ejz                  j|                  f   dz  de6dz  de:deejh                  jj                  e7f   fd&ZG	 	 	 	 	 	 	 	 dKdejh                  jj                  de@de7dz  de8de@dz  de8de:de:dejd                  j                  dz  dejd                  j                  dz  dejh                  jj                  fd'ZH	 	 	 	 	 	 	 	 	 	 	 dLdejh                  jj                  de@de7dz  de8de@dz  de8de:de:dejd                  j                  dz  dejd                  j                  dz  d)e(j                  dz  d*e@dz  d+e:e@z  dejh                  jj                  fd,ZJd-ed.   dd.fd/ZKdd0dddddd1d(d(ddej                  ej                  fdejh                  jj                  de@de7dz  de8de@dz  de8de:de:d2ed3   d4e@d5e:d+e:e@z  e(j                  z  d6e@dz  d-ed.   d7e8d8edejh                  jj                  f"d9ZN	 	 	 	 	 	 	 	 	 	 dMdejh                  jj                  de@d:e@de7dz  de8de@dz  de8de:de:d+e:e@z  e(j                  z  dejd                  j                  dz  d5e:d;ej                  j                  dz  dejh                  jj                  fd<ZQ	 	 	 	 	 	 	 	 	 	 	 dNdejh                  jj                  de@de7dz  de8de@dz  de8de:de:d;ej                  j                  dz  d+e:e@z  dejd                  j                  dz  d=e@dz  d*e@dz  dejh                  jj                  fd>ZOd?ej                  j                  d@ejd                  j                  dejh                  jj                  dAe8dz  de7dz  de7de
fdBZUdddddde!j                  dfde@d?ej                  j                  dejh                  jj                  dz  de8de7dz  dCe7dz  de@dz  de8dDe!dejd                  j                  dz  ddfdEZWy# e)$ r
 ddl*m+Z( Y w xY w)OzTalk to a DNS server.    N)AnyDictOptionalTuplecast)NullContext)BadResponseHTTPVersionNoDOHNoDOQUDPMode_check_status_compute_times_matches_destination
_remaininghave_dohmake_ssl_contextc                     |s|rF|@| t         j                  k(  rd}||fS | t         j                  k(  rd}||fS t        d|        ||fS y )Nz0.0.0.0z::zunknown address family )socketAF_INETAF_INET6NotImplementedError)afaddressports      L/var/www/html/eduruby.in/venv/lib/python3.12/site-packages/dns/asyncquery.py_source_tupler   B   sl     $?V^^##
 	 v&  *,CB4*HII    c                 R    | %|st        j                          }t        | |z
  d      S y Nr   )timemax)
expirationnows     r   _timeoutr%   R   s+    ))+C:#Q''r   sockwhatdestinationr#   returnc                    K   t        |t        j                  j                        r|j	                         }t        j
                         }| j                  ||t        ||             d{   }||fS 7 w)a  Send a DNS message to the specified UDP socket.

    *sock*, a ``dns.asyncbackend.DatagramSocket``.

    *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.  The expiration value is meaningless for the asyncio backend, as
    asyncio's transport sendto() never blocks.

    Returns an ``(int, float)`` tuple of bytes sent and the sent time.
    N)
isinstancednsmessageMessageto_wirer!   sendtor%   )r&   r'   r(   r#   	sent_timens         r   send_udpr3   [   s^     . $++,||~		Ikk$Xj)-LMMAy> 	Ns   A)A6+A4,	A6Fignore_unexpectedone_rr_per_rrsetkeyringrequest_macignore_trailingraise_on_truncationignore_errorsqueryc                   K   d}	 | j                  dt        |             d{   \  }}t        | j                  |||      s@t	        j                         }	 t
        j                  j                  ||||||      }|	r|
|
j                  |      s|||fS 7 u# t
        j                  j                  $ r.}|	r&|
$|
j                  |j                               sY d}~܂ d}~wt        $ r |	rY  w xY ww)aj  Read a DNS message from a UDP socket.

    *sock*, a ``dns.asyncbackend.DatagramSocket``.

    See :py:func:`dns.query.receive_udp()` for the documentation of the other
    parameters, and exceptions.

    Returns a ``(dns.message.Message, float, tuple)`` tuple of the received message, the
    received time, and the address where the message arrived from.
    r     N)r6   r7   r5   r8   r9   )recvfromr%   r   familyr!   r,   r-   	from_wire	Truncatedis_response	Exception)r&   r(   r#   r4   r5   r6   r7   r8   r9   r:   r;   wirefrom_addressreceived_timeres                   r   receive_udprI   y   s    0 D
%)]]5(::N%OO|#KK{4E
 			%%'!1 /$7 & A. U.u7H7H7K=,//A  P {{$$ 		 %))!))+6 			sK   "C7B4C7%B ?C7C49#C"C7!C""C40C72C44C75   qwheretimeoutr   sourcesource_portbackendc                   K   | j                         }t        |      \  }}t        j                  j	                  |      }t        ||f|      }|
rt        |
      }no|st        j                  j                         }t        |||      }|j                         r||f}nd}|j                  |t        j                  d||       d{   }|4 d{   }t        ||||       d{    t        |||||| j                   | j"                  ||	||        d{   \  }}}||z
  |_        |s| j'                  |      st(        |cddd      d{    S 7 7 7 s7 D7 # 1 d{  7  sw Y   yxY ww)aF  Return the response obtained after sending a query via UDP.

    *sock*, a ``dns.asyncbackend.DatagramSocket``, or ``None``,
    the socket to use for the query.  If ``None``, the default, a
    socket is created.  Note that if a socket is provided, the
    *source*, *source_port*, and *backend* are ignored.

    *backend*, a ``dns.asyncbackend.Backend``, or ``None``.  If ``None``,
    the default, then dnspython will use the default backend.

    See :py:func:`dns.query.udp()` for the documentation of the other
    parameters, exceptions, and return type of this method.
    Nr   )r/   r   r,   inetaf_for_address_lltupler   asyncbackendget_default_backendr   datagram_connection_requiredmake_socketr   
SOCK_DGRAMr3   rI   r6   macr!   rB   r	   )rK   rL   rM   r   rN   rO   r4   r5   r8   r9   r&   rP   r:   rD   
begin_timer#   r   r(   cmstupledtuplesrG   rF   _s                            r   udpra      sw    8 99;D-g6Z		 	 	'BE4="-K5@5F&&::<Gr6;7//1T]FF&&r6+<+<aPP  Qq$Z888&1IIEE'
 !
M1 + q!1)   Q8!
   s~   CE6E
E6EE6E!'E(0E!E,E!E6EE6E6E!E!E6!E3'E*(E3/E6udp_socktcp_sockc                    K   	 t        | ||||||||d|	||       d{   }|dfS 7 # t        j                  j                  $ r$ t	        | ||||||||
|
       d{  7  }|dfcY S w xY ww)a  Return the response to the query, trying UDP first and falling back
    to TCP if UDP results in a truncated response.

    *udp_sock*, a ``dns.asyncbackend.DatagramSocket``, 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 the *source*,
    *source_port*, and *backend* are ignored for the UDP query.

    *tcp_sock*, a ``dns.asyncbackend.StreamSocket``, or ``None``, the
    socket to use for the TCP query.  If ``None``, the default, a
    socket is created.  Note that if a socket is provided *where*,
    *source*, *source_port*, and *backend*  are ignored for the TCP query.

    *backend*, a ``dns.asyncbackend.Backend``, or ``None``.  If ``None``,
    the default, then dnspython will use the default backend.

    See :py:func:`dns.query.udp_with_fallback()` for the documentation
    of the other parameters, exceptions, and return type of this
    method.
    TNF)ra   r,   r-   rA   tcp)rK   rL   rM   r   rN   rO   r4   r5   r8   rb   rc   rP   r:   responses                 r   udp_with_fallbackrg      s     F 
 
 %  
  ;;    
 
 
 $ s=   A-) ') A-) 4A*A 	A*'A-)A**A-c                 B  K   t        |t        j                  j                        r|j	                  d      }nt        |      j                  dd      |z   }t        j                         }| j                  |t        ||             d{    t        |      |fS 7 w)zSend a DNS message to the specified TCP socket.

    *sock*, a ``dns.asyncbackend.StreamSocket``.

    See :py:func:`dns.query.send_tcp()` for the documentation of the other
    parameters, exceptions, and return type of this method.
    T)prepend_length   bigN)
r+   r,   r-   r.   r/   lento_bytesr!   sendallr%   )r&   r'   r#   tcpmsgr1   s        r   send_tcprp   <  s      $++,T2
 T##Au-4		I
,,vx
I>
???K## @s   B	BBBc                    K   d}|dkD  rL| j                  |t        |             d{   }|dk(  rt        d      |t        |      z
  }||z   }|dkD  rL|S 7 /w)z|Read the specified number of bytes from stream.  Keep trying until we
    either get the desired amount, or we hit EOF.
    r   r   NEOF)recvr%   EOFErrorrl   )r&   countr#   r_   r2   s        r   _read_exactlyrv   U  sh      	A
!)))E8J#78885/!AE !) H 9s   &AA,AAc                   K   t        | d|       d{   }t        j                  d|      \  }t        | ||       d{   }t        j                         }	t        j
                  j                  |||||      }
|
|	fS 7 m7 Bw)zRead a DNS message from a TCP socket.

    *sock*, a ``dns.asyncbackend.StreamSocket``.

    See :py:func:`dns.query.receive_tcp()` for the documentation of the other
    parameters, exceptions, and return type of this method.
    rj   N!Hr6   r7   r5   r8   )rv   structunpackr!   r,   r-   r@   )r&   r#   r5   r6   r7   r8   ldatalrD   rF   rG   s              r   receive_tcpr~   c  s        a44E==u%DQtQ
33DIIKM)' 	 	A } 53s"   BB,B BABBc
           	        K   | j                         }
t        |      \  }}|r$|j                          d{    t        |      }n|t        j
                  j                  |      }t        |||      }||f}|	st        j                  j                         }	|	j                  |t        j                  d|||       d{   }|4 d{   }t        ||
|       d{    t        |||| j                  | j                   |       d{   \  }}||z
  |_        | j%                  |      st&        |cddd      d{    S 7 7 7 7 n7 D7 # 1 d{  7  sw Y   yxY ww)aO  Return the response obtained after sending a query via TCP.

    *sock*, a ``dns.asyncbacket.StreamSocket``, or ``None``, the
    socket to use for the query.  If ``None``, the default, a socket
    is created.  Note that if a socket is provided
    *where*, *port*, *source*, *source_port*, and *backend* are ignored.

    *backend*, a ``dns.asyncbackend.Backend``, or ``None``.  If ``None``,
    the default, then dnspython will use the default backend.

    See :py:func:`dns.query.tcp()` for the documentation of the other
    parameters, exceptions, and return type of this method.
    Nr   )r/   r   getpeernamer   r,   rR   rS   r   rU   rV   rX   r   SOCK_STREAMrp   r~   r6   rZ   r!   rB   r	   )rK   rL   rM   r   rN   rO   r5   r8   r&   rP   rD   r[   r#   r\   r   r]   r^   r_   rG   rF   s                       r   re   re     sc    4 99;D-g6Z    5@5F XX$$U+r6;7&&::<G&&""Avvw
 
   Qq$
+++#.IIEE$
 
M +}}Q   	!
+
   s   4E(EBE(>E	?
E(	E
E(EE+E
E)E4E( EE(	E(E(EEE(E%EE%!E(Tssl_contextserver_hostnameverifyc                 b  K   t        |      \  }}|rt        |      }n|
t        ||dudg      }
t        j                  j                  |      }t        |||      }||f}|	st        j                  j                         }	|	j                  |t        j                  d||||
|       d{   }|4 d{   }t        |      }t        | |||||||||	
       d{   }t        j                         }||z
  |_        |cddd      d{    S 7 g7 ^7 97 # 1 d{  7  sw Y   yxY ww)a  Return the response obtained after sending a query via TLS.

    *sock*, an ``asyncbackend.StreamSocket``, 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
    connected SSL stream socket, and *where*, *port*,
    *source*, *source_port*, *backend*, *ssl_context*, and *server_hostname*
    are ignored.

    *backend*, a ``dns.asyncbackend.Backend``, or ``None``.  If ``None``,
    the default, then dnspython will use the default backend.

    See :py:func:`dns.query.tls()` for the documentation of the other
    parameters, exceptions, and return type of this method.
    Ndotr   )r   r   r   r,   rR   rS   r   rU   rV   rX   r   r   r%   re   r!   )rK   rL   rM   r   rN   rO   r5   r8   r&   rP   r   r   r   r[   r#   r\   r   r]   r^   r_   rf   end_times                         r   tlsr     sP    <  .g6Z5@5F*6?$3NQVPWXKXX$$U+r6;7&&::<G&&	
 	
   Q:&
 
 99; :-!  	

   sl   B(D/*D+
D/5D6D/9#DD#D D/DD/D/DD/D, D#!D,(D/resolverzdns.asyncresolver.Resolverc                 F    | dd l }|j                  j                         } | S r    )dns.asyncresolverasyncresolverResolver)r   r,   s     r   _maybe_get_resolverr     s&      $$--/Or     z
/dns-queryclientz.httpx.AsyncClient|dns.quic.AsyncQuicConnectionpathpostbootstrap_addressr?   http_versionc                 	  K   	 t         j                  j                  |      }|}|Zt         j                  j	                  |      r;|t
        j                  k(  rd| d| |	 }n|t
        j                  k(  r
d| d| |	 }i }|t        j                  j                  |      }|j                  t        d      t         j                  j	                  |j                        r|j                  }|j                  |d<   |j                  |j                  }|t        j                  k(  s|t        j                  k(  rt         s|it#        |      }j                  J |j%                  |j                  |       d{   }t'        j(                  t+        |j-                                     }|r/t/        |t         j0                  j2                        st        d      |&t/        |t         j0                  j2                        sJ t5        | ||||||||||
|	       d{   S t         st6        |r%t/        |t8        j:                        st        d
      | j=                         }ddi}|t        j>                  t        j                  fv }|t        j@                  t        j                  fv }t         jB                  jE                         }|d}d}n|}|}|rtG        |      }n7 |jI                         ||||||||      }t9        j:                  ||||      }|4 d{   }|
rT|jK                  dtM        tO        |            d       |jQ                  |jS                  ||||      |       d{   }nctU        jV                  |      jY                  d      }|j[                         } |jQ                  |j]                  ||d| i|      |       d{   }ddd      d{    j^                  dk  s|j^                  dkD  r't        | d|j^                   d|j`                        t         jb                  je                  |j`                  | jf                  | jh                  ||      }!|jj                  jm                         |!_7        | jq                  |!      str        |!S # t        $ r d}Y w xY w7 G7 7 7 S7 7 # 1 d{  7  sw Y   xY ww)a  Return the response obtained after sending a query via DNS-over-HTTPS.

    *client*, a ``httpx.AsyncClient``.  If provided, the client to use for
    the query.

    Unlike the other dnspython async functions, a backend cannot be provided
    in this function because httpx always auto-detects the async backend.

    See :py:func:`dns.query.https()` for the documentation of the other
    parameters, exceptions, and return type of this method.
    Nzhttps://:z	https://[z]:zno hostname in URLsni_hostnamez8client parameter must be a dns.quic.AsyncQuicConnection.)r   r   
connectionz-client parameter must be an httpx.AsyncClientacceptzapplication/dns-messager   )local_addresshttp1http2r   
local_portr   r   r?   )r   r   r   	transport)zcontent-typezcontent-length)headerscontent
extensions   =r,   )r   paramsr      i+  z responded with status code z
Response body: ry   ):r,   rR   rS   
ValueError
is_addressr   r   r   urllibparseurlparsehostnamer   r
   H3DEFAULTr   r   resolve_namerandomchoicelist	addressesr+   quicAsyncQuicConnection_http3r   httpxAsyncClientr/   H1H2rU   rV   r   get_transport_classupdatestrrl   wait_forr   base64urlsafe_b64encoderstripdecodegetstatus_coder   r-   r@   r6   r7   elapsedtotal_secondsr!   rB   r	   )"rK   rL   rM   r   rN   rO   r5   r8   r   r   r   r   r   r   r?   r   r   urlr   parsedanswersrD   r   h1h2rP   r   r   r\   r   
the_clientrf   twirerG   s"                                     r   httpsr     s    <XX$$U+ C	~#((--e4UG1TF4&1C6??"eWBtfTF3CJ &&s+??"12288v/ &)/J~&;;";;D{~~%+++H$*84H??...$11 G !'d73D3D3F.G H*CHH00
 WXX~FCHH4P4P!QQQ
 
 	
 j):):;HII 99;D23G	+..+*=*=>	>B	+..+*=*=>	>B224G~
 
5@5H1G//1'!/	
	 Bv
   Z NN$=&)#d)n %--# )	     H ++D188>DKKME$--#!5>)	    H- D c!X%9%9C%?g1(2F2F1G 0 035
 	
 			MM)' 	 	A ++-AF==H[  8
n-   s   S)R2 ES)=S>B#S)!S"DS)%S
&S))AS:S;A#SSS#S).S/CS)2S=S) SS)S)
S)SSS)S&SS&"S)r   r   c           	      :  K   t         j                  j                  st        d      t        j
                  j                  |      }|j                  }|J |j                  |j                  }d| _	        | j                         }|r5t         j                  j                  }t         j                  j                  }n"t         j                  j                  |
      \  }} |       4 d {   } |||	|d      4 d {   }|r|}n|j                  ||||      }t        |      \  }}|j                  |       d {   }|4 d {    |j!                  |||       |j#                  t%        |             d {   }t'        |j)                         ||       d d d       d {    t+        j*                         }d d d       d {    t         j,                  j/                  || j0                  | j2                  ||      }d d d       d {    t5        z
  d      _        | j7                  |      st8        |S 7 ^7 L7 7 7 7 # 1 d {  7  sw Y   xY w7 # 1 d {  7  sw Y   xY w7 m# 1 d {  7  sw Y   }xY ww)Nz DNS-over-HTTP3 is not available.r   T)verify_modeserver_nameh3ry           )r,   r   	have_quicr   r   r   r   r   r   idr/   null_factoryfactories_for_backendconnectr   make_streamsend_h3receiver   r   r   r!   r-   r@   r6   r7   r"   rB   r	   )rK   rL   r   rM   r   rN   rO   r5   r8   r   rP   r   r   	url_partsr   rD   cfactorymfactorycontextthe_managerthe_connectionstartr#   streamfinishrG   s                             r   r   r     sM     88677%%c*I!!H~~!~~AD99;D88((88(("xx==gF8z 
 
WX$
 	! 	!!+!,!4!44" #1"9UJ)55g>>F = =sD$/#^^Jz,BCCfnn.t<	= =
 YY[F!	! 	!" KK!!II-+ " 
%
 
2 %%AF==H9
	! ?= D= = = =	! 	! 	! 	!
 
 
 
s   C(J*I+J.J?I J<I/?I 
I/
I
I/1I?I
 II/*I+I/JI-<JJJ2JJI/I/II/I*I!I*&I/-J/J	5I86J	=JJJJJJr   c           	        K   t         j                  j                  st        d      |||}d| _        | j                         }|r7t         j                  j                  }t         j                  j                  }|}n"t         j                  j                  |
      \  }} |       4 d{   } |||	|      4 d{   }|s|j                  ||||      }t        |      \  }}j                  |       d{   }|4 d{    |j                  |d       d{    |j                  t        |             d{   }ddd      d{    t        j                         }ddd      d{    t         j                  j!                  || j"                  | j$                  ||      }ddd      d{    t'        z
  d      _        | j)                  |      st*        |S 7 F7 57 7 7 7 7 # 1 d{  7  sw Y   xY w7 # 1 d{  7  sw Y   xY w7 m# 1 d{  7  sw Y   }xY ww)ai  Return the response obtained after sending an asynchronous query via
    DNS-over-QUIC.

    *backend*, a ``dns.asyncbackend.Backend``, or ``None``.  If ``None``,
    the default, then dnspython will use the default backend.

    See :py:func:`dns.query.quic()` for the documentation of the other
    parameters, exceptions, and return type of this method.
    zDNS-over-QUIC is not available.Nr   )r   r   Try   r   )r,   r   r   r   r   r/   r   r   r   r   r   sendr   r   r!   r-   r@   r6   r7   r"   rB   r	   )rK   rL   rM   r   rN   rO   r5   r8   r   r   rP   r   r   rD   r   r   r   r   r   r   r#   r   r   rG   s                           r   r   r     s    2 88566"x'7"AD99;D88((88((#"xx==gF8z 
 
W'
 	! 	! !,!4!44" #1"9UJ)55g>>F D Dkk$---#^^Jz,BCCD D YY[F	! 	! KK!!II-+ " 
!
 
. %%AF==H5
	! ?D-CD D D D	! 	! 	! 	!
 
 
 
s  B)I+G1,I/H/?G4 H/9H<G7=
HG9
HH!G;
"!HG=
HHG?H,H/7H8<H/4I?H- 2I4H/7H9H;H=H?HHH
HHH/H*	H!H*	&H/-I/I5H86I=Itxn_managerr_   serialc                  K   |j                   d   j                  }|t        j                  j                  k(  }| j                         }|j                         }	|j                  t        j                  k(  }
|
rIt        t        j                  j                  |      }|j                  |	dt        |             d{    n`t        t        j                  j                  |      }t!        j"                  dt%        |	            |	z   }|j'                  ||       d{    t        j(                  j+                  | |||
      5 }d}d}d}|st-        |      \  }}||||kD  r|}|
r)t        |      }j/                  d|       d{   \  }}nBt1        d|       d{   }t!        j2                  d|      \  }t1        |||       d{   }t        j4                  j7                  ||j8                  |j:                  d|||
 |      }|j=                  |      }| |j>                  }|s|j8                  r-|+|j@                  st        jB                  jE                  d	      ddd       y7 7 \7 7 7 # 1 sw Y   yxY ww)
z'Given a socket, does the zone transfer.r   Nrx   Fr=   rj   T)r6   r7   xfrorigintsig_ctxmultir5   zmissing TSIG)#questionrdtyper,   	rdatatypeIXFRfrom_wire_originr/   typer   rY   r   rU   DatagramSocketr0   r%   StreamSocketrz   packrl   rn   r   Inboundr   r>   rv   r{   r-   r@   r6   rZ   process_messager   had_tsig	exception	FormError)r   r_   r;   r   rM   r#   r   is_ixfrr   rD   is_udprb   rc   ro   inbounddoner   rG   r`   mexpirationrwirer|   r}   s                          r   _inbound_xfrr   H  sB     ^^A%%F***G))+F==?DVVv(((F((77;oodD(:*>???((55q9T3t9-4vz222	fff	= :(,-g6Q"&;+C(";/#+#4#4UG#DD
+HaEE}}T51+HaEE%%!II!!z!( & 	A **1-DGzzH3 4 ==Q]1::--)).99?: : 	@ 	3 EEE!: :s{   B9J;I5<A JI8&JAJI;J I=!,JI?A$J39J,
J8J;J=J?JJ
Jlifetimeudp_modec
           
        K   |#t         j                  j                  |      \  }}
nt         j                  j                  |      }
t         j                  j                  |       }t        |||      }| |f}|	st         j                  j                         }	t        |      \  }}|j                  d   j                  t         j                  j                  k(  rn|t        j                  k7  r[|	j!                  |t"        j$                  d||t'        |             d{   }|4 d{    	 t)        ||||
||      2 3 d{   }
|	j!                  |t"        j.                  d||t'        |             d{   }|4 d{    t)        ||||
||      2 3 d{   }
7 7 {7 c6 	 ddd      d{  7   y# t         j                  j*                  $ r |t        j,                  k(  r Y nw xY wddd      d{  7   # 1 d{  7  sw Y   xY w7 7 7 6 ddd      d{  7   y# 1 d{  7  sw Y   yxY ww)am  Conduct an inbound transfer and apply it via a transaction from the
    txn_manager.

    *backend*, a ``dns.asyncbackend.Backend``, or ``None``.  If ``None``,
    the default, then dnspython will use the default backend.

    See :py:func:`dns.query.inbound_xfr()` for the documentation of
    the other parameters, exceptions, and return type of this method.
    Nr   )r,   r   
make_queryextract_serial_from_queryrR   rS   r   rU   rV   r   r   r   r   r   r   NEVERrX   r   rY   r%   r   UseTCPONLYr   )rL   r   r;   r   rM   r  rN   rO   r  rP   r   r   r]   r^   r`   r#   r_   s                    r   inbound_xfrr	    s'    * }'',,[92259		 	 	'B2v{3FT]F""668$X.OQ
~~a3==#5#55(gmm:S%%!!1ffhz6J
 
  	 	+   !  !!
F668J3G 	A   #E67J
 	 	! 5
	   	 	 	 77>> w||+ ,	 	 	 	 	 		 
    s&  DIF!
I'F#(I+H-F;=F'F%F'F;0I7H8
IHIH2HHHH2!I#I%F''F;)I4F75I;1G/,H.G//H2I=H >IH
HHIIHH2 I+H.,I2I8H;9I I)N)
NNFFNr   FFFN)NrJ   Nr   FFFFNNF)NrJ   Nr   FFFNNNF)NFNr   F)NrJ   Nr   FFNN)NU  Nr   FFNNNNT)
Nr   Nr   FFTNTN)Nr
  Nr   FFNTNNN)X__doc__r   
contextlibr   r   rz   r!   urllib.parser   typingr   r   r   r   r   dns.asyncbackendr,   dns.exceptiondns.inetdns.messagedns.namedns.quicdns.rdatatypedns.transactiondns.tsigdns.xfrdns._asyncbackendr   	dns.queryr	   r
   r   r   r   r   r   r   r   r   r   sslImportErrordns._no_ssl_no_sslr   rR   low_level_address_tuplerT   r   r%   rU   r   r-   r.   bytesfloatintr3   boolnameNametsigKeyrI   r   Backendra   r   rg   rp   rv   r~   re   
SSLContextr   r   	AF_UNSPECr   r   r   r   r   transactionTransactionManagerSocketr   r  r	   r   r   <module>r/     s4  $         3 3           )     88++   $	



)
)
++


%  	
 3:@ ###"8< #! %(,:0



)
):0t:0 :0 	:0
 :0 #((---.5:0 :0 :0 :0 :0 ;;%:0 	:0@ !#"! %37/3?
{{?? T\? 	?
 $J? ? ? ? ? ? 


)
)D
0? %%,? ? 	[[?J !#"!7;59/3A 
{{A A  T\A  	A 
 $JA  A  A  A  A  --4A  ++d2A  %%,A  A  3;;$%A N  $$



'
'$
++


%$ $ 3:	$2   $"8< #!



'
'  #((---.5	
   3;;%&B !"!15/3:
{{:: T\: 	:
 $J: : : : 


'
'$
.: %%,: 	[[:@ !"!15/3)-"&C
{{CC T\C 	C
 $JC C C C 


'
'$
.C %%,C $&C 4ZC 3JC 	[[CL34!" !"!IM*.$(7;"" + 3 3!m
{{mm T\m 	m
 $Jm m m m EFm m m 3J'm Tzm 34m m  !m" 	[[#mh !"!*./36:=
{{== 
= T\	=
 = $J= = = = 3J'= %%,= = ,,t3= 	[[=F !"!6:/3"&C
{{CC T\C 	C
 $JC C C C ,,t3C 3JC %%,C DjC 4ZC 	[[CL4:334:
4: ;;4: $J	4:
 T\4: 4: 	4:t )- !/3::33: ;;%: 	:
 T\: dl: $J: : : %%,: 
:O  s   6\   \\