a
    RhC[                    @   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   //opt/python-3.9.24/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   sl   d}zLt | drt| d}n2t| d}t|}W d    n1 sD0    Y  W n ttfyf   Y n0 |S )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sl|dkrtt	d|t
8 }||krt	d| | || }| t
}t|t
krtd|ts||kr| | d}| t
}t|t
krtd|tst	dtt|\
}}	}
}}}}}}}|| |ksN|	d t
| krVt	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>   r0   r:   structr/   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   sd  |  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r`|||t  }t|tkrd S t
tt	|}|t }||t |t |  }|| |||  t| || |S d S )Nr   r   r    s     r-   i   )rE   tellsizeEndCentDirr:   r>   r0   stringEndArchiverF   r/   structEndArchivelistr1   r[   maxrfind_ECD_COMMENT_SIZE)	rU   ZfilesizerX   rW   ZmaxCommentStartr5   ZrecDataZcommentSizecommentr   r   r   r9     s@    



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_compresslevelre   r3   create_systemrZ   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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 | _d S )Nr   /ry   z+ZIP does not support timestamps before 1980r-   win32r   )rf   findchrossepreplacerB   rg   
ValueErrorr   rh   ri   re   r3   sysplatformrj   DEFAULT_VERSIONrZ   rk   rl   rm   rn   ro   rp   rs   rt   rv   )selfrB   rg   Z	null_byter   r   r   __init__h  s6    
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   rh   r   r1   compressor_namesgetrp   statfilemodeis_dirrt   rs   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   ry   r$   r   r!   r   r   r&   r    r   z<HHQQz'Filesize would require ZIP64 extensions    )rg   rm   rr   rs   rt   r3   ZIP64_LIMITrF   packcalcsizer   ZIP64_VERSIONrh   r   rb   BZIP2_VERSIONr   LZMA_VERSIONrk   rZ   _encodeFilenameFlagsstructFileHeaderstringFileHeaderrl   r0   )r   zip64dtdosdatedostimerr   rs   rt   r3   min_versionfmtrB   rm   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   encoderm   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   rt   rs   rq   r   )r   r3   r/   tpZlnrX   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"   ry   rx   ;  )r   r         ;   r   r   rz   r   r)   )
isinstancer~   PathLikefspathr   S_ISDIRst_modetime	localtimest_mtimepathnormpath
splitdriver   altseprp   rt   st_size)	clsrB   arcnamer   str   mtimerg   zinfor   r   r   	from_file  s0    



zZipInfo.from_filec                 C   s   | j d dkS )Nrz   rB   r   r   r   r   r   !  s    zZipInfo.is_dir)rw   rx   )N)N)r   r   r   	__slots__r   r   r   r   r   classmethodr   r   r   r   r   r   r
   M  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   crc32E  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_keysI  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)rX   rC   r1   r   k)r   r   r   r   	decrypterS  s    
z _ZipDecrypter.<locals>.decrypter)	_crctablera   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   c  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   _initf  s
    
zLZMACompressor._initc                 C   s*   | j d u r|  | j | S | j |S r   )r   r   compress)r   rX   r   r   r   r   m  s    
zLZMACompressor.compressc                 C   s&   | j d u r|  | j   S | j  S r   )r   r   flushr   r   r   r   r   r  s    
zLZMACompressor.flushN)r   r   r   r   r   r   r   r   r   r   r   r   a  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   z  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   rX   ZpsizerC   r   r   r   r     s"    


zLZMADecompressor.decompressN)r   r   r   r   r   r   r   r   r   r   x  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   )rh   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   )rh   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  rE   r]   r  )r   rV   whencer   r   r   rE     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  rE   r  r>   r]   r   nrX   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]   rE   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<   rV   r   r<   r   r   r   r     s    z_Tellable.__init__c                 C   s   | j |}|  j|7  _|S r   )r<   writerV   )r   rX   r  r   r   r   r  
  s    z_Tellable.writec                 C   s   | j S r   )rV   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   rr   Tr   r   r   zBad password for file %r)%_fileobj_pwd_close_fileobjrh   _compress_typers   _compress_leftrt   _leftr
  _decompressor_eof_readbuffer_offsetnewlinesmoderB   namer@   rr   _expected_crcr   _running_crc	_seekabler  r]   _orig_compress_start_orig_compress_size_orig_file_size_orig_start_crcAttributeError
_decrypterrm   ru   _init_decrypterr   rf   )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"  r6  r!  r>   r%  )r   r   r   r   r   r7  Z  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   e  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)  r|   r*  ioBufferedIOBasereadline)r   limitr6   liner   r   r   rA  s  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   peek  s    
zZipExtFile.peekc                 C   s   | j rtddS )NI/O operation on closed file.T)r<  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-   )r<  r   r)  r*  r(  _read1MAX_Nr0   )r   r  bufendrX   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(  rH  rI  r0   )r   r  rJ  rX   rK  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%  rb   MIN_READ_SIZEr   r   r   r&  rM  r  r   r   r   rH    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 rN  )	r%  rb   rR  minr!  r>   r0   EOFErrorr6  r  r   r   r   rQ    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 NrF  )r<  r   r0  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)r<  r   r0  r?  UnsupportedOperationr]   r3  r*  r0   r)  r!  rE   r1  r4  r/  r2  r%  r&  r
  r$  r'  r(  r6  r7  rS  MAX_SEEK_READr>   )r   rV   r  Zcurr_posZnew_posZread_offsetZbuff_offsetZread_lenr   r   r   rE   '  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.rX  )
r<  r   r0  r?  rY  r3  r&  r0   r)  r*  )r   Zfileposr   r   r   r]   Y  s    
zZipExtFile.tell)NF)r   )r   )r   )r   )r   r   r   rI  rR  rZ  r   r7  r   rA  rE  rG  r>   rM  rO  rH  rQ  r  r  rE   r]   __classcell__r   r   rV  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  rh   ri   _compressor
_file_size_compress_size_crc)r   zfr   r   r   r   r   r   c  s    z_ZipWriteFile.__init__c                 C   s   | j jS r   )r_  r<   r   r   r   r   r!  m  s    z_ZipWriteFile._fileobjc                 C   s   dS )NTr   r   r   r   r   writableq  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 rW  )r<  r   r   r   r   r0   
memoryviewnbytesra  r   rc  r`  r   rb  r!  r  )r   rX   rg  r   r   r   r  t  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)!r<  rU  r  r`  r   rb  r0   r!  r  r]  rs   ra  rc  rr   rt   rm   r^  rF   r   _DD_SIGNATUREr]   r_  	start_dirr   r   rE   rq   r   filelistr1   
NameToInforB   r  )r   rJ  r   rV  r   r   r    sD    






z_ZipWriteFile.close)
r   r   r   r   propertyr!  re  r  r  r[  r   r   rV  r   r\  b  s   

r\  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)rm  wxaz+ZipFile requires mode 'r', 'w', 'x', or 'a'Fr   r-   r?   w+bx+br+bwbxb)rm  rn  ro  rp  rs  rq  rr  r   r-  Trm  )rn  ro  rp  r   z"Mode must be 'r', 'w', 'x', or 'a')'r   r   _allowZip64
_didModifydebugrk  rj  r   r  r,  r   _comment_strict_timestampsr   r~   r   r   str_filePassedrB   r?  rA   r<   r:   getattr_fileRefCnt	threadingRLockr  r0  r  _RealGetContentsr]   ri  r5  r  rE   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 )Nr:  z file=%rz filename=%rz mode=%rr;  r   r   )	r   r   r   r<   r|  r1   rB   r,  r2   r=  r   r   r   r   1  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
 | | }| jdkr|| }td||| || | _|| jd ||}t|}d}||k r|t}	t|	tkrtdtt|	}	|	t tkrtd| jdkr$t|	 ||	t }
|	d }|d	@ rP|
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rtd| q| j}t5| j1dd ddD ]}||_6|j}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$   ry   r   r&   r   totalc                 S   s   | j S r   )rq   )r   r   r   r   <lambda>  r-   z*ZipFile._RealGetContents.<locals>.<lambda>T)keyreverse)7r<   r9   r:   r   rx  printrR   rS   _ECD_COMMENTry  rT   ri  rE   r>   r?  BytesIOsizeCentralDirr0   rF   r/   structCentralDir_CD_SIGNATUREstringCentralDir_CD_FILENAME_LENGTHdecoder
   _CD_EXTRA_FIELD_LENGTHr3   _CD_COMMENT_LENGTHre   _CD_LOCAL_HEADER_OFFSETrq   rZ   rj   rk   rl   rm   rh   rr   rs   rt   MAX_EXTRACT_VERSIONr   rn   ro   rp   ru   rg   r   rj  r1   rk  rB   sortedrv   )r   r<   rW   Zsize_cdZ	offset_cdconcatZinferredrX   r  centdirrB   flagsro  tdZ
end_offsetr   r   r   r   r  ?  s    













zZipFile._RealGetContentsc                 C   s   dd | j D S )Nc                 S   s   g | ]
}|j qS r   r   ).0rX   r   r   r   
<listcomp>  r-   z$ZipFile.namelist.<locals>.<listcomp>rj  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  rj  rg   rB   rt   )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   rm  )rj  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)rk  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   )ry  r   r   r   r   re     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warnry  rw  )r   re   r  r   r   r   re     s    
c                 C   s:   |  |d|}| W  d    S 1 s,0    Y  d S Nrm  rA   r>   )r   r-  r   r<   r   r   r   r>     s    zZipFile.readFforce_zip64c                   sJ  |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}zL|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 ur|% |j& |j$krtd|j#d|jd	@ }
|
r|s j'}|st(d| nd }t)||||dW S    |*   Y n0 d S )N>   rm  rn  zopen() requires mode "r" or "w"r  rn  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   rh   r  ri   r  _open_to_writer  r~  r  rq   r  r  r>   sizeFileHeaderr0   r   rF   r/   r   _FH_SIGNATUREr   _FH_FILENAME_LENGTH_FH_EXTRA_FIELD_LENGTHrm   r   _FH_GENERAL_PURPOSE_FLAG_BITSr  rf   rv   r]   rs   r   r   r   r  )r   r-  r,  r   r  r   Zzef_fileZfheaderfnameZ	fname_strZis_encryptedr   r   r   rA     s    







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)rv  r   r  rs   rr   rm   rh   r   r0  rp   rt   r   r<   rE   ri  r]   rq   _writecheckrw  r  r   r\  )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   extractg  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   r8  r   r   r   
extractallt  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  ro  r   r   r   	<genexpr>  r-   z1ZipFile._sanitize_windows_name.<locals>.<genexpr>c                 s   s   | ]}|r|V  qd S r   r   r  r   r   r   r    r-   )!_windows_illegal_name_trans_tabler{  	maketransr0   	translatesplitr2   )r   r   pathseptableZillegalr   r   r   _sanitize_windows_name  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 )	Nrz   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   rt  )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  rn  ro  rp  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   rk  r  r  r,  r   r<   r   rh   rv  r0   rj  ZIP_FILECOUNT_LIMITrt   r   rq   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?   rn  i    ) r<   r   r  r
   r   rz  r   rs   rr   rh   r   ri   r  r  r0  rE   ri  r]   rq   r   rm   r  rw  rj  r1   rk  rB   r  r   rA   r  r  )r   rB   r   rh   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   rg   r   rz   i  Ar)   r  r  z?Can't write to ZIP archive while an open writing handle exists.rn  )r,  )r   r{  r   r
   r   r   r   rh   r  ri   rB   rp   r<   r   r  r0   rt   r  rA   r  )r   Zzinfo_or_arcnamerX   rh   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,  rw  r  r0  rE   ri  _write_end_recordr  r  r   r   r   r  3  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&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   ry   r$   r   r!   r   r   r&   r    r   )r   r,   Qr   r  zCentral directory offsetzCentral directory sizer  r   r   r   rp  )1rj  rg   rt   r   rs   r1   rq   r3   r8   rF   r   r0   r   rh   r   rb   r   r   r   rk   rZ   r   r  r  rj   rl   rr   re   ro   rp   r<   r  r]   ri  r  rv  r   rL   rK   rI   rG   rH   rS  r`   r_   ry  r,  truncater   )r   r   r   r   r   r3   rt   rs   rq   Z
extra_datar   rk   rZ   rB   rm   r  Zpos2ZcentDirCountZcentDirSizeZcentDirOffsetr  Zzip64endrecZzip64locrecrW   r   r   r   r  I  s    $$
















zZipFile._write_end_recordc                 C   s&   |  j d8  _ | j s"| js"|  d S Nr   )r~  r|  r  r  r   r   r   r    s    zZipFile._fpclose)N)N)rm  N)F)NN)NNN)NNN)NN)#r   r   r   r<   r  r   r   r  r  r   r  r  r  r  r  r  r  rl  re   setterr>   rA   r  r  r  r   r  r  r  r  r  r  r  r  r  r   r   r   r   r     sN   ZQ
			


f
)


*  
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   rm  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   rx  r   r   r  r  r2   isfile_get_codenamer  r  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_compilerx  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   _parents\  s    r  c                 c   s2   |  tj} |  tjr.| V  t| \} }qd S r   )r  	posixpathr   r  )r   tailr   r   r   r  o  s    r  c                 C   s   t t|j| S r   )r  filterfalseset__contains__)ZminuendZ
subtrahendr   r   r   _difference  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   )rU  r  r  ra   r#  )r   r!  rV  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 Nrz   )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+  r[  r   r   rV  r   r    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suppressr5  Z_FastLookup__namesrU  r-  r  r   rV  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/  r5  Z_FastLookup__lookuprU  r-  r$  r   rV  r   r   r$    s    $zFastLookup._name_set)r   r   r   r  r$  r[  r   r   rV  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  r0  r   r   r   r   	  s    zPath.__init__rm  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   r0  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  r0  r  r   r   r   r   r-  0	  s    z	Path.namec                 O   sD   | j dg|R i |}| W  d    S 1 s60    Y  d S r  r  )r   r4  r5  strmr   r   r   	read_text4	  s    zPath.read_textc                 C   s6   |  d}| W  d    S 1 s(0    Y  d S )Nr?   r  )r   r7  r   r   r   
read_bytes8	  s    zPath.read_bytesc                 C   s   t |jd| jdkS r%  )r  r  r0  r  )r   r   r   r   r   	_is_child<	  s    zPath._is_childc                 C   s   t | j|S r   )r   r  )r   r0  r   r   r   _next?	  s    z
Path._nextc                 C   s   | j  p| j dS r%  )r0  endswithr   r   r   r   r   B	  s    zPath.is_dirc                 C   s
   |    S r   )r   r   r   r   r   is_fileE	  s    zPath.is_filec                 C   s   | j | j v S r   )r0  r  r$  r   r   r   r   r  H	  s    zPath.existsc                 C   s.   |   stdt| j| j }t| j|S )NzCan't listdir a file)r   r   r   r;  r  r  filterr:  )r   Zsubsr   r   r   iterdirK	  s    zPath.iterdirc                 C   s   t | jj| jS r   )r  r2   r  rB   r0  r   r   r   r   __str__Q	  s    zPath.__str__c                 C   s   | j j| dS )Nr   )_Path__reprr  r   r   r   r   r   T	  s    zPath.__repr__c                 C   s    t | j|}| | j|S r   )r  r2   r0  r;  r  r&  )r   addnextr   r   r   joinpathW	  s    zPath.joinpathc                 C   s(   t | jd}|r|d7 }| |S r%  )r  r  r0  r  r;  )r   Z	parent_atr   r   r   parent]	  s    zPath.parentN)r   )rm  )r   r   r   rA  r   rA   rl  r-  r8  r9  r:  r;  r   r=  r  r?  r@  r   rD  __truediv__rE  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   )rI  z<output_dir>zExtract zipfile into target dir)nargsrJ  rK  z-cz--create+)z<name>z<file>zCreate zipfile from sourcesz-tz--testzTest if a zipfile is validrm  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   )rd  r   zippathZnmaddToZipr   r   rP  	  s    zmain.<locals>.addToZiprn  r   )argparseArgumentParseradd_mutually_exclusive_groupadd_argument
parse_argstestr   r  r  r  ra   r  r  r  Zcreater2  r~   r   r  r  r  r  )r4  rQ  rG  parsergroupr  rd  Zbadfiler  Zzip_namefilesr   rN  r   rO  r   maine	  s\    





&*
,rZ  __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^   rM   rN   rO   rP   rQ   rR   rS   rd   r  rT   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   rD   rL   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_CENTDIRrh  Structr.   r8   r=   r	   r[   r9   objectr
   r   r   r   r   r   r   r   r  r
  r  r  r@  r   r\  r   r   r  r  dictfromkeysr   r  r  r-  r   rZ  r   r   r   r   r   <module>   sP  









<< ^&
(  KU     | /2 
=
