
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
U
    ,an                    @   sf  d Z dZdZddlmZ ddlZddlZddlZ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W n ek
r   dZY nX zddlZW n ek
r   dZY nX eefZzeef7 ZW n ek
r   Y nX dddd	d
ddddddddddgZdZdZed ZdZdZdZdZdZdZ dZ!dZ"dZ#dZ$d Z%d!Z&d"Z'd#Z(d$Z)d%Z*d&Z+d'Z,d(Z-d)Z.dZ/d*Z0d+Z1e1Z2e e!e"e#e&e'e(e$e%e)e*e+fZ3e e!e(e+fZ4e)e*e+fZ5d,Z6d-d.d/d0hZ7e8e8e8e9e9e9d1Z:ej;d2krd3Z<ne= Z<d4d5 Z>d6d7 Z?d8d9 Z@d:e2fd;d<ZAd=d> ZBdedfd?d@ZCdAdB ZDG dCd	 d	eEZFG dDd deFZGG dEd
 d
eFZHG dFd deFZIG dGd deFZJG dHd deFZKG dIdJ dJeKZLG dKdL dLeKZMG dMdN dNeKZNG dOdP dPeKZOG dQdR dReKZPG dSdT dTZQG dUdV dVZRG dWdX dXeSZTG dYdZ dZeSZUG d[d\ d\ejVZWG d]d deSZXG d^d deSZYd_d ZZeYjZd`da Z[e\dbkrbe[  dS )cz0.9.0u"   Lars Gustäbel (lars@gustaebel.de)u4   Gustavo Niemeyer, Niels Gustäbel, Richard Townsend.    )openNTarFileTarInfo
is_tarfileTarError	ReadErrorCompressionErrorStreamErrorExtractErrorHeaderErrorENCODINGUSTAR_FORMAT
GNU_FORMAT
PAX_FORMATDEFAULT_FORMATr       i      s   ustar   s   ustar 00d         0   1   2   3   4   5   6   7   L   K   S   x   g   X      )pathlinkpathsizemtimeuidgidunamegnamer%   r&   r+   r,   )Zatimectimer(   r)   r*   r'   ntutf-8c                 C   s(   |  ||} | d | |t|  t  S N)encodelenNUL)slengthencodingerrors r8   ,/opt/alt/python38/lib64/python3.8/tarfile.pystn   s    r:   c                 C   s*   |  d}|dkr| d | } | ||S )Nr   )finddecode)r4   r6   r7   pr8   r8   r9   nts   s    
r?   c                 C   s   | d dkrbd}t t| d D ]}|dK }|| |d  7 }q | d dkrdt| d  |  }n@z"t| dd} t|  p|d	d}W n tk
r   td
Y nX |S )Nr   )      r#      rA      asciistrict0invalid header)ranger2   r?   intstrip
ValueErrorInvalidHeaderError)r4   nir8   r8   r9   nti   s    rO   rB   c                 C   s   t | } d|   kr$d|d  k rDn ntd|d | f dt }n|tkrd|d   |   krrd|d  k rn nV| dkrtdg}ntdg}d| |  } t|d D ]}|d| d@  | dL } qntd	|S )
Nr   rB   r#   z%0*orD   rC   r@   rA   zoverflow in number field)rI   bytesr3   r   	bytearrayrH   insertrK   )rM   digitsformatr4   rN   r8   r8   r9   itn   s     2
rU   c                 C   s0   dt td|  }dt td|  }||fS )NrC   Z
148B8x356BZ
148b8x356b)sumstructZunpack_from)bufZunsigned_chksumZsigned_chksumr8   r8   r9   calc_chksums   s    	rY   c           	      C   s   |pd}|dkrd S |d kr.t | || d S t||\}}t|D ],}| |}t||k rf|d|| qD|dkr| |}t||k r|d|| d S )Ni @  r   unexpected end of data)shutilcopyfileobjdivmodrH   readr2   write)	srcZdstr5   	exceptionbufsizeblocks	remainderbrX   r8   r8   r9   r\      s$    


r\   c                 C   s8   t tjdd }|d k	r(| |d|} t| dd d S )Nr6   backslashreplace )end)getattrsysstdoutr1   r=   print)r4   r6   r8   r8   r9   _safe_print  s    rm   c                   @   s   e Zd ZdS )r   N__name__
__module____qualname__r8   r8   r8   r9   r   
  s   c                   @   s   e Zd ZdS )r
   Nrn   r8   r8   r8   r9   r
     s   c                   @   s   e Zd ZdS )r   Nrn   r8   r8   r8   r9   r     s   c                   @   s   e Zd ZdS )r   Nrn   r8   r8   r8   r9   r     s   c                   @   s   e Zd ZdS )r	   Nrn   r8   r8   r8   r9   r	     s   c                   @   s   e Zd ZdS )r   Nrn   r8   r8   r8   r9   r     s   c                   @   s   e Zd ZdS )EmptyHeaderErrorNrn   r8   r8   r8   r9   rr     s   rr   c                   @   s   e Zd ZdS )TruncatedHeaderErrorNrn   r8   r8   r8   r9   rs     s   rs   c                   @   s   e Zd ZdS )EOFHeaderErrorNrn   r8   r8   r8   r9   rt   "  s   rt   c                   @   s   e Zd ZdS )rL   Nrn   r8   r8   r8   r9   rL   %  s   rL   c                   @   s   e Zd ZdS )SubsequentHeaderErrorNrn   r8   r8   r8   r9   ru   (  s   ru   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
_LowLevelFilec                 C   sF   t jt jt jB t jB d| }tt dr2|t jO }t ||d| _d S )NrwO_BINARYi  )	osO_RDONLYO_WRONLYO_CREATO_TRUNChasattrrz   r   fd)selfnamemoder8   r8   r9   __init__5  s    

z_LowLevelFile.__init__c                 C   s   t | j d S r0   )r{   closer   r   r8   r8   r9   r   >  s    z_LowLevelFile.closec                 C   s   t | j|S r0   )r{   r^   r   r   r'   r8   r8   r9   r^   A  s    z_LowLevelFile.readc                 C   s   t | j| d S r0   )r{   r_   r   r   r4   r8   r8   r9   r_   D  s    z_LowLevelFile.writeN)ro   rp   rq   r   r   r^   r_   r8   r8   r8   r9   rv   /  s   	rv   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 Z
dddZdd Zdd Zdd ZdS )_Streamc           	      C   s  d| _ |d krt||}d| _ |dkr6t|}| }|p<d| _|| _|| _|| _|| _d| _	d| _
d| _zL|dkrzdd l}W n tk
r   tdY nX || _|d| _|d	kr|   |j| _n|   n|d
kr:zdd l}W n tk
r
   tdY nX |d	kr.d| _| | _t| _n
| | _n||dkrzdd l}W n tk
rn   tdY nX |d	krd| _| | _|j| _n
| | _n|dkrtd| W n&   | j s| j  d| _ Y nX d S )NTF*     r   gzzzlib module is not availablerx   bz2bz2 module is not availablexzlzma module is not availabletarunknown compression type %r) _extfileobjrv   _StreamProxygetcomptyper   r   comptypefileobjrb   rX   posclosedzlibImportErrorr   crc32crc_init_read_gzerrorra   _init_write_gzr   dbufZBZ2DecompressorcmpOSErrorZBZ2CompressorlzmaZLZMADecompressor	LZMAErrorZLZMACompressorr   )	r   r   r   r   r   rb   r   r   r   r8   r8   r9   r   R  sl    












z_Stream.__init__c                 C   s   t | dr| js|   d S )Nr   )r   r   r   r   r8   r8   r9   __del__  s    z_Stream.__del__c                 C   s   | j d| j j| j j | j jd| _tdtt		 }| 
d| d  | jdrf| jd d | _tj| j| _| 
| jdd	t  d S )
N	   r   <Ls   s   .gzz
iso-8859-1replace)r   ZcompressobjZDEFLATED	MAX_WBITSZDEF_MEM_LEVELr   rW   packrI   time_Stream__writer   endswithr{   r%   basenamer1   r3   )r   Z	timestampr8   r8   r9   r     s    z_Stream._init_write_gzc                 C   sR   | j dkr| j|| j| _|  jt|7  _| j dkrD| j|}| | d S )Nr   r   )	r   r   r   r   r   r2   r   compressr   r   r8   r8   r9   r_     s    

z_Stream.writec                 C   sN   |  j |7  _ t| j | jkrJ| j| j d | j  | j | jd  | _ qd S r0   )rX   r2   rb   r   r_   r   r8   r8   r9   Z__write  s    z_Stream.__writec                 C   s   | j r
d S d| _ z| jdkr:| jdkr:|  j| j 7  _| jdkr| jr| j	| j d| _| jdkr| j	t
d| j | j	t
d| jd@  W 5 | js| j  X d S )NTry   r   r   r   r   l    )r   r   r   r   r   r   rX   r   flushr_   rW   r   r   r   r   r8   r8   r9   r     s    
z_Stream.closec                 C   s   | j | j j | _d| _| ddkr0td| ddkrFtdt| d}| d |d	@ rt| dd
t| d  }| 	| |d@ r| d}|r|t
krqq|d@ r| d}|r|t
krqq|d@ r| d d S )Nr   r$   s   not a gzip filer#      zunsupported compression method      rC   rB      )r   Zdecompressobjr   r   r   _Stream__readr   r   ordr^   r3   )r   flagZxlenr4   r8   r8   r9   r     s*    
 


z_Stream._init_read_gzc                 C   s   | j S r0   )r   r   r8   r8   r9   tell  s    z_Stream.tellr   c                 C   sX   || j  dkrJt|| j  | j\}}t|D ]}| | j q,| | ntd| j S )Nr   z seeking backwards is not allowed)r   r]   rb   rH   r^   r	   )r   r   rc   rd   rN   r8   r8   r9   seek  s    z_Stream.seekc                 C   s    |  |}|  jt|7  _|S r0   )_readr   r2   )r   r'   rX   r8   r8   r9   r^     s    
z_Stream.readc                 C   s   | j dkr| |S t| j}| jg}||k r| jrB| j}d| _n| j| j}|sVqz| j	|}W n | j
k
r   tdY nX || |t|7 }q&d|}||d  | _|d | S )Nr   r   zinvalid compressed data)r   r   r2   r   rX   r   r^   rb   r   
decompressra   r   appendjoinr   r'   ctrX   r8   r8   r9   r     s(    




z_Stream._readc                 C   sj   t | j}| jg}||k rF| j| j}|s.qF|| |t |7 }qd|}||d  | _|d | S )Nr   )r2   rX   r   r^   rb   r   r   r   r8   r8   r9   Z__read(  s    


z_Stream.__readN)r   )ro   rp   rq   r   r   r   r_   r   r   r   r   r   r^   r   r   r8   r8   r8   r9   r   G  s   F
	
r   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
r   c                 C   s   || _ | j t| _d S r0   )r   r^   	BLOCKSIZErX   )r   r   r8   r8   r9   r   >  s    z_StreamProxy.__init__c                 C   s   | j j| _| jS r0   )r   r^   rX   r   r8   r8   r9   r^   B  s    
z_StreamProxy.readc                 C   sP   | j drdS | j dd dkr8| j dd dkr8d	S | j d
rHdS dS d S )Ns   r   r      s   BZhr   
   s   1AY&SYr   )s   ]  s   7zXZr   r   )rX   
startswithr   r8   r8   r9   r   F  s    $z_StreamProxy.getcomptypec                 C   s   | j   d S r0   )r   r   r   r8   r8   r9   r   P  s    z_StreamProxy.closeN)ro   rp   rq   r   r^   r   r   r8   r8   r8   r9   r   9  s   
r   c                   @   sf   e Zd ZdddZdd Zdd Zdd	 Zd
d Zdd Ze	j
fddZdddZdd Zdd ZdS )_FileInFileNc                 C   s   || _ || _|| _d| _t|dd | _d| _|d kr>d|fg}d| _g | _d}| j}|D ]L\}}||kr|| j	d||d f | j	d||| |f ||7 }|| }qX|| jk r| j	d|| jd f d S )Nr   r   FT)
r   offsetr'   positionri   r   r   	map_indexmapr   )r   r   r   r'   Z	blockinfoZlastposZrealposr8   r8   r9   r   ]  s(    


z_FileInFile.__init__c                 C   s   d S r0   r8   r   r8   r8   r9   r   v  s    z_FileInFile.flushc                 C   s   dS NTr8   r   r8   r8   r9   readabley  s    z_FileInFile.readablec                 C   s   dS )NFr8   r   r8   r8   r9   writable|  s    z_FileInFile.writablec                 C   s
   | j  S r0   )r   seekabler   r8   r8   r9   r     s    z_FileInFile.seekablec                 C   s   | j S r0   )r   r   r8   r8   r9   r     s    z_FileInFile.tellc                 C   s   |t jkr tt|d| j| _nj|t jkr\|dk rFt| j| d| _qt| j| | j| _n.|t jkrtt| j| | jd| _ntd| jS )Nr   zInvalid argument)	ioSEEK_SETminmaxr'   r   SEEK_CURSEEK_ENDrK   )r   r   whencer8   r8   r9   r     s    


z_FileInFile.seekc           	      C   s
  |d kr| j | j }nt|| j | j }d}|dkr| j| j \}}}}|| j  kr`|k rhq nqq6|  jd7  _| jt| jkr6d| _q6t||| j }|r| j|| j|   | j|}t||krt	d||7 }n|t
| 7 }||8 }|  j|7  _q,|S )Nr   r   r#   rZ   )r'   r   r   r   r   r2   r   r   r^   r   r3   )	r   r'   rX   datastartstopr   r5   re   r8   r8   r9   r^     s,    

z_FileInFile.readc                 C   s&   |  t|}||d t|< t|S r0   )r^   r2   )r   re   rX   r8   r8   r9   readinto  s    z_FileInFile.readintoc                 C   s
   d| _ d S r   )r   r   r8   r8   r9   r     s    z_FileInFile.close)N)N)ro   rp   rq   r   r   r   r   r   r   r   r   r   r^   r   r   r8   r8   r8   r9   r   W  s   

r   c                       s   e Zd Z fddZ  ZS )ExFileObjectc                    s&   t |j|j|j|j}t | d S r0   )r   r   offset_datar'   sparsesuperr   )r   tarfiletarinfor   	__class__r8   r9   r     s
    
 zExFileObject.__init__)ro   rp   rq   r   __classcell__r8   r8   r   r9   r     s   r   c                   @   s  e Zd Zeddddddddd	d
dddddddddddZddddZedd Zejdd Zedd Z	e	jdd Z	dd Z
dd  Zeed!fd"d#Zd$d% Zd&d' Zd(d) Zed*d+ Zd,d- Zed.d/ Zed0d1 Zed2d3 Zed4d5 Zed6d7 Zed8d9 Zd:d; Zd<d= Zd>d? Zd@dA ZdBdC Z dDdE Z!dFdG Z"dHdI Z#dJdK Z$dLdM Z%dNdO Z&dPdQ Z'dRdS Z(dTdU Z)dVdW Z*dXdY Z+dZd[ Z,d\d] Z-d^d_ Z.d`da Z/dbdc Z0dS )er   zName of the archive member.zPermission bits.z6User ID of the user who originally stored this member.z7Group ID of the user who originally stored this member.zSize in bytes.zTime of last modification.zHeader checksum.zFile type. type is usually one of these constants: REGTYPE, AREGTYPE, LNKTYPE, SYMTYPE, DIRTYPE, FIFOTYPE, CONTTYPE, CHRTYPE, BLKTYPE, GNUTYPE_SPARSE.zcName of the target file name, which is only present in TarInfo objects of type LNKTYPE and SYMTYPE.z
User name.zGroup name.zDevice major number.zDevice minor number.zThe tar header starts here.zThe file's data starts here.zMA dictionary containing key-value pairs of an associated pax extended header.zSparse member information.N)r   r   r)   r*   r'   r(   chksumtypelinknamer+   r,   devmajordevminorr   r   pax_headersr   r   _sparse_structs_link_targetr   c                 C   sj   || _ d| _d| _d| _d| _d| _d| _t| _d| _	d| _
d| _d| _d| _d| _d| _d | _i | _d S )Ni  r   r   )r   r   r)   r*   r'   r(   r   REGTYPEr   r   r+   r,   r   r   r   r   r   r   r   r   r8   r8   r9   r     s"    zTarInfo.__init__c                 C   s   | j S r0   r   r   r8   r8   r9   r%     s    zTarInfo.pathc                 C   s
   || _ d S r0   r   r   r8   r8   r9   r%   
  s    c                 C   s   | j S r0   r   r   r8   r8   r9   r&     s    zTarInfo.linkpathc                 C   s
   || _ d S r0   r   )r   r   r8   r8   r9   r&     s    c                 C   s   d| j j| jt| f S )Nz<%s %r at %#x>)r   ro   r   idr   r8   r8   r9   __repr__  s    zTarInfo.__repr__c                 C   sl   | j | jd@ | j| j| j| j| j| j| j| j	| j
| j| jd}|d tkrh|d dsh|d  d7  < |S )N  )r   r   r)   r*   r'   r(   r   r   r   r+   r,   r   r   r   r   /)r   r   r)   r*   r'   r(   r   r   r   r+   r,   r   r   DIRTYPEr   )r   infor8   r8   r9   get_info  s"    zTarInfo.get_infosurrogateescapec                 C   sT   |   }|tkr| |||S |tkr4| |||S |tkrH| ||S tdd S )Nzinvalid format)r   r   create_ustar_headerr   create_gnu_headerr   create_pax_headerrK   )r   rT   r6   r7   r   r8   r8   r9   tobuf2  s    zTarInfo.tobufc                 C   sn   t |d< t|d ||tkr(tdt|d ||tkr^| |d ||\|d< |d< | |t||S )Nmagicr   zlinkname is too longr   prefix)	POSIX_MAGICr2   r1   LENGTH_LINKrK   LENGTH_NAME_posix_split_name_create_headerr   )r   r   r6   r7   r8   r8   r9   r   @  s    zTarInfo.create_ustar_headerc                 C   s   t |d< d}t|d ||tkr<|| |d t||7 }t|d ||tkrl|| |d t||7 }|| |t	|| S )Nr   r   r   r   )
	GNU_MAGICr2   r1   r  _create_gnu_long_headerGNUTYPE_LONGLINKr  GNUTYPE_LONGNAMEr  r   )r   r   r6   r7   rX   r8   r8   r9   r   M  s    zTarInfo.create_gnu_headerc           
   	   C   s*  t |d< | j }ddtfddtfddfD ]j\}}}||kr>q*z|| dd	 W n$ tk
rv   || ||< Y q*Y nX t|| |kr*|| ||< q*d
D ]`\}}||krd||< q|| }d|  krd|d  k rn n
t|t	rt
|||< d||< q|r| |t|}	nd}	|	| |tdd S )Nr   r   r%   r   r&   )r+   r+       )r,   r,   r  rD   rE   ))r)   rB   )r*   rB   )r'      )r(   r  r   rB   r#   r   r   )r  r   copyr  r  r1   UnicodeEncodeErrorr2   
isinstancefloatstr_create_pax_generic_headerXHDTYPEr  r   )
r   r   r6   r   r   Zhnamer5   rS   valrX   r8   r8   r9   r   [  s8    
  
*
zTarInfo.create_pax_headerc                 C   s   |  |tdS )Nr/   )r  XGLTYPE)clsr   r8   r8   r9   create_pax_global_header  s    z TarInfo.create_pax_global_headerc                 C   s~   | d}tdt|D ]T}d|d | }d||d  }t|||tkrt|||tkr qvqtd||fS )Nr   r#   zname is too long)splitrH   r2   r   r1   LENGTH_PREFIXr  rK   )r   r   r6   r7   Z
componentsrN   r  r8   r8   r9   r    s    
zTarInfo._posix_split_namec                 C   sV  t | ddd||t| ddd@ d|t| ddd|t| d	dd|t| d
dd|t| ddd|d| dtt | ddd||| dtt | ddd||t | ddd||t| ddd|t| ddd|t | ddd||g}tdt d|}t	|t d  d }|d d t
d| d |dd   }|S )Nr   r   r   r   r   r   rB   r)   r*   r'   r  r(   s           r   r   r   r+   r  r,   r   r   r  r   z%dsr   iz%06o rD   i)r:   getrU   r   r  rW   r   r   r   rY   rP   )r   rT   r6   r7   partsrX   r   r8   r8   r9   r    s(    

&zTarInfo._create_headerc                 C   s.   t t| t\}}|dkr*| t| t 7 } | S )Nr   )r]   r2   r   r3   )Zpayloadrc   rd   r8   r8   r9   _create_payload  s    zTarInfo._create_payloadc                 C   sR   | ||t }i }d|d< ||d< t||d< t|d< | |t||| | S )Nz././@LongLinkr   r   r'   r   )r1   r3   r2   r  r  r   r  )r  r   r   r6   r7   r   r8   r8   r9   r    s    zTarInfo._create_gnu_long_headerc              	   C   s2  d}|  D ]8\}}z|dd W q tk
rB   d}Y  qFY qX qd}|rV|d7 }|  D ]\}}|d}|r||d}n
|d}t|t| d }d	 }	}
|tt|
 }	|	|
krq|	}
q|tt|
d
d | d | d 7 }q^i }d|d< ||d< t||d< t|d< | |td
d| 	| S )NFr/   rE   Tr   s   21 hdrcharset=BINARY
r   r   r   rD          =   
z././@PaxHeaderr   r   r'   r   r   )
itemsr1   r  r2   r  rP   r  r  r   r  )r  r   r   r6   ZbinarykeywordvalueZrecordslrM   r>   r   r8   r8   r9   r    s<    

(z"TarInfo._create_pax_generic_headerc              	   C   sv  t |dkrtdt |tkr(td|ttkr>tdt|dd }|t|krbt	d|  }t
|dd |||_t|dd	 |_t|d	d
 |_t|d
d |_t|dd |_t|dd |_||_|dd |_t
|dd |||_t
|dd |||_t
|dd |||_t|dd |_t|dd |_t
|dd ||}|jtkr|jdrt|_|jtkr8d}g }tdD ]l}	z0t|||d  }
t||d |d  }W n tk
r   Y  qY nX ||
|f |d7 }qt|d }t|dd }|||f|_ |! rP|j"d|_|rr|jt#krr|d |j |_|S )Nr   zempty headerztruncated headerzend of file header      zbad checksumr   l   t   |         i  i	  i)  iI  iQ  iY  i  r   i  r   r     i  i  i  )$r2   rr   r   rs   countr3   rt   rO   rY   rL   r?   r   r   r)   r*   r'   r(   r   r   r   r+   r,   r   r   AREGTYPEr   r   GNUTYPE_SPARSErH   rK   r   boolr   isdirrstrip	GNU_TYPES)r  rX   r6   r7   r   objr  r   structsrN   r   numbytes
isextendedorigsizer8   r8   r9   frombuf  sZ    
zTarInfo.frombufc                 C   s8   |j t}| ||j|j}|j  t |_||S r0   )	r   r^   r   r8  r6   r7   r   r   _proc_member)r  r   rX   r3  r8   r8   r9   fromtarfileK  s    zTarInfo.fromtarfilec                 C   sT   | j ttfkr| |S | j tkr,| |S | j tttfkrF| 	|S | 
|S d S r0   )r   r
  r	  _proc_gnulongr.  _proc_sparser  r  SOLARIS_XHDTYPE	_proc_pax_proc_builtin)r   r   r8   r8   r9   r9  `  s    



zTarInfo._proc_memberc                 C   sR   |j  | _| j}|  s$| jtkr4|| | j7 }||_| 	|j
|j|j | S r0   )r   r   r   isregr   SUPPORTED_TYPES_blockr'   r   _apply_pax_infor   r6   r7   )r   r   r   r8   r8   r9   r?  m  s    zTarInfo._proc_builtinc                 C   s   |j | | j}z| |}W n tk
r>   tdY nX | j|_| jt	krft
||j|j|_n| jtkrt
||j|j|_|S )N missing or bad subsequent header)r   r^   rB  r'   r:  r   ru   r   r   r
  r?   r6   r7   r   r	  r   )r   r   rX   nextr8   r8   r9   r;  ~  s    

zTarInfo._proc_gnulongc           
   	   C   s   | j \}}}| ` |r|jt}d}tdD ]n}z0t|||d  }t||d |d  }	W n tk
rz   Y  qY nX |r|	r|||	f |d7 }q,t|d }q|| _	|j
 | _| j| | j |_|| _| S )Nr      r  r+  i  )r   r   r^   r   rH   rO   rK   r   r/  r   r   r   rB  r'   r   )
r   r   r4  r6  r7  rX   r   rN   r   r5  r8   r8   r9   r<    s(    
zTarInfo._proc_sparsec                 C   s.  |j | | j}| jtkr&|j}n
|j }t	d|}|d k	rX|
dd|d< |d}|dkrr|j}nd}td}d}|||}|sq6| \}	}
t|	}	|	dkrtd||d	d |d|	 d  }| |
dd|j}
|
tkr| |||j|j}n| |dd|j}|||
< ||	7 }qz| |}W n tk
rb   td
Y nX d|kr|| || nHd|kr| ||| n.|ddkr|ddkr| ||| | jttfkr*| ||j|j | j!|_!d|kr*|j"}|# s|jt$kr$|||j7 }||_!|S )Ns   \d+ hdrcharset=([^\n]+)\nr#   r/   
hdrcharsetZBINARYs   (\d+) ([^=]+)=r   rG   r$   rD  GNU.sparse.mapGNU.sparse.sizezGNU.sparse.major1zGNU.sparse.minorrF   r'   )%r   r^   rB  r'   r   r  r   r  researchgroupr=   r  r6   compilematchgroupsrI   rL   rh   r   _decode_pax_fieldr7   PAX_NAME_FIELDSr:  r   ru   _proc_gnusparse_01_proc_gnusparse_00_proc_gnusparse_10r  r=  rC  r   r   r@  rA  )r   r   rX   r   rO  rG  r6   Zregexr   r5   r!  r"  rE  r   r8   r8   r9   r>    sh    



$	





 
zTarInfo._proc_paxc                 C   sh   g }t d|D ]}|t|d qg }t d|D ]}|t|d q:tt|||_d S )Ns   \d+ GNU.sparse.offset=(\d+)\nr#   s   \d+ GNU.sparse.numbytes=(\d+)\n)rK  finditerr   rI   rM  listzipr   )r   rE  r   rX   ZoffsetsrO  r5  r8   r8   r9   rT    s    zTarInfo._proc_gnusparse_00c                 C   s@   dd |d  dD }tt|d d d |dd d |_d S )Nc                 S   s   g | ]}t |qS r8   )rI   ).0xr8   r8   r9   
<listcomp>&  s     z.TarInfo._proc_gnusparse_01.<locals>.<listcomp>rH  ,r$   r#   )r  rW  rX  r   )r   rE  r   r   r8   r8   r9   rS  #  s    zTarInfo._proc_gnusparse_01c                 C   s   d }g }|j t}|dd\}}t|}t||d k rtd|krT||j t7 }|dd\}}|t| q,|j  |_t	t
|d d d |dd d |_d S )Nr  r#   r$   )r   r^   r   r  rI   r2   r   r   r   rW  rX  r   )r   rE  r   r   Zfieldsr   rX   Znumberr8   r8   r9   rU  )  s    zTarInfo._proc_gnusparse_10c              	   C   s   |  D ]\}}|dkr&t| d| q|dkr@t| dt| q|dkrZt| dt| q|tkr|tkrzt| |}W n tk
r   d}Y nX |dkr|d}t| || q| | _d S )NzGNU.sparse.namer%   rI  r'   zGNU.sparse.realsizer   r   )	r   setattrrI   
PAX_FIELDSPAX_NUMBER_FIELDSrK   r1  r  r   )r   r   r6   r7   r!  r"  r8   r8   r9   rC  9  s"    

zTarInfo._apply_pax_infoc                 C   s4   z| |dW S  tk
r.   | || Y S X d S )NrE   )r=   UnicodeDecodeError)r   r"  r6   Zfallback_encodingZfallback_errorsr8   r8   r9   rQ  P  s    zTarInfo._decode_pax_fieldc                 C   s"   t |t\}}|r|d7 }|t S )Nr#   )r]   r   )r   r,  rc   rd   r8   r8   r9   rB  X  s    zTarInfo._blockc                 C   s
   | j tkS r0   )r   REGULAR_TYPESr   r8   r8   r9   r@  a  s    zTarInfo.isregc                 C   s   |   S r0   )r@  r   r8   r8   r9   isfilee  s    zTarInfo.isfilec                 C   s
   | j tkS r0   )r   r   r   r8   r8   r9   r0  i  s    zTarInfo.isdirc                 C   s
   | j tkS r0   )r   SYMTYPEr   r8   r8   r9   issymm  s    zTarInfo.issymc                 C   s
   | j tkS r0   )r   LNKTYPEr   r8   r8   r9   islnkq  s    zTarInfo.islnkc                 C   s
   | j tkS r0   )r   CHRTYPEr   r8   r8   r9   ischru  s    zTarInfo.ischrc                 C   s
   | j tkS r0   )r   BLKTYPEr   r8   r8   r9   isblky  s    zTarInfo.isblkc                 C   s
   | j tkS r0   )r   FIFOTYPEr   r8   r8   r9   isfifo}  s    zTarInfo.isfifoc                 C   s
   | j d k	S r0   )r   r   r8   r8   r9   issparse  s    zTarInfo.issparsec                 C   s   | j tttfkS r0   )r   rg  ri  rk  r   r8   r8   r9   isdev  s    zTarInfo.isdev)r   )1ro   rp   rq   dict	__slots__r   propertyr%   setterr&   r   r   r   r   r   r   r   r   classmethodr  r  staticmethodr  r  r  r  r8  r:  r9  r?  r;  r<  r>  rT  rS  rU  rC  rQ  rB  r@  rb  r0  rd  rf  rh  rj  rl  rm  rn  r8   r8   r8   r9   r     s   




1


	

2
>
h	c                   @   s  e Zd ZdZdZdZdZeZe	Z
dZeZeZd[ddZedddefd	d
Zed\ddZed]ddZed^ddZed_ddZdddddZdd Zdd Zdd Zdd  Zd`d!d"Zdadd$d%d&Zdbdd'd(d)Zdcd*d+Z dddd-d.d/Z!dedd-d1d2Z"d3d4 Z#dfd5d6Z$d7d8 Z%d9d: Z&d;d< Z'd=d> Z(d?d@ Z)dAdB Z*dCdD Z+dEdF Z,dGdH Z-dIdJ Z.dgdKdLZ/dMdN Z0dhdOdPZ1dQdR Z2dSdT Z3dUdV Z4dWdX Z5dYdZ Z6dS )ir   r   Fr#   Nrx   r   c              
   C   s  ddddd}||krt d|| _|| | _|sh| jdkrTtj|sTd| _d| _t|| j}d	| _n@|d krt|d
rt	|j
ttfr|j
}t|dr|j| _d| _|rtj|nd | _
|| _|d k	r|| _|d k	r|| _|d k	r|| _|d k	r|| _|d k	r|| _|	| _|
d k	r0| jtkr0|
| _ni | _|d k	rF|| _|d k	rV|| _|| _d	| _g | _d	| _| j | _i | _z| jdkrd | _ | ! | _ | jdkr2| j"| j z| j#| }| j$| W nX t%k
r   | j"| j Y q2Y n0 t&k
r, } zt't|W 5 d }~X Y nX q| jdkr|d| _| jr|| j(| j) }| j*| |  jt+|7  _W n&   | js| j,  d| _ Y nX d S )Nrbzr+bwbZxbrx   ary   rZ  !mode must be 'r', 'a', 'w' or 'x'rx  ry   Fr   r   Trx   rx  ry   rZ  )-rK   r   _moder{   r%   exists	bltn_openr   r   r  r   r  rP   abspathr   rT   r   dereferenceignore_zerosr6   r7   r   r   debug
errorlevelcopybufsizer   members_loadedr   r   inodesfirstmemberrE  r   r:  r   rt   r   r   r  r  r_   r2   r   )r   r   r   r   rT   r   r  r  r6   r7   r   r  r  r  ZmodeserX   r8   r8   r9   r     s    






"
zTarFile.__init__c              
      s  |s|st d|dkr fdd}t j|dD ]j}t  j| }|d k	rV| }	z||d|f|W   S  ttfk
r   |d k	r||	 Y q2Y q2X q2tdnd|kr|dd	\}
}|
pd}
|pd
}| jkrt  j| }ntd| |||
|f|S d|kr|dd	\}
}|
p.d}
|p8d
}|
dkrLt dt	||
|||}z ||
|f|}W n   |
   Y nX d|_|S |dkr j|||f|S t dd S )Nznothing to open)rx   r:*c                    s    j |  dkS )Ntaropen)	OPEN_METH)r   r  r8   r9   not_compressed<  s    z$TarFile.open.<locals>.not_compressedkeyrx   z%file could not be opened successfully:r#   r   r   |rw   zmode must be 'r' or 'w'Frz  zundiscernible mode)rK   sortedr  ri   r   r   r   r   r  r   r   r   r  )r  r   r   r   rb   kwargsr  r   funcZ	saved_posfilemodestreamr   r8   r  r9   r     sP    %







zTarFile.openc                 K   s    |dkrt d| |||f|S )Nrw  ry  )rK   )r  r   r   r   r  r8   r8   r9   r  m  s    zTarFile.taropenr   c                 K   s   |dkrt dzddlm} W n tk
r<   tdY nX z|||d ||}W n. tk
r   |d k	r||dkr|td Y nX z| j|||f|}W nB tk
r   |  |dkrtd Y n   |   Y nX d	|_	|S )
Nrx   ry   rZ  mode must be 'r', 'w' or 'x'r   )GzipFilezgzip module is not availablere   rx   r   F)
rK   Zgzipr  r   r   r   r   r  r   r   )r  r   r   r   compresslevelr  r  r   r8   r8   r9   gzopenu  s0    zTarFile.gzopenc              	   K   s   |dkrt dzddlm} W n tk
r<   tdY nX ||pF|||d}z| j|||f|}W nF ttfk
r   |  |dkrt	d Y n   |   Y nX d	|_
|S )
Nr  r  r   )BZ2Filer   )r  rx   znot a bzip2 fileF)rK   r   r  r   r   r  r   EOFErrorr   r   r   )r  r   r   r   r  r  r  r   r8   r8   r9   bz2open  s&    zTarFile.bz2openc           	   	   K   s   |dkrt dzddlm}m} W n tk
r@   tdY nX ||pJ|||d}z| j|||f|}W nF |tfk
r   |  |dkrt	d Y n   |   Y nX d	|_
|S )
Nr  r  r   )LZMAFiler   r   )presetrx   znot an lzma fileF)rK   r   r  r   r   r   r  r  r   r   r   )	r  r   r   r   r  r  r  r   r   r8   r8   r9   xzopen  s&    zTarFile.xzopenr  r  r  r  )r   r   r   r   c                 C   s   | j r
d S d| _ z`| jdkrn| jttd   |  jtd 7  _t	| jt
\}}|dkrn| jtt
|   W 5 | js| j  X d S )NTrz  r$   r   )r   r   r   r   r   r_   r3   r   r   r]   
RECORDSIZE)r   rc   rd   r8   r8   r9   r     s    
zTarFile.closec                 C   s"   |  |}|d krtd| |S )Nzfilename %r not found)
_getmemberKeyError)r   r   r   r8   r8   r9   	getmember  s    
zTarFile.getmemberc                 C   s   |    | js|   | jS r0   )_checkr  _loadr  r   r8   r8   r9   
getmembers  s    zTarFile.getmembersc                 C   s   dd |   D S )Nc                 S   s   g | ]
}|j qS r8   r   )rY  r   r8   r8   r9   r[    s     z$TarFile.getnames.<locals>.<listcomp>)r  r   r8   r8   r9   getnames  s    zTarFile.getnamesc                 C   s^  |  d |d k	r|j}|d kr$|}tj|\}}|tjd}|d}|  }| |_	|d kr| j
stt|}qt|}nt| }d}|j}t|r|j|jf}	| j
s|jdkr|	| jkr|| j|	 krt}
| j|	 }nt}
|	d r|| j|	< nht|rt}
nVt|r"t}
nDt|r>t}
t|}n(t|rPt}
nt |rbt!}
nd S ||_||_"|j#|_$|j%|_&|
tkr|j'|_(nd|_(|j)|_*|
|_+||_,t-rzt-.|j$d |_/W n t0k
r   Y nX t1rzt12|j&d |_3W n t0k
r   Y nX |
tt!fkrZt4tdrZt4tdrZt5|j6|_7t8|j6|_9|S )Nawxr   r   r#   r   majorminor):r  r   r{   r%   
splitdriver   seplstripr   r   r  lstatstatfstatfilenost_modeS_ISREGst_inost_devst_nlinkr  re  r   S_ISDIRr   S_ISFIFOrk  S_ISLNKrc  readlinkS_ISCHRrg  S_ISBLKri  r   st_uidr)   st_gidr*   st_sizer'   st_mtimer(   r   r   pwdgetpwuidr+   r  grpZgetgrgidr,   r   r  st_rdevr   r  r   )r   r   arcnamer   Zdrvr   Zstatresr   Zstmdinoder   r8   r8   r9   
gettarinfo	  s    	




zTarFile.gettarinfoT)r  c                C   s   |    |d kr| }|D ]}|rtt|j td|jp>|j|jpH|jf  |	 s`|
 rztdd|j|jf   ntd|j  tdt|jd d   t|j| rdnd  |r| rtd	|j  | rtd
|j  t  qd S )Nz%s/%sz%10sz%d,%dz%10dz%d-%02d-%02d %02d:%02d:%02dr   r   r   z-> zlink to )r  rm   r  r  r   r+   r)   r,   r*   rh  rj  r   r   r'   r   	localtimer(   r   r0  rd  r   rf  rl   )r   verboser  r   r8   r8   r9   rW  l  s0    
zTarFile.listfilterc             	   C   s6  |  d |d kr|}| jd k	rFtj|| jkrF| dd|  d S | d| | ||}|d krz| dd|  d S |d k	r||}|d kr| dd|  d S | rt|d}| 	|| W 5 Q R X n`|
 r(| 	| |r2tt|D ]*}| jtj||tj||||d qn
| 	| d S )	Nr  r$   ztarfile: Skipped %rr#   ztarfile: Unsupported type %rztarfile: Excluded %rru  r  )r  r   r{   r%   r~  _dbgr  r@  r}  addfiler0  r  listdiraddr   )r   r   r  	recursiver  r   fr8   r8   r9   r    s8    



 
zTarFile.addc                 C   s   |  d t|}|| j| j| j}| j| |  jt	|7  _| j
}|d k	rt|| j|j|d t|jt\}}|dkr| jtt|   |d7 }|  j|t 7  _| j| d S )Nr  )rb   r   r#   )r  r  r   rT   r6   r7   r   r_   r   r2   r  r\   r'   r]   r   r3   r  r   )r   r   r   rX   rb   rc   rd   r8   r8   r9   r    s    

zTarFile.addfile.numeric_ownerc                C   s   g }|d kr| }|D ]>}|  r:|| t|}d|_| j|||   |d q|jdd d |  |D ]}tj	||j
}z,| j|||d | || | || W qp tk
r } z"| jdkrЂ n| dd|  W 5 d }~X Y qpX qpd S )	N  	set_attrsr  c                 S   s   | j S r0   r   )rx  r8   r8   r9   <lambda>  r   z$TarFile.extractall.<locals>.<lambda>r  r  r#   tarfile: %s)r0  r   r  r   extractsortreverser{   r%   r   r   chownutimechmodr
   r  r  )r   r%   r  r  Zdirectoriesr   dirpathr  r8   r8   r9   
extractall  s.    


zTarFile.extractallr   c             
   C   s  |  d t|tr | |}n|}| r>tj||j|_	z"| j
|tj||j||d W n tk
r } zH| jdkr n6|jd kr| dd|j  n| dd|j|jf  W 5 d }~X Y nB tk
r } z"| jdkr n| dd|  W 5 d }~X Y nX d S )Nrx   r  r   r#   r  ztarfile: %s %r)r  r  r  r  rf  r{   r%   r   r   r   _extract_memberr   r   r  filenamer  strerrorr
   )r   memberr%   r  r  r   r  r8   r8   r9   r     s*    	




(
zTarFile.extractc                 C   s   |  d t|tr | |}n|}| s6|jtkrB| | |S | sR|	 rzt| j
trhtdq~| | |S nd S d S )Nrx   z'cannot extract (sym)link as file object)r  r  r  r  r@  r   rA  
fileobjectrf  rd  r   r   r	   extractfile_find_link_target)r   r  r   r8   r8   r9   r  &  s    


zTarFile.extractfilec                 C   sT  | d}|dtj}tj|}|r>tj|s>t| | sN|	 rh| 
dd|j|jf  n| 
d|j | r| || n| r| || nx| r| || nb| s| r| || nD| s|	 r| || n&|jtkr| || n| || |rP| ||| |	 sP| || | || d S )Nr   r#   z%s -> %s)r1  r   r{   r  r%   dirnamer|  makedirsrf  rd  r  r   r   r@  makefiler0  makedirrl  makefiforh  rj  makedevmakelinkr   rA  makeunknownr  r  r  )r   r   
targetpathr  r  Z	upperdirsr8   r8   r9   r  E  s4    


zTarFile._extract_memberc                 C   s*   zt |d W n tk
r$   Y nX d S )Nr  )r{   mkdirFileExistsErrorr   r   r  r8   r8   r9   r  v  s    zTarFile.makedirc              	   C   s   | j }||j | j}t|db}|jd k	rn|jD ]"\}}|| t|||t| q4||j |	  nt|||jt| W 5 Q R X d S )Nrv  )
r   r   r   r  r}  r   r\   r   r'   truncate)r   r   r  sourcerb   targetr   r'   r8   r8   r9   r    s    


zTarFile.makefilec                 C   s"   |  || | dd|j  d S )Nr#   z9tarfile: Unknown file type %r, extracted as regular file.)r  r  r   r  r8   r8   r9   r    s    zTarFile.makeunknownc                 C   s"   t tdrt| ntdd S )Nmkfifozfifo not supported by system)r   r{   r  r
   r  r8   r8   r9   r    s    
zTarFile.makefifoc                 C   s^   t tdrt tdstd|j}| r6|tjO }n
|tjO }t||t	|j
|j d S )Nmknodr  z'special devices not supported by system)r   r{   r
   r   rj  r  S_IFBLKS_IFCHRr  r  r   r   )r   r   r  r   r8   r8   r9   r    s    
zTarFile.makedevc                 C   s   zb|  r0tj|r t| t|j| n0tj|jrNt	|j| n| 
| || W nH tk
r   z| 
| || W n tk
r   tdY nX Y nX d S )Nz%unable to resolve link inside archive)rd  r{   r%   lexistsunlinksymlinkr   r|  r   linkr  r  symlink_exceptionr  r
   r  r8   r8   r9   r    s"    
zTarFile.makelinkc                 C   s   t tdrt dkr|j}|j}|sztr<t|jd }W n tk
rR   Y nX zt	rjt	
|jd }W n tk
r   Y nX z4| rt tdrt||| nt||| W n tk
r   tdY nX d S )Ngeteuidr   r$   lchownzcould not change owner)r   r{   r  r*   r)   r  Zgetgrnamr,   r  r  getpwnamr+   rd  r  r  r   r
   )r   r   r  r  gur8   r8   r9   r    s(    zTarFile.chownc                 C   s4   zt ||j W n tk
r.   tdY nX d S )Nzcould not change mode)r{   r  r   r   r
   r  r8   r8   r9   r    s    zTarFile.chmodc                 C   sH   t tdsd S zt||j|jf W n tk
rB   tdY nX d S )Nr  z"could not change modification time)r   r{   r  r(   r   r
   r  r8   r8   r9   r    s    
zTarFile.utimec              
   C   s  |  d | jd k	r$| j}d | _|S | j| j krZ| j| jd  | jdsZtdd }z| j	| }W q t
k
r } z6| jr| dd| j|f  |  jt7  _W Y q^W 5 d }~X Y q tk
r6 } zR| jr| dd| j|f  |  jt7  _W Y  q^n| jdkr&tt|W 5 d }~X Y n tk
r^   | jdkrZtdY nj tk
r } z| jdkrtt|W 5 d }~X Y n0 tk
r } ztt|W 5 d }~X Y nX qq^|d k	r| j| nd| _|S )	NZrar#   rZ   r$   z0x%X: %sr   z
empty fileT)r  r  r   r   r   r   r^   r   r   r:  rt   r  r  r   rL   r  rr   rs   ru   r  r   r  )r   mr   r  r8   r8   r9   rE    sJ    



zTarFile.nextc                 C   sn   |   }|d k	r"|d || }|r2tj|}t|D ].}|rRtj|j}n|j}||kr:|  S q:d S r0   )r  indexr{   r%   normpathreversedr   )r   r   r   	normalizer  r  member_namer8   r8   r9   r  /	  s    zTarFile._getmemberc                 C   s   |   }|d kr qq d| _d S r   )rE  r  )r   r   r8   r8   r9   r  F	  s    zTarFile._loadc                 C   s:   | j rtd| jj |d k	r6| j|kr6td| j d S )Nz%s is closedzbad operation for mode %r)r   r   r   ro   r   )r   r   r8   r8   r9   r  P	  s    zTarFile._checkc                 C   s`   |  r.dtd tj|j|jf}d }n
|j}|}| j||dd}|d kr\t	d| |S )Nr   T)r   r  zlinkname %r not found)
rd  r   r  r{   r%   r  r   r   r  r  )r   r   r   limitr  r8   r8   r9   r  Y	  s     zTarFile._find_link_targetc                 c   s   | j r| jE d H  d S d}| jd k	r:|  }|d7 }|V  |t| jk rT| j| }n"| j sr|  }|svd| _ d S nd S |d7 }|V  q:d S )Nr   r#   T)r  r  r  rE  r2   )r   r	  r   r8   r8   r9   __iter__l	  s$    
zTarFile.__iter__c                 C   s   || j krt|tjd d S )Nfile)r  rl   rj   stderr)r   levelmsgr8   r8   r9   r  	  s    
zTarFile._dbgc                 C   s   |    | S r0   )r  r   r8   r8   r9   	__enter__	  s    zTarFile.__enter__c                 C   s,   |d kr|    n| js"| j   d| _d S r   )r   r   r   r   )r   r   r"  	tracebackr8   r8   r9   __exit__	  s
    

zTarFile.__exit__)Nrx   NNNNNNr   NNNN)rx   N)rx   Nr   )rx   Nr   )rx   NN)NNN)T)NT)N)r  N)r   T)TF)NF)N)7ro   rp   rq   r  r  r  r  r   rT   r   r6   r7   r   r   r   r  r   rs  r  r   r  r  r  r  r  r   r  r  r  r  rW  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rE  r  r  r  r  r  r  r  r  r8   r8   r8   r9   r     s                   
oZ 


c 3
(&  
1
6


	c                 C   s2   zt | }|  W dS  tk
r,   Y dS X d S )NTF)r   r   r   )r   r   r8   r8   r9   r   	  s    c               	   C   s  dd l } d}| j|d}|jdddddd	 |jd
d}|jddddd |jdddddd |jdddddd |jddddd | }|jd k	r|j}t|rt|d }|  t	| t
jd W 5 Q R X |jrt	d | n|d!d"| n|jd k	r\|j}t|rFt|d#}|j|jd$ W 5 Q R X n|d!d"| nr|jd k	r,t|jd!kr|jd }tj}n,t|jd%kr|j\}}n|d!|  t|rt|d#}|j|d& W 5 Q R X |jr*|d'krd(|}	nd)||}	t	|	 n|d!d"| n|jd k	r|jd}
tj|
\}}d*d*d+d+d,d,d,d,d-}||krd.||  nd/}|j}t|
|}|D ]}|| qW 5 Q R X |jrt	d0|
 d S )1Nr   z3A simple command-line interface for tarfile module.)descriptionz-vz	--verbose
store_trueFzVerbose output)actiondefaulthelpT)Zrequiredz-lz--list	<tarfile>zShow listing of a tarfile)metavarr  z-ez	--extract+)r  z<output_dir>zExtract tarfile into target dir)nargsr  r  z-cz--create)z<name>z<file>zCreate tarfile from sourcesz-tz--testzTest if a tarfile is validrx   r  z{!r} is a tar archive.r#   z{!r} is not a tar archive.
r  )r  r$   )r%   r  z{!r} file is extracted.z+{!r} file is extracted into {!r} directory.r   r   r   )r   z.tgzz.xzz.txzz.bz2z.tbzz.tbz2z.tb2zw:ry   z{!r} file created.)argparseArgumentParseradd_argumentZadd_mutually_exclusive_group
parse_argsZtestr   r   r  rl   rj   r  r  rT   exitrW  r   r  r2   r{   curdirZformat_helpr  Zcreatepopr%   splitextr  )r!  r  parserrM  argsr`   r   Ztfr&  r  Ztar_name_ZextZcompressionsZtar_modeZ	tar_files	file_namer8   r8   r9   main	  s    







 
r-  __main__)]version
__author____credits__builtinsr   r}  rj   r{   r   r[   r  r   rW   r  rK  r  r   r  AttributeErrorNotImplementedErrorr  r   	NameError__all__r3   r   r  r  r  r  r  r  r   r-  re  rc  rg  ri  r   rk  ZCONTTYPEr
  r	  r.  r  r  r=  r   r   r   r   rA  ra  r2  r^  rR  r  rI   r_  r   r   getfilesystemencodingr:   r?   rO   rU   rY   r\   rm   	Exceptionr   r
   r   r   r	   r   rr   rs   rt   rL   ru   rv   r   objectr   r   BufferedReaderr   r   r   r   r-  ro   r8   r8   r8   r9   <module>    s  


              sh     D        !W
