ó
    Ö›‘h\¿  ã                   ót  • S 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
  SSKJrJrJr  SSKJr  SSKJrJrJr  SS	KJrJrJr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%  SSK&J'r'J(r(  SSK)J*r*  SSK+J,r,  SSK-J.r.  S r/ " S S\R`                  5      r1\RD                  " SSSSSSSSS9r2\RD                  " SSSSS S!S"S#S9r3\RD                  " S$S%S&S'SS(SS)9r4\1" S\24\2\RB                  " S*5      \Rj                  " S+5      \Rl                  " S,5      \Rl                  " S-S.5      \Rn                  " S/S05      \Rp                  " S1S2S39\Rr                  " S45      \Rt                  " S55      \Rv                  " S65      \Rx                  " S7S85      \Rz                  " SS9S:5      \Rz                  " S;S<S=5      \Rz                  " S>S?S@5      \Rx                  " SA5      \R|                  " SB5      \R~                  " SCSDSE9\R€                  " SSFSG9\R‚                  " SHSISJ9\R„                  " SK\R†                  SL5      \Rˆ                  " SS/SMSNSO5      \RŠ                  " SP5      /\RŒ                  " SQSRSSST5      /\RB                  " SU5      \RB                  " SV5      /\RB                  " SW5      \RB                  " SX5      /\Rr                  " S5      /\RB                  " SY5      /SZ.S[9rG\1" S\34S\\R�                  " S]5      \3/0S[9rI\1" S^\44S^\4\RB                  " SYS_S`9\Rj                  " SaSbS`9\Rj                  " ScSdS`9\RŒ                  " SQSRSSSTSeS`9/0S[9rJ " Sf Sg\.R–                  5      rL " Sh Si\.R–                  5      rM " Sj Sk\.R–                  5      rN " Sl Sm\.R–                  5      rO " Sn So\.R–                  5      rP " Sp Sq\.R–                  5      rQ " Sr Ss\.R–                  5      rR " St Su\.R–                  5      rS " Sv Sw\.R–                  5      rTSxrU " Sy Sz\.R–                  5      rVS{rW " S| S}\.R–                  5      rXg)~z
Test cases for twisted.names.
é    N)ÚpartialÚreduce)ÚBytesIO)Úpack)ÚdeferÚerrorÚreactor)Úsucceed)ÚMemoryReactorClockÚStringTransportÚwaitUntilAllDisconnected)Ú	authorityÚclientÚcommonÚdnsÚserver)ÚResolver)ÚSOAÚMessageÚQueryÚRecord_AÚ
Record_SOAÚRRHeader)ÚDomainError)ÚSecondaryAuthorityÚSecondaryAuthorityService)ÚnativeString)ÚFilePath)Úunittestc                 óJ   • U S    Vs/ s H  oR                   PM     sn$ s  snf ©Nr   ©Úpayload)ÚresultsÚrs     ÚaC:\Users\psant\Downloads\Noiseback\school\venv\Lib\site-packages\twisted/names/test/test_names.pyÚjustPayloadr'   !   s    € Ø& qšzÓ*šz˜!�IŒI™zÑ*Ð*ùÒ*s   ˆ c                   ó   • \ rS rSrS rSrg)ÚNoFileAuthorityé%   c                 ó^   • [         R                  R                  U 5        XsU l        U l        g ©N)r   ÚResolverBaseÚ__init__ÚsoaÚrecords)Úselfr/   r0   s      r&   r.   ÚNoFileAuthority.__init__&   s$   € ä×Ñ×$Ñ$ TÔ*Ø!$ÐˆŒ�$•,ó    )r0   r/   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r.   Ú__static_attributes__© r3   r&   r)   r)   %   s   † õ.r3   r)   ó   test-domain.comzroot.test-domain.coméd   éÒ  iæ  éH?&é   é   ©ÚmnameÚrnameÚserialÚrefreshÚminimumÚexpireÚretryÚttls   93.84.28.in-addr.arpaéx   i1Ô  i~  éÎª é   é   úmy-domain.coms   postmaster.test-domain.comé‚   i90  i?B )rA   rB   rC   rD   rE   rF   rG   s	   127.0.0.1s   39.28.189.39ó#   v=spf1 mx/30 mx:example.org/30 -alló   v=spf1 +mx a: coloó   .example.com/28 -all not validé
   úhost.test-domain.comó   Linuxó   A Fast One, Dontcha know)ÚosÚcpus   canonical.name.coms   mailbox.test-domain.coms   mail.group.someplaceó   A First piece of Textó   a SecoNd pieces
   ABCD::4321r3   é   s	   0:0069::0s   some.network.tldé   s$   0:5634:1294:AFCB:56AC:48EF:34C3:01FFs   tra.la.la.netó+   Some more text, haha!  Yes.     Still here?s   mail.redirect.or.whatevers
   r mail boxs
   e mail box)ÚrmailbxÚemailbxs   afsdb.test-domain.com)ÚsubtypeÚhostnames   whatever.i.dunnos   some.more.text)ÚmboxÚtxts   12.54.78.12ó   þÁ ó   uó   sip+E2Uó!   !^.*$!sip:information@domain.tld!s'   AF43:5634:1294:AFCB:56AC:48EF:34C3:01FFé  éÿ?  éªª  s   some.other.place.fooló   123.242.1.5ó   0.255.0.255s   255.255.255.254s   0.0.0.0s   1.2.3.4)r:   s   http.tcp.test-domain.comó   host.test-domain.coms   host-two.test-domain.coms   cname.test-domain.coms   anothertest-domain.com©r/   r0   s   123.93.84.28.in-addr.arpas   test.host-reverse.lookup.coms   my-domain.comÚ1S©rH   s
   ns1.domains   2Ms
   ns2.domainÚ3HÚ4Dc                   óÆ   • \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r S r!S r"g!)"ÚServerDNSTestsé˜   z'
Test cases for DNS server and client.
c                 ó.  • [         R                  " [        [        [        /SS9U l        [        R                  " U R
                  5      n [        R                  " SU R
                  SS9nU R                  UR                  5        UR                  5       R                  n [        R                  " X1SS9nU R                  UR                  5         X l        X@l        [&        R(                  " SU4/S9U l        g ! [        R                    a     Of = fMÌ  )Né   )Úverboser   ú	127.0.0.1)Ú	interface©Úservers)r   ÚDNSServerFactoryÚtest_domain_comÚreverse_domainÚmy_domain_comÚfactoryr   ÚDNSDatagramProtocolr	   Ú	listenTCPÚ
addCleanupÚstopListeningÚgetHostÚportÚ	listenUDPr   ÚCannotListenErrorÚlistenerTCPÚlistenerUDPr   r   Úresolver)r1   Úpr‰   r†   rŠ   s        r&   ÚsetUpÚServerDNSTests.setUp�   sê   € Ü×.Ò.Üœn¬mÐ<Àañ
ˆŒô ×#Ò# D§L¡LÓ1ˆàÜ!×+Ò+¨A¨t¯|©|À{ÑSˆKð �O‰O˜K×5Ñ5Ô6Ø×&Ñ&Ó(×-Ñ-ˆDðÜ%×/Ò/°À;ÑO�ð —‘ × 9Ñ 9Ô:Øà&ÔØ&ÔÜŸš°+¸tÐ1DÐ0EÑFˆ�øô ×*Ñ*ó Ùðúñ s   Â!C; Ã;DÄDc                 óÄ   • U R                   R                  SS  H  nUR                  R                  5         M     [	        [
        U R                   R                  SS 5      $ )z]
Clean up any server connections associated with the
L{DNSServerFactory} created in L{setUp}
N)r€   ÚconnectionsÚ	transportÚloseConnectionr   r	   )r1   Úconns     r&   ÚtearDownÚServerDNSTests.tearDown»   sK   € ð —L‘L×,Ñ,©QÓ/ˆDØ�N‰N×)Ñ)Ö+ñ 0ô (¬°·±×1IÑ1IÉ!Ð1LÓMÐMr3   c                 ó:   ^ ^• UU 4S jnUR                  U5        U$ )aô  
Assert that the DNS response C{querying} will eventually fire with
contains exactly a certain collection of records.

@param querying: A L{Deferred} returned from one of the DNS client
    I{lookup} methods.

@param expectedRecords: A L{list} of L{IRecord} providers which must be
    in the response or the test will be failed.

@return: A L{Deferred} that fires when the assertion has been made.  It
    fires with a success result if the assertion succeeds and with a
    L{Failure} if it fails.
c                 ód   >• [        U 5      nTR                  [        T5      [        U5      5        g r,   )r'   ÚassertEqualÚset)ÚresponseÚreceivedRecordsÚexpectedRecordsr1   s     €€r&   ÚcheckResultsÚ.ServerDNSTests.namesTest.<locals>.checkResultsØ   s'   ø€ Ü)¨(Ó3ˆOØ×ÑœS Ó1´3°Ó3GÕHr3   )ÚaddCallback)r1   Úqueryingrœ   r�   s   ` ` r&   Ú	namesTestÚServerDNSTests.namesTestÈ   s   ù€ ö 	Ið 	×Ñ˜\Ô*Øˆr3   c                 ó€   • U R                  U R                  R                  S5      [        R                  " SSS9/5      $ )z"Test simple DNS 'A' record queriesútest-domain.comrx   r=   ro   ©r¡   r‹   ÚlookupAddressr   r   ©r1   s    r&   Útest_addressRecord1Ú"ServerDNSTests.test_addressRecord1ß   s7   € à�~‰~Ø�M‰M×'Ñ'Ð(9Ó:Ü�\Š\˜+¨8Ñ4Ð5ó
ð 	
r3   c           	      ó¨   • U R                  U R                  R                  S5      [        R                  " SSS9[        R                  " SSS9/5      $ )z1Test DNS 'A' record queries with multiple answersrS   z123.242.1.5r=   ro   z0.255.0.255r¥   r§   s    r&   Útest_addressRecord2Ú"ServerDNSTests.test_addressRecord2æ   sG   € à�~‰~Ø�M‰M×'Ñ'Ð(>Ó?ä—’˜]°Ñ9Ü—’˜]°Ñ9ðó
ð 	
r3   c           	      ó¨   • U R                  U R                  R                  S5      [        R                  " SSS9[        R                  " SSS9/5      $ )z+Test DNS 'A' record queries with edge caseszhost-two.test-domain.comz255.255.255.254r=   ro   ú0.0.0.0r¥   r§   s    r&   Útest_addressRecord3Ú"ServerDNSTests.test_addressRecord3ð   sH   € à�~‰~Ø�M‰M×'Ñ'Ð(BÓCä—’Ð.°HÑ=Ü—’˜Y¨HÑ5ðó
ð 	
r3   c                 ób   • U R                  U R                  R                  S5      [        /5      $ )zTest DNS 'SOA' record queriesr¤   )r¡   r‹   ÚlookupAuthorityÚ
soa_recordr§   s    r&   Útest_authorityÚServerDNSTests.test_authorityú   s*   € à�~‰~Ø�M‰M×)Ñ)Ð*;Ó<¼z¸ló
ð 	
r3   c           
      óÒ   • U R                  U R                  R                  S5      [        R                  " SSSS9[        R
                  " SSS9[        R
                  " SSS9/5      $ )zs
The DNS client can issue an MX query and receive a response including
an MX record as well as any A record hints.
r:   rR   rl   r=   ro   rj   rk   )r¡   r‹   ÚlookupMailExchanger   Ú	Record_MXr   r§   s    r&   Útest_mailExchangeRecordÚ&ServerDNSTests.test_mailExchangeRecord   sZ   € ð
 �~‰~Ø�M‰M×,Ñ,Ð-?Ó@ä—’˜bÐ"9¸xÑHÜ—’˜^°Ñ:Ü—’˜^°Ñ:ðó
ð 	
r3   c                 ó€   • U R                  U R                  R                  S5      [        R                  " SSS9/5      $ )zTest DNS 'NS' record queriesr¤   z39.28.189.39r=   ro   )r¡   r‹   ÚlookupNameserversr   Ú	Record_NSr§   s    r&   Útest_nameserverÚServerDNSTests.test_nameserver  s7   € à�~‰~Ø�M‰M×+Ñ+Ð,=Ó>Ü�]Š]˜>¨xÑ8Ð9ó
ð 	
r3   c           	      ó‚   • U R                  U R                  R                  S5      [        R                  " SSSS9/5      $ )zTest DNS 'HINFO' record queriesr¤   rT   rU   r=   )rV   rW   rH   )r¡   r‹   ÚlookupHostInfor   ÚRecord_HINFOr§   s    r&   Ú
test_HINFOÚServerDNSTests.test_HINFO  sA   € à�~‰~Ø�M‰M×(Ñ(Ð):Ó;ä× Ò ØÐ%@Àhñðó
ð 	
r3   c                 ó€   • U R                  U R                  R                  S5      [        R                  " SSS9/5      $ )zTest DNS 'PTR' record queriesz123.93.84.28.in-addr.arpaztest.host-reverse.lookup.comrJ   ro   )r¡   r‹   ÚlookupPointerr   Ú
Record_PTRr§   s    r&   Útest_PTRÚServerDNSTests.test_PTR   s8   € à�~‰~Ø�M‰M×'Ñ'Ð(CÓDÜ�^Š^Ð:ÀÑIÐJó
ð 	
r3   c                 ó€   • U R                  U R                  R                  S5      [        R                  " SSS9/5      $ )zTest DNS 'CNAME' record queriesr¤   zcanonical.name.comr=   ro   )r¡   r‹   ÚlookupCanonicalNamer   ÚRecord_CNAMEr§   s    r&   Ú
test_CNAMEÚServerDNSTests.test_CNAME'  s:   € à�~‰~Ø�M‰M×-Ñ-Ð.?Ó@Ü×ÒÐ2¸ÑAÐBó
ð 	
r3   c                 ó€   • U R                  U R                  R                  S5      [        R                  " SSS9/5      $ )zTest DNS 'MB' record queriesr¤   zmailbox.test-domain.comr=   ro   )r¡   r‹   ÚlookupMailBoxr   Ú	Record_MBr§   s    r&   Útest_MBÚServerDNSTests.test_MB.  s8   € à�~‰~Ø�M‰M×'Ñ'Ð(9Ó:Ü�]Š]Ð4¸(ÑCÐDó
ð 	
r3   c                 ó€   • U R                  U R                  R                  S5      [        R                  " SSS9/5      $ )zTest DNS 'MG' record queriesr¤   zmail.group.someplacer=   ro   )r¡   r‹   ÚlookupMailGroupr   Ú	Record_MGr§   s    r&   Útest_MGÚServerDNSTests.test_MG5  s8   € à�~‰~Ø�M‰M×)Ñ)Ð*;Ó<Ü�]Š]Ð1°xÑ@ÐAó
ð 	
r3   c                 ó€   • U R                  U R                  R                  S5      [        R                  " SSS9/5      $ )zTest DNS 'MR' record queriesr¤   zmail.redirect.or.whateverr=   ro   )r¡   r‹   ÚlookupMailRenamer   Ú	Record_MRr§   s    r&   Útest_MRÚServerDNSTests.test_MR<  s8   € à�~‰~Ø�M‰M×*Ñ*Ð+<Ó=Ü�]Š]Ð6¸HÑEÐFó
ð 	
r3   c           	      ó‚   • U R                  U R                  R                  S5      [        R                  " SSSS9/5      $ )zTest DNS 'MINFO' record queriesr¤   z
r mail boxz
e mail boxr=   )r]   r^   rH   )r¡   r‹   ÚlookupMailboxInfor   ÚRecord_MINFOr§   s    r&   Ú
test_MINFOÚServerDNSTests.test_MINFOC  s@   € à�~‰~Ø�M‰M×+Ñ+Ð,=Ó>ä× Ò Ø(°,ÀHñðó
ð 	
r3   c                 ó†   • U R                  U R                  R                  S5      [        R                  " SSSSSS9/5      $ )zTest DNS 'SRV' record querieszhttp.tcp.test-domain.comrg   rh   ri   úsome.other.place.foolr=   ro   )r¡   r‹   ÚlookupServicer   Ú
Record_SRVr§   s    r&   Útest_SRVÚServerDNSTests.test_SRVN  s>   € à�~‰~Ø�M‰M×'Ñ'Ð(BÓCÜ�^Š^˜C ¨Ð/FÈHÑUÐVó
ð 	
r3   c           	      ó‚   • U R                  U R                  R                  S5      [        R                  " SSSS9/5      $ )zTest DNS 'AFSDB' record queriesr¤   r?   zafsdb.test-domain.comr=   )r_   r`   rH   )r¡   r‹   ÚlookupAFSDatabaser   ÚRecord_AFSDBr§   s    r&   Ú
test_AFSDBÚServerDNSTests.test_AFSDBU  sA   € à�~‰~Ø�M‰M×+Ñ+Ð,=Ó>ä× Ò ØÐ(?ÀXñðó
ð 	
r3   c           	      ó‚   • U R                  U R                  R                  S5      [        R                  " SSSS9/5      $ )zTest DNS 'RP' record queriesr¤   zwhatever.i.dunnozsome.more.textr=   )ra   rb   rH   )r¡   r‹   ÚlookupResponsibilityr   Ú	Record_RPr§   s    r&   Útest_RPÚServerDNSTests.test_RP`  s?   € à�~‰~Ø�M‰M×.Ñ.Ð/@ÓAä—’Ø+Ð1AÀxñðó
ð 	
r3   c           	      óª   • U R                  U R                  R                  S5      [        R                  " SSSS9[        R                  " SSS9/5      $ )zTest DNS 'TXT' record queriesr¤   rX   rY   r=   ro   r\   )r¡   r‹   Ú
lookupTextr   Ú
Record_TXTr§   s    r&   Útest_TXTÚServerDNSTests.test_TXTk  sR   € à�~‰~Ø�M‰M×$Ñ$Ð%6Ó7ä—’Ø,Ð.?ÀXñô —’ØCÈñð	ó

ð 
	
r3   c           
      óª   • U R                  U R                  R                  S5      [        R                  " SSS9[        R                  " SSSS9/5      $ )z8
L{DNSServerFactory} can serve I{SPF} resource records.
r¤   rO   r=   ro   rP   rQ   )r¡   r‹   ÚlookupSenderPolicyr   Ú
Record_SPFr§   s    r&   Útest_spfÚServerDNSTests.test_spfy  sQ   € ð �~‰~Ø�M‰M×,Ñ,Ð->Ó?ä—’ÐEÈ8ÑTÜ—’Ø*Ø5Ø ñðó

ð 
	
r3   c           
      ó    • U R                  U R                  R                  S5      [        R                  " S[
        R                  SSS9/5      $ )zTest DNS 'WKS' record queriesr¤   z12.54.78.12rc   r=   ro   )r¡   r‹   ÚlookupWellKnownServicesr   Ú
Record_WKSÚsocketÚIPPROTO_TCPr§   s    r&   Útest_WKSÚServerDNSTests.test_WKS‰  sI   € à�~‰~Ø�M‰M×1Ñ1Ð2CÓDä—’Ø!Ü×&Ñ&Ø3Ø ñ	ðó

ð 
	
r3   c                 ó^  • [         R                   " [        5      n[        R                  Ul        U R	                  U R
                  R                  S5      U[        R                  " SSS9[        R                  " SSS9[        R                  " SSS9[        R                  " S	S
SSSS9/5      $ )NrM   ú1.2.3.4rn   ro   z
ns1.domainÚ2Mz
ns2.domainrp   rg   rh   ri   rä   rq   )ÚcopyÚmy_soarF   rH   r¡   r‹   ÚlookupAllRecordsr   r   r½   ræ   )r1   Ú
result_soas     r&   Útest_someRecordsWithTTLsÚ'ServerDNSTests.test_someRecordsWithTTLs—  s…   € Ü—Y’YœvÓ&ˆ
ÜŸ™ˆ
ŒØ�~‰~Ø�M‰M×*Ñ*¨?Ó;àÜ—’˜Y¨DÑ1Ü—’˜l°Ñ5Ü—’˜l°Ñ5Ü—’˜s E¨5Ð2IÈtÑTðó	
ð 		
r3   c                 ó€   • U R                  U R                  R                  S5      [        R                  " SSS9/5      $ )z%Test DNS 'AAAA' record queries (IPv6)r¤   z'AF43:5634:1294:AFCB:56AC:48EF:34C3:01FFr=   ro   )r¡   r‹   ÚlookupIPV6Addressr   ÚRecord_AAAAr§   s    r&   Ú	test_AAAAÚServerDNSTests.test_AAAA¥  s8   € à�~‰~Ø�M‰M×+Ñ+Ð,=Ó>Ü�_Š_ÐFÈHÑUÐVó
ð 	
r3   c                 óÜ   • U R                  U R                  R                  S5      [        R                  " SSSSS9[        R                  " SSS	SS9[        R                  " S
SSSS9/5      $ )z#Test DNS 'A6' record queries (IPv6)r¤   r   z
ABCD::4321Ú r=   ro   rZ   z	0:0069::0zsome.network.tldr[   z$0:5634:1294:AFCB:56AC:48EF:34C3:01FFztra.la.la.net)r¡   r‹   ÚlookupAddress6r   Ú	Record_A6r§   s    r&   Útest_A6ÚServerDNSTests.test_A6¬  sh   € à�~‰~Ø�M‰M×(Ñ(Ð):Ó;ä—’˜a ¨r°xÑ@Ü—’˜b +Ð/AÀxÑPÜ—’ØØ:Ø#Ø ñ	ð	ó
ð 	
r3   c                 ó’  • [         R                  n[        [        R                  [
        R                  R                  5       5       Vs/ s H  n[        R                  " U5      PM     nnU H  nUR                  b  M  Xl	        M     U R                  U R                  R                  S5      R                  S 5      U5      $ s  snf )z)
Test DNS 'AXFR' queries (Zone transfer)
r¤   c                 ó   • U S   S S 4$ )Nr   éÿÿÿÿr9   )r%   s    r&   Ú<lambda>Ú2ServerDNSTests.test_zoneTransfer.<locals>.<lambda>É  s   € ˜1˜Q™4  ˜9™,r3   )r³   rF   r   ÚoperatorÚaddr}   r0   Úvaluesr  rH   r¡   r‹   Ú
lookupZonerŸ   )r1   Údefault_ttlr%   r$   s       r&   Útest_zoneTransferÚ ServerDNSTests.test_zoneTransfer¼  s¦   € ô !×'Ñ'ˆä"(¬¯©´×7NÑ7N×7UÑ7UÓ7WÔ"Xó
Ú"X˜QŒD�IŠI�aŽLÑ"Xð 	ð 
ó ˆAØ�u‰u‹}Ø#–ñ ð �~‰~Ø�M‰M×$Ñ$Ð%6Ó7×CÑCÙ&óð ó	
ð 	
ùò
s   Á	 Cc                 ót   • [        S/S9nU R                  UR                  S5      [        R                  5      $ )z]
A failed AXFR TCP connection errbacks the L{Deferred} returned
from L{Resolver.lookupZone}.
)znameserver.invalidé5   rz   zimpossible.invalid)r   ÚassertFailurer   r   ÚDNSLookupError)r1   r‹   s     r&   Ú test_zoneTransferConnectionFailsÚ/ServerDNSTests.test_zoneTransferConnectionFailsÎ  s<   € ô
 Ð%?Ð$@ÑAˆØ×!Ñ!Ø×ÑÐ 4Ó5´u×7KÑ7Kó
ð 	
r3   c                 ó€   • U R                  U R                  R                  S5      [        R                  " SSS9/5      $ )z6Tests that unrelated zones don't mess with each other.zanothertest-domain.comr  r=   ro   r¥   r§   s    r&   Útest_similarZonesDontInterfereÚ-ServerDNSTests.test_similarZonesDontInterfereØ  s7   € à�~‰~Ø�M‰M×'Ñ'Ð(@ÓAÜ�\Š\˜)¨Ñ2Ð3ó
ð 	
r3   c                 óˆ   • U R                  U R                  R                  S5      [        R                  " SSSSSSS9/5      $ )	z"
Test DNS 'NAPTR' record queries.
r¤   r;   rR   rd   re   rf   r=   ro   )r¡   r‹   ÚlookupNamingAuthorityPointerr   ÚRecord_NAPTRr§   s    r&   Ú
test_NAPTRÚServerDNSTests.test_NAPTRß  sM   € ð �~‰~Ø�M‰M×6Ñ6Ð7HÓIä× Ò ØØØØØ8Ø ñð	ó
ð 	
r3   )r€   r‰   rŠ   r‹   N)#r4   r5   r6   r7   Ú__doc__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+  r0  r8   r9   r3   r&   rs   rs   ˜   sš   † ñòGò<Nòò.
ò
ò
ò
ò
ò
ò	
ò
ò
ò
ò
ò
ò	
ò
ò	
ò	
ò
ò
ò 
ò
ò
ò
ò 
ò$
ò
õ
r3   rs   c                   ó   • \ rS rSrS rSrg)ÚHelperTestsiò  c                 óÊ   • U R                  5       n[        R                  " U5      n[        S5       H.  n[        R                  " U5      nU R	                  X$:  5        UnM0     g )Né   )Úmktempr   Ú	getSerialÚrangeÚ
assertTrue)r1   ÚfÚaÚiÚbs        r&   Útest_serialGeneratorÚ HelperTests.test_serialGeneratoró  sN   € Ø�K‰K‹MˆÜ×Ò Ó"ˆÜ�r–ˆAÜ×#Ò# AÓ&ˆAØ�O‰O˜A™EÔ"ØŠAò r3   r9   N)r4   r5   r6   r7   r?  r8   r9   r3   r&   r4  r4  ò  s   † õr3   r4  c                   ó2   • \ rS rSrS rS rS rS rS rSr	g)	Ú	AXFRTestsiü  c                 óh  • S U l         [        R                  " 5       U l        U R                  R	                  U R
                  5        [        R                  " SU R                  5      U l        [        R                  " S[        R                  [        R                  SS[        R                  " SSSSSSS	S
S9S9U l        U R                  [        R                  " S[        R                  [        R                  SS[        R                   " SSS9S9[        R                  " S[        R"                  [        R                  SS[        R$                  " SSSS9S9[        R                  " S[        R&                  [        R                  SS[        R(                  " SSS9S9U R                  /U l        g )Nú	fooby.comi€Q Fzhooj.fooby.comr;   éÈ   i,  i�  iô  iX  )rA   rB   rC   rD   rG   rF   rE   rH   ©ÚnameÚtypeÚclsrH   Úauthr#   é¼  úns.twistedmatrix.com©rG  rH   rR   zmail.mv3d.com)Ú
preferenceÚexchangerH   z64.123.27.105)ÚaddressrH   )r$   r   ÚDeferredÚdrŸ   Ú_gotResultsr   ÚAXFRControllerÚ
controllerr   r   r   ÚINr   r/   ÚNSr½   ÚMXr¸   ÚAr   r0   r§   s    r&   r�   ÚAXFRTests.setUpý  sH  € ØˆŒÜ—’Ó!ˆŒØ�‰×Ñ˜4×+Ñ+Ô,Ü ×/Ò/°¸T¿V¹VÓDˆŒä—<’<ØÜ—‘Ü—‘ØØÜ—N’NØ!Ø&ØØØØØØñ	ñ
ˆŒð& �H‰HÜ�LŠLØ Ü—V‘VÜ—F‘FØØÜŸšÐ+AÀsÑKñô �LŠLØ Ü—V‘VÜ—F‘FØØÜŸš°¸oÐSVÑWñô �LŠLØ Ü—U‘UÜ—F‘FØØÜŸš¨_À#ÑFñð �H‰Hð5
ˆ�r3   c                 ó:   • [         R                  " SSSSSSSSSS9	$ )Néç  r?   r   ©	ÚidÚanswerÚopCodeÚrecDesÚrecAvrJ  ÚrCodeÚtruncÚmaxSize)r   r   r§   s    r&   Ú_makeMessageÚAXFRTests._makeMessage2  s.   € ä�{Š{ØØØØØØØØØñ

ð 
	
r3   c                 ó>  • U R                  5       n[        R                  " S[        R                  [        R                  5      /Ul        U R                  Ul        U R                  R                  US 5        U R                  U R                  U R                  5        g )NrD  )rf  r   r   ÚAXFRrV  Úqueriesr0   ÚanswersrU  ÚmessageReceivedr˜   r$   )r1   Úms     r&   Útest_bindAndTNamesStyleÚ!AXFRTests.test_bindAndTNamesStyle@  sf   € à×ÑÓˆÜ—Y’Y˜{¬C¯H©H´c·f±fÓ=Ð>ˆŒ	Ø—L‘LˆŒ	Ø�‰×'Ñ'¨¨4Ô0Ø×Ñ˜Ÿ™ t§|¡|Õ4r3   c                 ó   • Xl         g r,   )r$   )r1   Úresults     r&   rS  ÚAXFRTests._gotResultsH  s   € Ø�r3   c                 ó"  • U R                   S S  nU(       aS  U R                  5       n/ Ul        UR                  S5      /Ul        U R
                  R                  US 5        U(       a  MS  U R                  U R                  U R                   5        g r!   )	r0   rf  rj  Úpoprk  rU  rl  r˜   r$   )r1   r0   rm  s      r&   Útest_DJBStyleÚAXFRTests.test_DJBStyleK  sn   € à—,‘,™q�/ˆÞØ×!Ñ!Ó#ˆAØˆAŒIØ Ÿ™ Q›Ð(ˆAŒIØ�O‰O×+Ñ+¨A¨tÔ4÷	 ˆgð
 	×Ñ˜Ÿ™ t§|¡|Õ4r3   )rU  rR  r0   r$   r/   N)
r4   r5   r6   r7   r�   rf  rn  rS  ru  r8   r9   r3   r&   rB  rB  ü  s   † ò3
òj
ò5òõ5r3   rB  c                   ó    • \ rS rSrS rS rSrg)ÚResolvConfHandlingTestsiV  c                 óº   • U R                  5       n[        R                  " US9nU R                  UR                  S/5        UR
                  R                  5         g )N©Úresolv©rx   r%  )r7  r   r   r˜   Ú
dynServersÚ
_parseCallÚcancel©r1   Ú
resolvConfr%   s      r&   Útest_missingÚ$ResolvConfHandlingTests.test_missingW  sC   € Ø—[‘[“]ˆ
Ü�OŠO :Ñ.ˆØ×Ñ˜Ÿ™Ð(9Ð':Ô;Ø	�‰×ÑÕr3   c                 óî   • U R                  5       n[        US5      R                  5         [        R                  " US9nU R                  UR                  S/5        UR                  R                  5         g )NÚwrz  r|  )	r7  ÚopenÚcloser   r   r˜   r}  r~  r  r€  s      r&   Ú
test_emptyÚ"ResolvConfHandlingTests.test_empty]  sV   € Ø—[‘[“]ˆ
ÜˆZ˜Ó×#Ñ#Ô%Ü�OŠO :Ñ.ˆØ×Ñ˜Ÿ™Ð(9Ð':Ô;Ø	�‰×ÑÕr3   r9   N)r4   r5   r6   r7   r‚  rˆ  r8   r9   r3   r&   rx  rx  V  s   † òõr3   rx  c                   óB   • \ rS rSrSrS rS rS rS rS r	S r
S	 rS
rg)ÚAuthorityTestsie  zg
Tests for the basic response record selection code in L{FileAuthority}
(independent of its fileness).
c                 ó´   • [         nSUR                  S   -   nU R                  UR                  U5      5      nU R	                  UR
                  [        5        g)a  
L{FileAuthority} lookup methods errback with L{DomainError} if
the requested C{name} shares a common suffix with its zone but
is not actually a descendant of its zone, in terms of its
sequence of DNS name labels. eg www.the-example.com has
nothing to do with the zone example.com.
ó   nonexistent.prefix-r   N)r}   r/   ÚfailureResultOfr¦   ÚassertIsInstanceÚvaluer   )r1   Ú
testDomainÚtestDomainNamer;  s       r&   Ú'test_domainErrorForNameWithCommonSuffixÚ6AuthorityTests.test_domainErrorForNameWithCommonSuffixk  sK   € ô %ˆ
Ø/°*·.±.ÀÑ2CÑCˆØ× Ñ  ×!9Ñ!9¸.Ó!IÓJˆØ×Ñ˜aŸg™g¤{Õ3r3   c                 ó>  • [        [        R                  R                  [        4[        R                  R                  [        [        R
                  " S5      /0S9nU R                  UR                  " [        R                  R                  5      5      u  p!nU R                  U/ 5        U R                  U[        R                  " [        R                  R                  [        R                  [        R                  [        SS9/5        U R                  U/ 5        g)zù
If a L{FileAuthority} has a zone which includes an I{NS} record for a
particular name and that authority is asked for another record for the
same name which does not exist, the I{NS} record is not included in the
authority section of the response.
r  rm   T©rH   r#   rJ  N)r)   r³   rA   rG  r   r½   ÚsuccessResultOfr¦   r˜   r   ÚTYPErF   )r1   r   r_  Ú
additionals       r&   Útest_recordMissingÚ!AuthorityTests.test_recordMissingx  sæ   € ô $Ü×!Ñ!×&Ñ&¬
Ð3ä× Ñ ×%Ñ%ÜÜ—M’M )Ó,ð(ðñ
ˆ	ð )-×(<Ñ(<Ø×#Ò#¤J×$4Ñ$4×$9Ñ$9Ó:ó)
Ñ%ˆ˜:ð 	×Ñ˜ Ô$Ø×ÑØä—’Ü×$Ñ$×)Ñ)Ü—O‘OÜ"×)Ñ)Ü&Øñðô	
ð 	×Ñ˜ RÕ(r3   c           	      óú   • [         nSUR                  S   -   n[        [        R                  5      S-   nU R                  UR                  [        X#S95      5      nU R                  UR                  [        5        g)zp
Requesting a record of unknown type where no records exist for the name
in question results in L{DomainError}.
r�  r   r?   ©rG  rH  N)r}   r/   Úmaxr   ÚtypeToMethodrŽ  Úqueryr   r�  r�  r   )r1   r‘  r’  ÚunknownTyper;  s        r&   Útest_unknownTypeNXDOMAINÚ'AuthorityTests.test_unknownTypeNXDOMAINš  sj   € ô
 %ˆ
Ø/°*·.±.ÀÑ2CÑCˆÜœ&×-Ñ-Ó.°Ñ2ˆØ× Ñ Ø×ÑœU¨ÑIÓJó
ˆð 	×Ñ˜aŸg™g¤{Õ3r3   c           	      ó¾   • [        [        R                  5      S-   nU R                  [        R                  [        SUS95      5      u  p#nU R                  U/ 5        g)zx
Requesting a record of unknown type where other records exist for the
name in question results in an empty answer set.
r?   rM   r�  N)rž  r   rŸ  r—  r   r   r   r˜   )r1   r¡  r_  r   r™  s        r&   Útest_unknownTypeMissingÚ&AuthorityTests.test_unknownTypeMissing§  sU   € ô
 œ&×-Ñ-Ó.°Ñ2ˆØ(,×(<Ñ(<Ü×Ñ¤¨?ÀÑ MÓNó)
Ñ%ˆ˜:ð 	×Ñ˜ Õ$r3   c                 óÜ  • S[         R                  R                  -   n[        R                  " S5      n[        [         R                  R                  [         4UU/0S9n[        XA5      " U5      nU R                  U5      u  pdnU R                  U/ 5        U R                  U[        R                  " U[        R                  [         R                  USS9/5        U R                  U/ 5        g)zÏ
Create an authority and make a request against it.  Then verify that the
result is a referral, including no records in the answers or additional
sections, but with an I{NS} record in the authority section.
s   example.r  rm   Fr–  N)r³   rA   rG  r   r½   r)   Úgetattrr—  r˜   r   rW  rF   )r1   ÚmethodÚ	subdomainÚ
nameserverr   rR  r_  r™  s           r&   Ú_referralTestÚAuthorityTests._referralTest²  sÙ   € ð  ¤*×"2Ñ"2×"7Ñ"7Ñ7ˆ	Ü—]’] 9Ó-ˆ
Ü#Ü×!Ñ!×&Ñ&¬
Ð3àØððñ
ˆ	ô �IÔ& yÓ1ˆØ(,×(<Ñ(<¸QÓ(?Ñ%ˆ˜:Ø×Ñ˜ Ô$Ø×ÑØä—’ØÜ—F‘FÜ"×)Ñ)Ø&Øñðô	
ð 	×Ñ˜ RÕ(r3   c                 ó&   • U R                  S5        g)zã
When an I{NS} record is found for a child zone, it is included in the
authority section of the response. It is marked as non-authoritative if
the authority is not also authoritative for the child zone (RFC 2181,
section 6.1).
r¦   N©r¬  r§   s    r&   Útest_referralÚAuthorityTests.test_referralÓ  s   € ð 	×Ñ˜?Õ+r3   c                 ó&   • U R                  S5        g)zD
A referral is also generated for a request of type C{ALL_RECORDS}.
r	  Nr¯  r§   s    r&   Útest_allRecordsReferralÚ&AuthorityTests.test_allRecordsReferralÜ  s   € ð 	×ÑÐ-Õ.r3   r9   N)r4   r5   r6   r7   r2  r“  rš  r¢  r¥  r¬  r°  r³  r8   r9   r3   r&   r‹  r‹  e  s,   † ñò
4ò )òD4ò	%ò)òB,õ/r3   r‹  c                   óº   • \ rS rSrSr\R                  " S5      r\R                  " S5      r	S r
S rS rS rS	 rS
 rS rS rS rS rS rS rS rS rS rSrg)ÚAdditionalProcessingTestsiã  zn
Tests for L{FileAuthority}'s additional processing for those record types
which require it (MX, CNAME, etc).
s   10.0.0.1s   f080::1c                 óÐ   • [        UR                  R                  U4UR                  R                  U" U5      /XE0S9n[        Xa5      " [        R                  R                  5      $ )a\  
Perform a DNS lookup against a L{FileAuthority} configured with records
as defined by C{makeRecord} and C{addresses}.

@param method: The name of the lookup method to use; for example,
    C{"lookupNameservers"}.
@type method: L{str}

@param soa: A L{Record_SOA} for the zone for which the L{FileAuthority}
    is authoritative.

@param makeRecord: A one-argument callable which accepts a name and
    returns an L{IRecord} provider.  L{FileAuthority} is constructed
    with this record.  The L{FileAuthority} is queried for a record of
    the resulting type with the given name.

@param target: The extra name which the record returned by
    C{makeRecord} will be pointed at; this is the name which might
    require extra processing by the server so that all the available,
    useful information is returned.  For example, this is the target of
    a CNAME record or the mail exchange host pointed to by an MX record.
@type target: L{bytes}

@param addresses: A L{list} of records giving addresses of C{target}.

@return: A L{Deferred} that fires with the result of the resolver
    method give by C{method}.
rm   )r)   rA   rG  r¨  r³   )r1   r©  r/   Ú
makeRecordÚtargetÚ	addressesr   s          r&   Ú_lookupSomeRecordsÚ,AdditionalProcessingTests._lookupSomeRecordsì  sY   € ô: $Ø—‘—‘ Ð%à—	‘	—‘¡¨FÓ!3Ð 4Øðñ
ˆ	ô �yÔ)¬*×*:Ñ*:×*?Ñ*?Ó@Ð@r3   c                 óJ   • S nU R                  [        XS9[        X#S95        g)a½  
Assert that the L{RRHeader} instances given by C{expected} and
C{computed} carry all the same information but without requiring the
records appear in the same order.

@param expected: A L{list} of L{RRHeader} instances giving the expected
    records.

@param computed: A L{list} of L{RRHeader} instances giving the records
    computed by the scenario under test.

@raise self.failureException: If the two collections of records
    disagree.
c                 ó   • U R                   $ r,   )rH  )Úrrs    r&   r  Ú>AdditionalProcessingTests.assertRecordsMatch.<locals>.<lambda>$  s   € ˜Ÿšr3   )ÚkeyN)r˜   Úsorted)r1   ÚexpectedÚcomputedrÁ  s       r&   ÚassertRecordsMatchÚ,AdditionalProcessingTests.assertRecordsMatch  s#   € ñ$ !ˆØ×Ñœ Ñ2´F¸8Ñ4MÕNr3   c                 óB  • S[         R                  R                  -   nU R                  U[         X$U5      nU R	                  U5      u  pgnU R                  U V	s/ s H3  n	[        R                  " UU	R                  [         R                  U	SS9PM5     sn	U5        gs  sn	f )aü  
Verify that certain address records are included in the I{additional}
section of a response generated by L{FileAuthority}.

@param method: See L{_lookupSomeRecords}

@param makeRecord: See L{_lookupSomeRecords}

@param addresses: A L{list} of L{IRecord} providers which the
    I{additional} section of the response is required to match
    (ignoring order).

@raise self.failureException: If the I{additional} section of the
    response consists of different records than those given by
    C{addresses}.
s   mail.Tr–  N)
r³   rA   rG  r»  r—  rÅ  r   r   r˜  rF   )
r1   r©  r¸  rº  r¹  rR  r_  r   r™  rP  s
             r&   Ú_additionalTestÚ)AdditionalProcessingTests._additionalTest'  s    € ð" œJ×,Ñ,×1Ñ1Ñ1ˆØ×#Ñ# F¬J¸
ÈIÓVˆØ(,×(<Ñ(<¸QÓ(?Ñ%ˆ˜:à×Ññ  )ó	ò  )�Gô —’ØØ—L‘LÜ"×)Ñ)Ø#Øôñ  )ñ	ð õ	
ùò	s   Á:Bc                 óZ   • U R                  S[        [        R                  S5      U5        g)zƒ
Verify that a response to an MX query has certain records in the
I{additional} section.

@param addresses: See C{_additionalTest}
r·   rR   N)rÈ  r   r   r¸   ©r1   rº  s     r&   Ú_additionalMXTestÚ+AdditionalProcessingTests._additionalMXTestJ  s$   € ð 	×ÑØ ¤'¬#¯-©-¸Ó"<¸iõ	
r3   c                 ó<   • U R                  U R                  /5        g)zl
If the name of the MX response has A records, they are included in the
additional section of the response.
N)rÌ  Ú_Ar§   s    r&   Útest_mailExchangeAdditionalAÚ6AdditionalProcessingTests.test_mailExchangeAdditionalAU  ó   € ð
 	×Ñ §¡˜yÕ)r3   c                 ó<   • U R                  U R                  /5        g)zo
If the name of the MX response has AAAA records, they are included in
the additional section of the response.
N)rÌ  Ú_AAAAr§   s    r&   Útest_mailExchangeAdditionalAAAAÚ9AdditionalProcessingTests.test_mailExchangeAdditionalAAAA\  ó   € ð
 	×Ñ §
¡
˜|Õ,r3   c                 óR   • U R                  U R                  U R                  /5        g)z~
If the name of the MX response has both A and AAAA records, they are
all included in the additional section of the response.
N)rÌ  rÏ  rÔ  r§   s    r&   Útest_mailExchangeAdditionalBothÚ9AdditionalProcessingTests.test_mailExchangeAdditionalBothc  ó   € ð
 	×Ñ §¡¨¯©Ð4Õ5r3   c                 óF   • U R                  S[        R                  U5        g)zƒ
Verify that a response to an NS query has certain records in the
I{additional} section.

@param addresses: See C{_additionalTest}
r¼   N)rÈ  r   r½   rË  s     r&   Ú_additionalNSTestÚ+AdditionalProcessingTests._additionalNSTestj  s   € ð 	×ÑÐ0´#·-±-ÀÕKr3   c                 ó<   • U R                  U R                  /5        g)zl
If the name of the NS response has A records, they are included in the
additional section of the response.
N)rÝ  rÏ  r§   s    r&   Útest_nameserverAdditionalAÚ4AdditionalProcessingTests.test_nameserverAdditionalAs  rÒ  r3   c                 ó<   • U R                  U R                  /5        g)zo
If the name of the NS response has AAAA records, they are included in
the additional section of the response.
N)rÝ  rÔ  r§   s    r&   Útest_nameserverAdditionalAAAAÚ7AdditionalProcessingTests.test_nameserverAdditionalAAAAz  r×  r3   c                 óR   • U R                  U R                  U R                  /5        g)z~
If the name of the NS response has both A and AAAA records, they are
all included in the additional section of the response.
N)rÝ  rÏ  rÔ  r§   s    r&   Útest_nameserverAdditionalBothÚ7AdditionalProcessingTests.test_nameserverAdditionalBoth�  rÛ  r3   c                 ó&  • S[         R                  R                  -   nU R                  S[         [        R
                  X!5      nU R                  U5      u  pEn[        R                  " [         R                  R                  [        R                  [         R                  [        R
                  " U5      SS9nU R                  U Vs/ s H3  n[        R                  " UUR                  [         R                  USS9PM5     snU/-   U5        gs  snf )z�
Verify that a response to a CNAME query has certain records in the
I{answer} section.

@param addresses: See C{_additionalTest}
s   www.rË   Tr–  N)r³   rA   rG  r»  r   rÌ   r—  r   ÚCNAMErF   rÅ  r˜  )	r1   rº  r¹  rR  r_  r   r™  ÚaliasrP  s	            r&   Ú_answerCNAMETestÚ*AdditionalProcessingTests._answerCNAMETestˆ  s÷   € ð œ:×+Ñ+×0Ñ0Ñ0ˆØ×#Ñ#Ø!¤:¬s×/?Ñ/?Àó
ˆð )-×(<Ñ(<¸QÓ(?Ñ%ˆ˜:ä—’Ü×Ñ×!Ñ!Ü�I‰IÜ×!Ñ!Ü×$Ò$ VÓ,Øñ
ˆð 	×Ññ  )ó	ò  )�Gô —’ØØ—L‘LÜ"×)Ñ)Ø#Øôñ  )ñ	ð ˆgñ
ð õ	
ùò	s   Ã:Dc                 ó<   • U R                  U R                  /5        g)zk
If the name of the CNAME response has A records, they are included in
the answer section of the response.
N)rë  rÏ  r§   s    r&   Útest_canonicalNameAnswerAÚ3AdditionalProcessingTests.test_canonicalNameAnswerA«  s   € ð
 	×Ñ˜tŸw™w˜iÕ(r3   c                 ó<   • U R                  U R                  /5        g)zn
If the name of the CNAME response has AAAA records, they are included
in the answer section of the response.
N)rë  rÔ  r§   s    r&   Útest_canonicalNameAnswerAAAAÚ6AdditionalProcessingTests.test_canonicalNameAnswerAAAA²  s   € ð
 	×Ñ˜tŸz™z˜lÕ+r3   c                 óR   • U R                  U R                  U R                  /5        g)z}
If the name of the CNAME response has both A and AAAA records, they are
all included in the answer section of the response.
N)rë  rÏ  rÔ  r§   s    r&   Útest_canonicalNameAnswerBothÚ6AdditionalProcessingTests.test_canonicalNameAnswerBoth¹  s   € ð
 	×Ñ˜tŸw™w¨¯
©
Ð3Õ4r3   r9   N)r4   r5   r6   r7   r2  r   r   rÏ  r  rÔ  r»  rÅ  rÈ  rÌ  rÐ  rÕ  rÙ  rÝ  rà  rã  ræ  rë  rî  rñ  rô  r8   r9   r3   r&   r¶  r¶  ã  sv   † ñð
 
�Š�kÓ	"€BØ�OŠO˜JÓ'€Eò$AòLOò*!
òF	
ò*ò-ò6òLò*ò-ò6ò!
òF)ò,õ5r3   r¶  c                   ó   • \ rS rSrS rSrg)ÚNoInitialResponseTestsiÁ  c                 óÒ  ^• U4S jnS n[        S/S9nXl        / mU R                  [        R                  SU5        [        R
                  " S[        R                  [        R                  SS[        R                  " S	SS
9S9/n[        R                  " SSSSSSSSSS9	nXEl
        TR                  U5        U R                  UR                  S5      [        R                  5      $ )z�
If a request returns a L{dns.NS} response, but we can't connect to the
given server, the request fails with the error returned at connection.
c                 ó8   >• [        TR                  S5      5      $ r!   )r
   rt  )r1   ÚargsÚmessagess     €r&   r   Ú3NoInitialResponseTests.test_noAnswer.<locals>.queryÈ  s   ø€ ô ˜8Ÿ<™<¨›?Ó+Ð+r3   c                 óV   • [         R                  " [        R                  " S5      5      $ )NzCouldn't connect)r   Úfailr   Úgaierror)r1   rú  Úkwargss      r&   ÚqueryProtocolÚ;NoInitialResponseTests.test_noAnswer.<locals>.queryProtocolÍ  s   € Ü—:’:œfŸošoÐ.@ÓAÓBÐBr3   )r®   r   rz   r   z	fooba.comrK  FrL  rM  rF  r\  r?   r   r]  rD  )r   Ú_queryÚpatchr   r�   r   rW  rV  r½   r   rk  Úappendr&  ÚgetHostByNamer   rÿ  )r1   r   r  r‹   r0   rm  rû  s         @r&   Útest_noAnswerÚ$NoInitialResponseTests.test_noAnswerÂ  sÚ   ø€ õ	,ò
	Cô  ^Ð$4Ñ5ˆØŒØˆð 	�
‰
”3×*Ñ*¨G°]ÔCô �LŠLØ Ü—V‘VÜ—F‘FØØÜŸšÐ+AÀsÑKñð	
ˆô �KŠKØØØØØØØØØñ

ˆð Œ	Ø�‰˜ÔØ×!Ñ! (×"8Ñ"8¸Ó"EÄvÇÁÓWÐWr3   r9   N)r4   r5   r6   r7   r  r8   r9   r3   r&   r÷  r÷  Á  s   † õ,Xr3   r÷  c                   ó*   • \ rS rSrSrS rS rS rSrg)ÚSecondaryAuthorityServiceTestsiñ  z‰
Tests for L{SecondaryAuthorityService}, a service which keeps one or more
authorities up to date by doing zone transfers from a master.
c                 ó€  • Sn[        USS/5      nU R                  UR                  U5        U R                  UR                  S5        U R                  UR                  S   R                  U5        U R                  UR                  S   R                  S5        U R                  UR                  S   R
                  S5        U R                  UR                  S   R                  U5        U R                  UR                  S   R                  S5        U R                  UR                  S   R
                  S5        g)	zê
L{SecondaryAuthorityService} can be constructed with a C{str} giving a
master server address and several domains, causing the creation of a
secondary authority for each domain and that master server address and
the default DNS port.
ú192.168.1.2ó   example.comzexample.orgr%  r   r?   s   example.orgN)r   r˜   ÚprimaryÚ_portÚdomainsÚdomain©r1   r  Úservices      r&   Útest_constructAuthorityFromHostÚ>SecondaryAuthorityServiceTests.test_constructAuthorityFromHost÷  sü   € ð  ˆÜ+¨G°nÀmÐ5TÓUˆØ×Ñ˜Ÿ™¨'Ô2Ø×Ñ˜Ÿ™¨Ô+à×Ñ˜Ÿ™¨Ñ+×3Ñ3°WÔ=Ø×Ñ˜Ÿ™¨Ñ+×1Ñ1°2Ô6Ø×Ñ˜Ÿ™¨Ñ+×2Ñ2°NÔCà×Ñ˜Ÿ™¨Ñ+×3Ñ3°WÔ=Ø×Ñ˜Ÿ™¨Ñ+×1Ñ1°2Ô6Ø×Ñ˜Ÿ™¨Ñ+×2Ñ2°NÕCr3   c                 óœ  • SnSn[         R                  " X4SS/5      nU R                  UR                  U5        U R                  UR                  S5        U R                  UR
                  S   R                  U5        U R                  UR
                  S   R                  U5        U R                  UR
                  S   R                  S5        U R                  UR
                  S   R                  U5        U R                  UR
                  S   R                  U5        U R                  UR
                  S   R                  S5        g)	a,  
L{SecondaryAuthorityService.fromServerAddressAndDomains} constructs a
new L{SecondaryAuthorityService} from a C{str} giving a master server
address and DNS port and several domains, causing the creation of a secondary
authority for each domain and that master server address and the given
DNS port.
ú192.168.1.3i×  zexample.netó   example.edur   ó   example.netr?   N)r   ÚfromServerAddressAndDomainsr˜   r  r  r  r  )r1   r  r†   r  s       r&   Ú&test_constructAuthorityFromHostAndPortÚESecondaryAuthorityServiceTests.test_constructAuthorityFromHostAndPort  s  € ð  ˆØˆÜ+×GÒGØˆO˜m¨^Ð<ó
ˆð 	×Ñ˜Ÿ™¨'Ô2Ø×Ñ˜Ÿ™¨Ô-à×Ñ˜Ÿ™¨Ñ+×3Ñ3°WÔ=Ø×Ñ˜Ÿ™¨Ñ+×1Ñ1°4Ô8Ø×Ñ˜Ÿ™¨Ñ+×2Ñ2°NÔCà×Ñ˜Ÿ™¨Ñ+×3Ñ3°WÔ=Ø×Ñ˜Ÿ™¨Ñ+×1Ñ1°4Ô8Ø×Ñ˜Ÿ™¨Ñ+×2Ñ2°NÕCr3   c                 óÀ  • Sn[        UR                  5       SS/5      nU R                  UR                  U5        U R                  UR                  S   R                  U5        U R                  UR                  S   R
                  S5        U R                  UR                  S   R                  U5        U R                  UR                  S   R
                  S5        g)a!  
L{SecondaryAuthorityService.fromServerAddressAndDomains} constructs a
new L{SecondaryAuthorityService} from a C{bytes} giving a master server
address and several domains, causing the creation of a secondary
authority for each domain and that master server address and the given
DNS port.
r  r  zexample.edur   r?   r  N)r   Úencoder˜   r  r  r  r  s      r&   Ú test_constructAuthorityFromBytesÚ?SecondaryAuthorityServiceTests.test_constructAuthorityFromBytes#  s·   € ð  ˆÜ+Ø�N‰NÓØ˜]Ð+ó
ˆð 	×Ñ˜Ÿ™¨'Ô2à×Ñ˜Ÿ™¨Ñ+×3Ñ3°WÔ=Ø×Ñ˜Ÿ™¨Ñ+×2Ñ2°NÔCà×Ñ˜Ÿ™¨Ñ+×3Ñ3°WÔ=Ø×Ñ˜Ÿ™¨Ñ+×2Ñ2°NÕCr3   r9   N)	r4   r5   r6   r7   r2  r  r  r  r8   r9   r3   r&   r
  r
  ñ  s   † ñò
Dò(Dõ0Dr3   r
  c                   ó0   • \ rS rSrSrS rS rS rS rSr	g)	ÚSecondaryAuthorityTestsi9  z‹
L{twisted.names.secondary.SecondaryAuthority} correctly constructs objects
with a specified IP address and optionally specified DNS port.
c                 óÄ   • [        SS5      nU R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        g)zX
When constructed using L{SecondaryAuthority.__init__}, the default port
of 53 is used.
ú192.168.1.1ú
inside.comr%  ó
   inside.comN)r   r˜   r  r  r  ©r1   Ú	secondarys     r&   Útest_defaultPortÚ(SecondaryAuthorityTests.test_defaultPort?  sP   € ô
 ' }°lÓCˆ	Ø×Ñ˜×*Ñ*¨MÔ:Ø×Ñ˜Ÿ™¨"Ô-Ø×Ñ˜×)Ñ)¨=Õ9r3   c                 óÚ   • [         R                  " SS5      nU R                  UR                  S5        U R                  UR                  S5        U R                  UR
                  S5        g)zf
When constructed using L{SecondaryAuthority.fromServerAddressAndDomain},
the specified port is used.
)r$  éé  r%  r$  r,  r&  N)r   ÚfromServerAddressAndDomainr˜   r  r  r  r'  s     r&   Útest_explicitPortÚ)SecondaryAuthorityTests.test_explicitPortI  s[   € ô
 '×AÒAØ! <ó
ˆ	ð 	×Ñ˜×*Ñ*¨MÔ:Ø×Ñ˜Ÿ™¨$Ô/Ø×Ñ˜×)Ñ)¨=Õ9r3   c                 ó\  • [         R                  " SS5      n[        5       =Ul        nUR	                  5         UR
                  R                  S5      u  p4pVnU R                  US5        U R                  US5        UR                  X445      n[        5       n	UR                  U	5        [        5       n
U
R                  [        U	R                  5       SS 5      5        U R                  [        R                   " S[        R"                  [        R$                  5      /U
R&                  5        g)zÆ
An attempt is made to transfer the zone for the domain the
L{SecondaryAuthority} was constructed with from the server address it
was constructed with when L{SecondaryAuthority.transfer} is called.
©r  r<   úexample.comr   r  r<   rv   N)r   r-  r   Ú_reactorÚtransferÚ
tcpClientsrt  r˜   ÚbuildProtocolr   ÚmakeConnectionr   Údecoder   r�  r   r   ri  rV  rj  )r1   r(  r	   Úhostr†   r€   ÚtimeoutÚbindAddressÚprotor‘   Úmsgs              r&   Útest_transferÚ%SecondaryAuthorityTests.test_transferU  sô   € ô '×AÒAØ! =ó
ˆ	ô (:Ó';Ð;ˆ	Ô˜Wà×ÑÔð 5<×4FÑ4F×4JÑ4JÈ1Ó4MÑ1ˆ�G kØ×Ñ˜˜}Ô-Ø×Ñ˜˜tÔ$ð ×%Ñ% t lÓ3ˆÜ#Ó%ˆ	Ø×Ñ˜YÔ'ä‹iˆð 	�
‰
”7˜9Ÿ?™?Ó,¨Q¨RÐ0Ó1Ô2à×Ñœ#Ÿ)š) M´3·8±8¼S¿V¹VÓDÐEÀsÇ{Á{ÕSr3   c                 ó@  • [         R                  " SS5      n[        5       =Ul        nUR	                  5         UR
                  R                  S5      u  p4pVnUR                  X445      n[        5       n	UR                  U	5        [        SSS9n
U
R                  [        U	R                  5       SS 5      5        [        SS	S
SSSSSS9n[        SSS9n[        U
R                   SSS9nUR"                  R%                  ['        S[(        US9['        SUS9['        S[(        US9/5        UR+                  5       nUR-                  [/        S[1        U5      5      U-   5        U R3                  UR5                  S5      5      nU R7                  ['        SUSS9// / 4U5        g)z‡
L{SecondaryAuthority.lookupAddress} returns a L{Deferred} that fires
with the I{A} records the authority has cached from the primary.
r1  r  r   r?   )r_  rJ  rv   Ns   ns1.example.comzadmin.example.comi@â i  iÀ  i   i€%  ià.  r@   s   192.168.1.2ro   )r^  r_  rJ  )rH  r#   r"   z!Hr2  T)r#   rJ  )r   r-  r   r3  r4  r5  rt  r6  r   r7  r   r8  r   r�  r   r   r^  rk  Úextendr   r   ÚtoStrÚdataReceivedr   Úlenr—  r¦   r˜   )r1   r(  r	   r9  r†   r€   r:  r;  r<  r‘   r   r/   r<  r_  Údatarq  s                   r&   Útest_lookupAddressÚ*SecondaryAuthorityTests.test_lookupAddresss  s�  € ô
 '×AÒAØ! >ó
ˆ	ô (:Ó';Ð;ˆ	Ô˜Wà×ÑÔà4;×4FÑ4F×4JÑ4JÈ1Ó4MÑ1ˆ�G kà×%Ñ% t lÓ3ˆÜ#Ó%ˆ	Ø×Ñ˜YÔ'ä˜q qÑ)ˆØ�‰”W˜YŸ_™_Ó.¨q¨rÐ2Ó3Ô4ô Ø$Ø%ØØØØØØñ	
ˆô �^¨Ñ+ˆÜ˜EŸH™H¨Q°QÑ7ˆØ�‰×Ñä˜¬c¸3Ñ?Ü˜°Ñ3Ü˜¬c¸3Ñ?ðô	
ð �|‰|‹~ˆØ×Ñœ4 ¤c¨$£iÓ0°4Ñ7Ô8à×%Ñ% i×&=Ñ&=¸mÓ&LÓMˆØ×ÑÜ�~¨q°tÑ<Ð=¸rÀ2ÐFÈõ	
r3   r9   N)
r4   r5   r6   r7   r2  r)  r.  r>  rF  r8   r9   r3   r&   r"  r"  9  s   † ñò
:ò
:òTõ<0
r3   r"  sY  $ORIGIN example.com.
$TTL    1w
example.com. IN SOA dns.example.com (
            2013120201 ; serial number of this zone file
            1d         ; slave refresh
            2h         ; slave retry time in case of a problem
            4w         ; slave expiration time
            1h         ; maximum caching time in case of failed lookups
            )

; A comment.
@                  IN AAAA 2001:db8:10::1
example.com.       IN A 10.0.0.1
no-in.example.com. A 10.0.0.2  ; technically wrong but used to work
not-fqdn           IN MX 10 mx.example.com
www                IN CNAME example.comc                   óT   • \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rSrg)ÚBindAuthorityTestsi¹  z5
Tests for L{twisted.names.authority.BindAuthority}.
c                 ó´   • [        U R                  5       R                  S5      5      nUR                  U5        [        R
                  " UR                  5      $ )zÊ
Create a new L{twisted.names.authority.BindAuthority} from C{s}.

@param s: A string with BIND zone data.
@type s: bytes

@return: a new bind authority
@rtype: L{twisted.names.authority.BindAuthority}
Úascii)r   r7  r  Ú
setContentr   ÚBindAuthorityÚpath)r1   ÚsÚfps      r&   ÚloadBindStringÚ!BindAuthorityTests.loadBindString¾  s@   € ô �d—k‘k“m×*Ñ*¨7Ó3Ó4ˆØ
�‰�aÔä×&Ò& r§w¡wÓ/Ð/r3   c                 ó8   • U R                  [        5      U l        g r,   )rQ  ÚsampleBindZonerJ  r§   s    r&   r�   ÚBindAuthorityTests.setUpÍ  s   € Ø×'Ñ'¬Ó7ˆ�	r3   c                 óÖ   • U R                   R                  R                  5        HA  nU R                   R                  U    H!  nU R                  SUR                  :H  5        M#     MC     g)z7
Loads the default $TTL and applies it to all records.
é€:	 N)rJ  r0   Úkeysr:  rH   )r1   ÚdomÚrecs      r&   Útest_ttlÚBindAuthorityTests.test_ttlÐ  sO   € ð —9‘9×$Ñ$×)Ñ)Ö+ˆCØ—y‘y×(Ñ(¨Ô-�Ø—‘ ¨#¯'©'Ñ 1Ö2ó .ò ,r3   c                 óœ   • U R                  SU R                  R                  5        U R                  SU R                  R                  5        g)z
Loads the default $ORIGIN.
s   example.com.ó   not-fqdn.example.comN)r˜   rJ  ÚoriginÚassertInr0   r§   s    r&   Útest_originFromFileÚ&BindAuthorityTests.test_originFromFileØ  s@   € ð 	×ÑØØ�I‰I×Ñô	
ð 	�‰Ø#Ø�I‰I×Ñõ	
r3   c                 óà   • S Hh  u  pU R                  U R                  R                  U5      5      u  u  nu   u   U R                  [        R
                  " US5      UR                  5        Mj     g)ú
A records are loaded.
©)r  z10.0.0.1)ó   no-in.example.comz10.0.0.2rW  N©r—  rJ  r¦   r˜   r   r   r#   ©r1   rY  Úipr¿  s       r&   Útest_aRecordsÚ BindAuthorityTests.test_aRecordså  sb   € ó
‰GˆCð "×1Ñ1°$·)±)×2IÑ2IÈ#Ó2NÓO‰N‰Tˆb‘2‘rØ×ÑÜ—’ØØóð —
‘
öò
r3   c                 óÊ   • U R                  U R                  R                  S5      5      u  u  nu   u   U R                  [        R
                  " SS5      UR                  5        g)ú
AAAA records are loaded.
r  ú2001:db8:10::1rW  N©r—  rJ  r  r˜   r   r  r#   ©r1   r¿  s     r&   Útest_aaaaRecordsÚ#BindAuthorityTests.test_aaaaRecordsö  sY   € ð ×-Ñ-Ø�I‰I×'Ñ'¨Ó7ó
‰‰ˆ"‰r‘2ð 	×ÑÜ�OŠOØ Øóð �J‰Jõ	
r3   c                 óÈ   • U R                  U R                  R                  S5      5      u  u  nu   u   U R                  [        R
                  " SSSS9UR                  5        g)ú
MX records are loaded.
r^  rR   zmx.example.comrW  )rN  rG  rH   N©r—  rJ  r·   r˜   r   r¸   r#   rp  s     r&   Útest_mxRecordsÚ!BindAuthorityTests.test_mxRecords  s]   € ð ×-Ñ-Ø�I‰I×(Ñ(Ð)@ÓAó
‰‰ˆ"‰r‘2ð 	×ÑÜ�MŠMØØ%Øñð
 �J‰Jõ	
r3   c                 óÌ   • U R                  U R                  R                  S5      5      u  nu   u   US   nU R                  [        R
                  " SSS9UR                  5        g)ú
CNAME records are loaded.
ó   www.example.comr   r2  rW  rM  N©r—  rJ  r  r˜   r   rÌ   r#   ©r1   rk  r¿  s      r&   Útest_cnameRecordsÚ$BindAuthorityTests.test_cnameRecords  sd   € ð !×0Ñ0Ø�I‰I×'Ñ'Ð(:Ó;ó
Ñˆ‘"‘bð �Q‰ZˆØ×ÑÜ×ÒØ"Øñð �J‰Jõ	
r3   c                 óÖ   • U R                  [        5       nU R                  S5        SSS5        U R                  SWR                  R
                  S   5        g! , (       d  f       N8= f)z?
loadBindString raises NotImplementedError on invalid records.
s   example.com. IN LOL 192.168.0.1NzRecord type 'LOL' not supportedr   )ÚassertRaisesÚNotImplementedErrorrQ  r˜   Ú	exceptionrú  )r1   Úes     r&   Útest_invalidRecordClassÚ*BindAuthorityTests.test_invalidRecordClass%  sR   € ð ×ÑÔ2Ô3°qØ×ÑÐ BÔC÷ 4à×ÑÐ:¸A¿K¹K×<LÑ<LÈQÑ<OÕP÷ 4Õ3ús   –AÁ
A(c                 ó  • S Hj  nU R                  [        5       nU R                  US-   5        SSS5        U R                  [	        US-   5      WR
                  R                  S   5        Ml     g! , (       d  f       NH= f)z3
$INCLUDE and $GENERATE raise NotImplementedError.
)s   $INCLUDEs	   $GENERATEs    doesNotMatterNs    directive not implementedr   )r€  r�  rQ  r˜   r   r‚  rú  )r1   Ú	directiverƒ  s      r&   Útest_invalidDirectivesÚ)BindAuthorityTests.test_invalidDirectives-  sm   € ó 5ˆIØ×"Ñ"Ô#6Ô7¸1Ø×#Ñ# IÐ0AÑ$AÔB÷ 8à×ÑÜ˜YÐ)FÑFÓGØ—‘× Ñ  Ñ#öò 5ß7Õ7ús   ›A2Á2
B 	©rJ  N)r4   r5   r6   r7   r2  rQ  r�   r[  ra  rj  rq  rv  r}  r„  rˆ  r8   r9   r3   r&   rI  rI  ¹  s:   † ñò0ò8ò3ò
òò"
ò
ò 
ò Qõ
r3   rI  aÊ  zone = [
    SOA(
        # For whom we are the authority
        'example.com',

        # This nameserver's name
        mname = "dns.example.com",

        # Mailbox of individual who handles this
        rname = "root.example.com",

        # Unique serial identifying this SOA data
        serial = 86400,

        # Time interval before zone should be refreshed
        refresh = "2H",

        # Interval before failed refresh should be retried
        retry = "1H",

        # Upper limit on time interval before expiry
        expire = "1H",

        # Minimum TTL
        minimum = "3H"

    ),

    AAAA('example.com', '2001:db8:10::1'),
    A('example.com', '10.0.0.1'),
    NS('example.com', 'dns.example.com'),
    A('no-in.example.com', '10.0.0.2'),
    PTR('2.0.0.10.in-addr.arpa', 'no-in.example.com'),

    CNAME('www.example.com', 'example.com'),
    CNAME('ftp.example.com', 'example.com'),

    MX('not-fqdn.example.com', 10, 'mail.example.com'),
]
c                   óH   • \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rSrg)ÚPySourceAuthorityTestsie  z9
Tests for L{twisted.names.authority.PySourceAuthority}.
c                 óö   • [        U R                  5       5      n[        UR                  S5       nUR	                  U5        SSS5        [
        R                  " UR                  5      $ ! , (       d  f       N.= f)zë
Create a new L{twisted.names.authority.PySourceAuthority} from C{s}.

@param s: A string with BIND zone data in a Python source file.
@type s: L{str}

@return: a new bind authority
@rtype: L{twisted.names.authority.PySourceAuthority}
r…  N)r   r7  r†  rN  Úwriter   ÚPySourceAuthority)r1   rO  rP  r;  s       r&   ÚloadPySourceStringÚ)PySourceAuthorityTests.loadPySourceStringj  sT   € ô �d—k‘k“mÓ$ˆÜ�"—'‘'˜3Ô 1Ø�G‰G�AŒJ÷  ô ×*Ò*¨2¯7©7Ó3Ð3÷  Õús   °A*Á*
A8c                 ó8   • U R                  [        5      U l        g r,   )r�  ÚsamplePySourcerJ  r§   s    r&   r�   ÚPySourceAuthorityTests.setUpz  s   € Ø×+Ñ+¬NÓ;ˆ�	r3   c                 óÞ   • S Hg  u  pU R                  U R                  R                  U5      5      u  u  nu   u   U R                  [        R
                  " U5      UR                  5        Mi     g)rd  re  Nrg  rh  s       r&   rj  Ú$PySourceAuthorityTests.test_aRecords}  sZ   € ó
‰GˆCð "×1Ñ1°$·)±)×2IÑ2IÈ#Ó2NÓO‰N‰Tˆb‘2‘rØ×ÑÜ—’˜RÓ Ø—
‘
öò
r3   c                 óÈ   • U R                  U R                  R                  S5      5      u  u  nu   u   U R                  [        R
                  " S5      UR                  5        g)rm  r  rn  Nro  rp  s     r&   rq  Ú'PySourceAuthorityTests.test_aaaaRecords‹  sR   € ð ×-Ñ-Ø�I‰I×'Ñ'¨Ó7ó
‰‰ˆ"‰r‘2ð 	×ÑÜ�OŠOÐ,Ó-Ø�J‰Jõ	
r3   c                 óÆ   • U R                  U R                  R                  S5      5      u  u  nu   u   U R                  [        R
                  " SSS9UR                  5        g)rt  r^  rR   zmail.example.com)rN  rG  Nru  rp  s     r&   rv  Ú%PySourceAuthorityTests.test_mxRecords—  sZ   € ð ×-Ñ-Ø�I‰I×(Ñ(Ð)@ÓAó
‰‰ˆ"‰r‘2ð 	×ÑÜ�MŠMØØ'ñð �J‰Jõ	
r3   c                 óÊ   • U R                  U R                  R                  S5      5      u  nu   u   US   nU R                  [        R
                  " SS9UR                  5        g)ry  rz  r   r2  ©rG  Nr{  r|  s      r&   r}  Ú(PySourceAuthorityTests.test_cnameRecords¦  sa   € ð !×0Ñ0Ø�I‰I×'Ñ'Ð(:Ó;ó
Ñˆ‘"‘bð �Q‰ZˆØ×ÑÜ×ÒØ"ñð �J‰Jõ		
r3   c                 óÊ   • U R                  U R                  R                  S5      5      u  nu   u   US   nU R                  [        R
                  " SS9UR                  5        g)z
PTR records are loaded.
s   2.0.0.10.in-addr.arpar   rf  rœ  N)r—  rJ  rÆ   r˜   r   rÇ   r#   r|  s      r&   rÈ   ÚPySourceAuthorityTests.test_PTRµ  s_   € ð !×0Ñ0Ø�I‰I×#Ñ#Ð$<Ó=ó
Ñˆ‘"‘bð �Q‰ZˆØ×ÑÜ�NŠNØ)ñð �J‰Jõ		
r3   c                 óJ   • SnU R                  [        U R                  U5        g)z!
Input file has no zone variable
znothing = []N)r€  Ú
ValueErrorr�  )r1   ÚbadPySources     r&   Útest_badInputNoZoneÚ*PySourceAuthorityTests.test_badInputNoZoneÄ  s!   € ð %ˆØ×Ñœ* d×&=Ñ&=¸{ÕKr3   rŠ  N)r4   r5   r6   r7   r2  r�  r�   rj  rq  rv  r}  rÈ   r£  r8   r9   r3   r&   rŒ  rŒ  e  s0   † ñò4ò <òò

ò
ò
ò
õLr3   rŒ  )Yr2  r  r  r   Ú	functoolsr   r   Úior   Ústructr   Útwisted.internetr   r   r	   Útwisted.internet.deferr
   Útwisted.internet.testingr   r   r   Útwisted.namesr   r   r   r   r   Útwisted.names.clientr   Útwisted.names.dnsr   r   r   r   r   r   Útwisted.names.errorr   Útwisted.names.secondaryr   r   Útwisted.python.compatr   Útwisted.python.filepathr   Útwisted.trialr   r'   ÚFileAuthorityr)   r³   Úreverse_soar  r½   rú   r¸   rÂ   rÌ   rÑ   rÖ   rõ   r  rÛ   rà   rë   rð   rÿ   r  r/  r  ræ   r}   rÇ   r~   r   ÚTestCasers   r4  rB  rx  r‹  r¶  r÷  r
  r"  rT  rI  r“  rŒ  r9   r3   r&   Ú<module>r¶     sW  ðñó
 Û Û ß %Ý Ý ç 2Ñ 2Ý *÷ñ ÷
 AÕ @Ý )ß Q× QÝ +ß QÝ .Ý ,Ý "ò+ô.�i×-Ñ-ô .ð �^Š^Ø
Ø
 ØØØØØ
Ø	ñ	€
ð �nŠnØ
"Ø
"ØØØØØ
Ø	ñ	€ð 
�ŠØ
Ø
'ØØØØØ
ñ
€ñ "Ø	˜ZÐ(ð Ø�LŠL˜Ó&Ø�MŠM˜/Ó*Ø�NŠNÐAÓBØ�NŠNÐ1Ð3TÓUØ�MŠM˜"Ð4Ó5Ø×Ò Ð.IÑJØ×ÒÐ2Ó3Ø�MŠMÐ4Ó5Ø�MŠMÐ1Ó2Ø�NŠNÐ3Ð5FÓGØ�MŠM˜!˜]¨CÓ0Ø�MŠM˜"˜lÐ,?Ó@Ø�MŠM˜!ÐDÐFVÓWØ�NŠNÐJÓKØ�MŠMÐ6Ó7Ø×Ò ]¸MÑJØ×Ò QÐ1IÑJØ�MŠMÐ2Ð8IÑJØ�NŠNØ × 2Ñ 2Ð4Sóð ×ÒØ�R˜˜zÐ+Oóð �OŠOÐFÓGð5
ð: �NŠN˜3  uÐ.FÓGð&
ð �LŠL˜Ó(Ø�LŠL˜Ó(ð"
ð �LŠLÐ+Ó,Ø�LŠL˜Ó$ð&
ð $'×#3Ò#3Ð4FÓ#GÐ"HØ$'§L¢L°Ó$<Ð#=ñ[.ñ1€ñf !Ø	! ;Ð/à$Ø�NŠNÐ:Ó;Øð'
ðñ€ñ  Ø	˜6Ð"àØØ�LŠL˜¨Ñ.Ø�MŠM˜-¨UÑ3Ø�MŠM˜-¨TÑ2Ø�NŠN˜3  uÐ.FÈDÑQð
ðñ€ôW
�X×&Ñ&ô W
ôt
�(×#Ñ#ô ôW5�×!Ñ!ô W5ôt˜h×/Ñ/ô ô{/�X×&Ñ&ô {/ô|[5 × 1Ñ 1ô [5ô|-X˜X×.Ñ.ô -Xô`ED X×%6Ñ%6ô EDôPj
˜h×/Ñ/ô j
ðZ+€ô&~˜×*Ñ*ô ~ðB(€ôVdL˜X×.Ñ.õ dLr3   