Ë
    RPfŸ;  ã            
       ó  — U d 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	 ddl
ZddlZddlZddlZ G d„ dej                  j                   «      Z G d„ d«      Z G d„ d	e«      Z G d
„ de«      Z G d„ dej                  j                   «      Z G d„ de«      Z G d„ de«      Zej0                  eej2                  eej4                  eiZeeef   ed<   dedefd„Zde	eef   dddefd„Zde	eef   de de!de!def
d„Z"dededdfd„Z#ej4                  ZejH                  Z$ejJ                  Z%ejL                  Z&ej0                  ZejN                  Z'ejP                  Z(ejR                  Z)ejT                  Z*ejV                  Z+ej2                  Zy)zEDNS Optionsé    N)ÚAnyÚDictÚOptionalÚUnionc                   óH   — e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZed„ «       Zy)Ú
OptionTypeé   é   é   é   é   é	   é
   é   é   é   é   c                  ó   — y©Niÿÿ  © ©Úclss    úB/var/www/fastapitest/venv/lib/python3.12/site-packages/dns/edns.pyÚ_maximumzOptionType._maximum8   ó   € àó    N)Ú__name__Ú
__module__Ú__qualname__ÚNSIDÚDAUÚDHUÚN3UÚECSÚEXPIREÚCOOKIEÚ	KEEPALIVEÚPADDINGÚCHAINÚEDEÚclassmethodr   r   r   r   r   r       sK   „ à€Dà
€Cà
€Cà
€Cà
€Cà€Fà€Fà€Ià€Gà€Eà
€Càñó ñr   r   c                   óž   — e Zd ZdZdeeef   fd„Zddee	   dee
   fd„Zdefd„Zeded	d
dd fd„«       Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚOptionz%Base class for all EDNS option types.Úotypec                 ó8   — t         j                  |«      | _        y)z_Initialize an option.

        *otype*, a ``dns.edns.OptionType``, is the option type.
        N)r   Úmaker.   )Úselfr.   s     r   Ú__init__zOption.__init__@   s   € ô
  —_‘_ UÓ+ˆ�
r   NÚfileÚreturnc                 ó   — t         ‚)zUConvert an option to wire format.

        Returns a ``bytes`` or ``None``.

        ©ÚNotImplementedError©r1   r3   s     r   Úto_wirezOption.to_wireG   s
   € ô "Ð!r   c                 ó   — t         ‚©Nr6   ©r1   s    r   Úto_textzOption.to_textO   s   € Ü!Ð!r   Úparserúdns.wire.Parserc                 ó   — t         ‚)a  Build an EDNS option object from wire format.

        *otype*, a ``dns.edns.OptionType``, is the option type.

        *parser*, a ``dns.wire.Parser``, the parser, which should be
        restructed to the option length.

        Returns a ``dns.edns.Option``.
        r6   ©r   r.   r>   s      r   Úfrom_wire_parserzOption.from_wire_parserR   s
   € ô "Ð!r   c                 ó\   — | j                  «       }|j                  «       }||k(  ry||kD  ryy)z�Compare an EDNS option with another option of the same type.

        Returns < 0 if < *other*, 0 if == *other*, and > 0 if > *other*.
        r   é   éÿÿÿÿ)r9   )r1   ÚotherÚwireÚowires       r   Ú_cmpzOption._cmp_   s1   € ð
 �|‰|‹~ˆØ—‘“ˆØ�5Š=ØØ�%Š<ØØr   c                 ó€   — t        |t        «      sy| j                  |j                  k7  ry| j                  |«      dk(  S )NFr   ©Ú
isinstancer-   r.   rI   ©r1   rF   s     r   Ú__eq__zOption.__eq__l   s6   € Ü˜%¤Ô(ØØ�:‰:˜Ÿ™Ò$ØØ�y‰y˜Ó 1Ñ$Ð$r   c                 ó€   — t        |t        «      sy| j                  |j                  k7  ry| j                  |«      dk7  S )NTr   rK   rM   s     r   Ú__ne__zOption.__ne__s   s6   € Ü˜%¤Ô(ØØ�:‰:˜Ÿ™Ò$ØØ�y‰y˜Ó 1Ñ$Ð$r   c                 óˆ   — t        |t        «      r| j                  |j                  k7  rt        S | j	                  |«      dk  S ©Nr   ©rL   r-   r.   ÚNotImplementedrI   rM   s     r   Ú__lt__zOption.__lt__z   ó5   € Ü˜%¤Ô(¨D¯J©J¸%¿+¹+Ò,EÜ!Ð!Ø�y‰y˜Ó !Ñ#Ð#r   c                 óˆ   — t        |t        «      r| j                  |j                  k7  rt        S | j	                  |«      dk  S rR   rS   rM   s     r   Ú__le__zOption.__le__   ó5   € Ü˜%¤Ô(¨D¯J©J¸%¿+¹+Ò,EÜ!Ð!Ø�y‰y˜Ó 1Ñ$Ð$r   c                 óˆ   — t        |t        «      r| j                  |j                  k7  rt        S | j	                  |«      dk\  S rR   rS   rM   s     r   Ú__ge__zOption.__ge__„   rY   r   c                 óˆ   — t        |t        «      r| j                  |j                  k7  rt        S | j	                  |«      dkD  S rR   rS   rM   s     r   Ú__gt__zOption.__gt__‰   rV   r   c                 ó"   — | j                  «       S r;   )r=   r<   s    r   Ú__str__zOption.__str__Ž   s   € Ø�|‰|‹~Ðr   r;   )r   r   r   Ú__doc__r   r   Ústrr2   r   r   Úbytesr9   r=   r+   rB   rI   rN   rP   rU   rX   r[   r]   r_   r   r   r   r-   r-   =   s“   „ Ù/ð,˜e J° OÑ4ó ,ñ"˜H S™Mð "°X¸e±_ó "ð"˜ó "ð ð
" Zð 
"Ð9Jð 
"Èxò 
"ó ð
"òò%ò%ò$ò
%ò
%ò
$ó
r   r-   c                   ó’   ‡ — e Zd ZdZdeeef   deeef   fˆ fd„Zdde	e
   de	e   fd„Zdefd„Zedeeef   d	d
defd„«       Zˆ xZS )ÚGenericOptionzwGeneric Option Class

    This class is used for EDNS option types for which we have no better
    implementation.
    r.   Údatac                 ó‚   •— t         ‰| �  |«       t        j                  j                  j                  |d«      | _        y )NT)Úsuperr2   ÚdnsÚrdataÚRdataÚ	_as_bytesre   )r1   r.   re   Ú	__class__s      €r   r2   zGenericOption.__init__™   s,   ø€ Ü‰Ñ˜ÔÜ—I‘I—O‘O×-Ñ-¨d°DÓ9ˆ�	r   r3   r4   c                 óV   — |r|j                  | j                  «       y | j                  S r;   )Úwritere   r8   s     r   r9   zGenericOption.to_wire�   ó"   € ÙØ�J‰J�t—y‘yÔ!Øà—9‘9Ðr   c                 ó    — d| j                   z  S )Nz
Generic %d)r.   r<   s    r   r=   zGenericOption.to_text¤   s   € Ø˜dŸj™jÑ(Ð(r   r>   r?   c                 ó0   —  | ||j                  «       «      S r;   ©Úget_remainingrA   s      r   rB   zGenericOption.from_wire_parser§   s   € ñ �5˜&×.Ñ.Ó0Ó1Ð1r   r;   )r   r   r   r`   r   r   ra   rb   r2   r   r   r9   r=   r+   r-   rB   Ú__classcell__©rl   s   @r   rd   rd   ’   s‰   ø„ ñð:˜e J° OÑ4ð :¸EÀ%ÈÀ*Ñ<Mõ :ñ˜H S™Mð °X¸e±_ó ð)˜ó )ð ð2Ø˜* c˜/Ñ*ð2Ø4Eð2à	ò2ó ô2r   rd   c                   ó¤   ‡ — e Zd ZdZddedee   defˆ fd„Zdefd„Ze	dede
fd	„«       Zdd
ee   dee   fd„Zedeeef   ddde
fd„«       Zˆ xZS )Ú	ECSOptionz!EDNS Client Subnet (ECS, RFC7871)ÚaddressÚsrclenÚscopelenc                 ó‚  •— t         ‰	| �  t        j                  «       t        j
                  j                  |«      }|t        j                  k(  r‹d| _	        |€d}t        j                  j                  j                  |«      }t        j                  j                  j                  |dd«      }t        j                  j                  j                  |dd«      }n©|t        j                  k(  r‹d| _	        |€d}t        j                  j                  j                  |«      }t        j                  j                  j                  |dd«      }t        j                  j                  j                  |dd«      }nt!        d	«      ‚|€J ‚|| _        || _        || _        t        j
                  j)                  ||«      }t+        t-        j.                  |d
z  «      «      }|d| | _        |dz  }|dk7  rMt3        j4                  dt7        | j0                  dd «      dd|z
  z  z  «      }| j0                  dd |z   | _        yy)aŠ  *address*, a ``str``, is the client address information.

        *srclen*, an ``int``, the source prefix length, which is the
        leftmost number of bits of the address to be used for the
        lookup.  The default is 24 for IPv4 and 56 for IPv6.

        *scopelen*, an ``int``, the scope prefix length.  This value
        must be 0 in queries, and should be set in responses.
        é   Né8   r   é€   rD   é   é    zBad address familyç       @r   ÚBrE   éÿ   )rg   r2   r   r$   rh   ÚinetÚaf_for_addressÚsocketÚAF_INET6Úfamilyri   rj   Ú_as_ipv6_addressÚ_as_intÚAF_INETÚ_as_ipv4_addressÚ
ValueErrorrx   ry   rz   Ú	inet_ptonÚintÚmathÚceilÚaddrdataÚstructÚpackÚord)
r1   rx   ry   rz   Úafr’   ÚnbytesÚnbitsÚlastrl   s
            €r   r2   zECSOption.__init__±   sÈ  ø€ ô 	‰ÑœŸ™Ô(Ü�X‰X×$Ñ$ WÓ-ˆà”—‘Ò ØˆDŒKØˆ~Ø�Ü—i‘i—o‘o×6Ñ6°wÓ?ˆGÜ—Y‘Y—_‘_×,Ñ,¨V°Q¸Ó<ˆFÜ—y‘y—‘×.Ñ.¨x¸¸CÓ@‰HØ”6—>‘>Ò!ØˆDŒKØˆ~Ø�Ü—i‘i—o‘o×6Ñ6°wÓ?ˆGÜ—Y‘Y—_‘_×,Ñ,¨V°Q¸Ó;ˆFÜ—y‘y—‘×.Ñ.¨x¸¸BÓ?‰HäÐ1Ó2Ð2àÐ!Ð!Ð!ØˆŒØˆŒØ ˆŒä—8‘8×%Ñ% b¨'Ó2ˆÜ”T—Y‘Y˜v¨™|Ó,Ó-ˆð !  &Ð)ˆŒØ˜‘
ˆØ�AŠ:Ü—;‘;˜s¤C¨¯©°b°cÐ(:Ó$;¸tÈÈEÉ	Ñ?RÑ$SÓTˆDØ ŸM™M¨#¨2Ð.°Ñ5ˆD�Mð r   r4   c                 ód   — dj                  | j                  | j                  | j                  «      S )NzECS {}/{} scope/{})Úformatrx   ry   rz   r<   s    r   r=   zECSOption.to_textà   s#   € Ø#×*Ñ*¨4¯<©<¸¿¹ÀdÇmÁmÓTÐTr   Útextc                 ó¨  — d}| j                  «       }d}t        |«      dk(  r|d   }nPt        |«      dk(  r(|d   |k7  rt        dj                  | «      «      ‚|d   }nt        dj                  | «      «      ‚|j	                  d«      }|dk(  r|j                  d«      \  }}d}n5|dk(  r|j                  d«      \  }}}nt        dj                  | «      «      ‚	 t        |«      }	 t        |«      }	t        ||	|«      S # t        $ r t        d	d
j                  |«      z   «      ‚w xY w# t        $ r t        ddj                  |«      z   «      ‚w xY w)a€  Convert a string into a `dns.edns.ECSOption`

        *text*, a `str`, the text form of the option.

        Returns a `dns.edns.ECSOption`.

        Examples:

        >>> import dns.edns
        >>>
        >>> # basic example
        >>> dns.edns.ECSOption.from_text('1.2.3.4/24')
        >>>
        >>> # also understands scope
        >>> dns.edns.ECSOption.from_text('1.2.3.4/24/32')
        >>>
        >>> # IPv6
        >>> dns.edns.ECSOption.from_text('2001:4b98::1/64/64')
        >>>
        >>> # it understands results from `dns.edns.ECSOption.to_text()`
        >>> dns.edns.ECSOption.from_text('ECS 1.2.3.4/24/32')
        r$   NrD   r   r|   zcould not parse ECS from "{}"ú/Ú0zinvalid scope z"{}": scope must be an integerzinvalid srclen z"{}": srclen must be an integer)ÚsplitÚlenr�   r›   Úcountr�   rw   )
rœ   Úoptional_prefixÚtokensÚecs_textÚ	n_slashesrx   ÚtsrclenÚtscopeÚscopery   s
             r   Ú	from_textzECSOption.from_textã   sm  € ð0  ˆØ—‘“ˆØˆÜˆv‹;˜!ÒØ˜a‘y‰HÜ�‹[˜AÒØ�a‰y˜OÒ+Ü Ð!@×!GÑ!GÈÓ!MÓNÐNØ˜a‘y‰HäÐ<×CÑCÀDÓIÓJÐJØ—N‘N 3Ó'ˆ	Ø˜Š>Ø'Ÿ~™~¨cÓ2ÑˆG�WØ‰FØ˜!Š^Ø'/§~¡~°cÓ':Ñ$ˆG�W™fäÐ<×CÑCÀDÓIÓJÐJð	Ü˜“KˆEð
	Ü˜“\ˆFô
 ˜ &¨%Ó0Ð0øô ò 	ÜØ Ð#C×#JÑ#JÈ6Ó#RÑRóð ð	ûô ò 	ÜØ!Ð$E×$LÑ$LÈWÓ$UÑUóð ð	ús   ÃD  Ã(D* Ä 'D'Ä*'Er3   c                 ó´   — t        j                  d| j                  | j                  | j                  «      | j
                  z   }|r|j                  |«       y |S )Nú!HBB)r“   r”   rˆ   ry   rz   r’   rn   ©r1   r3   Úvalues      r   r9   zECSOption.to_wire  sG   € ä�K‰K˜ §¡¨T¯[©[¸$¿-¹-ÓHÈ4Ï=É=ÑXð 	ñ Ø�J‰J�uÔØàˆLr   r.   r>   r?   c                 óz  — |j                  d«      \  }}}t        t        j                  |dz  «      «      }|j	                  |«      }|dk(  r+d|z
  }t
        j                  j                  |d|z  z   «      }	n;|dk(  r+d|z
  }t
        j                  j                  |d|z  z   «      }	nt        d«      ‚ | |	||«      S )	Nr¬   r�   rD   é   ó    r|   é   zunsupported family)
Ú
get_structr�   r�   r‘   Ú	get_bytesrh   Úipv4Ú	inet_ntoaÚipv6r�   )
r   r.   r>   rˆ   Úsrcr©   ÚaddrlenÚprefixÚpadÚaddrs
             r   rB   zECSOption.from_wire_parser&  s·   € ð $×.Ñ.¨vÓ6Ñˆ��UÜ”d—i‘i  c¡	Ó*Ó+ˆØ×!Ñ! 'Ó*ˆØ�QŠ;Ø�g‘+ˆCÜ—8‘8×%Ñ% f¨w¸©}Ñ&<Ó=‰DØ�qŠ[Ø�w‘,ˆCÜ—8‘8×%Ñ% f¨w¸©}Ñ&<Ó=‰DäÐ1Ó2Ð2á�4˜˜eÓ$Ð$r   rR   r;   )r   r   r   r`   ra   r   r�   r2   r=   Ústaticmethodr-   rª   r   rb   r9   r+   r   r   rB   rt   ru   s   @r   rw   rw   ®   s¦   ø„ Ù+ñ-6 ð -6¨X°c©]ð -6ÈSõ -6ð^U˜ó Uð ð61˜ð 61 ò 61ó ð61ñp˜H S™Mð °X¸e±_ó ð ð%Ø˜* c˜/Ñ*ð%Ø4Eð%à	ò%ó ô%r   rw   c                   ó€   — e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZed„ «       Zy)ÚEDECoder   rD   r|   r	   r°   r
   r   r   r   r   r   r   r   r   é   r   r²   é   é   é   é   é   é   é   r   c                  ó   — yr   r   r   s    r   r   zEDECode._maximumT  r   r   N)r   r   r   ÚOTHERÚUNSUPPORTED_DNSKEY_ALGORITHMÚUNSUPPORTED_DS_DIGEST_TYPEÚSTALE_ANSWERÚFORGED_ANSWERÚDNSSEC_INDETERMINATEÚDNSSEC_BOGUSÚSIGNATURE_EXPIREDÚSIGNATURE_NOT_YET_VALIDÚDNSKEY_MISSINGÚRRSIGS_MISSINGÚNO_ZONE_KEY_BIT_SETÚNSEC_MISSINGÚCACHED_ERRORÚ	NOT_READYÚBLOCKEDÚCENSOREDÚFILTEREDÚ
PROHIBITEDÚSTALE_NXDOMAIN_ANSWERÚNOT_AUTHORITATIVEÚNOT_SUPPORTEDÚNO_REACHABLE_AUTHORITYÚNETWORK_ERRORÚINVALID_DATAr+   r   r   r   r   r¿   r¿   9  sš   „ Ø€EØ#$Ð Ø!"ÐØ€LØ€MØÐØ€LØÐØÐØ€NØ€NØÐØ€LØ€LØ€IØ€GØ€HØ€HØ€JØÐØÐØ€MØÐØ€MØ€Làñó ñr   r¿   c                   ó˜   ‡ — e Zd ZdZh d£Zddeeef   dee   fˆ fd„Z	defd„Z
ddee   dee   fd	„Zed
eeef   dddefd„«       Zˆ xZS )Ú	EDEOptionz!Extended DNS Error (EDE, RFC8914)>   ÚDSÚNSECÚDNSKEYÚDNSSECÚRRSIGsÚNXDOMAINÚcoderœ   c                 ó¼   •— t         ‰| �  t        j                  «       t        j                  |«      | _        |�t        |t        «      st        d«      ‚|| _
        y)zÃ*code*, a ``dns.edns.EDECode`` or ``str``, the info code of the
        extended error.

        *text*, a ``str`` or ``None``, specifying additional information about
        the error.
        Nztext must be string or None)rg   r2   r   r*   r¿   r0   rê   rL   ra   r�   rœ   )r1   rê   rœ   rl   s      €r   r2   zEDEOption.__init__^  sH   ø€ ô 	‰ÑœŸ™Ô(ä—L‘L Ó&ˆŒ	ØÐ¤J¨t´SÔ$9ÜÐ:Ó;Ð;Øˆ�	r   r4   c                 ó(  ‡ — d‰ j                   › �}‰ j                   t        v rQt        j                  ‰ j                   «      }dj                  ˆ fd„|j	                  d«      D «       «      }|d|› d�z  }‰ j
                  �|d‰ j
                  › �z  }|S )NzEDE ú c              3   ó^   •K  — | ]$  }|‰j                   v r|n|j                  «       –— Œ& y ­wr;   )Ú_preserve_caseÚtitle)Ú.0Úwordr1   s     €r   ú	<genexpr>z$EDEOption.to_text.<locals>.<genexpr>q  s1   øè ø€ ò àð  × 3Ñ 3Ñ3‘¸¿¹»ÓEñùs   ƒ*-Ú_z (ú)z: )rê   r¿   r=   Újoinr    rœ   )r1   ÚoutputÚdescs   `  r   r=   zEDEOption.to_textm  sŒ   ø€ Ø˜Ÿ	™	�{Ð#ˆØ�9‰9œÑÜ—?‘? 4§9¡9Ó-ˆDØ—8‘8ó à ŸJ™J s›Oôó ˆDð ˜˜4˜& �lÑ"ˆFØ�9‰9Ð Ø˜˜4Ÿ9™9˜+Ð&Ñ&ˆFØˆr   r3   c                 óÂ   — t        j                  d| j                  «      }| j                  �|| j                  j	                  d«      z  }|r|j                  |«       y |S )Nz!HÚutf8)r“   r”   rê   rœ   Úencodern   r­   s      r   r9   zEDEOption.to_wirez  sP   € Ü—‘˜D $§)¡)Ó,ˆØ�9‰9Ð Ø�T—Y‘Y×%Ñ% fÓ-Ñ-ˆEáØ�J‰J�uÔØàˆLr   r.   r>   r?   c                 óÀ   — t         j                  |j                  «       «      }|j                  «       }|r|d   dk(  r|d d }|j	                  d«      }nd } | ||«      S )NrE   r   rú   )r¿   r0   Ú
get_uint16rs   Údecode)r   r.   r>   rê   rœ   Úbtexts         r   rB   zEDEOption.from_wire_parser…  sb   € ô �|‰|˜F×-Ñ-Ó/Ó0ˆØ×#Ñ#Ó%ˆáØ�B‰x˜1Š}Ø˜C˜R�y�Ø—K‘K Ó'‰EàˆEá�4˜ÓÐr   r;   )r   r   r   r`   rï   r   r¿   ra   r   r2   r=   r   rb   r9   r+   r   r-   rB   rt   ru   s   @r   rã   rã   Y  s‡   ø„ Ù+âM€Nñ˜U 7¨C <Ñ0ð ¸À¹õ ð˜ó ñ	˜H S™Mð 	°X¸e±_ó 	ð ð Ø˜* c˜/Ñ*ð Ø4Eð à	ò ó ô r   rã   c                   ó˜   ‡ — e Zd Zdefˆ fd„Zd
dedee   fd„Zdefd„Z	e
deeef   dej                  j                  defd	„«       Zˆ xZS )Ú
NSIDOptionÚnsidc                 óN   •— t         ‰| �  t        j                  «       || _        y r;   )rg   r2   r   r    r  )r1   r  rl   s     €r   r2   zNSIDOption.__init__—  s   ø€ Ü‰ÑœŸ™Ô)Øˆ�	r   r3   r4   c                 óV   — |r|j                  | j                  «       y | j                  S r;   )rn   r  r8   s     r   r9   zNSIDOption.to_wire›  ro   r   c                 óÔ   — t        d„ | j                  D «       «      r| j                  j                  «       }n-t        j                  | j                  «      j                  «       }d|› �S )Nc              3   ó4   K  — | ]  }|d k\  xr |dk  –— Œ y­w)r€   é~   Nr   )rñ   Úcs     r   ró   z%NSIDOption.to_text.<locals>.<genexpr>£  s    è ø€ Ò:¨1ˆq�D‰yÒ&˜Q $™YÓ&Ñ:ùs   ‚zNSID )Úallr  rþ   ÚbinasciiÚhexlify)r1   r®   s     r   r=   zNSIDOption.to_text¢  sO   € ÜÑ:°·	±	Ô:Ô:à—I‘I×$Ñ$Ó&‰Eä×$Ñ$ T§Y¡YÓ/×6Ñ6Ó8ˆEØ�u�gˆÐr   r.   r>   c                 ó.   —  | |j                  «       «      S r;   rr   rA   s      r   rB   zNSIDOption.from_wire_parserª  s   € ñ �6×'Ñ'Ó)Ó*Ð*r   r;   )r   r   r   rb   r2   r   r   r9   ra   r=   r+   r   r   rh   rG   ÚParserr-   rB   rt   ru   s   @r   r  r  –  so   ø„ ð˜Uõ ñ˜Cð ¨8°E©?ó ð˜ó ð ð+Ø˜* c˜/Ñ*ð+Ø47·H±H·O±Oð+à	ò+ó ô+r   r  Ú_type_to_classr.   r4   c                 ó@   — t         j                  | «      }|€t        }|S )z„Return the class for the specified option type.

    The GenericOption class is used if a more specific class is not
    known.
    )r  Úgetrd   )r.   r   s     r   Úget_option_classr  ¸  s#   € ô ×
Ñ
˜UÓ
#€CØ
€{ÜˆØ€Jr   r>   r?   c                 óf   — t         j                  | «      } t        | «      }|j                  | |«      S )a  Build an EDNS option object from wire format.

    *otype*, an ``int``, is the option type.

    *parser*, a ``dns.wire.Parser``, the parser, which should be
    restricted to the option length.

    Returns an instance of a subclass of ``dns.edns.Option``.
    )r   r0   r  rB   )r.   r>   r   s      r   Úoption_from_wire_parserr  Å  s/   € ô �O‰O˜EÓ"€EÜ
˜5Ó
!€CØ×Ñ  vÓ.Ð.r   rG   ÚcurrentÚolenc                 ó¨   — t         j                  j                  ||«      }|j                  |«      5  t	        | |«      cddd«       S # 1 sw Y   yxY w)ar  Build an EDNS option object from wire format.

    *otype*, an ``int``, is the option type.

    *wire*, a ``bytes``, is the wire-format message.

    *current*, an ``int``, is the offset in *wire* of the beginning
    of the rdata.

    *olen*, an ``int``, is the length of the wire-format option data

    Returns an instance of a subclass of ``dns.edns.Option``.
    N)rh   rG   r  Úrestrict_tor  )r.   rG   r  r  r>   s        r   Úoption_from_wirer  Ö  sE   € ô  �X‰X�_‰_˜T 7Ó+€FØ	×	Ñ	˜DÓ	!ñ 6Ü& u¨fÓ5÷6÷ 6ò 6ús   ²AÁAÚimplementationc                 ó   — | t         |<   y)z«Register the implementation of an option type.

    *implementation*, a ``class``, is a subclass of ``dns.edns.Option``.

    *otype*, an ``int``, is the option type.
    N)r  )r  r.   s     r   Úregister_typer  ë  s   € ð +„N�5Òr   ),r`   r
  r�   r†   r“   Útypingr   r   r   r   Údns.enumrh   Údns.inetÚ	dns.rdataÚdns.wireÚenumÚIntEnumr   r-   rd   rw   r¿   rã   r  r$   r*   r    r  Ú__annotations__r  ra   r  rb   r�   r  r  r!   r"   r#   r%   r&   r'   r(   r)   r   r   r   ú<module>r$     sÂ  ðò$ ã Û Û Û ß -Ó -ã Û Û Û ô�—‘×!Ñ!ô ÷:Rñ Rôj2�Fô 2ô8H%�ô H%ôVˆc�h‰h×Ñô ô@: �ô : ôz+�ô +ð8 ‡N�N�IØ‡N�N�IØ‡O�O�Zð)€��Z �_Ñ%ó ð
˜Jð 
¨3ó 
ð/Ø�˜S�Ñ!ð/Ø+<ð/àó/ð"6Ø�˜S�Ñ!ð6Ø).ð6Ø9<ð6ØDGð6àó6ð*+ #ð +¨jð +¸Tó +ð ‡�€Ø‡n�n€Ø‡n�n€Ø‡n�n€Ø‡n�n€Ø	×	Ñ	€Ø	×	Ñ	€Ø× Ñ €	Ø
×
Ñ
€Ø×Ñ€Ø‡n�n�r   