ó
    &ÝNjF©  ã                   óD
  • % S SK JrJr  SSKr\R                  \R                  " \R                  5      :w  d  \c  \	" S5      e\R                  " 5       (       d  \	" S5      eS SKJr  S SKJrJrJr  S SKJr  SSKrSSKrSSKrSS	KJrJr  SS
KJr  SSKJrJrJrJrJrJ r   SSK!J"r"  \#\$\%4   r&\#\$\%\%\%4   r'\RP                  r(\RR                  r)\RT                  r*\RV                  r+\RX                  r,\RZ                  r-\R\                  r.\R^                  r/\R`                  r0\Rb                  r1\Rd                  r2\Rf                  r3\Rh                  r4\Rj                  r5\Rl                  r6\Rn                  r7\Rp                  r8\Rr                  r9\Rt                  r:\Rv                  r;\Rx                  r<\Rz                  r=\R|                  r>\R~                  r?\R€                  r@\R‚                  rA\R„                  rC\Rˆ                  rE\RŒ                  rG\R�                  rI\R”                  rK\R˜                  rM\Rœ                  rO\R                   rQ\R¤                  rS\R¨                  rU\R¬                  rW\R°                  rY\R´                  r[\R¸                  r]\R¼                  r_\RÀ                  ra\RÄ                  rc\RÈ                  re\RÌ                  rg\RÐ                  ri\" \RÔ                  " \RÖ                  " \RØ                  5      5      5      rmSrn " S S\o5      rp0 rq\\S4   \rS'   \Ræ                  " 5       S 5       rt\Ræ                  " 5       S 5       ru\Ræ                  " 5       S 5       rv\Ræ                  " 5       S 5       rw\Ræ                  " 5       S 5       rxS ryS rzS r{ " S S5      r|\|" 5       r} " S S5      r~\ " S S5      5       r\ " S S 5      5       r€\ " S! S"5      5       r�\ " S# S$5      5       r‚\ " S% S&5      5       rƒ\ " S' S(5      5       r„\ " S) S*5      5       r…\ " S+ S,5      5       r†\ " S- S.5      5       r‡\ " S/ S05      5       rˆ\ " S1 S25      5       r‰\ " S3 S45      5       rŠ\ " S5 S65      5       r‹\ " S7 S85      5       rŒ\ " S9 S:5      5       r�\ " S; S<5      5       rŽ\ " S= S>5      5       r�\ " S? S@5      5       r�\ " SA SB5      5       r‘\ " SC SD5      5       r’\ " SE SF5      5       r“SG\�4SH jr”SG\�4SI jr•SG\‘4SJ jr–SG\’4SK jr—SG\“4SL jr˜SMr™g)Né   )ÚffiÚlibé    NzCould not initialize c-aresz&c-ares is not built with thread safety)Úerrno)Úascii_bytesÚ	maybe_strÚ
parse_name)Ú__version__)ÚCallableÚIterable)Ú	dataclass)ÚAnyr   ÚLiteralÚOptionalÚDictÚUnion)ÚSimpleQueueé   c                   ó   • \ rS rSrSrg)Ú	AresErroréV   © N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__static_attributes__r   ó    ÚM/home/mande/repo/quber/.venv/lib/python3.13/site-packages/pycares/__init__.pyr   r   V   s   † Úr   r   ÚChannelÚ_handle_to_channelc                 óB   • [         R                  " U 5      nU" XU5        g ©N)Ú_ffiÚfrom_handle)ÚdataÚ	socket_fdÚreadableÚwritableÚsock_state_cbs        r   Ú_sock_state_cbr+   _   s   € ô ×$Ò$ TÓ*€MÙ�) xÕ0r   c                 óÊ   • U [         ;  a  g [        R                  " U 5      nU[        R                  :w  a  S nO[        U5      nS nU" XQ5        [         R                  U S 5        g r#   )r!   r$   r%   Ú_libÚARES_SUCCESSÚparse_hostentÚpop)ÚargÚstatusÚtimeoutsÚhostentÚcallbackÚresults         r   Ú_host_cbr7   f   sZ   € ð Ô$Ó$Øä×Ò Ó$€Hà”×"Ñ"Ó"Ø‰ä˜wÓ'ˆØˆáˆVÔÜ×Ñ˜3 Õ%r   c                 óÊ   • U [         ;  a  g [        R                  " U 5      nU[        R                  :w  a  S nO[        X45      nS nU" Xa5        [         R                  U S 5        g r#   )r!   r$   r%   r-   r.   Úparse_nameinfor0   )r1   r2   r3   ÚnodeÚservicer5   r6   s          r   Ú_nameinfo_cbr<   w   sZ   € ð Ô$Ó$Øä×Ò Ó$€Hà”×"Ñ"Ó"Ø‰ä Ó.ˆØˆáˆVÔÜ×Ñ˜3 Õ%r   c                 óÚ   • U [         ;  a  g[        R                  " U 5      nU[        R                  :w  a  SnO[        U5      u  pVUb  UnOSnU" XQ5        [         R                  U S5        g)z'Callback for new DNS record API queriesN)r!   r$   r%   r-   r.   Úparse_dnsrecr0   )r1   r2   r3   Údnsrecr5   r6   Úparse_statuss          r   Ú_query_dnsrec_cbrA   ˆ   sj   € ð Ô$Ó$Øä×Ò Ó$€Hà”×"Ñ"Ó"Ø‰ä+¨FÓ3ÑˆØÑ#Ø!‰Fð ˆFáˆVÔÜ×Ñ˜3 Õ%r   c                 óÊ   • U [         ;  a  g [        R                  " U 5      nU[        R                  :w  a  S nO[        U5      nS nU" XQ5        [         R                  U S 5        g r#   )r!   r$   r%   r-   r.   Úparse_addrinfor0   )r1   r2   r3   Úresr5   r6   s         r   Ú_addrinfo_cbrE   Ÿ   sZ   € ð Ô$Ó$Øä×Ò Ó$€Hà”×"Ñ"Ó"Ø‰ä Ó$ˆØˆáˆVÔÜ×Ñ˜3 Õ%r   c                 ó–  • [         R                  " X5      nUS:X  a  / $ / n[        U5       H™  n[        R                  " S5      n[        R                  " S5      n[         R
                  " XXEU5      nUS   [        R                  :w  a'  [        [        R                  " US   US   5      5      nOSnUR                  Xx45        M›     U$ )zIExtract OPT params as list of (key, value) tuples for HTTPS/SVCB records.r   zunsigned char **úsize_t *r   )
r-   Úares_dns_rr_get_opt_cntÚranger$   ÚnewÚares_dns_rr_get_optÚNULLÚbytesÚbufferÚappend)	ÚrrÚkeyÚopt_cntÚparamsÚiÚval_ptrÚval_lenÚopt_keyÚvals	            r   Ú_extract_opt_paramsrY   ±   s©   € ä×*Ò*¨2Ó3€GØ�!ƒ|Øˆ	à€FÜ�7Ž^ˆÜ—(’(Ð-Ó.ˆÜ—(’(˜:Ó&ˆÜ×*Ò*¨2°AÀÓHˆØ�1‰:œŸ™Ó"ÜœŸš G¨A¡J°¸±
Ó;Ó<‰CàˆCØ�‰�w�nÖ%ñ ð €Mr   c                 óÀ  • U[         R                  :X  a¤  [         R                  " U [         R                  5      n[        R
                  " S[         R                  5      n[         R                  " [        R                  X#[         R                  5        [        [        [        R                  " U5      5      S9$ U[         R                  :X  a¤  [         R                  " U [         R                  5      n[        R
                  " S[         R                  5      n[         R                  " [        R                   X#[         R                  5        [#        [        [        R                  " U5      5      S9$ U[         R$                  :X  aq  [         R&                  " U [         R(                  5      n[         R*                  " U [         R,                  5      n[/        U[        [        R                  " U5      5      S9$ U[         R0                  :X  aÎ  [         R2                  " U [         R4                  5      n/ n[7        U5       H€  n[        R
                  " S5      n	[         R8                  " U [         R4                  X‰5      n
U
[        R:                  :w  d  MU  UR=                  [        R>                  " X©S   5      SS 5        M‚     [A        SRC                  U5      S9$ U[         RD                  :X  aÓ  [         RF                  " U [         RH                  5      n[         R*                  " U [         RJ                  5      n[        R
                  " S5      n	[         RL                  " U [         RN                  U	5      n[        [        R>                  " XÙS   5      SS 5      n[Q        U[        [        R                  " U5      5      US	9$ U[         RR                  :X  aK  [         R*                  " U [         RT                  5      n[W        [        [        R                  " U5      5      S
9$ U[         RX                  :X  Ga`  [         R&                  " U [         RZ                  5      n[         R&                  " U [         R\                  5      n[         R*                  " U [         R^                  5      n[         R*                  " U [         R`                  5      n[         R*                  " U [         Rb                  5      n[         R*                  " U [         Rd                  5      n[g        UU[        [        R                  " U5      5      [        [        R                  " U5      5      [        [        R                  " U5      5      [        [        R                  " U5      5      S9$ U[         Rh                  :X  aK  [         R*                  " U [         Rj                  5      n[m        [        [        R                  " U5      5      S9$ U[         Rn                  :X  aK  [         R*                  " U [         Rp                  5      n[s        [        [        R                  " U5      5      S9$ U[         Rt                  :X  GaL  [         R*                  " U [         Rv                  5      n[         R*                  " U [         Rx                  5      n[         Rz                  " U [         R|                  5      n[         Rz                  " U [         R~                  5      n[         Rz                  " U [         R€                  5      n[         Rz                  " U [         R‚                  5      n[         Rz                  " U [         R„                  5      n[‡        [        [        R                  " U5      5      [        [        R                  " U5      5      UUUUUS9$ U[         Rˆ                  :X  a½  [         R&                  " U [         RŠ                  5      n[         R&                  " U [         RŒ                  5      n[         R&                  " U [         RŽ                  5      n [         R*                  " U [         R�                  5      n![“        UUU [        [        R                  " U!5      5      S9$ U[         R”                  :X  að  [         RF                  " U [         R–                  5      n"[         RF                  " U [         R˜                  5      n#[         RF                  " U [         Rš                  5      n$[        R
                  " S5      n%[         RL                  " U [         Rœ                  U%5      n&U&[        R:                  :w  a#  [Ÿ        [        R>                  " U&U%S   5      5      OSn'[¡        U"U#U$U'S9$ U[         R¢                  :X  aŒ  [         R&                  " U [         R¤                  5      n[         R*                  " U [         R¦                  5      n![©        U [         Rª                  5      n([­        U[        [        R                  " U!5      5      U(S9$ U[         R®                  :X  a—  [         R&                  " U [         R°                  5      n[         R&                  " U [         R²                  5      n[         R*                  " U [         R´                  5      n![·        UU[        [        R                  " U!5      5      S9$ [¹        SU 35      e)zVExtract type-specific data from a DNS resource record and return appropriate dataclassúchar[])Úaddr)ÚpriorityÚexchangerG   r   Nr   )r&   )ÚcriticalÚtagÚvalue)Úcname)ÚorderÚ
preferenceÚflagsr;   ÚregexpÚreplacement)Únsdname)Údname)ÚmnameÚrnameÚserialÚrefreshÚretryÚexpireÚminimum)r]   ÚweightÚportÚtarget)Ú
cert_usageÚselectorÚmatching_typeÚcert_association_data)r]   rs   rS   )r]   rq   rs   zUnsupported DNS record type: )]r-   ÚARES_REC_TYPE_AÚares_dns_rr_get_addrÚARES_RR_A_ADDRr$   rJ   ÚINET6_ADDRSTRLENÚares_inet_ntopÚsocketÚAF_INETÚARecordDatar   ÚstringÚARES_REC_TYPE_AAAAÚares_dns_rr_get_addr6ÚARES_RR_AAAA_ADDRÚAF_INET6ÚAAAARecordDataÚARES_REC_TYPE_MXÚares_dns_rr_get_u16ÚARES_RR_MX_PREFERENCEÚares_dns_rr_get_strÚARES_RR_MX_EXCHANGEÚMXRecordDataÚARES_REC_TYPE_TXTÚares_dns_rr_get_abin_cntÚARES_RR_TXT_DATArI   Úares_dns_rr_get_abinrL   rO   rN   ÚTXTRecordDataÚjoinÚARES_REC_TYPE_CAAÚares_dns_rr_get_u8ÚARES_RR_CAA_CRITICALÚARES_RR_CAA_TAGÚares_dns_rr_get_binÚARES_RR_CAA_VALUEÚCAARecordDataÚARES_REC_TYPE_CNAMEÚARES_RR_CNAME_CNAMEÚCNAMERecordDataÚARES_REC_TYPE_NAPTRÚARES_RR_NAPTR_ORDERÚARES_RR_NAPTR_PREFERENCEÚARES_RR_NAPTR_FLAGSÚARES_RR_NAPTR_SERVICESÚARES_RR_NAPTR_REGEXPÚARES_RR_NAPTR_REPLACEMENTÚNAPTRRecordDataÚARES_REC_TYPE_NSÚARES_RR_NS_NSDNAMEÚNSRecordDataÚARES_REC_TYPE_PTRÚARES_RR_PTR_DNAMEÚPTRRecordDataÚARES_REC_TYPE_SOAÚARES_RR_SOA_MNAMEÚARES_RR_SOA_RNAMEÚares_dns_rr_get_u32ÚARES_RR_SOA_SERIALÚARES_RR_SOA_REFRESHÚARES_RR_SOA_RETRYÚARES_RR_SOA_EXPIREÚARES_RR_SOA_MINIMUMÚSOARecordDataÚARES_REC_TYPE_SRVÚARES_RR_SRV_PRIORITYÚARES_RR_SRV_WEIGHTÚARES_RR_SRV_PORTÚARES_RR_SRV_TARGETÚSRVRecordDataÚARES_REC_TYPE_TLSAÚARES_RR_TLSA_CERT_USAGEÚARES_RR_TLSA_SELECTORÚARES_RR_TLSA_MATCHÚARES_RR_TLSA_DATArM   ÚTLSARecordDataÚARES_REC_TYPE_HTTPSÚARES_RR_HTTPS_PRIORITYÚARES_RR_HTTPS_TARGETrY   ÚARES_RR_HTTPS_PARAMSÚHTTPSRecordDataÚARES_REC_TYPE_URIÚARES_RR_URI_PRIORITYÚARES_RR_URI_WEIGHTÚARES_RR_URI_TARGETÚURIRecordDataÚ
ValueError))rP   Úrecord_typer\   Úbufr]   r^   ÚcntÚchunksrT   Úlengthr&   r_   r`   ra   Ú	value_strrb   rc   rd   re   r;   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   rv   Údata_lenÚdata_ptrÚ	cert_datarS   s)                                            r   Úextract_record_datarÔ   Ä   s„  € à”d×*Ñ*Ó*Ü×(Ò(¨¬T×-@Ñ-@ÓAˆÜ�hŠh�x¤×!6Ñ!6Ó7ˆÜ×ÒœFŸN™N¨D´t×7LÑ7LÔMÜ¤	¬$¯+ª+°cÓ*:Ó ;Ñ<Ð<à	œ×/Ñ/Ó	/Ü×)Ò)¨"¬d×.DÑ.DÓEˆÜ�hŠh�x¤×!6Ñ!6Ó7ˆÜ×ÒœFŸO™O¨T¼×8MÑ8MÔNÜ¤9¬T¯[ª[¸Ó-=Ó#>Ñ?Ð?à	œ×-Ñ-Ó	-Ü×+Ò+¨B´×0JÑ0JÓKˆÜ×+Ò+¨B´×0HÑ0HÓIˆÜ X¼	Ä$Ç+Â+ÈhÓBWÓ8XÑYÐYà	œ×.Ñ.Ó	.ä×+Ò+¨B´×0EÑ0EÓFˆØˆÜ�s–ˆAÜ—X’X˜jÓ)ˆFÜ×,Ò,¨R´×1FÑ1FÈÓRˆDØ”t—y‘yÕ Ø—‘œdŸkšk¨$°q±	Ó:¹1Ð=Ö>ñ	 ô
  #§(¡(¨6Ó"2Ñ3Ð3à	œ×.Ñ.Ó	.Ü×*Ò*¨2¬t×/HÑ/HÓIˆÜ×&Ò& r¬4×+?Ñ+?Ó@ˆÜ—’˜*Ó%ˆÜ×(Ò(¨¬T×-CÑ-CÀVÓLˆÜœdŸkšk¨%¸±Ó;¹AÐ>Ó?ˆ	Ü h´I¼d¿kºkÈ#Ó>NÓ4OÐW`ÑaÐaà	œ×0Ñ0Ó	0Ü×(Ò(¨¬T×-EÑ-EÓFˆÜ¤Y¬t¯{ª{¸5Ó/AÓ%BÑCÐCà	œ×0Ñ0Ô	0Ü×(Ò(¨¬T×-EÑ-EÓFˆÜ×-Ò-¨b´$×2OÑ2OÓPˆ
Ü×(Ò(¨¬T×-EÑ-EÓFˆÜ×*Ò*¨2¬t×/JÑ/JÓKˆÜ×)Ò)¨"¬d×.GÑ.GÓHˆÜ×.Ò.¨r´4×3QÑ3QÓRˆÜØØ!ÜœDŸKšK¨Ó.Ó/ÜœdŸkšk¨'Ó2Ó3ÜœTŸ[š[¨Ó0Ó1Ü!¤$§+¢+¨kÓ":Ó;ñ
ð 	
ð 
œ×-Ñ-Ó	-Ü×*Ò*¨2¬t×/FÑ/FÓGˆÜ¤I¬d¯kªk¸'Ó.BÓ$CÑDÐDà	œ×.Ñ.Ó	.Ü×(Ò(¨¬T×-CÑ-CÓDˆÜ¤9¬T¯[ª[¸Ó-?Ó#@ÑAÐAà	œ×.Ñ.Ô	.Ü×(Ò(¨¬T×-CÑ-CÓDˆÜ×(Ò(¨¬T×-CÑ-CÓDˆÜ×)Ò)¨"¬d×.EÑ.EÓFˆÜ×*Ò*¨2¬t×/GÑ/GÓHˆÜ×(Ò(¨¬T×-CÑ-CÓDˆÜ×)Ò)¨"¬d×.EÑ.EÓFˆÜ×*Ò*¨2¬t×/GÑ/GÓHˆÜÜœDŸKšK¨Ó.Ó/ÜœDŸKšK¨Ó.Ó/ØØØØØñ
ð 	
ð 
œ×.Ñ.Ó	.Ü×+Ò+¨B´×0IÑ0IÓJˆÜ×)Ò)¨"¬d×.EÑ.EÓFˆÜ×'Ò'¨¬D×,AÑ,AÓBˆÜ×)Ò)¨"¬d×.EÑ.EÓFˆÜØØØÜœTŸ[š[¨Ó0Ó1ñ	
ð 	
ð 
œ×/Ñ/Ó	/Ü×,Ò,¨R´×1MÑ1MÓNˆ
Ü×*Ò*¨2¬t×/IÑ/IÓJˆÜ×/Ò/°´D×4KÑ4KÓLˆÜ—8’8˜JÓ'ˆÜ×+Ò+¨B´×0FÑ0FÈÓQˆØAIÌTÏYÉYÓAV”Eœ$Ÿ+š+ h°¸±Ó<Ô=Ð\_ˆ	ÜØ!ØØ'Ø"+ñ	
ð 	
ð 
œ×0Ñ0Ó	0Ü×+Ò+¨B´×0KÑ0KÓLˆÜ×)Ò)¨"¬d×.GÑ.GÓHˆÜ$ R¬×)BÑ)BÓCˆÜØÜœTŸ[š[¨Ó0Ó1Øñ
ð 	
ð 
œ×.Ñ.Ó	.Ü×+Ò+¨B´×0IÑ0IÓJˆÜ×)Ò)¨"¬d×.EÑ.EÓFˆÜ×)Ò)¨"¬d×.EÑ.EÓFˆÜØØÜœTŸ[š[¨Ó0Ó1ñ
ð 	
ô Ð8¸¸ÐFÓGÐGr   c                 óh  • U [         R                  :X  a  S[        R                  4$ / n/ n/ n[        R                  " U [        R
                  5      n[        U5       HÜ  n[        R                  " U [        R
                  U5      nU[         R                  :w  d  M?  [        [         R                  " [        R                  " U5      5      5      n[        R                  " U5      n[        R                  " U5      n	[        R                  " U5      n
 [        Xh5      nUR                  [!        UUU	U
US95        MÞ     [        R                  " U [        R&                  5      n[        U5       HÜ  n[        R                  " U [        R&                  U5      nU[         R                  :w  d  M?  [        [         R                  " [        R                  " U5      5      5      n[        R                  " U5      n[        R                  " U5      n	[        R                  " U5      n
 [        Xh5      nUR                  [!        UUU	U
US95        MÞ     [        R                  " U [        R(                  5      n[        U5       HÜ  n[        R                  " U [        R(                  U5      nU[         R                  :w  d  M?  [        [         R                  " [        R                  " U5      5      5      n[        R                  " U5      n[        R                  " U5      n	[        R                  " U5      n
 [        Xh5      nUR                  [!        UUU	U
US95        MÞ     [+        UUUS9nUS4$ ! ["        [$        4 a     GM#  f = f! ["        [$        4 a     GM+  f = f! ["        [$        4 a     GM3  f = f)z8Parse ares_dns_record_t into DNSResult with all sectionsN)ÚnameÚtypeÚrecord_classÚttlr&   )ÚanswerÚ	authorityÚ
additional)r$   rL   r-   ÚARES_EBADRESPÚares_dns_record_rr_cntÚARES_SECTION_ANSWERrI   Úares_dns_record_rr_get_constr   r€   Úares_dns_rr_get_nameÚares_dns_rr_get_typeÚares_dns_rr_get_classÚares_dns_rr_get_ttlrÔ   rO   Ú	DNSRecordrÊ   Ú	ExceptionÚARES_SECTION_AUTHORITYÚARES_SECTION_ADDITIONALÚ	DNSResult)r?   Úanswer_recordsÚauthority_recordsÚadditional_recordsÚanswer_countrT   rP   rÖ   Úrec_typeÚ	rec_classrÙ   r&   Úauthority_countÚadditional_countr6   s                  r   r>   r>   K  s  € à”—‘ÓØ”T×'Ñ'Ð'Ð'à€NØÐØÐô ×.Ò.¨v´t×7OÑ7OÓP€LÜ�<Ö ˆÜ×.Ò.¨v´t×7OÑ7OÐQRÓSˆØ”—‘�?ÜœTŸ[š[¬×)BÒ)BÀ2Ó)FÓGÓHˆDÜ×0Ò0°Ó4ˆHÜ×2Ò2°2Ó6ˆIÜ×*Ò*¨2Ó.ˆCðÜ*¨2Ó8�Ø×%Ñ%¤iØØ!Ø!*ØØñ'ö ñ !ô, ×1Ò1°&¼$×:UÑ:UÓV€OÜ�?Ö#ˆÜ×.Ò.¨v´t×7RÑ7RÐTUÓVˆØ”—‘�?ÜœTŸ[š[¬×)BÒ)BÀ2Ó)FÓGÓHˆDÜ×0Ò0°Ó4ˆHÜ×2Ò2°2Ó6ˆIÜ×*Ò*¨2Ó.ˆCðÜ*¨2Ó8�Ø!×(Ñ(¬ØØ!Ø!*ØØñ*ö ñ $ô, ×2Ò2°6¼4×;WÑ;WÓXÐÜÐ#Ö$ˆÜ×.Ò.¨v´t×7SÑ7SÐUVÓWˆØ”—‘�?ÜœTŸ[š[¬×)BÒ)BÀ2Ó)FÓGÓHˆDÜ×0Ò0°Ó4ˆHÜ×2Ò2°2Ó6ˆIÜ×*Ò*¨2Ó.ˆCðÜ*¨2Ó8�Ø"×)Ñ)¬)ØØ!Ø!*ØØñ+ö ñ %ô* ØØ#Ø%ñ€Fð �4ˆ<Ðøôq ¤	Ð*ó ãðûô. ¤	Ð*ó ãðûô. ¤	Ð*ó ãðús6   Ä'M,È"'NÌ2'NÍ,NÎ NÎNÎNÎN1Î0N1c                   ó@   • \ rS rSrSrS	S jrS	S jrS	S jrS	S jrSr	g)
Ú_ChannelShutdownManageri¢  zLManages channel destruction in a single background thread using SimpleQueue.Nc                 ód   • [        5       U l        S U l        [        R                  " 5       U l        g r#   )r   Ú_queueÚ_threadÚ	threadingÚLockÚ_start_lock©Úselfs    r   Ú__init__Ú _ChannelShutdownManager.__init__¥  s!   € Ü#.£=ˆŒØ37ˆŒÜ$Ÿ>š>Ó+ˆÕr   c                 óÞ   •  U R                   R                  5       u  p[        R                  " US   5        [        R                  " US   S5        Ub  [        R
                  " US   5        Mm  )z4Process channel destruction requests from the queue.r   éÿÿÿÿ)rõ   Úgetr-   Úares_cancelÚares_queue_wait_emptyÚares_destroy)rû   ÚchannelÚ_s      r   Ú_run_safe_shutdown_loopÚ/_ChannelShutdownManager._run_safe_shutdown_loopª  s`   € ààŸ™Ÿ™Ó*‰JˆGô ×Ò˜W Q™ZÔ(ô ×&Ò& w¨q¡z°2Ô6ð Ñ"Ü×!Ò! '¨!¡*Ô-ñ r   c                 ó  • U R                   b  gU R                     U R                   b
   SSS5        g[        R                  " U R                  SS9U l         U R                   R                  5         SSS5        g! , (       d  f       g= f)z3Start the background thread if not already started.NT)rs   Údaemon)rö   rù   r÷   ÚThreadr  Ústartrú   s    r   r  Ú_ChannelShutdownManager.startº  sf   € à�<‰<Ñ#ØØ×ÓØ�|‰|Ñ'à÷ Ðô %×+Ò+°4×3OÑ3OÐX\Ñ]ˆDŒLØ�L‰L×ÑÔ ÷ ×Öús   ›A:³>A:Á:
Bc                 ó<   • U R                   R                  X45        g)aŽ  
Schedule channel destruction on the background thread.

The socket state callback handle is passed along to ensure it remains
alive until the channel is destroyed.

Thread Safety and Synchronization:
This method uses SimpleQueue which is thread-safe for putting items
from multiple threads. The background thread processes channels
sequentially waiting for queries to end before each destruction.
N)rõ   Úput)rû   r  Úsock_state_cb_handles      r   Údestroy_channelÚ'_ChannelShutdownManager.destroy_channelÅ  s   € ð 	�‰�‰˜Ð7Õ8r   )rõ   rù   rö   ©ÚreturnN)
r   r   r   r   Ú__doc__rü   r  r  r  r   r   r   r   ró   ró   ¢  s   † ÙVô,ô
.ô 	!÷9r   ró   c            $       óô  • \ rS rSr\R
                  \R                  \R                  \R                  \R                  \R                  \R                  \R                  \R                  \R                  \R                  \R                   \R"                  \R$                  \R&                  4r\R*                  \R,                  \R.                  \R0                  \R2                  4rSSSSSSSSSSSSSSSSS.S\\   S\\   S\\   S\\   S	\\   S
\\   S\\\\ \!4         S\\\\ \!4         S\\ \!S4   S\\"\\#\#/S4      S\\   S\\   S\#S\\ \!S4   S\\    S\\ \!S4   SS4"S jjr$S;S jr%S r&S;S jr'S;S jr(\)S\*\    4S j5       r+\+RX                  S\\\ \!4      SS4S j5       r+S\S\SS4S jr-S\SS4S  jr.S\SS4S! jr/S<S" jr0S#\ S$\"\1\/S4   SS4S% jr2S&S&S&S&S'.S(\ S)\\   S*\3Rh                  S+\S,\S\S$\"\1\/S4   SS4S- jjr5\6S..S/\ S0\S1\S$\"\1\/S4   SS4
S2 jjr7\6S..S/\ S0\S1\S$\"\1\/S4   SS4
S3 jjr8S4 r9S5\\:\;4   S\S$\"\1\/S4   SS4S6 jr<S7 r=S;S8 jr>S<S\S\#4S9 jjr?S:r@g)=r    iØ  NF)re   ÚtimeoutÚtriesÚndotsÚtcp_portÚudp_portÚserversÚdomainsÚlookupsr*   Úsocket_send_buffer_sizeÚsocket_receive_buffer_sizeÚrotateÚlocal_ipÚ	local_devÚresolvconf_pathre   r  r  r  r  r  r  r  r  r*   r  r  r   r!  r"  r#  r  c          	      óL  • S U l         Ub  UOSU l        [        R                  " S5      n[        R                  " S5      nSnUb  UUl        U[
        R                  -  nUb&  [        US-  5      Ul        U[
        R                  -  nUb  UUl
        U[
        R                  -  nUb  UUl        U[
        R                  -  nUb  UUl        U[
        R                  -  nUb  UUl        U[
        R"                  -  nUb  UUl        U[
        R&                  -  nUb  UUl        U[
        R*                  -  nU
(       ah  [-        U
5      (       d  [/        S5      e[        R0                  " U
5      nUU l        [
        R4                  Ul        UUl        U[
        R:                  -  nO/S U l        U[
        R<                  -  n[
        R>                  Ul         U	(       a8  [        R                  " S[C        U	5      5      Ul"        U[
        RF                  -  nU(       a¢  U Vs/ s H#  n[        R                  " S[C        U5      5      PM%     nn[        R                  " S[I        U5      S-   -  5      n[K        [I        U5      5       H  nUU   UU'   M     UUl&        [I        U5      Ul'        U[
        RP                  -  nU(       a  U[
        RR                  -  nUb8  U[
        RT                  -  n[        R                  " S[C        U5      5      Ul+        [
        RX                  " UUU5      nU[
        RZ                  :w  a  []        S	5      eUU l         U(       a  Xpl/        U(       a  U Ra                  U5        U(       a  U Rc                  U5        [d        Rg                  5         g s  snf )
Nr   zares_channel *zstruct ares_options *éè  zsock_state_cb is not callabler[   z
char *[%d]r   z#Failed to initialize c-ares channel)4Ú_channelÚ_flagsr$   rJ   re   r-   ÚARES_OPT_FLAGSÚintr  ÚARES_OPT_TIMEOUTMSr  ÚARES_OPT_TRIESr  ÚARES_OPT_NDOTSr  ÚARES_OPT_TCP_PORTr  ÚARES_OPT_UDP_PORTr  ÚARES_OPT_SOCK_SNDBUFr  ÚARES_OPT_SOCK_RCVBUFÚcallableÚ	TypeErrorÚ
new_handleÚ_sock_state_cb_handler+   r*   Úsock_state_cb_dataÚARES_OPT_SOCK_STATE_CBÚARES_OPT_EVENT_THREADÚARES_EVSYS_DEFAULTÚevsysr   r  ÚARES_OPT_LOOKUPSÚlenrI   r  ÚndomainsÚARES_OPT_DOMAINSÚARES_OPT_ROTATEÚARES_OPT_RESOLVCONFr#  Úares_init_optionsr.   r   r  Úset_local_ipÚset_local_devÚ_shutdown_managerr  )rû   re   r  r  r  r  r  r  r  r  r*   r  r  r   r!  r"  r#  r  ÚoptionsÚoptmaskÚuserdatarT   ÚstrsÚcÚrs                            r   rü   ÚChannel.__init__Ü  s  € ð( ˆŒð  %Ñ0‘e°aˆŒä—(’(Ð+Ó,ˆÜ—(’(Ð2Ó3ˆØˆàÑØ!ˆGŒMØ¤× 3Ñ 3Ñ3ˆGàÑÜ! '¨D¡.Ó1ˆGŒOØ¤× 7Ñ 7Ñ7ˆGàÑØ!ˆGŒMØ¤×!4Ñ!4Ñ4ˆGàÑØ!ˆGŒMØ¤×!4Ñ!4Ñ4ˆGàÑØ'ˆGÔØ¤×!7Ñ!7Ñ7ˆGàÑØ'ˆGÔØ¤×!7Ñ!7Ñ7ˆGà"Ñ.Ø.EˆGÔ+Ø¤×!:Ñ!:Ñ:ˆGà%Ñ1Ø1KˆGÔ.Ø¤×!:Ñ!:Ñ:ˆGæÜ˜M×*Ñ*ÜÐ ?Ó@Ð@ä—’ }Ó5ˆHð *2ˆDÔ&ä$(×$7Ñ$7ˆGÔ!Ø)1ˆGÔ&Ø¤×!<Ñ!<Ñ<‰Gà)-ˆDÔ&Ø¤×!;Ñ!;Ñ;ˆGÜ ×3Ñ3ˆGŒMæÜ"Ÿhšh x´¸WÓ1EÓFˆGŒOØ¤×!6Ñ!6Ñ6ˆGæÙ@GÓHÂ¸1”D—H’H˜X¤{°1£~Ö6ÁˆDÐHÜ—’˜¬¨W«¸Ñ)9Ñ:Ó;ˆAÜœ3˜w›<Ö(�Ø˜1‘gˆq�‹tñ )ð  ˆGŒOÜ" 7›|ˆGÔØ¤×!6Ñ!6Ñ6ˆGæØ¤×!5Ñ!5Ñ5ˆGàÑ&Ø¤×!9Ñ!9Ñ9ˆGÜ&*§h¢h¨x¼À_Ó9UÓ&VˆGÔ#ä×"Ò" 7¨G°WÓ=ˆØ”×!Ñ!Ó!ÜÐAÓBÐBàˆŒÞØ"ŒLæØ×Ñ˜hÔ'æØ×Ñ˜yÔ)ô 	×ÑÕ!ùò? Is   È*N!c                 ó$   • U R                  5         g)z;Ensure the channel is destroyed when the object is deleted.N)Úcloserú   s    r   Ú__del__ÚChannel.__del__P  s   € à�
‰
�r   c                 ót   • U R                   c  [        S5      e[        R                  " U5      nU [        U'   U$ )a‡  
Create a callback handle and register it for tracking.

This ensures that:
1. The callback data is wrapped in a CFFI handle
2. The handle is mapped to this channel to keep it alive

Args:
    callback_data: The data to pass to the callback (usually a callable or tuple)

Returns:
    The CFFI handle that can be passed to C functions

Raises:
    RuntimeError: If the channel is destroyed

z,Channel is destroyed, no new queries allowed)r&  ÚRuntimeErrorr$   r3  r!   )rû   Úcallback_datarF  s      r   Ú_create_callback_handleÚChannel._create_callback_handleT  s8   € ð$ �=‰=Ñ ÜÐMÓNÐNä—?’? =Ó1ˆØ'+Ô˜8Ñ$Øˆr   c                 óJ   • [         R                  " U R                  S   5        g ©Nr   )r-   r  r&  rú   s    r   ÚcancelÚChannel.cancelm  s   € Ü×Ò˜Ÿ™ qÑ)Õ*r   c                 ó²   • [         R                  " U R                  S   5      nU[         R                  :w  a   [	        U[
        R                  " U5      5      eg rU  )r-   Úares_reinitr&  r.   r   r   Ústrerror)rû   rI  s     r   ÚreinitÚChannel.reinitp  sD   € Ü×Ò˜TŸ]™]¨1Ñ-Ó.ˆØ”×!Ñ!Ó!Ü˜AœuŸ~š~¨aÓ0Ó1Ð1ð "r   c                 óÀ  • [         R                  " U R                  S   5      nU[        R                  :X  a<  [        [         R                  [        R                  " [         R                  5      5      e/ n[        [        R                  " U5      5      n[         R                  " U5        UR                  S5       Vs/ s H  oDR                  5       PM     nnU$ s  snf )Nr   Ú,)r-   Úares_get_servers_csvr&  r$   rL   r   ÚARES_ENOMEMr   rZ  r   r€   Úares_free_stringÚsplitÚstrip)rû   Úcsv_strÚserver_listÚ
csv_stringÚss        r   r  ÚChannel.serversu  s    € ä×+Ò+¨D¯M©M¸!Ñ,<Ó=ˆà”d—i‘iÓÜœD×,Ñ,¬e¯nªn¼T×=MÑ=MÓ.NÓOÐOàˆÜœtŸ{š{¨7Ó3Ó4ˆ
Ü×Ò˜gÔ&Ø*4×*:Ñ*:¸3Ô*?Ó@Ò*? Q—w‘w–yÑ*?ˆÐ@àÐùò As   Â>Cc                 ó€  • U Vs/ s H4  n[        U[        5      (       a  [        U5      R                  S5      OUPM6     nnSR	                  U5      n[
        R                  " U R                  S   UR                  S5      5      nU[
        R                  :w  a   [        U[        R                  " U5      5      eg s  snf )NÚasciir^  r   )Ú
isinstancerM   r   Údecoder‘   r-   Úares_set_servers_csvr&  Úencoder.   r   r   rZ  )rû   r  rg  re  rd  rI  s         r   r  rh  ƒ  s›   € á^eÓfÒ^eÐYZ¼ÀAÄu×9MÑ9M”{ 1“~×,Ñ,¨WÔ5ÐSTÒTÑ^eˆÐfØ—(‘(˜;Ó'ˆä×%Ò% d§m¡m°AÑ&6¸¿¹ÀwÓ8OÓPˆØ”×!Ñ!Ó!Ü˜AœuŸ~š~¨aÓ0Ó1Ð1ð "ùò	 gs   …;B;Úread_fdÚwrite_fdc                 ó¢   • [         R                  " U R                  S   [        R                  " SU5      [        R                  " SU5      5        g ©Nr   Úares_socket_t)r-   Úares_process_fdr&  r$   Úcast)rû   ro  rp  s      r   Ú
process_fdÚChannel.process_fdŒ  s8   € Ü×Ò˜TŸ]™]¨1Ñ-¬t¯yªy¸È'Ó/RÔTX×T]ÒT]Ð^mÐowÓTxÕyr   c                 óª   • [         R                  " U R                  S   [        R                  " SU5      [        R                  " S[
        5      5        g rr  ©r-   rt  r&  r$   ru  ÚARES_SOCKET_BAD)rû   ro  s     r   Úprocess_read_fdÚChannel.process_read_fd�  s;   € Ü×Ò˜TŸ]™]¨1Ñ-¬t¯yªy¸È'Ó/RÔTX×T]ÒT]Ð^mÔo~ÓTõ  	Ar   c                 óª   • [         R                  " U R                  S   [        R                  " S[
        5      [        R                  " SU5      5        g rr  ry  )rû   rp  s     r   Úprocess_write_fdÚChannel.process_write_fd’  s?   € Ü×Ò˜TŸ]™]¨1Ñ-¬t¯yªy¸Ì/Ó/ZÔ\`×\eÒ\eÐfuÐwó  ]Aõ  	Br   c                 óæ  • [         R                  n[         R                  " S5      nUbt  US:¼  ac  [         R                  " S5      n[        [        R
                  " U5      5      Ul        [        [        R                  " US5      S-  5      Ul        O[        S5      e[        R                  " U R                  S   X#5        U[         R                  :X  a  gUR                  UR                  S-  -   $ )Nzstruct timeval*g        g      ð?i@B z-timeout needs to be a positive number or Noner   g    €„.A)r$   rL   rJ   r)  ÚmathÚfloorÚtv_secÚfmodÚtv_usecrÊ   r-   Úares_timeoutr&  )rû   ÚtÚmaxtvÚtvs       r   r  ÚChannel.timeout•  s°   € Ü—	‘	ˆÜ�XŠXÐ'Ó(ˆà‰=Ø�C‹xÜŸšÐ!2Ó3�Ü"¤4§:¢:¨a£=Ó1�”Ü #¤D§I¢I¨a°Ó$5¸Ñ$?Ó @�•ä Ð!PÓQÐQä×Ò˜$Ÿ-™-¨Ñ*¨EÔ6à”—‘‹?Øà—	‘	˜BŸJ™J¨Ñ2Ñ2Ð3r   r\   r5   c                ó|  • [        U5      (       d  [        S5      e[        R                  " S5      n[        R                  " S5      n[        R
                  " [        R                  [        U5      U5      S:X  a  Un[        R                  nOQ[        R
                  " [        R                  [        U5      U5      S:X  a  Un[        R                  nO[        S5      eU R                  U5      n[        R                  " U R                  S   U[        R                  " US   5      U[        R                  U5        g )Núa callable is requiredústruct in_addr*ústruct ares_in6_addr*r   úinvalid IP addressr   )r1  r2  r$   rJ   r-   Úares_inet_ptonr}   r~   r   r„   rÊ   rR  Úares_gethostbyaddrr&  Úsizeofr7   )rû   r\   r5   Úaddr4Úaddr6ÚaddressÚfamilyrF  s           r   ÚgethostbyaddrÚChannel.gethostbyaddr¨  sç   € Ü˜×!Ñ!ÜÐ4Ó5Ð5ä—’Ð*Ó+ˆÜ—’Ð0Ó1ˆÜ×ÒœvŸ~™~¬{¸4Ó/@À5ÓJÈaÓOØˆGÜ—^‘^‰FÜ× Ò ¤§¡´+¸dÓ2CÀeÓMÐQRÓRØˆGÜ—_‘_‰FäÐ1Ó2Ð2à×/Ñ/°Ó9ˆÜ×Ò §¡¨aÑ 0°'¼4¿;º;ÀwÈqÁzÓ;RÐTZÔ\`×\iÑ\iÐksÕtr   r   )r–  r×   Úprotore   Úhostrr   r–  r×   r™  c                óÒ  • [        U5      (       d  [        S5      eUc  [        R                  nO;[	        U[
        5      (       a  [        U5      R                  S5      nO[        U5      nU R                  U5      n	[        R                  " S5      n
Xjl        X:l        XJl        XZl        [        R                   " U R"                  S   [%        U5      XŠ[        R&                  U	5        g )NrŒ  rj  zstruct ares_addrinfo_hints*r   )r1  r2  r$   rL   rk  r)  Ústrrn  r   rR  rJ   Úai_flagsÚ	ai_familyÚai_socktypeÚai_protocolr-   Úares_getaddrinfor&  r	   rE   )rû   rš  rr   r–  r×   r™  re   r5   r;   rF  Úhintss              r   ÚgetaddrinfoÚChannel.getaddrinfoº  sµ   € ô ˜×!Ñ!ÜÐ4Ó5Ð5à‰<Ü—i‘i‰GÜ˜œc×"Ñ"Ü˜$“i×&Ñ& wÓ/‰Gä! $Ó'ˆGà×/Ñ/°Ó9ˆä—’Ð6Ó7ˆØŒØ ŒØ ÔØ!ÔÜ×Ò˜dŸm™m¨AÑ.´
¸4Ó0@À'ÔRV×RcÑRcÐemÕnr   )Úquery_classrÖ   Ú
query_typer¥  c          	      ó  • [        U5      (       d  [        S5      eX R                  ;  a  [        S5      eX0R                  ;  a  [        S5      eU R                  U5      n[        R                  " S5      n[        R                  " U R                  S   [        U5      UU[        R                  UU5      nU[        R                  :w  a6  [        R                  US5        [!        U["        R$                  " U5      5      eg)a`  
Perform a DNS query.

Args:
    name: Domain name to query
    query_type: Type of query (e.g., QUERY_TYPE_A, QUERY_TYPE_AAAA, etc.)
    query_class: Query class (default: QUERY_CLASS_IN)
    callback: Callback function that receives (result, errno)

The callback will receive a DNSResult object containing answer, authority, and additional sections.
rŒ  úinvalid query type specifiedúinvalid query class specifiedzunsigned short *r   N)r1  r2  Ú
__qtypes__rÊ   Ú__qclasses__rR  r$   rJ   r-   Úares_query_dnsrecr&  r	   rA   r.   r!   r0   r   r   rZ  )rû   rÖ   r¦  r¥  r5   rF  Úqidr2   s           r   ÚqueryÚChannel.queryØ  sÜ   € ô ˜×!Ñ!ÜÐ4Ó5Ð5àŸ_™_Ó,ÜÐ;Ó<Ð<à×/Ñ/Ó/ÜÐ<Ó=Ð=à×/Ñ/°Ó9ˆÜ�hŠhÐ)Ó*ˆÜ×'Ò'Ø�M‰M˜!ÑÜ�tÓØØÜ×!Ñ!ØØó
ˆð ”T×&Ñ&Ó&Ü×"Ñ" 8¨TÔ2Ü˜F¤E§N¢N°6Ó$:Ó;Ð;ð 'r   c                óL  ^
^• [        U5      (       d  [        S5      eX R                  ;  a  [        S5      eX0R                  ;  a  [        S5      eU R
                  [        R                  -  (       a  SO[        R                  n[        R                  " S5      n[        R                  " USU[        R                  [        R                  5      nU[        R                  :w  a   [        U[         R"                  " U5      5      eUS   m
[        R$                  " T
['        U5      UU5      nU[        R                  :w  a6  [        R(                  " T
5        [        U[         R"                  " U5      5      eUmU
U4S jnU R+                  U5      n	[        R,                  " U R.                  S   T
[        R0                  U	5      nU[        R                  :w  aL  [2        R5                  U	S5        [        R(                  " T
5        [        U[         R"                  " U5      5      eg)a†  
Perform a DNS search (honors resolv.conf search domains).

Args:
    name: Domain name to search
    query_type: Type of query (e.g., QUERY_TYPE_A, QUERY_TYPE_AAAA, etc.)
    query_class: Query class (default: QUERY_CLASS_IN)
    callback: Callback function that receives (result, errno)

The callback will receive a DNSResult object containing answer, authority, and additional sections.
rŒ  r¨  r©  r   zares_dns_record_t **c                 óz   >•  T" X5        [         R                  " T5        g ! [         R                  " T5        f = fr#   )r-   Úares_dns_record_destroy)r6   Úerrorr?   Úoriginal_callbacks     €€r   Úcleanup_callbackÚ(Channel.search.<locals>.cleanup_callback/  s/   ø€ ð5Ù! &Ô0ô ×,Ò,¨VÕ4ø”×,Ò,¨VÕ4ús   ƒ" ¢:N)r1  r2  rª  rÊ   r«  r'  r-   ÚARES_FLAG_NORECURSEÚARES_FLAG_RDr$   rJ   Úares_dns_record_createÚARES_OPCODE_QUERYÚARES_RCODE_NOERRORr.   r   r   rZ  Úares_dns_record_query_addr	   r²  rR  Úares_search_dnsrecr&  rA   r!   r0   )rû   rÖ   r¦  r¥  r5   Ú	dns_flagsÚdnsrec_pr2   rµ  rF  r?   r´  s             @@r   ÚsearchÚChannel.searchü  s¾  ù€ ô ˜×!Ñ!ÜÐ4Ó5Ð5àŸ_™_Ó,ÜÐ;Ó<Ð<à×/Ñ/Ó/ÜÐ<Ó=Ð=ð Ÿ+™+¬×(@Ñ(@×@‘AÄt×GXÑGXˆ	ä—8’8Ð2Ó3ˆÜ×,Ò,ØØØÜ×"Ñ"Ü×#Ñ#ó
ˆð ”T×&Ñ&Ó&Ü˜F¤E§N¢N°6Ó$:Ó;Ð;à˜!‘ˆô ×/Ò/ØÜ�tÓØØó	
ˆð ”T×&Ñ&Ó&Ü×(Ò(¨Ô0Ü˜F¤E§N¢N°6Ó$:Ó;Ð;ð %Ðö	5ð ×/Ñ/Ð0@ÓAˆÜ×(Ò(Ø�M‰M˜!ÑØÜ×!Ñ!Øó	
ˆð ”T×&Ñ&Ó&Ü×"Ñ" 8¨TÔ2Ü×(Ò(¨Ô0Ü˜F¤E§N¢N°6Ó$:Ó;Ð;ð 'r   c                 ó  • [         R                  " S5      n[         R                  " S5      n[        R                  " [        R
                  [        U5      U5      S:X  aC  [        R                  " U R                  S   [        R                  " UR                  5      5        g [        R                  " [        R                  [        U5      U5      S:X  a%  [        R                  " U R                  S   U5        g [        S5      e)Nr�  rŽ  r   r   r�  )r$   rJ   r-   r�  r}   r~   r   Úares_set_local_ip4r&  ÚntohlÚs_addrr„   Úares_set_local_ip6rÊ   )rû   Úipr“  r”  s       r   rA  ÚChannel.set_local_ipC  s©   € Ü—’Ð*Ó+ˆÜ—’Ð0Ó1ˆÜ×ÒœvŸ~™~¬{¸2«ÀÓFÈ!ÓKÜ×#Ò# D§M¡M°!Ñ$4´f·l²lÀ5Ç<Á<Ó6PÕQÜ× Ò ¤§¡´+¸b³/À5ÓIÈQÓNÜ×#Ò# D§M¡M°!Ñ$4°eÕ<äÐ1Ó2Ð2r   r•  c                óf  • [        U5      (       d  [        S5      e[        U5      S:X  a¬  Uu  pE[        R                  " S5      n[
        R                  " [        R                  [        U5      [        R                  " UR                  5      5      S:w  a  [        SU-  5      e[        R                  Ul        [        R                  " U5      Ul        UnOè[        U5      S:X  aÎ  Uu  pEp‰[        R                  " S5      n
[
        R                  " [        R                   [        U5      [        R                  " U
R"                  5      5      S:w  a  [        SU-  5      e[        R                   U
l        [        R                  " U5      U
l        [        R(                  " U5      U
l        Xšl        U
nO[        S	5      eU R/                  U5      n[
        R0                  " U R2                  S
   [        R4                  " SU5      [        R6                  " US
   5      U[
        R8                  U5        g )NrŒ  é   ústruct sockaddr_in*r   zInvalid IPv4 address %ré   ústruct sockaddr_in6*zInvalid IPv6 address %rzInvalid address argumentr   zstruct sockaddr*)r1  r2  r;  r$   rJ   r-   r�  r}   r~   r   Ú	addressofÚsin_addrrÊ   Ú
sin_familyÚhtonsÚsin_portr„   Ú	sin6_addrÚsin6_familyÚ	sin6_portÚhtonlÚsin6_flowinfoÚsin6_scope_idrR  Úares_getnameinfor&  ru  r’  r<   )rû   r•  re   r5   rÇ  rr   Úsa4ÚsaÚflowinfoÚscope_idÚsa6rF  s               r   ÚgetnameinfoÚChannel.getnameinfoM  s¥  € Ü˜×!Ñ!ÜÐ4Ó5Ð5äˆw‹<˜1ÓØ ‰JˆRÜ—(’(Ð0Ó1ˆCÜ×"Ò"¤6§>¡>´;¸r³?ÄDÇNÂNÐSV×S_ÑS_ÓD`ÓaÐefÓfÜ Ð!:¸RÑ!?Ó@Ð@Ü#Ÿ^™^ˆCŒNÜ!Ÿ<š<¨Ó-ˆCŒLØ‰BÜ�‹\˜QÓØ-4Ñ*ˆR�xÜ—(’(Ð1Ó2ˆCÜ×"Ò"¤6§?¡?´KÀ³OÄTÇ^Â^ÐTW×TaÑTaÓEbÓcÐghÓhÜ Ð!:¸RÑ!?Ó@Ð@Ü$Ÿo™oˆCŒOÜ"ŸLšL¨Ó.ˆCŒMÜ &§¢¨XÓ 6ˆCÔØ (ÔØ‰BäÐ7Ó8Ð8à×/Ñ/°Ó9ˆÜ×Ò˜dŸm™m¨AÑ.´·	²	Ð:LÈbÓ0QÔSW×S^ÒS^Ð_aÐbcÑ_dÓSeÐglÔnr×nÑnð  BJõ  	Kr   c                 óL   • [         R                  " U R                  S   U5        g rU  )r-   Úares_set_local_devr&  )rû   Údevs     r   rB  ÚChannel.set_local_devi  s   € Ü×Ò §¡¨aÑ 0°#Õ6r   c                 ó„   • U R                   c  gU R                   Ssol         [        R                  XR                  5        g)av  
Close the channel as soon as it's safe to do so.

This method can be called from any thread. The channel will be destroyed
safely using a background thread with a 1-second delay to ensure c-ares
has completed its cleanup.

Note: Once close() is called, no new queries can be started. Any pending
queries will be cancelled and their callbacks will receive ARES_ECANCELLED.

N)r&  rC  r  r4  )rû   r  s     r   rL  ÚChannel.closel  s7   € ð �=‰=Ñ àð "&§¡°Ðˆ”Ü×)Ñ)¨'×3MÑ3MÕNr   c                 ó  • [         R                  " U R                  S   Ub  US:¼  a  [        US-  5      OS5      nU[         R                  :X  a  gU[         R
                  :X  a  g[        U[        R                  " U5      5      e)z�
Wait until all pending queries are complete or timeout occurs.

Args:
    timeout: Maximum time to wait in seconds. Use -1 for infinite wait.
r   r%  rÿ   TF)	r-   r  r&  r)  r.   ÚARES_ETIMEOUTr   r   rZ  )rû   r  rI  s      r   ÚwaitÚChannel.waitƒ  sr   € ô ×&Ò& t§}¡}°QÑ'7ÐQXÑQdÐipÐtuÓiu¼#¸gÈ¹nÔ:MÐ{}Ó~ˆØ”×!Ñ!Ó!ØØ”$×$Ñ$Ó$Øä˜AœuŸ~š~¨aÓ0Ó1Ð1r   )r&  r'  r4  r  r  r#   )Ar   r   r   r   r-   rx   r�   ÚARES_REC_TYPE_ANYr’   r™   rÀ   r†   rœ   r¤   r§   rª   r´   rº   rŒ   rÅ   rª  ÚARES_CLASS_INÚARES_CLASS_CHAOSÚARES_CLASS_HESOIDÚARES_CLASS_NONEÚARES_CLASS_ANYr«  r   r)  Úfloatr   r   rœ  rM   r   Úboolrü   rM  rR  rV  r[  ÚpropertyÚlistr  Úsetterrv  r{  r~  r  r   r—  r}   ÚAddressFamilyr£  ÚQUERY_CLASS_INr®  rÀ  rA  ÚIP4ÚIP6rß  rB  rL  ré  r   r   r   r   r    r    Ø  s&  † Ø×&Ñ&¨×(?Ñ(?À×AWÑAWÐY]×YoÑYoÐqu÷  rJñ  rJð  LP÷  Ldñ  Ldð  fj÷  f{ñ  f{ð  }A÷  }Uñ  }Uð  W[÷  Wlñ  Wlð  nr÷  nDñ  nDð  FJ÷  F\ñ  F\ð  ^b÷  ^tñ  ^tð  vz÷  vMñ  vMð  OS÷  Oeñ  Oeð  gk÷  g}ñ  g}ð  ~€JØ×&Ñ&¨×(=Ñ(=¸t×?UÑ?UÐW[×WkÑWkÐmq÷  nAñ  nAð  B€Lð )-Ø,0Ø(,Ø(,Ø+/Ø+/ØBFØBFØ48ØNRØ:>Ø=AØ %Ø59Ø,0Ø<@ò#r"à  ™ðr"ð # 5™/ðr"ð ! ™ð	r"ð
 ! ™ðr"ð $ C™=ðr"ð $ C™=ðr"ð # 8¨E°#°u°*Ñ,=Ñ#>Ñ?ðr"ð # 8¨E°#°u°*Ñ,=Ñ#>Ñ?ðr"ð    U¨DÐ 0Ñ1ðr"ð !)¨°3¸¸dÐ2CÀTÐ2IÑ)JÑ Kðr"ð +3°3©-ðr"ð .6°c©]ðr"ð ðr"ð !  e¨TÐ!1Ñ2ðr"ð  % S™Mð!r"ð" #(¨¨U°DÐ(8Ñ"9ð#r"ð" FJõ#r"ôhòô2+ô2ð
 ð˜˜c™ó ó ðð ‡^�^ð2˜x¨¨c°5¨jÑ(9Ñ:ð 2¸tó 2ó ð2ðz #ð z°ð z¸ô zðA cð A¨dô AðB¨ð B°ô Bô4ð&u #ð u°H¸cÀ3¸ZÈÐ=MÑ4Nð uÐSWô uð. ()ØØØòoàðoð �s‰mðoð
 ×$Ñ$ðoð ðoð ðoð ðoð ˜C ˜: tÐ+Ñ,ðoð 
õoð< GUò "<˜#ð "<¨3ð "<Àð "<Ð`hÐjmÐorÐisÐuyÐiyÑ`zð "<ð  @Dõ "<ðH HVò E<˜3ð E<¨Cð E<Àð E<ÐaiÐknÐpsÐjtÐvzÐjzÑa{ð E<ð  AEõ E<òN3ðK 5¨¨c¨¡?ð K¸3ð KÈXÐWZÐ\_ÐV`ÐbfÐVfÑMgð KÐlpô Kò87ôOñ.2˜Eð 2¨4÷ 2ð 2r   c                   ó$   • \ rS rSr% Sr\\S'   Srg)r   i–  z Data for A (IPv4 address) recordr\   r   N©r   r   r   r   r  rœ  Ú__annotations__r   r   r   r   r   r   –  s
   ‡ á*Ø
†Ir   r   c                   ó$   • \ rS rSr% Sr\\S'   Srg)r…   i›  z#Data for AAAA (IPv6 address) recordr\   r   Nrû  r   r   r   r…   r…   ›  s
   ‡ á-Ø
†Ir   r…   c                   ó.   • \ rS rSr% Sr\\S'   \\S'   Srg)r‹   i   z"Data for MX (mail exchange) recordr]   r^   r   N©	r   r   r   r   r  r)  rü  rœ  r   r   r   r   r‹   r‹      s   ‡ á,ØƒMØ†Mr   r‹   c                   ó$   • \ rS rSr% Sr\\S'   Srg)r�   i¦  zData for TXT (text) recordr&   r   N)r   r   r   r   r  rM   rü  r   r   r   r   r�   r�   ¦  s
   ‡ á$Ø
†Kr   r�   c                   ó8   • \ rS rSr% Sr\\S'   \\S'   \\S'   Srg)r˜   i«  z;Data for CAA (certification authority authorization) recordr_   r`   ra   r   Nrÿ  r   r   r   r˜   r˜   «  s   ‡ áEØƒMØ	ƒHØ†Jr   r˜   c                   ó$   • \ rS rSr% Sr\\S'   Srg)r›   i²  z&Data for CNAME (canonical name) recordrb   r   Nrû  r   r   r   r›   r›   ²  s
   ‡ á0Ø†Jr   r›   c                   óV   • \ rS rSr% Sr\\S'   \\S'   \\S'   \\S'   \\S'   \\S'   S	rg
)r£   i·  z0Data for NAPTR (naming authority pointer) recordrc   rd   re   r;   rf   rg   r   Nrÿ  r   r   r   r£   r£   ·  s$   ‡ á:ØƒJØƒOØƒJØƒLØƒKØÖr   r£   c                   ó$   • \ rS rSr% Sr\\S'   Srg)r¦   iÁ  z Data for NS (name server) recordrh   r   Nrû  r   r   r   r¦   r¦   Á  s
   ‡ á*Ø†Lr   r¦   c                   ó$   • \ rS rSr% Sr\\S'   Srg)r©   iÆ  zData for PTR (pointer) recordri   r   Nrû  r   r   r   r©   r©   Æ  s
   ‡ á'Ø†Jr   r©   c                   ó`   • \ rS rSr% Sr\\S'   \\S'   \\S'   \\S'   \\S'   \\S'   \\S	'   S
rg)r³   iË  z(Data for SOA (start of authority) recordrj   rk   rl   rm   rn   ro   rp   r   N)	r   r   r   r   r  rœ  rü  r)  r   r   r   r   r³   r³   Ë  s(   ‡ á2ØƒJØƒJØƒKØƒLØƒJØƒKØ†Lr   r³   c                   óB   • \ rS rSr% Sr\\S'   \\S'   \\S'   \\S'   Srg)	r¹   iÖ  zData for SRV (service) recordr]   rq   rr   rs   r   Nrÿ  r   r   r   r¹   r¹   Ö  s   ‡ á'ØƒMØƒKØ
ƒIØ†Kr   r¹   c                   óB   • \ rS rSr% Sr\\S'   \\S'   \\S'   \\S'   Srg)	r¿   iÞ  z9Data for TLSA (DANE TLS authentication) record - RFC 6698rt   ru   rv   rw   r   N)	r   r   r   r   r  r)  rü  rM   r   r   r   r   r¿   r¿   Þ  s   ‡ áCØƒOØƒMØÓØ Ö r   r¿   c                   ó8   • \ rS rSr% Sr\\S'   \\S'   \\S'   Sr	g)rÄ   iæ  z2Data for HTTPS (service binding) record - RFC 9460r]   rs   rS   r   N)
r   r   r   r   r  r)  rü  rœ  rô  r   r   r   r   rÄ   rÄ   æ  s   ‡ á<ØƒMØƒKØ†Lr   rÄ   c                   ó8   • \ rS rSr% Sr\\S'   \\S'   \\S'   Srg)rÉ   ií  z<Data for URI (Uniform Resource Identifier) record - RFC 7553r]   rq   rs   r   Nrÿ  r   r   r   rÉ   rÉ   í  s   ‡ áFØƒMØƒKØ†Kr   rÉ   c                   ón   • \ rS rSr% Sr\\S'   \\S'   \\S'   \\S'   \\	\
\\\\\\\\\\\\4   \S'   Srg	)
rå   iô  z'Represents a single DNS resource recordrÖ   r×   rØ   rÙ   r&   r   N)r   r   r   r   r  rœ  rü  r)  r   r   r…   r‹   r�   r˜   r›   rÄ   r£   r¦   r©   r³   r¹   r¿   rÉ   r   r   r   r   rå   rå   ô  sK   ‡ á1Ø
ƒIØ
ƒIØÓØ	ƒHØ
�˜^¨\¸=Ø˜°ÀØ˜m¨]¸MØ ð.ñ /ö /r   rå   c                   óJ   • \ rS rSr% Sr\\   \S'   \\   \S'   \\   \S'   Srg)ré   i   z8Represents a complete DNS query result with all sectionsrÚ   rÛ   rÜ   r   N)	r   r   r   r   r  rô  rå   rü  r   r   r   r   ré   ré      s#   ‡ áBØ�‰OÓØ�I‰ÓØ�Y‘Ör   ré   c                   óD   • \ rS rSr% Sr\\S'   \\   \S'   \\   \S'   Srg)Ú
HostResulti
  z%Result from gethostbyaddr() operationrÖ   ÚaliasesÚ	addressesr   N)	r   r   r   r   r  rœ  rü  rô  r   r   r   r   r  r  
  s   ‡ á/Ø
ƒIØ�#‰YÓØ�C‰yÖr   r  c                   ó4   • \ rS rSr% Sr\\S'   \\   \S'   Srg)ÚNameInfoResulti  z#Result from getnameinfo() operationr:   r;   r   N)	r   r   r   r   r  rœ  rü  r   r   r   r   r   r  r    s   ‡ á-Ø
ƒIØ�c‰]Ör   r  c                   óV   • \ rS rSr% Sr\\S'   \\S'   \\S'   \\S'   \\S'   \\S'   S	rg
)ÚAddrInfoNodei  z-Single address node from getaddrinfo() resultrÙ   re   r–  ÚsocktypeÚprotocolr\   r   N)	r   r   r   r   r  r)  rü  Útupler   r   r   r   r  r    s#   ‡ á7Ø	ƒHØƒJØƒKØƒMØƒMØ
†Kr   r  c                   ó8   • \ rS rSr% Sr\\S'   \\S'   \\S'   Srg)ÚAddrInfoCnamei!  z+CNAME information from getaddrinfo() resultrÙ   ÚaliasrÖ   r   Nrÿ  r   r   r   r  r  !  s   ‡ á5Ø	ƒHØƒJØ
†Ir   r  c                   ó:   • \ rS rSr% Sr\\   \S'   \\   \S'   Sr	g)ÚAddrInfoResulti(  z,Complete result from getaddrinfo() operationÚcnamesÚnodesr   N)
r   r   r   r   r  rô  r  rü  r  r   r   r   r   r  r  (  s   ‡ á6Ø�ÑÓØ�ÑÖr   r  r  c                 óv  • [        [        R                  " U R                  5      5      n/ n/ nSnU R                  U   [        R
                  :w  ac  UR                  [        [        R                  " U R                  U   5      5      5        US-  nU R                  U   [        R
                  :w  a  Mc  SnU R                  U   [        R
                  :w  aÚ  [        R                  " S[        R                  5      n[        R
                  [        R                  " U R                  U R                  U   U[        R                  5      :w  a=  UR                  [        [        R                  " U[        R                  5      5      5        US-  nU R                  U   [        R
                  :w  a  MÚ  [        XUS9$ )z.Parse c-ares hostent structure into HostResultr   r   r[   )rÖ   r  r  )r   r$   r€   Úh_nameÚ	h_aliasesrL   rO   Úh_addr_listrJ   r-   r{   r|   Ú
h_addrtyper  )r4   rÖ   r  r  rT   rÌ   s         r   r/   r/   1  sF  € ä”T—[’[ §¡Ó0Ó1€DØ€GØ€Ià	€AØ
×
Ñ
˜AÑ
¤$§)¡)Ó
+Ø�‰”y¤§¢¨W×->Ñ->¸qÑ-AÓ!BÓCÔDØ	ˆQ‰ˆð ×
Ñ
˜AÑ
¤$§)¡)Õ
+ð 	
€AØ
×
Ñ
˜aÑ
 ¤D§I¡IÓ
-Ü�hŠh�x¤×!6Ñ!6Ó7ˆÜ�9‰9œ×+Ò+¨G×,>Ñ,>À×@SÑ@SÐTUÑ@VÐX[Ô]a×]rÑ]rÓsÓsØ×ÑœY¤t§{¢{°3¼×8MÑ8MÓ'NÓOÔPØ	ˆQ‰ˆð	 ×
Ñ
˜aÑ
 ¤D§I¡IÕ
-ô ˜4¸IÑFÐFr   c                 ó¼   • [        [        R                  " U 5      5      nU[        R                  :w  a  [        [        R                  " U5      5      OSn[	        X#S9$ )z)Parse c-ares nameinfo into NameInfoResultN)r:   r;   )r   r$   r€   rL   r  )r:   r;   Únode_strÚservice_strs       r   r9   r9   F  s@   € äœŸš TÓ*Ó+€HØ5<ÄÇ	Á	Ó5I”)œDŸKšK¨Ó0Ô1Èt€KÜ˜xÑ=Ð=r   c           	      ó2  • U R                   nU R                  nU R                  nU R                  nU R                  nUR
                  U R                  :X  d   e[        R                  " S[        R                  5      nUR
                  [        R                  :X  aÚ  [        R                  n[        R                  " SU5      n[        R                  [        R                  " UR                   [        R"                  " UR$                  5      U[        R                  5      :w  aG  [        R&                  " U[        R                  5      [        R(                  " UR*                  5      4n	GO#[-        S5      eUR
                  [        R.                  :X  aï  [        R.                  n[        R                  " SU5      n[        R                  [        R                  " UR0                  [        R"                  " UR2                  5      U[        R                  5      :w  a\  [        R&                  " U[        R                  5      [        R(                  " UR4                  5      UR6                  UR8                  4n	O[-        S5      e[-        S5      e[;        XXsXIS9$ )z5Parse a single c-ares addrinfo node into AddrInfoNodezchar []rË  zfailed to convert IPv4 addressrÍ  zfailed to convert IPv6 addresszinvalid sockaddr family)rÙ   re   r–  r  r  r\   )Úai_ttlr�  rŸ  r   Úai_addrÚ	sa_familyrž  r$   rJ   r-   r{   r}   r~   ru  rL   r|   rÐ  rÎ  rÏ  r€   ÚntohsrÒ  rÊ   r„   rÔ  rÓ  rÕ  r×  rØ  r  )
Ú	ares_noderÙ   re   r  r  Úaddr_structrÇ  r–  rg  r\   s
             r   Úparse_addrinfo_noder.  M  sÃ  € à
×
Ñ
€CØ×Ñ€EØ×$Ñ$€HØ×$Ñ$€Hà×#Ñ#€KØ× Ñ  I×$7Ñ$7Ó7Ð7Ð7Ü	�Š�)œT×2Ñ2Ó	3€Bà×Ñ¤§¡Ó.Ü—‘ˆÜ�IŠIÐ+¨[Ó9ˆÜ�9‰9œ×+Ò+¨A¯L©L¼$¿.º.ÈÏÉÓ:TÐVXÔZ^×ZoÑZoÓpÓpä—K’K ¤D×$9Ñ$9Ó:¼F¿LºLÈÏÉÓ<TÐUŠDäÐ=Ó>Ð>Ø	×	Ñ	¤&§/¡/Ó	1Ü—‘ˆÜ�IŠIÐ,¨kÓ:ˆÜ�9‰9œ×+Ò+¨A¯M©M¼4¿>º>È!Ï+É+Ó;VÐXZÔ\`×\qÑ\qÓrÓrä—K’K ¤D×$9Ñ$9Ó:¼F¿LºLÈÏÉÓ<UÐWX×WfÑWfÐhi×hwÑhwÐx‰DäÐ=Ó>Ð>äÐ2Ó3Ð3ä˜C°VÐYaÑmÐmr   c           	      óÈ   • [        U R                  [        [        R                  " U R
                  5      5      [        [        R                  " U R                  5      5      S9$ )z7Parse a single c-ares addrinfo cname into AddrInfoCname)rÙ   r  rÖ   )r  rÙ   r   r$   r€   r  rÖ   )Ú
ares_cnames    r   Úparse_addrinfo_cnamer1  n  sB   € äØ�N‰NÜœŸš J×$4Ñ$4Ó5Ó6Ü”t—{’{ :§?¡?Ó3Ó4ñð r   c                 ó¸  • / n/ nU R                   nU[        R                  :w  a<  UR                  [	        U5      5        UR
                  nU[        R                  :w  a  M<  U R                  nU[        R                  :w  a<  UR                  [        U5      5        UR                  nU[        R                  :w  a  M<  [        R                  " U 5        [        XS9$ )z3Parse c-ares addrinfo structure into AddrInfoResult)r  r  )r  r$   rL   rO   r1  Únextr  r.  Úai_nextr-   Úares_freeaddrinfor  )Úares_addrinfor  r  Ú	cname_ptrÚnode_ptrs        r   rC   rC   w  s«   € à€FØ€Eà×$Ñ$€IØ
”t—y‘yÓ
 Ø�‰Ô*¨9Ó5Ô6Ø—N‘Nˆ	ð ”t—y‘yÕ
 ð ×"Ñ"€HØ
”d—i‘iÓ
Ø�‰Ô(¨Ó2Ô3Ø×#Ñ#ˆð ”d—i‘iÕ
ô 	×Ò˜=Ô)ä Ñ5Ð5r   )HÚARES_FLAG_USEVCÚARES_FLAG_PRIMARYÚARES_FLAG_IGNTCr·  ÚARES_FLAG_STAYOPENÚARES_FLAG_NOSEARCHÚARES_FLAG_NOALIASESÚARES_FLAG_NOCHECKRESPÚARES_FLAG_EDNSÚARES_FLAG_NO_DFLT_SVRÚARES_NI_NOFQDNÚARES_NI_NUMERICHOSTÚARES_NI_NAMEREQDÚARES_NI_NUMERICSERVÚARES_NI_DGRAMÚARES_NI_TCPÚARES_NI_UDPÚARES_NI_SCTPÚARES_NI_DCCPÚARES_NI_NUMERICSCOPEÚARES_NI_LOOKUPHOSTÚARES_NI_LOOKUPSERVICEÚARES_NI_IDNÚARES_NI_IDN_ALLOW_UNASSIGNEDÚ ARES_NI_IDN_USE_STD3_ASCII_RULESrz  ÚQUERY_TYPE_AÚQUERY_TYPE_AAAAÚQUERY_TYPE_ANYÚQUERY_TYPE_CAAÚQUERY_TYPE_CNAMEÚQUERY_TYPE_HTTPSÚQUERY_TYPE_MXÚQUERY_TYPE_NAPTRÚQUERY_TYPE_NSÚQUERY_TYPE_PTRÚQUERY_TYPE_SOAÚQUERY_TYPE_SRVÚQUERY_TYPE_TLSAÚQUERY_TYPE_TXTÚQUERY_TYPE_URIr÷  ÚQUERY_CLASS_CHAOSÚQUERY_CLASS_HSÚQUERY_CLASS_NONEÚQUERY_CLASS_ANYÚARES_VERSIONr   r    r   r
   ré   rå   r   r…   r‹   r�   r˜   r›   rÄ   r£   r¦   r©   r³   r¹   r¿   rÉ   r  r  r  r  r  )šÚ_caresr   r$   r   r-   Ú_cffi_backendr.   Úares_library_initÚARES_LIB_INIT_ALLrP  Úares_threadsafetyÚ r   Úutilsr   r   r	   Ú_versionr
   r�  r}   r÷   Úcollections.abcr   r   Údataclassesr   Útypingr   r   r   r   r   Úqueuer   r  rœ  r)  rø  rù  r9  r:  r;  r·  r<  r=  r>  r?  r@  rA  rB  rC  rD  rE  rF  rG  rH  rI  rJ  rK  rL  rM  rN  rO  rP  rz  rx   rQ  r�   rR  rë  rS  r’   rT  r™   rU  r†   rW  rœ   rX  r¤   rY  r§   rZ  rª   r[  r´   r\  rŒ   r^  rº   r]  rÀ   rV  rÅ   r_  rì  r÷  rí  r`  rî  ra  rï  rb  rð  rc  r€   Úares_versionrL   rd  ÚPYCARES_ADDRTTL_SIZEræ   r   r!   rü  Ú
def_externr+   r7   r<   rA   rE   rY   rÔ   r>   ró   rC  r    r   r…   r‹   r�   r˜   r›   r£   r¦   r©   r³   r¹   r¿   rÄ   rÉ   rå   ré   r  r  r  r  r  r/   r9   r.  r1  rC   Ú__all__r   r   r   Ú<module>ru     s  ðç ,Ð ,Û à×Ñ˜×.Ò.¨t×/EÑ/EÓFÓFÈ$É,Ù
Ð4Ó
5Ð5à×Ò×ÑÙ
Ð?Ó
@Ð@å ß 5Ñ 5Ý !ã Û Û ß .Ý !ß @× @Ý àˆC�ˆH�o€ØˆC��c˜3ÐÑ€ð ×&Ñ&€Ø×*Ñ*Ð Ø×&Ñ&€Ø×.Ñ.Ð Ø×,Ñ,Ð Ø×,Ñ,Ð Ø×.Ñ.Ð Ø×2Ñ2Ð Ø×$Ñ$€Ø×2Ñ2Ð ð ×$Ñ$€Ø×.Ñ.Ð Ø×(Ñ(Ð Ø×.Ñ.Ð Ø×"Ñ"€Ø×Ñ€Ø×Ñ€Ø× Ñ €Ø× Ñ €Ø×0Ñ0Ð Ø×,Ñ,Ð Ø×2Ñ2Ð Ø×Ñ€Ø#×@Ñ@Ð Ø#'×#HÑ#HÐ  ð ×&Ñ&€ð ×#Ñ#€Ø×)Ñ)€Ø×'Ñ'€Ø×'Ñ'€Ø×+Ñ+Ð Ø×%Ñ%€Ø×+Ñ+Ð Ø×%Ñ%€Ø×'Ñ'€Ø×'Ñ'€Ø×'Ñ'€Ø×'Ñ'€Ø×)Ñ)€Ø×+Ñ+Ð Ø×'Ñ'€ð ×#Ñ#€Ø×)Ñ)Ð Ø×'Ñ'€Ø×'Ñ'Ð Ø×%Ñ%€á˜Ÿš T×%6Ò%6°t·y±yÓ%AÓBÓC€ØÐ ô	�	ô 	ð ,.Ð �D˜˜i˜Ñ(Ó -ð ‡‚Óñ1ó ð1ð ‡‚Óñ&ó ð&ð  ‡‚Óñ&ó ð&ð  ‡‚Óñ&ó ð&ð, ‡‚Óñ&ó ð&ò"ò&DHòNT÷n/9ñ /9ñf ,Ó-Ð ÷x2ñ x2ð| ÷ð ó ðð ÷ð ó ðð ÷ð ó ðð
 ÷ð ó ðð ÷ð ó ðð ÷ð ó ðð ÷ð ó ðð ÷ð ó ðð ÷ð ó ðð ÷ð ó ðð ÷ð ó ðð ÷!ð !ó ð!ð ÷ð ó ðð ÷ð ó ðð ÷	/ð 	/ó ð	/ð ÷ ð  ó ð ð ÷ð ó ðð ÷ð ó ðð
 ÷ð ó ðð ÷ð ó ðð ÷ð ó ððG˜jô Gð*> ^ô >ðn lô nðB¨ô ð6 ^ô 6ð(X�r   