%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /lib/python3/dist-packages/dns/__pycache__/
Upload File :
Create Path :
Current File : //lib/python3/dist-packages/dns/__pycache__/query.cpython-312.pyc

�

5��e0��!���dZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlmZm
Z
mZmZmZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZd�Zd�Z ejBjEd�Z#e#rUddl$Z%ddl&Z&e%jNZ(e%jRjTjVZ,Gd�de(�Z-Gd	�d
e&j\�Z/n
Gd�d
�Z/e#Z0	ddl1Z1ejZ3Gd�dejhjj�Z6Gd�dejhjn�Z8Gd�dejhjj�Z9Gd�dejhjj�Z:ejvjxZ<d�Z=d�Z>d�Z?e@ed�r
ej�aBnej�aBd�ZDd�ZEd�ZFd�ZG	ded�ZHdfd �ZIdd!ddd"d"dd#ddddej�f
d$ej�j�d%eMd&eeNd'eOd(eeMd)eOd*ePd+ePd,eed-eMd.ePd/eeMd0eePeMfd1ed2d3eeOd4ej�j�f d5�ZQd6�ZRd7�ZS	dgd8ed9eej�j�eTfd:ed;eeNd4eeOeNff
d<�ZU										dhd8ed:eed;eeNd=ePd*ePd>ee
ej�j�ej�j�fd?eeTd+ePd@ePdAePdBeej�j�d4efdC�ZZ										did$ej�j�d%eMd&eeNd'eOd(eeMd)eOd=ePd*ePd+ePd@ePd8eedAePd4ej�j�fdE�Z[										djd$ej�j�d%eMd&eeNd'eOd(eeMd)eOd=ePd*ePd+ePdFeedGeedAePd4eej�j�ePffdH�Z\dI�Z]dJ�Z^	dgd8ed9eej�j�eTfd;eeNd4eeOeNffdK�Z_					dkd8ed;eeNd*ePd>ee
ej�j�ej�j�fd?eeTd+ePd4eej�j�eNffdL�Z`dM�Za							dld$ej�j�d%eMd&eeNd'eOd(eeMd)eOd*ePd+ePd8eed4ej�j�fdN�ZbdO�ZcdPeeMd0eePeMfd4e1j�fdQ�Ze										dmd$ej�j�d%eMd&eeNd'eOd(eeMd)eOd*ePd+ePd8ee1j�dRee1j�dPeeMd0eePeMfd4ej�j�fdS�Zg									dnd$ej�j�d%eMd&eeNd'eOd(eeMd)eOd*ePd+ePdTeej�j�d0eePeMfdPeeMd4ej�j�fdU�Zhej�j�ej�j�ddDdddddddd"ej�j�f
d%eMdVeej�j�eMfdWeej�j�eMfdXeej�j�eMfd&eeNd'eOd>ee
ej�j�ej�j�fdYeeej�j�eMfdZePd[eeNd(eeMd)eOd\eOd]ePd^eej�j�eMfd4ef d_�Z;Gd`�daej��ZrddDdddderj�fd%eMdbej�j�dBeej�j�d'eOd&eeNd[eeNd(eeMd)eOdcerd4dfdd�Zvy#e2$rGd�d
�Z1Y��kwxYw)ozTalk to a DNS server.�N)�Any�Dict�Optional�Tuple�Unionc�x�|�y|tj�z
}|dkrtjj�|S)N�)�time�dns�	exception�Timeout)�
expiration�timeouts  �+/usr/lib/python3/dist-packages/dns/query.py�
_remainingr/s7������4�9�9�;�&�G��#�~��m�m�#�#�#��N�c�J�|�yttj�|z|�S�N)�minr
)rrs  r�_expiration_for_this_attemptr8s#������t�y�y�{�W�$�j�1�1r�dohc�2��eZdZ�fd�Z	dd�Z	dd�Z�xZS)�_NetworkBackendc�Z��t�|��||_||_||_||_yr)�super�__init__�_local_port�	_resolver�_bootstrap_address�_family)�self�resolver�
local_port�bootstrap_address�family�	__class__s     �rrz_NetworkBackend.__init__Gs,����G���)�D��%�D�N�&7�D�#�!�D�Lrc�l�g}t|�\}}tjj|�r|j	|�n�|j
�|j	|j
�nft
|�}|j}	|rtjj|�}	|jj||	|��}
|
j�}|D]�}tjj|�}|�|jdk7r-tjj||jf|�}
nd}
t|tj |
�}t#d|�}	t%|tjj||f|�|�t'|�cSt*j,�#t($rY��wxYw)N)r%�lifetimerg@)�_compute_timesr�inet�
is_address�appendrrr �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_optionsr/�_rr%�answers�address�af�source�sock�attempt_expirations                r�connect_tcpz_NetworkBackend.connect_tcpNs����I�*�7�3�M�A�z��x�x�"�"�4�(�� � ��&��(�(�4�� � ��!8�!8�9�$�Z�0������ � �X�X�4�4�]�C�F��.�.�5�5���'�6���$�-�-�/�	�$�
���X�X�,�,�W�5�� �,��0@�0@�A�0E� �X�X�=�=�&��(8�(8�9�2��F�"�F�#�B��(:�(:�F�C��%A�#�z�%R�"�������8�8�'�4��"�M�*��
+�4�0�0�!
�&�'�'�'��!����s�7F'�'	F3�2F3c��t�r��NotImplementedError)r!�pathrr<s    r�connect_unix_socketz#_NetworkBackend.connect_unix_socketus
��&�%rr)�__name__�
__module__�__qualname__rrDrI�
__classcell__�r&s@rrrFs���	"�FJ�%	(�P15�	&rrc�>��eZdZdddejd��fd�
Z�xZS)�_HTTPTransportrN)r#r$r"r%c���|�ddl}|jj�}t�|�|i|��t||||�|j_y�Nr)�dns.resolverr"�Resolverrrr�_pool�_network_backend)	r!r#r$r"r%�args�kwargsrr&s	        �rrz_HTTPTransport.__init__{sM�����#��<�<�0�0�2���G��d�-�f�-�*9��*�&7��+�D�J�J�'r)rJrKrLr2�	AF_UNSPECrrMrNs@rrPrPzs!����"���#�#�
	�	rrPc��eZdZd�Zy)rPc��t�rrF)r!r9r:rr;s     rrDz_HTTPTransport.connect_tcp�s��%�%rN)rJrKrLrD�rrrPrP�s��	&rc�t�eZdZdZGd�de�ZGd�de�ZGd�d�ZGd�d	�Ze	d
��Z
y)�sslrc��eZdZy)�ssl.WantReadExceptionN�rJrKrLr\rr�WantReadExceptionr`����rrbc��eZdZy)�ssl.WantWriteExceptionNrar\rr�WantWriteExceptionre�rcrrfc��eZdZy)�ssl.SSLContextNrar\rr�
SSLContextrh�rcrric��eZdZy)�
ssl.SSLSocketNrar\rr�	SSLSocketrk�rcrrlc��td��)Nzno ssl support)r6)�clsrWrXs   r�create_default_contextzssl.create_default_context�s���,�-�-rN)rJrKrL�	CERT_NONEr6rbrfrirl�classmethodror\rrr^r^�sG���	�	�	�	�	��	�	�	�	�	�
�	.�
�	.rr^c��eZdZdZy)�UnexpectedSourcez=A DNS query response came from an unexpected address or port.N�rJrKrL�__doc__r\rrrsrs�s��Grrsc��eZdZdZy)�BadResponsez<A DNS query response does not respond to the question asked.Nrtr\rrrwrw�s��Frrwc��eZdZdZy)�NoDOHzMDNS over HTTPS (DOH) was requested but the httpx module is not
    available.Nrtr\rrryry����rryc��eZdZdZy)�NoDOQzNDNS over QUIC (DOQ) was requested but the aioquic module is not
    available.Nrtr\rrr|r|�rzrr|c�D�tj�}|�|dfS|||zfSr)r
)r�nows  rr)r)�s+��
�)�)�+�C����T�{���S�7�]�#�#rc���|r.t|tj�r|j�dkDryt	�}d}|r|t
jz}|r|t
jz}|r|j||�|�d}n6|tj�z
}|dkrtjj�|j|�stjj�y)NrTr	)�
isinstancer^rl�pending�_selector_class�	selectors�
EVENT_READ�EVENT_WRITE�registerr
rrr
�select)�fd�readable�writabler=r�sel�eventsrs        r�	_wait_forr��s����J�r�3�=�=�1�b�j�j�l�Q�6F��
�
�C�
�F���)�&�&�&����)�'�'�'��
����R�� ������t�y�y�{�*���c�>��-�-�'�'�'��:�:�g���m�m�#�#�#�rc��|ayr)r�)�selector_classs r�_set_selector_classr��s	��
%�Or�PollSelectorc�"�t|ddd|�y)NTF�r���srs  r�_wait_for_readabler�s��
�a��u�d�J�/rc�"�t|ddd|�y)NFTr�r�s  r�_wait_for_writabler�s��
�a���d�J�/rc��	tjj||d�}tjj||d�}||k(xr|dd|ddk(S#tjj$rYywxYw)NrF�)rr*�	inet_ptonr�SyntaxError)r@�a1�a2�n1�n2s     r�_addresses_equalr�
s{���
�X�X�
�
��B�q�E�
*��
�X�X�
�
��B�q�E�
*����8�(��1�2��"�Q�R�&�(�(���=�=�$�$����s�AA�A:�9A:c��|syt|||�s-tjj|d�r|dd|ddk(ry|ryt	d|�d|����)NTrr�Fzgot a response from z instead of )r�rr*�is_multicastrs)r@�from_address�destination�ignore_unexpecteds    r�_matches_destinationr�sh������L�+�6������k�!�n�-�,�q�r�2B�k�RS�RT�o�2U��	��
�
�|�n�L�[�M�J��rTc���d}d}	tjj|�}|}|r3tjj|�}|r||k7r
t	d��|}|r"|s 	tjj|�}|r"tjj
||f|�}|r"tjj
||f|�}|||fS#t$r|r�Y��wxYw#t$rt	d��wxYw)Nz5different address families for source and destinationz3source_port specified but address family is unknown)rr*r-r6�
ValueError�
any_for_afr0)�wherer:rA�source_port�where_must_be_addressr@r��safs        r�_destination_and_sourcer�&s
��

�B��K��
�X�X�
$�
$�U�
+����
��h�h�%�%�f�-��
��b�y� �K����B��6�	T��X�X�(�(��,�F���h�h�6�6��T�7J�B�O��
����1�1�6�;�2G��L����V�$�$��?�� ��!���,�	T��R�S�S�	T�s�!C
�!C�
C�C�C4c���t||�}	|jd�|�|j|�|r|j|d|��S|S#t$r|j��wxYw)NF)�do_handshake_on_connect�server_hostname)�socket_factory�setblocking�bind�wrap_socketr6�close)r@�typerA�ssl_contextr�r�s      rr1r1Rsv���r�4� �A��	�
�
�e����
�F�F�6�N���*�*��(-� /�+��
��H����	���	�
��s�9A
�A
�
A%i�Fz
/dns-query�qr�rr:rAr��one_rr_per_rrset�ignore_trailing�sessionrH�postr$�verifyr"zdns.resolver.Resolverr%�returnc
��tst�|r%t|tj�std��|j
�}t||||d�\}}}d}ddi}|�mtjj|�rN|tjk(rdj|||	�}n)|tjk(rdj|||	�}n|}|�d}d}n
|d}|d	}t|d
d
||||
|��}|rt!j"|�}ntjd
d
||��}|5}|
r<|j%dt't)|��d
��|j+|||��}nKt-j.|�j1d�}|j3�}|j5||d|i��}ddd�j6dks|j6dkDr0tdj||j6|j8���tj:j=|j8|j>|j@||��}|jBjE�|_#|jI|�stJ�|S#1swY��xYw)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.

    Returns a ``dns.message.Message``.
    z)session parameter must be an httpx.ClientFN�acceptzapplication/dns-messagezhttps://{}:{}{}zhttps://[{}]:{}{}rr�T)r;�http1�http2r�r#r$r"r%)r�r�r��	transport)zcontent-typezcontent-length)�headers�contentr�=r)r�r�params��i+z2{} responded with status code {}
Response body: {}��keyring�request_macr�r�)&�have_dohryr��httpx�Clientr��to_wirer�rr*r+r2�AF_INET�format�AF_INET6rP�
contextlib�nullcontext�update�str�lenr��base64�urlsafe_b64encode�rstrip�decode�get�status_coder��message�	from_wirer�r��elapsed�
total_secondsr
�is_responserw)r�r�rr:rAr�r�r�r�rHr�r$r�r"r%�wirer@r=�
the_sourcer�r��urlr;r#�cm�response�twire�rs                            r�httpsr�fsz��H����z�'�5�<�<�8��D�E�E��9�9�;�D�1�
�t�V�[�%���R��J��I��2�3�G�	�~�#�(�(�-�-�e�4�
�����#�*�*�5�$��=�C�
�6�?�?�
"�%�,�,�U�D�$�?�C������
��
�"�1�
�
���]�
��#�����+���	�I��0:�0F�0F�w�0O��
�\�\��D��9�
U��	��w���N�N�$=�&)�#�d�)�n��
��|�|�C��$�PW�|�X�H��+�+�D�1�8�8��>�D��K�K�M�E��{�{��W�g�u�e�n�#��H��(���c�!�X�%9�%9�C�%?��
"�"(�&���0D�0D�h�FV�FV�"W�
�	
�	���������	�	��M�M�)�'�	�	�A��
�
�
+�
+�
-�A�F��=�=������H�G��s
�%B
I?�?Jc�`�		|j|�S#t$rt||�YnwxYw�.)z�Reads a datagram from the socket.
    A Timeout exception will be raised if the operation is not completed
    by the expiration time.
    )�recvfrom�BlockingIOErrorr�)rB�max_sizers   r�	_udp_recvr��s9��
�	1��=�=��*�*���	1��t�Z�0�	1��s��,�,c��		|r|j||�S|j|�S#t$rt||�YnwxYw�B)z�Sends 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�)rB�datar�rs    r�	_udp_sendr�sL��
�	1���{�{�4��5�5��y�y���&���	1��t�Z�0�	1��
s�(�(�A�ArB�whatr�rc��t|tjj�r|j	�}tj
�}t
||||�}||fS)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�rr��Messager�r
r�)rBr�r�r�	sent_time�ns      r�send_udpr�sH��,�$����+�+�,��|�|�~���	�	��I��$��k�:�6�A�
�y�>�rr�r�r��raise_on_truncation�
ignore_errors�queryc���d}	t|d|�\}}t|j|||�s�*tj�}
	tj
j
||||||��}|	r|
�|
j|�s�z|r||
fS||
|fS#tj
j$r.}|	r&|
�$|
j|j��sYd}~�ʂd}~wt$r|	rY�ۂwxYw)aRead 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�)r�r�r�r�r�N)
r�r�r%r
rr�r��	Truncatedr�r6)rBr�rr�r�r�r�r�r�r�r�r�r��
received_timer��es                r�receive_udpr2s���|�D�
�(��u�j�A���|�#��K�K��{�4E�
�
��	�	��
�	����%�%���'�!1� /�$7�
&��A�6�U�.�u�7H�7H��7K����}�%�%��}�l�3�3��1�{�{�$�$�
	���%��)�)�!�)�)�+�6�����	����		�s$�%B�C �%#C�
C�C �C �5c��|j�}t||||�\}
}}t|�\}}|
rtj|
�}nt|
tj|�}|5}t||||�t||||||j|j||	||�\}}||z
|_|s|j|�st�|cddd�S#1swYnxYw	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�r1r2�
SOCK_DGRAMr�rr��macr
r�rw)r�r�rr:rAr�r�r�r�r�rBr�r�r@r��
begin_timerr�r�r�rs                     r�udpr�s���p
�9�9�;�D� 7�
�t�V�[�!��R��f� .�g�6��Z���0:�0F�0F�t�0L��
�"�f�/�/��
8��	��q���D�+�z�2�(�
�����
�I�I�
�E�E����
�
���M���+�������q�!1����)����,	��
s
�&AC�C�udp_sock�tcp_sockc��	t|||||||||d|	|�}|dfS#tjj$rt	|||||||||
�	}|dfcYSwxYw)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)rrr�r�tcp)
r�r�rr:rAr�r�r�r�rr
r�r�s
             r�udp_with_fallbackr�s���r ��
������������

���%� � ���;�;� � � ��
���������

���$��� �s��4A�Ac��d}|dkDr6	|j|�}|dk(rt�|t|�z}||z
}|dkDr�6|S#ttj
f$rt
||�Y�/tj$rt||�Y�OwxYw)z�Read 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.
    rr)	�recv�EOFErrorr�r�r^�SSLWantReadErrorr��SSLWantWriteErrorr�)rB�countrr�r�s     r�	_net_readrOs���	�A�
�!�)�		1��	�	�%� �A��C�x����S��V�O�E�
��F�A�
�!�)�
�H��	 ��!5�!5�6�	1��t�Z�0��$�$�	1��t�Z�0�	1�s�/A�%B�'B�Bc��d}t|�}||kr	||j||d�z
}||kr�yy#ttjf$rt||�Y�/tj$rt||�Y�OwxYw)z�Write the specified data to the socket.
    A Timeout exception will be raised if the operation is not completed
    by the expiration time.
    rN)r�r�r�r^rr�rr�)rBr�r�current�ls     r�
_net_writerds~��
�G��D�	�A�
�A�+�	1��t�y�y��g�h��0�0�G��A�+�� ��!6�!6�7�	1��t�Z�0��#�#�	1��t�Z�0�	1�s�3�%A;�A;�:A;c��t|tjj�r|j	d��}nt|�j
dd�|z}tj�}t|||�t|�|fS)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_length��big)	r�rr�r�r�r��to_bytesr
r)rBr�r�tcpmsgr�s     r�send_tcpr"tsk��$�$����+�+�,����T��2��
�T��#�#�A�u�-��4���	�	��I��t�V�Z�(���K��#�#rc���t|d|�}tjd|�\}t|||�}tj�}	tj
j
|||||��}
|
|	fS)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�)r�struct�unpackr
rr�r�)rBrr�r�r�r��ldatarr�rr�s           r�receive_tcpr(�ss��B
�d�A�z�*�E��=�=��u�%�D�Q��T�1�j�)�D��I�I�K�M���������)�'�	�	�A�
�}��rc�P�|j|�}|dk(ry|tjtjtjfvr:t||�|j
tjtj�}|dk7rt|tj|���yrR)
�
connect_ex�errno�EINPROGRESS�EWOULDBLOCK�EALREADYr��
getsockoptr2�
SOL_SOCKET�SO_ERROR�OSError�os�strerror)r�r?r�errs    rr4r4�s��
�,�,�w�
�C�
�a�x��
�u� � �%�"3�"3�U�^�^�D�D��1�j�)��l�l�6�,�,�f�o�o�>��
�a�x��c�2�;�;�s�+�,�,�rc		���|j�}	t|�\}
}|rtj|�}n-t	||||�\}
}}t|
tj|�}|5}|s
t||�t||	|�t||||j|j|�\}}||
z
|_
|j|�st�|cddd�S#1swYnxYw	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�r1r2r3r4r"r(r�r	r
r�rw)r�r�rr:rAr�r�r�rBr�r
rr�r@r�r�r�rs                  rrr�s���V
�9�9�;�D�-�g�6��Z���0:�0F�0F�t�0L��$;��4���%
�!��[�&��"�f�0�0�&�
9��	�
�q���Q��Z�0���D�*�%�(�
�z�+�Q�Y�Y�����
���M���+����}�}�Q�����
�
�
��	��
s
�&A&C�Cc��		|j�y#tj$rt||�Yn$tj$rt||�YnwxYw�Xr)�do_handshaker^rr�rr�r�s  r�_tls_handshaker9sS��
�	.�
�N�N�����#�#�	.��q�*�-��$�$�	.��q�*�-�	.��
s��A�A�Ar�c��d}d}t|t�rOtjj	|�r|}n-tjj|�r|}nt
d��tj||��}tjj|_|�d|_|jdg�|durtj|_|S)Nzinvalid verify string)�cafile�capathF�dot)r�r�r3rH�isfile�isdirr�r^ro�
TLSVersion�TLSv1_2�minimum_version�check_hostname�set_alpn_protocolsrp�verify_mode)r�r�r;r<r�s     r�_make_dot_ssl_contextrFs���!�F� �F��&�#��
�7�7�>�>�&�!��F�
�W�W�]�]�6�
"��F��4�5�5��,�,�F�6�J�K�"%�.�.�"8�"8�K����%*��"��"�"�E�7�+�
���"%�-�-����rr�c��|rt|||||||||�	S|j�}t|�\}
}t||||�\}}}|	�|st	|
|�}	t|tj||	|
��5}t|||�t||�t|||�t||||j|j|�\}}||
z
|_|j|�st �|cddd�S#1swYnxYw	J�)akReturn 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�)rr�r)r�rFr1r2r3r4r9r"r(r�r	r
r�rw)r�r�rr:rAr�r�r�rBr�r�r�r�r
rr@r�r�r�rs                    r�tlsrH1s,��z��
���������

�
	
�
�9�9�;�D�-�g�6��Z�� 7�
�t�V�[�!��R��f���4�+�O�V�D��	�
������'�
��
���K��,��q�*�%���D�*�%�(�
�z�+�Q�Y�Y�����
���M���+����}�}�Q�����!����$	��
s
�4A0C.�.C7�
connectionc��tjjstd��d|_|j�}|rt
jd�}|}
n#tjj|	|
��}|}|5|sj||||�}
t|�\}}
j|�5}|j|d�|jt|��}ddd�tj�}ddd�tj j#||j$|j&||��}t)z
d�|_|j+|�st,�|S#1swY��xYw#1swY�zxYw)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.

    *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.

    Returns a ``dns.message.Message``.
    zDNS-over-QUIC is not available.rN)rE�server_nameTr�r	)r�quic�	have_quicr|�idr�r�r��SyncQuicManager�connectr)�make_streamr��receiverr
r�r�r�r��maxr�rw)r�r�rr:rAr�r�r�rIr�r�r��manager�the_connection�the_manager�startr�stream�finishr�s                    rrLrL�s_��d�8�8����5�6�6��A�D��9�9�;�D��5?�5K�5K�D�5Q��#���(�(�*�*��O�+�
����	���(�0�0���f�k�R�N�,�W�5���
�
�
'�
'��
0�	:�F��K�K��d�#��>�>�*�Z�"8�9�D�	:�������	�������	�	��M�M�)�'�	�	�A���%���
%�A�F��=�=������H�	:�	:��	��s$�<6E4�2-E(�E4�(E1	�-E4�4E=�zone�rdtype�rdclass�keyname�
relativizer(�serial�use_udp�keyalgorithmc#��
K�t|t�rtjj	|�}tj
jj|�}tjj|||�}|tj
jk(rAtjj	|dddd|z�}|jj|�|�|j|||��|j�}t!|||
|�\}}}
|
r(|tj
jk7rt#d��|
rt$j&nt$j(}t+|||
�5}t-|	�\}}t/|||�t1|�}|
rt3||d|�n&t5j6d|�|z}t9|||�d	}d
}d	}d}|r|}tjj:}nd}|}d} |�sgt-|�\}}!|!�|�|!|kDr|}!|
rt=|d|!�\}}n2t?|d|!�}"t5j@d|"�\}t?|||!�}|tj
jk(}#tjjC||jD|jFd
|| d
|#�
�}$|$jI�}%|%tjHjJk7rtM|%��|$jN} d}&|��|$jPr|$jPdj|k7rtjRjUd��|$jPd}|jVtj
jXk7rtjRjUd��d}&|j[�}|tj
jk(r4tj\j_|dj\�|krd
}nd
}|$jP|&dD�]}|rtjRjUd��|jVtj
jXk(r�|j|k(r�|r4|dj\|k7rtjRjUd��d	}n |tj
jk(r|}||k(s��|tj
j`k(s!|tj
jk(s��|s��d
}��|s��tj
j`}d	}��|r7|jDr+|$jbstjRjUd��|$��|s��gddd�y#1swYyxYw�w)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.
    r�IN�SOAz. . %u 0 0 0 0N)�	algorithmzcannot do a UDP AXFRr$FTrr�r�r��xfr�origin�tsig_ctx�multir�z No answer or RRset not for qnamezfirst RRset is not an SOAr�zanswers after final SOAzIXFR base serial mismatch�missing TSIG)2r�r�r�name�	from_text�	rdatatype�	RdataType�maker��
make_query�IXFR�rrset�	authorityr,�use_tsigr�r�r�r2rr3r1r)r4r�r�r%�packr�emptyr�rr&r�r�r	�rcode�NOERROR�
TransferErrorri�answerr�	FormErrorr[rd�copyr_�Serial�AXFR�had_tsig)'r�rZr[r\rr:r�r]r^r(rAr�r_r`rar�rsr�r@r��	sock_typer�r=rrr!�done�delete_mode�
expecting_SOA�	soa_rrsetrh�onameri�mexpirationr'�is_ixfrr�rx�answer_indexs'                                       rrgrg�s�����J�$����x�x�!�!�$�'��
�]�]�
$�
$�
)�
)�&�
1�F������t�V�W�5�A�
����#�#�#��	�	�#�#�D�!�T�5�:J�V�:S�T��	�����5�!���	�
�
�7�G�|�
�<��9�9�;�D� 7�
�t�V�[�!��R��f��6�S�]�]�/�/�/��/�0�0�%,��!�!�&�2D�2D�I�	�b�)�V�	,�b��(��2���J���K��,���I����a��t�Z�0��[�[��q�)�D�0�F��q�&�*�-������
��	���F��H�H�N�N�E��F��E����-�g�6��Q���"��&�;��+C�(���%�a���<�	��q�!�!�Q��4���}�}�T�5�1��� ��A�{�3����
�
� 2� 2�2�G����%�%���	�	��E�E���!��!(�&�	�A��G�G�I�E���	�	�)�)�)�#�E�*�*��z�z�H��L�� ��x�x�1�8�8�A�;�#3�#3�u�#<��-�-�1�1�2T�U�U��������<�<�3�=�=�#4�#4�4��-�-�1�1�2M�N�N� ��!�J�J�L�	��S�]�]�/�/�/��z�z�(�(��1��)<�)<�=��G� $��(,�
�
���,�-�0�
*����-�-�1�1�2K�L�L��<�<�3�=�=�#4�#4�4����u�9L�$� ��8�?�?�f�4�"%�-�-�"9�"9�:U�"V�V�(-�
��3�=�=�#5�#5�5�*5�o���	�)��#�-�-�"4�"4�4�"�c�m�m�&8�&8�8�[�#��"�!�]�]�/�/�F�$)�M�7
*�8��	�	�!�*�*��m�m�-�-�n�=�=��G�]�)b�b�b�s8�E)U5�+MU)�<:U)�7U)�:U)�AU)� 	U5�)U2�.U5c��eZdZdZdZdZdZy)�UDPModeaHow 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"
    rr�rN)rJrKrLru�NEVER�	TRY_FIRST�ONLYr\rrr�r��s���
�E��I��Drr��txn_manager�udp_modec	���|�#tjj|�\}}	ntjj|�}	|jdj
}
|
tjjk(}|j�}|j�}
t||||�\}}}t|�\}}d}|�r�d}|r&|tjk7rtj}d}ntj }d}t#|||�5}t%|||�|rt'||
d|�n/t)j*dt-|
��|
z}t/|||�tjj1||
|	|�5}d}d}|s�t|�\}}|�|�||kDr|}|rt3|d|�\}}n2t5|d|�}t)j6d|�\}t5|||�}tj8j;||j<|j>d||||��}	|jA|�}|jF}|s��|s7|j<r+jHstjJjMd	��ddd�ddd�|r���yy#tjjB$r0|sJ�|tjDk(r�d}d}tj}Y��XwxYw#1swY�gxYw#1swY�kxYw)
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.
    NrTFr$rrrfrk)'rrgrq�extract_serial_from_query�questionr[rnrr�from_wire_originr�r�r)r�r�r2rr3r1r4r�r%rvr�r�Inboundr�rr&r�r�r�r	�process_message�UseTCPr�rir�rr|)r�r�r�r:rr(rAr�r�r_r[r�rhr�r@r�r=r�retryr��is_udpr�r!�inboundr�rir��rwirer'rr�s                               r�inbound_xfrr��s���^
�}��'�'�,�,�[�9�������2�2�5�9��
�^�^�A�
�
%�
%�F���
�
�*�*�*�G�
�
)�
)�
+�F��=�=�?�D� 7�
�t�V�[�!��R��f�%�X�.�O�Q�
��E�
����x�7�=�=�0��)�)�I��F��*�*�I��F�
�"�i��
0�,	B�A��Q��Z�0���!�T�4��4����T�3�t�9�5��<���1�f�j�1�������f�f�f�E�%
B�������'5�g�'>�$�Q��"�*�"�.�;��3K�&0���%.�q�%��%E�
��� )�!�Q�� <��%�}�}�T�5�9��� )�!�Q�� <�����-�-�� %�
�
�$)�I�I� �%�!)�#)�z�)0�.�	�A�	!�&�6�6�q�9�� !�z�z�H�A�B����q�z�z��-�-�1�1�.�A�A�K%
B�,	B���T�7�7�>�>�!�%�
�v�#�w�|�|�3�!�#�� $��#*�=�=�� �!��7%
B�%
B��,	B�,	B�sQ�	A0K&�9B!K�J
�,K�;9K�4K&�
A	K�K�K�K�K#	�K&�&K/)T)NNr)
NNFFNrFFFN)
NrNrFFFFNF)
NrNrFFFNNF)NFNrF)NrNrFFN)
N�UNrFFNNNT)	Nr�NrFFNTN)wrur�r��enumr+r3�os.pathr�r2r%r
�typingrrrrr�
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.xfrrr�	_features�have�_have_httpx�httpcore._backends.syncr7r��NetworkBackend�_CoreNetworkBackend�	_backends�sync�
SyncStreamr5r�
HTTPTransportrPr�r^�ImportErrorr�r�DNSExceptionrsr|rwryr|rgrzr)r�r��hasattrr�r��SelectSelectorr�r�r�r�r�r1rYr�r�r��float�int�boolr�r�r��bytesr�rl�Name�tsig�Keyrrrrrr"r(r4rr9rirFrlrHrL�SyncQuicConnectionrnr�
rdataclassrc�default_algorithmro�
RdataClass�IntEnumr�r��transaction�TransactionManagerr�r\rr�<module>r�s���$�
����	���
�
��4�4���������������2��m�m� � ��'���"��"�1�1���(�(�-�-�8�8�O�2&�-�2&�h��,�,��,&�&�
��.��2����H�s�}�}�1�1�H�G�#�-�-�)�)�G��C�M�M�&�&��
�C�M�M�&�&�����%�%�
�$�$�8%��9�n�%� �,�,�O��.�.�O�0�0�	)�
�"=A�)%�X�. $�� ��"�!�!���'+�#�26�"�,�,�Q
�
�{�{���Q
��Q
��e�_�Q
��	Q
�

�S�M�Q
��
Q
��Q
��Q
��c�]�Q
��Q
��Q
� ��}�Q
�
�$��)��Q
��.�/�Q
�
�S�M�Q
� 	�[�[���!Q
�h	1�1�&#'�	�

��
����#�#�U�*�
+�������	�
�3��:���>"&�"&�#�"�;?�#&�!� %��+/�g4�

�g4��#��g4����g4��	g4�
�g4��d�3�8�8�=�=�#�(�(�,�,�6�7�
8�
g4��%��g4��g4��g4��g4��C�K�K�'�'�(�g4�	�g4�Z $�� ��#�"�!� %���X�
�{�{���X��X��e�_�X��	X�

�S�M�X��
X��X��X��X��X��3�-�X��X�	�[�[���X�| $�� ��#�"�!�"�"��U �
�{�{���U ��U ��e�_�U ��	U �

�S�M�U ��
U ��U ��U ��U ��s�m�U ��s�m�U ��U ��3�;�;����$�%�U �p
�*
1�&#'�$�

�$�
����#�#�U�*�
+�$����$��3��:��	$�@#'�"�;?�#&�!�
,�

�,����,��,��d�3�8�8�=�=�#�(�(�,�,�6�7�
8�	,�
�%��,��
,��3�;�;����%�&�,�^-� $�� ��"�!��A�
�{�{���A��A��e�_�A��	A�

�S�M�A��
A��A��A��3�-�A�	�[�[���A�H.���c�]��,1�$��)�,<���^�^��2 $�� ��"�!�$(�,0�%)�#�h�
�{�{���h��h��e�_�h��	h�

�S�M�h��
h��h��h��3�=�=�
!�h��#�.�.�)�h��c�]�h�
�$��)��h�	�[�[���h�\ $�� ��"�!�8<�#�%)�T
�
�{�{���T
��T
��e�_�T
��	T
�

�S�M�T
��
T
��T
��T
�����4�4�5�T
�
�$��)��T
��c�]�T
�	�[�[���T
�t36�-�-�2D�2D�58�^�^�5F�5F�#��;?�37�� $� ����.1�h�h�.H�.H�w��w�
����
�
�s�"�
#�w�
�#�-�-�)�)�3�.�/�w��3�>�>�,�,�c�1�
2�	w�
�e�_�w��
w��d�3�8�8�=�=�#�(�(�,�,�6�7�
8�w��e�C�H�H�M�M�3�.�/�
0�w��w��u�o�w�
�S�M�w��w�
�w��w�����
�
�s�*�+�w� 	�!w�t

�d�l�l�

� ,0��#� $� ���
�
�pB��pB����3�3�pB��C�K�K�'�'�(�pB��	pB�
�e�_�pB��u�o�
pB�
�S�M�pB��pB��pB�
�pB��C)�.�.�.�.�s�2]�]"�!]"

Zerion Mini Shell 1.0