???<!-- GIF89;a -->
123123123123
.....................................................................................................................................???<!-- GIF89;a -->
123123123123
.....................................................................................................................................U
    e5d1                     @   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zd dlZ[dZW n ek
rZ   dZY nX zd dl	Z	[	dZ
W n ek
r   dZ
Y nX zd dlZ[dZW n ek
r   dZY nX zd dlmZ W n ek
r   dZY nX zd dlmZ W n ek
r   dZY nX e jdkZd ZZe jdkr2d dlZner@d dlZerJdnd	Zee d
odejdaeoteedZdZ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$G d/d0 d0e#Z%d1d2 Z&d3d4 Z'efd5d6Z(dd7dZ)d8d9 Z*d:d; Z+d<d= Z,dd>d?dZ-dd>d@dZ.ee dArdd>dBdCZ/ndDdC Z/dd>dEdZ0dd>dFdZ1dd>dGdZ2dHd" Z3ddIdJZ4dde2ddfdKdZ5ee j6dLrdMdN Z7dOdP Z8ndQdN Z7dRdP Z8dSdT Z9dUdV Z:e j;e je j<e j=he j>kobe j?e j@kobe je jAkZBddWdZCeBeC_DdXdY ZEe2fdZdZFd[d\ ZGd]d^ ZHd_d` ZIdadb ZJddddeZKddfdgZLdheKdigdjfiZMereKdkgdlfeMdm< eLg dnfeMdo< e
reKdpgdqfeMdr< ereKdsgdtfeMdu< dvd ZNddxdZOdyd ZPddzdZQd{d ZRd|d} ZSdd~dZTdd  ZUdd ZVdd ZWddddZXdgeXg djfdgeWg dnfdZYerddgeXg dlfeYdm< e
rddgeXg dqfeYdr< erddgeXg dtfeYdu< dd ZZddddd!Z[ee drHe\d e]ddZ^de^j__`de^ja_`de^jb_`dd Zcn$erle\d e]ddZ^dd Zcddd#Zdddd%Zedd Zfe jge jhB dfdd$ZidS )    NTF)getpwnam)getgrnamntposixi   i   sendfileZlinux
_fcopyfilez%.COM;.EXE;.BAT;.CMD;.VBS;.JS;.WS;.MSC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.8/shutil.pyr   E   s   c                   @   s   e Zd ZdS )r    Nr!   r%   r%   r%   r&   r    H   s   c                   @   s   e Zd ZdS )r   Nr!   r%   r%   r%   r&   r   K   s   c                   @   s   e Zd ZdS )r   Nr!   r%   r%   r%   r&   r   O   s   c                   @   s   e Zd ZdS )	ReadErrorNr!   r%   r%   r%   r&   r'   R   s   r'   c                   @   s   e Zd ZdS )RegistryErrorNr!   r%   r%   r%   r&   r(   U   s   r(   c                   @   s   e Zd ZdS )_GiveupOnFastCopyNr!   r%   r%   r%   r&   r)   Y   s   r)   c              
   C   s   z|   }|  }W n* tk
r> } zt|W 5 d }~X Y nX zt||| W nT tk
r } z6| j|_|j|_|j	t	j
t	jhkrt|n|d W 5 d }~X Y nX d S N)fileno	Exceptionr)   r   r   OSErrornamefilename	filename2errnoEINVALENOTSUP)fsrcfdstflagsinfdoutfderrr%   r%   r&   _fastcopy_fcopyfile^   s    
r:   c              
   C   sD  z|   }|  }W n* tk
r> } zt|W 5 d }~X Y nX ztt|jd}W n tk
rn   d}Y nX tj	dk rt
|d}d}zt||||}W n tk
r& } zj| j|_|j|_|jtjkrdat||jtjkr|d |dkrt|dtjdkrt||W 5 d }~X Y qX |dkr6q@||7 }qd S )Ni   i   l        i   @r   F)r+   r,   r)   maxosfstatst_sizer-   sysmaxsizeminr   r.   r/   r0   r1   ZENOTSOCK_USE_CP_SENDFILEZENOSPClseekSEEK_CUR)r4   r5   r7   r8   r9   Z	blocksizeoffsetZsentr%   r%   r&   _fastcopy_sendfiler   s8    


 
rF   c              
   C   sn   | j }|j}tt|L}||}|s*q`q||k rV|d | }|| W 5 Q R X q|| qW 5 Q R X d S r*   )readintowrite
memoryview	bytearray)r4   r5   lengthZfsrc_readinto
fdst_writeZmvnZsmvr%   r%   r&   _copyfileobj_readinto   s    rN   c                 C   s0   |st }| j}|j}||}|s"q,|| qd S r*   )COPY_BUFSIZEreadrH   )r4   r5   rK   Z	fsrc_readrL   Zbufr%   r%   r&   r      s    c                 C   s   t | tjrJttjdrJztj|  t|W S  tk
rH   Y dS X ttjdr~ztj| |W S  tk
r|   Y dS X tj	tj
| tj	tj
|kS )NsamestatFsamefile)
isinstancer<   DirEntryhasattrpathrQ   statr-   rR   normcaseabspathsrcdstr%   r%   r&   	_samefile   s    r]   c                 C   s   t | tjr|  S t| S r*   )rS   r<   rT   rW   fnr%   r%   r&   _stat   s    r`   c                 C   s    t | tjr|  S tj| S r*   )rS   r<   rT   
is_symlinkrV   islinkr^   r%   r%   r&   _islink   s    rc   follow_symlinksc          	      C   s  t d| | t| |r(td| |d}t| |gD ]j\}}zt|}W n tk
r`   Y q8X t	|j
rt|tjr|jn|}td| tr8|dkr8|j}q8|st| rtt| | n
t| d }t|d}tr,z,t||tj |W W  5 Q R  W  5 Q R  S  tk
r(   Y nX ntrtz(t|| |W W  5 Q R  W  5 Q R  S  tk
rp   Y nX n>tr|dkrt||t|t |W  5 Q R  W  5 Q R  S t || W 5 Q R X W 5 Q R X |S )Nzshutil.copyfilez{!r} and {!r} are the same filer   z`%s` is a named piperbwb)!r?   auditr]   r    format	enumerater`   r-   rW   S_ISFIFOst_moderS   r<   rT   rV   r   _WINDOWSr>   rc   symlinkreadlinkopen_HAS_FCOPYFILEr:   r   Z_COPYFILE_DATAr)   rB   rF   rN   rA   rO   r   )	r[   r\   re   	file_sizeir_   str4   r5   r%   r%   r&   r	      sD    

c                C   sp   t d| | |sFt| rFtj|rFttdr@tjtj }}qRd S nt	tj
 }}|| }||t|j d S )Nzshutil.copymodelchmod)r?   rh   rc   r<   rV   rb   rU   lstatru   r`   chmodrW   S_IMODErl   )r[   r\   re   Z	stat_funcZ
chmod_funcrt   r%   r%   r&   r
   !  s    
	listxattrc                C   s   zt j| |d}W n@ tk
rR } z"|jtjtjtjfkr< W Y d S d }~X Y nX |D ]j}z&t j| ||d}t j||||d W qX tk
r } z |jtj	tjtjtjfkr W 5 d }~X Y qXX qXd S Nrd   )
r<   ry   r-   r1   r3   ZENODATAr2   getxattrsetxattrZEPERM)r[   r\   re   nameser.   valuer%   r%   r&   
_copyxattr7  s    	r   c                  O   s   d S r*   r%   )argskwargsr%   r%   r&   r   O  s    c          	   
      s`  t d| | d d ddd |p6t| o4tj| }|rJ fdd}n fdd}t| tjrp| j|d}n|d	| |d}t	|j
}|d
||j|jf|d t| ||d z|d|||d W n tk
r   Y nX t|dr\z|d||j|d W nV tk
rZ } z6dD ]*}tt|r|jtt|kr qJq W 5 d }~X Y nX d S )Nzshutil.copystat)nsre   c                 W   s   d S r*   r%   )r   re   r   r%   r%   r&   _nop`  s    zcopystat.<locals>._nopc                    s   t t|  S r*   )getattrr<   r.   r   r%   r&   lookupg  s    zcopystat.<locals>.lookupc                    s   t t|  }|tjkr|S  S r*   )r   r<   supports_follow_symlinks)r.   r_   r   r%   r&   r   l  s    
rd   rW   utimerw   st_flagsZchflags)Z
EOPNOTSUPPr3   )r?   rh   rc   r<   rV   rb   rS   rT   rW   rx   rl   st_atime_nsst_mtime_nsr   NotImplementedErrorrU   r   r-   r1   r   )	r[   r\   re   Zfollowr   rt   modewhyr9   r%   r   r&   r   R  s4    
c                C   sB   t j|r"t j|t j| }t| ||d t| ||d |S rz   )r<   rV   isdirjoinbasenamer	   r
   r[   r\   re   r%   r%   r&   r     s
    c                C   sB   t j|r"t j|t j| }t| ||d t| ||d |S rz   )r<   rV   r   r   r   r	   r   r   r%   r%   r&   r     s
    c                     s    fdd}|S )Nc                    s(   g } D ]}| t|| qt|S r*   )extendfnmatchfilterset)rV   r}   ignored_namespatternpatternsr%   r&   _ignore_patterns  s    z)ignore_patterns.<locals>._ignore_patternsr%   )r   r   r%   r   r&   r     s    c                 C   s>  |d k	r$|t |dd | D }nt }t j||d g }	|tkpJ|tk}
| D ]~}|j|krbqPt j||j}t j||j}|
r|n|}z|	 }|rt jdkr|j
dd}|jt
jkrd}|r8t |}|rt || t||| d nBt j|s|rW qP| r,t||||||d n
||| n*| rXt||||||d n
||| W qP tk
r } z|	|jd  W 5 d }~X Y qP tk
r } z|	||t|f W 5 d }~X Y qPX qPzt|| W nJ tk
r* } z*t|d	d d kr|	||t|f W 5 d }~X Y nX |	r:t|	|S )
Nc                 S   s   g | ]
}|j qS r%   r   ).0xr%   r%   r&   
<listcomp>  s     z_copytree.<locals>.<listcomp>)exist_okr   Frd   )dirs_exist_okr   Zwinerror)r<   fspathr   makedirsr   r   r.   rV   r   ra   rW   st_reparse_tagIO_REPARSE_TAG_MOUNT_POINTro   rn   r   existsis_dirr   r   r   r   r-   appendstrr   )entriesr[   r\   symlinksignorecopy_functionignore_dangling_symlinksr   r   errorsZuse_srcentryZsrcentryZsrcnameZdstnameZsrcobjra   rv   linktor9   r   r%   r%   r&   	_copytree  s`    




 
 (&r   c           	   
   C   sD   t d| | t| }t|}W 5 Q R X t|| ||||||dS )Nzshutil.copytree)r   r[   r\   r   r   r   r   r   )r?   rh   r<   scandirlistr   )	r[   r\   r   r   r   r   r   Zitrr   r%   r%   r&   r     s    &
 st_file_attributesc                 C   sP   z4| j dd}t |jo2|jt j@ o0|jt jk W S  tk
rJ   Y dS X d S NFrd   )rW   S_ISDIRrl   r   FILE_ATTRIBUTE_REPARSE_POINTr   r   r-   )entryrt   r%   r%   r&   _rmtree_isdir6  s    
r   c                 C   sL   z0t | }t|jp.|jtj@ o.|jtjkW S  t	k
rF   Y dS X d S )NF)
r<   rv   rW   S_ISLNKrl   r   r   r   r   r-   )rV   rt   r%   r%   r&   _rmtree_islink?  s    

r   c                 C   s*   z| j ddW S  tk
r$   Y dS X d S r   )r   r-   )r   r%   r%   r&   r   H  s    c                 C   s   t j| S r*   )r<   rV   rb   )rV   r%   r%   r&   r   N  s    c              	   C   s&  z"t | }t|}W 5 Q R X W n* tk
rL   |t j| t  g }Y nX |D ]}|j}t|rz| rvtdW n, tk
r   |t jj	|t  Y qRY nX t
|| qRzt | W qR tk
r   |t j|t  Y qRX qRzt |  W n( tk
r    |t j| t  Y nX d S )N%Cannot call rmtree on a symbolic link)r<   r   r   r-   r?   exc_inforV   r   ra   rb   _rmtree_unsafeunlinkrmdir)rV   onerror
scandir_itr   r   fullnamer%   r%   r&   r   R  s0    

r   c              
   C   s.  z"t | }t|}W 5 Q R X W n@ tk
rb } z"||_|t j|t  W Y d S d }~X Y nX |D ]}t j||j	}z|j
dd}W n tk
r   d}Y nNX |rz|jdd}	t|	j}W n* tk
r   |t j|t  Y qhY nX |rzt j|j	t j| d}
W n( tk
r:   |t j|t  Y nX zt j|	t |
rt|
|| zt j|j	| d W n( tk
r   |t j|t  Y nX n8ztdW n* tk
r   |t jj|t  Y nX W 5 t |
 X qhzt j|j	| d W qh tk
r&   |t j|t  Y qhX qhd S )NFrd   )dir_fdr   )r<   r   r   r-   r/   r?   r   rV   r   r.   r   rW   r   rl   rv   rp   O_RDONLYcloserQ   r=   _rmtree_safe_fdr   rb   r   )topfdrV   r   r   r   r9   r   r   r   orig_stdirfdr%   r%   r&   r   q  sR    


r   c              	   C   s  t d|  |rdd }n|d kr*dd }tr`t| trDt| } zt| }W n( tk
rz   |tj| t 	  Y d S X zt
| tj}W n( tk
r   |tj
| t 	  Y d S X ztj|t|rt|| | zt|  W n( tk
r   |tj| t 	  Y nX n8ztdW n* tk
rL   |tjj| t 	  Y nX W 5 t| X nNzt| rttdW n, tk
r   |tjj| t 	  Y d S X t| |S d S )Nzshutil.rmtreec                  W   s   d S r*   r%   r   r%   r%   r&   r     s    zrmtree.<locals>.onerrorc                   W   s    d S r*   r%   r   r%   r%   r&   r     s    r   )r?   rh   _use_fd_functionsrS   bytesr<   fsdecoderv   r,   r   rp   r   r   rV   rQ   r=   r   r   r-   rb   r   r   )rV   ignore_errorsr   r   fdr%   r%   r&   r     sJ    



c                 C   s&   t jjt jjpd }t j| |S )N )r<   rV   sepaltsepr   rstrip)rV   r   r%   r%   r&   	_basename  s    r   c              	   C   sT  t d| | |}tj|rbt| |r8t| | d S tj|t| }tj	|rbt
d| zt| | W n tk
rN   tj| rt| }t|| t|  ntj| r6t| |rt
d| |f t| st| tjst| rt jdkrtd| | f t| ||dd t|  n|| | t|  Y nX |S )Nzshutil.movez$Destination path '%s' already existsz.Cannot move a directory '%s' into itself '%s'.darwinzKCannot move the non-empty directory '%s': Lacking write permission to '%s'.T)r   r   )r?   rh   r<   rV   r   r]   renamer   r   r   r   r-   rb   ro   rn   r   
_destinsrc_is_immutableaccessW_OKlistdirplatformPermissionErrorr   r   )r[   r\   r   Zreal_dstr   r%   r%   r&   r     sL    





c                 C   sV   t j| } t j|}| t jjs2| t jj7 } |t jjsL|t jj7 }|| S r*   )r<   rV   rY   endswithr   
startswithrZ   r%   r%   r&   r   /  s    r   c                 C   s(   t | }tjtjg}t|do&|j|kS )Nr   )r`   rW   UF_IMMUTABLESF_IMMUTABLErU   r   )r[   rt   Zimmutable_statesr%   r%   r&   r   8  s    r   c                 C   sN   t d ks| d krd S zt | }W n tk
r8   d }Y nX |d k	rJ|d S d S N   )r   KeyErrorr.   resultr%   r%   r&   _get_gid=  s    
r   c                 C   sN   t d ks| d krd S zt | }W n tk
r8   d }Y nX |d k	rJ|d S d S r   )r   r   r   r%   r%   r&   _get_uidI  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|dd l}	|rfd	| nd}
| d
 |
 }tj|}|rtj	|s|d k	r|
d| |st| |d k	r|
d tt  fdd}|s|	|d| }z|j||d W 5 |  X |S )Nr   r   Zgzbzip2bz2xzzCbad value for 'compress', or compression format not supported : {0}r   ..tarcreating %szCreating tar archivec                    s,    d k	r | _ | _d k	r(| _| _| S r*   )gidZgnameuiduname)Ztarinfor   groupownerr   r%   r&   _set_uid_gid  s    z#_make_tarball.<locals>._set_uid_gidzw|%sr   )_ZLIB_SUPPORTED_BZ2_SUPPORTED_LZMA_SUPPORTED
ValueErrorri   tarfiler<   rV   dirnamer   infor   r   r   rp   r   add)	base_namebase_dircompressverbosedry_runr   r   loggerZtar_compressionr   Zcompress_extZarchive_namearchive_dirr   tarr%   r   r&   _make_tarballU  s>    

	
r
  c              	   C   sn  dd l }| d }tj| }|rNtj|sN|d k	r@|d| |sNt| |d k	rd|d|| |sj|j|d|jd}tj	|}	|	tj
kr||	|	 |d k	r|d|	 t|D ]\}
}}t|D ]:}tj	tj|
|}	||	|	 |d k	r|d|	 q|D ]L}tj	tj|
|}	tj|	r||	|	 |d k	r|d|	 qqW 5 Q R X |S )Nr   .zipr   z#creating '%s' and adding '%s' to itw)Zcompressionzadding '%s')zipfiler<   rV   r   r   r   r   ZipFileZZIP_DEFLATEDnormpathcurdirrH   walksortedr   isfile)r  r  r  r  r  r  Zzip_filenamer  ZzfrV   dirpathZdirnames	filenamesr.   r%   r%   r&   _make_zipfile  sH    
 

r  r	  )r  Nzuncompressed tar file)r  r   zgzip'ed tar-fileZgztarzZIP filezip)r  r   zbzip2'ed tar-fileZbztar)r  r   zxz'ed tar-fileZxztarc                  C   s   dd t  D } |   | S )Nc                 S   s   g | ]\}}||d  fqS )r   r%   )r   r.   registryr%   r%   r&   r     s     z'get_archive_formats.<locals>.<listcomp>)_ARCHIVE_FORMATSitemssortZformatsr%   r%   r&   r     s
    r   c                 C   st   |d krg }t |s td| t|ttfs6td|D ]&}t|ttfrXt|dkr:tdq:|||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	TypeErrorrS   tupler   lenr  )r.   function
extra_argsdescriptionZelementr%   r%   r&   r     s    	
c                 C   s
   t | = d S r*   )r  r   r%   r%   r&   r     s    c	              
   C   s  t d| ||| t }	|d k	rP|d k	r6|d| tj| } |sPt| |d kr^tj}||d}
zt	| }W n" t
k
r   td| d Y nX |d }|d D ]\}}||
|< q|dkr||
d< ||
d	< z|| |f|
}W 5 |d k	r|d k	r|d
|	 t|	 X |S )Nzshutil.make_archivezchanging into '%s')r  r  zunknown archive format '%s'r      r  r   r   zchanging back to '%s')r?   rh   r<   getcwddebugrV   rY   chdirr  r  r   r   )r  ri   Zroot_dirr  r  r  r   r   r  Zsave_cwdr   format_infofuncargvalr/   r%   r%   r&   r     s8    




c                  C   s   dd t  D } |   | S )Nc                 S   s"   g | ]\}}||d  |d fqS )r      r%   )r   r.   r   r%   r%   r&   r   3  s     z&get_unpack_formats.<locals>.<listcomp>)_UNPACK_FORMATSr  r  r  r%   r%   r&   r   -  s
    c           	      C   sj   i }t  D ]\}}|d D ]}|||< qq| D ]$}||kr0d}t|||| f q0t|sft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_extensionsr.   r   ext	extensionmsgr%   r%   r&   _check_unpack_options8  s    
r2  c                 C   s,   |d krg }t ||| ||||ft| < d S r*   )r2  r-  )r.   r.  r!  r"  r#  r%   r%   r&   r   J  s    c                 C   s
   t | = d S r*   )r-  r   r%   r%   r&   r   `  s    c                 C   s&   t j| }t j|s"t | d S r*   )r<   rV   r   r   r   )rV   r   r%   r%   r&   _ensure_directoryd  s    r3  c           	   	   C   s   dd l }|| std|  || }z| D ]}|j}|ds2d|krPq2tj	j
|f|d }|snq2t| |ds2||j}t|d}z|| W 5 |  ~X q2W 5 |  X d S )Nr   z%s is not a zip file/z..rg   )r  Z
is_zipfiler'   r  r   Zinfolistr/   r   r<   rV   r   splitr3  r   rP   rp   rH   )	r/   extract_dirr  r  r   r.   targetdatafr%   r%   r&   _unpack_zipfilej  s*    




r:  r   c                C   s\   dd l }z|| }W n" |jk
r8   td|  Y nX z|j||d W 5 |  X d S )Nr   z/%s is not a compressed or uncompressed tar filer   )r   rp   ZTarErrorr'   r   Z
extractall)r/   r6  r   r   Ztarobjr%   r%   r&   _unpack_tarfile  s    
r;  r   r  )r	  r  z.tar.gzz.tgzz.tar.bz2z.tbz2z.tar.xzz.txzc                 C   s:   t  D ],\}}|d D ]}| |r|    S qqd S )Nr   )r-  r  r   )r/   r.   r   r0  r%   r%   r&   _find_unpack_format  s
    
r<  c                C   s   t d| || |d kr t }t|}t| } |d krBi }nd|i}|d k	rzt| }W n$ tk
r   td|d Y nX |d }|| |ft	|d | nRt
| }|d krtd| t| d }t	t| d }|| || |f| d S )Nzshutil.unpack_archiver   zUnknown unpack format '{0}'r$  r   zUnknown archive format '{0}')r?   rh   r<   r%  r   r-  r   r   ri   dictr<  r'   update)r/   r6  ri   r   Zfilter_kwargsr(  r)  r   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 }t|||S r*   )r<   r?  f_bavailf_frsizef_blocksf_bfree_ntuple_diskusage)rV   rt   freetotalusedr%   r%   r&   r@    s
    
c                 C   s"   t | \}}|| }t|||S r*   )r   Z_getdiskusagerE  )rV   rG  rF  rH  r%   r%   r&   r@    s    c                 C   s   t d| || |d kr(|d kr(td|}|}|d kr>d}n(t|trft|}|d krftd||d krtd}n(t|tst	|}|d krtd|t
| || d S )Nzshutil.chownzuser and/or group must be setzno such user: {!r}zno such group: {!r})r?   rh   r   rS   r   r   LookupErrorri   intr   r<   r   )rV   userr   Z_userZ_groupr%   r%   r&   r     s$    

P      c              
   C   s   zt tjd }W n ttfk
r.   d}Y nX zt tjd }W n ttfk
r^   d}Y nX |dksp|dkrzttj }W n$ t	tt
fk
r   t| }Y nX |dkr|j}|dkr|j}t||fS )NZCOLUMNSr   ZLINES)rK  r<   environr   r   r   r?   
__stdout__r+   AttributeErrorr-   terminal_sizecolumnslines)ZfallbackrT  rU  sizer%   r%   r&   r   (  s$    

c                 C   s&   t j| o$t | |o$t j|  S r*   )r<   rV   r   r   r   )r_   r   r%   r%   r&   _access_checkY  s    rW  c              	      s  t j rt |r S d S t t}|d krtt jdd }|d krtzt d}W n t	t
fk
rr   t j}Y nX |s|d S |rt |}|t t j}nt |}|t j}tjdkrTt j}|rt |}||kr|d| t dpt}dd |t jD }|r dd |D }t fd	d
|D r@ g}n fdd|D }n g}t }|D ]X}	t j|	}
|
|krd||
 |D ],}t j|	|}t||r|    S qqdd S )NPATHCS_PATHZwin32r   ZPATHEXTc                 S   s   g | ]}|r|qS r%   r%   r   r/  r%   r%   r&   r     s      zwhich.<locals>.<listcomp>c                 S   s   g | ]}t |qS r%   )r<   fsencoderZ  r%   r%   r&   r     s     c                 3   s    | ]}   |  V  qd S r*   )lowerr   rZ  cmdr%   r&   	<genexpr>  s     zwhich.<locals>.<genexpr>c                    s   g | ]} | qS r%   r%   rZ  r]  r%   r&   r     s     )r<   rV   r   rW  rS   r   rP  getconfstrrR  r   defpathr[  r5  pathsepr   r?   r   r  insertgetenv_WIN_DEFAULT_PATHEXTanyr   rX   r  r   )r^  r   rV   Z	use_bytesr  Zpathext_sourceZpathextfilesseendirZnormdirZthefiler.   r%   r]  r&   r   ^  sV    






)r   )F)FN)r   r   r   NNN)r   r   N)Nr   )NNr   r   NNN)Nr   )NN)NN)rM  )jr<   r?   rW   r   collectionsr1   zlibr   ImportErrorr   r   Zlzmar   pwdr   Zgrpr   r.   rm   r   r   rO   rU   r   r   rB   rq   rf  __all__r-   r   r    r   r   r'   r,   r(   r)   r:   rF   rN   r   r]   r`   rc   r	   r
   r   r   r   r   r   r   r   stat_resultr   r   r   r   rp   r   r   supports_dir_fdr   supports_fdr   r   r   Zavoids_symlink_attacksr   r   r   r   r   r   r
  r  r  r   r   r   r   r   r2  r   r   r3  r:  r;  r-  r<  r   r   
namedtuplerE  rG  __doc__rH  rF  r@  r   r   rW  F_OKX_OKr   r%   r%   r%   r&   <module>   sr  






            
@
7B 
A 
.	
	4


>?	      
A
- 


        
8  
"


2



 
1