Ë
    !¬Ÿbt:  ã                   óü  — d 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mZmZm	Z	m
Z
mZmZ eZ G d„ de«      Z G d„ d«      Zi Zd„ Zd9d
„Zd9d„Zd9d„ZddlmZ  ej2                  «       Zej                  Zd„ Zd„ Zd„ Z	 ddlm Z  d„ Z!d„ Z#ejH                  Z$ee$_%        ege$_&        ejN                  Z'de'_%        ege'_&        ejP                  Z(ee(_%        ege(_&        ejR                  Z)ee)_%        ege)_&        ejT                  Z+ee+_%        eege+_&        ee+_,        d„ Z*ejZ                  Z.ee._%        ee
e	ge._&        ee._,        d„ Z-ej^                  Z/ee/_%        eege/_&        ee/_,        ej^                  Z0ee0_%        eege0_&        ee0_,        d„ Z/ejb                  Z2ee2_%        eege2_&        ee2_,        d„ Z1ejf                  Z3ee3_%        eege3_&        ejh                  Z4ee4_%        eege4_&        ejj                  Z5ee5_%        eege5_&        d	Z6 e7ed«      r_ e7ed«      rVdZ6ejp                  Z9ee9_%        ee ee	«      ge9_&        ee9_,        ejt                  Z;ee;_%        ee ee	«      ge;_&        ee;_,        d„ Z8d„ Z:d	Z< e7ed«      rdZ<ejz                  Z=ee=_%        g e=_&        d „ Z>dZ?dZ@d!ZAd"ZBd#ZCd$ZDd%ZEd$ZFd&ZGd'ZHd(ZId)ZJd*ZKd+ZLd,ZMd-ZNd.ZOd/ZPd0ZQd1ZRd2ZSd3ZTd4ZUdZVdZWd!ZXd5ZYd"ZZd6Z[d7Z\d8„ Z] e] e^«       «       y# e"$ r d„ Z!Y �Œqw xY w):ai  
magic is a wrapper around the libmagic file identification library.

See README for more information.

Usage:

>>> import magic
>>> magic.from_file("testdata/test.pdf")
'PDF document, version 1.2'
>>> magic.from_file("testdata/test.pdf", mime=True)
'application/pdf'
>>> magic.from_buffer(open("testdata/test.pdf").read(1024))
'PDF document, version 1.2'
>>>

é    N)Úc_char_pÚc_intÚc_size_tÚc_void_pÚbyrefÚPOINTERc                   ó   ‡ — e Zd Zˆ fd„Zˆ xZS )ÚMagicExceptionc                 ó:   •— t         t        | �  |«       || _        y ©N)ÚsuperÚ	ExceptionÚ__init__Úmessage)Úselfr   Ú	__class__s     €ú0/usr/lib/python3/dist-packages/magic/__init__.pyr   zMagicException.__init__!   s   ø€ ÜŒi˜Ñ'¨Ô0Øˆ�ó    )Ú__name__Ú
__module__Ú__qualname__r   Ú__classcell__)r   s   @r   r
   r
       s   ø„ ÷ð r   r
   c                   óF   — e Zd ZdZ	 	 dd„Zd„ Zd„ Zd„ Zd„ Zd„ Z	d	„ Z
d
„ Zy)ÚMagicz;
    Magic is a wrapper around the libmagic C library.
    Nc                 ó˜  — t         | _        |r| xj                  t        z  c_        |r| xj                  t        z  c_        |r| xj                  t        z  c_        |r| xj                  t
        z  c_        |r| xj                  t        z  c_        |r| xj                  t        z  c_        t        | j                  «      | _	        t        j                  «       | _        t        | j                  |«       |rt        rt        «       dk  rt!        d«      ‚t"        r	 | j%                  t&        d«       yy# t(        $ r
}Y d}~yd}~ww xY w)a  
        Create a new libmagic wrapper.

        mime - if True, mimetypes are returned instead of textual descriptions
        mime_encoding - if True, codec is returned
        magic_file - use a mime database other than the system default
        keep_going - don't stop at the first match, keep going
        uncompress - Try to look inside compressed files.
        raw - Do not try to decode "non-printable" chars.
        extension - Print a slash-separated list of valid extensions for the file type found.
        i  z<MAGIC_EXTENSION is not supported in this version of libmagicé@   N)Ú
MAGIC_NONEÚflagsÚMAGIC_MIME_TYPEÚMAGIC_MIME_ENCODINGÚMAGIC_CONTINUEÚMAGIC_COMPRESSÚ	MAGIC_RAWÚMAGIC_EXTENSIONÚ
magic_openÚcookieÚ	threadingÚLockÚlockÚ
magic_loadÚ_has_versionÚversionÚNotImplementedErrorÚ
_has_paramÚsetparamÚMAGIC_PARAM_NAME_MAXr
   )	r   ÚmimeÚ
magic_fileÚmime_encodingÚ
keep_goingÚ
uncompressÚrawÚ	extensionÚes	            r   r   zMagic.__init__+   sî   € ô  ˆŒ
ÙØ�JŠJœ/Ñ)�JÙØ�JŠJÔ-Ñ-�JÙØ�JŠJœ.Ñ(�JÙØ�JŠJœ.Ñ(�JÙØ�JŠJœ)Ñ#�JÙØ�JŠJœ/Ñ)�Jä  §¡Ó,ˆŒÜ—N‘NÓ$ˆŒ	ä�4—;‘; 
Ô+ñ �l¬g«i¸#ªoÜ%Ð&dÓeÐeõ ðØ—‘Ô2°BÕ7ð øô "ò ô ûðús   ÄD6 Ä6	E	ÅE	c                 óJ  — | j                   5  	 t        |«      t        k(  r t        t        k7  r|j	                  dd¬«      }t        t        | j                  |«      «      cddd«       S # t        $ r$}| j                  |«      cY d}~cddd«       S d}~ww xY w# 1 sw Y   yxY w)z0
        Identify the contents of `buf`
        úutf-8Úreplace)ÚerrorsN)
r)   ÚtypeÚstrÚbytesÚencodeÚmaybe_decodeÚmagic_bufferr&   r
   Ú_handle509Bug)r   Úbufr8   s      r   Úfrom_bufferzMagic.from_buffer^   s�   € ð �Y‰Yñ 
	-ð	-ô
 ˜“9¤Ò#¬¬uªØŸ*™* W°Y˜*Ó?�CÜ#¤L°·±¸cÓ$BÓC÷
	-ñ 
	-øô "ò -Ø×)Ñ)¨!Ó,Ô,÷
	-ñ 
	-ûð-ú÷
	-ð 
	-ús5   �B�AA)Á)	BÁ2BÂBÂBÂBÂBÂB"c                 ó(  — t        |«      5  	 d d d «       | j                  5  	 t        t        | j                  |«      «      cd d d «       S # 1 sw Y   Œ?xY w# t
        $ r$}| j                  |«      cY d }~cd d d «       S d }~ww xY w# 1 sw Y   y xY wr   )Ú
_real_openr)   rA   r2   r&   r
   rC   )r   Úfilenamer8   s      r   Ú	from_filezMagic.from_filen   s‰   € ä˜Ó!ñ 	Ø÷	ð �Y‰Yñ 	-ð-Ü#¤J¨t¯{©{¸HÓ$EÓF÷	-ñ 	-÷	ð 	ûô "ò -Ø×)Ñ)¨!Ó,Ô,÷		-ñ 	-ûð-ú÷	-ð 	-ús?   ŒA¢B¤AÁAÁ	BÁ!B Á1BÁ2BÂ BÂBÂBc                 óæ   — | j                   5  	 t        t        | j                  |«      «      cd d d «       S # t        $ r$}| j                  |«      cY d }~cd d d «       S d }~ww xY w# 1 sw Y   y xY wr   )r)   rA   Úmagic_descriptorr&   r
   rC   )r   Úfdr8   s      r   Úfrom_descriptorzMagic.from_descriptory   si   € Ø�Y‰Yñ 	-ð-Ü#Ô$4°T·[±[À"Ó$EÓF÷	-ñ 	-øô "ò -Ø×)Ñ)¨!Ó,Ô,÷		-ñ 	-ûð-ú÷	-ð 	-ús2   �A'�7·	A$Á AÁA$ÁA'ÁA$Á$A'Á'A0c                 óF   — |j                   €| j                  t        z  ry|‚)Nzapplication/octet-stream)r   r   r   )r   r8   s     r   rC   zMagic._handle509Bug€   s!   € ð �9‰9Ð $§*¡*¬Ò">Ø-àˆGr   c                 ó0   — t        | j                  ||«      S r   )Úmagic_setparamr&   )r   ÚparamÚvals      r   r/   zMagic.setparam‰   s   € Ü˜dŸk™k¨5°#Ó6Ð6r   c                 ó.   — t        | j                  |«      S r   )Úmagic_getparamr&   )r   rQ   s     r   ÚgetparamzMagic.getparamŒ   s   € Ü˜dŸk™k¨5Ó1Ð1r   c                 ó~   — t        | d«      r1| j                  r$t        rt        | j                  «       d | _        y y y y )Nr&   )Úhasattrr&   Úmagic_close)r   s    r   Ú__del__zMagic.__del__�   s4   € ô �4˜Ô" t§{¢{µ{Ü˜Ÿ™Ô$ØˆD�Kð 8C {Ð"r   )FNFFFFF)r   r   r   Ú__doc__r   rE   rI   rM   rC   r/   rU   rY   © r   r   r   r   &   s:   „ ñð CHØJOó1òf-ò 	-ò-òò7ò2ór   r   c                 ó^   — t         j                  | «      }|€t        | ¬«      x}t         | <   |S )N)r1   )Ú
_instancesÚgetr   )r1   Úis     r   Ú_get_magic_typer`   ¢   s.   € Ü�‰�tÓ€AØ€yÜ$¨$Ô/Ð/ˆŒJ�tÑØ€Hr   Fc                 ó:   — t        |«      }|j                  | «      S )zä"
    Accepts a filename and returns the detected filetype.  Return
    value is the mimetype if mime=True, otherwise a human readable
    name.

    >>> magic.from_file("testdata/test.pdf", mime=True)
    'application/pdf'
    )r`   rI   )rH   r1   Úms      r   rI   rI   ©   s   € ô 	˜Ó€AØ�;‰;�xÓ Ð r   c                 ó:   — t        |«      }|j                  | «      S )zú
    Accepts a binary string and returns the detected filetype.  Return
    value is the mimetype if mime=True, otherwise a human readable
    name.

    >>> magic.from_buffer(open("testdata/test.pdf").read(1024))
    'PDF document, version 1.2'
    )r`   rE   )Úbufferr1   rb   s      r   rE   rE   ¶   s   € ô 	˜Ó€AØ�=‰=˜Ó Ð r   c                 ó:   — t        |«      }|j                  | «      S )a  
    Accepts a file descriptor and returns the detected filetype.  Return
    value is the mimetype if mime=True, otherwise a human readable
    name.

    >>> f = open("testdata/test.pdf")
    >>> magic.from_descriptor(f.fileno())
    'PDF document, version 1.2'
    )r`   rM   )rL   r1   rb   s      r   rM   rM   Ã   s   € ô 	˜Ó€AØ×Ñ˜RÓ Ð r   é   )Úloaderc                 ó<   — | €t        |d   «      }t        |«      ‚| S )Nr   ©Úmagic_errorr
   ©ÚresultÚfuncÚargsÚerrs       r   Úerrorcheck_nullrp   Ö   s%   € Ø€~Ü˜$˜q™'Ó"ˆÜ˜SÓ!Ð!àˆr   c                 óB   — | dk(  rt        |d   «      }t        |«      ‚| S )Néÿÿÿÿr   ri   rk   s       r   Úerrorcheck_negative_oners   Þ   s'   € Ø�‚|Ü˜$˜q™'Ó"ˆÜ˜SÓ!Ð!àˆr   c                 óD   — t         t        k(  r| S | j                  dd«      S )Nr:   Úbackslashreplace)r>   r?   Údecode)Úss    r   rA   rA   è   s"   € ä
Œe‚|Øˆð �x‰x˜Ð!3Ó4Ð4r   )ÚPathLikec                 óF   — t        | t        «      r| j                  «       S | S r   )Ú
isinstancerx   Ú
__fspath__©rH   s    r   Úunpathr}   ô   s    € Ü�h¤Ô)Ø×&Ñ&Ó(Ð(àˆOr   c                 ó   — | S r   r[   r|   s    r   r}   r}   ú   s   € Øˆr   c                 óî   — | €y t        | «      } t        j                  d   dk  xr t        | t        «      xs( t        j                  d   dk\  xr t        | t
        «      }|r| j                  dd«      S | S )Nr   é   é   r:   Úsurrogateescape)r}   ÚsysÚversion_inforz   Úunicoder>   r@   )rH   Ú
is_unicodes     r   Úcoerce_filenamer‡   ý   s�   € ØÐØä�hÓ€Hô ×"Ñ" 1Ñ%¨Ñ*ò /Ü˜H¤gÓ.ò-ä×"Ñ" 1Ñ%¨Ñ*ò ,Ü˜X¤sÓ+ð ñ Ø�‰˜wÐ(9Ó:Ð:àˆr   c                 ó,   — t        | t        |«      «      S r   )Ú_magic_filer‡   ©r&   rH   s     r   r2   r2   (  ó   € Ü�vœ¨xÓ8Ó9Ð9r   c                 ó.   — t        | |t        |«      «      S r   )Ú_magic_bufferÚlen)r&   rD   s     r   rB   rB   2  s   € Ü˜ ¤c¨#£hÓ/Ð/r   c                 ó   — t        | |«      S r   )Ú_magic_descriptor)r&   rL   s     r   rK   rK   A  s   € Ü˜V RÓ(Ð(r   c                 ó,   — t        | t        |«      «      S r   )Ú_magic_loadr‡   rŠ   s     r   r*   r*   K  r‹   r   rP   rT   Tc                 óf   — t         st        d«      ‚t        |«      }t        | |t	        |«      «      S )Nzmagic_setparam not implemented)r.   r-   r   Ú_magic_setparamr   )r&   rQ   rR   Úvs       r   rP   rP   i  s-   € ÝÜ!Ð"BÓCÐCÜ�‹€AÜ˜6 5¬%°«(Ó3Ð3r   c                 ó|   — t         st        d«      ‚t        «       }t        | |t	        |«      «       |j
                  S )Nzmagic_getparam not implemented)r.   r-   r   Ú_magic_getparamr   Úvalue)r&   rQ   rR   s      r   rT   rT   p  s2   € ÝÜ!Ð"BÓCÐCÜ
‹*€CÜ�F˜E¤5¨£:Ô.Ø�9‰9Ðr   Úmagic_versionc                  ó8   — t         st        d«      ‚t        «       S )Nzmagic_version not implemented)r+   r-   r™   r[   r   r   r,   r,   €  s   € ÝÜ!Ð"AÓBÐBÜ‹?Ðr   r€   é   é   é   i   i   é    r   é€   é   i   i   i    i @  i €  i   i   i   i   i   r�   é   é   c                 ó^  ‡
— dd l Š
dd l}ddlm} ˆ
fd„}g d¢}|D ]  } ||j                  |   «      | |<   Œ |j                  d«      }t        dg«      }|j                  j                  «       D ]<  \  }}	|j                  |«      sŒ|| v r||v rŒ!| |   |	k7  rt        d|z   «      ‚Œ8|	| |<   Œ> y )Nr   )Úcompatc                 ó   •‡ — ˆ ˆfd„}|S )Nc                  ó@   •— ‰j                  dt        «        ‰| i |¤ŽS )Nz…Using compatibility mode with libmagic's python binding. See https://github.com/ahupp/python-magic/blob/master/COMPAT.md for details.)ÚwarnÚPendingDeprecationWarning)rn   ÚkwargsÚfnÚwarningss     €€r   Ú_z3_add_compat.<locals>.deprecation_wrapper.<locals>._´  s*   ø€ Ø�M‰Mð_ä)ô+ñ
 �tÐ&˜vÑ&Ð&r   r[   )rª   r¬   r«   s   ` €r   Údeprecation_wrapperz(_add_compat.<locals>.deprecation_wrapper³  s   ù€ õ	'ð ˆr   )Údetect_from_filenameÚdetect_from_contentÚdetect_from_fobjÚopenz	^[A-Z_]+$Ú
MAGIC_MIMEzinconsistent value for )
r«   ÚreÚmagicr¤   Ú__dict__ÚcompileÚsetÚitemsÚmatchr   )Ú	to_moduler³   r¤   r­   rª   ÚfnameÚis_const_reÚallowed_inconsistentÚnamer˜   r«   s             @r   Ú_add_compatr¿   ¯  sÈ   ø€ ßÝô	ò
€Bð ò GˆÙ.¨v¯©¸uÑ/EÓFˆ	�%ÒðGð —*‘*˜[Ó)€KÜ ˜~Ó.ÐØ—‘×,Ñ,Ó.ò 
(‰ˆˆeØ×Ñ˜TÕ"Ø�yÑ ØÐ/Ñ/ØØ˜T‘? eÒ+Ü#Ð$=ÀÑ$DÓEÐEàà"'�	˜$’ñ
(r   )F)_rZ   rƒ   ÚglobÚctypesÚctypes.utilr'   Úloggingr   r   r   r   r   r   r±   rG   r   r
   r   r]   r`   rI   rE   rM   Ú rg   Úload_libÚlibmagicÚmagic_trp   rs   rA   Úosrx   r}   ÚImportErrorr‡   r%   ÚrestypeÚargtypesrX   rj   Úmagic_errnor2   r‰   ÚerrcheckrB   r�   rK   r�   r*   r’   Úmagic_setflagsÚmagic_checkÚmagic_compiler.   rW   rP   r”   rT   r—   r+   r™   r,   r   ÚMAGIC_DEBUGÚMAGIC_SYMLINKr"   ÚMAGIC_DEVICESr   r    r²   r$   r!   ÚMAGIC_CHECKÚMAGIC_PRESERVE_ATIMEr#   ÚMAGIC_ERRORÚMAGIC_NO_CHECK_COMPRESSÚMAGIC_NO_CHECK_TARÚMAGIC_NO_CHECK_SOFTÚMAGIC_NO_CHECK_APPTYPEÚMAGIC_NO_CHECK_ELFÚMAGIC_NO_CHECK_ASCIIÚMAGIC_NO_CHECK_TROFFÚMAGIC_NO_CHECK_FORTRANÚMAGIC_NO_CHECK_TOKENSÚMAGIC_PARAM_INDIR_MAXr0   ÚMAGIC_PARAM_ELF_PHNUM_MAXÚMAGIC_PARAM_ELF_SHNUM_MAXÚMAGIC_PARAM_ELF_NOTES_MAXÚMAGIC_PARAM_REGEX_MAXÚMAGIC_PARAM_BYTES_MAXr¿   Úglobalsr[   r   r   ú<module>rç      sò  ðñó$ Û Û Û Û Û ç F× Fð €
ô�Yô ÷vñ vðr €
òó
!ó
!ó!õ Øˆ6�?‰?Ó€à
�/‰/€òòò5ð	Ýòòð* × Ñ €
Ø€
Ô Ø�g€
Ô à×"Ñ"€Ø€Ô Ø�y€Ô à×"Ñ"€Ø€Ô Ø�y€Ô à×"Ñ"€Ø€Ô Ø�y€Ô à×!Ñ!€Ø€Ô Ø Ð*€Ô Ø&€Ô ò:ð ×%Ñ%€Ø €Ô Ø! 8¨XÐ6€Ô Ø(€Ô ò0ð ×,Ñ,Ð Ø#Ð Ô Ø$ eÐ,Ð Ô Ø+Ð Ô à×-Ñ-Ð Ø$Ð Ô Ø% uÐ-Ð Ô Ø,Ð Ô ò)ð ×!Ñ!€Ø€Ô Ø Ð*€Ô Ø.€Ô ò:ð ×(Ñ(€Ø€Ô Ø" EÐ*€Ô à×"Ñ"€Ø€Ô Ø Ð*€Ô à×&Ñ&€Ø€Ô Ø! 8Ð,€Ô à€
Ù
ˆ8Ð%Ô&©7°8Ð=MÔ+NØ€JØ×-Ñ-€OØ#€OÔØ '¨±¸Ó0AÐB€OÔØ6€OÔà×-Ñ-€OØ#€OÔØ '¨±¸Ó0AÐB€OÔØ6€OÔò4òð €Ù
ˆ8�_Ô%Ø€LØ×*Ñ*€MØ!€MÔØ€MÔòð €
Ø€Ø€Ø€Ø€Ø€ØÐ ð €
Ø€à€Ø€ØÐ Ø€	Ø€à"Ð ØÐ ØÐ Ø!Ð ØÐ ØÐ ØÐ Ø!Ð Ø Ð àÐ ØÐ ØÐ ØÐ ØÐ ØÐ ØÐ ò#(ñL ‰G‹IÕ øðy ò õðús   Â 	K/ Ë/K;Ë:K;