509318396
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
öLÖjã¡  ã            A   @   sÀ  d dl Z d dlZd dlZd dlZd dlZd dlZyd dlZ[dZW n ek
rZ   dZY nX yd dl	Z	[	dZ
W n ek
r†   dZ
Y nX yd dlZ[dZW n ek
r²   dZY nX yd dlmZ W n ek
rÜ   dZY nX yd dlmZ W n ek
�r   dZY nX dddd	d
ddddddddddddddddddddgZG dd„ deƒZG d d„ deƒZG d!d„ deƒZG d"d„ deƒZG d#d$„ d$eƒZG d%d&„ d&eƒZd†d)d„Zd*d+„ Zdd,œd-d„Zdd,œd.d„Zee d/ƒ�rêdd,œd0d1„Znd2d1„ Zdd,œd3d	„Z dd,œd4d
„Z!dd,œd5d„Z"d6d„ Z#dde"dfd7d„Z$d8d9„ Z%d:d;„ Z&e j'e je j(e j)he j*k�oze j+e j,k�oze je j-kZ.d‡ddd<œd=d„Z/e.e/_0d>d?„ Z1e"fd@d„Z2dAdB„ Z3dCdD„ Z4dEdF„ Z5dˆdHdI„Z6d‰dJdK„Z7dLe6dŠgdNfiZ8e�re6d‹gdOfe8dP< e7g dQfe8dR< e
�re6dŒgdTfe8dU< e�r4e6d�gdWfe8dX< dYd„ Z9dŽd[d„Z:d\d„ Z;d�d]d„Z<d^d„ Z=d_d`„ Z>d�dad„Z?dbd„ Z@dcdd„ ZAdedf„ ZBddgœdhdi„ZCdjgeCg dNfdkgeBg dQfdlœZDe�rÐdmdngeCg dOfeDdP< e
�rêdodpgeCg dTfeDdU< e�rdqdrgeCg dWfeDdX< dsdt„ ZEd‘ddgœdud„ZFee dvƒ�r`ejGdwƒ ejHdxdyƒZIdzeIjJ_Kd{eIjL_Kd|eIjM_Kd}dw„ ZNn2e jOd~k�r’d dlPZPejGdwƒ ejHdxdyƒZIddw„ ZNd’d€d„ZQd”dƒd„ZRe jSe jTB dfd„d„ZUdS )•é    NTF)Úgetpwnam)ÚgetgrnamÚcopyfileobjÚcopyfileÚcopymodeÚcopystatÚcopyÚcopy2ÚcopytreeÚmoveÚrmtreeÚErrorÚSpecialFileErrorÚ	ExecErrorÚmake_archiveÚget_archive_formatsÚregister_archive_formatÚunregister_archive_formatÚget_unpack_formatsÚregister_unpack_formatÚunregister_unpack_formatÚunpack_archiveÚignore_patternsÚchownÚwhichÚget_terminal_sizeÚSameFileErrorc               @   s   e Zd ZdS )r   N)Ú__name__Ú
__module__Ú__qualname__© r    r    ú/usr/lib64/python3.6/shutil.pyr   7   s   c               @   s   e Zd ZdS )r   N)r   r   r   r    r    r    r!   r   :   s   c               @   s   e Zd ZdS )r   N)r   r   r   r    r    r    r!   r   =   s   c               @   s   e Zd ZdS )r   N)r   r   r   r    r    r    r!   r   A   s   c               @   s   e Zd ZdS )Ú	ReadErrorN)r   r   r   r    r    r    r!   r"   D   s   r"   c               @   s   e Zd ZdS )ÚRegistryErrorN)r   r   r   r    r    r    r!   r#   G   s   r#   é   i   c             C   s$   x| j |ƒ}|sP |j|ƒ qW d S )N)ÚreadÚwrite)ÚfsrcÚfdstZlengthZbufr    r    r!   r   L   s
    
c             C   sX   t tjdƒr0ytjj| |ƒS  tk
r.   dS X tjjtjj| ƒƒtjjtjj|ƒƒkS )NÚsamefileF)ÚhasattrÚosÚpathr)   ÚOSErrorÚnormcaseÚabspath)ÚsrcÚdstr    r    r!   Ú	_samefileT   s    r2   )Úfollow_symlinksc            C   sÈ   t | |ƒrtdj| |ƒƒ‚xL| |gD ]@}ytj|ƒ}W n tk
rJ   Y q$X tj|jƒr$td| ƒ‚q$W | rŽtj	j
| ƒrŽtjtj| ƒ|ƒ n6t| dƒ�&}t|dƒ�}t||ƒ W d Q R X W d Q R X |S )Nz{!r} and {!r} are the same filez`%s` is a named pipeÚrbÚwb)r2   r   Úformatr+   Ústatr-   ÚS_ISFIFOÚst_moder   r,   ÚislinkÚsymlinkÚreadlinkÚopenr   )r0   r1   r3   ÚfnÚstr'   r(   r    r    r!   r   `   s    
c            C   sz   | r>t jj| ƒr>t jj|ƒr>tt dƒr8t jt j }}q\d S ntt dƒrXt jt j }}nd S || ƒ}||tj|j	ƒƒ d S )NÚlchmodÚchmod)
r+   r,   r:   r*   Úlstatr@   r7   rA   ÚS_IMODEr9   )r0   r1   r3   Z	stat_funcZ
chmod_funcr?   r    r    r!   r   }   s    

Ú	listxattrc            C   s¼   yt j| |d�}W n4 tk
rF } z|jtjtjfkr8‚ d S d }~X nX xn|D ]f}y&t j| ||d�}t j||||d� W qN tk
r² } z|jtjtjtjfkr¢‚ W Y d d }~X qNX qNW d S )N)r3   )	r+   rD   r-   ÚerrnoÚENOTSUPZENODATAÚgetxattrÚsetxattrZEPERM)r0   r1   r3   ÚnamesÚeÚnameÚvaluer    r    r!   Ú
_copyxattr“   s    	
rM   c              O   s   d S )Nr    )ÚargsÚkwargsr    r    r!   rM   ª   s    c      	         s6  d d dœdd„‰ |p,t jj| ƒo*t jj|ƒ }|r@‡ fdd„}n‡ fdd„}|dƒ| |d�}tj|jƒ}|d	ƒ||j|jf|d� y|d
ƒ|||d� W n tk
r¬   Y nX t	|dƒ�r$y|dƒ||j
|d� W nP tk
�r" } z2x*dD ] }t	t|ƒrì|jtt|ƒkrìP qìW ‚ W Y d d }~X nX t| ||d� d S )N)Únsr3   c             W   s   d S )Nr    )rP   r3   rN   r    r    r!   Ú_nop¸   s    zcopystat.<locals>._nopc                s   t t| ˆ ƒS )N)Úgetattrr+   )rK   )rQ   r    r!   Úlookup¿   s    zcopystat.<locals>.lookupc                s   t t| ˆ ƒ}|tjkr|S ˆ S )N)rR   r+   Úsupports_follow_symlinks)rK   r>   )rQ   r    r!   rS   Ä   s    
r7   )r3   ÚutimerA   Úst_flagsZchflagsÚ
EOPNOTSUPPrF   )rW   rF   )r+   r,   r:   r7   rC   r9   Úst_atime_nsÚst_mtime_nsÚNotImplementedErrorr*   rV   r-   rE   rR   rM   )	r0   r1   r3   ZfollowrS   r?   ÚmodeÚwhyÚerrr    )rQ   r!   r   ­   s,    
c            C   sB   t jj|ƒr"t jj|t jj| ƒƒ}t| ||d� t| ||d� |S )N)r3   )r+   r,   ÚisdirÚjoinÚbasenamer   r   )r0   r1   r3   r    r    r!   r   ç   s
    c            C   sB   t jj|ƒr"t jj|t jj| ƒƒ}t| ||d� t| ||d� |S )N)r3   )r+   r,   r^   r_   r`   r   r   )r0   r1   r3   r    r    r!   r	   ù   s
    c                 s   ‡ fdd„}|S )Nc                s,   g }xˆ D ]}|j tj||ƒƒ q
W t|ƒS )N)ÚextendÚfnmatchÚfilterÚset)r,   rI   Úignored_namesÚpattern)Úpatternsr    r!   Ú_ignore_patterns  s    
z)ignore_patterns.<locals>._ignore_patternsr    )rg   rh   r    )rg   r!   r     s    c             C   sä  t j| ƒ}|d k	r|| |ƒ}ntƒ }t j|ƒ g }�xB|D �]8}	|	|krJq:t jj| |	ƒ}
t jj||	ƒ}y¢t jj|
ƒrÞt j|
ƒ}|r t j||ƒ t	|
|| d� n<t jj
|ƒ r´|r´w:t jj|
ƒrÒt|
||||ƒ n
||
|ƒ n(t jj|
ƒrüt|
||||ƒ n
||
|ƒ W q: tk
�r< } z|j|jd ƒ W Y d d }~X q: tk
�rr } z|j|
|t|ƒfƒ W Y d d }~X q:X q:W yt	| |ƒ W nJ tk
�rÐ } z,t|dd ƒd k�rÀ|j| |t|ƒfƒ W Y d d }~X nX |�ràt|ƒ‚|S )N)r3   r   Zwinerror)r+   Úlistdirrd   Úmakedirsr,   r_   r:   r<   r;   r   Úexistsr^   r
   r   ra   rN   r-   ÚappendÚstrrR   )r0   r1   ÚsymlinksÚignoreÚcopy_functionZignore_dangling_symlinksrI   re   ÚerrorsrK   ZsrcnameZdstnameÚlinktor]   r\   r    r    r!   r
     sL    $



 *&c          $   C   sL  yt jj| ƒrtdƒ‚W n( tk
r@   |t jj| tjƒ ƒ d S X g }yt j| ƒ}W n& tk
rz   |t j| tjƒ ƒ Y nX x’|D ]Š}t jj| |ƒ}yt j|ƒj	}W n tk
r¼   d}Y nX t
j|ƒrÔt||ƒ q‚yt j|ƒ W q‚ tk
�r
   |t j|tjƒ ƒ Y q‚X q‚W yt j| ƒ W n( tk
�rF   |t j| tjƒ ƒ Y nX d S )Nz%Cannot call rmtree on a symbolic linkr   )r+   r,   r:   r-   ÚsysÚexc_infori   r_   rB   r9   r7   ÚS_ISDIRÚ_rmtree_unsafeÚunlinkÚrmdir)r,   ÚonerrorrI   rK   Úfullnamer[   r    r    r!   rv   q  s6    


rv   c       
   2   C   sð  g }yt j| ƒ}W n: tk
rL } z||_|t j|tjƒ ƒ W Y d d }~X nX �xš|D �]�}t jj||ƒ}yt j|| dd�}|j	}W n tk
rœ   d}Y nX tj
|ƒ�r¦yt j|t j| d�}	W n, tk
rì   |t j|tjƒ || d� Y n¸X z¨t jj|t j|	ƒƒ�rVt|	||ƒ yt j|| d� W n. tk
�rR   |t j|tjƒ || d� Y nX n>ytdƒ‚W n0 tk
�r’   |t jj|tjƒ || d� Y nX W d t j|	ƒ X qVyt j|| d� W qV tk
�ræ   |t j|tjƒ || d� Y qVX qVW d S )NF)Údir_fdr3   r   )r{   )Z
entry_namer{   z%Cannot call rmtree on a symbolic link)r+   ri   r-   Úfilenamers   rt   r,   r_   r7   r9   ru   r=   ÚO_RDONLYÚsamestatÚfstatÚ_rmtree_safe_fdrx   r:   Úcloserw   )
Útopfdr,   ry   rI   r]   rK   rz   Úorig_str[   Údirfdr    r    r!   r€   ’  sL    $

r€   )r{   Ú_onexc_kwargsc         !      s‚  |rdd„ }n&|d kr dd„ }n|s4|‰ ‡ fdd„}t �rtt| tƒrNtj| ƒ} ytj| |dd�}W n& tk
rˆ   |tj| tj	ƒ ƒ d S X ytj
| tj|d�}W n& tk
rÆ   |tj| tj	ƒ ƒ d S X zœtjj|tj|ƒƒ�r*t|| |ƒ ytj| |d� W n( tk
�r&   |tj| tj	ƒ ƒ Y nX n8ytdƒ‚W n* tk
�r`   |tjj| tj	ƒ ƒ Y nX W d tj|ƒ X n
t| |ƒS d S )	Nc              _   s   d S )Nr    )rN   rO   r    r    r!   ry   Ô  s    zrmtree.<locals>.onerrorc              _   s   ‚ d S )Nr    )rN   rO   r    r    r!   ry   ×  s    c                s   ˆ | ||ƒS )Nr    )Úfuncr,   rt   rO   )Ú_onerrorr    r!   ry   Ü  s    F)r{   r3   )r{   z%Cannot call rmtree on a symbolic link)Ú_use_fd_functionsÚ
isinstanceÚbytesr+   Úfsdecoder7   Ú	ExceptionrB   rs   rt   r=   r}   r,   r~   r   r€   rx   r-   r:   r�   rv   )r,   Úignore_errorsry   r{   r…   rƒ   Úfdr    )r‡   r!   r   Ç  sB    



c             C   s&   t jjt jjpd }t jj| j|ƒƒS )NÚ )r+   r,   ÚsepÚaltsepr`   Úrstrip)r,   r�   r    r    r!   Ú	_basename  s    r“   c             C   s   |}t jj|ƒrTt| |ƒr*t j| |ƒ d S t jj|t| ƒƒ}t jj|ƒrTtd| ƒ‚yt j| |ƒ W n– t	k
rú   t jj
| ƒr¢t j| ƒ}t j||ƒ t j| ƒ nTt jj| ƒrât| |ƒrÈtd| |f ƒ‚t| ||dd� t| ƒ n|| |ƒ t j| ƒ Y nX |S )Nz$Destination path '%s' already existsz.Cannot move a directory '%s' into itself '%s'.T)rp   rn   )r+   r,   r^   r2   Úrenamer_   r“   rk   r   r-   r:   r<   r;   rw   Ú
_destinsrcr
   r   )r0   r1   rp   Zreal_dstrr   r    r    r!   r   
  s2    




c             C   sV   t jj| ƒ} t jj|ƒ}| jt jjƒs2| t jj7 } |jt jjƒsL|t jj7 }|j| ƒS )N)r+   r,   r/   Úendswithr�   Ú
startswith)r0   r1   r    r    r!   r•   B  s    r•   c             C   sN   t d ks| d krd S yt | ƒ}W n tk
r8   d }Y nX |d k	rJ|d S d S )Né   )r   ÚKeyError)rK   Úresultr    r    r!   Ú_get_gidK  s    
r›   c             C   sN   t d ks| d krd S yt | ƒ}W n tk
r8   d }Y nX |d k	rJ|d S d S )Nr˜   )r   r™   )rK   rš   r    r    r!   Ú_get_uidW  s    
rœ   Úgzipc          
      s"  |d krd}nDt r |dkr d}n2tr2|dkr2d}n trD|dkrDd}ntdj|ƒƒ‚dd l}	|rfd	| nd}
| d
 |
 }tjj|ƒ}|r¶tjj	|ƒ r¶|d k	r¨|j
d|ƒ |s¶tj|ƒ |d k	rÈ|j
dƒ tˆƒ‰tˆƒ‰ ‡ ‡‡‡fdd„}|�s|	j|d| ƒ}z|j||d� W d |jƒ  X |S )Nr�   r�   ZgzÚbzip2Úbz2ÚxzzCbad value for 'compress', or compression format not supported : {0}r   Ú.z.tarzcreating %szCreating tar archivec                s,   ˆ d k	rˆ | _ ˆ| _ˆd k	r(ˆ| _ˆ| _| S )N)ÚgidZgnameÚuidÚuname)Ztarinfo)r¢   ÚgroupÚownerr£   r    r!   Ú_set_uid_gid’  s    z#_make_tarball.<locals>._set_uid_gidzw|%s)rc   )Ú_ZLIB_SUPPORTEDÚ_BZ2_SUPPORTEDÚ_LZMA_SUPPORTEDÚ
ValueErrorr6   Útarfiler+   r,   Údirnamerk   Úinforj   rœ   r›   r=   Úaddr�   )Ú	base_nameÚbase_dirÚcompressÚverboseÚdry_runr¦   r¥   ÚloggerZtar_compressionr¬   Zcompress_extZarchive_nameÚarchive_dirr§   Útarr    )r¢   r¥   r¦   r£   r!   Ú_make_tarballc  s<    

	
r¸   c             C   s|  dd l }| d }tjj| ƒ}|rPtjj|ƒ rP|d k	rB|jd|ƒ |sPtj|ƒ |d k	rf|jd||ƒ |�sx|j|d|jd��ô}tjj	|ƒ}	|	tj
kr¶|j|	|	ƒ |d k	r¶|jd|	ƒ x¶tj|ƒD ]¨\}
}}xFt|ƒD ]:}tjj	tjj|
|ƒƒ}	|j|	|	ƒ |d k	rÖ|jd|	ƒ qÖW xT|D ]L}tjj	tjj|
|ƒƒ}	tjj|	ƒ�r|j|	|	ƒ |d k	�r|jd|	ƒ �qW qÂW W d Q R X |S )Nr   z.zipzcreating %sz#creating '%s' and adding '%s' to itÚw)Zcompressionzadding '%s')Úzipfiler+   r,   r­   rk   r®   rj   ÚZipFileZZIP_DEFLATEDÚnormpathÚcurdirr&   ÚwalkÚsortedr_   Úisfile)r°   r±   r³   r´   rµ   rº   Zzip_filenamer¶   Zzfr,   ÚdirpathZdirnamesÚ	filenamesrK   r    r    r!   Ú_make_zipfile¤  s@    



 rÃ   r·   r²   zuncompressed tar filezgzip'ed tar-fileZgztarzZIP fileÚziprž   zbzip2'ed tar-fileZbztarr    zxz'ed tar-fileZxztarc              C   s   dd„ t jƒ D ƒ} | jƒ  | S )Nc             S   s   g | ]\}}||d  f‘qS )r˜   r    )Ú.0rK   Úregistryr    r    r!   ú
<listcomp>æ  s    z'get_archive_formats.<locals>.<listcomp>)Ú_ARCHIVE_FORMATSÚitemsÚsort)Úformatsr    r    r!   r   á  s    r�   c             C   sz   |d krg }t |ƒs td| ƒ‚t|ttfƒs6tdƒ‚x0|D ](}t|ttfƒ s\t|ƒdkr<tdƒ‚q<W |||ft| < d S )NzThe %s object is not callablez!extra_args needs to be a sequencer˜   z+extra_args elements are : (arg_name, value))ÚcallableÚ	TypeErrorr‰   ÚtupleÚlistÚlenrÈ   )rK   ÚfunctionÚ
extra_argsÚdescriptionÚelementr    r    r!   r   ë  s    	
c             C   s
   t | = d S )N)rÈ   )rK   r    r    r!   r      s    c	             C   s  t jƒ }	|d k	r>|d k	r$|jd|ƒ t jj| ƒ} |s>t j|ƒ |d krLt j}||dœ}
yt| }W n  tk
r‚   t	d| ƒ‚Y nX |d }x|d D ]\}}||
|< q–W |dkrÂ||
d< ||
d< z|| |f|
Ž}W d |d k	rü|d k	rò|jd	|	ƒ t j|	ƒ X |S )
Nzchanging into '%s')r´   rµ   zunknown archive format '%s'r   é   rÄ   r¦   r¥   zchanging back to '%s')
r+   ÚgetcwdÚdebugr,   r/   Úchdirr½   rÈ   r™   r«   )r°   r6   Zroot_dirr±   r³   r´   r¦   r¥   rµ   Zsave_cwdrO   Úformat_infor†   ÚargÚvalr|   r    r    r!   r     s6    

c              C   s   dd„ t jƒ D ƒ} | jƒ  | S )Nc             S   s"   g | ]\}}||d  |d f‘qS )r   é   r    )rÅ   rK   r®   r    r    r!   rÇ   @  s    z&get_unpack_formats.<locals>.<listcomp>)Ú_UNPACK_FORMATSrÉ   rÊ   )rË   r    r    r!   r   :  s    c       	      C   sv   i }x.t jƒ D ]"\}}x|d D ]}|||< q W qW x,| D ]$}||kr:d}t|||| f ƒ‚q:W t|ƒsrtdƒ‚d S )Nr   z!%s is already registered for "%s"z*The registered function must be a callable)rÝ   rÉ   r#   rÌ   rÍ   )	Ú
extensionsrÑ   rÒ   Zexisting_extensionsrK   r®   ÚextÚ	extensionÚmsgr    r    r!   Ú_check_unpack_optionsE  s    
râ   c             C   s,   |d krg }t |||ƒ ||||ft| < d S )N)râ   rÝ   )rK   rÞ   rÑ   rÒ   rÓ   r    r    r!   r   W  s    c             C   s
   t | = d S )N)rÝ   )rK   r    r    r!   r   m  s    c             C   s&   t jj| ƒ}t jj|ƒs"t j|ƒ d S )N)r+   r,   r­   r^   rj   )r,   r­   r    r    r!   Ú_ensure_directoryq  s    rã   c       	      C   sÊ   dd l }|j| ƒstd|  ƒ‚|j| ƒ}z’xŒ|jƒ D ]€}|j}|jdƒs4d|krRq4tjj	|f|j
dƒžŽ }|spq4t|ƒ |jdƒs4|j|jƒ}t|dƒ}z|j|ƒ W d |jƒ  ~X q4W W d |jƒ  X d S )Nr   z%s is not a zip fileú/z..r5   )rº   Z
is_zipfiler"   r»   Zinfolistr|   r—   r+   r,   r_   Úsplitrã   r–   r%   r=   r&   r�   )	r|   Úextract_dirrº   rÄ   r®   rK   ÚtargetÚdataÚfr    r    r!   Ú_unpack_zipfilew  s*    



rê   )rc   c            C   s\   dd l }y|j| ƒ}W n" |jk
r8   td|  ƒ‚Y nX z|j||d� W d |jƒ  X d S )Nr   z/%s is not a compressed or uncompressed tar file)rc   )r¬   r=   ZTarErrorr"   Z
extractallr�   )r|   ræ   rc   r¬   Ztarobjr    r    r!   Ú_unpack_tarfile™  s    rë   z.tarz.zip)r·   rÄ   z.tar.gzz.tgzz.tar.bz2z.tbz2z.tar.xzz.txzc             C   s:   x4t jƒ D ](\}}x|d D ]}| j|ƒr|S qW q
W d S )Nr   )rÝ   rÉ   r–   )r|   rK   r®   rà   r    r    r!   Ú_find_unpack_format¸  s
    
rì   c            C   sØ   |d krt jƒ }|d kri }nd|i}|d k	r‚yt| }W n" tk
r\   tdj|ƒƒ‚Y nX |d }|| |ft|d ƒ|—Ž nRt| ƒ}|d kr tdj| ƒƒ‚t| d }tt| d ƒ}|j	|ƒ || |f|Ž d S )Nrc   zUnknown unpack format '{0}'rÕ   r˜   zUnknown archive format '{0}')
r+   rÖ   rÝ   r™   r«   r6   Údictrì   r"   Úupdate)r|   ræ   r6   rc   Zfilter_kwargsrÙ   r†   rO   r    r    r!   r   ¿  s&    
ÚstatvfsÚ
disk_usageZusageztotal used freezTotal space in byteszUsed space in byteszFree space in bytesc             C   s@   t j| ƒ}|j|j }|j|j }|j|j |j }t|||ƒS )N)r+   rï   Úf_bavailÚf_frsizeÚf_blocksÚf_bfreeÚ_ntuple_diskusage)r,   r?   ÚfreeÚtotalÚusedr    r    r!   rð   ö  s
    
Úntc             C   s"   t j| ƒ\}}|| }t|||ƒS )N)rù   Z_getdiskusagerõ   )r,   r÷   rö   rø   r    r    r!   rð     s    c             C   sž   |d kr|d krt dƒ‚|}|}|d kr.d}n(t|tƒrVt|ƒ}|d krVtdj|ƒƒ‚|d krdd}n(t|tƒsŒt|ƒ}|d krŒtdj|ƒƒ‚tj	| ||ƒ d S )Nzuser and/or group must be setrÕ   zno such user: {!r}zno such group: {!r}éÿÿÿÿrú   )
r«   r‰   rm   rœ   ÚLookupErrorr6   Úintr›   r+   r   )r,   Úuserr¥   Z_userZ_groupr    r    r!   r     s"    

éP   é   c             C   sÔ   yt tjd ƒ}W n ttfk
r.   d}Y nX yt tjd ƒ}W n ttfk
r^   d}Y nX |dksp|dkrÆytjtjjƒ ƒ}W n$ t	tt
fk
r¨   tj| ƒ}Y nX |dkr¸|j}|dkrÆ|j}tj||fƒS )NZCOLUMNSr   ZLINES)rü   r+   Úenvironr™   r«   r   rs   Ú
__stdout__ÚfilenoÚAttributeErrorr-   Úterminal_sizeÚcolumnsÚlines)Zfallbackr  r  Úsizer    r    r!   r   2  s$    

c                s"  dd„ }t jjˆ ƒr&|ˆ |ƒr"ˆ S d S |d kr>t jjdt jƒ}|sFd S |jt jƒ}tj	dkr¼t j
|krt|jdt j
ƒ t jjddƒjt jƒ}t‡ fdd	„|D ƒƒr¨ˆ g}qÂ‡ fd
d„|D ƒ}nˆ g}tƒ }xT|D ]L}t jj|ƒ}||krÎ|j|ƒ x(|D ] }	t jj||	ƒ}
||
|ƒrö|
S qöW qÎW d S )Nc             S   s&   t jj| ƒo$t j| |ƒo$t jj| ƒ S )N)r+   r,   rk   Úaccessr^   )r>   r[   r    r    r!   Ú_access_checkl  s    zwhich.<locals>._access_checkÚPATHZwin32r   ZPATHEXTr�   c             3   s    | ]}ˆ j ƒ j|j ƒ ƒV  qd S )N)Úlowerr–   )rÅ   rß   )Úcmdr    r!   ú	<genexpr>‰  s    zwhich.<locals>.<genexpr>c                s   g | ]}ˆ | ‘qS r    r    )rÅ   rß   )r  r    r!   rÇ   Œ  s    zwhich.<locals>.<listcomp>)r+   r,   r­   r   ÚgetÚdefpathrå   Úpathseprs   Úplatformr½   ÚinsertÚanyrd   r.   r¯   r_   )r  r[   r,   r	  ZpathextÚfilesÚseenÚdirZnormdirZthefilerK   r    )r  r!   r   _  s8    






é @  )r  )FN)r�   r   r   NNN)r   r   N)r²   N)r²   r�   )r²   rž   )r²   r    )Nr�   )NNr   r   NNN)Nr�   )NN)NN©rþ   rÿ   )r  )Vr+   rs   r7   rb   ÚcollectionsrE   Úzlibr¨   ÚImportErrorrŸ   r©   Zlzmarª   Úpwdr   Zgrpr   Ú__all__r-   r   r   r   r   r"   rŒ   r#   r   r2   r   r   r*   rM   r   r   r	   r   r
   rv   r€   r=   rw   rx   Úsupports_dir_fdri   Úsupports_fdrT   rˆ   r   Zavoids_symlink_attacksr“   r   r•   r›   rœ   r¸   rÃ   rÈ   r   r   r   r   r   râ   r   r   rã   rê   rë   rÝ   rì   r   rl   Ú
namedtuplerõ   r÷   Ú__doc__rø   rö   rð   rK   rù   r   r   ÚF_OKÚX_OKr   r    r    r    r!   Ú<module>   sþ   






:Y!0
:8	 
@
-




 
6 
"





/




-