
                                  d dl Z d dlZd dlZd dlZd dlZej        j        Zd ZdZ	dZ
dZ G d de          Z G d d          ZdS )	    N         c                       e Zd ZdS )ArchiveReadErrorN)__name__
__module____qualname__     pyimod01_archive.pyr   r   #   s        Dr   r   c                   <    e Zd ZdZdZddZed             Zd	dZdS )
ZlibArchiveReaderz
    Reader for PyInstaller's PYZ (ZlibArchive) archive. The archive is used to store collected byte-compiled Python
    modules, as individually-compressed entries.
    s   PYZ NFc                    || _         || _        i | _        |"|                     |          \  | _         | _        t	          | j         d          5 }|                    | j        t          j                   |                    t          | j
                            }|| j
        k    rt          d          |                    t          t                              }|r|t          k    rt          d          t          j        d|                    d                    ^}}|                    | j        |z   t          j                   t          t!          j        |                    | _        d d d            d S # 1 swxY w Y   d S )NrbzPYZ magic pattern mismatch!zPython magic pattern mismatch!z!i   )	_filename_start_offsettoc_parse_offset_from_filenameopenseekosSEEK_SETreadlen_PYZ_MAGIC_PATTERNr   PYTHON_MAGIC_NUMBERstructunpackdictmarshalload)	selffilenamestart_offsetcheck_pymagicfpmagicpymagic
toc_offset_s	            r   __init__zZlibArchiveReader.__init__.   s   !) 151Q1QRZ1[1[.DND.
 $.$'' 	.2GGD&444GGC 78899E///&'DEEE ggc"56677G I,?!?!?&'GHHH $]4<<NJ GGD&3R[AAAGL,,--DH%	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.s   D"E>>FFc                     d}|                      d          }|dk    r| |fS 	 t          | |dz   d                   }| d|         } n# t          $ r Y nw xY w| |fS )z\
        Parse the numeric offset from filename, stored as: `/path/to/file?offset`.
        r   ?r   N)rfindint
ValueError)r%   offsetidxs      r   r   z-ZlibArchiveReader._parse_offset_from_filenameO   s    
 nnS!!"99V##	#'((+,,F~HH 	 	 	D	 s   $A 
AAc                 \   | j                             |          }|t          d|d          |\  }}}|t          k    rdS 	 t	          | j        d          5 }|                    | j        |z              |                    |          }ddd           n# 1 swxY w Y   n&# t          $ r t          d| j         d          w xY w	 t          j        |          }|t          t          fv r|st          j        |          }n&# t"          $ r}	t%          d|d          |	d}	~	ww xY w|S )	z
        Extract data from entry with the given name.

        If the entry belongs to a module or a package, the data is loaded (unmarshaled) into code object. To retrieve
        raw data, set `raw` flag to True.
        NzNo entry named z found in the archive!r   zERROR: z appears to have been moved or deleted since this application was launched. Continouation from this state is impossible. Exiting now.zFailed to unmarshal PYZ entry !)r   getKeyErrorPYZ_ITEM_NSPKGr   r   r   r   r   FileNotFoundError
SystemExitzlib
decompressPYZ_ITEM_MODULEPYZ_ITEM_PKGr"   loadsEOFErrorImportError)
r$   namerawentrytypecodeentry_offsetentry_lengthr(   objes
             r   extractzZlibArchiveReader.extractc   s    T""=KTKKKLLL/4,, ~%%4	dnd++ ,r*\9:::ggl++, , , , , , , , , , , , , , , ! 		 		 		 L$. L L L  			Q/#&&CO\:::3:mC(( 	Q 	Q 	QHtHHHIIqP	Q 
sH   B$ 3BB$ BB$ B B$ $#C:D 
D)D$$D))NF)F)	r   r	   r
   __doc__r   r-   staticmethodr   rL   r   r   r   r   r   '   sj          ". . . .B     \ &) ) ) ) ) )r   r   )r   r   r"   r=   _frozen_importlib_bootstrap_externalMAGIC_NUMBERr   r?   r@   PYZ_ITEM_DATAr:   RuntimeErrorr   r   r   r   r   <module>rT      s   " 
			       ';H  	 	 	 	 	| 	 	 	e e e e e e e e e er   