a
    zeU                    @   s  d dl Z d dlZd dlZd dlZd dlZd dlZ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y   dZe jZY n0 zd dlZW n ey   dZY n0 zd dlZW n ey   dZY n0 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Z.dZ/dZ0d	Z1dZ2dZ3dZ4e	'e3Z5d Z6d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$ZJe	'eIZKd ZLdZMdZNdZOdZPdZQdZRdZSd	ZTdZUdZVdZWd%ZXd&ZYe	'eXZZd'Z[d(Z\e	'e[Z]d Z^dZ_dZ`dZadZbdZcdZddZed	ZfdZgd)Zhe	id*Zjd+d, Zkd-d. Zld/d0 Zmd1d2 Znd3d4 ZoG d5d6 d6epZqdard7d8 Zsd9d: ZtG d;d< d<ZuG d=d> d>Zvd?d@dAdAdAdAdBdCdDdEdBdFdGdHdIdJdKdLZwdMdN ZxdndOdPZydQdR ZzG dSdT dTZ{G dUdV dVZ|G dWdX dXej}Z~G dYdZ dZej}ZG d[d\ d\ZG d]d^ d^eZd_d` Zdadb ZejZdcdd ZG dedf dfeZG dgdh dheZG didj djZdodkdlZedmkre  dS )p    N)
BadZipFile
BadZipfileerror
ZIP_STOREDZIP_DEFLATED	ZIP_BZIP2ZIP_LZMA
is_zipfileZipInfoZipFile	PyZipFileLargeZipFilePathc                   @   s   e Zd ZdS )r   N__name__
__module____qualname__ r   r   /usr/lib/python3.9/zipfile.pyr   *   s   r   c                   @   s   e Zd ZdS )r   Nr   r   r   r   r   r   .   s   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rz|| ||d  \}}|d | }	||v rt||krl|| ||  |	}d}|	}q|s| S d|S )NFr   r    T    )_EXTRA_FIELD_STRUCTunpacklenappendjoin)
extraZxidsr/   ZmodifiedbufferstartiZxidZxlenjr   r   r   _strip_extra   s     r8   c                 C   s*   zt | rW dS W n ty$   Y n0 dS )NTF)_EndRecDataOSErrorfpr   r   r   _check_zipfile   s    
r=   c                 C   sh   d}zLt | drt| d}n2t| d}t|}W d    n1 sD0    Y  W n tyb   Y n0 |S )NFreadr;   rb)hasattrr=   openr:   )filenameresultr<   r   r   r   r	      s    
*r	   c              
   C   s  z|  |t d W n ty*   | Y S 0 | t}t|tkrF|S tt|\}}}}|tkrf|S |dksv|dkr~t	d|  |t t
 d | t
}t|t
kr|S tt|\
}}}	}
}}}}}}|tkr|S ||t< ||t< ||t< ||t< ||t< ||t< ||t< |S )Nr   r   r   z3zipfiles that span multiple disks are not supported)seeksizeEndCentDir64Locatorr:   r>   r0   structr/   structEndArchive64LocatorstringEndArchive64Locatorr   sizeEndCentDir64structEndArchive64stringEndArchive64_ECD_SIGNATURE_ECD_DISK_NUMBER_ECD_DISK_START_ECD_ENTRIES_THIS_DISK_ECD_ENTRIES_TOTAL	_ECD_SIZE_ECD_OFFSET)fpinoffsetendrecdatasigZdisknoZreloffZdisksZszcreate_versionZread_versionZdisk_numZdisk_dirZdircountZ	dircount2ZdirsizeZ	diroffsetr   r   r   _EndRecData64   s:    



rY   c           	      C   sf  |  dd |  }z|  t d W n ty:   Y d S 0 |  }t|tkr|dd tkr|dd  dkrtt	|}t
|}|d ||t  t| t |S t|d t d}|  |d |  }|t}|dkrb|||t  }t|tkrd S t
tt	|}|t }||t |t |  }|| |||  t| || | |S d S )Nr   r   r    s     r-   i   )rD   tellsizeEndCentDirr:   r>   r0   stringEndArchiverF   r/   structEndArchivelistr1   rY   maxrfind_ECD_COMMENT_SIZE)	rS   ZfilesizerV   rU   ZmaxCommentStartr5   ZrecDataZcommentSizecommentr   r   r   r9      sD    



r9   c                   @   sX   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_filenamerB   	date_timecompress_type_compresslevelrc   r3   create_systemrX   extract_versionreserved	flag_bitsvolumeinternal_attrexternal_attrheader_offsetCRCcompress_size	file_size	_raw_timeNoName  r   r   r   r   r   c                 C   s   || _ |td}|dkr(|d| }tjdkrJtj|v rJ|tjd}|| _|| _|d dk rjtdt	| _
d | _d| _d| _tjdkrd| _nd| _t| _t| _d| _d| _d| _d| _d| _d| _d| _d S )Nr   /rv   z+ZIP does not support timestamps before 1980r-   win32r   )rd   findchrossepreplacerB   re   
ValueErrorr   rf   rg   rc   r3   sysplatformrh   DEFAULT_VERSIONrX   ri   rj   rk   rl   rm   rn   rq   rr   )selfrB   re   Z	null_byter   r   r   __init__W  s4    
zZipInfo.__init__c                 C   s   d| j j| jf g}| jtkr8|dt| j| j  | jd? }| jd@ }|rd|dt	
|  |rv|d|  |  }|r| jr|d| j  |r| jr| jtks| j| jkr|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   rB   rf   r   r1   compressor_namesgetrn   statfilemodeis_dirrr   rq   r2   )r   rC   hiloisdirr   r   r   __repr__  s0    






zZipInfo.__repr__Nc                 C   s|  | j }|d d d> |d d> B |d B }|d d> |d	 d> B |d d B }| jd
@ rfd } }}n| j}| j}| j}| j}d}	|d u r|tkp|tk}|rd}
|t|
dt	|
d	 || }|tks|tkr|st
dd}d}t}	| jtkrtt|	}	n| jtkrtt|	}	t|	| j| _t|	| j| _|  \}}ttt| j| j|| j|||||t|t|}|| | S )Nr   rv   r$   r   r!   r   r   r&   r    r   z<HHQQz'Filesize would require ZIP64 extensions    )re   rk   rp   rq   rr   r3   ZIP64_LIMITrF   packcalcsizer   ZIP64_VERSIONrf   r   r`   BZIP2_VERSIONr   LZMA_VERSIONri   rX   _encodeFilenameFlagsstructFileHeaderstringFileHeaderrj   r0   )r   zip64dtdosdatedostimerp   rq   rr   r3   min_versionfmtrB   rk   headerr   r   r   
FileHeader  sJ    $$



zZipInfo.FileHeaderc                 C   sB   z| j d| jfW S  ty<   | j d| jdB f Y S 0 d S )Nasciiutf-8   )rB   encoderk   UnicodeEncodeErrorr   r   r   r   r     s    zZipInfo._encodeFilenameFlagsc                 C   s2  | j }tj}t|dkr.|d|d d \}}|d t|krPtd||f |dkr|d|d  }z| jdv rd}|d|d d \| _|dd  }| jd	krd
}|d|d d \| _|dd  }| jd	krd}|d|d d \| _W n( tjy   td| dd Y n0 ||d d  }q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.)	r3   rF   r/   r0   r   rr   rq   ro   r   )r   r3   r/   tpZlnrV   Zfieldr   r   r   _decodeExtra  s6    



zZipInfo._decodeExtraTstrict_timestampsc          	      C   s   t |tjrt|}t|}t|j}t|j	}|dd }|sZ|d dk rZd}n|sn|d dkrnd}|d u rz|}tj
tj
|d }|d tjtjfv r|dd  }q|r|d7 }| ||}|jd	@ d
> |_|rd|_| jd
O  _n|j|_|S )Nr   r"   rv   ru   ;  )r   r         ;   r   r   rw   r   r)   )
isinstancer{   PathLikefspathr   S_ISDIRst_modetime	localtimest_mtimepathnormpath
splitdriver|   altseprn   rr   st_size)	clsrB   arcnamer   str   mtimere   zinfor   r   r   	from_file  s0    



zZipInfo.from_filec                 C   s   | j d dkS )Nrw   rB   r   r   r   r   r     s    zZipInfo.is_dir)rt   ru   )N)N)r   r   r   	__slots__r   r   r   r   r   classmethodr   r   r   r   r   r   r
   =  s   
+
.%r
   c                 C   s0   t dD ]"}| d@ r"| d? dA } q| dL } q| S )Nr   r   l    q[ )range)crcr7   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 ]}| qLfd	d
}|S )NixV4igE#ixV4   c                    s   |d?  || A d@  A S )Nr      r   )Zchr   )crctabler   r   crc323  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_keys7  s    
z"_ZipDecrypter.<locals>.update_keysc                    sN   t  }|j}| D ]4} dB }|||dA  d? d@ N }| || qt|S )Nr   r   r   r   )	bytearrayr1   bytes)rV   rC   r1   r   k)r   r   r   r   	decrypterA  s    
z _ZipDecrypter.<locals>.decrypter)	_crctabler_   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 N)_compr   r   r   r   r   Q  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   rF   r   r0   )r   Zpropsr   r   r   _initT  s
    
zLZMACompressor._initc                 C   s*   | j d u r|  | j | S | j |S r   )r   r   compress)r   rV   r   r   r   r   [  s    
zLZMACompressor.compressc                 C   s&   | j d u r|  | j   S | j  S r   )r   r   flushr   r   r   r   r   `  s    
zLZMACompressor.flushN)r   r   r   r   r   r   r   r   r   r   r   r   O  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   h  s    zLZMADecompressor.__init__c              	   C   s   | j d u r|  j|7  _t| jdkr*dS td| jdd \}t| jd| krXd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   r0   rF   r/   r   r   r   r   r   
decompressr   )r   rV   ZpsizerC   r   r   r   r   m  s"    


zLZMADecompressor.decompressN)r   r   r   r   r   r   r   r   r   r   f  s   r   storeZshrinkreduceZimplodetokenizeZdeflateZ	deflate64bzip2r   ZterseZlz77ZwavpackZppmd)r   r   r   r   r    r!   r"   r#   r   r$   r%   r   r   r+      a   b   c                 C   sX   | t kr
nJ| tkr tsTtdn4| tkr6tsTtdn| tkrLtsTtdntdd S )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   sj   | t kr2|d ur t|tjdS ttjtjdS | tkrT|d urLt|S t S | tkrbt	 S d S d S )N)
r   r   compressobjDEFLATEDZ_DEFAULT_COMPRESSIONr   r   BZ2Compressorr   r   )rf   compresslevelr   r   r   _get_compressor  s    
r  c                 C   sv   t |  | tkrd S | tkr&tdS | tkr6t S | tkrDt	 S t
| }|rdtd| |f ntd| f d S )Nr   zcompression type %d (%s)zcompression type %d)r   r   r   r   decompressobjr   r   BZ2Decompressorr   r   r   r   r   )rf   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   s   | j S r   )r
  r   r   r   r   r[     s    z_SharedFile.tellr   c                 C   sZ   | j @ |  rtd| j|| | j | _| jW  d    S 1 sL0    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	  rD   r[   r
  )r   rT   whencer   r   r   rD     s    z_SharedFile.seekr   c                 C   sd   | j J |  rtd| j| j | j|}| j | _|W  d    S 1 sV0    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	  rD   r
  r>   r[   r   nrV   r   r   r   r>     s    z_SharedFile.readc                 C   s$   | j d ur | j }d | _ | | d S r   )r	  r  )r   fileobjr   r   r   r    s    
z_SharedFile.closeN)r   )r   )r   r   r   r   r[   rD   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<   rT   r   r<   r   r   r   r     s    z_Tellable.__init__c                 C   s   | j |}|  j|7  _|S r   )r<   writerT   )r   rV   r  r   r   r   r    s    z_Tellable.writec                 C   s   | j S r   )rT   r   r   r   r   r[     s    z_Tellable.tellc                 C   s   | j   d S r   )r<   r   r   r   r   r   r      s    z_Tellable.flushc                 C   s   | j   d S r   )r<   r  r   r   r   r   r    s    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rz|j| _td| _nd | _d| _z4| r| | _|j| _|j| _| j| _d| _W n ty   Y n0 d | _|r"|j d@ r|j!d? d@ }n|jd? d@ }| " }||kr"t#d	|j$ d S )
NFr-   r   rp   Tr   r   r   zBad password for file %r)%_fileobj_pwd_close_fileobjrf   _compress_typerq   _compress_leftrr   _leftr  _decompressor_eof_readbuffer_offsetnewlinesmoderB   namer@   rp   _expected_crcr   _running_crc	_seekabler  r[   _orig_compress_start_orig_compress_size_orig_file_size_orig_start_crcAttributeError
_decrypterrk   rs   _init_decrypterr   rd   )r   r  r)  zipinfor   Zclose_fileobjZ
check_bytehr   r   r   r     sF    




zZipExtFile.__init__c                 C   s4   t | j| _| jd}|  jd8  _| |d S )Nr   r&   )r   r  r3  r  r>   r"  )r   r   r   r   r   r4  H  s    zZipExtFile._init_decrypterc                 C   sv   d| j j| j jf g}| jsX|d| j| jf  | jtkrb|dt	
| j| j  n
|d |d d|S )N<%s.%sz name=%r mode=%rr   	 [closed]r   r   )r   r   r   closedr1   r*  r)  r!  r   r   r   r2   r   rC   r   r   r   r   S  s    


zZipExtFile.__repr__r   c                 C   sL   |dk r>| j d| jd }|dkr>| j | j| }|| _|S tj| |S )Nr      
r   )r&  ry   r'  ioBufferedIOBasereadline)r   limitr6   liner   r   r   r>  a  s    zZipExtFile.readliner   c                 C   sr   |t | j| j kr\| |}t || jkrJ|| j| jd   | _d| _n|  jt |8  _| j| j| jd  S )Nr   i   )r0   r&  r'  r>   )r   r  chunkr   r   r   peekq  s    
zZipExtFile.peekc                 C   s   | j rtddS )NI/O operation on closed file.T)r9  r~   r   r   r   r   readable~  s    zZipExtFile.readablec                 C   s  | j rtd|d u s|dk rV| j| jd  }d| _d| _| jsR|| | j7 }q:|S || j }|t| jk r| j| j| }|| _|S |t| j }| j| jd  }d| _d| _|dkr| js| |}|t|k r|| _|| _||d | 7 }q||7 }|t|8 }q|S )Nzread from closed file.r   r-   )r9  r~   r&  r'  r%  _read1MAX_Nr0   )r   r  bufendrV   r   r   r   r>     s8    

zZipExtFile.readc                 C   s@   | j d u rd S t|| j| _| jr<| j| j kr<td| j d S )NzBad CRC-32 for file %r)r+  r   r,  r%  r   r*  )r   newdatar   r   r   _update_crc  s
    
zZipExtFile._update_crcc                 C   s  |d u s|dk rR| j | jd  }d| _ d| _| jsN| | j}|r,||7 }qNq,|S || j }|t| j k r| j | j| }|| _|S |t| j  }| j | jd  }d| _ d| _|dkr| js| |}|t|k r|| _ || _||d | 7 }q|r||7 }qq|S Nr   r-   )r&  r'  r%  rE  rF  r0   )r   r  rG  rV   rH  r   r   r   read1  s>    


zZipExtFile.read1c                 C   s"  | j s|dkrdS | jtkrH| jj}|t|krR|| |t| 7 }n
| |}| jtkrj| jdk| _ nx| jtkrt	|| j
}| j||}| jjp| jdko| jj | _ | j r|| j 7 }n | j|}| jjp| jdk| _ |d | j }|  jt|8  _| jdkrd| _ | | |S )Nr   r-   T)r%  r!  r   r$  unconsumed_tailr0   _read2r   r"  r`   MIN_READ_SIZEr   r   r   r#  rJ  r  r   r   r   rE    s4    





zZipExtFile._read1c                 C   sd   | j dkrdS t|| j}t|| j }| j|}|  j t|8  _ |sLt| jd ur`| |}|S rK  )	r"  r`   rO  minr  r>   r0   EOFErrorr3  r  r   r   r   rN    s    


zZipExtFile._read2c                    s0   z| j r| j  W t   nt   0 d S r   )r   r  r  superr   r   r   r   r  	  s    zZipExtFile.closec                 C   s   | j rtd| jS NrC  )r9  r~   r-  r   r   r   r   r    s    zZipExtFile.seekabler   c                 C   sL  | j rtd| jstd|  }|dkr4|}n.|dkrF|| }n|dkrZ| j| }ntd|| jkrr| j}|dk r~d}|| }|| j }|dkr|t| j	k r|| _d}nf|dk r| j
| j | j| _| j| _| j| _d| _	d| _t| j| _d| _|}| jd ur|   |dkrDt| j|}| | ||8 }q|  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)r9  r~   r-  r<  UnsupportedOperationr[   r0  r'  r0   r&  r  rD   r.  r1  r,  r/  r"  r#  r  r!  r$  r%  r3  r4  rP  MAX_SEEK_READr>   )r   rT   r  Zcurr_posZnew_posZread_offsetZbuff_offsetZread_lenr   r   r   rD     sL    






zZipExtFile.seekc                 C   s>   | j rtd| jstd| j| j t| j | j	 }|S )Nztell on closed file.rU  )
r9  r~   r-  r<  rV  r0  r#  r0   r&  r'  )r   Zfileposr   r   r   r[   G  s    
zZipExtFile.tell)NF)r   )r   )r   )r   )r   r   r   rF  rO  rW  r   r4  r   r>  rB  rD  r>   rJ  rL  rE  rN  r  r  rD   r[   __classcell__r   r   rS  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  rf   rg   _compressor
_file_size_compress_size_crc)r   zfr   r   r   r   r   r   Q  s    z_ZipWriteFile.__init__c                 C   s   | j jS r   )r\  r<   r   r   r   r   r  [  s    z_ZipWriteFile._fileobjc                 C   s   dS )NTr   r   r   r   r   writable_  s    z_ZipWriteFile.writablec                 C   s   | j rtdt|ttfr&t|}nt|}|j}|  j|7  _t	|| j
| _
| jrt| j|}|  jt|7  _| j| |S rT  )r9  r~   r   r   r   r0   
memoryviewnbytesr^  r   r`  r]  r   r_  r  r  )r   rV   rd  r   r   r   r  b  s    
z_ZipWriteFile.writec              	      sj  | j r
d S zNt   | jrR| j }|  jt|7  _| j| | j| j	_
n
| j| j	_
| j| j	_| j| j	_| j	jd@ r| jrdnd}| jt|t| j	j| j	j
| j	j | j | j_nn| js| jtkrtd| jtkrtd| j | j_| j| j	j | j| j	| j | j| jj | jj| j	 | j	| jj| j	j< W d| j_ n
d| j_ 0 d S )Nr   z<LLQQz<LLLLz+File size unexpectedly exceeded ZIP64 limitz1Compressed size unexpectedly exceeded ZIP64 limitF)!r9  rR  r  r]  r   r_  r0   r  r  rZ  rq   r^  r`  rp   rr   rk   r[  rF   r   _DD_SIGNATUREr[   r\  	start_dirr   r   rD   ro   r   filelistr1   
NameToInforB   r  )r   rG  r   rS  r   r   r  u  sD    






z_ZipWriteFile.close)
r   r   r   r   propertyr  rb  r  r  rX  r   r   rS  r   rY  P  s   

rY  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dAd(d)Zed*d+ Zd,d- Zd.d/ ZdBd0d1ZdCd2d3Zd4d5 Zd6d7 Z d8d9 Z!d:d; Z"dS )Dr   NrTr   c          
   	   C   sH  |dvrt dt| || _d| _d| _i | _g | _|| _|| _|| _	d | _
d| _|| _t|tjrpt|}t|trd| _|| _dddd	dd
dd}|| }zt||| _W q ty   ||v r|| }Y q Y q0 qqnd| _|| _t|dd | _d| _t | _d| _d| _z|dkr2|   n|dv rd| _z| j  | _!W n0 t"tfy   t#| j| _d| _!d| _Y n40 z| j$| j! W n t"tfy   d| _Y n0 nd|dkrz|   | j$| j! W n4 t%y   | j$dd d| _| j  | _!Y n0 nt dW n$   | j}	d | _| &|	  Y n0 d S )N)rj  wxaz+ZipFile requires mode 'r', 'w', 'x', or 'a'Fr   r-   r?   w+bx+br+bwbxb)rj  rk  rl  rm  rp  rn  ro  r   r*  Trj  )rk  rl  rm  r   z"Mode must be 'r', 'w', 'x', or 'a')'r~   r   _allowZip64
_didModifydebugrh  rg  r   r  r)  r   _comment_strict_timestampsr   r{   r   r   str_filePassedrB   r<  rA   r<   r:   getattr_fileRefCnt	threadingRLockr  r-  r  _RealGetContentsr[   rf  r2  r  rD   r   _fpclose)
r   r  r)  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__  s    zZipFile.__enter__c                 C   s   |    d S r   r  )r   typevalue	tracebackr   r   r   __exit__  s    zZipFile.__exit__c                 C   s   d| j j| j jf g}| jd urd| jr8|d| j  n| jd urR|d| j  |d| j  n
|d |d d|S )Nr7  z file=%rz filename=%rz mode=%rr8  r   r   )	r   r   r   r<   ry  r1   rB   r)  r2   r:  r   r   r   r     s    



zZipFile.__repr__c                 C   s  | j }zt|}W n ty,   tdY n0 |s:td| jdkrLt| |t }|t }|t | _	|t
 | | }|t tkr|tt 8 }| jdkr|| }td||| || | _|| jd ||}t|}d}||k r|t}	t|	tkrtdtt|	}	|	t tkr*td| jdkr>t|	 ||	t }
|	d }|d	@ rj|
d
}
n
|
d}
t|
}||	t |_||	t  |_!|	t" |_#|	dd \|_$|_%|_&|_'|_(|_)}}|_*|_+|_,|j&t-krt.d|j&d  |	dd \|_/|_0|_1||_2|d? d |d? d@ |d@ |d? |d? d@ |d@ d f|_3|4  |j#| |_#| j56| || j7|j8< |t |	t  |	t  |	t   }| jdkrtd| qd S )NzFile is not a zip filer   r   zgiven, inferred, offsetr   zTruncated central directoryz&Bad magic number for central directoryr!   r   r   cp437r   zzip file version %.1fr%   r(   r+   r$   rv   r   r&   r   total)9r<   r9   r:   r   ru  printrQ   rR   _ECD_COMMENTrv  _ECD_LOCATIONrL   rK   rI   rE   rf  rD   r>   r<  BytesIOsizeCentralDirr0   rF   r/   structCentralDir_CD_SIGNATUREstringCentralDir_CD_FILENAME_LENGTHdecoder
   _CD_EXTRA_FIELD_LENGTHr3   _CD_COMMENT_LENGTHrc   _CD_LOCAL_HEADER_OFFSETro   rX   rh   ri   rj   rk   rf   rp   rq   rr   MAX_EXTRACT_VERSIONr   rl   rm   rn   rs   re   r   rg  r1   rh  rB   )r   r<   rU   Zsize_cdZ	offset_cdconcatZinferredrV   r  centdirrB   flagsrl  tdr   r   r   r~  -  s    












zZipFile._RealGetContentsc                 C   s   dd | j D S )Nc                 S   s   g | ]
}|j qS r   r   ).0rV   r   r   r   
<listcomp>}  r-   z$ZipFile.namelist.<locals>.<listcomp>rg  r   r   r   r   namelist{  s    zZipFile.namelistc                 C   s   | j S r   r  r   r   r   r   infolist  s    zZipFile.infolistc                 C   sL   t dd |d | jD ]0}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  rg  re   rB   rr   )r   r  r   dater   r   r   printdir  s    
zZipFile.printdirc              	   C   sp   d}| j D ]`}z>| |jd}||r,q W d    n1 s@0    Y  W q
 tyh   |j Y   S 0 q
d S )Ni   rj  )rg  rA   rB   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)rh  r   KeyError)r   r*  infor   r   r   getinfo  s    zZipFile.getinfoc                 C   s6   |r t |ts tdt|j |r,|| _n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   s   | j S r   )rv  r   r   r   r   rc     s    zZipFile.commentc                 C   s^   t |tstdt|j t|tkrNd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   r0   ZIP_MAX_COMMENTwarningswarnrv  rt  )r   rc   r  r   r   r   rc     s    
c                 C   s:   |  |d|}| W  d    S 1 s,0    Y  d S Nrj  rA   r>   )r   r*  r   r<   r   r   r   r>     s    zZipFile.readFforce_zip64c                   s  |dvrt d|r0t|ts0tdt|j |rD|dkrDt d jsRt dt|trb|}n,|dkrt|} j|_	 j
|_n
 |}|dkr j||dS  jrt d  jd	7  _t j|j j j fd
d}z|t}t|tkrtdtt|}|t tkr&td||t }|t rL||t  |jd@ r`t d|jd@ rtt d|t! d@ r|"d}	n
|"d}	|	|j#krtd|j#|f |jd	@ }
|
r|s҈ j$}|st%d| nd }t&||||dW S    |'   Y n0 d S )N>   rk  rj  zopen() requires mode "r" or "w"r  rk  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   <lambda>  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.z6File %r is encrypted, password required for extractionT)(r~   r   r   r  r  r   r<   r
   r   rf   r  rg   r  _open_to_writer  r{  r  ro   r  r  r>   sizeFileHeaderr0   r   rF   r/   r   _FH_SIGNATUREr   _FH_FILENAME_LENGTH_FH_EXTRA_FIELD_LENGTHrk   r   _FH_GENERAL_PURPOSE_FLAG_BITSr  rd   r   r   r  r  )r   r*  r)  r   r  r   Zzef_fileZfheaderfnameZ	fname_strZis_encryptedr   r   r   rA     sz    







zZipFile.openc                 C   s   |r| j std| jr tdd|_d|_d|_|jtkrJ| jdO  _| js^| jdO  _|j	sjd|_	| j o|p|j
d tk}| jr| 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)rs  r~   r  rq   rp   rk   rf   r   r-  rn   rr   r   r<   rD   rf  r[   ro   _writecheckrt  r  r   rY  )r   r   r  r   r   r   r   r  %  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   extractN  s    

zZipFile.extractc                 C   sH   |d u r|   }|d u r"t }n
t|}|D ]}| ||| q0d S r   )r  r{   r  r   r  )r   r   membersr   r5  r   r   r   
extractall[  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  rl  r   r   r   	<genexpr>v  r-   z1ZipFile._sanitize_windows_name.<locals>.<genexpr>c                 s   s   | ]}|r|V  qd S r   r   r  r   r   r   r  x  r-   )!_windows_illegal_name_trans_tablerx  	maketransr0   	translatesplitr2   )r   r   pathseptableZillegalr   r   r   _sanitize_windows_namel  s    
zZipFile._sanitize_windows_namec              	      sx  t |ts| |}|jdtjj}tjjrB|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r| |tjj}tj||}tj|}tj|}|rtj|st| | rtj|st| |S | j||dH}t|d}t|| W d    n1 sJ0    Y  W d    n1 sj0    Y  |S )	Nrw   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   rq  )r   r
   r  rB   r}   r{   r   r|   r   r   curdirpardirr2   r  r  r   dirnameexistsmakedirsr   r   mkdirrA   shutilcopyfileobj)r   r  
targetpathr   r   Z	upperdirssourcetargetr   r  r   r  {  s2    

&


L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sHtdt|j | j	sd }t
| jtkrpd}n|jtkrd	}n|jtkrd
}|rt|d d S )Nr   zDuplicate name: %rr   r  rk  rl  rm  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)rB   rh  r  r  r)  r~   r<   r   rf   rs  r0   rg  ZIP_FILECOUNT_LIMITrr   r   ro   r   )r   r   r  requires_zip64r   r   r   r    s,    



zZipFile._writecheckc              	   C   s  | j std| jrtdtj||| jd}| rDd|_d|_n0|d urT||_	n| j
|_	|d url||_n| j|_| r&| j | jr| j | j | j  |_|j	tkr| jdO  _| | d| _| j| || j|j< | j |d | j  | _W d    n1 s0    Y  nht|dL}| |d	}t||d
 W d    n1 sd0    Y  W d    n1 s0    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   TFr?   rk  i    ) r<   r~   r  r
   r   rw  r   rq   rp   rf   r   rg   r  r  r-  rD   rf  r[   ro   r   rk   r  rt  rg  r1   rh  rB   r  r   rA   r  r  )r   rB   r   rf   r  r   srcdestr   r   r   r    sF    


.zZipFile.writec              	   C   s"  t |tr|d}t |tsxt|tt d d d}| j|_| j|_	|j
d dkrpd|_| jdO  _q|d|_n|}| jstd	| jrtd
|d ur||_|d ur||_	t||_| jH | j|dd}|| W d    n1 s0    Y  W d    n1 s0    Y  d S )Nr   r"   )rB   re   r   rw   i  Ar)   r  r  z?Can't write to ZIP archive while an open writing handle exists.rk  )r)  )r   rx  r   r
   r   r   r   rf   r  rg   rB   rn   r<   r~   r  r0   rr   r  rA   r  )r   Zzinfo_or_arcnamerV   rf   r  r   r  r   r   r   writestr  s:    



zZipFile.writestrc                 C   s   |    d S r   r  r   r   r   r   __del__  s    zZipFile.__del__c              	   C   s   | j d u rd S | jrtdzl| jdv rp| jrp| j, | jrJ| j | j | 	  W d    n1 sf0    Y  W | j }d | _ | 
| n| j }d | _ | 
| 0 d S )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~   r)  rt  r  r-  rD   rf  _write_end_recordr  r  r   r   r   r    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sr|jtkr||j ||j d
}d
}n|j}|j}|jtkr||j d
}n|j}|j}	d}
|rt|	d}	t	j
ddt|  ddt| g|R  |	 }	t}
|jtkr&tt|
}
n|jtkr<t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r4d}|r| j#sNt$|d 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/  d S )Nr   rv   r$   r   r!   r   r   r&   r    r   )r   r,   Qr   r  zCentral directory offsetzCentral directory sizer  ,   r   r   rm  )0rg  re   rr   r   rq   r1   ro   r3   r8   rF   r   r0   r   rf   r   r`   r   r   r   ri   rX   r   r  r  rh   rj   rp   rc   rm   rn   r<   r  r[   rf  r  rs  r   rJ   rK   rG   rH   rP  r^   r]   rv  r)  truncater   )r   r   r   r   r   r3   rr   rq   ro   Z
extra_datar   ri   rX   rB   rk   r  Zpos2ZcentDirCountZcentDirSizeZcentDirOffsetr  Zzip64endrecZzip64locrecrU   r   r   r   r  0  s    $$
















zZipFile._write_end_recordc                 C   s&   |  j d8  _ | j s"| js"|  d S Nr   )r{  ry  r  r  r   r   r   r    s    zZipFile._fpclose)N)N)rj  N)F)NN)NNN)NNN)NN)#r   r   r   r<   r  r   r   r  r  r   r~  r  r  r  r  r  r  ri  rc   setterr>   rA   r  r  r  r   r  r  r  r  r  r  r  r  r  r   r   r   r   r     sN   ZN
			


b
)


*  
2 
)^r   c                   @   s0   e Zd ZdeddfddZddd	Zd
d ZdS )r   rj  Tr   c                 C   s   t j| ||||d || _d S )N)r)  r   r  )r   r   	_optimize)r   r  r)  r   r  optimizer   r   r   r     s    zPyZipFile.__init__r   Nc                 C   s  t |}|rD||sD| jr@t j|r,dnd}td||f  d S t j|\}}t j|rht j|d}t j|r|rd||f }n|}| jrtd|d| | 	|dd	 |\}}	| jrtd
|	 | 
||	 tt |}
|
d |
D ]}t j||}t j|\}}t j|rRt jt j|dr| j|||d q|dkr|r~||s~| jrtd|  q| 	|dd	 |\}}	| jrtd
|	 | 
||	 qn| jrtd| tt |D ]}t j||}t j|\}}|dkr|r,||s,| jrtd|  q| 	|dd	 |\}}	| jrVtd
|	 | 
||	 qnP|d	d  dkrtd| 	|dd	 |\}}	| jrt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   ru  r   r   r  r  r2   isfile_get_codenamer  sortedlistdirremovesplitextwritepyr   )r   pathnamebasenamer  Zlabeldirr*  Zinitnamer  r   dirlistrB   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r\tj|rt|jt|jkr| }	}
ntj|rt|jt|jkr|}
|}	ntj|rt|jt|jkr|}
|}	nvtj|rt|jt|jkr|}
|}	nD||rRt	j
jd
kr4|}
nt	j
jdkrH|}
n|}
|}	n| }
}	n jd
krr|}
|}	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 }|rd||f }|
|fS )Nr   c              
      sd   dd l } jrtd|  z|j| d|d W n2 |jy^ } zt|j W Y d }~dS d }~0 0 dS )Nr   Z	CompilingT)doraiser  F)
py_compileru  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    sj    


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   _parentsC  s    r  c                 c   s4   |  tj} | r0| tjkr0| V  t| \} }qd S r   )r  	posixpathr|   r  )r   tailr   r   r   r  V  s    r  c                 C   s   t t|j| S r   )r  filterfalseset__contains__)ZminuendZ
subtrahendr   r   r   _differencep  s    r  c                       sD   e Zd Zedd Z fddZdd Z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   )rR  r  r  r_   r   )r   r  rS  r   r   r    s    zCompleteDirs.namelistc                 C   s   t |  S r   )r  r  r   r   r   r   	_name_set  s    zCompleteDirs._name_setc                 C   s,   |   }|d }||vo||v }|r(|S |S Nrw   )r!  )r   r*  r  r  Z	dir_matchr   r   r   resolve_dir  s    zCompleteDirs.resolve_dirc                 C   sN   t |tr|S t |ts | |S d|jvr.t} | | }t|t| |S r  )r   r  r   r)  __new__varsupdate)r   r  resr   r   r   make  s    



zCompleteDirs.make)r   r   r   staticmethodr   r  r!  r#  r   r(  rX  r   r   rS  r   r  x  s   

r  c                       s(   e Zd Z fddZ fddZ  ZS )
FastLookupc                    sF   t t | jW  d    S 1 s&0    Y  tt|  | _| jS r   )
contextlibsuppressr2  Z_FastLookup__namesrR  r*  r  r   rS  r   r   r    s    $zFastLookup.namelistc                    sF   t t | jW  d    S 1 s&0    Y  tt|  | _| jS r   )r+  r,  r2  Z_FastLookup__lookuprR  r*  r!  r   rS  r   r   r!    s    $zFastLookup._name_set)r   r   r   r  r!  rX  r   r   rS  r   r*    s   r*  c                   @   s   e Zd ZdZd#ddZd$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   )r*  r(  r  at)r   r  r-  r   r   r   r     s    zPath.__init__rj  c                 O   s\   | dd }|d }| jj| j||d}d|v rD|s8|r@td|S tj|g|R i |S )Nr   r   r  bz*encoding args invalid for binary operation)popr  rA   r-  r~   r<  TextIOWrapper)r   r)  argskwargsr   Zzip_modestreamr   r   r   rA   	  s    z	Path.openc                 C   s   t | jdS r"  )r  r  r-  r  r   r   r   r   r*  	  s    z	Path.namec                 O   sD   | j dg|R i |}| W  d    S 1 s60    Y  d S r  r  )r   r1  r2  strmr   r   r   	read_text	  s    zPath.read_textc                 C   s6   |  d}| W  d    S 1 s(0    Y  d S )Nr?   r  )r   r4  r   r   r   
read_bytes	  s    zPath.read_bytesc                 C   s   t |jd| jdkS r"  )r  r  r-  r  )r   r   r   r   r   	_is_child	  s    zPath._is_childc                 C   s   t | j|S r   )r   r  )r   r-  r   r   r   _next!	  s    z
Path._nextc                 C   s   | j  p| j dS r"  )r-  endswithr   r   r   r   r   $	  s    zPath.is_dirc                 C   s
   |    S r   )r   r   r   r   r   is_file'	  s    zPath.is_filec                 C   s   | j | j v S r   )r-  r  r!  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   r8  r  r  filterr7  )r   Zsubsr   r   r   iterdir-	  s    zPath.iterdirc                 C   s   t | jj| jS r   )r  r2   r  rB   r-  r   r   r   r   __str__3	  s    zPath.__str__c                 C   s   | j j| dS )Nr   )_Path__reprr  r   r   r   r   r   6	  s    zPath.__repr__c                 C   s    t | j|}| | j|S r   )r  r2   r-  r8  r  r#  )r   addnextr   r   r   joinpath9	  s    zPath.joinpathc                 C   s(   t | jd}|r|d7 }| |S r"  )r  r  r-  r  r8  )r   Z	parent_atr   r   r   parent?	  s    zPath.parentN)r   )rj  )r   r   r   r>  r   rA   ri  r*  r5  r6  r7  r8  r   r:  r  r<  r=  r   rA  __truediv__rB  r   r   r   r   r     s&   A


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r| j}t|d}| }W d    n1 s0    Y  |rtd	| td nB| j
d ur"| j
}t|d}|  W d    n1 s0    Y  n| jd urp| j\}}t|d}|| W d    n1 sd0    Y  n| jd ur| jd}	| j}
 fdd t|	df}|
D ]P}tj|}|stjtj|}|dtjtjfv rd} ||| qW d    n1 s0    Y  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   )rF  z<output_dir>zExtract zipfile into target dir)nargsrG  rH  z-cz--create+)z<name>z<file>zCreate zipfile from sourcesz-tz--testzTest if a zipfile is validrj  z.The following enclosed file is corrupted: {!r}zDone testingc                    sp   t j|r| ||t nPt j|rl|r8| || tt |D ]$} | t j||t j|| qFd S r   )	r{   r   r  r  r   r   r  r  r2   )ra  r   zippathZnmaddToZipr   r   rM  o	  s    zmain.<locals>.addToZiprk  r   )argparseArgumentParseradd_mutually_exclusive_groupadd_argument
parse_argstestr   r  r  r  r_   r  r  r  Zcreater/  r{   r   r  r  r  r  )r1  rN  rD  parsergroupr  ra  Zbadfiler  Zzip_namefilesr   rK  r   rL  r   mainG	  s\    





&*
,rW  __main__)N)N)Zbinasciiimportlib.utilr  r<  r  r{   r  r  r   rF   r   r|  r   r+  r   r   ImportErrorr   r   __all__	Exceptionr   r   r   r   r   r  r  r   r   r   r   r   r   r   r   r  r^   r]   r   r\   rL   rM   rN   rO   rP   rQ   rR   rb   r  r  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  rG   rH   rE   rJ   rK   rI   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_CENTDIRre  Structr.   r8   r=   r	   rY   r9   objectr
   r   r   r   r   r   r   r   r  r  r  r  r=  r  rY  r   r   r  r  dictfromkeysr  r  r  r*  r   rW  r   r   r   r   r   <module>   sP  









+= \&
(  KU     u /2 
=
