B
    [ψ                 @   s  d dl Z d dlZe eZdZyeZW n ek
r>   e	ZY nX G dd de
ZG dd deZdd Zed Ze Zi Ze Zd	ee< e Zd
ee< e Zdee< e Zdee  d d ee  d d ee  d ee< e Zdee  d d ee  d d ee  d ee< e Zdee  d ee  d ee< e Zdee  d ee  d ee< e Zdee  d ee  d ee< e Zdee  d ee  d ee< e Zdee< e Zdee  d ee  d ee< e Zdee  ee  d ee  d Zde d ee< dee  ee  d ee  d Ze Z de d ee < e Z!dee!< e Z"ee d ee"< e Z#ee d ee#< e Z$dee#  d d ee#  d d ee#  d d ee  d  ee  d d! ee$< e Z%dee"  d d ee"  d d ee"  d d ee  d  ee  d d! ee%< e Z&dee!  d" ee$  d ee&< e Z'dee!  d" ee%  d ee'< e Z(d#ee(< e Z)d$ee(  d% ee)< e*ee) ej+ee)< d&Z,e Z-dee(  ee$  d ee-< e Z.dee(  ee%  d ee.< e Z/d'ee/< e Z0d$ee/  d% ee0< e*ee0 ej+ee0< d(Z1e Z2dee/  ee$  d ee2< e Z3dee/  ee%  d ee3< e Z4dee!  d) e d* ee4< e Z5dee!  d) e d* ee5< e Z6d$ee!  d) e d ee$  d ee6< e*ee6 ej+ee6< d+Z7e Z8d,ee$  d d- d ee$  d d. ee8< e Z9d,ee%  d d- d ee%  d d. ee9< e Z:d/ee:< e Z;d0j<ee ee d1ee;< xDe=e> D ]4Z?e@d2e?ee?  e?ekre*ee? ee?< qW d3d4 ZAd5d6 ZBd7d8 ZCe*d9ZDd:d; ZEeEZFG d<d= d=e
ZGdd>d?ZHd@dA ZIdBdC ZJdDdE ZKdFdG ZLdHdI ZMdJdK ZNeNdLZOeNdLZPdMdN ZQdOdP ZRdQdR ZSdSdT ZTdUdV ZUdWdX ZVdYdZ ZWd[d\ ZXd]d^ ZYd_d` ZZeZZ[e
 Z\G dadb dbe
Z]dcdd Z^G dedf dfe
Z_dgdh Z`didj Zadkdl Zbdmdn Zcdodp Zddqdr Zedsdt Zfdudv Zgdwdx Zhdydz Zid{d| Zjd}d~ ZkdddZldddZmdd Zndd Zodd Zpdd ZqdS )    Nz2.0.0c               @   s$   e Zd Zdd Zdd Zdd ZdS )_Rc             C   s
   || _ d S )N)i)selfr    r   0lib/python3.7/site-packages/jupyterlab/semver.py__init__*   s    z_R.__init__c             C   s   | j }|  j d7  _ |S )N   )r   )r   vr   r   r   __call__-   s    z_R.__call__c             C   s   | j S )N)r   )r   r   r   r   value2   s    z_R.valueN)__name__
__module____qualname__r   r
   r   r   r   r   r   r   )   s   r   c               @   s   e Zd Zdd ZdS )
Extendlistc             C   sF   yt | || W n. tk
r@   t| |kr:| | n Y nX d S )N)list__setitem__
IndexErrorlenappend)r   r   r	   r   r   r   r   7   s    zExtendlist.__setitem__N)r   r   r   r   r   r   r   r   r   6   s   r   c             C   s"   y| | S  t k
r   d S X d S )N)r   )xsr   r   r   r   list_getA   s    r   z
0|[1-9]\d*z[0-9]+z\d*[a-zA-Z-][a-zA-Z0-9-]*(z)\.)z(?:|z(?:-(z(?:\.z)*))z(?:-?(z[0-9A-Za-z-]+z(?:\+(zv??^$z[v=\s]*z((?:<|>)?=?)z|x|X|\*z[v=\s]*(z(?:\.(z)?z)?)?z\s*z(?:~>?)z(\s*)z\s+z\1~z(?:\^)z\1^z\s*(z)$|^$z\1\2\3z^\s*(z\s+-\s+z\s*$z(<|>)?=?\s*\*zv?({n})(?:\.({n}))?{pre}?)nprezgenregxp %s %sc             C   s6   |rt t }nt t }|| }|r.t| |S d S d S )N)regexpLOOSEFULLsearchsemver)versionloosermr   r   r   parse  s    


r(   c             C   s   t | |}|jr|S d S d S )N)r(   r$   )r$   r%   r	   r   r   r   valid(  s    
r)   c             C   s   t | |}|r|jS d S d S )N)r(   r$   )r$   r%   sr   r   r   clean0  s    
r+   z^\d+$c             C   sB   t | tr | j|kr| S | j} nt | ts8td| t| |S )NzInvalid Version: {})
isinstanceSemVerr%   r$   string_type
ValueErrorformat)r$   r%   r   r   r   r#   ;  s    


r#   c               @   sN   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dZ
dS )r-   c             C   s`  t d|| || _|| _t|r$tnt | }|s|sJt	d
|tt | }|drtt|dnd| _|drt|dnd| _d| _|dsg | _ndd |dd	D | _nt|d| _t|d| _t|d| _|d
sg | _ndd |d
d	D | _|drN|dd	| _ng | _| 
  d S )NzSemVer %s, %szInvalid Version: {}r   r         c             S   s"   g | ]}t |rt|n|qS r   )NUMERICr"   int).0idr   r   r   
<listcomp>_  s   z#SemVer.__init__.<locals>.<listcomp>.   c             S   s"   g | ]}t |rt|n|qS r   )r3   r"   r4   )r5   r6   r   r   r   r7   k  s      )loggerdebugr%   rawr   r    r!   r"   stripr/   r0   RECOVERYVERSIONNAMEgroupr4   majorminorpatch
prereleasesplitZbuild)r   r$   r%   r'   r   r   r   r   O  s4    
zSemVer.__init__c             C   sP   d | j| j| j| _t| jdkrJ|  jd ddd | jD 7  _| jS )Nz{}.{}.{}r   z-{}r8   c             s   s   | ]}t |V  qd S )N)str)r5   r	   r   r   r   	<genexpr>w  s    z SemVer.format.<locals>.<genexpr>)r0   rA   rB   rC   r$   r   rD   join)r   r   r   r   r0   t  s    &zSemVer.formatc             C   s
   d | S )Nz<SemVer {} >)r0   )r   r   r   r   __repr__z  s    zSemVer.__repr__c             C   s   | j S )N)r$   )r   r   r   r   __str__}  s    zSemVer.__str__c             C   sN   t d| j| j| t|ts*t|| j}| |p<| |}t d| |S )NzSemVer.compare %s %s %szcompare result %s)	r;   r<   r$   r%   r,   r-   make_semvercompare_maincompare_pre)r   otherresultr   r   r   compare  s    
zSemVer.comparec             C   sX   t |tst|| j}tt| jt|jpVtt| jt|jpVtt| jt|jS )N)	r,   r-   rK   r%   compare_identifiersrF   rA   rB   rC   )r   rN   r   r   r   rL     s
    
zSemVer.compare_mainc             C   s   t |tst|| j}t| jdk}t|jdk}|s>|r>dS |rJ|sJdS |sV|sVdS d}x~t| j|}t|j|}td||| |d7 }|d kr|d krdS |d krdS |d krdS ||krq\q\t	t
|t
|S q\W d S )Nr   r   zprerelease compare %s: %s %s)r,   r-   rK   r%   r   rD   r   r;   r<   rQ   rF   )r   rN   Zis_self_more_than_zeroZis_other_more_than_zeror   abr   r   r   rM     s2    
zSemVer.compare_preNc             C   s  t d| j| |dkrJg | _d| _d| _|  jd7  _| jd|d n:|dkr~g | _d| _|  jd7  _| jd|d n|dkrg | _| jd	|d | jd|d n|d
krt| jdkr| jd	|d | jd|d n|dkr8| jdks| jdkst| jdkr"|  jd7  _d| _d| _g | _nL|dkr|| jdks^t| jdkrl|  jd7  _d| _g | _n|d	krt| jdkr|  jd7  _g | _n|dkrvt d| j t| jdkrdg| _nTt| jd }xD|dkr0t| j| t	r$| j|  d7  < |d8 }|d8 }qW |d k	r| jd |krjt| jd t	st|dg| _n
|dg| _nt
d||   | j| _| S )Nzinc release %s %sZpremajorr   r   r   )
identifierZpreminorZprepatchrC   rD   rA   rB   zinc prerelease %sr1   zinvalid increment argument: {})r;   r<   rD   rC   rB   rA   incr   r,   r4   r/   r0   r$   r=   )r   releaserU   r   r   r   r   rV     sl    
(






z
SemVer.inc)N)r   r   r   r   r0   rI   rJ   rP   rL   rM   rV   r   r   r   r   r-   N  s   % r-   c          
   C   sL   yt | |j||djS  tk
rF } ztj|dd d S d }~X Y nX d S )N)rU   r:   )exc_info)rK   rV   r$   	Exceptionr;   r<   )r$   rW   r%   rU   er   r   r   rV     s
    rV   c             C   sd   t | }t |}|r,|r,t| } t|}|r8|s8dS |rD|sDdS | |k rPdS | |kr\dS dS d S )NrR   r   r   )r3   r"   r4   )rS   rT   ZanumZbnumr   r   r   rQ     s    

rQ   c             C   s
   t || S )N)rQ   )rS   rT   r   r   r   rcompare_identifiers   s    r[   c             C   s   t | ||S )N)rK   rP   )rS   rT   r%   r   r   r   rP   $  s    rP   c             C   s   t | |dS )NT)rP   )rS   rT   r   r   r   compare_loose(  s    r\   c             C   s   t || |S )N)rP   )rS   rT   r%   r   r   r   rcompare,  s    r]   c                s    fdd}|S )Nc                sB   t |  }|j|j|jf}|jr0|t|j }n|tdf }|S )Ninf)rK   rA   rB   rC   rD   tuplefloat)r$   r	   key)r%   r   r   key_function1  s    
z'make_key_function.<locals>.key_functionr   )r%   rb   r   )r%   r   make_key_function0  s    
rc   Tc             C   s   |rt nt}| j|d | S )N)ra   )loose_key_functionfull_key_functionsort)r   r%   keyfr   r   r   rf   A  s    rf   c             C   s   |rt nt}| j|dd | S )NT)ra   reverse)rd   re   rf   )r   r%   rg   r   r   r   rsortG  s    ri   c             C   s   t | ||dkS )Nr   )rP   )rS   rT   r%   r   r   r   gtM  s    rj   c             C   s   t | ||dk S )Nr   )rP   )rS   rT   r%   r   r   r   ltQ  s    rk   c             C   s   t | ||dkS )Nr   )rP   )rS   rT   r%   r   r   r   eqU  s    rl   c             C   s   t | ||dkS )Nr   )rP   )rS   rT   r%   r   r   r   neqY  s    rm   c             C   s   t | ||dkS )Nr   )rP   )rS   rT   r%   r   r   r   gte]  s    rn   c             C   s   t | ||dkS )Nr   )rP   )rS   rT   r%   r   r   r   ltea  s    ro   c             C   s   t d| |dkr| |kS |dkr,| |kS |dksD|dksD|dkrPt| ||S |dkrdt| ||S |dkrxt| ||S |d	krt| ||S |d
krt| ||S |dkrt| ||S td	|d S )Nzcmp: %sz===z!== =z==z!=>z>=<z<=zInvalid operator: {})
r;   r<   rl   rm   rj   rn   rk   ro   r/   r0   )rS   oprT   r%   r   r   r   cmpe  s$    ru   c             C   s(   t | tr| j|kr| S | j} t| |S )N)r,   
Comparatorr%   r   )compr%   r   r   r   
comparator{  s
    

rx   c               @   s8   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d ZdS )rv   Nc             C   sD   t d|| || _| | | jtkr0d| _n| j| jj | _d S )Nzcomparator: %s %srp   )	r;   r<   r%   r(   r#   ANYr   operatorr$   )r   rw   r%   r   r   r   r     s    

zComparator.__init__c             C   s~   | j rtt }ntt }td| ||}|d krDtd||	d| _
|	dd krft| _nt|	d| j | _d S )Nzparse comp=%szInvalid comparator: {}r   r1   )r%   r   COMPARATORLOOSE
COMPARATORr;   r<   r"   r/   r0   r@   rz   ry   r#   )r   rw   r&   r'   r   r   r   r(     s    

zComparator.parsec             C   s
   d | S )Nz<SemVer Comparator "{}">)r0   )r   r   r   r   rI     s    zComparator.__repr__c             C   s   | j S )N)r   )r   r   r   r   rJ     s    zComparator.__str__c             C   s6   t d|| j | jtkrdS t|| j| j| jS d S )NzComparator, test %s, %sT)r;   r<   r%   r#   ry   ru   rz   )r   r$   r   r   r   test  s    
zComparator.test)	r   r   r   r#   r   r(   rI   rJ   r}   r   r   r   r   rv     s   
rv   c             C   s"   t | tr| j|kr| S t| |S )N)r,   Ranger%   )range_r%   r   r   r   
make_range  s    r   c               @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )r~   c                sZ   | _ | _ fddtd|D }dd |D  _t jsNtd|   d S )Nc                s   g | ]}  | qS r   )parse_ranger>   )r5   r&   )r   r   r   r7     s    z"Range.__init__.<locals>.<listcomp>z
\s*\|\|\s*c             S   s   g | ]}|r|qS r   r   )r5   r&   r   r   r   r7     s    zInvalid SemVer Range: {})r%   r=   rerE   setr   r/   r0   )r   r   r%   r   r   )r   r   r     s    
zRange.__init__c             C   s   d | jS )Nz<SemVer Range "{}">)r0   range)r   r   r   r   rI     s    zRange.__repr__c             C   s0   d dd | jD  | _td| j | jS )Nz||c             S   s$   g | ]}d  dd |D  qS ) c             s   s   | ]}|j V  qd S )N)r   )r5   cr   r   r   rG     s    z*Range.format.<locals>.<listcomp>.<genexpr>)rH   r>   )r5   compsr   r   r   r7     s    z Range.format.<locals>.<listcomp>zRange format %s)rH   r   r>   r   r;   r<   )r   r   r   r   r0     s    zRange.formatc             C   s   | j S )N)r   )r   r   r   r   rJ     s    zRange.__str__c          	      s   | j td| r"tt }ntt }|t|}td| tt t	|}td|tt  tt
 t|}tt t|}dtd|}rtt  ntt  tddfdd|dD }| j r fdd|D }fd	d|D }|S )
Nzrange %s %szhyphen replace %szcomparator trim %s, %sr   z\s+c                s   g | ]}t | qS r   )parse_comparator)r5   rw   )r%   r   r   r7     s    z%Range.parse_range.<locals>.<listcomp>c                s   g | ]}  |r|qS r   )r"   )r5   rw   )comp_rer   r   r7     s    c                s   g | ]}t | qS r   )make_comparator)r5   rw   )r%   r   r   r7     s    )r%   r;   r<   r   HYPHENRANGELOOSEHYPHENRANGEsubhyphen_replaceCOMPARATORTRIMcomparatorTrimReplace	TILDETRIMtildeTrimReplace	CARETTRIMcaretTrimReplacerH   r   rE   r{   r|   )r   r   Zhrset_r   )r   r%   r   r     s(    

&zRange.parse_rangec             C   sB   |sdS t |tr t|| jd}x| jD ]}t||r(dS q(W dS )NF)r%   T)r,   r.   rK   r%   r   test_set)r   r$   rZ   r   r   r   r}      s    

z
Range.testN)	r   r   r   r   rI   r0   rJ   r   r}   r   r   r   r   r~     s   &r~   c             C   s   dd t | |jD S )Nc             S   s*   g | ]"}d  dd |D  d qS )r   c             S   s   g | ]
}|j qS r   )r   )r5   r   r   r   r   r7     s    z-to_comparators.<locals>.<listcomp>.<listcomp>)rH   r>   rE   )r5   rw   r   r   r   r7     s   z"to_comparators.<locals>.<listcomp>)r   r   )r   r%   r   r   r   to_comparators  s    r   c             C   sh   t d|  t| |} t d|  t| |} t d|  t| |} t d|  t| |} t d|  | S )Nzcomp %szcaret %sz	tildes %sz	xrange %szstars %s)r;   r<   replace_caretsreplace_tildesreplace_xrangesreplace_stars)rw   r%   r   r   r   r     s    



r   c             C   s$   | d kp"| dkp"|   dkp"| dkS )Nrp   x*)lower)r6   r   r   r   is_x$  s    r   c                s$   d  fddtd|  D S )Nr   c                s   g | ]}t | qS r   )replace_tilde)r5   r   )r%   r   r   r7   0  s   z"replace_tildes.<locals>.<listcomp>z\s+)rH   r   rE   r>   )rw   r%   r   )r%   r   r   /  s    r   c                s.   |rt t }nt t } fdd}|| S )Nc          	      sR  |  d}|  \}}}}}td ||||| t|rBd}n t|rld| d tt|d  d }nt|rd| d | d	 | d tt|d  d
 }n|r
td| |d dkrd| }d| d | d | | d | d tt|d  d
 }n8d| d | d | d | d tt|d  d
 }td| |S )Nr   ztilde %s %s %s %s %s %srp   z>=z.0.0 <r   z.0.0r8   z.0 <z.0zreplaceTilde pr %s-z <ztilde return, %s)r@   groupsr;   r<   r   rF   r4   )mob_Mr'   pprret)rw   r   r   repl:  s"    
"2>8zreplace_tilde.<locals>.repl)r   
TILDELOOSETILDEr   )rw   r%   r&   r   r   )rw   r   r   4  s
    
r   c                s$   d  fddtd|  D S )Nr   c                s   g | ]}t | qS r   )replace_caret)r5   r   )r%   r   r   r7   Y  s   z"replace_carets.<locals>.<listcomp>z\s+)rH   r   rE   r>   )rw   r%   r   )r%   r   r   X  s    r   c                s.   |rt t }nt t } fdd}|| S )Nc          	      s  |  d}|  \}}}}}td ||||| t|rBd}nxt|rnd| d tt|d  d }nLt|r|dkrd| d	 | d
 | d	 tt|d  d }n(d| d	 | d
 tt|d  d }n|rtd| |d dkrd| }|dkr|dkrfd| d	 | d	 |p2d | d | d	 | d	 tt|pXdd  }nBd| d	 | d	 |pd | d | d	 tt|d  d }n:d| d	 | d	 |pd | d tt|d  d }n|dkr|dkrDd| d	 | d	 |pd d | d	 | d	 tt|p6dd  }n>d| d	 | d	 |p^d d | d	 tt|d  d }n6d| d	 | d	 |pd d tt|d  d }td| |S )Nr   zcaret %s %s %s %s %s %srp   z>=z.0.0 <r   z.0.00r8   z.0 <z.0zreplaceCaret pr %sr   z <zcaret return %s)r@   r   r;   r<   r   rF   r4   )r   Zm0r   r'   r   r   r   r   )rw   r   r   r   c  s6    
$2,

ND<

J@6zreplace_caret.<locals>.repl)r   
CARETLOOSECARETr   )rw   r%   r&   r   r   )rw   r   r   ]  s
    
$r   c                s2   t d|   d fddtd|  D S )NzreplaceXRanges %s %sr   c                s   g | ]}t | qS r   )replace_xrange)r5   r   )r%   r   r   r7     s   z#replace_xranges.<locals>.<listcomp>z\s+)r;   r<   rH   r   rE   r>   )rw   r%   r   )r%   r   r     s    r   c                s6       |rtt }ntt } fdd}|| S )Nc          
      s  |  d}|  \}}}}}}td |||||| t|}|pHt|}	|	pTt|}
|
}|dkrj|rjd}td|| |r|dks|dkrd}nd	}n
|rF|rF|	rd}|
rd}|dkrd
}|	rt|d }d}d}n|
rt|d }d}n.|dkr d}|	rt|d }nt|d }|t| d t| d t| }n^|	rnd
| d tt|d  d }n6|
rd
| d | d | d tt|d  d }td| |S )Nr   zxrange %s %s %s %s %s %s %srq   rp   zxrange gtlt=%s any_x=%srr   rs   z<0.0.0r   z>=r   z<=r8   z.0.0 <z.0.0z.0 <z.0zxRange return %s)r@   r   r;   r<   r   r4   rF   )r   r   Zgtltr   r'   r   r   r   ZxMZxmZxpZany_x)rw   r   r   r     sP    

&"0zreplace_xrange.<locals>.repl)r>   r   XRANGELOOSEXRANGEr   )rw   r%   r&   r   r   )rw   r   r     s    
9r   c             C   s"   t d| | tt d|  S )NzreplaceStars %s %srp   )r;   r<   r   STARr   r>   )rw   r%   r   r   r   r     s    r   c             C   s  |   \}}}}}}}}}	}
}}t|r.d}n<t|rDd| d }n&t|rbd| d | d }nd| }t|rxd}nzt|	rdtt|d  d }nXt|
rd| d tt|	d  d }n.|rd| d |	 d |
 d	 | }nd| }|d
 |  S )Nrp   z>=z.0.0r8   z.0rs   r   z<=r   r   )r   r   rF   r4   r>   )r   Zfrom_ZfMZfmfpZfprZfbtoZtMZtmtpZtprtbr   r   r   r     s$     ""r   c             C   s   x| D ]}| |sdS qW t|jdkrxV| D ]N}|jtkr@q0t|jjdkr0|j}|j|jkr0|j|jkr0|j|jkr0dS q0W dS dS )NFr   T)r}   r   rD   r#   ry   rA   rB   rC   )r   r$   rZ   Zallowedr   r   r   r     s    



$r   Fc          
   C   s<   yt ||}W n" tk
r0 } zdS d }~X Y nX || S )NF)r   rY   r}   )r$   r   r%   rZ   r   r   r   	satisfies  s
    r   c             C   sf   yt ||d}W n
   d S d }d }x<| D ]4}||r*|d ksN||dkr*|}t||d}q*W |S )N)r%   rR   )r   r}   rP   rK   )Zversionsr   r%   Zrange_obZmax_Zmax_svr	   r   r   r   max_satisfying  s    

r   c             C   s    yt | |jpdS    d S d S )Nr   )r   r   )r   r%   r   r   r   valid_range%  s    r   c             C   s   t | |d|S )Nrs   )outside)r$   r   r%   r   r   r   ltr/  s    r   c             C   s   t | |d|S )Nrr   )r   )r$   r   r%   r   r   r   rtr4  s    r   c             C   s&  t | |} t||}|dkr2t}t}t}d}d}n&|dkrPt}t}t}d}d}ntdt| ||rhdS x^|jD ]T}	d }
d }xF|	D ]>}|
p|}
|p|}||j	|
j	|r|}
q||j	|j	|r|}qW qpW |
j
|ks|
j
|krdS |j
r|j
|kr|| |j	rdS |j
|kr"|| |j	r"dS dS )Nrr   z>=rs   z<=z%Must provide a hilo val of '<' or '>'FT)rK   r   rj   ro   rk   rn   r/   r   r   r#   rz   )r$   r   Zhilor%   ZgtfnZltefnZltfnrw   ZecompZcomparatorsZhighZlowrx   r   r   r   r   8  sD    


 r   )N)F)F)rZloggingr   Z	getLoggerr   r;   ZSEMVER_SPEC_VERSIONZ
basestringr.   	NameErrorrF   objectr   r   r   r   Rsrcr   ZNUMERICIDENTIFIERZNUMERICIDENTIFIERLOOSEZNONNUMERICIDENTIFIERZMAINVERSIONZMAINVERSIONLOOSEZPRERELEASEIDENTIFIERZPRERELEASEIDENTIFIERLOOSEZ
PRERELEASEZPRERELEASELOOSEZBUILDIDENTIFIERZBUILDr!   Z	FULLPLAINZ
LOOSEPLAINr    ZGTLTZXRANGEIDENTIFIERLOOSEZXRANGEIDENTIFIERZXRANGEPLAINZXRANGEPLAINLOOSEr   r   Z	LONETILDEr   compiler   r   r   r   Z	LONECARETr   r   r   r   r{   r|   r   r   r   r   r   r?   r0   r   r   r   r<   r(   r)   r+   r3   r#   rK   r-   rV   rQ   r[   rP   r\   r]   rc   rd   re   rf   ri   rj   rk   rl   rm   rn   ro   ru   rx   r   ry   rv   r   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s*  

44     $$J
J
  ("
"


 7
-	L	$-E


