U
    ¾mœdšW  ã                   @   s   d Z ddlZddlZddlmZ ddlmZmZmZ ddl	Z	ddl
Z
ddlmZ ddlZddlZddlZddlmZ ddlm  mZ ddlZddlmZ ddlm  mZ G dd„ dƒZeeegZ zdd	l!m"Z# e  $e#¡ W n e%k
rò   Y nX e
j& 'e
j& (e)¡¡Z*G d
d„ dƒZ+ej,dd„ ƒZ-G dd„ dƒZ.dd„ Z/ej0 1dddg¡ej0 1dddg¡dd„ ƒƒZ2dd„ Z3ej0 1deddfeddfg¡d d!„ ƒZ4ej0 1d"dd#d$g¡ej0 1dddg¡d%d&„ ƒƒZ5d'd(„ Z6d)d*„ Z7d+d,„ Z8d-d.„ Z9ej0 1d/ej:ej;ej<ej=ej>ej?ej@ejAejBg	¡d0d1„ ƒZCdS )2z0
Tests for the pandas.io.common functionalities
é    N)Úpartial)ÚBytesIOÚStringIOÚUnsupportedOperation)ÚPath)Úis_platform_windowsc                   @   s&   e Zd ZdZddœdd„Zdd„ ZdS )ÚCustomFSPathz%For testing fspath on unknown objectsN)Úreturnc                 C   s
   || _ d S ©N©Úpath)Úselfr   © r   úT/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/pandas/tests/io/test_common.pyÚ__init__    s    zCustomFSPath.__init__c                 C   s   | j S r
   r   ©r   r   r   r   Ú
__fspath__#   s    zCustomFSPath.__fspath__)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r   r      s   r   )Úlocalc                   @   s"  e Zd ZdZdd„ Zdd„ Zdd„ Ze d¡d	d
„ ƒZ	dd„ Z
dd„ Zej de¡dd„ ƒZej deeeg¡dd„ ƒZdd„ Zdd„ Ze d¡dd„ ƒZdd„ Zej dejdedfejded fejd!ed"fejded#fej d$ed%fej!ded&fej"ded'fej#ded(fej$ded)fg	¡d*d+„ ƒZ%ej d,ej&j'dedfej&j(ded-fej&j)d!ed"fej&j*ded#fej&j+ded.fej&j,ded&fej&j-ded(fej&j.ded)fg¡d/d0„ ƒZ/ej dejdedfej0dedfejded fejd!ed"fejded#fej d$ed%fej!ded&fej"ded'fej#ded(fej$ded)fg
¡d1d2„ ƒZ1ej d3ejdd4fej0dd4fejdd5fejd!d6fejdd7fej d$d8fej!dd9fej"dd:fej#dd;fej$dd<fg
¡d=d>„ ƒZ2ej d?d@i dfdAdBdCidCfdDi dfdEi dfdFi dfdGi dfdHi dfdIdJe 3dK¡idfg¡dLdM„ ƒZ4dNdO„ Z5dPS )QÚTestCommonIOCapabilitiesziindex,A,B,C,D
foo,2,3,4,5
bar,7,8,9,10
baz,12,13,14,15
qux,12,13,14,15
foo2,12,13,14,15
bar2,12,13,14,15
c                 C   sB   d}t  |¡}||kst‚tj |¡s*t‚tj |¡|ks>t‚d S )Nz
~/sometest)ÚicomÚ_expand_userÚAssertionErrorÚosr   ÚisabsÚ
expanduser©r   ÚfilenameZexpanded_namer   r   r   Útest_expand_user?   s
    
z)TestCommonIOCapabilities.test_expand_userc                 C   s2   d}t  |¡}||kst‚tj |¡|ks.t‚d S )Nz/somefolder/sometest)r   r   r   r   r   r   r   r   r   r   Útest_expand_user_normal_pathG   s    
z5TestCommonIOCapabilities.test_expand_user_normal_pathc                 C   sB   t  tdƒ¡}|dkst‚t  tdƒ¡}|tj dd¡ks>t‚d S )NÚ.zfoo//barÚfooÚbar)r   Ústringify_pathr   r   r   r   Újoin)r   Úrel_pathZredundant_pathr   r   r   Útest_stringify_path_pathlibN   s    z4TestCommonIOCapabilities.test_stringify_path_pathlibzpy.pathc                 C   s8   t j dd¡}t j |¡}t|ƒ}t |¡|ks4t‚d S )Nr$   r%   )r   r   r'   ÚabspathÚ	LocalPathr   r&   r   )r   r   Úabs_pathZlpathr   r   r   Útest_stringify_path_localpathT   s    z6TestCommonIOCapabilities.test_stringify_path_localpathc                 C   s"   t dƒ}t |¡}|dkst‚d S )Núfoo/bar.csv)r   r   r&   r   )r   ÚpÚresultr   r   r   Útest_stringify_path_fspath[   s    
z3TestCommonIOCapabilities.test_stringify_path_fspathc              
   C   sT   t  d¡}t ¡ �8}|jd|› �dd��}|t |¡ks<t‚W 5 Q R X W 5 Q R X d S )NÚfsspeczfile://Úwb©Úmode)ÚpytestÚimportorskipÚtmÚensure_cleanÚopenr   r&   r   )r   r2   r   Z
fsspec_objr   r   r   Ú!test_stringify_file_and_path_like`   s    

z:TestCommonIOCapabilities.test_stringify_file_and_path_likeÚ	path_typec                 C   s2   |\}}|d| ƒ}t j|dd�}||ks.t‚d S )Nr.   Zinfer)Úcompression)r   Zinfer_compressionr   )r   Zcompression_formatr<   Ú	extensionÚexpectedr   r=   r   r   r   Ú test_infer_compression_from_pathg   s    z9TestCommonIOCapabilities.test_infer_compression_from_pathc              
   C   sz   t jt ¡ d��`}|dt|ƒj d ƒ}t |d¡�2}t|jjƒ ¡ sJt	‚t
j |¡|jjksbt	‚W 5 Q R X W 5 Q R X d S )N)Údirz~/z	/sometestÚw)ÚtempfileÚTemporaryDirectoryr   ÚhomeÚnamer   Ú
get_handleÚhandleÚis_absoluter   r   r   r   )r   r<   Útmpr    Úhandlesr   r   r   Útest_get_handle_with_pathn   s
    z2TestCommonIOCapabilities.test_get_handle_with_pathc              
   C   sP   t ƒ �6}t |d¡�}|j|ks$t‚W 5 Q R X |jr8t‚W 5 Q R X |jsLt‚d S )NÚr)r   r   rG   rH   r   Úclosed)r   Zinput_bufferrK   r   r   r   Útest_get_handle_with_bufferw   s
    z4TestCommonIOCapabilities.test_get_handle_with_bufferc              	   C   s”   d}t jt|ƒddd��r}d}d}|j |¡}t|ƒ|ks>t‚t|ƒ|k rjt|j ¡ ƒdks`t‚||7 }qt||7 }q"|| d¡ks†t‚W 5 Q R X d S )	Nõ&   a,b,c
1,2,3
Â©,Â®,Â®
Look,a snake,ðŸ��ÚrbF©Úis_textó    é   r   úutf-8)r   rG   r   rH   ÚreadÚlenr   Úencode)r   ÚdatarK   r0   Ú	chunksizeÚchunkr   r   r   Ú)test_bytesiowrapper_returns_correct_bytes   s    
zBTestCommonIOCapabilities.test_bytesiowrapper_returns_correct_bytesÚpyarrowc              	   C   s‚   ddl m} d}t dddgddd	gd
ddgdœ¡}t|ƒ}tj|ddd��,}| |j¡ 	¡ }t
 ||¡ |jrtt‚W 5 Q R X d S )Nr   )ÚcsvrP   Ú1õ   Â©ZLookÚ2õ   Â®za snakeÚ3u   ðŸ��©ÚaÚbÚcrQ   FrR   )r^   r_   ÚpdÚ	DataFramer   r   rG   Úread_csvrH   Z	to_pandasr8   Úassert_frame_equalrN   r   )r   r_   rZ   r?   ÚsrK   Údfr   r   r   Útest_get_handle_pyarrow_compat–   s    ÿz7TestCommonIOCapabilities.test_get_handle_pyarrow_compatc              	   C   s¦   t jt| jƒdd��}t j|dd�}W 5 Q R X t  t| jƒ¡}t ||¡ t jt| jƒdd��>}t|ƒ}t ||jdg ¡ t t  |¡|jdd … ¡ W 5 Q R X d S )Né   )r[   T)Zignore_indexr   )	ri   rk   r   Údata1Úconcatr8   rl   ÚnextZiloc)r   Úreaderr0   r?   ÚitÚfirstr   r   r   Útest_iterator¨   s    z&TestCommonIOCapabilities.test_iteratorz#reader, module, error_class, fn_extr   r_   ÚtxtZxlrdZxlsxÚfeatherÚtablesZh5ZdtaZsas7bdatÚjsonÚpicklec                 C   sÊ   t  |¡ tj tdd| ¡}d|› d�}d|› d�}d}d}	d	|› d
|› d�}
d|› d�}d|› d�}d|› �}t j|d|› d|› d|› d|	› d|
› d|› d|› d|› d�d�� ||ƒ W 5 Q R X d S )NrZ   údoes_not_exist.úFile (b')?.+does_not_exist\.ú'? does not existú:\[Errno 2\] No such file or directory: '.+does_not_exist\.ú'zExpected object or valueú7path_or_buf needs to be a string file path or file-likeú#\[Errno 2\] File .+does_not_exist\.ú$ does not exist: '.+does_not_exist\.õ<   \[Errno 2\] æ²¡æœ‰é‚£ä¸ªæ–‡ä»¶æˆ–ç›®å½•: '.+does_not_exist\.ú?\[Errno 2\] File o directory non esistente: '.+does_not_exist\.ú+Failed to open local file.+does_not_exist\.ú(ú|ú)©Úmatch)r6   r7   r   r   r'   ÚHEREÚraises)r   rt   ÚmoduleÚerror_classÚfn_extr   Úmsg1Úmsg2Úmsg3Úmsg4Úmsg5Úmsg6Úmsg7Úmsg8r   r   r   Útest_read_non_existent´   s"    
ÿ
ÿ
4þz/TestCommonIOCapabilities.test_read_non_existentz#method, module, error_class, fn_extÚhtmlZparquetc              	   C   sl   t  |¡ t dddgdddgdddgdœ¡}tj tddd	| ¡}t j|d
d�� |||ƒ W 5 Q R X d S )Nrp   é   é   é   rU   re   rZ   Zmissing_folderr}   z@Cannot save file into a non-existent directory: .*missing_folderr‹   )	r6   r7   ri   rj   r   r   r'   r�   rŽ   )r   Úmethodr�   r�   r‘   Zdummy_framer   r   r   r   Ú#test_write_missing_parent_directoryÚ   s    
$þz<TestCommonIOCapabilities.test_write_missing_parent_directoryc                 C   sÚ   t  |¡ tj dd| ¡}| tddd„ ¡ d|› d�}d|› d	�}d
}	d}
d|› d|› d	�}d|› d	�}d|› d	�}d|› �}t j|d|› d|› d|	› d|
› d|› d|› d|› d|› d�d�� ||ƒ W 5 Q R X d S )Nú~r}   r   c                 S   s   t j d| ¡S )Nr$   )r   r   r'   )Úxr   r   r   Ú<lambda>
  rT   zJTestCommonIOCapabilities.test_read_expands_user_home_dir.<locals>.<lambda>r~   r   r€   r�   z0Unexpected character found when decoding 'false'r‚   rƒ   r„   r…   r†   r‡   rˆ   r‰   rŠ   r‹   )r6   r7   r   r   r'   Úsetattrr   rŽ   )r   rt   r�   r�   r‘   Zmonkeypatchr   r’   r“   r”   r•   r–   r—   r˜   r™   r   r   r   Útest_read_expands_user_home_dirõ   s$    
ÿ
ÿ
4þz8TestCommonIOCapabilities.test_read_expands_user_home_dirzreader, module, path)ÚiorZ   r_   ziris.csv)r¦   rZ   Zfixed_widthzfixed_width_format.txt)r¦   rZ   Úexcelz
test1.xlsx)r¦   rZ   ry   zfeather-0_3_1.feather)r¦   rZ   Z
legacy_hdfzdatetimetz_object.h5)r¦   rZ   Ústatazstata10_115.dta)r¦   ÚsasrZ   ztest1.sas7bdat)r¦   r{   rZ   ztsframe_v012.json)r¦   rZ   r|   zcategorical.0.25.0.picklec                 C   sR   t  |¡ ||Ž }t|ƒ}||ƒ}||ƒ}| d¡rBt ||¡ nt ||¡ d S )Nz.pickle)r6   r7   r   Úendswithr8   Zassert_categorical_equalrl   )r   rt   r�   r   ÚdatapathÚmypathr0   r?   r   r   r   Útest_read_fspath_all   s     

z-TestCommonIOCapabilities.test_read_fspath_allz"writer_name, writer_kwargs, moduleÚto_csvÚto_excelÚengineZopenpyxlÚ
to_featherÚto_htmlÚto_jsonÚto_latexÚ	to_pickleÚto_stataZ
time_stampz2019-01-01 00:00c                 C   s
  |dkrt  d¡ t d¡}t d¡}t dddgi¡}|�Ä}|�´}t  |¡ t|ƒ}	t||ƒ}
|
|f|Ž |
|	f|Ž t|dƒ�j}t|dƒ�T}|d	krÂtj	|f|Ž}tj	|f|Ž}t 
||¡ n| ¡ }| ¡ }||ksÞt‚W 5 Q R X W 5 Q R X W 5 Q R X W 5 Q R X d S )
N)r´   Zjinja2ÚstringÚfspathÚArp   rœ   rQ   r¯   )r6   r7   r8   r9   ri   rj   r   Úgetattrr:   Ú
read_excelrl   rW   r   )r   Zwriter_nameZwriter_kwargsr�   Úp1Úp2rn   r·   r¸   r¬   ÚwriterZf_strZf_pathr0   r?   r   r   r   Útest_write_fspath_allM  s&    




z.TestCommonIOCapabilities.test_write_fspath_allc           	   
   C   s    t  d¡ t dddgi¡}t d¡}t d¡}|�V}|�F}t|ƒ}|j|dd� |j|dd� tj|dd�}tj|dd�}W 5 Q R X W 5 Q R X t 	||¡ d S )	Nrz   r¹   rp   rœ   r·   r¸   r%   )Úkey)
r6   r7   ri   rj   r8   r9   r   Zto_hdfÚread_hdfrl   )	r   rn   r¼   r½   r·   r¸   r¬   r0   r?   r   r   r   Útest_write_fspath_hdf5t  s    


"z/TestCommonIOCapabilities.test_write_fspath_hdf5N)6r   r   r   rq   r!   r"   r)   ÚtdZ
skip_if_nor-   r1   r;   r6   ÚmarkÚparametrizeÚ
path_typesr@   Ústrr   r   rL   rO   r]   ro   rw   ri   rk   ÚFileNotFoundErrorÚread_fwfr»   Úread_featherÚOSErrorrÁ   Ú
read_stataÚread_sasÚ	read_jsonÚread_picklerš   rj   r®   r²   r¯   r±   Z
to_parquetr¶   r³   rµ   r    Z
read_tabler¥   r­   Úto_datetimer¿   rÂ   r   r   r   r   r   5   sÈ   	



÷þ
øþ
öþ


ý
ýý


ýêþ
øþ
r   c                 C   s   | ddddƒS )Nr¦   rZ   r_   ztest_mmap.csvr   )r«   r   r   r   Ú	mmap_file‰  s    rÑ   c                   @   sX   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zej 	d	d
dg¡ej 	dddg¡dd„ ƒƒZ
dS )ÚTestMMapWrapperc              	   C   s”   t dƒ}dd„ |_tƒ r"d}t}n
d}tj}tj||d�� t 	|d¡ W 5 Q R X t
|ƒ�}W 5 Q R X d}tjt|d�� t 	|d¡ W 5 Q R X d S )	NzI am not a filec                   S   s   dS )Néÿÿÿÿr   r   r   r   r   r£   ‘  rT   z;TestMMapWrapper.test_constructor_bad_file.<locals>.<lambda>zThe parameter is incorrectz
[Errno 22]r‹   TzI/O operation on closed file)r   Úfilenor   rË   ÚmmapÚerrorr6   rŽ   r   Z_maybe_memory_mapr:   Ú
ValueError)r   rÑ   Znon_fileÚmsgÚerrÚtargetr   r   r   Útest_constructor_bad_file�  s    


z)TestMMapWrapper.test_constructor_bad_filec                 C   s    t |ƒ�Ž}| ¡ }tj|dddd��h}|j}t|jjtjƒs@t‚|D ] }t	|ƒ}| 
¡ | 
¡ ksDt‚qDtjtdd�� t	|ƒ W 5 Q R X W 5 Q R X W 5 Q R X d S )NrM   T)rS   Ú
memory_mapz^$r‹   )r:   Ú	readlinesr   rG   rH   Ú
isinstanceÚbufferrÕ   r   rs   Ústripr6   rŽ   ÚStopIteration)r   rÑ   rÚ   ÚlinesZwrappersÚwrapperÚlineÚ	next_liner   r   r   Ú	test_next¥  s     
   ÿzTestMMapWrapper.test_nextc              
   C   sR   t  ¡ �@}t  ¡ }| |¡ tjtdd�� tj|dd� W 5 Q R X W 5 Q R X d S )NzUnknown enginer‹   Zpyt)r°   )	r8   r9   ÚmakeDataFramer®   r6   rŽ   r×   ri   rk   ©r   r   rn   r   r   r   Útest_unknown_engine¶  s
    

z#TestMMapWrapper.test_unknown_enginec              	   C   sD   t  ¡ �2}t  ¡ }|j|dd� t  |tj|dd�¡ W 5 Q R X dS )z\
        'encoding' shouldn't be passed to 'open' in binary mode.

        GH 35058
        zw+br4   r   ©Z	index_colN)r8   r9   rç   r®   rl   ri   rk   rè   r   r   r   Útest_binary_mode½  s    
z TestMMapWrapper.test_binary_modeÚencodingzutf-16zutf-32Úcompression_Úbz2Úxzc              
   C   st   t  ¡ }t  ¡ �Z}t  t¡� |j|||d� W 5 Q R X d}tjt|d�� t	j
|||d� W 5 Q R X W 5 Q R X dS )zš
        bz2 and xz do not write the byte order mark (BOM) for utf-16/32.

        https://stackoverflow.com/questions/55171439

        GH 35681
        )r=   rì   z&UTF-\d+ stream does not start with BOMr‹   N)r8   rç   r9   Zassert_produces_warningÚUnicodeWarningr®   r6   rŽ   ÚUnicodeErrorri   rk   )r   rì   rí   rn   r   rØ   r   r   r   Útest_warning_missing_utf_bomÈ  s    

z,TestMMapWrapper.test_warning_missing_utf_bomN)r   r   r   rÛ   ræ   ré   rë   r6   rÄ   rÅ   rò   r   r   r   r   rÒ   Ž  s   rÒ   c                   C   s‚   t  d¡st‚t  d¡st‚t  d¡r*t‚t  d¡r8t‚t  d¡rFt‚t  d¡rTt‚t  d¡rbt‚t  d¡rpt‚t  d	¡s~t‚d S )
Nzgcs://pandas/somethingelse.comzgs://pandas/somethingelse.comzhttp://pandas/somethingelse.comzrandom:pandas/somethingelse.comz/local/pathzrelative/local/pathzthis is not fsspec://urlz({'url': 'gs://pandas/somethingelse.com'}z#RFC-3986+compliant.spec://something)r   Zis_fsspec_urlr   r   r   r   r   Útest_is_fsspec_urlÝ  s    ró   rì   rV   Úformatr_   r{   c              
   C   sš   t  ¡ }t  ¡ �t}tj|d| d��}t|d|› �ƒ|ƒ W 5 Q R X tj|d| d��(}|dkrltj|dd�}n
t |¡}W 5 Q R X W 5 Q R X t  	||¡ d S )NrB   )r5   rì   Zto_rM   r_   r   rê   )
r8   rç   r9   Úcodecsr:   rº   ri   rk   rÎ   rl   )rì   rô   r?   r   rH   rn   r   r   r   Útest_codecs_encodingì  s    
rö   c                  C   s¤   t  ¡ } t  ¡ �~}t|dƒ�*}t d¡|ƒ�}|  |¡ W 5 Q R X W 5 Q R X t|dƒ�.}t d¡|ƒ�}tj	|dd�}W 5 Q R X W 5 Q R X W 5 Q R X t  
| |¡ d S )Nr3   rV   rQ   r   rê   )r8   rç   r9   r:   rõ   Ú	getwriterr®   Ú	getreaderri   rk   rl   )r?   r   rH   Úencodedrn   r   r   r   Útest_codecs_get_writer_readerü  s    
,rú   zio_class,mode,msgÚtz*a bytes-like object is required, not 'str'rg   z%string argument expected, got 'bytes'c              
   C   sL   t  ¡ }| ƒ �4}tjt|d�� |j|d|› �d� W 5 Q R X W 5 Q R X d S )Nr‹   rB   r4   )r8   rç   r6   rŽ   Ú	TypeErrorr®   )Zio_classr5   rØ   r?   rß   r   r   r   Útest_explicit_encoding	  s    rý   Úencoding_errorsÚstrictÚreplacec              
   C   s  d}d}|dkr<d| d |d  d | }t tjdd�}n.d	|d  d
 | d | d }t tjdd�}t ¡ �†}t|ƒ}| |¡ | dkr¶tj	t
|d�� ||| d� W 5 Q R X n>||| d�}|j| d�}	tj|	|	gi|	d gd�}
t ||
¡ W 5 Q R X d S )Nz'utf-8' codec can't decode byteó   är_   ó   ,ó   
rœ   r   rê   s   {"s   ": {"s   ":"s   "}}Úindex)Zorientr   r‹   )rþ   ©Úerrors)r  )r   ri   rk   rÎ   r8   r9   r   Úwrite_bytesr6   rŽ   ÚUnicodeDecodeErrorÚdecoderj   rl   )rþ   rô   rØ   Zbad_encodingÚcontentrt   r   Úfilern   Údecodedr?   r   r   r   Útest_encoding_errors  s<    ÿþýüûúÿ	

r  c               
   C   sB   t  ¡ �0} tjtdd�� tj| ddd� W 5 Q R X W 5 Q R X d S )Nzunknown error handler namer‹   rB   Úbadr  )r8   r9   r6   rŽ   ÚLookupErrorr   rG   r   r   r   r   Útest_bad_encdoing_errors=  s    
r  c               	   C   s8   t jtdd�� } t d¡ | jtjks*t‚W 5 Q R X d S )Nz\[Errno 2\]r‹   Zdoesnt_exist)r6   rŽ   rÈ   ri   rk   ÚerrnoÚENOENTr   )rÙ   r   r   r   Útest_errno_attributeD  s    
r  c               
   C   s@   t jtdd��( tƒ �} tj| ddd� W 5 Q R X W 5 Q R X d S )NrÔ   r‹   rQ   T)rÜ   )r6   rŽ   r   r   r   rG   )rß   r   r   r   Útest_fail_mmapK  s    r  c                  C   sd   G dd„ dƒ} t jtdd��> tƒ �,}t |d¡�}|j | ƒ ¡ W 5 Q R X W 5 Q R X W 5 Q R X d S )Nc                   @   s   e Zd Zdd„ ZdS )z&test_close_on_error.<locals>.TestErrorc                 S   s   t dƒ‚d S )NÚtest)rË   r   r   r   r   ÚcloseT  s    z,test_close_on_error.<locals>.TestError.closeN)r   r   r   r  r   r   r   r   Ú	TestErrorS  s   r  r  r‹   rQ   )r6   rŽ   rË   r   r   rG   Zcreated_handlesÚappend)r  rß   rK   r   r   r   Útest_close_on_errorQ  s
    r  rt   c              	   C   s"   t ƒ �}t | |¡ W 5 Q R X d S r
   )r   r|   Údump)rt   rß   r   r   r   Útest_pickle_reader]  s    r  )Dr   rõ   r  Ú	functoolsr   r¦   r   r   r   rÕ   r   Úpathlibr   r|   rC   r6   Zpandas.compatr   Zpandas.util._test_decoratorsÚutilZ_test_decoratorsrÃ   Zpandasri   Zpandas._testingZ_testingr8   Zpandas.io.commonÚcommonr   r   rÇ   rÆ   Zpy.pathr   r+   r  ÚImportErrorr   r*   ÚdirnameÚ__file__r�   r   ZfixturerÑ   rÒ   ró   rÄ   rÅ   rö   rú   rý   r  r  r  r  r  rk   rÉ   r»   rÊ   rÁ   rÌ   rÍ   rÎ   rÏ   r  r   r   r   r   Ú<module>   s|   
  V
Oþþ

!÷þ