o
    üÞh­Ç  ã                   @  sÄ  d dl m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	 d dl
mZ d dlmZmZmZmZmZ ddlmZmZmZmZmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlm Z! ddl"m#Z# ddl$m%Z% dZ&e&rzddlm'Z' e (e)¡Z*e +d¡j,Z-dZ.dddddddddddddd d!d"œZ/e +d#¡Z0ej1Z2	 d$e2 Z3	 G d%d&„ d&eƒZ4G d'd(„ d(eƒZ5dyd,d-„Z6dzd{d1d2„Z7G d3d4„ d4ƒZ8G d5d6„ d6e9ƒZ:G d7d8„ d8ƒZ;G d9d:„ d:eƒZ<G d;d<„ d<e8ƒZ=d|d?d@„Z>G dAdB„ dBejƒZ?dCdDdEdFdGdHdIdIdIdJdKdLdMdNdOdPœZ@d}dUdV„ZAG dWdX„ dXƒZBG dYdZ„ dZƒZCG d[d\„ d\eƒZDd~dhdi„ZEddldm„ZFeAdfd€dodp„ZGd�dtdu„ZHe Ie?jJe?e>¡ e Ke?jJeG¡ e Le?jJeF¡ e Me?jJdvdwg¡ e Ne?jJdx¡ dS )‚é    )ÚannotationsN)ÚCallable)ÚIntEnum)ÚIOÚAnyÚ
NamedTupleÚNoReturnÚcasté   )ÚImageÚ
ImageChopsÚ	ImageFileÚImagePaletteÚImageSequence)Úi16be)Úi32be)Úo8)Úo16be)Úo32be)Ú	deprecate)ÚDeferredErrorF)Ú_imagings   \w\w\w\ws   ‰PNG

)Ú1r   )ÚLúL;2)r   úL;4)r   r   )úI;16úI;16B)ÚRGBr   )r   zRGB;16B)ÚPúP;1)r   úP;2)r   úP;4)r   r   )ÚLAr#   )ÚRGBAzLA;16B)r$   r$   )r$   zRGBA;16B))r
   r   )é   r   )é   r   )é   r   )é   r   )r'   r%   )r(   r%   )r
   é   )r%   r)   )r&   r)   )r'   r)   )r'   r&   )r(   r&   )r'   é   )r(   r*   s   ^ÿ* ÿ*$é@   c                   @  s   e Zd ZdZ	 dZ	 dZdS )ÚDisposalr   r
   r%   N)Ú__name__Ú
__module__Ú__qualname__ÚOP_NONEÚOP_BACKGROUNDÚOP_PREVIOUS© r3   r3   úR/var/www/html/premium_crap/venv/lib/python3.10/site-packages/PIL/PngImagePlugin.pyr,   k   s    r,   c                   @  s   e Zd ZdZ	 dZdS )ÚBlendr   r
   N)r-   r.   r/   Ú	OP_SOURCEÚOP_OVERr3   r3   r3   r4   r5   €   s
    r5   ÚsÚbytesÚreturnc                 C  s*   t  ¡ }| | t¡}|jrd}t|ƒ‚|S )Nz=Decompressed data too large for PngImagePlugin.MAX_TEXT_CHUNK)ÚzlibÚdecompressobjÚ
decompressÚMAX_TEXT_CHUNKÚunconsumed_tailÚ
ValueError)r8   ÚdobjÚ	plaintextÚmsgr3   r3   r4   Ú_safe_zlib_decompressŽ   s   rD   ÚdataÚseedÚintc                 C  s   t  | |¡d@ S )Nl   ÿÿ )r;   Úcrc32)rE   rF   r3   r3   r4   Ú_crc32—   ó   rI   c                   @  sr   e Zd Zd&dd„Zd'dd	„Zd(d
d„Zd)dd„Zd*dd„Zd+dd„Zd,dd„Z	d-dd„Z
d-dd„Zd.d/d#d$„Zd%S )0ÚChunkStreamÚfpú	IO[bytes]r:   ÚNonec                 C  s   || _ g | _d S ©N)rL   Úqueue©ÚselfrL   r3   r3   r4   Ú__init__    ó   
zChunkStream.__init__útuple[bytes, int, int]c                 C  s�   d}| j dus	J ‚| jr| j ¡ \}}}| j  |¡ n| j  d¡}|dd… }| j  ¡ }t|ƒ}t|ƒsCtj	sCdt
|ƒ› d�}t|ƒ‚|||fS )z.Fetch a new chunk. Returns header information.Nr'   r&   zbroken PNG file (chunk ú))rL   rP   ÚpopÚseekÚreadÚtellÚi32Úis_cidr   ÚLOAD_TRUNCATED_IMAGESÚreprÚSyntaxError)rR   ÚcidÚposÚlengthr8   rC   r3   r3   r4   rY   ¤   s   

zChunkStream.readc                 C  s   | S rO   r3   ©rR   r3   r3   r4   Ú	__enter__¹   s   zChunkStream.__enter__ÚargsÚobjectc                 G  s   |   ¡  d S rO   )Úclose)rR   re   r3   r3   r4   Ú__exit__¼   s   zChunkStream.__exit__c                 C  s   d  | _ | _d S rO   )rP   rL   rc   r3   r3   r4   rg   ¿   rJ   zChunkStream.closer`   r9   ra   rG   rb   c                 C  s$   | j d usJ ‚| j  |||f¡ d S rO   )rP   Úappend©rR   r`   ra   rb   r3   r3   r4   ÚpushÂ   s   zChunkStream.pushc                 C  s,   t  d|||¡ t| d| d¡› �ƒ||ƒS )z"Call the appropriate chunk handlerzSTREAM %r %s %sÚchunk_Úascii)ÚloggerÚdebugÚgetattrÚdecoderj   r3   r3   r4   ÚcallÆ   s   zChunkStream.callrE   c              
   C  s®   t jr|d d? d@ r|  ||¡ dS | jdusJ ‚z"t|t|ƒƒ}t| j d¡ƒ}||kr:dt|ƒ› d�}t|ƒ‚W dS  t	j
yV } zdt|ƒ› d�}t|ƒ|‚d}~ww )	zRead and verify checksumr   é   r
   Nr&   z(broken PNG file (bad header checksum in rV   z(broken PNG file (incomplete checksum in )r   r]   Úcrc_skiprL   rI   r[   rY   r^   r_   ÚstructÚerror)rR   r`   rE   Úcrc1Úcrc2rC   Úer3   r3   r4   ÚcrcÌ   s    þ
€þzChunkStream.crcc                 C  s   | j dusJ ‚| j  d¡ dS )zRead checksumNr&   )rL   rY   )rR   r`   rE   r3   r3   r4   rt   á   s   zChunkStream.crc_skipó   IENDÚendchunkúlist[bytes]c              
   C  s€   g }| j d us	J ‚	 z	|  ¡ \}}}W n tjy' } zd}t|ƒ|‚d }~ww ||kr/	 |S |  |t | j |¡¡ | |¡ q
)NTztruncated PNG file)	rL   rY   ru   rv   ÚOSErrorrz   r   Ú
_safe_readri   )rR   r|   Úcidsr`   ra   rb   ry   rC   r3   r3   r4   Úverifyç   s    
€þý
özChunkStream.verifyN©rL   rM   r:   rN   )r:   rU   )r:   rK   )re   rf   r:   rN   ©r:   rN   )r`   r9   ra   rG   rb   rG   r:   rN   )r`   r9   ra   rG   rb   rG   r:   r9   )r`   r9   rE   r9   r:   rN   )r{   )r|   r9   r:   r}   )r-   r.   r/   rS   rY   rd   rh   rg   rk   rr   rz   rt   r�   r3   r3   r3   r4   rK   Ÿ   s    








rK   c                   @  s4   e Zd ZU dZded< ded< e	ddd
d„ƒZdS )ÚiTXtzq
    Subclass of string to allow iTXt chunks to look like strings while
    keeping their extra information

    zstr | bytes | NoneÚlangÚtkeyNÚtextÚstrú
str | Noner:   c                 C  s   t  | |¡}||_||_|S )zÇ
        :param cls: the class to use when creating the instance
        :param text: value for this key
        :param lang: language code
        :param tkey: UTF-8 version of the key name
        )rˆ   Ú__new__r…   r†   )Úclsr‡   r…   r†   rR   r3   r3   r4   rŠ     s   ziTXt.__new__)NN)r‡   rˆ   r…   r‰   r†   r‰   r:   r„   )r-   r.   r/   Ú__doc__Ú__annotations__ÚstaticmethodrŠ   r3   r3   r3   r4   r„   ý   s   
 ÿr„   c                   @  sF   e Zd ZdZddd„Zdddd„Z			dddd„Z	dd dd„ZdS )!ÚPngInfoz<
    PNG chunk container (for use with save(pnginfo=))

    r:   rN   c                 C  s
   g | _ d S rO   ©Úchunksrc   r3   r3   r4   rS     ó   
zPngInfo.__init__Fr`   r9   rE   Ú
after_idatÚboolc                 C  s   | j  |||f¡ dS )a"  Appends an arbitrary chunk. Use with caution.

        :param cid: a byte string, 4 bytes long.
        :param data: a byte string of the encoded data
        :param after_idat: for use with private chunks. Whether the chunk
                           should be written after IDAT

        N)r‘   ri   )rR   r`   rE   r“   r3   r3   r4   Úadd!  s   
zPngInfo.addÚ Úkeyústr | bytesÚvaluer…   r†   Úzipc                 C  s²   t |tƒs| dd¡}t |tƒs| dd¡}t |tƒs!| dd¡}t |tƒs,| dd¡}|rE|  d|d | d | d t |¡ ¡ dS |  d|d | d | d | ¡ dS )	zùAppends an iTXt chunk.

        :param key: latin-1 encodable text key name
        :param value: value for this key
        :param lang: language code
        :param tkey: UTF-8 version of the key name
        :param zip: compression flag

        úlatin-1Ústrictúutf-8ó   iTXts     ó    s      N)Ú
isinstancer9   Úencoder•   r;   Úcompress)rR   r—   r™   r…   r†   rš   r3   r3   r4   Úadd_itxt-  s   



 þ(zPngInfo.add_itxtústr | bytes | iTXtc                 C  sÒ   t |tƒr"| j|||jdur|jnd|jdur|j|d�S d|d�S t |tƒsAz| dd¡}W n ty@   | j|||d� Y S w t |tƒsL| dd¡}|r]|  d|d t	 
|¡ ¡ dS |  d|d	 | ¡ dS )
zæAppends a text chunk.

        :param key: latin-1 encodable text key name
        :param value: value for this key, text or an
           :py:class:`PIL.PngImagePlugin.iTXt` instance
        :param zip: compression flag

        Nó    )rš   r›   rœ   ó   zTXtó     ó   tEXtrŸ   )r    r„   r£   r…   r†   r9   r¡   ÚUnicodeErrorr•   r;   r¢   )rR   r—   r™   rš   r3   r3   r4   Úadd_textP  s,   
ûû
	ÿ
zPngInfo.add_textNrƒ   ©F)r`   r9   rE   r9   r“   r”   r:   rN   )r–   r–   F)r—   r˜   r™   r˜   r…   r˜   r†   r˜   rš   r”   r:   rN   )r—   r˜   r™   r¤   rš   r”   r:   rN   )r-   r.   r/   rŒ   rS   r•   r£   rª   r3   r3   r3   r4   r�     s    
ú$ÿr�   c                   @  ó&   e Zd ZU ded< ded< ded< dS )Ú_RewindStatez dict[str | tuple[int, int], Any]Úinfozlist[ImageFile._Tile]Útilez
int | NoneÚseq_numN©r-   r.   r/   r�   r3   r3   r3   r4   r­   x  ó   
 r­   c                      sæ   e Zd Zd5‡ fdd„Zd6d	d
„Zd7dd„Zd7dd„Zd8dd„Zd8dd„Zd9dd„Z	d9dd„Z
d8dd„Zd8dd„Zd8dd „Zd8d!d"„Zd8d#d$„Zd8d%d&„Zd8d'd(„Zd8d)d*„Zd8d+d,„Zd8d-d.„Zd8d/d0„Zd8d1d2„Zd8d3d4„Z‡  ZS ):Ú	PngStreamrL   rM   r:   rN   c                   sZ   t ƒ  |¡ i | _i | _d| _d| _g | _d | _d | _d | _	d | _
ti g d ƒ| _d| _d S )N©r   r   r–   r   )ÚsuperrS   Úim_infoÚim_textÚim_sizeÚim_modeÚim_tileÚ
im_paletteÚim_custom_mimetypeÚim_n_framesÚ_seq_numr­   Úrewind_stateÚtext_memoryrQ   ©Ú	__class__r3   r4   rS     s   
zPngStream.__init__ÚchunklenrG   c                 C  s2   |  j |7  _ | j tkrd| j › d�}t|ƒ‚d S )Nz%Too much memory used in text chunks: z>MAX_TEXT_MEMORY)rÀ   ÚMAX_TEXT_MEMORYr@   )rR   rÃ   rC   r3   r3   r4   Úcheck_text_memory�  s   
ÿÿûzPngStream.check_text_memoryc                 C  s   t | j ¡ | j| jƒ| _d S rO   )r­   r¶   Úcopyrº   r¾   r¿   rc   r3   r3   r4   Úsave_rewind™  s
   
ýzPngStream.save_rewindc                 C  s&   | j j ¡ | _| j j| _| j j| _d S rO   )r¿   r®   rÆ   r¶   r¯   rº   r°   r¾   rc   r3   r3   r4   Úrewind   s   
zPngStream.rewindra   rb   r9   c                 C  sÌ   | j d usJ ‚t | j |¡}| d¡}t d|d |… ¡ ||d  }t d|¡ |dkr7d|› d�}t|ƒ‚zt||d d … ƒ}W n tyS   tj	rPd }n‚ Y n t
jy^   d }Y nw || jd	< |S )
NrŸ   ziCCP profile name %rr
   zCompression method %sr   úUnknown compression method z in iCCP chunkr%   Úicc_profile)rL   r   r   Úfindrn   ro   r_   rD   r@   r]   r;   rv   r¶   )rR   ra   rb   r8   ÚiÚcomp_methodrC   rÊ   r3   r3   r4   Ú
chunk_iCCP¥  s*   
þÿ
zPngStream.chunk_iCCPc                 C  s®   | j d usJ ‚t | j |¡}|dk rtjr|S d}t|ƒ‚t|dƒt|dƒf| _zt|d |d f \| _| _	W n	 t
yA   Y nw |d rKd| jd	< |d
 rUd}t|ƒ‚|S )Né   zTruncated IHDR chunkr   r&   r'   é	   é   r
   Ú	interlaceé   zunknown filter category)rL   r   r   r]   r@   r[   r¸   Ú_MODESr¹   Ú
im_rawmodeÚ	Exceptionr¶   r_   ©rR   ra   rb   r8   rC   r3   r3   r4   Ú
chunk_IHDRÁ  s&    ÿ
zPngStream.chunk_IHDRr   c                 C  sl   d| j v rt d| j d || j¡g}n| jd urd| j d< t dd| j || j¡g}|| _|| _d}t|ƒ‚)NÚbboxrš   TÚdefault_imager´   zimage data found)	r¶   r   Ú_TilerÕ   r½   r¸   rº   Úim_idatÚEOFError)rR   ra   rb   r¯   rC   r3   r3   r4   Ú
chunk_IDATÖ  s   


zPngStream.chunk_IDATc                 C  s   d}t |ƒ‚)Nzend of PNG image)rÝ   )rR   ra   rb   rC   r3   r3   r4   Ú
chunk_IENDã  s   zPngStream.chunk_IENDc                 C  s4   | j d usJ ‚t | j |¡}| jdkrd|f| _|S )Nr   r   )rL   r   r   r¹   r»   ©rR   ra   rb   r8   r3   r3   r4   Ú
chunk_PLTEç  s
   

zPngStream.chunk_PLTEc                 C  s¨   | j d usJ ‚t | j |¡}| jdkr/t |¡r(| d¡}|dkr&|| jd< |S || jd< |S | jdv r=t|ƒ| jd< |S | jdkrRt|ƒt|dƒt|dƒf| jd< |S )	Nr   rŸ   r   Útransparency)r   r   r   r   r%   r&   )	rL   r   r   r¹   Ú_simple_paletteÚmatchrË   r¶   Úi16)rR   ra   rb   r8   rÌ   r3   r3   r4   Ú
chunk_tRNSï  s    



	
û
ü
þ zPngStream.chunk_tRNSc                 C  s2   | j d usJ ‚t | j |¡}t|ƒd | jd< |S )Nç     jø@Úgamma)rL   r   r   r[   r¶   rà   r3   r3   r4   Ú
chunk_gAMA  s   zPngStream.chunk_gAMAc                 C  sT   | j d usJ ‚t | j |¡}t dt|ƒd › d�|¡}tdd„ |D ƒƒ| jd< |S )Nú>r&   ÚIc                 s  s   � | ]}|d  V  qdS )rç   Nr3   )Ú.0Úeltr3   r3   r4   Ú	<genexpr>  ó   € z'PngStream.chunk_cHRM.<locals>.<genexpr>Úchromaticity)rL   r   r   ru   ÚunpackÚlenÚtupler¶   )rR   ra   rb   r8   Úraw_valsr3   r3   r4   Ú
chunk_cHRM  s
   zPngStream.chunk_cHRMc                 C  sL   | j d usJ ‚t | j |¡}|dk rtjr|S d}t|ƒ‚|d | jd< |S )Nr
   zTruncated sRGB chunkr   Úsrgb)rL   r   r   r]   r@   r¶   r×   r3   r3   r4   Ú
chunk_sRGB  s   zPngStream.chunk_sRGBc           	      C  s˜   | j d usJ ‚t | j |¡}|dk rtjr|S d}t|ƒ‚t|dƒt|dƒ}}|d }|dkr?|d |d f}|| jd< |S |dkrJ||f| jd	< |S )
NrÐ   zTruncated pHYs chunkr   r&   r'   r
   ç¦
F%uš?ÚdpiÚaspect)rL   r   r   r]   r@   r[   r¶   )	rR   ra   rb   r8   rC   ÚpxÚpyÚunitrù   r3   r3   r4   Ú
chunk_pHYs&  s    
þzPngStream.chunk_pHYsc                 C  sš   | j d usJ ‚t | j |¡}z
| dd¡\}}W n ty%   |}d}Y nw |rK| dd¡}| dd¡}|dkr:|n|| j|< || j|< |  t	|ƒ¡ |S )NrŸ   r
   r¥   r›   rœ   Úreplaces   exif)
rL   r   r   Úsplitr@   rq   r¶   r·   rÅ   rò   )rR   ra   rb   r8   ÚkÚvÚk_strÚv_strr3   r3   r4   Ú
chunk_tEXt8  s   ý
zPngStream.chunk_tEXtc           
      C  s  | j d usJ ‚t | j |¡}z
| dd¡\}}W n ty%   |}d}Y nw |r-|d }nd}|dkr=d|› d�}t|ƒ‚z
t|dd … ƒ}W n tyW   tjrTd}n‚ Y n tj	yb   d}Y nw |r‚| 
dd¡}| 
dd	¡}	|	 | j|< | j|< |  t|	ƒ¡ |S )
NrŸ   r
   r¥   r   rÉ   z in zTXt chunkr›   rœ   rÿ   )rL   r   r   r   r@   r_   rD   r]   r;   rv   rq   r¶   r·   rÅ   rò   )
rR   ra   rb   r8   r  r  rÍ   rC   r  r  r3   r3   r4   Ú
chunk_zTXtL  s<   þ
þÿzPngStream.chunk_zTXtc                 C  sŒ  | j d usJ ‚t | j |¡ }}z
| dd¡\}}W n ty%   | Y S w t|ƒdk r.|S |d |d |dd … }}}z| dd¡\}}	}
W n tyT   | Y S w |dkr€|dkr~zt|
ƒ}
W n tyr   tjrq| Y S ‚  tj	y}   | Y S w |S |dkr‰|
| j
d< z| dd¡}| d	d¡}|	 d	d¡}|
 d	d¡}W n ty®   | Y S w t|||ƒ | j
|< | j|< |  t|ƒ¡ |S )
NrŸ   r
   r%   r   s   XML:com.adobe.xmpÚxmpr›   rœ   r�   )rL   r   r   r   r@   rò   rD   r]   r;   rv   r¶   rq   r©   r„   r·   rÅ   )rR   ra   rb   Úrr8   r  ÚcfÚcmr…   Útkr  r  Úlang_strÚtk_strr  r3   r3   r4   Ú
chunk_iTXto  sP   ÿ ÿÿ
ÿzPngStream.chunk_iTXtc                 C  s.   | j d usJ ‚t | j |¡}d| | jd< |S )Nó   Exif  Úexif)rL   r   r   r¶   rà   r3   r3   r4   Ú
chunk_eXIfš  s   zPngStream.chunk_eXIfc                 C  sž   | j d usJ ‚t | j |¡}|dk rtjr|S d}t|ƒ‚| jd ur,d | _t d¡ |S t|ƒ}|dks8|dkr?t d¡ |S || _t|dƒ| j	d< d| _
|S )	Nr'   z"APNG contains truncated acTL chunkz4Invalid APNG, will use default PNG image if possibler   l        r&   Úloopz
image/apng)rL   r   r   r]   r@   r½   ÚwarningsÚwarnr[   r¶   r¼   )rR   ra   rb   r8   rC   Ún_framesr3   r3   r4   Ú
chunk_acTL¡  s&   


zPngStream.chunk_acTLc                 C  sN  | j d usJ ‚t | j |¡}|dk rtjr|S d}t|ƒ‚t|ƒ}| jd u r*|dks6| jd ur<| j|d kr<d}t|ƒ‚|| _t|dƒt|dƒ}}t|dƒt|d	ƒ}}	| j\}
}|| |
ksf|	| |krld
}t|ƒ‚||	|| |	| f| j	d< t
|dƒt
|dƒ}}|dkrŠd}t|ƒt|ƒ d | j	d< |d | j	d< |d | j	d< |S )Né   z"APNG contains truncated fcTL chunkr   r
   ú#APNG contains frame sequence errorsr&   r'   rÑ   r(   zAPNG contains invalid framesrÙ   é   é   éd   éè  Údurationé   Údisposalé   Úblend)rL   r   r   r]   r@   r[   r¾   r_   r¸   r¶   rå   Úfloat)rR   ra   rb   r8   rC   ÚseqÚwidthÚheightrû   rü   Úim_wÚim_hÚ	delay_numÚ	delay_denr3   r3   r4   Ú
chunk_fcTL¶  s6   
zPngStream.chunk_fcTLc                 C  s„   | j d usJ ‚|dk rtjrt | j |¡}|S d}t|ƒ‚t | j d¡}t|ƒ}| j|d kr5d}t|ƒ‚|| _|  |d |d ¡S )Nr&   z"APNG contains truncated fDAT chunkr
   r  )	rL   r   r]   r   r@   r[   r¾   r_   rÞ   )rR   ra   rb   r8   rC   r#  r3   r3   r4   Ú
chunk_fdATÔ  s   zPngStream.chunk_fdATr‚   )rÃ   rG   r:   rN   rƒ   )ra   rG   rb   rG   r:   r9   )ra   rG   rb   rG   r:   r   )r-   r.   r/   rS   rÅ   rÇ   rÈ   rÎ   rØ   rÞ   rß   rá   ræ   ré   rõ   r÷   rþ   r  r  r  r  r  r*  r+  Ú__classcell__r3   r3   rÁ   r4   r³   ~  s,    

	














#
+

r³   Úprefixr”   c                 C  s
   |   t¡S rO   )Ú
startswithÚ_MAGIC)r-  r3   r3   r4   Ú_accepté  r’   r0  c                      s�   e Zd ZdZdZd%dd„Zed&dd	„ƒZd%d
d„Zd'dd„Z	d(d)dd„Z
d*dd„Zd%dd„Zd+dd„Zd%dd„Zd,d d!„Zd-‡ fd#d$„Z‡  ZS ).ÚPngImageFileÚPNGzPortable network graphicsr:   rN   c              	   C  sÄ  t | j d¡ƒsd}t|ƒ‚| j| _d| _g | _t| jƒ| _	 | j ¡ \}}}z
| j 	|||¡}W n0 t
y:   Y n0 tya   t d|||¡ t | j|¡}|dd…  ¡ r_| j ||f¡ Y nw | j ||¡ q| jj| _| jj| _| jj| _d | _| jj| _| jj| _| jjp‹d| _| j  dd	¡| _!| jj"r¦| jj"\}}t# $||¡| _%|d
kr°|d | _&n|| _&| jjd urÚd	| _'| j (¡  | j&| _)| j *¡ | _+| j!rÕ|  jd7  _|  ,d¡ | jdk| _-d S )Nr'   znot a PNG filer   Tú%r %s %s (unknown)r
   r%   rÚ   Fó   fdATr&   ).r0  rL   rY   r_   Ú_fpÚ_PngImageFile__frameÚprivate_chunksr³   Úpngrr   rÝ   ÚAttributeErrorrn   ro   r   r   Úislowerri   rz   r¹   Ú_moder¸   Ú_sizer¶   r®   Ú_textrº   r¯   r¼   Úcustom_mimetyper½   r  ÚgetrÚ   r»   r   ÚrawÚpaletteÚ_PngImageFile__prepare_idatÚ!_close_exclusive_fp_after_loadingrÇ   Ú_PngImageFile__rewind_idatrZ   Ú_PngImageFile__rewindÚ_seekÚis_animated)rR   rC   r`   ra   rb   r8   ÚrawmoderE   r3   r3   r4   Ú_openõ  sZ   €üð






zPngImageFile._openúdict[str, str | iTXt]c                 C  sR   | j d u r| jr| j}|  | jd ¡ |  ¡  | jr|  |¡ | j d us&J ‚| j S )Nr
   )r=  rG  r6  rX   r  Úload)rR   Úframer3   r3   r4   r‡   8  s   

zPngImageFile.textc                 C  sl   | j du rd}t|ƒ‚| j  | jd d d ¡ | jdusJ ‚| j ¡  | j ¡  | jr1| j  ¡  d| _ dS )zVerify PNG fileNz)verify must be called directly after openr   r%   r'   )rL   ÚRuntimeErrorrX   r¯   r8  r�   rg   Ú_exclusive_fp)rR   rC   r3   r3   r4   r�   H  s   




zPngImageFile.verifyrL  rG   c                 C  s†   |   |¡sd S || jk r|  dd¡ | j}t| jd |d ƒD ]!}z|  |¡ W q ty@ } z|  |¡ d}t|ƒ|‚d }~ww d S )Nr   Tr
   zno more images in APNG file)Ú_seek_checkr6  rF  ÚrangerÝ   rX   )rR   rL  Ú
last_frameÚfry   rC   r3   r3   r4   rX   Z  s   



€ýýzPngImageFile.seekFrÈ   r”   c           	   	   C  s4  | j d usJ ‚t| jtƒr| jj‚|  d }|dkrb|r<| j | j¡ | j  ¡  | j| _	d | _
| j j| _| j j| _| j| _d | _d | _| j dd¡| _| j d¡| _| j d¡| _| j d¡}d| _nâ|| jd krrd|› �}t|ƒ‚|  ¡  | jr‚| j | j| j¡ | j ¡ | _| j| _| j	ršt | j| j	¡ d| _	d}	 | j d
¡ z
| j  ¡ \}}}W n t j!t"fy¹   Y new |dkrÄd}t#|ƒ‚|dkrÒ|rÐd}t"|ƒ‚d	}z
| j  $|||¡ W n@ t%yå   Y n9 t#�y   |dkrû|d
8 }|rû|| _	Y n#t | j|¡ Y n t&�y   t' (d|||¡ t | j|¡ Y nw q�|| _| j j| _| j d¡| _| j d¡| _| j d¡}| j�sDd}t#|ƒ‚|�rJ|| _| jd u �r[| jt)j*k�r[t)j+| _d | _| jt)j*k�r|| j�rz| j ¡ | _|  ,| j| j¡| _d S d S | jt)j+k�r˜t-j. /| j0| j1¡| _|  ,| j| j¡| _d S d S )Nr   rÚ   Fr  r!  rÙ   r
   zcannot seek to frame Tr&   r{   zNo more images in APNG fileó   fcTLzAPNG missing frame datar4  r3  zimage not found in APNG frame)2r8  r    r5  r   ÚexrX   rE  rÈ   rD  rB  Ú_imr¶   r®   rº   r¯   rL   Ú_prev_imÚdisposer?  rÚ   Ú
dispose_opÚblend_opr6  r@   rK  ÚimÚpasteÚdispose_extentrÆ   r   r   rY   ru   rv   r_   rÝ   rr   ÚUnicodeDecodeErrorr9  rn   ro   r,   r2   r1   Ú_cropr   ÚcoreÚfillÚmodeÚsize)	rR   rL  rÈ   r\  rC   Úframe_startr`   ra   rb   r3   r3   r4   rF  i  s¬   



ÿþã!
þþzPngImageFile._seekc                 C  s   | j S rO   )r6  rc   r3   r3   r4   rZ   Í  s   zPngImageFile.tellc                 C  s0   | j  d¡r| jd | _| j| _tj | ¡ dS )z"internal: prepare to read PNG filerÒ   )r
   N)r®   r?  ÚdecoderconfigrB  Ú_PngImageFile__idatr   Úload_preparerc   r3   r3   r4   rf  Ð  s   zPngImageFile.load_prepareÚ
read_bytesr9   c                 C  sÐ   | j dusJ ‚| jdkrN| j d¡ | j  ¡ \}}}|dvr(| j  |||¡ dS |dkrFz
| j  |||¡ W n	 ty?   Y nw |d | _n|| _| jdks|dkrV| j}nt|| jƒ}| j| | _| j |¡S )zinternal: read more image dataNr   r&   )ó   IDATs   DDATr4  r¥   r4  )r8  re  rL   rY   rk   rr   rÝ   Úmin)rR   rg  r`   ra   rb   r3   r3   r4   Ú	load_readÙ  s*   
ÿ
îzPngImageFile.load_readc           	      C  sf  | j dusJ ‚| jdkr| j | j¡ 	 | j d¡ z
| j  ¡ \}}}W n tjtfy0   Y nˆw |dkr6n‚|dkrI| jrId| _| j  	|||¡ noz
| j  
|||¡ W nc ty\   Y n\ tyŽ   |dkrj|d8 }z	t | j|¡ W n ty‹ } ztjr…W Y d}~Y n3|‚d}~ww Y n) ty¶   t d|||¡ t | j|¡}|d	d
…  ¡ r´| j ||df¡ Y nw q| j j| _| jsÊ| j  ¡  d| _ dS | j�r/| jtjk�r1|  | j| j ¡}| jj!dkròd| j"v rò| #d| j"d ¡}n.| jj!dk�rd| j"v �r| j"d }t$|t%ƒ�r| &|¡ nt$|t'ƒ�r| (|¡ | )d¡}| j *|| j |¡ | j| _dS dS dS )z%internal: finished reading image dataNr   Tr&   r{   rS  r4  r3  r
   r%   r   râ   r$   r   )+r8  re  rL   rY   ru   rv   r_   rG  rB  rk   rr   r]  rÝ   r   r   r~   r]   r9  rn   ro   r:  r7  ri   r·   r=  rg   rV  rY  r5   r7   r^  rZ  r\  ra  r®   Úconvert_transparentr    r9   ÚputpalettealphasrG   ÚputpalettealphaÚconvertr[  )	rR   r`   ra   rb   ry   r8   ÚupdatedÚmaskÚtr3   r3   r4   Úload_endû  sx   
ÿ€üÿ€üâ
#


ÿ


ñzPngImageFile.load_endúdict[int, Any] | Nonec                 C  s6   d| j vr	|  ¡  d| j vrd| j vrd S |  ¡  ¡ S )Nr  zRaw profile type exif)r®   rK  ÚgetexifÚ_get_merged_dictrc   r3   r3   r4   Ú_getexif9  s
   
zPngImageFile._getexifú
Image.Exifc                   s   d| j vr	|  ¡  tƒ  ¡ S )Nr  )r®   rK  rµ   rt  rc   rÁ   r3   r4   rt  @  s   

zPngImageFile.getexifrƒ   )r:   rJ  )rL  rG   r:   rN   r«   )rL  rG   rÈ   r”   r:   rN   )r:   rG   )rg  rG   r:   r9   )r:   rs  )r:   rw  )r-   r.   r/   ÚformatÚformat_descriptionrI  Úpropertyr‡   r�   rX   rF  rZ   rf  rj  rr  rv  rt  r,  r3   r3   rÁ   r4   r1  ñ  s    
C


d

	
"
>r1  )r   ó   rŸ   )úL;1r{  rŸ   )r   ó   rŸ   )r   ó   rŸ   )r   ó   rŸ   )r#   r  r~  )r   ó   rŸ   )r    r{  ó   )r!   r}  r�  )r"   r~  r�  )r   r  r�  )r   r  r}  )r$   r  ó   )r   r|  r   r   r   r#   rë   r   r   r    r!   r"   r   r   r$   rL   rM   r`   rN   c                 G  sJ   d  |¡}|  tt|ƒƒ| ¡ |  |¡ t|t|ƒƒ}|  t|ƒ¡ dS )z'Write a PNG chunk (including CRC field)r¥   N)ÚjoinÚwriteÚo32rò   rI   ©rL   r`   rE   Ú	byte_datarz   r3   r3   r4   Úputchunk^  s
   

rˆ  c                   @  s    e Zd Zddd„Zddd„ZdS )Ú_idatrL   rM   ÚchunkúCallable[..., None]r:   rN   c                 C  s   || _ || _d S rO   )rL   rŠ  )rR   rL   rŠ  r3   r3   r4   rS   l  rT   z_idat.__init__rE   r9   c                 C  s   |   | jd|¡ d S )Nrh  )rŠ  rL   ©rR   rE   r3   r3   r4   r„  p  ó   z_idat.writeN)rL   rM   rŠ  r‹  r:   rN   ©rE   r9   r:   rN   ©r-   r.   r/   rS   r„  r3   r3   r3   r4   r‰  i  s    
r‰  c                   @  s    e Zd Zdd	d
„Zddd„ZdS )Ú_fdatrL   rM   rŠ  r‹  r°   rG   r:   rN   c                 C  s   || _ || _|| _d S rO   )rL   rŠ  r°   )rR   rL   rŠ  r°   r3   r3   r4   rS   w  s   
z_fdat.__init__rE   r9   c                 C  s*   |   | jdt| jƒ|¡ |  jd7  _d S )Nr4  r
   )rŠ  rL   r…  r°   rŒ  r3   r3   r4   r„  |  s   z_fdat.writeN)rL   rM   rŠ  r‹  r°   rG   r:   rN   rŽ  r�  r3   r3   r3   r4   r�  t  s    
r�  c                   @  r¬   )Ú_FrameúImage.ImagerZ  z tuple[int, int, int, int] | NonerÙ   zdict[str, Any]ÚencoderinfoNr±   r3   r3   r3   r4   r‘  �  r²   r‘  rZ  r’  rŠ  r‹  ra  rˆ   rH  rÚ   úImage.Image | NoneÚappend_imagesúlist[Image.Image]c                  C  sN  | j  d¡}| j  d| j dd¡¡}| j  d| j dtj¡¡}	| j  d| j dtj¡¡}
|r4t |¡}nt | g|¡}g }d}|D ]õ}t	 
|¡D ]í}|j|krT| ¡ }n| |¡}| j  ¡ }t|ttfƒrl|| |d< n|d u r|d|jv r||jd |d< t|	ttfƒr‰|	| |d< t|
ttfƒr–|
| |d< |d7 }|�r*|d }|j  d¡}|j  d¡}|tjkr»t|ƒdk r»tj}|tjkrå|j ¡ }tj d	| jd
¡}|j}|rÙ| |¡}nd| j }| ||¡ n|tjkrð|d j}n|j}t | d	¡| d	¡¡}|jdd�}|�s)|| d¡k�r)|| d¡k�r)d|v �r)|j d  |d 7  < qHnd }| t |||ƒ¡ qHqAt|ƒdk�rF|�sF|d jS ||dt!t|ƒƒt!|ƒƒ |�rz| j|k�ra|  |¡} t" #| t$t%t& t'||ƒƒt" (dd| j d|¡g¡ d}t)|ƒD ]¤\}}|j}|j�s‘d|j }n|j}| |¡}|j}|j }t*t+| dd¡ƒƒ}| d|	¡}| d|
¡}||dt!|ƒt!|d ƒt!|d ƒt!|d ƒt!|d ƒt,|ƒt,dƒt-|ƒt-|ƒƒ |d7 }|dk�r|�st" #|t$t%t& t'||ƒƒt" (dd|j d|¡g¡ �q€t.|||ƒ}t" #|t$t%t& |ƒt" (dd|j d|¡g¡ |j/}�q€d S )Nr  r  r   r  r!  r
   éÿÿÿÿr%   r$   )r   r   r   r   r´   éþÿÿÿF)Ú
alpha_onlys   acTLrš   rS  r  )0r“  r?  r®   r,   r0   r5   r6   Ú	itertoolsÚchainr   ÚIteratorra  rÆ   rn  r    Úlistró   r2   rò   r1   rZ  r   r_  r`  rb  rÙ   Úcropr[  r   Úsubtract_moduloÚgetbboxri   r‘  r…  r   Ú_saver	   r   r9   r‰  rÛ   Ú	enumeraterG   ÚroundÚo16r   r�  r°   ) rZ  rL   rŠ  ra  rH  rÚ   r•  r  r  r  r!  r›  Ú	im_framesÚframe_countÚim_seqÚim_framer“  ÚpreviousÚprev_disposalÚ
prev_blendÚbase_imrW  rÙ   Údeltar°   rL  Ú
frame_datarb  Úframe_durationÚframe_disposalÚframe_blendÚfdat_chunksr3   r3   r4   Ú_write_multiple_frames‡  sà   	







ÿÿ
€Î4

ü
ý




õýý
r³  Úfilenamer˜   c                 C  s   t | ||dd� d S )NT)Úsave_all)r¡  )rZ  rL   r´  r3   r3   r4   Ú	_save_all  r�  r¶  rµ  c           (   
     sl  |rU| j  d| j d¡¡}tƒ }tƒ ‰ | j  dg ¡}t | g|¡D ]}t |¡D ]}	| |	j	¡ ˆ  |	j
¡ q(q!dD ]}
|
|v rB nq:| ¡ }
t‡ fdd„tdƒD ƒƒ}n| j
}| j	}
|
}|
dkr£d| j v rqtd	| j d > d
ƒ}n| jr†ttt| j ¡ d	 ƒd d
ƒd	ƒ}nd
}|dkr£|dkr“d	}n	|dkršd}nd}|d|› �7 }| j  dd¡| j  dd¡| j  dd¡| j  dd¡f| _z	t| \}}}W n tyÞ } zd|
› d�}t|ƒ|‚d }~ww |dkrêtdddd� | t¡ ||dt|d ƒt|d	 ƒ||dddƒ	 g d¢}| j  d | j d ¡¡}|�r+d!}|d" t |¡ }||d#|ƒ | d$¡ | j  d%¡}|�rƒg d&¢}|jD ]G}|d d… \}}||v �rW| |¡ ||||ƒ �q;||v �rd||||ƒ �q;|d	d…  ¡ �r�t|ƒdk�ow|d }|�s�||||ƒ �q;| j	dk�r¯|d }| j  !d'¡d |… }t|ƒ|k �r©|d7 }t|ƒ|k �sž||d(|ƒ | j  d)| j d)d ¡¡}|�sÃ|dk�r5| j	dk�rõ|} t"|t#ƒ�rÜ||d*|d | … ƒ nztdtd+|ƒƒ}d,| d }!||d*|!d | … ƒ na| j	d-v �rtdtd.|ƒƒ}||d*t$|ƒƒ nJ| j	d'k�r(|\}"}#}$||d*t$|"ƒt$|#ƒ t$|$ƒ ƒ n.d)| j v �r4d/}t|ƒ‚n!| j	dk�rV| j  %¡ d0k�rV| j  !d0d1¡}!|} ||d*|!d | … ƒ | j  d2¡}%|%�r{||d3tt&|%d d4 d5 ƒƒtt&|%d	 d4 d5 ƒƒd6ƒ |�r¡d7d8g}|jD ]}|d d… \}}||v �rŸ| |¡ ||||ƒ �q…| j  d9¡}&|&�rÈt"|&t'j(ƒ�r¶|& )d:¡}&|& *d;¡�rÂ|&d<d … }&||d=|&ƒ | }'|�r×t+| |||
|||ƒ}'|'�rót, -|'t.t/t# t0||ƒƒt, 1d>d?|'j
 d|¡g¡ |�r"|jD ](}|d d… \}}|d	d…  ¡ �r t|ƒdk�o|d }|�r ||||ƒ �qù||d@dƒ t2|dAƒ�r4| 3¡  d S d S )BNrÚ   r•  )r$   r   r   c                 3  s&   � | ]‰ t ‡ fd d„ˆD ƒƒV  qdS )c                 3  s   � | ]}|ˆ  V  qd S rO   r3   )rì   Ú
frame_size©rÌ   r3   r4   rî   2  rï   z"_save.<locals>.<genexpr>.<genexpr>N)Úmax)rì   ©Úsizesr¸  r4   rî   2  s   €$ z_save.<locals>.<genexpr>r%   r   Úbitsr
   é   r)   r(   r&   ú;ÚoptimizeFÚcompress_levelr—  Úcompress_typeÚ
dictionaryr¥   zcannot write mode z as PNGrë   zSaving I mode images as PNGrÏ   )Ú
stacklevels   IHDRr   rŸ   )s   cHRMs   cICPs   gAMAs   sBITó   sRGBs   tIMErÊ   s   ICC Profiler§   s   iCCPrÄ  Úpnginfo)s   sPLTrž   r¨   r¦   r   s   PLTErâ   s   tRNSéÿ   ó   ÿ)r   r   rë   r   iÿÿ  z%cannot use transparency for this moder$   ÚArù   s   pHYsrø   g      à?r{  s   bKGDs   hISTr  r'   r  r*   s   eXIfrš   r´   r{   Úflush)4r“  r?  r®   Úsetrš  r›  r   rœ  r•   ra  rb  rW   ró   rP  ri  rA  r¹  rò   ÚgetdataÚencoderconfigÚ	_OUTMODESÚKeyErrorr~   r   r„  r/  r…  r;   r¢   Úremover‘   r:  rZ  Ú
getpaletter    r9   r¤  ÚgetpalettemoderG   r   ÚExifÚtobytesr.  r³  r   r¡  r	   r   r‰  rÛ   ÚhasattrrÉ  )(rZ  rL   r´  rŠ  rµ  rÚ   Úmodesr•  r§  r¨  ra  rb  ÚoutmodeÚcolorsr¼  rH  Ú	bit_depthÚ
color_typery   rC   r‘   ÚiccÚnamerE   r®   Úchunks_multiple_allowedÚ
info_chunkr`   r“   Úpalette_byte_numberÚpalette_bytesrâ   Úalpha_bytesÚalphaÚredÚgreenÚbluerù   r  Ú	single_imr3   rº  r4   r¡    s>  	ÿþÿ
$ü
€þ


÷




€ÿ
"üû


€
ÿý
€ÿr¡  Úparamsr   ú list[tuple[bytes, bytes, bytes]]c                   sJ   ddl m} g ‰ d‡ fd
d„}|ƒ }z|| _t| |d|ƒ W | `ˆ S | `w )z4Return a list of PNG chunks representing this image.r   )ÚBytesIOrL   rM   r`   r9   rE   r:   rN   c                   s0   d  |¡}tt|t|ƒƒƒ}ˆ  |||f¡ d S )Nr¥   )rƒ  r…  rI   ri   r†  r�   r3   r4   ri   ö  s   
zgetchunks.<locals>.appendr–   N©rL   rM   r`   r9   rE   r9   r:   rN   )Úiorè  r“  r¡  )rZ  ræ  rè  ri   rL   r3   r�   r4   Ú	getchunksð  s   þrë  z.pngz.apngz	image/png)r8   r9   r:   r9   )r   )rE   r9   rF   rG   r:   rG   )r-  r9   r:   r”   ré  )rZ  r’  rL   rM   rŠ  r‹  ra  rˆ   rH  rˆ   rÚ   r”  r•  r–  r:   r”  )rZ  r’  rL   rM   r´  r˜   r:   rN   )rZ  r’  rL   rM   r´  r˜   rŠ  r‹  rµ  r”   r:   rN   )rZ  r’  ræ  r   r:   rç  )OÚ
__future__r   rš  ÚloggingÚreru   r  r;   Úcollections.abcr   Úenumr   Útypingr   r   r   r   r	   r–   r   r   r   r   r   Ú_binaryr   rå   r   r[   r   r   r¤  r   r…  Ú
_deprecater   Ú_utilr   ÚTYPE_CHECKINGr   Ú	getLoggerr-   rn   Úcompilerä   r\   r/  rÔ   rã   Ú	SAFEBLOCKr>   rÄ   r,   r5   rD   rI   rK   rˆ   r„   r�   r­   r³   r0  r1  rÍ  rˆ  r‰  r�  r‘  r³  r¶  r¡  rë  Úregister_openrx  Úregister_saveÚregister_save_allÚregister_extensionsÚregister_mimer3   r3   r3   r4   Ú<module>   sº    
ë

	^`  
m  ]ð

 
û 
X