+
    niD              
       f  a  R t-0 t R t^ RIt^ RIt^ RIt^ RIt^ RIHtHt ^ RI	t
^ RIt
^ RIt
^ RIt
^ RIt
^ RIt
^ RIt
 ! R R]
P"                  P$                  4      t ! R R4      t ! R R]4      t ! R	 R
]4      t ! R R]
P"                  P$                  4      t ! R R]4      t ! R R]4      t ! R R]4      t ! R R]4      t]P8                  ]]P:                  ]]P<                  ]]P>                  ]]P@                  ]/t!] ^ k R R lt"R R lt#R R lt$R R lt%]P<                  t]PL                  t&]PN                  t']PP                  t(]P8                  t]PR                  t)]P>                  t]PT                  t*]PV                  t+]PX                  t,]P:                  t]P@                  t R# )zEDNS OptionsN)AnyDictc                   d   a  ] tR t^#t o Rt^t^t^t^t^t	^	t
^
t^t^t^t^t^t]R 4       tRtV tR# )
OptionTypezEDNS option type codesc                    R # i   clss   &bC:\Users\petid\OneDrive\Desktop\Maestro\MAESTRO\maestro-backend\venv\Lib\site-packages\dns/edns.py_maximumOptionType._maximum?           r   N)__name__
__module____qualname____firstlineno____doc__NSIDDAUDHUN3UECSEXPIRECOOKIE	KEEPALIVEPADDINGCHAINEDEREPORTCHANNELclassmethodr   __static_attributes____classdictcell____classdict__s   @r   r   r   #   sX       D
C
C
C
CFFIGE
CM r   r   c                      a  ] tR t^Dt o RtV 3R lR ltRV 3R lR lltV 3R lR ltV 3R	 lR
 lt]	V 3R lR l4       t
R tR tR tR tR tR tR tR tRtV tR# )Optionz%Base class for all EDNS option types.c                0   < V ^8  d   QhRS[ S[,          /# )   otype)r   str)formatr%   s   "r   __annotate__Option.__annotate__G   s     , ,j3. ,r   c                :    \         P                  V4      V n        R# )zOInitialize an option.

*otype*, a ``dns.edns.OptionType``, is the option type.
N)r   maker*   )selfr*   s   &&r   __init__Option.__init__G   s    
  __U+
r   Nc                B   < V ^8  d   QhRS[ R,          RS[R,          /# r)   fileNreturnr   bytes)r,   r%   s   "r   r-   r.   N   s#     " "C$J "%$, "r   c                    \         h)zEConvert an option to wire format.

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

NotImplementedErrorr1   r6   s   &&r   to_wireOption.to_wireN   s
     "!r   c                    < V ^8  d   QhRS[ /# r)   r7   r+   )r,   r%   s   "r   r-   r.   V   s     " " "r   c                    \         hNr;   r1   s   &r   to_textOption.to_textV   s    !!r   c                   < V ^8  d   QhRR/# r)   r7   GenericOptionr   )r,   r%   s   "r   r-   r.   Y   s     / /O /r   c                Z    V P                  4       pVf   Q h\        V P                  V4      # )zbCreates a dns.edns.GenericOption equivalent of this rdata.

Returns a ``dns.edns.GenericOption``.
)r>   rJ   r*   )r1   wires   & r   
to_genericOption.to_genericY   s,    
 ||~TZZ..r   c                (   < V ^8  d   QhRS[ RRRR/# )r)   r*   parserdns.wire.Parserr7   r'   )r   )r,   r%   s   "r   r-   r.   c   s#     
" 
"Z 
"9J 
"x 
"r   c                    \         h)zBuild 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``.
r;   r
   r*   rP   s   &&&r   from_wire_parserOption.from_wire_parserb   s
     "!r   c                f    V P                  4       pVP                  4       pW#8X  d   ^ # W#8  d   ^# R# )zCompare an EDNS option with another option of the same type.

Returns < 0 if < *other*, 0 if == *other*, and > 0 if > *other*.
)r>   )r1   otherrL   owires   &&  r   _cmpOption._cmpo   s/    
 ||~=<	r   c                    \        V\        4      '       g   R # V P                  VP                  8w  d   R # V P                  V4      ^ 8H  # )F
isinstancer'   r*   rZ   r1   rX   s   &&r   __eq__Option.__eq__|   s9    %((::$yy1$$r   c                    \        V\        4      '       g   R # V P                  VP                  8w  d   R # V P                  V4      ^ 8g  # )Tr]   r_   s   &&r   __ne__Option.__ne__   s9    %((::$yy1$$r   c                    \        V\        4      '       d   V P                  VP                  8w  d   \        # V P	                  V4      ^ 8  #     r^   r'   r*   NotImplementedrZ   r_   s   &&r   __lt__Option.__lt__   8    %((DJJ%++,E!!yy!##r   c                    \        V\        4      '       d   V P                  VP                  8w  d   \        # V P	                  V4      ^ 8*  # rf   rh   r_   s   &&r   __le__Option.__le__   8    %((DJJ%++,E!!yy1$$r   c                    \        V\        4      '       d   V P                  VP                  8w  d   \        # V P	                  V4      ^ 8  # rf   rh   r_   s   &&r   __ge__Option.__ge__   rp   r   c                    \        V\        4      '       d   V P                  VP                  8w  d   \        # V P	                  V4      ^ 8  # rf   rh   r_   s   &&r   __gt__Option.__gt__   rl   r   c                "    V P                  4       # rD   )rF   rE   s   &r   __str__Option.__str__   s    ||~r   r*   rD   )r   r   r   r   r   r2   r>   rF   rM   r!   rT   rZ   r`   rc   rj   rn   rr   ru   rx   r"   r#   r$   s   @r   r'   r'   D   sq     /, ," "" "/ / 
" 
"%%$
%
%
$
 r   r'   c                      a a ] tR t^t oRtV3R lV 3R lltRV3R lR lltV3R lR ltV3R lR	 lt]	V3R
 lR l4       t
RtVtV ;t# )rJ   zkGeneric Option Class

This class is used for EDNS option types for which we have no better
implementation.
c                F   < V ^8  d   QhRS[ S[,          RS[S[,          /# )r)   r*   data)r   r+   r9   )r,   r%   s   "r   r-   GenericOption.__annotate__   s$     : :j3. :eck :r   c                   < \         SV `  V4       \        P                  P                  P                  VR 4      V n        R# )TN)superr2   dnsrdataRdata	_as_bytesr}   )r1   r*   r}   	__class__s   &&&r   r2   GenericOption.__init__   s,    IIOO--dD9	r   c                B   < V ^8  d   QhRS[ R,          RS[R,          /# r5   r8   )r,   r%   s   "r   r-   r~      s#      C$J %$, r   c                d    V'       d   VP                  V P                  4       R # V P                  # rD   )writer}   r=   s   &&r   r>   GenericOption.to_wire   "    JJtyy!99r   c                    < V ^8  d   QhRS[ /# rA   rB   )r,   r%   s   "r   r-   r~      s     ' ' 'r   c                     R V P                    2# )zGeneric rz   rE   s   &r   rF   GenericOption.to_text   s    $**&&r   c                   < V ^8  d   QhRR/# rI   r   )r,   r%   s   "r   r-   r~      s      O r   c                    V # rD   r   rE   s   &r   rM   GenericOption.to_generic   s    r   c                :   < V ^8  d   QhRS[ S[,          RRRS[/# r)   r*   rP   rQ   r7   r   r+   r'   )r,   r%   s   "r   r-   r~      s*     2 2$2.?2	2r   c                .    V ! WP                  4       4      # rD   get_remainingrS   s   &&&r   rT   GenericOption.from_wire_parser   s     5..011r   )r}   rD   )r   r   r   r   r   r2   r>   rF   rM   r!   rT   r"   r#   __classcell__r   r%   s   @@r   rJ   rJ      sK     : : ' '  2 2 2r   rJ   c                      a a ] tR t^t oRtRV3R lV 3R llltV3R lR lt]V3R lR l4       tRV3R lR	 llt	]
V3R
 lR l4       tRtVtV ;t# )	ECSOptionz!EDNS Client Subnet (ECS, RFC7871)c                :   < V ^8  d   QhRS[ RS[R,          RS[/# )r)   addresssrclenNscopelen)r+   int)r,   r%   s   "r   r-   ECSOption.__annotate__   s&     -6 -6 -6S4Z -6# -6r   c                  < \         S	V `  \        P                  4       \        P
                  P                  V4      pV\        P                  8X  d   ^V n	        Vf   ^8p\        P                  P                  P                  V4      p\        P                  P                  P                  V^ ^4      p\        P                  P                  P                  V^ ^4      pMV\        P                  8X  d   ^V n	        Vf   ^p\        P                  P                  P                  V4      p\        P                  P                  P                  V^ ^ 4      p\        P                  P                  P                  V^ ^ 4      pM\!        R4      hVf   Q hWn        W n        W0n        \        P
                  P)                  WA4      p\+        \,        P.                  ! VR,          4      4      pVRV V n        V^,          pV^ 8w  d`   \2        P4                  ! R\7        V P0                  RR 4      ^^V,
          ,          ,          4      pV P0                  RR V,           V n        R# R# )aZ  *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.
NzBad address family       @BrW   )r   r2   r   r   r   inetaf_for_addresssocketAF_INET6familyr   r   _as_ipv6_address_as_intAF_INET_as_ipv4_address
ValueErrorr   r   r   	inet_ptonr   mathceiladdrdatastructpackord)
r1   r   r   r   afr   nbytesnbitslastr   s
   &&&&     r   r2   ECSOption.__init__   s    	(XX$$W- DK~iioo66w?GYY__,,VQ<Fyy..xC@H6>>!DK~iioo66w?GYY__,,VQ;Fyy..xB?H122!!! 88%%b2TYYv|,- !&)
A:;;sCbc(:$;tE	?R$STD MM#2.5DM r   c                    < V ^8  d   QhRS[ /# rA   rB   )r,   r%   s   "r   r-   r      s     I I Ir   c                T    R V P                    RV P                   RV P                   2# )zECS /z scope/)r   r   r   rE   s   &r   rF   ECSOption.to_text   s'    dll^1T[[MHHr   c                &   < V ^8  d   QhRS[ RS[/# )r)   textr7   )r+   r'   )r,   r%   s   "r   r-   r      s     41 41 41 41r   c                x   RpV P                  4       pRp\        V4      ^8X  d   V^ ,          pMF\        V4      ^8X  d(   V^ ,          V8w  d   \        RV  R24      hV^,          pM\        RV  R24      hVP                  R4      pV^8X  d   VP                  R4      w  rVRpM+V^8X  d   VP                  R4      w  rVpM\        RV  R24      h \	        V4      p \	        T4      p	\        YYT4      #   \         d    \        RRT R2,           4      hi ; i  \         d    \        R	RT R
2,           4      hi ; i)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   Nzcould not parse ECS from ""r   0zinvalid scope z": scope must be an integerzinvalid srclen z": srclen must be an integer)splitlenr   countr   r   )
r   optional_prefixtokensecs_text	n_slashesr   tsrclentscopescoper   s
   &         r   	from_textECSOption.from_text   s\   0  v;!ayH[AayO+ #=dV1!EFFayH9$qABBNN3'	>'~~c2GF!^'/~~c':$Gf9$qABB	YKE	\F
 %00  	Y-!F8;V0WWXX	Y  	!ay0L$MM 	s   C2 D 2"D"D9c                B   < V ^8  d   QhRS[ R,          RS[R,          /# r5   r8   )r,   r%   s   "r   r-   r   -  s#      C$J %$, r   c                    \         P                  ! R V P                  V P                  V P                  4      V P
                  ,           pV'       d   VP                  V4       R# V# )!HBBN)r   r   r   r   r   r   r   r1   r6   values   && r   r>   ECSOption.to_wire-  sG    KKT[[$--H4==X 	 JJuLr   c                :   < V ^8  d   QhRS[ S[,          RRRS[/# r   r   )r,   r%   s   "r   r-   r   8  s*     % %$%.?%	%r   c                   VP                  R 4      w  r4p\        \        P                  ! VR,          4      4      pVP	                  V4      pV^8X  d8   ^V,
          p\
        P                  P                  VRV,          ,           4      p	MIV^8X  d8   ^V,
          p\
        P                  P                  VRV,          ,           4      p	M\        R4      hV ! WV4      # )r   r       zunsupported family)

get_structr   r   r   	get_bytesr   ipv4	inet_ntoaipv6r   )
r
   r*   rP   r   srcr   addrlenprefixpadaddrs
   &&&       r   rT   ECSOption.from_wire_parser7  s     $..v6Udiic	*+!!'*Q;g+C88%%fw}&<=Dq[w,C88%%fw}&<=D1224e$$r   )r   r   r   r   r   )Nrg   rD   )r   r   r   r   r   r2   rF   staticmethodr   r>   r!   rT   r"   r#   r   r   s   @@r   r   r      sW     +-6 -6^I I 41 41l  % % %r   r   c                      a  ] tR tRt o Rt^ t^t^t^t^t	^t
^t^t^t^	t^
t^t^t^t^t^t^t^t^t^t^t^t^t^t^t]R 4       tRt V t!R# )EDECodeiJ  zExtended DNS Error (EDE) codesc                    R # r   r   r	   s   &r   r   EDECode._maximumg  r   r   r   N)"r   r   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$   s   @r   r   r   J  s     (E#$ !"LMLNNLLIGHHJMML r   r   c                      a a ] tR tRt oRt0 RmtRV3R lV 3R llltV3R lR ltRV3R lR llt]	V3R	 lR
 l4       t
RtVtV ;t# )	EDEOptionil  z!Extended DNS Error (EDE, RFC8914)c                D   < V ^8  d   QhRS[ S[,          RS[R,          /# )r)   coder   N)r   r+   )r,   r%   s   "r   r-   EDEOption.__annotate__q  s#      Ws] #* r   c                   < \         SV `  \        P                  4       \        P                  V4      V n        Ve"   \        V\        4      '       g   \        R4      hW n
        R# )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)r   r2   r   r   r   r0   r  r^   r+   r   r   )r1   r  r   r   s   &&&r   r2   EDEOption.__init__q  sI     	(LL&	JtS$9$9:;;	r   c                    < V ^8  d   QhRS[ /# rA   rB   )r,   r%   s   "r   r-   r    s       r   c                D  a  R S P                    2pS P                   \        9   dW   \        P                  S P                   4      pRP                  V 3R lVP	                  R4       4       4      pVRV R2,          pS P
                  e   VRS P
                   2,          pV# )zEDE  c              3   j   <"   T F(  pVSP                   9   d   TMVP                  4       x  K*  	  R # 5irD   )_preserve_casetitle).0wordr1   s   & r   	<genexpr>$EDEOption.to_text.<locals>.<genexpr>  s0      +D  3 33E+s   03_z ()z: )r  r   rF   joinr   r   )r1   outputdescs   f  r   rF   EDEOption.to_text  s    		{#99??499-D88  JJsO D 4&l"F99 499+&&Fr   c                B   < V ^8  d   QhRS[ R,          RS[R,          /# r5   r8   )r,   r%   s   "r   r-   r    s#     	 	C$J 	%$, 	r   c                    \         P                  ! R V P                  4      pV P                  e"   W P                  P	                  R4      ,          pV'       d   VP                  V4       R# V# )z!HNutf8)r   r   r  r   encoder   r   s   && r   r>   EDEOption.to_wire  sN    D$)),99 YY%%f--EJJuLr   c                :   < V ^8  d   QhRS[ S[,          RRRS[/# r   r   )r,   r%   s   "r   r-   r    s*        $ .? 	 r   c                    \         P                  VP                  4       4      pVP                  4       pV'       d&   VR,          ^ 8X  d   VRR pVP	                  R4      pMRpV ! W54      # )   Nr  rW   )r   r0   
get_uint16r   decode)r
   r*   rP   r  r   btexts   &&&   r   rT   EDEOption.from_wire_parser  s`     ||F--/0##%Bx1}CRyKK'EE4r   )r  r   >   DSNSECDNSKEYDNSSECRRSIGsNXDOMAINrD   )r   r   r   r   r   r  r2   rF   r>   r!   rT   r"   r#   r   r   s   @@r   r  r  l  sD     +MN  	 	      r   r  c                      a a ] tR tRt oV3R lV 3R lltRV3R lR lltV3R lR lt]V3R lR	 l4       tR
t	Vt
V ;t# )
NSIDOptioni  c                    < V ^8  d   QhRS[ /# )r)   nsidr9   )r,   r%   s   "r   r-   NSIDOption.__annotate__  s      U r   c                N   < \         SV `  \        P                  4       Wn        R # rD   )r   r2   r   r   r/  )r1   r/  r   s   &&r   r2   NSIDOption.__init__  s    )	r   c                4   < V ^8  d   QhRS[ RS[R,          /# r)   r6   r7   Nr8   )r,   r%   s   "r   r-   r1    s      C 54< r   c                d    V'       d   VP                  V P                  4       R # V P                  # rD   )r   r/  r=   s   &&r   r>   NSIDOption.to_wire  r   r   c                    < V ^8  d   QhRS[ /# rA   rB   )r,   r%   s   "r   r-   r1    s       r   c                :   \         ;QJ d&    R  V P                   4       F  '       d   K   RM	  RM! R  V P                   4       4      '       d   V P                  P                  4       pM.\        P                  ! V P                  4      P                  4       pRV 2# )c              3   D   "   T F  q^ 8  ;'       d    V^~8*  x  K  	  R# 5i)    Nr   )r  cs   & r   r  %NSIDOption.to_text.<locals>.<genexpr>  s!     :	1Dy&&Q$Y&	s     FTzNSID )allr/  r#  binasciihexlify)r1   r   s   & r   rF   NSIDOption.to_text  sf    3:		:333:		:::II$$&E$$TYY/668Eugr   c                d   < V ^8  d   QhRS[ S[,          RS[P                  P                  RS[/# r)   r*   rP   r7   r   r+   r   rL   Parserr'   )r,   r%   s   "r   r-   r1    s2     + +$+.1hhoo+	+r   c                .    V ! VP                  4       4      # rD   r   rS   s   &&&r   rT   NSIDOption.from_wire_parser  s     6'')**r   )r/  rD   r   r   r   r   r2   r>   rF   r!   rT   r"   r#   r   r   s   @@r   r-  r-    s<         + + +r   r-  c                      a a ] tR tRt oV3R lV 3R lltRV3R lR lltV3R lR lt]V3R lR	 l4       tR
t	Vt
V ;t# )CookieOptioni  c                &   < V ^8  d   QhRS[ RS[ /# )r)   clientserverr0  )r,   r%   s   "r   r-   CookieOption.__annotate__  s     V Vu Ve Vr   c                
  < \         SV `  \        P                  4       Wn        W n        \        V4      ^8w  d   \        R4      h\        V4      ^ 8w  d.   \        V4      ^8  g   \        V4      ^ 8  d   \        R4      hR# R# )   zclient cookie must be 8 bytesz5server cookie must be empty or between 8 and 32 bytesN)r   r2   r   r   rL  rM  r   r   )r1   rL  rM  r   s   &&&r   r2   CookieOption.__init__  sn    **+v;!<==v;!VqCK"4DTUU 5Er   c                4   < V ^8  d   QhRS[ RS[R,          /# r5  r8   )r,   r%   s   "r   r-   rN    s     - -C -54< -r   c                    V'       dS   VP                  V P                  4       \        V P                  4      ^ 8  d   VP                  V P                  4       R# V P                  V P                  ,           # )rg   N)r   rL  r   rM  r=   s   &&r   r>   CookieOption.to_wire  sL    JJt{{#4;;!#

4;;';;,,r   c                    < V ^8  d   QhRS[ /# rA   rB   )r,   r%   s   "r   r-   rN    s     * * *r   c                   \         P                  ! V P                  4      P                  4       p\	        V P
                  4      ^ 8  d0   \         P                  ! V P
                  4      P                  4       pMRpRV V 2# )rg    zCOOKIE )r?  r@  rL  r#  r   rM  )r1   rL  rM  s   &  r   rF   CookieOption.to_text  sc    !!$++.557t{{a%%dkk299;FF))r   c                d   < V ^8  d   QhRS[ S[,          RS[P                  P                  RS[/# rC  rD  )r,   r%   s   "r   r-   rN    s7     @ @$@.1hhoo@	@r   c                N    V ! VP                  ^4      VP                  4       4      # )rP  )r   r   rS   s   &&&r   rT   CookieOption.from_wire_parser  s%     6##A&(<(<(>??r   )rL  rM  rD   rH  r   s   @@r   rJ  rJ    sA     V V- -* * @ @ @r   rJ  c                      a a ] tR tRt oV3R lV 3R lltRV3R lR lltV3R lR lt]V3R lR	 l4       tR
t	Vt
V ;t# )ReportChannelOptioni  c                H   < V ^8  d   QhRS[ P                  P                  /# )r)   agent_domain)r   nameName)r,   r%   s   "r   r-    ReportChannelOption.__annotate__  s     ) )SXX]] )r   c                N   < \         SV `  \        P                  4       Wn        R # rD   )r   r2   r   r    r_  )r1   r_  r   s   &&r   r2   ReportChannelOption.__init__  s    112(r   c                4   < V ^8  d   QhRS[ RS[R,          /# r5  r8   )r,   r%   s   "r   r-   rb    s     / /C /54< /r   c                8    V P                   P                  V4      # rD   )r_  r>   r=   s   &&r   r>   ReportChannelOption.to_wire  s      ((..r   c                    < V ^8  d   QhRS[ /# rA   rB   )r,   r%   s   "r   r-   rb    s     > > >r   c                D    R V P                   P                  4       ,           # )zREPORTCHANNEL )r_  rF   rE   s   &r   rF   ReportChannelOption.to_text  s    $"3"3";";"===r   c                d   < V ^8  d   QhRS[ S[,          RS[P                  P                  RS[/# rC  rD  )r,   r%   s   "r   r-   rb    s2     & &$&.1hhoo&	&r   c                .    V ! VP                  4       4      # rD   )get_namerS   s   &&&r   rT   $ReportChannelOption.from_wire_parser  s     6??$%%r   )r_  rD   rH  r   s   @@r   r]  r]    s<     ) )/ /> > & & &r   r]  c                0    V ^8  d   QhR\         R\        /# )r)   r*   r7   )r   r   )r,   s   "r   r-   r-     s     
 
J 
3 
r   c                D    \         P                  V 4      pVf   \        pV# )zxReturn the class for the specified option type.

The GenericOption class is used if a more specific class is not
known.
)_type_to_classgetrJ   )r*   r
   s   & r   get_option_classrs    s#     

U
#C
{Jr   c                J    V ^8  d   QhR\         \        ,          RRR\        /# r   r   )r,   s   "r   r-   r-     s)     / //%6//r   c                d    \         P                  V 4      p \        V 4      pVP                  W4      # )zBuild 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   rs  rT   )r*   rP   r
   s   && r   option_from_wire_parserrv    s-     OOE"E
5
!C..r   c          
      j    V ^8  d   QhR\         \        ,          R\        R\        R\        R\        /# )r)   r*   rL   currentolenr7   )r   r+   r9   r   r'   )r,   s   "r   r-   r-      s9     6 66#(6366>A66r   c                    \         P                  P                  W4      pVP                  V4      ;_uu_ 4        \	        W4      uuRRR4       #   + '       g   i     R# ; i)aV  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)r   rL   rE  restrict_torv  )r*   rL   rx  ry  rP   s   &&&& r   option_from_wirer|     s>      XX__T+F			D	!	!&u5 
"	!	!	!s   AA 	c                4    V ^8  d   QhR\         R\        RR/# )r)   implementationr*   r7   N)r   r   )r,   s   "r   r-   r-   5  s!     + +# +j +T +r   c                    V \         V&   R# )zRegister the implementation of an option type.

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

*otype*, an ``int``, is the option type.
N)rq  )r~  r*   s   &&r   register_typer  5  s     +N5r   c                b    V ^8  d   Qh/ ^ \         9   d   \        \        \        3,          ;R&   # )r)   rq  )__conditional_annotations__r   r   r   )r,   s   "r   r-   r-      s)      N Z_% O r   ).r  r   r?  r   r   r   typingr   r   dns.enumr   dns.inetdns.ipv4dns.ipv6dns.name	dns.rdatadns.wireenumIntEnumr   r'   rJ   r   r   r  r-  rJ  r]  r   r   r   r   r    rq  rs  rv  r|  r  r   r   r   r   r   r   r   r-   )r  s   @r   <module>r     s  $             !! B[ [|2F 2>F% F%Rchh D:  : z+ +6@6 @D&& &( NNINNIOOZ|1) 
/"6*+ nnnnnnnn						  	


nn((r   