
    daf1D                     P   d Z ddlZddlZddlZddlZddlZddlZddlmZmZ ddl	m
Z ddlmZ ddlmZ ddlmZ ddlmZ dd	lmZ  ej$                  d
       ej&                  ZdZdZ eed      rddlZd
Zej0                  j3                  ej0                  j5                  e      xs ej8                  dd      Zej0                  j3                  ej0                  j5                  e      xs ej8                  dd      Z eed      ZdZ dZ! G d dejD                        Z# G d dejH                  ejJ                        Z& G d de      Z'erddl(m)Z)  G d de)e#      Z*e G d de'             Z+e G d d e'             Z, G d! d"e      Z-d# Z.e/d$k(  r ej`                          yy)%zTest script for poplib module.    N)TestCase
skipUnless)support)hashlib_helper)socket_helper)threading_helper)asynchat)asyncoreT)moduleFPOP3_SSLcertdatazkeycert3.pemzpycacert.pemzSSL not supporteds   1 1
2 2
3 3
4 4
5 5
.
st   From: postmaster@python.org
Content-Type: text/plain
MIME-Version: 1.0
Subject: Dummy

line1
line2
line3
.
c                       e Zd Zg dgdZdZd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zd Zd ZeZd ZeZd Zd Zd Zd Zd Zd Zd Zd Zer
d Zd Zd Zyy)DummyPOP3Handlerzpython-testlib-pop-server)UIDLIMPLEMENTATIONFc                     t         j                  j                  | |       | j                  d       g | _        | j                  d       d| _        d| _        y )N   
(+OK dummy pop3 server ready. <timestamp>F)r	   
async_chat__init__set_terminator	in_bufferpush
tls_activetls_startingselfconns     +/root/Python-3.12.4/Lib/test/test_poplib.pyr   zDummyPOP3Handler.__init__7   sI    $$T40G$		<=!    c                 :    | j                   j                  |       y N)r   appendr   datas     r   collect_incoming_dataz&DummyPOP3Handler.collect_incoming_data?   s    d#r    c                 \   dj                  | j                        }t        |d      }g | _        |j                  d      d   j	                         }|j                  d      }|dk7  r	||dz   d  }nd}t        | d|z         rt        | d|z         } ||       y | j                  d	|z         y )
Nr    
ISO-8859-1 r       cmd_z$-ERR unrecognized POP3 command "%s".)	joinr   strsplitlowerfindhasattrgetattrr   )r   linecmdspaceargmethods         r   found_terminatorz!DummyPOP3Handler.found_terminatorB   s    xx'4&jjoa &&(		#B;uqyz"CC4#&T6C<0F3KII<cABr    c                       r"    r   s    r   handle_errorzDummyPOP3Handler.handle_errorR       r    c                 h    t         j                  j                  | |j                  d      dz          y )Nr(   r   )r	   r   r   encoder$   s     r   r   zDummyPOP3Handler.pushU   s&      t{{<'@7'JKr    c                 &    | j                  |       y r"   r   r   r8   s     r   cmd_echozDummyPOP3Handler.cmd_echoX   s    		#r    c                 R    |dk7  r| j                  d       | j                  d       y )Nguidoz-ERR no such userz+OK password requiredrC   rD   s     r   cmd_userzDummyPOP3Handler.cmd_user\   s#    '>II)*		)*r    c                 R    |dk7  r| j                  d       | j                  d       y )Npythonz-ERR wrong passwordz+OK 10 messagesrC   rD   s     r   cmd_passzDummyPOP3Handler.cmd_passa   s#    (?II+,		#$r    c                 &    | j                  d       y )Nz
+OK 10 100rC   rD   s     r   cmd_statzDummyPOP3Handler.cmd_statf   s    		,r    c                     |r| j                  d|d|       y | j                  d       t        j                  j                  | t               y )Nz+OK r)   z+OK)r   r	   r   	LIST_RESPrD   s     r   cmd_listzDummyPOP3Handler.cmd_listi   s8    IIS#./IIe$$T95r    c                     | j                  dt        t              z         t        j                  j                  | t               y )Nz+OK %s bytes)r   len	RETR_RESPr	   r   rD   s     r   cmd_retrzDummyPOP3Handler.cmd_retrr   s-    		.#i.01  y1r    c                 &    | j                  d       y )Nz +OK message marked for deletion.rC   rD   s     r   cmd_delezDummyPOP3Handler.cmd_delex   s    		45r    c                 &    | j                  d       y Nz+OK done nothing.rC   rD   s     r   cmd_noopzDummyPOP3Handler.cmd_noop{       		%&r    c                 &    | j                  d       y rX   rC   rD   s     r   cmd_rpopzDummyPOP3Handler.cmd_rpop~   rZ   r    c                 &    | j                  d       y rX   rC   rD   s     r   cmd_apopzDummyPOP3Handler.cmd_apop   rZ   r    c                 F    | j                  d       | j                          y )Nz+OK closing.)r   close_when_donerD   s     r   cmd_quitzDummyPOP3Handler.cmd_quit   s    		.!r    c                 ^    t        | j                        }| j                  st        rg |d<   |S NSTLS)dictCAPASr   SUPPORTS_SSL)r   _capass     r   
_get_capaszDummyPOP3Handler._get_capas   s'    djj!<F6Nr    c                     | j                  d       | j                         r\| j                         j                         D ];  \  }}|g}|r|j                  |       | j                  dj	                  |             = | j                  d       y )Nz+OK Capability list followsr)   .)r   ri   itemsextendr.   )r   r8   capparams_lns        r   cmd_capazDummyPOP3Handler.cmd_capa   ss    		/0??#0668 )VeJJv&		#((3-(	)
 			#r    c                 L    | j                  | j                  rd       y d       y )Nz+OK I know RFC6856z-ERR What is UTF8?!)r   enable_UTF8rD   s     r   cmd_utf8zDummyPOP3Handler.cmd_utf8   s$    		%% ' 	.,	.r    c                    | j                   du r| j                  d       t        j                  t        j                        }|j                  t               |j                  | j                  ddd      }| j                          | j                  |       d| _         d| _        g | _        | j                          y | j                  d       y )NFz+OK Begin TLS negotiationT)server_sidedo_handshake_on_connectsuppress_ragged_eofsz*-ERR Command not permitted when TLS active)r   r   ssl
SSLContextPROTOCOL_TLS_SERVERload_cert_chainCERTFILEwrap_socketsocketdel_channel
set_socketr   r   _do_tls_handshake)r   r8   contexttls_socks       r   cmd_stlszDummyPOP3Handler.cmd_stls   s    %'		56..)@)@A''1"..t{{;?GLDI / K   ")"&$(!!#&&(		FGr    c                 Z   	 | j                   j                          d| _        d| _        y # t        j
                  $ r}|j                  d   t        j                  t        j                  fv rY d }~y |j                  d   t        j                  k(  r| j                         cY d }~S d|j                  d   v sd|j                  d   v r| j                         cY d }~S  d }~wt        $ r?}|j                  d   t        j                  k(  r| j                         cY d }~S Y d }~y d }~ww xY w)NTFr   SSLV3_ALERT_BAD_CERTIFICATEr+   SSLV3_ALERT_CERTIFICATE_UNKNOWN)r   do_handshaker   r   ry   SSLErrorargsSSL_ERROR_WANT_READSSL_ERROR_WANT_WRITESSL_ERROR_EOFhandle_closeOSErrorerrnoECONNABORTED)r   errs     r   r   z"DummyPOP3Handler._do_tls_handshake   s    *((*  #'$)!! << 
88A;3#:#:#&#;#;#= =XXa[C$5$55,,..3sxx{B7388A;F,,.. /88A;%"4"44,,.. 5/sD   + D*/C2/C!D*'1CD*CD*+/D%D*%D*c                     | j                   r| j                          y 	 t        j                  j	                  |        y # t
        j                  $ r | j                          Y y w xY wr"   )r   r   r	   r   handle_readry   SSLEOFErrorr   r=   s    r   r   zDummyPOP3Handler.handle_read   sO      &&((''33D9 (%%'(s   ? #A%$A%N)__name__
__module____qualname__rf   rs   r   r&   r:   r>   r   rE   rH   rK   rM   rP   cmd_uidlrT   cmd_toprV   rY   r\   r^   ra   ri   rq   rt   rg   r   r   r   r<   r    r   r   r   2   s    ,G+HIEK"$C L+
%
 6 H2 G6'''.
 	H$	**	(S r    r   c                   \    e Zd ZeZej                  fdZd Zd Z	d Z
d Zd ZeZd Zd Zy	)
DummyPOP3Serverc                    t         j                  j                  |        t        j                  j                  |        d| _        | j                  |t        j                         | j                  |       | j                  d       d| _        t        j                         | _        | j                  j                         d d \  | _        | _        d | _        y )NT   F   )	threadingThreadr   r
   
dispatcherdaemoncreate_socketr   SOCK_STREAMbindlistenactiveLockactive_lockgetsocknamehostporthandler_instance)r   addressafs      r   r   zDummyPOP3Server.__init__   s    !!$'$$T*2v112		'A$>>+#{{668!<	49 $r    c                     | j                   rJ t        j                         | _        t        j                  j                  |        | j                  j                          y r"   )r   r   Event_DummyPOP3Server__flagr   startwaitr=   s    r   r   zDummyPOP3Server.start   s@    ;;oo't$r    c                    d| _         | j                  j                          	 | j                   rYt        j                  rI| j
                  5  t        j                  dd       d d d        | j                   rt        j                  rIt        j                  d       y # 1 sw Y   =xY w# t        j                  d       w xY w)NTg?r+   )timeoutcount)
ignore_all)r   r   setr
   
socket_mapr   loop	close_allr=   s    r   runzDummyPOP3Server.run   s    	0++("5"5%% 8MM#Q78 ++("5"5 $/8 8 $/s#   (B+ B#$B+ B($B+ +Cc                 N    | j                   sJ d| _         | j                          y NF)r   r.   r=   s    r   stopzDummyPOP3Server.stop   s    {{{		r    c                 0    | j                  |      | _        y r"   )handlerr   )r   r   addrs      r   handle_acceptedzDummyPOP3Server.handle_accepted   s     $T 2r    c                 $    | j                          y r"   )closer=   s    r   handle_connectzDummyPOP3Server.handle_connect   s    

r    c                      y)Nr   r<   r=   s    r   writablezDummyPOP3Server.writable   s    r    c                       r"   r<   r=   s    r   r>   zDummyPOP3Server.handle_error   r?   r    N)r   r   r   r   r   r   AF_INETr   r   r   r   r   r   r   r   r>   r<   r    r   r   r      s;    G#)>> 
%0
3 Kr    r   c                      e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Z ej$                  dd      d        Z ej$                  dd      d        Zd Zd Zd Zd Zd Zd Zed        Zed        Zed        Zy)TestPOP3Classc                 D    | j                  |j                  d             y )N   +OK)
assertTrue
startswithr   resps     r   assertOKzTestPOP3Class.assertOK  s    /0r    c                    t        t        t        f      | _        | j                  j	                          t        j                  | j                  j                  | j                  j                  t        j                        | _        y Nr   )r   HOSTPORTserverr   poplibPOP3r   r   test_supportLOOPBACK_TIMEOUTclientr=   s    r   setUpzTestPOP3Class.setUp  sT    %tTl3kk$++"2"2DKK4D4D*6*G*GIr    c                 z    | j                   j                          | j                  j                          d | _        y r"   )r   r   r   r   r=   s    r   tearDownzTestPOP3Class.tearDown  s)    r    c                 X    | j                  | j                  j                         d       y )Ns(   +OK dummy pop3 server ready. <timestamp>)assertEqualr   
getwelcomer=   s    r   test_getwelcomezTestPOP3Class.test_getwelcome  s#    //1D	Fr    c                 n    | j                  t        j                  | j                  j                  d       y )Nz	echo -err)assertRaisesr   error_protor   	_shortcmdr=   s    r   test_exceptionszTestPOP3Class.test_exceptions  s$    &,,dkk.C.C[Qr    c                     | j                  | j                  j                  d             | j                  t        j
                  | j                  j                  d       y )NrG   invalid)r   r   userr   r   r   r=   s    r   	test_userzTestPOP3Class.test_user  s?    dkk&&w/0&,,dkk.>.>	Jr    c                     | j                  | j                  j                  d             | j                  t        j
                  | j                  j                  d       y )NrJ   r   )r   r   pass_r   r   r   r   r=   s    r   
test_pass_zTestPOP3Class.test_pass_  s?    dkk''12&,,dkk.>.>	Jr    c                 X    | j                  | j                  j                         d       y )N)
   d   )r   r   statr=   s    r   	test_statzTestPOP3Class.test_stat!  s    ))+Y7r    c                     | j                  | j                  j                         dd  g ddf       | j                  | j                  j                  d      j	                  d             y )Nr+   )s   1 1s   2 2s   3 3s   4 4s   5 5   1s   OK 1 1)r   r   listr   endswithr=   s    r   	test_listzTestPOP3Class.test_list$  sY    ))+AB/B	 	((-66yABr    c                 l    dg ddf}| j                   j                  d      }| j                  ||       y )N   +OK 116 bytess   From: postmaster@python.orgs   Content-Type: text/plains   MIME-Version: 1.0s   Subject: Dummyr    s   line1s   line2s   line3q   foo)r   retrr   )r   expectedr  s      r   	test_retrzTestPOP3Class.test_retr*  s<    $8 	
 kku%h'r    c                     | j                  t        j                  | j                  j                  dt        j
                  dz   dz  z         y )Nzecho +%sr   a)r   r   r   r   r   _MAXLINEr=   s    r   test_too_long_linesz!TestPOP3Class.test_too_long_lines3  s;    &,,dkk.C.C$2)=(DE	Gr    c                 X    | j                  | j                  j                  d             y Nr  )r   r   deler=   s    r   	test_delezTestPOP3Class.test_dele7      dkk&&u-.r    c                 V    | j                  | j                  j                                y r"   )r   r   noopr=   s    r   	test_noopzTestPOP3Class.test_noop:  s    dkk&&()r    c                 X    | j                  | j                  j                  d             y r  )r   r   rpopr=   s    r   	test_rpopzTestPOP3Class.test_rpop=  r  r    md5T)opensslc                 Z    | j                  | j                  j                  dd             y )Nr  dummypassword)r   r   apopr=   s    r   test_apop_normalzTestPOP3Class.test_apop_normal@  s    dkk&&uo>?r    c                     dddz  z   }t        j                  | j                  d|      5  | j                  t        j
                  | j                  j                  dd       d d d        y # 1 sw Y   y xY w)Nr      <i@B welcomer	  kb)r   	swap_attrr   r   r   r   r  )r   evil_welcomes     r   test_apop_REDOSzTestPOP3Class.test_apop_REDOSD  se     0##DKKLI 	Of00$++2B2BCN	O 	O 	Os   7A**A3c                 j    dg ddf}| j                  | j                  j                  dd      |       y )Nr  r  r  r+   )r   r   top)r   r  s     r   test_topzTestPOP3Class.test_topO  s7    %4 	
 	A.9r    c                 n    | j                   j                          | j                   j                  d       y r  )r   uidlr=   s    r   	test_uidlzTestPOP3Class.test_uidlW  s$    r    c                     d| j                   j                  _        | j                  t        j
                  | j                  j                         y r   )r   r   rs   r   r   r   r   utf8r=   s    r   test_utf8_raises_if_unsupportedz-TestPOP3Class.test_utf8_raises_if_unsupported[  s4    */'&,,dkk.>.>?r    c                     d| j                   j                  _        d}| j                  j	                         }| j                  ||       y )NTs   +OK I know RFC6856)r   r   rs   r   r+  r   )r   r  results      r   	test_utf8zTestPOP3Class.test_utf8_  s;    *.'(!!#*r    c                 z    | j                   j                         }| j                  d|j                         v        y )Nr   r   capar   keysr   r2  s     r   	test_capazTestPOP3Class.test_capae  s,    {{!(DIIK78r    c                     | j                   j                         }| j                  |       | j                  | j                   j                         | j                  | j                   j
                         y r"   )r   quitr   assertIsNonesockfiler   s     r   	test_quitzTestPOP3Class.test_quiti  sP    {{!$++**+$++**+r    c                 z    | j                   j                         }| j                  d|j                         v        y rc   r1  r4  s     r   test_stls_capazTestPOP3Class.test_stls_capao  s+    {{!$))+-.r    c                 `    d}| j                   j                         }| j                  ||       y )N   +OK Begin TLS negotiation)r   stlsr   )r   r  r   s      r   	test_stlszTestPOP3Class.test_stlst  s)    /{{!x(r    c                 ~   d}t        j                  t         j                        }|j                  t               | j                  |j                  t         j                         | j                  |j                  d       | j                  t         j                        5  | j                  j                  |      }d d d        t        j                  d| j                  j                   t"        j$                        | _        | j                  j                  |      }| j                  ||       y # 1 sw Y   wxY w)Nr?  Tr   	localhostr   )ry   rz   PROTOCOL_TLS_CLIENTload_verify_locationsCAFILEr   verify_modeCERT_REQUIREDcheck_hostnamer   CertificateErrorr   r@  r   r   r   r   r   r   )r   r  ctxr   s       r   test_stls_contextzTestPOP3Class.test_stls_contextz  s    /nnS445!!&)#*;*;<++T2s334 	1;;##C#0D	1kk+t{{/?/?*6*G*GI{{,x(	1 	1s    D33D<N)r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r   requires_hashdigestr  r#  r&  r)  r,  r/  r5  r;  requires_sslr=  rA  rM  r<   r    r   r   r     s    1IFRKK8C(G/*/ (^''t<@ =@ (^''t<O =O: @+9, / / ) )
 ) )r    r   )SSLConnectionc                       e Zd Zd Zy)DummyPOP3_SSLHandlerc                     t         j                  j                  | |       | j                          | j	                  d       g | _        | j                  d       d| _        d| _        y )Nr   r   TF)	r	   r   r   secure_connectionr   r   r   r   r   r   s     r   r   zDummyPOP3_SSLHandler.__init__  sU    ((t4""$(DNII@A"DO %Dr    N)r   r   r   r   r<   r    r   rR  rR    s    	&r    rR  c                   .    e Zd Zd Zd Zd Zd ZeZd Zy)TestPOP3_SSLClassc                    t        t        t        f      | _        t        | j                  _        | j                  j                          t        j                  | j                  j                  | j                  j                        | _        y r"   )r   r   r   r   rR  r   r   r   r   r   r   r   r=   s    r   r   zTestPOP3_SSLClass.setUp  sT    %tTl32oodkk&6&68H8HIr    c                 D    | j                  dt        j                         y )Nr   )assertInr   __all__r=   s    r   test__all__zTestPOP3_SSLClass.test__all__  s    j&..1r    c                 x   t        j                  t         j                        }d|_        t         j                  |_        | j                  j                          t        j                  | j                  j                  | j                  j                  |      | _        | j                  | j                  j                  t         j                         | j!                  | j                  j                  j"                  |       | j%                  | j                  j'                         j)                  d             y )NFrC  r   )ry   rz   rE  rJ  	CERT_NONErH  r   r7  r   r   r   r   r   assertIsInstancer9  	SSLSocketassertIsr   r   r  r   )r   rL  s     r   test_contextzTestPOP3_SSLClass.test_context  s    nnS445"--oodkk&6&68H8H035dkk..>dkk&&..4((*55f=>r    c                 l    | j                  t        j                  | j                  j                         y r"   r   r   r   r   r@  r=   s    r   rA  zTestPOP3_SSLClass.test_stls  "    &,,dkk.>.>?r    c                 z    | j                   j                         }| j                  d|j                         v        y rc   r   r2  assertFalser3  r4  s     r   r=  z TestPOP3_SSLClass.test_stls_capa  s-    {{!499;./r    N)	r   r   r   r   r[  ra  rA  rM  r=  r<   r    r   rV  rV    s%    J2
?@ "0r    rV  c                   (    e Zd Zd Zd Zd ZeZd Zy)TestPOP3_TLSClassc                 F   t        t        t        f      | _        | j                  j	                          t        j                  | j                  j                  | j                  j                  t        j                        | _        | j                  j                          y r   )r   r   r   r   r   r   r   r   r   r   r   r   r@  r=   s    r   r   zTestPOP3_TLSClass.setUp  sd    %tTl3kk$++"2"2DKK4D4D*6*G*GIr    c                 :   | j                   j                  1| j                   j                  	 | j                   j                          | j                  j                          d | _        y # t        j
                  $ r | j                   j                          Y Qw xY wr"   )	r   r:  r9  r7  r   r   r   r   r   r=   s    r   r   zTestPOP3_TLSClass.tearDown  sx    ;;'DKK,<,<,H$  " 	 %% $ !!#	$s   A* *-BBc                 l    | j                  t        j                  | j                  j                         y r"   rc  r=   s    r   rA  zTestPOP3_TLSClass.test_stls  rd  r    c                 z    | j                   j                         }| j                  d|j                         v        y )Ns   STLSrf  r4  s     r   r=  z TestPOP3_TLSClass.test_stls_capa  s-    {{!DIIK/0r    N)r   r   r   r   r   rA  rM  r=  r<   r    r   ri  ri    s    @ "1r    ri  c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)TestTimeoutsc                 $   t        j                         | _        t        j                  t        j                  t        j
                        | _        | j                  j                  d       t        j                  | j                        | _
        t        j                  | j                  | j                  | j                  f      | _        d| j                  _        | j                  j                          | j                  j!                          y )N<   )targetr   T)r   r   evtr   r   r   r9  
settimeoutr   	bind_portr   r   r   threadr   r   r   r=   s    r   r   zTestTimeouts.setUp  s    ??$MM&..&2D2DE			R !++DII6	&&dkk499@UV!r    c                 F    | j                   j                          d | _         y r"   )rv  r.   r=   s    r   r   zTestTimeouts.tearDown  s    r    c                    |j                          |j                          	 |j                         \  }}|j                  d       |j	                          |j	                          y # t
        $ r Y w xY w# |j	                          w xY w)Ns   + Hola mundo
)r   r   acceptsendr   TimeoutError)r   rs  servr   r   s        r   r   zTestTimeouts.server  si    		JD$II'(JJL JJL  		 JJLs#   4A' '	A30A6 2A33A6 6Bc                    | j                  t        j                                t        j                  t        j
                         	 t        j                  t        | j                        }t        j                  d        | j                  |j                  j                         t        j
                         |j                          y # t        j                  d        w xY wr"   )r8  r   getdefaulttimeoutsetdefaulttimeoutr   r   r   r   r   r   r   r9  
gettimeoutr   r   pops     r   testTimeoutDefaultzTestTimeouts.testTimeoutDefault  s    &2245  !>!>?	+++dDII.C$$T*,,.0M0MN		 $$T*s   $C
 
C!c                    | j                  t        j                                t        j                  d       	 t	        j
                  t        | j                  d       }t        j                  d        | j                  |j                  j                                |j                          y # t        j                  d        w xY w)N   r   )r8  r   r~  r  r   r   r   r   r9  r  r   r  s     r   testTimeoutNonezTestTimeouts.testTimeoutNone  s    &2245  $	+++dDIIt<C$$T*#((--/0		 $$T*s   &B/ /Cc                    t        j                  t        | j                  t        j
                        }| j                  |j                  j                         t        j
                         |j                          | j                  t              5  t        j                  t        | j                  d       d d d        y # 1 sw Y   y xY w)Nr   r   )r   r   r   r   r   r   r   r9  r  r   r   
ValueErrorr  s     r   testTimeoutValuezTestTimeouts.testTimeoutValue  s    kk$		<3P3PQ,,.0M0MN		z* 	4KKdii3	4 	4 	4s   'CCN)	r   r   r   r   r   r   r  r  r  r<   r    r   ro  ro    s     

4r    ro  c                  t    t        j                         } t        j                  t         j                  g|   y r"   )r   threading_setupunittestaddModuleCleanupthreading_cleanup)thread_infos    r   setUpModuler    s*    "224K.@@O;Or    __main__)1__doc__r   r   osr   r   r  r   r   testr   r   test.supportr   r   r   r	   r
   requires_working_socketr   r   rg   r3   ry   pathr.   dirname__file__curdirr}   rG  rO  rO   rS   r   r   r   r   r   r   test.test_ftplibrP  rR  rV  ri  ro  r  r   mainr<   r    r   <module>r     s   $
   	    ) ( ' & ) ! ! % $ $D 1
6:Lww||BGGOOH5BJP^_HWW\\"''//(3@ryy*n]F,(;< 8			[(x** [(z0h))9+;+; 0fD)H D)N .	&}.> 	& 0 0 0D 1 1 1B648 64rP
 zHMMO r    