
    Xh                    ,   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&rddlm'Z'  ej(        e)          Z* ej+        d          j,        Z-dZ.dddddddddddddd d!d"Z/ ej+        d#          Z0ej1        Z2	 d$e2z  Z3	  G d% d&e          Z4 G d' d(e          Z5dqd,Z6drdsd0Z7 G d1 d2          Z8 G d3 d4e9          Z: G d5 d6          Z; G d7 d8e          Z< G d9 d:e8          Z=dtd=Z> G d> d?ej                  Z?d@dAdBdCdDdEdFdFdFdGdHdIdJdKdLdMZ@dudRZA G dS dT          ZB G dU dV          ZC G dW dXe          ZDdvddZEdwdgZFeAdfdxdiZGdydmZH ejI        e?jJ        e?e>            ejK        e?jJ        eG            ejL        e?jJ        eF            ejM        e?jJ        dndog            ejN        e?jJ        dp           dS )z    )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                      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     d/var/www/tools.fuzzalab.pt/emblema-extractor/venv/lib/python3.11/site-packages/PIL/PngImagePlugin.pyr.   r.   k   s1        G M
 K r6   r.   c                      e Zd ZdZ	 dZdS )Blendr   r   N)r/   r0   r1   	OP_SOURCEOP_OVERr5   r6   r7   r9   r9      s%        I
 G r6   r9   sbytesreturnc                    t          j                    }|                    | 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)r<   dobj	plaintextmsgs       r7   _safe_zlib_decompressrI      sE    D>22I Moor6   dataseedintc                2    t          j        | |          dz  S )Nl    )r@   crc32)rJ   rK   s     r7   _crc32rO      s    :dD!!J..r6   c                  `    e Zd ZddZddZddZddZd dZd!dZd"dZ	d#dZ
d#dZd$d%dZdS )&ChunkStreamfp	IO[bytes]r>   Nonec                "    || _         g | _        d S N)rR   queue)selfrR   s     r7   __init__zChunkStream.__init__   s    $&:<


r6   tuple[bytes, int, int]c                   d}| j         J | j        r8| j                                        \  }}}| j                             |           nL| j                             d          }|dd         }| j                                         }t          |          }t          |          s.t          j	        s"dt          |           d}t          |          |||fS )z.Fetch a new chunk. Returns header information.Nr(   r'   zbroken PNG file (chunk ))rR   rW   popseekreadtelli32is_cidr   LOAD_TRUNCATED_IMAGESreprSyntaxError)rX   cidposlengthr<   rH   s         r7   r_   zChunkStream.read   s    w""": 	#z~~//CfGLLQAABB%C',,..CVVFc{{ 	'2 '<S		<<<!#&&&Cr6   c                    | S rV   r5   rX   s    r7   	__enter__zChunkStream.__enter__   s    r6   argsobjectc                .    |                                   d S rV   )close)rX   rl   s     r7   __exit__zChunkStream.__exit__   s    

r6   c                "    d x| _         | _        d S rV   )rW   rR   rj   s    r7   ro   zChunkStream.close   s    ##
TWWWr6   rf   r=   rg   rL   rh   c                R    | j         J | j                             |||f           d S rV   )rW   appendrX   rf   rg   rh   s       r7   pushzChunkStream.push   s3    z%%%
3V,-----r6   c                    t                               d|||            t          | d|                    d                     ||          S )z"Call the appropriate chunk handlerzSTREAM %r %s %schunk_ascii)loggerdebuggetattrdecodert   s       r7   callzChunkStream.call   sN     	&S&999<wt;cjj&9&9;;<<S&IIIr6   rJ   c                   t           j        r&|d         dz	  dz  r|                     ||           dS | j        J 	 t	          |t	          |                    }t          | j                            d                    }||k    r"dt          |           d}t          |          dS # t          j
        $ r(}dt          |           d}t          |          |d}~ww xY w)	zRead and verify checksumr      r   Nr'   z(broken PNG file (bad header checksum in r\   z(broken PNG file (incomplete checksum in )r   rc   crc_skiprR   rO   ra   r_   rd   re   structerror)rX   rf   rJ   crc1crc2rH   es          r7   crczChunkStream.crc   s     * 	A!a 	MM#t$$$Fw"""	*$s,,Dtw||A''Dt||McMMM!#&&& | | 	* 	* 	*IT#YYIIICc"")	*s   A,B+ +C":#CC"c                L    | j         J | j                             d           dS )zRead checksumNr'   )rR   r_   )rX   rf   rJ   s      r7   r   zChunkStream.crc_skip   s'     w"""Qr6      IENDendchunklist[bytes]c                :   g }| j         J 	 	 |                                 \  }}}n)# t          j        $ r}d}t	          |          |d }~ww xY w||k    rnD|                     |t          j        | j         |                     |                    |           |S )NTztruncated PNG file)	rR   r_   r   r   OSErrorr   r   
_safe_readrs   )rX   r   cidsrf   rg   rh   r   rH   s           r7   verifyzChunkStream.verify   s     w"""
	*#'99;; S&&< * * **cll)* hHHS).tw??@@@KK
	 s   ' AAANrR   rS   r>   rT   )r>   rZ   )r>   rQ   )rl   rm   r>   rT   r>   rT   )rf   r=   rg   rL   rh   rL   r>   rT   )rf   r=   rg   rL   rh   rL   r>   r=   )rf   r=   rJ   r=   r>   rT   )r   )r   r=   r>   r   )r/   r0   r1   rY   r_   rk   rp   ro   ru   r}   r   r   r   r5   r6   r7   rQ   rQ      s        = = = =       *      $ $ $ $. . . .J J J J* * * **         r6   rQ   c                  D    e Zd ZU dZded<   ded<   e	 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                X    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   rX   s        r7   r   ziTXt.__new__  s*     {{3%%		r6   )NN)r   r   r   r   r   r   r>   r   )r/   r0   r1   __doc____annotations__staticmethodr   r5   r6   r7   r   r      s`           DH    \  r6   r   c                  @    e Zd ZdZddZdddZ	 	 	 dddZ	 dddZdS )PngInfoz<
    PNG chunk container (for use with save(pnginfo=))

    r>   rT   c                    g | _         d S rV   )chunksrj   s    r7   rY   zPngInfo.__init__  s    79r6   Frf   r=   rJ   
after_idatboolc                @    | 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   rs   )rX   rf   rJ   r   s       r7   addzPngInfo.add!  s'     	Cz233333r6    keystr | bytesvaluer   r   zipc                *   t          |t                    s|                    dd          }t          |t                    s|                    dd          }t          |t                    s|                    dd          }t          |t                    s|                    dd          }|r<|                     d|dz   |z   dz   |z   dz   t	          j        |          z              dS |                     d|dz   |z   dz   |z   dz   |z              dS )	zAppends 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)
isinstancer=   encoder   r@   compress)rX   r   r   r   r   r   s         r7   add_itxtzPngInfo.add_itxt-  s)   $ #u%% 	2**Y11C%'' 	4LL(33E$&& 	2;;w11D$&& 	2;;w11D 	UHHk!D(5047%?$-PUBVBVV    
 HHWcIo4u<tCeKeSTTTTTr6   str | bytes | iTXtc                8   t          |t                    r6|                     |||j        |j        nd|j        |j        nd|          S t          |t
                    s@	 |                    dd          }n(# t          $ r |                     |||          cY S w xY wt          |t
                    s|                    dd          }|r0|                     d|dz   t          j
        |          z              dS |                     d|d	z   |z              dS )
zAppends 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

        Nr6   )r   r   r      zTXt        tEXtr   )r   r   r   r   r   r=   r   UnicodeErrorr   r@   r   )rX   r   r   r   s       r7   add_textzPngInfo.add_textP  s@    eT"" 	==#j4

##j4

# !    %'' 	::Y99 : : :}}S%S}99999: #u%% 	2**Y11C 	3HHWcGmdmE.B.BBCCCCCHHWcEkE122222s   "A9 9"BBNr   F)rf   r=   rJ   r=   r   r   r>   rT   )r   r   F)r   r   r   r   r   r   r   r   r   r   r>   rT   )r   r   r   r   r   r   r>   rT   )r/   r0   r1   r   rY   r   r   r   r5   r6   r7   r   r     s         
: : : :
4 
4 
4 
4 
4  !U !U !U !U !UH HM!3 !3 !3 !3 !3 !3 !3r6   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/   r0   r1   r   r5   r6   r7   r   r   x  s6         ****r6   r   c                       e Zd Zd  fdZd!dZd"d	Zd"d
Zd#dZd#dZd$dZ	d$dZ
d#dZd#dZd#dZd#dZd#dZd#dZd#dZd#dZd#dZd#dZd#dZd#dZd#dZ xZS )%	PngStreamrR   rS   r>   rT   c                   t                                          |           i | _        i | _        d| _        d| _        g | _        d | _        d | _        d | _	        d | _
        t          i g d           | _        d| _        d S )Nr   r   r   r   )superrY   im_infoim_textim_sizeim_modeim_tile
im_paletteim_custom_mimetypeim_n_frames_seq_numr   rewind_statetext_memory)rX   rR   	__class__s     r7   rY   zPngStream.__init__  s     :<.0.048.2'+$((R66r6   chunklenrL   c                z    | xj         |z  c_         | 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_MEMORYrE   )rX   r   rH   s      r7   check_text_memoryzPngStream.check_text_memory  sY    H$o--6#6 6 6  S//! .-r6   c                t    t          | j                                        | j        | j                  | _        d S rV   )r   r   copyr   r   r   rj   s    r7   save_rewindzPngStream.save_rewind  s5    (LLM
 
r6   c                    | j         j                                        | _        | j         j        | _        | j         j        | _        d S rV   )r   r   r   r   r   r   r   r   rj   s    r7   rewindzPngStream.rewind  s9    (-2244(-)1r6   rg   rh   r=   c                   | j         J t          j        | j         |          }|                    d          }t                              d|d |                    ||dz            }t                              d|           |dk    rd| d}t          |          	 t          ||dz   d                    }n2# t          $ r t          j	        rd }n Y nt          j        $ r d }Y nw xY w|| j        d	<   |S )
Nr   ziCCP profile name %rr   zCompression method %sr   Unknown compression method z in iCCP chunkr&   icc_profile)rR   r   r   findry   rz   re   rI   rE   rc   r@   r   r   )rX   rg   rh   r<   icomp_methodrH   r   s           r7   
chunk_iCCPzPngStream.chunk_iCCP  s$   w""" &11 FF5MM+QrrU333Ah,k:::!KKKKCc"""	/!a%''
;;KK 	 	 	. "  z 	 	 	KKK	&1]#s   B9 9C(C('C(c                   | j         J t          j        | j         |          }|dk     rt          j        r|S d}t	          |          t          |d          t          |d          f| _        	 t          |d         |d         f         \  | _        | _	        n# t          $ r Y nw xY w|d         r
d| j        d	<   |d
         rd}t          |          |S )N   zTruncated IHDR chunkr   r'   r(   	      r   	interlace   zunknown filter category)rR   r   r   rc   rE   ra   r   _MODESr   
im_rawmode	Exceptionr   re   rX   rg   rh   r<   rH   s        r7   
chunk_IHDRzPngStream.chunk_IHDR  s    w""" &11B;;. (CS//!1ayy#a))+	,2AaD!A$<,@)DL$// 	 	 	D	R5 	*()DL%R5 	#+Cc"""s   /(B 
B%$B%r	   c                   d| j         v r)t          j        d| j         d         || j                  g}n6| j        
d| j         d<   t          j        dd| j        z   || j                  g}|| _        || _        d}t          |          )Nbboxr   Tdefault_imager   zimage data found)	r   r   _Tiler   r   r   r   im_idatEOFError)rX   rg   rh   r   rH   s        r7   
chunk_IDATzPngStream.chunk_IDAT  s    T\!!OE4<+?doVVWDD+04_-OE6DL+@#tWWXD smmr6   c                $    d}t          |          )Nzend of PNG image)r   )rX   rg   rh   rH   s       r7   
chunk_IENDzPngStream.chunk_IEND  s     smmr6   c                t    | j         J t          j        | j         |          }| j        dk    r	d|f| _        |S )Nr    r   )rR   r   r   r   r   rX   rg   rh   r<   s       r7   
chunk_PLTEzPngStream.chunk_PLTE  sA    w""" &11<3#QhDOr6   c                   | j         J t          j        | j         |          }| j        dk    rKt                              |          r&|                    d          }|dk    r
|| j        d<   nm|| j        d<   nb| j        dv rt          |          | j        d<   nA| j        dk    r6t          |          t          |d          t          |d          f| j        d<   |S )	Nr    r   r   transparency)r   r   r   r   r&   r'   )	rR   r   r   r   _simple_palettematchr   r   i16)rX   rg   rh   r<   r   s        r7   
chunk_tRNSzPngStream.chunk_tRNS  s    w""" &11<3$$Q'' 	1 FF5MM6634DL0 01^,,\///+.q66DL((\U""+.q663q!99c!Qii+GDL(r6   c                    | j         J t          j        | j         |          }t          |          dz  | j        d<   |S )N     j@gamma)rR   r   r   ra   r   r   s       r7   
chunk_gAMAzPngStream.chunk_gAMA  s@    w""" &11 #A 1Wr6   c                    | j         J t          j        | j         |          }t          j        dt          |          dz   d|          }t          d |D                       | j        d<   |S )N>r'   Ic              3      K   | ]	}|d z  V  
dS )r  Nr5   ).0elts     r7   	<genexpr>z'PngStream.chunk_cHRM.<locals>.<genexpr>  s&      ,P,PS8^,P,P,P,P,P,Pr6   chromaticity)rR   r   r   r   unpacklentupler   )rX   rg   rh   r<   raw_valss        r7   
chunk_cHRMzPngStream.chunk_cHRM  su     w""" &11=!3SVVq[!3!3!3Q77',,P,Px,P,P,P'P'P^$r6   c                    | j         J t          j        | j         |          }|dk     rt          j        r|S d}t	          |          |d         | j        d<   |S )Nr   zTruncated sRGB chunkr   srgb)rR   r   r   rc   rE   r   r   s        r7   
chunk_sRGBzPngStream.chunk_sRGB  se     w""" &11A::. (CS//! tVr6   c                @   | j         J t          j        | j         |          }|dk     rt          j        r|S d}t	          |          t          |d          t          |d          }}|d         }|dk    r|dz  |dz  f}|| j        d<   n|dk    r||f| j        d	<   |S )
Nr   zTruncated pHYs chunkr   r'   r(   r   
F%u?dpiaspect)rR   r   r   rc   rE   ra   r   )	rX   rg   rh   r<   rH   pxpyunitr  s	            r7   
chunk_pHYszPngStream.chunk_pHYs&  s    w""" &11A::. (CS//!QC1IIBt199v+rF{*C"%DLQYY%'VDL"r6   c                   | j         J t          j        | j         |          }	 |                    dd          \  }}n# t          $ r |}d}Y nw xY w|rj|                    dd          }|                    dd          }|dk    r|n|| j        |<   || j        |<   |                     t          |                     |S )Nr   r   r6   r   r   replaces   exif)
rR   r   r   splitrE   r|   r   r   r   r  )rX   rg   rh   r<   kvk_strv_strs           r7   
chunk_tEXtzPngStream.chunk_tEXt8  s    w""" &11	775!$$DAqq 	 	 	AAAA	  	/HHY11EHHY	22E'(G||!!DL"'DL""3u::...s   ? AAc                X   | j         J t          j        | j         |          }	 |                    dd          \  }}n# t          $ r |}d}Y nw xY w|r	|d         }nd}|dk    rd| d}t          |          	 t          |dd                    }n2# t          $ r t          j        rd}n Y nt          j	        $ r d}Y nw xY w|rb|
                    dd          }|
                    dd	          }	|	x| j        |<   | j        |<   |                     t          |	                     |S )
Nr   r   r6   r   r   z in zTXt chunkr   r   r  )rR   r   r   r   rE   re   rI   rc   r@   r   r|   r   r   r   r  )
rX   rg   rh   r<   r!  r"  r   rH   r#  r$  s
             r7   
chunk_zTXtzPngStream.chunk_zTXtL  s   w""" &11	775!$$DAqq 	 	 	AAAA	  	A$KKK!KKKKCc"""	%ae,,AA 	 	 	.   z 	 	 	AAA	  	/HHY11EHHY	22E8==DL$,u"5""3u::...s'   ? AA<B C0CCc                   | j         J t          j        | j         |          x}}	 |                    dd          \  }}n# t          $ r |cY S w xY wt          |          dk     r|S |d         |d         |dd          }}}	 |                    dd          \  }}	}
n# t          $ r |cY S w xY w|dk    rJ|dk    rB	 t          |
          }
n3# t          $ r t          j        r|cY S  t          j	        $ r |cY S w xY w|S |dk    r
|
| j
        d<   	 |                    dd          }|                    d	d          }|	                    d	d          }|
                    d	d          }n# t          $ r |cY S w xY wt          |||          x| j
        |<   | j        |<   |                     t          |                     |S )
Nr   r   r&   r   s   XML:com.adobe.xmpxmpr   r   r   )rR   r   r   r   rE   r  rI   rc   r@   r   r   r|   r   r   r   r   )rX   rg   rh   rr<   r!  cfcmr   tkr"  r#  lang_strtk_strr$  s                  r7   
chunk_iTXtzPngStream.chunk_iTXto  s0   w"""$TWf555A	775!$$DAqq 	 	 	HHH	q66A::HaD!A$!""B	''%++KD"aa 	 	 	HHH	77Qww-a00AA!    6  z   HHH $$$"#DL	HHY11E{{7H55HYYw11FHHWh//EE 	 	 	HHH	 59&4Q4QQUdl51s5zz***sN   A AAB B-,B-=C C;'C;:C;AE* *E98E9c                f    | j         J t          j        | j         |          }d|z   | j        d<   |S )N   Exif  exif)rR   r   r   r   r   s       r7   
chunk_eXIfzPngStream.chunk_eXIf  s:    w""" &11.2Vr6   c                   | j         J t          j        | j         |          }|dk     rt          j        r|S d}t	          |          | j        d | _        t          j        d           |S t          |          }|dk    s|dk    rt          j        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)rR   r   r   rc   rE   r   warningswarnra   r   r   )rX   rg   rh   r<   rH   n_framess         r7   
chunk_acTLzPngStream.chunk_acTL  s    w""" &11A::. 6CS//!'#DMPQQQHq66q==Hz11MPQQQH#"1ayyV".r6   c                   | j         J t          j        | j         |          }|dk     rt          j        r|S d}t	          |          t          |          }| j        |dk    s| j        | j        |dz
  k    rd}t          |          || _        t          |d          t          |d          }}t          |d          t          |d	          }	}| j        \  }
}||z   |
k    s	|	|z   |k    rd
}t          |          ||	||z   |	|z   f| j	        d<   t          |d          t          |d          }}|dk    rd}t          |          t          |          z  dz  | 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)rR   r   r   rc   rE   ra   r   re   r   r   r   float)rX   rg   rh   r<   rH   seqwidthheightr  r  im_wim_h	delay_num	delay_dens                 r7   
chunk_fcTLzPngStream.chunk_fcTL  s   w""" &11B;;. 6CS//!!ffM!cQhhM%$-37*B*B7Cc"""Aq		3q!99vQSBZZB\
d:Vd 2 20Cc""" "BU
BK@V"1bzz3q"::9	>>I#(#3#3eI6F6F#F#MZ #$R5Z  !"Wr6   c                h   | j         J |dk     r9t          j        rt          j        | j         |          }|S d}t	          |          t          j        | j         d          }t          |          }| j        |dz
  k    rd}t          |          || _        |                     |dz   |dz
            S )Nr'   z"APNG contains truncated fDAT chunkr   r=  )	rR   r   rc   r   rE   ra   r   re   r   )rX   rg   rh   r<   rH   rH  s         r7   
chunk_fdATzPngStream.chunk_fdAT  s    w"""A::. (&996CS//! !,,!ff=C!G##7Cc"""sQw
333r6   r   )r   rL   r>   rT   r   )rg   rL   rh   rL   r>   r=   )rg   rL   rh   rL   r>   r	   )r/   r0   r1   rY   r   r   r   r   r   r   r   r   r  r  r  r  r  r%  r'  r0  r4  r:  rO  rQ  __classcell__r   s   @r7   r   r   ~  s            "" " " "
 
 
 
2 2 2 2
   8   *            *         "   $   (! ! ! !F) ) ) )V      *   <4 4 4 4 4 4 4 4r6   r   prefixr   c                6    |                      t                    S rV   )
startswith_MAGIC)rT  s    r7   _acceptrX    s    V$$$r6   c                       e Zd ZdZdZddZedd            ZddZddZ	dddZ
ddZddZd dZddZd!dZd" fdZ xZS )#PngImageFilePNGzPortable network graphicsr>   rT   c                |   t          | j                            d                    sd}t          |          | j        | _        d| _        g | _        t          | j                  | _        	 | j                                        \  }}}	 | j        	                    |||          }n# t          $ r Y nt          $ rr t                              d|||           t          j        | j        |          }|dd                                         r| j                            ||f           Y nw xY w| j                            ||           | j        j        | _        | j        j        | _        | j        j        | _        d | _        | j        j        | _        | j        j        | _        | j        j        pd| _        | j                             dd	          | _!        | j        j"        r)| j        j"        \  }}tG          j$        ||          | _%        |d
k    r|dz
  | _&        n|| _&        | j        j        vd	| _'        | j        (                                 | j&        | _)        | j        *                                | _+        | j!        r| xj        dz  c_        | ,                    d           | j        dk    | _-        d S )Nr(   znot a PNG filer   T%r %s %s (unknown)r   r&   r   F   fdATr'   ).rX  rR   r_   re   _fp_PngImageFile__frameprivate_chunksr   pngr}   r   AttributeErrorry   rz   r   r   islowerrs   r   r   _moder   _sizer   r   _textr   r   r   custom_mimetyper   r9  getr   r   r   rawpalette_PngImageFile__prepare_idat!_close_exclusive_fp_after_loadingr   _PngImageFile__rewind_idatr`   _PngImageFile__rewind_seekis_animated)rX   rH   rf   rg   rh   r<   rawmoderJ   s           r7   _openzPngImageFile._open  s   tw||A'' 	#"Cc"""7
 VX%.tw%7%7	!  $x}}Cf9HMM#sF33   ! 9 9 913VDDD(&99qs8##%% 9'..Qx888	9 HLLa   !	!2 X%
X%
H$	37
H$	#x:,1!Y]]?EBB8 	; H/MGT'+GT::DL'>>"(1*D"(D8+5:D2H  """!%!4D HMMOODM! #"JJqMMM=1,s   B( (
D/4A8D/.D/dict[str, str | iTXt]c                    | j         [| j        r$| j        }|                     | j        dz
             |                                  | j        r|                     |           | j         J | j         S )Nr   )rg  rq  r`  r^   r9  load)rX   frames     r7   r   zPngImageFile.text8  sy     :  -		$-!+,,,IIKKK !		%   z%%%zr6   c                V   | j         d}t          |          | j                             | j        d         d         dz
             | j        J | j                                         | j                                         | j        r| j                                          d| _         dS )zVerify PNG fileNz)verify must be called directly after openr   r&   r(   )rR   RuntimeErrorr^   r   rb  r   ro   _exclusive_fp)rX   rH   s     r7   r   zPngImageFile.verifyH  s     7?=Cs### 	TYq\!_q()))x### 	GMMOOOr6   rw  rL   c                ^   |                      |          sd S || j        k     r|                     dd           | j        }t          | j        dz   |dz             D ]Q}	 |                     |           # t          $ r,}|                     |           d}t	          |          |d }~ww xY wd S )Nr   Tr   zno more images in APNG file)_seek_checkr`  rp  ranger   r^   )rX   rw  
last_framefr   rH   s         r7   r^   zPngImageFile.seekZ  s    && 	F4<JJq$\
t|a'33 	+ 	+A+

1 + + +		*%%%3smm*+	+ 	+s   A44
B*>'B%%B*Fr   r   c                	   | j         J t          | j        t                    r| j        j        |  d }|dk    r
|ry| j                            | j                   | j                                          | j        | _	        d | _
        | j         j        | _        | j         j        | _        | j        | _        d | _        d | _        | j                            dd          | _        | j                            d          | _        | j                            d          | _        | j                            d          }d| _        nx|| j        dz   k    rd| }t/          |          |                                  | j        r%| j                            | j        | j                   | j                                        | _        | j        | _        | j	        r&t;          j        | j        | j	                   d| _	        d}	 | j                            d
           	 | j                                         \  }}}n# t@          j!        tD          f$ r Y nw xY w|dk    rd}tG          |          |dk    r|rd}tE          |          d	}	 | j         $                    |||           n# tJ          $ r Y ntF          $ r3 |dk    r|d
z  }|r	|| _	        Y ndt;          j        | j        |           Y nFtL          $ r: tN          (                    d|||           t;          j        | j        |           Y nw xY w4|| _        | j         j        | _        | j                            d          | _        | j                            d          | _        | j                            d          }| j        sd}tG          |          |r|| _        | j        &| j        tR          j*        k    rtR          j+        | _        d | _        | j        tR          j*        k    rN| j        rE| j                                        | _        | ,                    | j        | j                  | _        d S d S | j        tR          j+        k    rVtZ          j.        /                    | j0        | j1                  | _        | ,                    | j        | j                  | _        d S d S )Nr   r   FrD  rF  r   r   zcannot seek to frame Tr'   r   zNo more images in APNG file   fcTLzAPNG missing frame datar^  r]  zimage not found in APNG frame)2rb  r   r_  r   exr^   ro  r   rn  rl  _imr   r   r   r   rR   _prev_imdisposeri  r   
dispose_opblend_opr`  rE   rv  impastedispose_extentr   r   r   r_   r   r   re   r   r}   UnicodeDecodeErrorrc  ry   rz   r.   r4   r3   _cropr   corefillmodesize)	rX   rw  r   r  rH   frame_startrf   rg   rh   s	            r7   rp  zPngImageFile._seeki  s   x###dh.. 	(+1A:: #dm,,,!!!&*&8# H,	 H,	( DMDL!%!F!FD"immJ77DO IMM'22DM!Y]]622NDLLq(((5e55 oo% IIKKK| AdlD,?@@@ GLLNNDMhDG " ($TWd.ABBB&'#K:Q'+x}}$Cffk2   E '>>7C"3--''>>" /7)#..."&K:HMM#sF3333)   E : : :g~~!& "28D/!E(&99999% : : :LL!5sCHHH(&99999:;:B !DL(DI"immJ77DO IMM'22DM!Y]]622N9 $5smm# 	TESD = T_8L%L%L&4DO?h222} M#}1133#zz$,8KLLM M _ 666 :??49di@@DL::dlD4GHHDLLL 76s7   H: :II	J& &
L02L0L0-A L0/L0c                    | j         S rV   )r`  rj   s    r7   r`   zPngImageFile.tell  s
    |r6   c                    | j                             d          r| j        dz   | _        | j        | _        t
          j                            |            dS )z"internal: prepare to read PNG filer   )r   N)r   ri  decoderconfigrl  _PngImageFile__idatr   load_preparerj   s    r7   r  zPngImageFile.load_prepare  sQ     9==%% 	;!%!3d!:D)((.....r6   
read_bytesr=   c                   | j         J | j        dk    r| j                            d           | j                                         \  }}}|dvr| j                             |||           dS |dk    r9	 | j                             |||           n# t          $ r Y nw xY w|dz
  | _        n|| _        | j        dk    |dk    r| j        }nt          || j                  }| j        |z
  | _        | j                            |          S )zinternal: read more image dataNr   r'   )   IDATs   DDATr^  r6   r^  )rb  r  rR   r_   ru   r}   r   min)rX   r  rf   rg   rh   s        r7   	load_readzPngImageFile.load_read  s$    x###kQ GLLOOO#x}}Cf555c3///sg~~HMM#sF3333   D$qj$% kQ* ??JJZ55JkJ.w||J'''s   5B 
BBc                |   | j         J | j        dk    r| j                            | j                   	 | j                            d           	 | j                                         \  }}}n# t          j        t          f$ r Y nAw xY w|dk    rn5|dk    r,| j        r%d| _        | j         	                    |||           n	 | j         
                    |||           n# t          $ r Y nt          $ rP |dk    r|dz  }	 t          j        | j        |           n&# t          $ r}t          j        rY d}~Y n|d}~ww xY wY nt"          $ rs t$                              d|||           t          j        | j        |          }|d	d
                                         r| j                            ||df           Y nw xY w| j         j        | _        | j        s"| j                                          d| _         dS | j        r0| j        t8          j        k    r|                     | j        | j                   }| j        j!        dk    r+d| j"        v r"|#                    d| j"        d                   }n| j        j!        dk    rkd| j"        v rb| j"        d         }tI          |tJ                    r|&                    |           n*tI          |tN                    r|(                    |           |)                    d          }| j        *                    || j         |           | j        | _        dS dS dS )z%internal: finished reading image dataNr   Tr'   r   r  r^  r]  r   r&   r   r   r%   r    )+rb  r  rR   r_   r   r   re   rq  rl  ru   r}   r  r   r   r   r   rc   rc  ry   rz   rd  ra  rs   r   rg  ro   r  r  r9   r;   r  r  r  r  r   convert_transparentr   r=   putpalettealphasrL   putpalettealphaconvertr  )	rX   rf   rg   rh   r   r<   updatedmaskts	            r7   load_endzPngImageFile.load_end  s|   x###;!GLL%%%"	?GLLOOO#'8==?? S&&L+.    g~~D$4&'#c3///?c3////%    	  	  	 '>>aKF (&9999       6  	  :9 " ? ? ?13VDDD(&99qs8##%% ?'..Q~>>>	?="	?F X%
 	(HNNDHHH} (%-!?!?**TWd.ABB7<5((^ty-H-H"66	. 9 DD w|s**~/J/J In5%a// 7#44Q7777'3// 7#33A666"??622D##GT-@$GGG-( (!?!?sa   A. .BBC# #
G/GDG
E)D=5G;D==EGA9GGdict[int, Any] | Nonec                    d| j         vr|                                  d| j         vrd| j         vrd S |                                                                 S )Nr3  zRaw profile type exif)r   rv  getexif_get_merged_dictrj   s    r7   _getexifzPngImageFile._getexif9  sU    ""IIKKK""'>di'O'O4||~~..000r6   
Image.Exifc                ~    d| j         vr|                                  t                                                      S )Nr3  )r   rv  r   r  )rX   r   s    r7   r  zPngImageFile.getexif@  s1    ""IIKKKww   r6   r   )r>   rt  )rw  rL   r>   rT   r   )rw  rL   r   r   r>   rT   )r>   rL   )r  rL   r>   r=   )r>   r  )r>   r  )r/   r0   r1   formatformat_descriptionrs  propertyr   r   r^   rp  r`   r  r  r  r  r  rR  rS  s   @r7   rZ  rZ    s3       F4A- A- A- A-F    X   $+ + + +bI bI bI bI bIH   / / / / (  (  (  (D<( <( <( <(|1 1 1 1! ! ! ! ! ! ! ! ! !r6   rZ  )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%   rR   rS   rf   rT   c                <   d                     |          }|                     t          t          |                    |z              |                     |           t	          |t	          |                    }|                     t          |                     dS )z'Write a PNG chunk (including CRC field)r6   N)joinwriteo32r  rO   )rR   rf   rJ   	byte_datar   s        r7   putchunkr  ^  s}     IHHSY  3&'''HHY
F3KK
(
(CHHSXXr6   c                      e Zd ZddZdd
ZdS )_idatrR   rS   chunkCallable[..., None]r>   rT   c                "    || _         || _        d S rV   )rR   r  )rX   rR   r  s      r7   rY   z_idat.__init__l  s    


r6   rJ   r=   c                >    |                      | j        d|           d S )Nr  )r  rR   rX   rJ   s     r7   r  z_idat.writep  s     

47GT*****r6   N)rR   rS   r  r  r>   rT   rJ   r=   r>   rT   r/   r0   r1   rY   r  r5   r6   r7   r  r  i  s<           + + + + + +r6   r  c                      e Zd Zdd	ZddZdS )_fdatrR   rS   r  r  r   rL   r>   rT   c                0    || _         || _        || _        d S rV   )rR   r  r   )rX   rR   r  r   s       r7   rY   z_fdat.__init__w  s    
r6   rJ   r=   c                    |                      | j        dt          | j                  |           | xj        dz  c_        d S )Nr^  r   )r  rR   r  r   r  s     r7   r  z_fdat.write|  s:    

47GS%6%6===r6   N)rR   rS   r  r  r   rL   r>   rT   r  r  r5   r6   r7   r  r  t  s<           
     r6   r  c                  .    e Zd ZU ded<   ded<   ded<   dS )_FrameImage.Imager  z tuple[int, int, int, int] | Noner   zdict[str, Any]encoderinfoNr   r5   r6   r7   r  r    s3         OOO****r6   r  r  r  r  r  r  r   rr  r   Image.Image | Noneappend_imageslist[Image.Image]c                   | j                             d          }| j                             d| j                            dd                    }| j                             d| j                            dt          j                            }	| j                             d| j                            dt
          j                            }
|rt          j        |          }nt          j        | g|          }g }d}|D ]}t          j
        |          D ]}|j        |k    r|                                }n|                    |          }| j                                         }t          |t          t           f          r||         |d<   n|d|j        v r|j        d         |d<   t          |	t          t           f          r|	|         |d<   t          |
t          t           f          r|
|         |d<   |dz  }|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        z   }|                    ||           n%|t          j        k    r|d         j        }n|j        }t9          j        |                    d	          |                    d	                    }|                    d          }|sS||                    d          k    r:||                    d          k    r!d|v r|j         dxx         |d         z  cc<   nd }|                    tA          |||                     ؐt%          |          dk    r|s|d         j        S  ||dtC          t%          |                    tC          |                     |r| j        |k    r|                     |          } tE          j#        | tI          tJ          tL                   tO          ||                    tE          j(        dd| j        z   d|          g           d}tS          |          D ] \  }}|j        }|j        sd|j        z   }n|j        }|                    |          }|j        }|j         }tU          tW          |                    dd                              }|                    d|	          }|                    d|
          } ||dtC          |          tC          |d                   tC          |d                   tC          |d                   tC          |d                   tY          |          tY          d          t[          |          t[          |                     |dz  }|dk    rd|sbtE          j#        |tI          tJ          tL                   tO          ||                    tE          j(        dd|j        z   d|          g           t]          |||          }tE          j#        |tI          tJ          tL                   |          tE          j(        dd|j        z   d|          g           |j/        }"d S )NrB  r6  r   rD  rF  r   r&   r%   )r   r   r   r   r   F)
alpha_onlys   acTLr   r  rA  )0r  ri  r   r.   r2   r9   r:   	itertoolschainr   Iteratorr  r   r  r   listr  r4   r  r3   r  r   r  r  r  r   cropr  r   subtract_modulogetbboxrs   r  r  r   _saver
   r   r=   r  r   	enumeraterL   roundo16r   r  r   ) r  rR   r  r  rr  r   r  rB  r6  rD  rF  r  	im_framesframe_countim_seqim_framer  previousprev_disposal
prev_blendbase_imr  r   deltar   rw  
frame_datar  frame_durationframe_disposalframe_blendfdat_chunkss                                    r7   _write_multiple_framesr    s    ~!!*--H>fbgkk&!&<&<==D~!!*bgkk*hFV.W.WXXHNwGU_(M(MNNE 5..m44 IK 3B 3B%.v66 2	B 2	BH}$$#==??#++D11.--//K(T5M22 D*2;*?J''!jHM&A&A*2-
*CJ'(T5M22 @*2;*?J'%$// :',['9G$1K !$R= ( 4 8 8 D D%155g>>
 H$888S^^a=O=O$,$:M H$:::&k..00G#joofbg|LLG#=D 0"),,t"4"4%/MM'40000"h&:::'m.GG&kG"2$$V,,goof.E.E  }}}66%)D)DDD"koog&>&>>>"k11(444J8OO444VHdK@@AAAAe2	Bh 9~~=| 
E
C	NND			    
7d??D!!BEE"e,,--_UFRW$4aAAB	
 	
 	
 G&y11 ** **z= 	+HM)DD?D}}T**H} ,U;??:q#A#ABBCC$X>>!oogu55LLQLLQLLQLLQLLII~{OO	
 	
 	
 	1A::m:ORYb% 0 011(>7KKL     E733KORY,,(>7KKL  
 ")GG4r6   filenamer   c                ,    t          | ||d           d S )NT)save_all)r  )r  rR   r  s      r7   	_save_allr    s    	"b(T******r6   r  c                  ( |r| j                             d| j                            d                    }t                      }t                      (| j                             dg           }t	          j        | g|          D ]M}t          j        |          D ]6}	|                    |	j	                   (                    |	j
                   7NdD ]}
|
|v r n	|                                }
t          (fdt          d          D                       }n| j
        }| j	        }
|
}|
dk    rd| j         v rt          d| j         d         z  d	          }nU| j        rLt!          t          t#          | j                                        d                   d
z  d	          d          }nd	}|dk    r|dk    rd}n|dk    rd}nd}|d| z  }| j                             dd          | j                             dd          | j                             dd          | j                             dd          f| _        	 t(          |         \  }}}n(# t*          $ r}d|
 d}t-          |          |d }~ww xY w|dk    rt/          ddd           |                    t2                      ||dt5          |d                   t5          |d                   ||ddd	  	         g d}| j                             d| j                            d                    }|r>d }|d!z   t7          j        |          z   } ||d"|           |                    d#           | j                             d$          }|rg d%}|j        D ]}|d d         \  }}||v r#|                    |            ||||           6||v r ||||           H|dd                                         r*t#          |          d
k    o|d         }|s ||||           | j	        dk    r_|d
z  }| j         !                    d&          d |         }t#          |          |k     r|dz  }t#          |          |k      ||d'|           | j                             d(| j                            d(d                     }|s|dk    r| j	        dk    rk|} tE          |tF                    r ||d)|d |                     n@t!          dt          d*|                    }d+|z  dz   }! ||d)|!d |                     n| j	        d,v r9t!          dt          d-|                    } ||d)tI          |                     n| j	        d&k    rA|\  }"}#}$ ||d)tI          |"          tI          |#          z   tI          |$          z              nud(| j         v rd.}t-          |          nZ| j	        dk    rO| j         %                                d/k    r2| j         !                    d/d0          }!|}  ||d)|!d |                     | j                             d1          }%|%r[ ||d2t5          tM          |%d         d3z  d4z                       t5          tM          |%d         d3z  d4z                       d5           |rAd6d7g}|j        D ]5}|d d         \  }}||v r"|                    |            ||||           6| j                             d8          }&|&r[tE          |&tN          j(                  r|&)                    d9          }&|&*                    d:          r
|&d;d          }& ||d<|&           | }'|rtW          | |||
|||          }'|'r`tY          j-        |'t]          t^          tF                   ta          ||                    tY          j1        d=d>|'j
        z   d|          g           |r]|j        D ]U}|d d         \  }}|dd                                         r*t#          |          d
k    o|d         }|r ||||           V ||d?d           te          |d@          r|3                                 d S d S )ANr   r  )r%   r   r    c              3  P   K   | ]t          fd D                       V   dS )c              3  (   K   | ]}|         V  d S rV   r5   )r
  
frame_sizer   s     r7   r  z"_save.<locals>.<genexpr>.<genexpr>2  s'      ??:A??????r6   N)max)r
  r   sizess    @r7   r  z_save.<locals>.<genexpr>2  sA      RRAS?????????RRRRRRr6   r&   r    bitsr      r*   r)   r'   ;optimizeFcompress_levelr  compress_type
dictionaryr6   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   hISTr3  r(   r2  r+   s   eXIfr   r   r   flush)4r  ri  r   setr  r  r   r  r   r  r  r]   r  r}  r  rk  r  r  getdataencoderconfig	_OUTMODESKeyErrorr   r   r  rW  r  r@   r   remover   rd  r  
getpaletter   r=   r  getpalettemoderL   r   ExiftobytesrV  r  r   r  r
   r   r  r   hasattrr  ))r  rR   r  r  r  r   modesr  r  r  r  r  outmodecolorsr  rr  	bit_depth
color_typer   rH   r   iccnamerJ   r   chunks_multiple_allowed
info_chunkrf   r   palette_byte_numberpalette_bytesr   alpha_bytesalpharedgreenbluer  r3  	single_imr  s)                                           @r7   r  r    s	     **RW[[99
 
 **?B??ordM:: 	) 	)F)26:: ) )		(-(((		(-(((() ) 	 	Du}}  99;;DRRRRqRRRRRwwGs{{ R^##bnV44c::FF z SRZ%7%7%9%9!%<!=!=!BCHH!LLR<<{{1z4zz!G 	:u--
+R00
?B//
<--	B")27);&JJ " " "04000cll!" #~~/BBBB
 HHV	E
DGDG
 
 
 DCCF
.

]BGKK,F,F
G
GC
  g~c 2 22b'4    	g>i((D )"F"F"F+ 	) 	)J"2A2ICf}}c"""b#t$$$$///b#t$$$$QqS!!## ) __1Cjm
! )E"c4(((	w#~~$qj((//0D1D0DE-  #666U"M -  #666b'=)))>%%nbgkk.RV6W6WXXL 4|q((7c>> K,.. 8b'<#=>>>>"1c#|&<&<==,.6b'5+#67777W///q#e\":":;;LE"gs<001111W+CE"gs3xx#e**4s4yy@AAAA// >cll"	 0 7c>>be2244>>E$$VS11E KE"gu\k\2333
.

U
#
#C
 
CFVOc)**++CFVOc)**++	
 	
 	
  %7#+ 	% 	%J"2A2ICf}}c"""b#t$$$>f%%D !dEJ'' 	#<<??D???++ 	8Db'4   $&I 
*E4-
 
	  
EE"e,,--_UFY^$;QHHI	
 	
 	
  )+ 	) 	)J"2A2IC1Q3x!! ) __1Cjm
 )E"c4(((	E"gsr7 





 s    I 
I7I22I7paramsr    list[tuple[bytes, bytes, bytes]]c                    ddl m} g dfd
} |            }	 || _        t          | |d|           | `n# | `w xY wS )z4Return a list of PNG chunks representing this image.r   )BytesIOrR   rS   rf   r=   rJ   r>   rT   c                    d                     |          }t          t          |t          |                              }                    |||f           d S )Nr6   )r  r  rO   rs   )rR   rf   rJ   r  r   r   s        r7   rs   zgetchunks.<locals>.append  sN    HHTNN	&F3KK0011sIs+,,,,,r6   r   rR   rS   rf   r=   rJ   r=   r>   rT   )ior&  r  r  )r  r#  r&  rs   rR   r   s        @r7   	getchunksr*    s    F- - - - - -
 
Bb"b&!!!NNBNMs   7 ;z.pngz.apngz	image/png)r<   r=   r>   r=   )r   )rJ   r=   rK   rL   r>   rL   )rT  r=   r>   r   r(  )r  r  rR   rS   r  r  r  r   rr  r   r   r  r  r  r>   r  )r  r  rR   rS   r  r   r>   rT   )r  r  rR   rS   r  r   r  r  r  r   r>   rT   )r  r  r#  r   r>   r$  )O
__future__r   r  loggingrer   r7  r@   collections.abcr   enumr   typingr   r   r   r	   r
   r   r   r   r   r   r   _binaryr   r   r   ra   r   r   r  r   r  
_deprecater   _utilr   TYPE_CHECKINGr   	getLoggerr/   ry   compiler   rb   rW  r   r   	SAFEBLOCKrC   r   r.   r9   rI   rO   rQ   r   r   r   r   r   rX  rZ  r
  r  r  r  r  r  r  r  r*  register_openr  register_saveregister_save_allregister_extensionsregister_mimer5   r6   r7   <module>r=     sn  B # " " " " "      				    $ $ $ $ $ $       6 6 6 6 6 6 6 6 6 6 6 6 6 6 G G G G G G G G G G G G G G ! ! ! ! ! ! ! ! ! ! ! !       ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !             		8	$	$	L	!	!	' 
 !+
 
2 "*011$
 ~%    w   *    G      / / / / /[ [ [ [ [ [ [ [|    3   6Y3 Y3 Y3 Y3 Y3 Y3 Y3 Y3@    :   d4 d4 d4 d4 d4 d4 d4 d4V% % % %S! S! S! S! S!9& S! S! S!v
 
!$$$	 
"	$'($$$	 $&! 	(   + + + + + + + +
 
 
 
 
 
 
 
         Z      K K K K\+ + + + "*P P P P Pn   2  L'w ? ? ?  L' / / /  +Y 7 7 7  ,-/@ A A A  L' 5 5 5 5 5r6   