o
    *ήcnB                     @   s  d dl mZ d dlZddlmZ G dd deZG dd deZG d	d
 d
eZG dd deZG dd deZ	G dd deZ
G dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd  d eZG d!d" d"eZG d#d$ d$eZG d%d& d&eZG d'd( d(eZG d)d* d*eZG d+d, d,eZG d-d. d.eZG d/d0 d0eZG d1d2 d2eZG d3d4 d4eZG d5d6 d6eZG d7d8 d8eZG d9d: d:eZG d;d< d<eZ G d=d> d>eZ!dS )?    )absolute_importN   )Typec                       0   e Zd ZdZdZdZ fddZdd Z  ZS )Epubz3
    Implements the EPUB archive type matcher.
    zapplication/epub+zipepubc                       t t| jtjtjd d S N)mime	extension)superr   __init__MIME	EXTENSIONself	__class__ =/tmp/pip-target-vg8gfxp4/lib/python/filetype/types/archive.pyr         

zEpub.__init__c                 C   s  t |dko|d dko|d dko|d dko|d dko|d	 d
ko|d dko|d d
ko|d dko|d dko|d dko|d dko|d dko|d dko|d dko|d dko|d dko|d dko|d dko|d  dko|d! dko|d" dko|d# d$ko|d% d&ko|d' d#ko|d( dko|d) dko|d* d+ko|d, d-ko|d. dko|d/ d0ko|d1 dko|d dkS )2N9   r   P   r   K               m      i       !   e   "   t   #   y   $   p   %   &   a   '   (   )   l   *   +   c   ,   -   .   /   o   0   n   1   2   3   4   u   5   b   6   7   z   8   lenr   bufr   r   r   match   s   
















	
	















z
Epub.match	__name__
__module____qualname____doc__r   r   r   rJ   __classcell__r   r   r   r   r   
       r   c                       r   )Zipz2
    Implements the Zip archive type matcher.
    zapplication/zipzipc                    r   r	   )r   rR   r   r   r   r   r   r   r   r   2   r   zZip.__init__c                 C   sl   t |dko5|d dko5|d dko5|d dkp#|d dkp#|d dko5|d d	kp5|d d
kp5|d dkS )Nr   r   r   r   r   r         r         rF   rH   r   r   r   rJ   8   s   



z	Zip.matchrK   r   r   r   r   rR   +   rQ   rR   c                       r   )Tarz2
    Implements the Tar archive type matcher.
    zapplication/x-tartarc                    r   r	   )r   rX   r   r   r   r   r   r   r   r   H   r   zTar.__init__c                 C   H   t |dko#|d dko#|d dko#|d dko#|d d	ko#|d d
kS )Ni  i  r?   i  s   i  r%   i  r,   r   rF   rH   r   r   r   rJ   N      




z	Tar.matchrK   r   r   r   r   rX   A   rQ   rX   c                       r   )Rarz2
    Implements the RAR archive type matcher.
    zapplication/x-rar-compressedrarc                    r   r	   )r   r^   r   r   r   r   r   r   r   r   ^   r   zRar.__init__c                 C   sl   t |dko5|d dko5|d dko5|d dko5|d d	ko5|d
 dko5|d dko5|d dkp5|d dkS )NrV   r   R   r   r,   r   r\   r   r"   r      rT   rU   rF   rH   r   r   r   rJ   d   s    






z	Rar.matchrK   r   r   r   r   r^   W   rQ   r^   c                       r   )Gzz1
    Implements the GZ archive type matcher.
    zapplication/gzipgzc                    r   r	   )r   rb   r   r   r   r   r   r   r   r   w   r   zGz.__init__c                 C   0   t |dko|d dko|d dko|d dkS )Nr   r   r   r      rW   rF   rH   r   r   r   rJ   }      


zGz.matchrK   r   r   r   r   rb   p   rQ   rb   c                       r   )Bz2z2
    Implements the BZ2 archive type matcher.
    zapplication/x-bzip2bz2c                    r   r	   )r   rg   r   r   r   r   r   r   r   r      r   zBz2.__init__c                 C   rd   )Nr   r   B   r   Z   h   rF   rH   r   r   r   rJ      rf   z	Bz2.matchrK   r   r   r   r   rg      rQ   rg   c                       r   )SevenZz:
    Implements the SevenZ (7z) archive type matcher.
    zapplication/x-7z-compressed7zc                    r   r	   )r   rl   r   r   r   r   r   r   r   r      r   zSevenZ.__init__c                 C   sT   t |dko)|d dko)|d dko)|d dko)|d d	ko)|d
 dko)|d dkS )NrT   r   rC   r   rD   r      r      r   r-      rF   rH   r   r   r   rJ         





zSevenZ.matchrK   r   r   r   r   rl      rQ   rl   c                       r   )Pdfz2
    Implements the PDF archive type matcher.
    zapplication/pdfpdfc                    r   r	   )r   rr   r   r   r   r   r   r   r   r      r   zPdf.__init__c                 C   sx   t |dkr|d dkr|d dkr|d dkr|dd  }t |dko;|d dko;|d d	ko;|d d
ko;|d dkS )Nr   r      r      r      r*   r   D   F   rF   rH   r   r   r   rJ      s"   






z	Pdf.matchrK   r   r   r   r   rr      rQ   rr   c                       r   )Exez2
    Implements the EXE archive type matcher.
    zapplication/x-msdownloadexec                    r   r	   )r   ry   r   r   r   r   r   r   r   r      r   zExe.__init__c                 C   $   t |dko|d dko|d dkS )Nr   r   M   rj   rF   rH   r   r   r   rJ      
   

z	Exe.matchrK   r   r   r   r   ry      rQ   ry   c                       r   )Swfz2
    Implements the SWF archive type matcher.
    zapplication/x-shockwave-flashswfc                    r   r	   )r   r~   r   r   r   r   r   r   r   r      r   zSwf.__init__c                 C   s<   t |dko|d dkp|d dko|d dko|d dkS )Nr   r   C   rx   r   W   S   rF   rH   r   r   r   rJ      s   


z	Swf.matchrK   r   r   r   r   r~      rQ   r~   c                       r   )Rtfz2
    Implements the RTF archive type matcher.
    zapplication/rtfrtfc                    r   r	   )r   r   r   r   r   r   r   r   r   r      r   zRtf.__init__c                 C   rZ   )Nr   r   {   r   \   r   r\   r   r%   f   rF   rH   r   r   r   rJ      r]   z	Rtf.matchrK   r   r   r   r   r      rQ   r   c                       r   )Nesz2
    Implements the NES archive type matcher.
    zapplication/x-nintendo-nes-romnesc                    r   r	   )r   r   r   r   r   r   r   r   r   r     r   zNes.__init__c                 C   <   t |dko|d dko|d dko|d dko|d dkS )	Nr   r   N   r   E   r   r   ra   rF   rH   r   r   r   rJ        



z	Nes.matchrK   r   r   r   r   r   	  rQ   r   c                       r   )Crxz2
    Implements the CRX archive type matcher.
    z%application/x-google-chrome-extensioncrxc                    r   r	   )r   r   r   r   r   r   r   r   r   r   %  r   zCrx.__init__c                 C   r   )	Nr   r   r   r   r\   r   r<   r>   rF   rH   r   r   r   rJ   +  r   z	Crx.matchrK   r   r   r   r   r     rQ   r   c                       r   )Cabz2
    Implements the CAB archive type matcher.
    z!application/vnd.ms-cab-compressedcabc                    r   r	   )r   r   r   r   r   r   r   r   r   r   :  r   zCab.__init__c                 C   sl   t |dko5|d dkr|d dkr|d dkr|d dkp5|d d	ko5|d dko5|d d
ko5|d dkS )Nr   r   r|   r   r   r   r   rx   I   r3   r.   rF   rH   r   r   r   rJ   @  s   





z	Cab.matchrK   r   r   r   r   r   3  rQ   r   c                       r   )Eotz2
    Implements the EOT archive type matcher.
    zapplication/octet-streameotc                    r   r	   )r   r   r   r   r   r   r   r   r   r   S  r   zEot.__init__c                 C   s   t |dkoG|d dkoG|d dkoG|d dkr$|d dkr$|d	 d
kpG|d d
ko5|d dko5|d	 dkpG|d dkoG|d dkoG|d	 dkS )Nr&   r$   L   r   rW   r   	   r   
   r   rF   rH   r   r   r   rJ   Y  s(   







z	Eot.matchrK   r   r   r   r   r   L  rQ   r   c                       r   )Psz1
    Implements the PS archive type matcher.
    zapplication/postscriptpsc                    r   r	   )r   r   r   r   r   r   r   r   r   r   o  r   zPs.__init__c                 C   r{   )Nr   r   r*   r"   rF   rH   r   r   r   rJ   u  r}   zPs.matchrK   r   r   r   r   r   h  rQ   r   c                       r   )Xzz1
    Implements the XS archive type matcher.
    zapplication/x-xzxzc                    r   r	   )r   r   r   r   r   r   r   r   r   r     r   zXz.__init__c                 C   sT   t |dko)|d dko)|d dko)|d dko)|d d	ko)|d
 dko)|d dkS )NrT   r      r   rC   r   rD   r   X   r   rj   rF   rH   r   r   r   rJ     rq   zXz.matchrK   r   r   r   r   r   {  rQ   r   c                       r   )Sqlitez8
    Implements the Sqlite DB archive type matcher.
    zapplication/x-sqlite3sqlitec                    r   r	   )r   r   r   r   r   r   r   r   r   r     r   zSqlite.__init__c                 C   r   )	Nr   r   r   r   Q   r   r   r    rF   rH   r   r   r   rJ     r   zSqlite.matchrK   r   r   r   r   r     rQ   r   c                       r   )Debz2
    Implements the DEB archive type matcher.
    zapplication/x-debdebc                    r   r	   )r   r   r   r   r   r   r   r   r   r     r   zDeb.__init__c                 C   s  t |dko|d dko|d dko|d dko|d d	ko|d
 dko|d dko|d dko|d dko|d dko|d dko|d dko|d dko|d dko|d dko|d dko|d dko|d dko|d  dko|d! dko|d" d	ko|d d#kS )$N   r   r"   r   <   r   r,   r   r\   r   r3   rT   rk   rV   >   rU   r   rW   d   r   r#   rA      r          r:      r5                  r'   rF   rH   r   r   r   rJ     sV   








	












z	Deb.matchrK   r   r   r   r   r     rQ   r   c                       r   )Arz1
    Implements the AR archive type matcher.
    zapplication/x-unix-archivearc                    r   r	   )r   r   r   r   r   r   r   r   r   r     r   zAr.__init__c                 C   s`   t |dko/|d dko/|d dko/|d dko/|d d	ko/|d
 dko/|d dko/|d dkS )NrV   r   r"   r   r   r   r,   r   r\   r   r3   rT   rk   r   rF   rH   r   r   r   rJ     s   






zAr.matchrK   r   r   r   r   r     rQ   r   c                       s0   e Zd ZdZdZd Z fddZdd Z  ZS )Zz0
    Implements the Z archive type matcher.
    zapplication/x-compressc                    r   r	   )r   r   r   r   r   r   r   r   r   r     r   z
Z.__init__c                 C   s<   t |dko|d dkr|d dkp|d dko|d dkS )Nr   r   r         rF   rH   r   r   r   rJ     s   

zZ.matchrK   r   r   r   r   r     rQ   r   c                       r   )Lzopz3
    Implements the Lzop archive type matcher.
    zapplication/x-lzoplzoc                    r   r	   )r   r   r   r   r   r   r   r   r   r     r   zLzop.__init__c                 C   sl   t |dko5|d dko5|d dko5|d dko5|d d	ko5|d
 dko5|d dko5|d dko5|d dkS )NrU   r      r   r   r   rj   r   O   r   rT   r   rV   r   ra   rF   rH   r   r   r   rJ     s"   







z
Lzop.matchrK   r   r   r   r   r     rQ   r   c                       r   )Lzz1
    Implements the Lz archive type matcher.
    zapplication/x-lziplzc                    r   r	   )r   r   r   r   r   r   r   r   r   r     r   zLz.__init__c                 C   r   )	Nr   r   r   r   rj   r   r   r   rF   rH   r   r   r   rJ      r   zLz.matchrK   r   r   r   r   r     rQ   r   c                       r   )Elfz1
    Implements the Elf archive type matcher
    zapplication/x-executableelfc                    r   r	   )r   r   r   r   r   r   r   r   r   r   /  r   zElf.__init__c                 C   s<   t |dko|d dko|d dko|d dko|d d	kS )
Nr>   r      r   r   r   r   r   rx   rF   rH   r   r   r   rJ   5  r   z	Elf.matchrK   r   r   r   r   r   (  rQ   r   c                       r   )Lz4z2
    Implements the Lz4 archive type matcher.
    zapplication/x-lz4lz4c                    r   r	   )r   r   r   r   r   r   r   r   r   r   D  r   zLz4.__init__c                 C   r   )	Nr   r   r   r   r$   r   r|      rF   rH   r   r   r   rJ   J  r   z	Lz4.matchrK   r   r   r   r   r   =  rQ   r   c                       r   )Brz%Implements the Br image type matcher.zapplication/x-brotlibrc                    r   r	   )r   r   r   r   r   r   r   r   r   r   X  r   zBr.__init__c                 C      |d d t g dkS )Nr   )            	bytearrayrH   r   r   r   rJ   ^     zBr.matchrK   r   r   r   r   r   R      r   c                       r   )Dcmz&Implements the Dcm image type matcher.zapplication/dicomdcmc                    r   r	   )r   r   r   r   r   r   r   r   r   r   h  r   zDcm.__init__c                 C   s   |dd t g dkS )N      )rw   r   r   r|   r   rH   r   r   r   rJ   n  r   z	Dcm.matchrK   r   r   r   r   r   b  r   r   c                       r   )Rpmz&Implements the Rpm image type matcher.zapplication/x-rpmrpmc                    r   r	   )r   r   r   r   r   r   r   r   r   r   x  r   zRpm.__init__c                 C   r   )Nr   )            r   rH   r   r   r   rJ   ~  r   z	Rpm.matchrK   r   r   r   r   r   r  r   r   c                       sD   e Zd ZdZdZdZdZdZ fddZe	dd	 Z
d
d Z  ZS )Zstdz
    Implements the Zstd archive type matcher.
    https://github.com/facebook/zstd/blob/dev/doc/zstd_compression_format.md
    zapplication/zstdzstiP*Ml    c                    r   r	   )r   r   r   r   r   r   r   r   r   r     r   zZstd.__init__c                 C   s   t d| d S )Nz<Lr   )structunpack)rI   r   r   r   _to_little_endian_int  s   zZstd._to_little_endian_intc                 C   s   t |dko|d dv o|d dko|d dko|d dk}|r"d	S t |d
k r*dS | |d d tj@ }|tjkr[| |dd
 }t |d
| k rNdS |d
| d  }| |S dS )Nr   r   )r$   r&   r(   r*   r+   r-   r.   r      r   r7   r   TrW   Fr   )rG   r   r   MAGIC_SKIPPABLE_MASKMAGIC_SKIPPABLE_STARTrJ   )r   rI   is_zstdmagicuser_data_len
next_framer   r   r   rJ     s*   





z
Zstd.match)rL   rM   rN   rO   r   r   r   r   r   staticmethodr   rJ   rP   r   r   r   r   r     s    
r   )"
__future__r   r   baser   r   rR   rX   r^   rb   rg   rl   rr   ry   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s@   !&