o
    Ëý°jÙ[  ã                   @   sZ  d Z ddlZddlZddlmZ ddlmZ g d¢Ze e	¡Z
G dd„ deƒZG d	d
„ d
eƒZG dd„ deƒZe d¡Zdd„ ZeZG dd„ deƒZdd„ ZG dd„ deƒZe d¡dfe d¡dfe d¡dfe d¡dfe d¡dfe d¡dfe d ¡d!fe d"¡d#fe d$¡d%fe d&¡d'ff
Ze d(¡dfe d)¡dfe d*¡d!fe d ¡d!fe d+¡dffZe d,¡Zd-d.„ Zd/d0„ Ze d1ej¡Zd2d2d3d2d4ddd5œZd6d7„ ZG d8d9„ d9eƒZ G d:d;„ d;eƒZ!e d<ej¡Z"d=d>„ Z#d?d@„ Z$G dAdB„ dBeƒZ%G dCdD„ dDeƒZ&G dEdF„ dFeƒZ'e'eeeƒe'ee!dGdH„ ƒe'e$e&eƒdIœZ(e(dJ e(dK< dLdM„ Z)dS )Nz~
Implementation of a flexible versioning scheme providing support for PEP-440,
setuptools-compatible and semantic versioning.
é    Né   )Ústring_types©Úparse_requirement)ÚNormalizedVersionÚNormalizedMatcherÚLegacyVersionÚLegacyMatcherÚSemanticVersionÚSemanticMatcherÚUnsupportedVersionErrorÚ
get_schemec                   @   s   e Zd ZdZdS )r   zThis is an unsupported version.N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© r   r   úŽ/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/pip/_vendor/distlib/version.pyr      s    r   c                   @   sx   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zedd„ ƒZdS )ÚVersionc                 C   s@   |  ¡  | _}|  |¡ | _}t|tƒsJ ‚t|ƒdksJ ‚d S )Nr   )ÚstripÚ_stringÚparseÚ_partsÚ
isinstanceÚtupleÚlen)ÚselfÚsÚpartsr   r   r   Ú__init__   s   zVersion.__init__c                 C   ó   t dƒ‚)Nzplease implement in a subclass©ÚNotImplementedError©r   r   r   r   r   r   %   ó   zVersion.parsec                 C   s$   t | ƒt |ƒkrtd| |f ƒ‚d S )Nzcannot compare %r and %r)ÚtypeÚ	TypeError©r   Úotherr   r   r   Ú_check_compatible(   s   ÿzVersion._check_compatiblec                 C   s   |   |¡ | j|jkS ©N©r)   r   r'   r   r   r   Ú__eq__,   ó   
zVersion.__eq__c                 C   ó   |   |¡ S r*   ©r,   r'   r   r   r   Ú__ne__0   ó   zVersion.__ne__c                 C   s   |   |¡ | j|jk S r*   r+   r'   r   r   r   Ú__lt__3   r-   zVersion.__lt__c                 C   s   |   |¡p	|  |¡ S r*   ©r2   r,   r'   r   r   r   Ú__gt__7   s   zVersion.__gt__c                 C   ó   |   |¡p	|  |¡S r*   r3   r'   r   r   r   Ú__le__:   ó   zVersion.__le__c                 C   r5   r*   )r4   r,   r'   r   r   r   Ú__ge__=   r7   zVersion.__ge__c                 C   s
   t | jƒS r*   )Úhashr   ©r   r   r   r   Ú__hash__A   ó   
zVersion.__hash__c                 C   ó   d| j j| jf S )Nz%s('%s')©Ú	__class__r   r   r:   r   r   r   Ú__repr__D   ó   zVersion.__repr__c                 C   ó   | j S r*   ©r   r:   r   r   r   Ú__str__G   ó   zVersion.__str__c                 C   r    )NzPlease implement in subclasses.r!   r:   r   r   r   Úis_prereleaseJ   s   zVersion.is_prereleaseN)r   r   r   r   r   r)   r,   r0   r2   r4   r6   r8   r;   r@   rD   ÚpropertyrF   r   r   r   r   r      s    r   c                	   @   sš   e Zd ZdZdd„ dd„ dd„ dd„ dd„ dd„ d	d„ d
d„ dœZdd„ Zdd„ Zdd„ Zedd„ ƒZ	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS ) ÚMatcherNc                 C   s   | |k S r*   r   ©ÚvÚcÚpr   r   r   Ú<lambda>T   ó    zMatcher.<lambda>c                 C   s   | |kS r*   r   rI   r   r   r   rM   U   rN   c                 C   s   | |kp| |k S r*   r   rI   r   r   r   rM   V   ó    c                 C   ó   | |kp| |kS r*   r   rI   r   r   r   rM   W   rO   c                 C   ó   | |kS r*   r   rI   r   r   r   rM   X   rN   c                 C   rQ   r*   r   rI   r   r   r   rM   Y   rN   c                 C   rP   r*   r   rI   r   r   r   rM   [   rO   c                 C   s   | |kS r*   r   rI   r   r   r   rM   \   rN   )ú<ú>ú<=ú>=ú==ú===ú~=ú!=c                 C   ó   t |ƒS r*   r   r#   r   r   r   r   a   r$   zMatcher.parse_requirementc                 C   sÒ   | j d u r	tdƒ‚| ¡  | _}|  |¡}|std| ƒ‚|j| _| j ¡ | _g }|jrb|jD ]2\}}| 	d¡rQ|dvrBtd| ƒ‚|d d… d}}|   |¡ n|   |¡d}}| 
|||f¡ q/t|ƒ| _d S )	NzPlease specify a version classzNot valid: %rz.*)rV   rY   z#'.*' not allowed for %r constraintséþÿÿÿTF)Úversion_classÚ
ValueErrorr   r   r   ÚnameÚlowerÚkeyÚconstraintsÚendswithÚappendr   r   )r   r   ÚrÚclistÚopÚvnÚprefixr   r   r   r   d   s*   


ÿzMatcher.__init__c                 C   sx   t |tƒr
|  |¡}| jD ],\}}}| j |¡}t |tƒr"t| |ƒ}|s0d|| jjf }t	|ƒ‚||||ƒs9 dS qdS )zÉ
        Check if the provided version matches the constraints.

        :param version: The version to match against this instance.
        :type version: String or :class:`Version` instance.
        z%r not implemented for %sFT)
r   r   r\   r   Ú
_operatorsÚgetÚgetattrr?   r   r"   )r   ÚversionÚoperatorÚ
constraintrh   ÚfÚmsgr   r   r   Úmatch�   s   




ÿÿzMatcher.matchc                 C   s6   d }t | jƒdkr| jd d dv r| jd d }|S )Nr   r   )rV   rW   )r   r   )r   Úresultr   r   r   Úexact_version–   s    zMatcher.exact_versionc                 C   s0   t | ƒt |ƒks| j|jkrtd| |f ƒ‚d S )Nzcannot compare %s and %s)r%   r^   r&   r'   r   r   r   r)   �   s   ÿzMatcher._check_compatiblec                 C   s"   |   |¡ | j|jko| j|jkS r*   )r)   r`   r   r'   r   r   r   r,   ¡   s   
zMatcher.__eq__c                 C   r.   r*   r/   r'   r   r   r   r0   ¥   r1   zMatcher.__ne__c                 C   s   t | jƒt | jƒ S r*   )r9   r`   r   r:   r   r   r   r;   ©   r7   zMatcher.__hash__c                 C   r=   )Nz%s(%r)r>   r:   r   r   r   r@   ¬   rA   zMatcher.__repr__c                 C   rB   r*   rC   r:   r   r   r   rD   ¯   rE   zMatcher.__str__)r   r   r   r\   ri   r   r   rq   rG   rs   r)   r,   r0   r;   r@   rD   r   r   r   r   rH   O   s,    ÷
rH   zk^v?(\d+!)?(\d+(\.\d+)*)((a|b|c|rc)(\d+))?(\.(post)(\d+))?(\.(dev)(\d+))?(\+([a-zA-Z\d]+(\.[a-zA-Z\d]+)?))?$c                 C   s¾  |   ¡ } t | ¡}|std|  ƒ‚| ¡ }tdd„ |d  d¡D ƒƒ}t|ƒdkrA|d dkrA|d d… }t|ƒdkrA|d dks/|d sHd}n
t|d d d… ƒ}|dd	… }|d
d… }|dd… }|d }|dkrod}n
|d t|d ƒf}|dkr€d}n
|d t|d ƒf}|dkr‘d}n
|d t|d ƒf}|d u r¢d}n"g }	| d¡D ]}
|
 	¡ r¶dt|
ƒf}
nd|
f}
|	 
|
¡ q©t|	ƒ}|sÏ|sÍ|rÍd}nd}|sÓd}|s×d}||||||fS )NzNot a valid version: %sc                 s   ó   � | ]}t |ƒV  qd S r*   ©Úint©Ú.0rJ   r   r   r   Ú	<genexpr>¾   ó   € z_pep_440_key.<locals>.<genexpr>r   Ú.éÿÿÿÿr   é   é   é   é	   é
   é   é   )NNr   )Úar|   )Úz)Ú_)Úfinal)r   ÚPEP440_VERSION_RErq   r   Úgroupsr   Úsplitr   rv   Úisdigitrc   )r   Úmr‰   ÚnumsÚepochÚpreÚpostÚdevÚlocalr   Úpartr   r   r   Ú_pep_440_key¸   sV   
ÿr”   c                   @   s0   e Zd ZdZdd„ Zeg d¢ƒZedd„ ƒZdS )r   aI  A rational version.

    Good:
        1.2         # equivalent to "1.2.0"
        1.2.0
        1.2a1
        1.2.3a2
        1.2.3b1
        1.2.3c1
        1.2.3.4
        TODO: fill this out

    Bad:
        1           # minimum two numbers
        1.2a        # release level must have a release serial
        1.2.3b
    c                 C   s<   t |ƒ}t |¡}| ¡ }tdd„ |d  d¡D ƒƒ| _|S )Nc                 s   rt   r*   ru   rw   r   r   r   ry     rz   z*NormalizedVersion.parse.<locals>.<genexpr>r   r{   )Ú_normalized_keyrˆ   rq   r‰   r   rŠ   Ú_release_clause)r   r   rr   rŒ   r‰   r   r   r   r   
  s
   
zNormalizedVersion.parse)r„   ÚbrK   Úrcr‘   c                    s   t ‡ fdd„ˆ jD ƒƒS )Nc                 3   s"   � | ]}|r|d  ˆ j v V  qdS )r   N)ÚPREREL_TAGS)rx   Útr:   r   r   ry     s   €  z2NormalizedVersion.is_prerelease.<locals>.<genexpr>)Úanyr   r:   r   r:   r   rF     s   zNormalizedVersion.is_prereleaseN)	r   r   r   r   r   Úsetr™   rG   rF   r   r   r   r   r   ø   s    r   c                 C   s>   t | ƒ} t |ƒ}| |krdS |  |¡sdS t|ƒ}| | dkS )NTFr{   )ÚstrÚ
startswithr   )ÚxÚyÚnr   r   r   Ú_match_prefix  s   
r¢   c                	   @   sn   e Zd ZeZddddddddd	œZd
d„ Zdd„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ ZdS )r   Ú_match_compatibleÚ	_match_ltÚ	_match_gtÚ	_match_leÚ	_match_geÚ	_match_eqÚ_match_arbitraryÚ	_match_ne)rX   rR   rS   rT   rU   rV   rW   rY   c                 C   sV   |rd|vo
|j d }n|j d  o|j d }|r'|j dd¡d }|  |¡}||fS )Nú+r|   r   r   )r   r   rŠ   r\   )r   rl   rn   rh   Ústrip_localr   r   r   r   Ú_adjust_local6  s   
zNormalizedMatcher._adjust_localc                 C   sD   |   |||¡\}}||krdS |j}d dd„ |D ƒ¡}t||ƒ S )NFr{   c                 S   ó   g | ]}t |ƒ‘qS r   ©r�   ©rx   Úir   r   r   Ú
<listcomp>I  ó    z/NormalizedMatcher._match_lt.<locals>.<listcomp>©r­   r–   Újoinr¢   ©r   rl   rn   rh   Úrelease_clauseÚpfxr   r   r   r¤   D  ó   zNormalizedMatcher._match_ltc                 C   sD   |   |||¡\}}||krdS |j}d dd„ |D ƒ¡}t||ƒ S )NFr{   c                 S   r®   r   r¯   r°   r   r   r   r²   Q  r³   z/NormalizedMatcher._match_gt.<locals>.<listcomp>r´   r¶   r   r   r   r¥   L  r¹   zNormalizedMatcher._match_gtc                 C   s   |   |||¡\}}||kS r*   ©r­   ©r   rl   rn   rh   r   r   r   r¦   T  ó   zNormalizedMatcher._match_lec                 C   s   |   |||¡\}}||kS r*   rº   r»   r   r   r   r§   X  r¼   zNormalizedMatcher._match_gec                 C   s0   |   |||¡\}}|s||k}|S t||ƒ}|S r*   ©r­   r¢   ©r   rl   rn   rh   rr   r   r   r   r¨   \  s   
ÿzNormalizedMatcher._match_eqc                 C   s   t |ƒt |ƒkS r*   r¯   r»   r   r   r   r©   d  s   z"NormalizedMatcher._match_arbitraryc                 C   s2   |   |||¡\}}|s||k}|S t||ƒ }|S r*   r½   r¾   r   r   r   rª   g  s   ÿzNormalizedMatcher._match_nec                 C   sf   |   |||¡\}}||krdS ||k rdS |j}t|ƒdkr$|d d… }d dd„ |D ƒ¡}t||ƒS )NTFr   r|   r{   c                 S   r®   r   r¯   r°   r   r   r   r²   z  r³   z7NormalizedMatcher._match_compatible.<locals>.<listcomp>)r­   r–   r   rµ   r¢   r¶   r   r   r   r£   o  s   
z#NormalizedMatcher._match_compatibleN)r   r   r   r   r\   ri   r­   r¤   r¥   r¦   r§   r¨   r©   rª   r£   r   r   r   r   r   '  s(    ør   z[.+-]$Ú z^[.](\d)z0.\1z^[.-]z
^\((.*)\)$ú\1z^v(ersion)?\s*(\d+)z\2z^r(ev)?\s*(\d+)z[.]{2,}r{   z\b(alfa|apha)\bÚalphaz\b(pre-alpha|prealpha)\bz	pre.alphaz	\(beta\)$Úbetaz
^[:~._+-]+z
[,*")([\]]z[~:+_ -]z\.$z(\d+(\.\d+)*)c                 C   sN  |   ¡  ¡ }tD ]
\}}| ||¡}q|sd}t |¡}|s#d}|}nZ| ¡ d  d¡}dd„ |D ƒ}t|ƒdk rD| 	d¡ t|ƒdk s9t|ƒdkrS|| 
¡ d… }nd dd„ |dd… D ƒ¡|| 
¡ d…  }|dd… }d d	d„ |D ƒ¡}|  ¡ }|rŒtD ]
\}}| ||¡}q�|s‘|}nd
|v r—dnd}|| | }t|ƒs¥d}|S )z€
    Try to suggest a semantic form for a version for which
    _suggest_normalized_version couldn't come up with anything.
    z0.0.0r   r{   c                 S   r®   r   ru   r°   r   r   r   r²   ª  r³   z-_suggest_semantic_version.<locals>.<listcomp>é   Nc                 S   r®   r   r¯   r°   r   r   r   r²   °  r³   c                 S   r®   r   r¯   r°   r   r   r   r²   ²  r³   r‘   ú-r«   )r   r_   Ú_REPLACEMENTSÚsubÚ_NUMERIC_PREFIXrq   r‰   rŠ   r   rc   Úendrµ   Ú_SUFFIX_REPLACEMENTSÚ	is_semver)r   rr   ÚpatÚreplrŒ   rh   ÚsuffixÚsepr   r   r   Ú_suggest_semantic_version–  s<   

ÿ,rÏ   c                 C   sb  zt | ƒ | W S  ty   Y nw |  ¡ }dD ]
\}}| ||¡}qt dd|¡}t dd|¡}t dd|¡}t dd	|¡}t d
d|¡}| d¡rP|dd… }t dd|¡}t dd|¡}t dd|¡}t dd|¡}t dd|¡}t dd|¡}t dd|¡}t dd|¡}t dd|¡}t dd|¡}t dd |¡}zt |ƒ W |S  ty°   d}Y |S w )!aè  Suggest a normalized version close to the given version string.

    If you have a version string that isn't rational (i.e. NormalizedVersion
    doesn't like it) then you might be able to get an equivalent (or close)
    rational version from this function.

    This does a number of simple normalizations to the given string, based
    on observation of versions currently in use on PyPI. Given a dump of
    those version during PyCon 2009, 4287 of them:
    - 2312 (53.93%) match NormalizedVersion without change
      with the automatic suggestion
    - 3474 (81.04%) match when using this suggestion method

    @param s {str} An irrational version string.
    @returns A rational version string, or None, if couldn't determine one.
    ))z-alphar„   )z-betar—   )rÁ   r„   )rÂ   r—   )r˜   rK   )z-finalr¿   )z-prerK   )z-releaser¿   )z.releaser¿   )z-stabler¿   )r«   r{   )r†   r{   )ú r¿   )z.finalr¿   )r‡   r¿   zpre$Úpre0zdev$Údev0z([abc]|rc)[\-\.](\d+)$z\1\2z[\-\.](dev)[\-\.]?r?(\d+)$z.\1\2z[.~]?([abc])\.?rÀ   rJ   r   Nz\b0+(\d+)(?!\d)z(\d+[abc])$z\g<1>0z\.?(dev-r|dev\.r)\.?(\d+)$z.dev\2z-(a|b|c)(\d+)$z[\.\-](dev|devel)$z.dev0z(?![\.\-])dev$z(final|stable)$r¿   z\.?(r|-|-r)\.?(\d+)$z.post\2z\.?(dev|git|bzr)\.?(\d+)$z\.?(pre|preview|-c)(\d+)$zc\g<2>zp(\d+)$z.post\1)r•   r   r_   ÚreplaceÚrerÆ   rž   )r   ÚrsÚorigrÌ   r   r   r   Ú_suggest_normalized_versionÄ  sD   ÿ
	
þþr×   z([a-z]+|\d+|[\.-])rK   zfinal-ú@)r�   ÚpreviewrÄ   r˜   r‘   r¿   r{   c                 C   sŽ   dd„ }g }|| ƒD ]8}|  d¡r=|dk r)|r)|d dkr)| ¡  |r)|d dks|r=|d dkr=| ¡  |r=|d dks1| |¡ q
t|ƒS )Nc                 S   st   g }t  |  ¡ ¡D ])}t ||¡}|r2d|d d…   kr!dkr)n n| d¡}nd| }| |¡ q	| d¡ |S )NÚ0r   Ú9é   Ú*ú*final)Ú_VERSION_PARTrŠ   r_   Ú_VERSION_REPLACErj   Úzfillrc   )r   rr   rL   r   r   r   Ú	get_partsC  s    
€
z_legacy_key.<locals>.get_partsrÝ   rÞ   r|   z*final-Ú00000000)rž   Úpoprc   r   )r   râ   rr   rL   r   r   r   Ú_legacy_keyB  s   
ÿÿrå   c                   @   ó    e Zd Zdd„ Zedd„ ƒZdS )r   c                 C   rZ   r*   )rå   r#   r   r   r   r   ]  r$   zLegacyVersion.parsec                 C   s:   d}| j D ]}t|tƒr| d¡r|dk rd} |S q|S )NFrÝ   rÞ   T)r   r   r   rž   )r   rr   rŸ   r   r   r   rF   `  s   
€ zLegacyVersion.is_prereleaseN©r   r   r   r   rG   rF   r   r   r   r   r   \  ó    r   c                   @   s4   e Zd ZeZeejƒZded< e 	d¡Z
dd„ ZdS )r	   r£   rX   z^(\d+(\.\d+)*)c                 C   s`   ||k rdS | j  t|ƒ¡}|st d||¡ dS | ¡ d }d|v r+| dd¡d }t||ƒS )NFzACannot compute compatible match for version %s  and constraint %sTr   r{   r   )Ú
numeric_rerq   r�   ÚloggerÚwarningr‰   Úrsplitr¢   )r   rl   rn   rh   rŒ   r   r   r   r   r£   s  s   ÿ
zLegacyMatcher._match_compatibleN)r   r   r   r   r\   ÚdictrH   ri   rÔ   Úcompileré   r£   r   r   r   r   r	   k  s    

r	   zN^(\d+)\.(\d+)\.(\d+)(-[a-z0-9]+(\.[a-z0-9-]+)*)?(\+[a-z0-9]+(\.[a-z0-9-]+)*)?$c                 C   s
   t  | ¡S r*   )Ú
_SEMVER_RErq   )r   r   r   r   rÊ   ‰  r<   rÊ   c           	      C   sn   dd„ }t | ƒ}|st| ƒ‚| ¡ }dd„ |d d… D ƒ\}}}||d dƒ||d dƒ}}|||f||fS )	Nc                 S   s:   | d u r	|f}|S | dd …   d¡}tdd„ |D ƒƒ}|S )Nr   r{   c                 S   s"   g | ]}|  ¡ r| d ¡n|‘qS )rÜ   )r‹   rá   )rx   rL   r   r   r   r²   •  s   " z5_semantic_key.<locals>.make_tuple.<locals>.<listcomp>)rŠ   r   )r   Úabsentrr   r   r   r   r   Ú
make_tupleŽ  s   üz!_semantic_key.<locals>.make_tuplec                 S   r®   r   ru   r°   r   r   r   r²   œ  r³   z!_semantic_key.<locals>.<listcomp>rÃ   ú|é   rÝ   )rÊ   r   r‰   )	r   rñ   rŒ   r‰   ÚmajorÚminorÚpatchr�   Úbuildr   r   r   Ú_semantic_key�  s   
rø   c                   @   ræ   )r
   c                 C   rZ   r*   )rø   r#   r   r   r   r   £  r$   zSemanticVersion.parsec                 C   s   | j d d dkS )Nr   r   rò   )r   r:   r   r   r   rF   ¦  s   zSemanticVersion.is_prereleaseNrç   r   r   r   r   r
   ¢  rè   r
   c                   @   s   e Zd ZeZdS )r   N)r   r   r   r
   r\   r   r   r   r   r   «  s    r   c                   @   s6   e Zd Zddd„Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚVersionSchemeNc                 C   s   || _ || _|| _d S r*   )r`   ÚmatcherÚ	suggester)r   r`   rú   rû   r   r   r   r   °  s   
zVersionScheme.__init__c                 C   s0   z| j  |¡ d}W |S  ty   d}Y |S w ©NTF)rú   r\   r   ©r   r   rr   r   r   r   Úis_valid_versionµ  s   þþzVersionScheme.is_valid_versionc                 C   s.   z
|   |¡ d}W |S  ty   d}Y |S w rü   )rú   r   rý   r   r   r   Úis_valid_matcher½  s   
þþzVersionScheme.is_valid_matcherc                 C   s$   |  d¡r|dd… }|  d| ¡S )z:
        Used for processing some metadata fields
        ú,Nr|   zdummy_name (%s))rb   rÿ   r#   r   r   r   Úis_valid_constraint_listÅ  s   
z&VersionScheme.is_valid_constraint_listc                 C   s    | j d u r	d }|S |   |¡}|S r*   )rû   rý   r   r   r   ÚsuggestÎ  s
   

ÿzVersionScheme.suggestr*   )r   r   r   r   rþ   rÿ   r  r  r   r   r   r   rù   ¯  s    
	rù   c                 C   s   |S r*   r   r#   r   r   r   rM   Ø  s    rM   )Ú
normalizedÚlegacyÚsemanticr  Údefaultc                 C   s   | t vr
td|  ƒ‚t |  S )Nzunknown scheme name: %r)Ú_SCHEMESr]   )r^   r   r   r   r   à  s   r   )*r   ÚloggingrÔ   Úcompatr   Úutilr   Ú__all__Ú	getLoggerr   rê   r]   r   Úobjectr   rH   rî   rˆ   r”   r•   r   r¢   r   rÅ   rÉ   rÇ   rÏ   r×   ÚIrß   rà   rå   r   r	   rï   rÊ   rø   r
   r   rù   r  r   r   r   r   r   Ú<module>   sˆ   
1
d=$Wÿõû
.rùþ	'ÿÿü