o
    DXhb                    @   sJ  	 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	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ejZW n eyT   dZe jZY nw zd dlZW n eyf   dZY nw zd dlZW n eyx   dZY nw g dZG dd deZG dd deZe Z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(e
)e'Z*d Z+dZ,dZ-dZ.dZ/dZ0dZ1dZ2d	Z3dZ4dZ5dZ6e
)e5Z7d Z8dZ9dZ:dZ;dZ<dZ=dZ>dZ?d	Z@dZAdZBdZCd
ZDdZEdZFdZGd ZHd!ZId"ZJd#ZKd$ZLe
)eKZMd ZNdZOdZPdZQdZRdZSdZTdZUd	ZVdZWdZXdZYd%ZZd&Z[e
)eZZ\d'Z]d(Z^e
)e]Z_d Z`dZadZbdZcdZddZedZfdZgd	ZhdZid)Zje
kd*Zld+d, Zmd-d. Znd/d0 Zod1d2 Zpd3d4 ZqG d5d6 d6erZsdatd7d8 Zud9d: ZvG d;d< d<ZwG d=d> d>Zxi d d?dd@ddAddAddAddAddBddCd	dDddEddBd
dFddGd"dHdIdJdKdLdMdNZydOdP ZzdrdQdRZ{dSdT Z|G dUdV dVZ}G dWdX dXZ~G dYdZ dZejZG d[d\ d\ejZG d]d^ d^ZG d_d` d`eZdadb Zdcdd ZejZ	 dedf ZG dgdh dheZG didj djeZdrdkdlZG dmdn dnZdrdodpZedqkr#e  dS dS )s    N)
BadZipFile
BadZipfileerror
ZIP_STOREDZIP_DEFLATED	ZIP_BZIP2ZIP_LZMA
is_zipfileZipInfoZipFile	PyZipFileLargeZipFilePathc                   @      e Zd ZdS )r   N__name__
__module____qualname__ r   r   1/opt/python-3.10.19/usr/lib/python3.10/zipfile.pyr   ,       r   c                   @   r   )r   Nr   r   r   r   r   r   0   r   r   i              -   .   ?   s   <4s4H2LHs   PK                     	   z<4s4B4HL2L5H2Ls   PK
                     z<4s2B4HL2L2Hs   PKz<4sLQLs   PKz
<4sQ2H2L4Qs   PKiPK<HHc           
      C   s   t j}d}g }d }}|d t| krD|| ||d  \}}|d | }	||v r:||kr6|| ||  |	}d}|	}|d t| ks|sH| S |t| krW|| |d   d|S )NFr   r"   T    )_EXTRA_FIELD_STRUCTunpacklenappendjoin)
extraZxidsr1   ZmodifiedbufferstartiZxidZxlenjr   r   r   _strip_extra   s&   	
r:   c                 C   s*   z
t | rW dS W dS  ty   Y dS w )NTF)_EndRecDataOSErrorfpr   r   r   _check_zipfile   s   r?   c              	   C   sv   	 d}z+t | drt| d}W |S t| d}t|}W d    W |S 1 s'w   Y  W |S  ttfy:   Y |S w )NFreadr=   rb)hasattrr?   openr<   r   )filenameresultr>   r   r   r   r	      s    

r	   c              
   C   s  	 |t 8 }|dk r|S | | | t }t|t krtdtt|\}}}}|tkr/|S |dks7|dkr;t	d|t
8 }||krGt	d| | || }| t
}t|t
kr_td|ts~||kr~| | d}| t
}t|t
kr~td|tst	dtt|\
}}	}
}}}}}}}|| |ks|	d t
| krt	d||t< ||t< ||t< ||t< ||t< ||t< ||t< || |t< |S )	Nr   zUnknown I/O errorr   z3zipfiles that span multiple disks are not supportedz.Corrupt zip64 end of central directory locatorz/Zip64 end of central directory record not foundr   z-Corrupt zip64 end of central directory record)sizeEndCentDir64Locatorseekr@   r2   r<   structr1   structEndArchive64LocatorstringEndArchive64Locatorr   sizeEndCentDir64
startswithstringEndArchive64structEndArchive64_ECD_SIGNATURE_ECD_DISK_NUMBER_ECD_DISK_START_ECD_ENTRIES_THIS_DISK_ECD_ENTRIES_TOTAL	_ECD_SIZE_ECD_OFFSET_ECD_LOCATION)fpinoffsetendrecdatasigZdisknoZreloffZdisksZextraszZszcreate_versionZread_versionZdisk_numZdisk_dirZdircountZ	dircount2ZdirsizeZ	diroffsetr   r   r   _EndRecData64   sX   







r]   c           	      C   sb  	 |  dd |  }z	|  t d W n
 ty   Y d S w |  }t|tkrW|dd tkrW|dd  dkrWtt	|}t
|}|d ||t  t| |t |S t|d t d}|  |d |  }|t}|dkr|||t  }t|tkrd S t
tt	|}|t }||t |t |  }|| |||  t| || |S d S )Nr   r    r"   s     r/   i   )rG   tellsizeEndCentDirr<   r@   r2   stringEndArchiverH   r1   structEndArchivelistr3   r]   maxrfind_ECD_COMMENT_SIZE)	rW   ZfilesizerZ   rY   ZmaxCommentStartr7   ZrecDataZcommentSizecommentr   r   r   r;     s@   


r;   c                   @   sZ   e Zd Z	 dZdddZdd Zdd	d
Zdd Zdd Ze	dddddZ
dd ZdS )r
   )orig_filenamerD   	date_timecompress_type_compresslevelrg   r5   create_systemr\   extract_versionreserved	flag_bitsvolumeinternal_attrexternal_attrheader_offsetCRCcompress_size	file_size	_raw_time_end_offsetNoName  r   r   r   r   r   c                 C   s   || _ |td}|dkr|d| }tjdkr%tj|v r%|tjd}|| _|| _|d dk r5tdt	| _
d | _d| _d| _tjdkrJd| _nd| _t| _t| _d| _d| _d| _d| _d| _d| _d| _d | _d S )Nr   /r{   z+ZIP does not support timestamps before 1980r/   win32r!   )rh   findchrossepreplacerD   ri   
ValueErrorr   rj   rk   rg   r5   sysplatformrl   DEFAULT_VERSIONr\   rm   rn   ro   rp   rq   rr   ru   rv   rx   )selfrD   ri   Z	null_byter   r   r   __init__l  s6   

zZipInfo.__init__c                 C   s   d| j j| jf g}| jtkr|dt| j| j  | jd? }| jd@ }|r2|dt	
|  |r;|d|  |  }|rD| jrL|d| j  |rQ| jrd| jtks\| j| jkrd|d| j  |d	 d
|S )Nz<%s filename=%r compress_type=%sr+   r   z filemode=%rz external_attr=%#xz file_size=%rz compress_size=%r> )	__class__r   rD   rj   r   r3   compressor_namesgetrr   statfilemodeis_dirrv   ru   r4   )r   rE   hiloisdirr   r   r   __repr__  s,   







zZipInfo.__repr__Nc                 C   sz  	 | j }|d d d> |d d> B |d B }|d d> |d	 d> B |d d B }| jd
@ r4d } }}n	| j}| j}| j}| j}d}	|d u rN|tkpM|tk}|rbd}
|t|
dt	|
d	 || }|tksj|tkrv|spt
dd}d}t}	| jtkrtt|	}	n
| jtkrtt|	}	t|	| j| _t|	| j| _|  \}}ttt| j| j|| j|||||t|t|}|| | S )Nr   r{   r&   r   r#   r    r!   r(   r"   r   z<HHQQz'Filesize would require ZIP64 extensions    )ri   ro   rt   ru   rv   r5   ZIP64_LIMITrH   packcalcsizer   ZIP64_VERSIONrj   r   rd   BZIP2_VERSIONr   LZMA_VERSIONrm   r\   _encodeFilenameFlagsstructFileHeaderstringFileHeaderrn   r2   )r   zip64dtdosdatedostimert   ru   rv   r5   min_versionfmtrD   ro   headerr   r   r   
FileHeader  sL   $$





zZipInfo.FileHeaderc                 C   s>   z
| j d| jfW S  ty   | j d| jdB f Y S w )Nasciiutf-8   )rD   encodero   UnicodeEncodeErrorr   r   r   r   r     s
   zZipInfo._encodeFilenameFlagsc                 C   s6  | j }tj}t|dkr|d|d d \}}|d t|kr'td||f |dkr|d|d  }zD| jdv rLd}|d|d d \| _|dd  }| jd	krdd
}|d|d d \| _|dd  }| jd	krvd}|d|d d \| _W n tjy   td| dd w ||d d  }t|dksd S d S )Nr"   r.   z"Corrupt extra field %04x (size=%d)r   )l    r   z	File sizez<Qr   r   zCompress sizezHeader offsetzCorrupt zip64 extra field. z not found.)	r5   rH   r1   r2   r   rv   ru   rs   r   )r   r5   r1   tpZlnrZ   Zfieldr   r   r   _decodeExtra  s<   


zZipInfo._decodeExtraTstrict_timestampsc          	      C   s  	 t |tjrt|}t|}t|j}t|j	}|dd }|s.|d dk r.d}n
|s8|d dkr8d}|d u r>|}tj
tj
|d }|d tjtjfv rd|dd  }|d tjtjfv sT|rj|d7 }| ||}|jd	@ d
> |_|rd|_| jd
O  _|S |j|_|S )Nr   r$   r{   rz   ;  )r   r         ;   r   r   r|   r   r+   )
isinstancer   PathLikefspathr   S_ISDIRst_modetime	localtimest_mtimepathnormpath
splitdriver   altseprr   rv   st_size)	clsrD   arcnamer   str   mtimeri   zinfor   r   r   	from_file  s6   


zZipInfo.from_filec                 C   s   	 | j d dkS )Nr|   rD   r   r   r   r   r   %  s   zZipInfo.is_dir)ry   rz   N)r   r   r   	__slots__r   r   r   r   r   classmethodr   r   r   r   r   r   r
   Q  s    
,
.%r
   c                 C   s0   t dD ]}| d@ r| d? dA } q| dL } q| S )Nr   r   l    q[ )range)crcr9   r   r   r   _gen_crc/  s
   
r   c                    sl   dddt d u rttttda t fdd  fdd| D ]}| q&fd	d
}|S )NixV4igE#ixV4   c                    s   	 |d?  || A d@  A S )Nr      r   )Zchr   )crctabler   r   crc32I  s   z_ZipDecrypter.<locals>.crc32c                    s<    | d@  d@ d d d@  d? d S )Nr   r   ir      r   )c)r   key0key1key2r   r   update_keysM  s   
z"_ZipDecrypter.<locals>.update_keysc                    sP   	 t  }|j}| D ]} dB }|||dA  d? d@ N }| || q	t|S )Nr    r   r   r   )	bytearrayr3   bytes)rZ   rE   r3   r   k)r   r   r   r   	decrypterW  s   
z _ZipDecrypter.<locals>.decrypter)	_crctablerc   mapr   r   )pwdpr   r   )r   r   r   r   r   r   r   _ZipDecrypter?  s   
r   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
LZMACompressorc                 C   s
   d | _ d S r   )_compr   r   r   r   r   g  s   
zLZMACompressor.__init__c                 C   sF   t dt ji}t jt jt t j|gd| _tdddt	|| S )Nidfiltersz<BBHr&   r"   )
lzma_encode_filter_propertiesFILTER_LZMA1r   
FORMAT_RAW_decode_filter_propertiesr   rH   r   r2   )r   Zpropsr   r   r   _initj  s
   
zLZMACompressor._initc                 C   s*   | j d u r|  | j | S | j |S r   )r   r   compress)r   rZ   r   r   r   r   q  s   
zLZMACompressor.compressc                 C   s&   | j d u r|  | j   S | j  S r   )r   r   flushr   r   r   r   r   v  s   

zLZMACompressor.flushN)r   r   r   r   r   r   r   r   r   r   r   r   e  s
    r   c                   @   s   e Zd Zdd Zdd ZdS )LZMADecompressorc                 C   s   d | _ d| _d| _d S )Nr/   F)_decomp_unconsumedeofr   r   r   r   r   ~  s   
zLZMADecompressor.__init__c              	   C   s   | j d u rM|  j|7  _t| jdkrdS td| jdd \}t| jd| kr,dS tjtjttj	| jdd|  gd| _ | jd| d  }| `| j 
|}| j j| _|S )Nr"   r/   z<Hr    r   )r   r   r2   rH   r1   r   r   r   r   r   
decompressr   )r   rZ   ZpsizerE   r   r   r   r     s"   


zLZMADecompressor.decompressN)r   r   r   r   r   r   r   r   r   r   |  s    r   storeZshrinkreduceZimplodetokenizeZdeflateZ	deflate64bzip2r   Zterse   Zlz77a   Zwavpackb   Zppmdc                 C   s\   | t krd S | tkrtstdd S | tkrtstdd S | tkr*ts(tdd S td)Nz.Compression requires the (missing) zlib modulez-Compression requires the (missing) bz2 modulez.Compression requires the (missing) lzma modulez(That compression method is not supported)	r   r   zlibRuntimeErrorr   bz2r   r   NotImplementedError)compressionr   r   r   _check_compression  s*   r  c                 C   sf   | t kr|d urt|tjdS ttjtjdS | tkr*|d ur&t|S t S | tkr1t	 S d S )N)
r   r   compressobjDEFLATEDZ_DEFAULT_COMPRESSIONr   r   BZ2Compressorr   r   )rj   compresslevelr   r   r   _get_compressor  s   
r	  c                 C   sp   t |  | tkr
d S | tkrtdS | tkrt S | tkr"t	 S t
| }|r1td| |f td| f )Nr  zcompression type %d (%s)zcompression type %d)r  r   r   r   decompressobjr   r   BZ2Decompressorr   r   r   r   r   )rj   Zdescrr   r   r   _get_decompressor  s   

r  c                   @   s8   e Zd Zdd Zdd ZdddZdd	d
Zdd ZdS )_SharedFilec                 C   s*   || _ || _|| _|| _|| _|j| _d S r   )_file_pos_close_lock_writingseekable)r   fileposcloselockwritingr   r   r   r     s   z_SharedFile.__init__c                 C      | j S r   )r  r   r   r   r   r_        z_SharedFile.tellr   c                 C   sZ   | j   |  rtd| j|| | j | _| jW  d    S 1 s&w   Y  d S )Nz}Can't reposition in the ZIP file while there is an open writing handle on it. Close the writing handle before trying to read.)r  r  r   r  rG   r_   r  )r   rX   whencer   r   r   rG     s   $z_SharedFile.seekr   c                 C   sd   | j % |  rtd| j| j | j|}| j | _|W  d    S 1 s+w   Y  d S )NyCan't read from the ZIP file while there is an open writing handle on it. Close the writing handle before trying to read.)r  r  r   r  rG   r  r@   r_   r   nrZ   r   r   r   r@     s   $z_SharedFile.readc                 C   s(   | j d ur| j }d | _ | | d S d S r   )r  r  )r   fileobjr   r   r   r    s
   
z_SharedFile.closeNr   r   )r   r   r   r   r_   rG   r@   r  r   r   r   r   r    s    


r  c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )	_Tellablec                 C   s   || _ d| _d S Nr   )r>   rX   r   r>   r   r   r   r   
  s   
z_Tellable.__init__c                 C   s   | j |}|  j|7  _|S r   )r>   writerX   )r   rZ   r  r   r   r   r%    s   z_Tellable.writec                 C   r  r   )rX   r   r   r   r   r_     r  z_Tellable.tellc                 C      | j   d S r   )r>   r   r   r   r   r   r        z_Tellable.flushc                 C   r&  r   )r>   r  r   r   r   r   r    r'  z_Tellable.closeN)r   r   r   r   r%  r_   r   r  r   r   r   r   r"  	  s    r"  c                       s   e Zd Z	 dZdZdZ		d'ddZdd	 Zd
d Zd(ddZ	d)ddZ
dd Zd(ddZdd Zdd Zdd Zdd Z fddZd d! Zd*d#d$Zd%d& Z  ZS )+
ZipExtFilei   @i   i   NFc                 C   s&  || _ || _|| _|j| _|j| _|j| _t	| j| _
d| _d| _d| _d | _|| _|j| _t|dr=|j| _td| _nd | _d| _z| r\| | _|j| _|j| _| j| _d| _W n	 tyf   Y nw d | _|r|j d@ ry|j!d? d@ }n|jd? d@ }| " }||krt#d	|j$ d S d S )
NFr/   r   rt   Tr   r   r   zBad password for file %r)%_fileobj_pwd_close_fileobjrj   _compress_typeru   _compress_leftrv   _leftr  _decompressor_eof_readbuffer_offsetnewlinesmoderD   namerB   rt   _expected_crcr   _running_crc	_seekabler  r_   _orig_compress_start_orig_compress_size_orig_file_size_orig_start_crcAttributeError
_decrypterro   rw   _init_decrypterr   rh   )r   r  r4  zipinfor   Zclose_fileobjZ
check_bytehr   r   r   r   +  sN   


zZipExtFile.__init__c                 C   s4   t | j| _| jd}|  jd8  _| |d S )Nr   r(   )r   r*  r>  r)  r@   r-  )r   r   r   r   r   r?  ^  s   zZipExtFile._init_decrypterc                 C   sv   d| j j| j jf g}| js,|d| j| jf  | jtkr+|dt	
| j| j  n|d |d d|S )N<%s.%sz name=%r mode=%rr   	 [closed]r   r   )r   r   r   closedr3   r5  r4  r,  r   r   r   r4   r   rE   r   r   r   r   i  s   



zZipExtFile.__repr__r   c                 C   sN   	 |dk r | j d| jd }|dkr | j | j| }|| _|S tj| |S )Nr      
r   )r1  r~   r2  ioBufferedIOBasereadline)r   limitr8   liner   r   r   rI  w  s   zZipExtFile.readliner   c                 C   st   	 |t | j| j kr/| |}t || jkr&|| j| jd   | _d| _n	|  jt |8  _| j| j| jd  S )Nr   i   )r2   r1  r2  r@   )r   r  chunkr   r   r   peek  s   
zZipExtFile.peekc                 C   s   | j rtddS )NI/O operation on closed file.T)rD  r   r   r   r   r   readable  s   zZipExtFile.readablec                 C   s$  	 | j rtd|d u s|dk r.| j| jd  }d| _d| _| js,|| | j7 }| jr!|S || j }|t| jk rG| j| j| }|| _|S |t| j }| j| jd  }d| _d| _|dkr| js| |}|t|k r|| _|| _||d | 7 }	 |S ||7 }|t|8 }|dkr| jrc|S )Nzread from closed file.r   r/   )rD  r   r1  r2  r0  _read1MAX_Nr2   )r   r  bufendrZ   r   r   r   r@     s@   

	zZipExtFile.readc                 C   sD   | j d u rd S t|| j| _| jr| j| j kr td| j d S d S )NzBad CRC-32 for file %r)r6  r   r7  r0  r   r5  )r   newdatar   r   r   _update_crc  s   
zZipExtFile._update_crcc                 C   s  	 |d u s	|dk r.| j | jd  }d| _ d| _| js,| | j}|r)||7 }	 |S | jr|S || j }|t| j k rG| j | j| }|| _|S |t| j  }| j | jd  }d| _ d| _|dkr| js| |}|t|k r|| _ || _||d | 7 }	 |S |r||7 }	 |S | jrc|S Nr   r/   )r1  r2  r0  rP  rQ  r2   )r   r  rR  rZ   rS  r   r   r   read1  sJ   


zZipExtFile.read1c                 C   s   | j s|dkr	dS | jtkr$| jj}|t|kr#|| |t| 7 }n| |}| jtkr5| jdk| _ n<| jtkrat	|| j
}| j||}| jjpT| jdkoT| jj | _ | j r`|| j 7 }n| j|}| jjpo| jdk| _ |d | j }|  jt|8  _| jdkrd| _ | | |S )Nr   r/   T)r0  r,  r   r/  unconsumed_tailr2   _read2r   r-  rd   MIN_READ_SIZEr   r   r   r.  rU  r  r   r   r   rP    s8   






zZipExtFile._read1c                 C   sd   | j dkrdS t|| j}t|| j }| j|}|  j t|8  _ |s&t| jd ur0| |}|S rV  )	r-  rd   rZ  minr)  r@   r2   EOFErrorr>  r  r   r   r   rY    s   


zZipExtFile._read2c                    s>   z| j r| j  W t   d S W t   d S t   w r   )r+  r)  r  superr   r   r   r   r    s   zZipExtFile.closec                 C   s   | j rtd| jS NrN  )rD  r   r8  r   r   r   r   r  &  s   zZipExtFile.seekabler   c                 C   sJ  | j rtd| jstd|  }|dkr|}n|dkr#|| }n|dkr-| j| }ntd|| jkr9| j}|dk r?d}|| }|| j }|dkrY|t| j	k rY|| _d}n1|dk r| j
| j | j| _| j| _| j| _d| _	d| _t| j| _d| _|}| jd ur|   |dkrt| j|}| | ||8 }|dks|  S )	Nzseek on closed file.!underlying stream is not seekabler   r   r    zCwhence must be os.SEEK_SET (0), os.SEEK_CUR (1), or os.SEEK_END (2)r/   F)rD  r   r8  rG  UnsupportedOperationr_   r;  r2  r2   r1  r)  rG   r9  r<  r7  r:  r-  r.  r  r,  r/  r0  r>  r?  r[  MAX_SEEK_READr@   )r   rX   r  Zcurr_posZnew_posZread_offsetZbuff_offsetZread_lenr   r   r   rG   +  sN   





zZipExtFile.seekc                 C   s>   | j rtd| jstd| j| j t| j | j	 }|S )Nztell on closed file.r`  )
rD  r   r8  rG  ra  r;  r.  r2   r1  r2  )r   Zfileposr   r   r   r_   ]  s   
zZipExtFile.tell)NFr!  r   r   )r   r   r   rQ  rZ  rb  r   r?  r   rI  rM  rO  r@   rU  rW  rP  rY  r  r  rG   r_   __classcell__r   r   r^  r   r(    s,    
3


#
%$
2r(  c                       s@   e Zd Zdd Zedd Zdd Zdd Z fd	d
Z  Z	S )_ZipWriteFilec                 C   s8   || _ || _|| _t|j|j| _d| _d| _d| _	d S r#  )
_zinfo_zip64_zipfiler	  rj   rk   _compressor
_file_size_compress_size_crc)r   zfr   r   r   r   r   r   g  s   
z_ZipWriteFile.__init__c                 C   s   | j jS r   )rh  r>   r   r   r   r   r)  q  s   z_ZipWriteFile._fileobjc                 C   s   dS )NTr   r   r   r   r   writableu     z_ZipWriteFile.writablec                 C   s   | j rtdt|ttfrt|}nt|}|j}|  j|7  _t	|| j
| _
| jr:| j|}|  jt|7  _| j| |S r_  )rD  r   r   r   r   r2   
memoryviewnbytesrj  r   rl  ri  r   rk  r)  r%  )r   rZ   rq  r   r   r   r%  x  s   
z_ZipWriteFile.writec              	      sf  | j rd S zt   | jr(| j }|  jt|7  _| j| | j| j	_
n| j| j	_
| j| j	_| j| j	_| j	jd@ r_| jrBdnd}| jt|t| j	j| j	j
| j	j | j | j_n7| jst| jtkrktd| jtkrttd| j | j_| j| j	j | j| j	| j | j| jj | jj| j	 | j	| jj| j	j< W d| j_ d S d| j_ w )Nr   z<LLQQz<LLLLz+File size unexpectedly exceeded ZIP64 limitz1Compressed size unexpectedly exceeded ZIP64 limitF)!rD  r]  r  ri  r   rk  r2   r)  r%  rf  ru   rj  rl  rt   rv   ro   rg  rH   r   _DD_SIGNATUREr_   rh  	start_dirr   r   rG   rs   r   filelistr3   
NameToInforD   r  )r   rR  r   r^  r   r   r    sD   






z_ZipWriteFile.close)
r   r   r   r   propertyr)  rn  r%  r  rd  r   r   r^  r   re  f  s    

re  c                   @   s(  e Zd Z	 dZdZdeddfddddZdd Zd	d
 Zdd Z	dd Z
dd Zdd Zd<ddZdd Zdd Zdd Zedd Zejdd Zd<ddZd=d d!d"d#Zd>d$d%Zd?d&d'Zd@d(d)Zed*d+ Zd,d- Zd.d/ Z		d@d0d1Z	d?d2d3Zd4d5 Zd6d7 Z d8d9 Z!d:d; Z"dS )Ar   NrTr   c          
   	   C   sB  	 |dvr	t dt| || _d| _d| _i | _g | _|| _|| _|| _	d | _
d| _|| _t|tjr9t|}t|trqd| _|| _dddd	dd
dd}|| }	 z	t||| _W n tyn   ||v rm|| }Y qR w 	 nd| _|| _t|dd | _d| _t | _d| _d| _z|dkr|   W d S |dv rd| _z| j  | _!W n t"tfy   t#| j| _d| _!d| _Y W d S w z| j$| j! W W d S  t"tfy   d| _Y W d S w |dkrz|   | j$| j! W W d S  t%y   | j$dd d| _| j  | _!Y W d S w t d   | j}	d | _| &|	  )N)rw  wxaz+ZipFile requires mode 'r', 'w', 'x', or 'a'Fr   r/   rA   w+bx+br+bwbxb)rw  rx  ry  rz  r}  r{  r|  Tr   r5  rw  )rx  ry  rz  r    z"Mode must be 'r', 'w', 'x', or 'a')'r   r  _allowZip64
_didModifydebugru  rt  r  r  r4  r   _comment_strict_timestampsr   r   r   r   str_filePassedrD   rG  rC   r>   r<   getattr_fileRefCnt	threadingRLockr  r8  r  _RealGetContentsr_   rs  r=  r"  rG   r   _fpclose)
r   r  r4  r  
allowZip64r  r   ZmodeDictr   r>   r   r   r   r     s   



	
zZipFile.__init__c                 C   s   | S r   r   r   r   r   r   	__enter__/  ro  zZipFile.__enter__c                 C   s   |    d S r   r  )r   typevalue	tracebackr   r   r   __exit__2     zZipFile.__exit__c                 C   s   d| j j| j jf g}| jd ur2| jr|d| j  n| jd ur)|d| j  |d| j  n|d |d d|S )NrB  z file=%rz filename=%rz mode=%rrC  r   r   )	r   r   r   r>   r  r3   rD   r4  r4   rE  r   r   r   r   5  s   




zZipFile.__repr__c                 C   s  	 | j }zt|}W n ty   tdw |std| jdkr%t| |t }|t }|t | _	|t
 | | }| jdkrJ|| }td||| || | _| jdk rXtd|| jd ||}t|}d}||k rT|t}	t|	tkrtdtt|	}	|	t tkrtd| jdkrt|	 ||	t }
|	d	 }|d
@ r|
d}
n|
d}
t|
}||	t |_||	t |_|	t |_|	dd \|_ |_!|_"|_#|_$|_%}}|_&|_'|_(|j"t)krt*d|j"d  |	dd \|_+|_,|_-||_.|d? d |d	? d@ |d@ |d? |d	? d@ |d@ d f|_/|0  |j| |_| j12| || j3|j4< |t |	t  |	t  |	t  }| jdkrPtd| ||k sp| j}t5| j1dd ddD ]	}||_6|j}qad S )NzFile is not a zip filer   r    zgiven, inferred, offsetr   z Bad offset for central directoryzTruncated central directoryz&Bad magic number for central directoryr#   r   r   cp437r   zzip file version %.1fr'   r*   r-   r&   r{   r   r(   r   totalc                 S   r  r   )rs   )r   r   r   r   <lambda>      z*ZipFile._RealGetContents.<locals>.<lambda>T)keyreverse)7r>   r;   r<   r   r  printrT   rU   _ECD_COMMENTr  rV   rs  rG   r@   rG  BytesIOsizeCentralDirr2   rH   r1   structCentralDir_CD_SIGNATUREstringCentralDir_CD_FILENAME_LENGTHdecoder
   _CD_EXTRA_FIELD_LENGTHr5   _CD_COMMENT_LENGTHrg   _CD_LOCAL_HEADER_OFFSETrs   r\   rl   rm   rn   ro   rj   rt   ru   rv   MAX_EXTRACT_VERSIONr   rp   rq   rr   rw   ri   r   rt  r3   ru  rD   sortedrx   )r   r>   rY   Zsize_cdZ	offset_cdconcatZinferredrZ   r  centdirrD   flagsry  td
end_offsetr   r   r   r   r  C  s   














/

zZipFile._RealGetContentsc                 C   s   	 dd | j D S )Nc                 S   s   g | ]}|j qS r   r   ).0rZ   r   r   r   
<listcomp>  s    z$ZipFile.namelist.<locals>.<listcomp>rt  r   r   r   r   namelist  s   zZipFile.namelistc                 C      	 | j S r   r  r   r   r   r   infolist  s   zZipFile.infolistc                 C   sN   	 t dd |d | jD ]}d|jd d  }t d|j||jf |d qd S )Nz%-46s %19s %12s)z	File NamezModified    ZSize)r  z%d-%02d-%02d %02d:%02d:%02dr$   z%-46s %s %12d)r  rt  ri   rD   rv   )r   r  r   dater   r   r   printdir  s   
zZipFile.printdirc              	   C   sz   	 d}| j D ]4}z$| |jd}||r	 ||sW d    n1 s&w   Y  W q ty:   |j Y   S w d S )Ni   rw  )rt  rC   rD   r@   r   )r   Z
chunk_sizer   fr   r   r   testzip  s   


zZipFile.testzipc                 C   s&   	 | j |}|d u rtd| |S )Nz(There is no item named %r in the archive)ru  r   KeyError)r   r5  infor   r   r   getinfo  s   zZipFile.getinfoc                 C   s:   	 |rt |tstdt|j |r|| _d S d | _d S )Npwd: expected bytes, got %s)r   r   	TypeErrorr  r   r   )r   r   r   r   r   setpassword  s   

zZipFile.setpasswordc                 C   r  r   )r  r   r   r   r   rg     s   zZipFile.commentc                 C   s^   t |tstdt|j t|tkr'dd l}|jdt dd |d t }|| _	d| _
d S )Nzcomment: expected bytes, got %sr   z3Archive comment is too long; truncating to %d bytesr    
stacklevelT)r   r   r  r  r   r2   ZIP_MAX_COMMENTwarningswarnr  r  )r   rg   r  r   r   r   rg     s   

c                 C   s<   	 |  |d|}| W  d    S 1 sw   Y  d S Nrw  rC   r@   )r   r5  r   r>   r   r   r   r@     s   $zZipFile.readFforce_zip64c                   s,  	 |dvr	t d|rt|tstdt|j |r#|dkr#t d js*t dt|tr2|}n|dkrCt|} j|_	 j
|_n |}|dkrS j||dS  jrZt d  jd	7  _t j|j j j fd
d}z|t}t|tkrtdtt|}|t tkrtd||t }|t r||t  |jd@ rt d|jd@ rt d|t! d@ r|"d}	n|"d}	|	|j#krtd|j#|f |j$d ur|% |j& |j$krtd|j#d|jd	@ }
|
r|s j'}|st(d| nd }t)||||dW S    |*   )N>   rx  rw  zopen() requires mode "r" or "w"r  rx  z'pwd is only supported for reading filesz2Attempt to use ZIP archive that was already closedr  r  r   c                      s    j S r   )r  r   r   r   r   r    r  zZipFile.open.<locals>.<lambda>zTruncated file headerz Bad magic number for file header    z$compressed patched data (flag bit 5)@   zstrong encryption (flag bit 6)r   r   r  z/File name in directory %r and header %r differ.zOverlapped entries: z (possible zip bomb)z6File %r is encrypted, password required for extractionT)+r   r   r   r  r  r   r>   r
   r  rj   r  rk   r  _open_to_writer  r  r  rs   r  r  r@   sizeFileHeaderr2   r   rH   r1   r   _FH_SIGNATUREr   _FH_FILENAME_LENGTH_FH_EXTRA_FIELD_LENGTHro   r   _FH_GENERAL_PURPOSE_FLAG_BITSr  rh   rx   r_   ru   r   r   r(  r  )r   r5  r4  r   r  r   Zzef_fileZfheaderfnameZ	fname_strZis_encryptedr   r   r   rC     s   










zZipFile.openc                 C   s   |r	| j s	td| jrtdd|_d|_d|_|jtkr%| jdO  _| js/| jdO  _|j	s5d|_	| j o@|p@|j
d tk}| jrK| j| j | j |_| | d| _| j|| d| _t| ||S )	NzHforce_zip64 is True, but allowZip64 was False when opening the ZIP file.zzCan't write to the ZIP file while there is another write handle open on it. Close the first handle before opening another.r   r    r     g?T)r  r   r  ru   rt   ro   rj   r   r8  rr   rv   r   r>   rG   rs  r_   rs   _writecheckr  r%  r   re  )r   r   r  r   r   r   r   r  D  s4   


zZipFile._open_to_writec                 C   s,   	 |d u r
t  }nt |}| |||S r   )r   getcwdr   _extract_member)r   memberr   r   r   r   r   extractm  s
   

zZipFile.extractc                 C   sJ   	 |d u r	|   }|d u rt }nt|}|D ]	}| ||| qd S r   )r  r   r  r   r  )r   r   membersr   r@  r   r   r   
extractallz  s   

zZipFile.extractallc                 C   s`   	 | j }|sd}t|dt| }|| _ ||}dd ||D }|dd |D }|S )Nz:<>|"?*_c                 s   s    | ]}| d V  qdS ).N)rstripr  ry  r   r   r   	<genexpr>      z1ZipFile._sanitize_windows_name.<locals>.<genexpr>c                 s   s    | ]}|r|V  qd S r   r   r  r   r   r   r    s    )!_windows_illegal_name_trans_tabler  	maketransr2   	translatesplitr4   )r   r   pathseptableZillegalr   r   r   _sanitize_windows_name  s   
zZipFile._sanitize_windows_namec              	      s  	 t |ts| |}|jdtjj}tjjr"|tjjtjj}tj	|d }dtjj
tjjf tjj fdd|tjjD }tjjdkrT| |tjj}tj||}tj|}tj|}|rttj|stt| | rtj|st| |S | j||d,}t|d}t|| W d    n1 sw   Y  W d    |S W d    |S 1 sw   Y  |S )	Nr|   r   r   c                 3   s    | ]	}| vr|V  qd S r   r   r  Zinvalid_path_partsr   r   r    s    z*ZipFile._extract_member.<locals>.<genexpr>\r   r~  )r   r
   r  rD   r   r   r   r   r   r   curdirpardirr4   r  r  r   dirnameexistsmakedirsr   r   mkdirrC   shutilcopyfileobj)r   r  
targetpathr   r   Z	upperdirssourcetargetr   r  r   r    s>   

&

(zZipFile._extract_memberc                 C   s   	 |j | jv rdd l}|jd|j  dd | jdvrtd| js%tdt|j | j	sPd }t
| jtkr9d}n|jtkrAd	}n|jtkrHd
}|rRt|d d S d S )Nr   zDuplicate name: %rr!   r  rx  ry  rz  z&write() requires mode 'w', 'x', or 'a'z4Attempt to write ZIP archive that was already closedFiles countZFilesizezZipfile size would require ZIP64 extensions)rD   ru  r  r  r4  r   r>   r  rj   r  r2   rt  ZIP_FILECOUNT_LIMITrv   r   rs   r   )r   r   r  requires_zip64r   r   r   r    s2   



zZipFile._writecheckc              	   C   s  	 | j std| jrtdtj||| jd}| r#d|_d|_n|d ur+||_	n| j
|_	|d ur7||_n| j|_| r| jH | jrM| j | j | j  |_|j	tkr_| jdO  _| | d| _| j| || j|j< | j |d | j  | _W d    d S 1 sw   Y  d S t|d.}| |d	}t||d
 W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )N7Attempt to write to ZIP archive that was already closedz>Can't write to ZIP archive while an open writing handle existsr   r   r    TFrA   rx  i    ) r>   r   r  r
   r   r  r   ru   rt   rj   r  rk   r  r  r8  rG   rs  r_   rs   r   ro   r  r  rt  r3   ru  rD   r%  r   rC   r  r  )r   rD   r   rj   r  r   srcdestr   r   r   r%    sL   

"PzZipFile.writec              	   C   s4  	 t |tr|d}t |ts=t|tt d d d}| j|_| j|_	|j
d dkr9d|_| jdO  _nd|_n|}| jsFtd	| jrMtd
|d urT||_|d ur[||_	t||_| j- | j|dd}|| W d    n1 s{w   Y  W d    d S W d    d S 1 sw   Y  d S )Nr   r$   )rD   ri   r   r|   i  Ar+   r  r  z?Can't write to ZIP archive while an open writing handle exists.rx  )r4  )r   r  r   r
   r   r   r  rj   r  rk   rD   rr   r>   r   r  r2   rv   r  rC   r%  )r   Zzinfo_or_arcnamerZ   rj   r  r   r  r   r   r   writestr  sD   



"zZipFile.writestrc                 C   s   	 |    d S r   r  r   r   r   r   __del__5  s   zZipFile.__del__c              	   C   s   	 | j d u rd S | jrtdza| jdv rG| jrU| j | jr&| j | j | 	  W d    n21 s4w   Y  W | j }d | _ | 
| d S W | j }d | _ | 
| d S W | j }d | _ | 
| d S W | j }d | _ | 
| d S | j }d | _ | 
| w )NzvCan't close the ZIP file while there is an open writing handle on it. Close the writing handle before closing the zip.r  )r>   r  r   r4  r  r  r8  rG   rs  _write_end_recordr  r$  r   r   r   r  9  s<   

zZipFile.closec                 C   s  | j D ]}|j}|d d d> |d d> B |d B }|d d> |d	 d> B |d d B }g }|jtks8|jtkrI||j ||j d
}d
}n|j}|j}|jtkr]||j d
}n|j}|j}	d}
|rt|	d}	t	j
ddt|  ddt| g|R  |	 }	t}
|jtkrtt|
}
n
|jtkrtt|
}
t|
|j}t|
|j}| \}}t	
tt||j||j||j|||j||t|t|	t|jd|j|j|}| j| | j| | j|	 | j|j q| j  }t| j }|| j! }| j!}d }|t"krd}n|tkrd}n|tkrd}|rX| j#s#t$|d t	
t%t&t'd dddd||||}| j| t	
t(t)d|d}| j| t*|d}t*|d
}t*|d
}t	
t+t,dd||||t| j-	}| j| | j| j- | j.dkr| j/  | j0  d S )Nr   r{   r&   r   r#   r    r!   r(   r"   r   rc  r.   Qr   r  zCentral directory offsetzCentral directory sizer  r   r   r   rz  )1rt  ri   rv   r   ru   r3   rs   r5   r:   rH   r   r2   r   rj   r   rd   r   r   r   rm   r\   r   r  r  rl   rn   rt   rg   rq   rr   r>   r%  r_   rs  r  r  r   rN   rM   rK   rI   rJ   r[  rb   ra   r  r4  truncater   )r   r   r   r   r   r5   rv   ru   rs   Z
extra_datar   rm   r\   rD   ro   r  Zpos2ZcentDirCountZcentDirSizeZcentDirOffsetr  Zzip64endrecZzip64locrecrY   r   r   r   r  O  s   
$$



















zZipFile._write_end_recordc                 C   s.   |  j d8  _ | j s| js|  d S d S d S Nr   )r  r  r  r$  r   r   r   r    s   zZipFile._fpcloser   )rw  N)F)NN)NNN)#r   r   r   r>   r  r   r   r  r  r   r  r  r  r  r  r  r  rv  rg   setterr@   rC   r  r  r  r   r  r  r  r%  r  r  r  r  r  r   r   r   r   r     sR    ZS
			



f
)

*
2
)^r   c                   @   s2   e Zd Z	 deddfddZddd	Zd
d ZdS )r   rw  Tr   c                 C   s   t j| ||||d || _d S )N)r4  r  r  )r   r   	_optimize)r   r  r4  r  r  optimizer   r   r   r     s   
zPyZipFile.__init__r   Nc                 C   s  	 t |}|r#||s#| jr!t j|rdnd}td||f  d S t j|\}}t j|r.t j|d}t j|r|rHd||f }n|}| jrTtd|d| | 	|dd	 |\}}	| jrhtd
|	 | 
||	 tt |}
|
d |
D ]Y}t j||}t j|\}}t j|rt jt j|dr| j|||d q||dkr|r||s| jrtd|  q|| 	|dd	 |\}}	| jrtd
|	 | 
||	 q|d S | jrtd| tt |D ]D}t j||}t j|\}}|dkr+|r||s| jrtd|  q| 	|dd	 |\}}	| jr%td
|	 | 
||	 qd S |d	d  dkr;td| 	|dd	 |\}}	| jrPtd|	 | 
||	 d S )Nr   r  z%s %r skipped by filterfuncz__init__.py%s/%szAdding package inasr   ZAdding)
filterfunc.pyzfile %r skipped by filterfunczAdding files from directoryz.Files added with writepy() must end with ".py"zAdding file)r   r   r  r   r   r  r  r4   isfile_get_codenamer%  r  listdirremovesplitextwritepyr   )r   pathnamebasenamer  Zlabeldirr5  Zinitnamer  r   dirlistrD   r   rootextr   r   r   r    s   







zPyZipFile.writepyc                    s   	 d fdd	}|d }|d }t jj|dd}t jj|dd}t jj|d	d} jdkrtj|rDt|jt|jkrD| }	}
ntj|r[t|jt|jkr[|}
|}	ntj|rrt|jt|jkrr|}
|}	nztj|rt|jt|jkr|}
|}	nc||rt	j
jd
kr|}
nt	j
jdkr|}
n|}
|}	nH| }
}	nC jd
kr|}
|}	n|}	 jdkr|}
n jd	kr|}
n
d j}t|tj|
rt|
jt|jks|| jds| }
}	tj|	d }|rd||f }|
|fS )Nr   c              
      sb   dd l } jrtd|  z|j| d|d W dS  |jy0 } zt|j W Y d }~dS d }~ww )Nr   Z	CompilingT)doraiser  F)
py_compiler  r  compilePyCompileErrormsg)r  r  r  errr   r   r   _compile  s   

z)PyZipFile._get_codename.<locals>._compiler	  z.pycr   )optimizationr   r    r   z"invalid value for 'optimize': {!r})r  r  r!  )	importlibutilcache_from_sourcer  r   r   r
  r   r   r   r  r  formatr   r  )r   r  r  r  Zfile_pyZfile_pycZpycache_opt0Zpycache_opt1Zpycache_opt2r   r  r  Zarchivenamer   r   r   r    sb   





zPyZipFile._get_codename)r   N)r   r   r   r   r   r  r  r   r   r   r   r     s    

Rr   c                 C   s   	 t t| dd S r  )	itertoolsislice	_ancestry)r   r   r   r   _parentsb  s   r%  c                 c   sD    	 |  tj} |  tjr | V  t| \} }|  tjsd S d S r   )r  	posixpathr   r  )r   tailr   r   r   r$  u  s   r$  c                 C   s   	 t t|j| S r   )r"  filterfalseset__contains__)ZminuendZ
subtrahendr   r   r   _difference  s   r+  c                       sR   e Zd Z	 edd Z fddZdd Zdd Z fd	d
Ze	dd Z
  ZS )CompleteDirsc                 C   s.   t jtt| }dd |D }tt|| S )Nc                 s   s    | ]}|t j V  qd S r   )r&  r   )r  r   r   r   r   r    r  z-CompleteDirs._implied_dirs.<locals>.<genexpr>)r"  chainfrom_iterabler   r%  _deduper+  )namesparentsZas_dirsr   r   r   _implied_dirs  s   zCompleteDirs._implied_dirsc                    s    t t|  }|t| | S r   )r]  r,  r  rc   r2  )r   r0  r^  r   r   r    s   zCompleteDirs.namelistc                 C   s   t |  S r   )r)  r  r   r   r   r   	_name_set  r  zCompleteDirs._name_setc                 C   s.   	 |   }|d }||vo||v }|r|S |S Nr|   )r3  )r   r5  r0  r  Z	dir_matchr   r   r   resolve_dir  s
   zCompleteDirs.resolve_dirc                    sF   	 zt  |W S  ty"   |dr||  vr t|d Y S w )Nr|   r   )r]  r  r  endswithr3  r
   )r   r5  r^  r   r   r    s   zCompleteDirs.getinfoc                 C   s:   	 t |tr|S t |ts| |S d|jvrt} | |_|S r  )r   r,  r   r4  r   )r   r  r   r   r   make  s   


zCompleteDirs.make)r   r   r   staticmethodr2  r  r3  r5  r  r   r7  rd  r   r   r^  r   r,    s    

r,  c                       s*   e Zd Z	  fddZ fddZ  ZS )
FastLookupc                    F   t t | jW  d    S 1 sw   Y  tt|  | _| jS r   )
contextlibsuppressr=  Z_FastLookup__namesr]  r9  r  r   r^  r   r   r    
    zFastLookup.namelistc                    r:  r   )r;  r<  r=  Z_FastLookup__lookupr]  r9  r3  r   r^  r   r   r3    r=  zFastLookup._name_set)r   r   r   r  r3  rd  r   r   r^  r   r9    s    r9  c                 O   s   t | d||fS )Nr!   )rG  text_encoding)encodingargskwargsr   r   r   _extract_text_encoding  s   rB  c                   @   s   e Zd Z	 dZd&ddZd'dddd	Zed
d Zedd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# ZeZed$d% ZdS )(r   z>{self.__class__.__name__}({self.root.filename!r}, {self.at!r})r   c                 C   s   	 t || _|| _d S r   )r9  r7  r  at)r   r  rC  r   r   r   r   @	  s   	
zPath.__init__rw  Nr  c                O   s   	 |   r	t| |d }|  s|dkrt| | jj| j||d}d|v r1|s+|r/td|S t|i |\}}}t	j
||g|R i |S )Nr   rw  r  bz*encoding args invalid for binary operation)r   IsADirectoryErrorr  FileNotFoundErrorr  rC   rC  r   rB  rG  TextIOWrapper)r   r4  r   r@  rA  Zzip_modestreamr?  r   r   r   rC   M	  s   z	Path.openc                 C   s   t | jjp
| jjS r   )pathlibPurePosixPathrC  r5  rD   r   r   r   r   r5  a	     z	Path.namec                 C   s   t | jj| jS r   )rI  r   r  rD   joinpathrC  r   r   r   r   rD   e	  rK  zPath.filenamec                 O   sZ   t |i |\}}}| jd|g|R i |}| W  d    S 1 s&w   Y  d S r  )rB  rC   r@   )r   r@  rA  r?  strmr   r   r   	read_texti	  s   $zPath.read_textc                 C   s6   |  d}| W  d    S 1 sw   Y  d S )NrA   r  )r   rM  r   r   r   
read_bytesn	  s   $zPath.read_bytesc                 C   s   t |jd| jdkS r4  )r&  r  rC  r  )r   r   r   r   r   	_is_childr	  s   zPath._is_childc                 C   s   |  | j|S r   )r   r  )r   rC  r   r   r   _nextu	  r'  z
Path._nextc                 C   s   | j  p	| j dS r4  )rC  r6  r   r   r   r   r   x	  s   zPath.is_dirc                 C   s   |   o|   S r   )r  r   r   r   r   r   is_file{	     zPath.is_filec                 C   s   | j | j v S r   )rC  r  r3  r   r   r   r   r  ~	  s   zPath.existsc                 C   s.   |   stdt| j| j }t| j|S )NzCan't listdir a file)r   r   r   rQ  r  r  filterrP  )r   Zsubsr   r   r   iterdir	  s   zPath.iterdirc                 C   s   t | jj| jS r   )r&  r4   r  rD   rC  r   r   r   r   __str__	  rS  zPath.__str__c                 C   s   | j j| dS )Nr   )_Path__reprr!  r   r   r   r   r   	  r'  zPath.__repr__c                 G   s&   t j| jg|R  }| | j|S r   )r&  r4   rC  rQ  r  r5  )r   othernextr   r   r   rL  	  s   zPath.joinpathc                 C   s6   | j s| jjS t| j d}|r|d7 }| |S r4  )rC  rD   parentr&  r  r  rQ  )r   Z	parent_atr   r   r   rZ  	  s   
zPath.parent)r   )rw  )r   r   r   rW  r   rC   rv  r5  rD   rN  rO  rP  rQ  r   rR  r  rU  rV  r   rL  __truediv__rZ  r   r   r   r   r     s.    M


r   c                    s   dd l }d}|j|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 urm| j}t|d}| }W d    n1 sYw   Y  |rgtd	| td d S | j
d ur| j
}t|d}|  W d    d S 1 sw   Y  d S | jd ur| j\}}t|d}|| W d    d S 1 sw   Y  d S | jd ur| jd}	| j}
 fdd t|	d1}|
D ]%}tj|}|stjtj|}|dtjtjfv rd} ||| qW d    d S 1 sw   Y  d S d S ) Nr   z3A simple command-line interface for zipfile module.)descriptionT)requiredz-lz--list	<zipfile>zShow listing of a zipfile)metavarhelpz-ez	--extractr    )r^  z<output_dir>zExtract zipfile into target dir)nargsr_  r`  z-cz--create+)z<name>z<file>zCreate zipfile from sourcesz-tz--testzTest if a zipfile is validrw  z.The following enclosed file is corrupted: {!r}zDone testingc                    sv   t j|r| ||t d S t j|r7|r| || tt |D ]} | t j||t j|| q$d S d S r   )	r   r   r
  r%  r   r   r  r  r4   )rm  r   zippathZnmaddToZipr   r   re  	  s   zmain.<locals>.addToZiprx  r   )argparseArgumentParseradd_mutually_exclusive_groupadd_argument
parse_argstestr   r  r  r!  rc   r  r  r  Zcreatepopr   r   r  r  r  r  )r@  rf  r\  parsergroupr  rm  Zbadfiler  Zzip_namefilesr   rc  r   rd  r   main	  sh   








"

"$rp  __main__r   )Zbinasciiimportlib.utilr  rG  r"  r   r&  rer  r   rH   r   r  r   r;  rI  r   r   ImportErrorr   r   __all__	Exceptionr   r   r   r   r   r  r  r   r   r   r   r   r   r   r   r  rb   ra   r   r`   rO   rP   rQ   rR   rS   rT   rU   rf   r  rV   r  r  r  r  Z_CD_CREATE_VERSIONZ_CD_CREATE_SYSTEMZ_CD_EXTRACT_VERSIONZ_CD_EXTRACT_SYSTEMZ_CD_FLAG_BITSZ_CD_COMPRESS_TYPEZ_CD_TIMEZ_CD_DATEZ_CD_CRCZ_CD_COMPRESSED_SIZEZ_CD_UNCOMPRESSED_SIZEr  r  r  Z_CD_DISK_NUMBER_STARTZ_CD_INTERNAL_FILE_ATTRIBUTESZ_CD_EXTERNAL_FILE_ATTRIBUTESr  r   r   r  r  Z_FH_EXTRACT_VERSIONZ_FH_EXTRACT_SYSTEMr  Z_FH_COMPRESSION_METHODZ_FH_LAST_MOD_TIMEZ_FH_LAST_MOD_DATEZ_FH_CRCZ_FH_COMPRESSED_SIZEZ_FH_UNCOMPRESSED_SIZEr  r  rI   rJ   rF   rN   rM   rK   Z_CD64_SIGNATUREZ_CD64_DIRECTORY_RECSIZEZ_CD64_CREATE_VERSIONZ_CD64_EXTRACT_VERSIONZ_CD64_DISK_NUMBERZ_CD64_DISK_NUMBER_STARTZ_CD64_NUMBER_ENTRIES_THIS_DISKZ_CD64_NUMBER_ENTRIES_TOTALZ_CD64_DIRECTORY_SIZEZ_CD64_OFFSET_START_CENTDIRrr  Structr0   r:   r?   r	   r]   r;   objectr
   r   r   r   r   r   r   r  r	  r  r  r"  rH  r(  re  r   r   r%  r$  dictfromkeysr/  r+  r,  r9  rB  r   rp  r   r   r   r   r   <module>   s   








<< ^&	

(  KU     ~ /<
 
.
=
