§
           ã                   óŒ   — 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__© ó    ú&PyInstaller\loader\pyimod01_archive.pyr   r   #   s   € € € € € Ø€Dr   r   c                   óH   — e Zd ZdZdZd
d„Zed„ ¦   «         Zd„ Z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§  € Ø!ˆŒØ)ˆÔàˆŒð ð 	\Ø15×1QÒ1QÐRZÑ1[Ô1[Ñ.ˆDŒN˜DÔ.õ
 �$”. $Ñ'Ô'ð 	.¨2à�GŠG�DÔ&­¬Ñ4Ô4Ð4à—G’G�C Ô 7Ñ8Ô8Ñ9Ô9ˆEØ˜Ô/Ò/ð FÝ&Ð'DÑEÔEÐEð —g’g�cÕ"5Ñ6Ô6Ñ7Ô7ˆGØð I Õ,?Ò!?ð IÝ&Ð'GÑHÔHÐHõ $œ]¨4°·²¸±´Ñ<Ô<ˆNˆJ˜ð �GŠG�DÔ&¨Ñ3µR´[ÑAÔAÐAÝ�GœL¨Ñ,Ô,Ñ-Ô-ˆDŒHð%	.ð 	.ð 	.ñ 	.ô 	.ð 	.ð 	.ð 	.ð 	.ð 	.ð 	.ð 	.øøøð 	.ð 	.ð 	.ð 	.ð 	.ð 	.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Œ   € ð
 ˆà�nŠn˜SÑ!Ô!ˆØ�"Š9ð 	$Ø˜VÐ#Ð#ð	Ý˜ #¨¡' ( (Ô+Ñ,Ô,ˆFØ   ”~ˆHˆHøÝð 	ð 	ð 	àˆDð	øøøð ˜ÐÐs   £$A Á
AÁAc                 ój   — | j                              |¦  «        }|€dS |\  }}}|t          t          fv S )zj
        Check if the given name refers to a package entry. Used by PyiFrozenImporter at runtime.
        NF)r   ÚgetÚPYZ_ITEM_PKGÚPYZ_ITEM_NSPKG)r$   ÚnameÚentryÚtypecodeÚentry_offsetÚentry_lengths         r   Ú
is_packagezZlibArchiveReader.is_packagec   s@   € ð ”—’˜TÑ"Ô"ˆØð 	Ø�5Ø/4Ñ,ˆ�, Ø�L­.Ð9Ð9Ð9r   c                 ó`   — | j                              |¦  «        }|€dS |\  }}}|t          k    S )zt
        Check if the given name refers to a namespace package entry. Used by PyiFrozenImporter at runtime.
        NF)r   r7   r9   )r$   r:   r;   r<   r=   r>   s         r   Úis_pep420_namespace_packagez-ZlibArchiveReader.is_pep420_namespace_packagem   s;   € ð ”—’˜TÑ"Ô"ˆØð 	Ø�5Ø/4Ñ,ˆ�, Ø�>Ò)Ð)r   c                 ó*  — | j                              |¦  «        }|€dS |\  }}}	 t          | j        d¦  «        5 }|                     | j        |z   ¦  «         |                     |¦  «        }ddd¦  «         n# 1 swxY w Y   n%# t          $ r t          | j        › d�¦  «        ‚w xY w	 t          j
        |¦  «        }|t          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.
        Nr   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   r7   r   r   r   r   r   ÚFileNotFoundErrorÚ
SystemExitÚzlibÚ
decompressÚPYZ_ITEM_MODULEr8   r9   r"   ÚloadsÚEOFErrorÚImportError)
r$   r:   Úrawr;   r<   r=   r>   r(   ÚobjÚes
             r   ÚextractzZlibArchiveReader.extractw   s”  € ð ”—’˜TÑ"Ô"ˆØð 	Ø�4Ø/4Ñ,ˆ�, ð	Ý�d”n dÑ+Ô+ð ,¨rØ—’˜Ô*¨\Ñ9Ñ:Ô:Ð:Ø—g’g˜lÑ+Ô+�ð,ð ,ð ,ñ ,ô ,ð ,ð ,ð ,ð ,ð ,ð ,øøøð ,ð ,ð ,ð ,øøõ !ð 		ð 		ð 		õ Ø”>ð Lð Lð Lñô ð ð		øøøð	QÝ”/ #Ñ&Ô&ˆCØ�O­\½>ÐJÐJð )ÐSVð )Ý”m CÑ(Ô(�øøÝð 	Qð 	Qð 	QÝÐH¸tÐHÐHÐHÑIÔIÈqÐPøøøøð	Qøøøð ˆ
sG   ¦B »3A:Á.B Á:A>Á>B ÂA>ÂB Â"B(Â,A C- Ã-
DÃ7DÄD)NF)F)r   r	   r
   Ú__doc__r   r-   Ústaticmethodr   r?   rA   rO   r   r   r   r   r   '   sˆ   € € € € € ðð ð "Ðð.ð .ð .ð .ðB ð ð  ñ „\ð ð&:ð :ð :ð*ð *ð *ð$ð $ð $ð $ð $ð $r   r   )r   r   r"   rF   Ú_frozen_importlibÚ_bootstrap_externalÚMAGIC_NUMBERr   rH   r8   ÚPYZ_ITEM_DATAr9   ÚRuntimeErrorr   r   r   r   r   ú<module>rW      sÁ   ðð" 
€	€	€	Ø €€€Ø €€€Ø €€€ð Ð Ð Ð à'Ô;ÔHÐ ð €Ø€Ø€Ø€ð	ð 	ð 	ð 	ð 	�|ñ 	ô 	ð 	ðtð tð tð tð tñ tô tð tð tð tr   