
    _i	                       S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKrS SKJ	r	  S SK
Jr  S SKJrJrJr  SSKJrJrJrJrJr  SSKJr  SS	KJr  SS
KJr  SSKJr  SSKJr  SSK J!r!  SSK"J#r#  Sr$\$(       a  S SK%J&r&  S SKJ'r'J(r(  SSKJ)r)  \RT                  " \+5      r,\RZ                  " S5      R\                  r/Sr0SSSSSSSSSSSS S!S"S#S$.r1\RZ                  " S%5      r2\Rf                  r4 S&\4-  r5  " S' S(\	5      r6 " S) S*\	5      r7SWS+ jr8SXSYS, jjr9 " S- S.5      r: " S/ S0\;5      r< " S1 S25      r= " S3 S4\5      r> " S5 S6\:5      r?SZS7 jr@ " S8 S9\R&                  5      rAS:S;S<S=S>S?S@S@S@SASBSCSDSESFSG.rBS[SH jrC " SI SJ5      rD " SK SL5      rES\SM jrF " SN SO\5      rG                S]SP jrHS^SQ jrI\CS4           S_SR jjrJS`SS jrK\R                  " \AR                  \A\@5        \R                  " \AR                  \J5        \R                  " \AR                  \I5        \R                  " \AR                  STSU/5        \R                  " \AR                  SV5        g)a    )annotationsN)IntEnum)Fraction)IO
NamedTuplecast   )Image
ImageChops	ImageFileImagePaletteImageSequence)i16be)i32be)o8)o16be)o32be)	deprecate)DeferredErrorF)Callable)AnyNoReturn)_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                  $    \ rS rSrSr Sr SrSrg)Disposaln   r   r	   r'    N)__name__
__module____qualname____firstlineno__OP_NONEOP_BACKGROUNDOP_PREVIOUS__static_attributes__r1       N/var/www/html/land-ocr/venv/lib/python3.13/site-packages/PIL/PngImagePlugin.pyr/   r/   n   s$    G M
 Kr:   r/   c                      \ rS rSrSr SrSrg)Blend   r   r	   r1   N)r2   r3   r4   r5   	OP_SOURCEOP_OVERr9   r1   r:   r;   r=   r=      s    I
 Gr:   r=   c                    [         R                  " 5       nUR                  U [        5      nUR                  (       a  Sn[        U5      eU$ )Nz=Decompressed data too large for PngImagePlugin.MAX_TEXT_CHUNK)zlibdecompressobj
decompressMAX_TEXT_CHUNKunconsumed_tail
ValueError)sdobj	plaintextmsgs       r;   _safe_zlib_decompressrL      s>    D>2IMor:   c                4    [         R                  " X5      S-  $ )Nl    )rB   crc32)dataseeds     r;   _crc32rQ      s    ::d!J..r:   c                  |    \ rS rSrSS jrSS jrSS jrSS jrSS jrSS jr	SS jr
SS	 jrSS
 jrSSS jjrSrg)ChunkStream   c                    Xl         / U l        g Nfpqueue)selfrX   s     r;   __init__ChunkStream.__init__   s    $&:<
r:   c                   SnU R                   c   eU R                  (       a9  U R                  R                  5       u  pnU R                   R                  U5        OEU R                   R	                  S5      nUSS nU R                   R                  5       n[        U5      n[        U5      (       d/  [        R                  (       d  S[        U5       S3n[        U5      eXU4$ )z.Fetch a new chunk. Returns header information.Nr)   r(   zbroken PNG file (chunk ))rX   rY   popseekreadtelli32is_cidr   LOAD_TRUNCATED_IMAGESreprSyntaxError)rZ   cidposlengthrH   rK   s         r;   ra   ChunkStream.read   s    ww"""::#zz~~/CfGGLLQAAB%C'',,.CVFc{{22/S	{!<!#&&r:   c                    U $ rV   r1   rZ   s    r;   	__enter__ChunkStream.__enter__   s    r:   c                $    U R                  5         g rV   )close)rZ   argss     r;   __exit__ChunkStream.__exit__   s    

r:   c                     S =U l         U l        g rV   )rY   rX   rm   s    r;   rq   ChunkStream.close   s    ##
TWr:   c                \    U R                   c   eU R                   R                  XU45        g rV   )rY   appendrZ   rh   ri   rj   s       r;   pushChunkStream.push   s)    zz%%%

3V,-r:   c                x    [         R                  SXU5        [        U SUR                  S5       35      " X#5      $ )z"Call the appropriate chunk handlerzSTREAM %r %s %schunk_ascii)loggerdebuggetattrdecodery   s       r;   callChunkStream.call   s8     	&&9tvcjj&9%:;<SIIr:   c                   [         R                  (       a"  US   S-	  S-  (       a  U R                  X5        gU R                  c   e [	        U[	        U5      5      n[        U R                  R                  S5      5      nX4:w  a  S[        U5       S3n[        U5      eg! [        R                   a   nS[        U5       S3n[        U5      UeSnAff = f)	zRead and verify checksumr      r	   Nr(   z(broken PNG file (bad header checksum in r^   z(broken PNG file (incomplete checksum in )r   re   crc_skiprX   rQ   rc   ra   rf   rg   structerror)rZ   rh   rO   crc1crc2rK   es          r;   crcChunkStream.crc   s     **A!aMM#$ww"""	*$s,Dtww||A'D|@c1M!#&&  || 	*<T#YKqICc")	*s   AB! !C5CCc                X    U R                   c   eU R                   R                  S5        g)zRead checksumNr(   )rX   ra   )rZ   rh   rO   s      r;   r   ChunkStream.crc_skip   s#     ww"""Qr:   c                :   / nU R                   c   e  U R                  5       u  p4nX1:X  a   U$ U R                  U[        R                  " U R                   U5      5        UR                  U5        M`  ! [        R                   a  nSn[	        U5      UeS nAff = f)Nztruncated PNG file)	rX   ra   r   r   OSErrorr   r   
_safe_readrx   )rZ   endchunkcidsrh   ri   rj   r   rK   s           r;   verifyChunkStream.verify   s     ww"""*#'99; &
   HHS)..tww?@KK  << **cl)*s   A3 3BBBrW   NrX   	IO[bytes]returnNone)r   ztuple[bytes, int, int])r   rS   )rr   objectr   r   r   r   )rh   bytesri   intrj   r   r   r   )rh   r   ri   r   rj   r   r   r   )rh   r   rO   r   r   r   )   IEND)r   r   r   zlist[bytes])r2   r3   r4   r5   r[   ra   rn   rs   rq   rz   r   r   r   r   r9   r1   r:   r;   rS   rS      s:    = *$.J** r:   rS   c                  V    \ rS rSr% SrS\S'   S\S'   \ S	       S
S jj5       rSrg)iTXt   ze
Subclass of string to allow iTXt chunks to look like strings while
keeping their extra information

zstr | bytes | NonelangtkeyNc                H    [         R                  X5      nX$l        X4l        U$ )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
)str__new__r   r   )clstextr   r   rZ   s        r;   r   iTXt.__new__
  s!     {{3%		r:   )r   r   )NN)r   r   r   
str | Noner   r   r   r   )	r2   r3   r4   r5   __doc____annotations__staticmethodr   r9   r1   r:   r;   r   r      sJ     
DH(7A	 r:   r   c                  x    \ rS rSrSrS	S jrS
SS jjr   S           SS jjr S
       SS jjrSr	g)PngInfoi  z4
PNG chunk container (for use with save(pnginfo=))

c                    / U l         g rV   chunksrm   s    r;   r[   PngInfo.__init__!  s	    79r:   c                >    U R                   R                  XU45        g)zAppends 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   rx   )rZ   rh   rO   
after_idats       r;   addPngInfo.add$  s     	Cz23r:   c                   [        U[        5      (       d  UR                  SS5      n[        U[        5      (       d  UR                  SS5      n[        U[        5      (       d  UR                  SS5      n[        U[        5      (       d  UR                  SS5      nU(       a9  U R                  SUS-   U-   S-   U-   S-   [        R
                  " U5      -   5        gU R                  SUS-   U-   S-   U-   S-   U-   5        g)	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   rB   compress)rZ   keyvaluer   r   zips         r;   add_itxtPngInfo.add_itxt0  s    $ #u%%**Y1C%''LL(3E$&&;;w1D$&&;;w1DHHk!D(5047%?$--PUBVV
 HHWcIo4u<tCeKeSTr:   c                4   [        U[        5      (       aH  U R                  UUUR                  b  UR                  OSUR                  b  UR                  US9$ SUS9$ [        U[
        5      (       d   UR                  SS5      n[        U[
        5      (       d  UR                  SS5      nU(       a-  U R                  SUS-   [        R                  " U5      -   5        gU R                  SUS	-   U-   5        g! [         a    U R                  XUS9s $ f = f)
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

Nr:   )r   r   r      zTXt        tEXtr   )r   r   r   r   r   r   r   UnicodeErrorr   rB   r   )rZ   r   r   r   s       r;   add_textPngInfo.add_textS  s
    eT""==#jj4

##jj4

 !   ;> !   %'':Y9 #u%%**Y1CHHWcGmdmmE.BBCHHWcEkE12   :}}SS}99:s   4C: :DDr   Nr   F)rh   r   rO   r   r   boolr   r   ) r   F)r   str | bytesr   r   r   r   r   r   r   r   r   r   )r   r   r   zstr | bytes | iTXtr   r   r   r   )
r2   r3   r4   r5   r   r[   r   r   r   r9   r1   r:   r;   r   r     s    
:
4  !U!U !U 	!U
 !U !U 
!UH HM!3!3'9!3@D!3	!3 !3r:   r   c                  4    \ rS rSr% S\S'   S\S'   S\S'   Srg	)
_RewindStatei{  z dict[str | tuple[int, int], Any]infozlist[ImageFile._Tile]tilez
int | Noneseq_numr1   Nr2   r3   r4   r5   r   r9   r1   r:   r;   r   r   {  s    
**
r:   r   c                     ^  \ rS rSrSU 4S jjrSS jrSS jrSS jrSS jrSS jr	SS jr
SS	 jrSS
 jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrSrU =r$ )	PngStreami  c                   > [         TU ]  U5        0 U l        0 U l        SU l        SU l        / U l        S U l        S U l        S U l	        S U l
        [        0 / S 5      U l        SU l        g )Nr   r   r   r   )superr[   im_infoim_textim_sizeim_modeim_tile
im_paletteim_custom_mimetypeim_n_frames_seq_numr   rewind_statetext_memory)rZ   rX   	__class__s     r;   r[   PngStream.__init__  sl     :<.0.048.2'+$((R6r:   c                    U =R                   U-  sl         U R                   [        :  a  SU R                    S3n[        U5      eg )Nz%Too much memory used in text chunks: z>MAX_TEXT_MEMORY)r   MAX_TEXT_MEMORYrG   )rZ   chunklenrK   s      r;   check_text_memoryPngStream.check_text_memory  sN    H$o-7##$$46  S/! .r:   c                    [        U R                  R                  5       U R                  U R                  5      U l        g rV   )r   r   copyr   r   r   rm   s    r;   save_rewindPngStream.save_rewind  s-    (LLLLMM
r:   c                    U R                   R                  R                  5       U l        U R                   R                  U l        U R                   R                  U l        g rV   )r   r   r   r   r   r   r   r   rm   s    r;   rewindPngStream.rewind  sD    ((--224((--))11r:   c                   U R                   c   e[        R                  " U R                   U5      nUR                  S5      n[        R                  SUS U 5        X4S-      n[        R                  SU5        US:w  a  SU S3n[        U5      e [        X4S-   S  5      nXpR                  S	'   U$ ! [         a    [        R                  (       a  S n N3e [        R                   a    S n NKf = f)
Nr   ziCCP profile name %rr	   zCompression method %sr   Unknown compression method z in iCCP chunkr'   icc_profile)rX   r   r   findr   r   rg   rL   rG   re   rB   r   r   )rZ   ri   rj   rH   icomp_methodrK   r   s           r;   
chunk_iCCPPngStream.chunk_iCCP  s    ww"""  &1 FF5M+QrU3Ah,k:!/}NKCc""	/a%'
;K '2]#  	.."zz 	K	s   B0 0!C,C,+C,c                   U R                   c   e[        R                  " U R                   U5      nUS:  a$  [        R                  (       a  U$ Sn[	        U5      e[        US5      [        US5      4U l         [        US   US   4   u  U l        U l	        US   (       a  SU R                  S	'   US
   (       a  Sn[        U5      eU$ ! [         a     N>f = f)N   zTruncated IHDR chunkr   r(   r)   	      r	   	interlace   zunknown filter category)rX   r   r   re   rG   rc   r   _MODESr   
im_rawmode	Exceptionr   rg   rZ   ri   rj   rH   rK   s        r;   
chunk_IHDRPngStream.chunk_IHDR  s    ww"""  &1B;..(CS/!1ay#a)+	,2AaD!A$<,@)DL$/ R5()DLL%R5+Cc""  		s   9C	 	
CCc                N   SU R                   ;   a1  [        R                  " SU R                   S   XR                  5      /nOLU R                  b  SU R                   S'   [        R                  " SSU R
                  -   XR                  5      /nX0l        X l        Sn[        U5      e)Nbboxr   Tdefault_imager   zimage data found)	r   r   _Tiler  r   r   r   im_idatEOFError)rZ   ri   rj   r   rK   s        r;   
chunk_IDATPngStream.chunk_IDAT  s    T\\!OOE4<<+?ooVWD+04_-OOE6DLL+@#WXD smr:   c                    Sn[        U5      e)Nzend of PNG image)r  )rZ   ri   rj   rK   s       r;   
chunk_IENDPngStream.chunk_IEND  s     smr:   c                    U R                   c   e[        R                  " U R                   U5      nU R                  S:X  a	  SU4U l        U$ )Nr!   r    )rX   r   r   r   r   rZ   ri   rj   rH   s       r;   
chunk_PLTEPngStream.chunk_PLTE  sD    ww"""  &1<<3#QhDOr:   c                b   U R                   c   e[        R                  " U R                   U5      nU R                  S:X  aR  [        R                  U5      (       a'  UR                  S5      nUS:  a  X@R                  S'   U$ X0R                  S'    U$ U R                  S:X  a#  [        U5      (       a  SOSU R                  S'   U$ U R                  S;   a  [        U5      U R                  S'   U$ U R                  S:X  a/  [        U5      [        US	5      [        US
5      4U R                  S'   U$ )Nr!   r   r   transparencyr      )r   r   r    r'   r(   )	rX   r   r   r   _simple_palettematchr   r   i16)rZ   ri   rj   rH   r   s        r;   
chunk_tRNSPngStream.chunk_tRNS  s   ww"""  &1<<3$$Q'' FF5M634LL0  01^,  \\S 25a&&3aDLL(
 	 \\]*+.q6DLL(  \\U"+.q63q!9c!Qi+GDLL(r:   c                    U R                   c   e[        R                  " U R                   U5      n[        U5      S-  U R                  S'   U$ )N     j@gamma)rX   r   r   rc   r   r  s       r;   
chunk_gAMAPngStream.chunk_gAMA	  sD    ww"""  &1 #A 1Wr:   c                    U R                   c   e[        R                  " U R                   U5      n[        R                  " S[        U5      S-   S3U5      n[        S U 5       5      U R                  S'   U$ )N>r(   Ic              3  *   #    U  H	  oS -  v   M     g7f)r#  Nr1   ).0elts     r;   	<genexpr>'PngStream.chunk_cHRM.<locals>.<genexpr>  s     ,Px8^xs   chromaticity)rX   r   r   r   unpacklentupler   )rZ   ri   rj   rH   raw_valss        r;   
chunk_cHRMPngStream.chunk_cHRM  si     ww"""  &1==1SVq[M!3Q7',,Px,P'P^$r:   c                    U R                   c   e[        R                  " U R                   U5      nUS:  a$  [        R                  (       a  U$ Sn[	        U5      eUS   U R
                  S'   U$ )Nr	   zTruncated sRGB chunkr   srgb)rX   r   r   re   rG   r   r  s        r;   
chunk_sRGBPngStream.chunk_sRGB  se     ww"""  &1A:..(CS/! tVr:   c                ^   U R                   c   e[        R                  " U R                   U5      nUS:  a$  [        R                  (       a  U$ Sn[	        U5      e[        US5      [        US5      peUS   nUS:X  a  US-  US-  4nXR                  S'   U$ US:X  a  XV4U R                  S	'   U$ )
Nr  zTruncated pHYs chunkr   r(   r)   r	   
F%u?dpiaspect)rX   r   r   re   rG   rc   r   )	rZ   ri   rj   rH   rK   pxpyunitr<  s	            r;   
chunk_pHYsPngStream.chunk_pHYs+  s    ww"""  &1A:..(CS/!QC1IBt19v+rF{*C"%LL  QY%'VDLL"r:   c                   U R                   c   e[        R                  " U R                   U5      n UR                  SS5      u  pEU(       ac  UR                  SS5      nUR                  SS5      nUS:X  a  UOUU R                  U'   XpR                  U'   U R                  [        U5      5        U$ ! [         a    UnSn N|f = f)Nr   r	   r:   r   r   replaces   exif)
rX   r   r   splitrG   r   r   r   r   r1  )rZ   ri   rj   rH   kvk_strv_strs           r;   
chunk_tEXtPngStream.chunk_tEXt=  s    ww"""  &1	775!$DA
 HHY1EHHY	2E'(G|!DLL"'LL""3u:.  	AA	s   B2 2CCc                f   U R                   c   e[        R                  " U R                   U5      n UR                  SS5      u  pEU(       a  US   nOSnUS:w  a  SU S3n[        U5      e [        USS  5      nU(       a\  UR                  SS5      nUR                  SS	5      n	U	=U R                  U'   U R                  U'   U R                  [        U	5      5        U$ ! [         a    UnSn Nf = f! [         a    [        R                  (       a  Sn Ne [        R                   a    Sn Nf = f)
Nr   r	   r:   r   r   z in zTXt chunkr   r   rD  )rX   r   r   rE  rG   rg   rL   re   rB   r   r   r   r   r   r1  )
rZ   ri   rj   rH   rF  rG  r   rK   rH  rI  s
             r;   
chunk_zTXtPngStream.chunk_zTXtQ  s-   ww"""  &1	775!$DA A$KK!/}NKCc""	%ae,A HHY1EHHY	2E8==DLL$,,u"5""3u:.7  	AA	  	..zz 	A	s)   C  -C4  C10C14!D0D0/D0c                Z   U R                   c   e[        R                  " U R                   U5      =p4 UR                  SS5      u  pS[        U5      S:  a  U$ US   US   USS  p7n UR                  SS5      u  pn
US:w  a  US:X  a   [        U
5      n
OU$ US:X  a  XR                  S'    UR                  SS5      nUR                  S	S5      nU	R                  S	S5      nU
R                  S	S5      n[        XU5      =U R                  U'   U R                  U'   U R                  [        U5      5        U$ ! [         a    Us $ f = f! [         a    Us $ f = f! [         a    [        R                  (       a  Us $ e [        R                   a    Us $ f = f! [         a    Us $ f = f)
Nr   r	   r'   r   s   XML:com.adobe.xmpxmpr   r   r   )rX   r   r   rE  rG   r1  rL   re   rB   r   r   r   r   r   r   r   )rZ   ri   rj   rrH   rF  cfcmr   tkrG  rH  lang_strtk_strrI  s                  r;   
chunk_iTXtPngStream.chunk_iTXtt  s   ww"""$$TWWf55	775!$DA q6A:HaD!A$!"	''%+KDa 7Qw-a0A $$"#LL	HHY1E{{7H5HYYw1FHHWh/E 59&4QQUdll51s5z*G  	H	  	H	 "  66 zz H  	H	sN   D8 'E
 	E ,AF 8EE
EE!F?FFF*)F*c                    U R                   c   e[        R                  " U R                   U5      nSU-   U R                  S'   U$ )N   Exif  exif)rX   r   r   r   r  s       r;   
chunk_eXIfPngStream.chunk_eXIf  s@    ww"""  &1.2Vr:   c                   U R                   c   e[        R                  " U R                   U5      nUS:  a$  [        R                  (       a  U$ Sn[	        U5      eU R
                  b  S U l        [        R                  " S5        U$ [        U5      nUS:X  d  US:  a  [        R                  " S5        U$ XPl        [        US5      U R                  S'   SU l
        U$ )	Nr)   z"APNG contains truncated acTL chunkz4Invalid APNG, will use default PNG image if possibler   l        r(   loopz
image/apng)rX   r   r   re   rG   r   warningswarnrc   r   r   )rZ   ri   rj   rH   rK   n_framess         r;   
chunk_acTLPngStream.chunk_acTL  s    ww"""  &1A:..6CS/!'#DMMPQHq6q=Hz1MMPQH#"1ayV".r:   c                   U R                   c   e[        R                  " U R                   U5      nUS:  a$  [        R                  (       a  U$ Sn[	        U5      e[        U5      nU R                  c  US:w  d   U R                  b   U R                  US-
  :w  a  Sn[        U5      eXPl        [        US5      [        US5      pv[        US5      [        US	5      pU R                  u  pX-   U
:  d  X-   U:  a  S
n[        U5      eXX-   X-   4U R                  S'   [        US5      [        US5      pUS:X  a  Sn[        U5      [        U5      -  S-  U R                  S'   US   U R                  S'   US   U R                  S'   U$ )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)rX   r   r   re   rG   rc   r   rg   r   r   r  float)rZ   ri   rj   rH   rK   seqwidthheightr>  r?  im_wim_h	delay_num	delay_dens                 r;   
chunk_fcTLPngStream.chunk_fcTL  sj   ww"""  &1B;..6CS/!!fMM!cQhMM%$--37*B7Cc""Aq	3q!9vQSBZB\\
:d 20Cc"" "
BK@V"1bz3q":9>I#(#3eI6F#F#MZ #$R5Z  !"Wr:   c                   U R                   c   eUS:  aE  [        R                  (       a#  [        R                  " U R                   U5      nU$ Sn[	        U5      e[        R                  " U R                   S5      n[        U5      nU R                  US-
  :w  a  Sn[        U5      eXPl        U R                  US-   US-
  5      $ )Nr(   z"APNG contains truncated fDAT chunkr	   rg  )	rX   r   re   r   rG   rc   r   rg   r  )rZ   ri   rj   rH   rK   rr  s         r;   
chunk_fdATPngStream.chunk_fdAT  s    ww"""A:..((&96CS/!  !,!f==C!G#7Cc""sQw
33r:   )r   r   r  r   r   r   r   r  r   r   r   r   r   r   )r   r   r   r   r   )ri   r   rj   r   r   r   )ri   r   rj   r   r   r   )r2   r3   r4   r5   r[   r   r   r   r   r	  r  r  r  r   r%  r4  r8  rA  rJ  rM  rW  r\  rc  ry  r|  r9   __classcell__r   s   @r;   r   r     ss    ""
2
8*."$(!F)V*<4 4r:   r   c                ,    U R                  [        5      $ rV   )
startswith_MAGIC)prefixs    r;   _acceptr    s    V$$r:   c                     ^  \ rS rSrSrSrSS jr\SS j5       rSU 4S jjr	SS jr
SSS jjrSS	 jrSS
 jrSS jrSS jrSS jrSU 4S jjrSrU =r$ )PngImageFilei  PNGzPortable network graphicsc                   U R                   c   e[        U R                   R                  S5      5      (       d  Sn[        U5      eU R                   U l        SU l        / U l        [        U R                   5      U l         U R                  R                  5       u  p#n U R                  R                  X#U5      nU R                  R%                  X%5        MW  ! [         a     O{[         ao    [        R                  SX#U5        [        R                  " U R                   U5      nUSS R!                  5       (       a  U R                  R#                  X%45         Nf = fU R                  R&                  U l        U R                  R*                  U l        U R                  R.                  U l        S U l        U R                  R4                  U l        U R                  R8                  U l        U R                  R<                  =(       d    SU l        U R0                  RA                  SS5      U l!        U R                  RD                  (       a3  U R                  RD                  u  pg[F        RH                  " Xg5      U l%        US	:X  a  US
-
  U l&        OX@l&        U R                  R<                  b  SU l'        U R                  RQ                  5         U RL                  U l)        U R                  RU                  5       U l+        U RB                  (       a  U =R>                  S-  sl        U RY                  S5        U R>                  S:  U l-        g )Nr)   znot a PNG filer   %r %s %s (unknown)r	   r'   r  F   fdATr(   ).rX   r  ra   rg   _fp_PngImageFile__frameprivate_chunksr   pngr   r  AttributeErrorr   r   r   r   islowerrx   r   r   _moder   _sizer   r   _textr   r   r   custom_mimetyper   rb  getr  r   r   rawpalette_PngImageFile__prepare_idat!_close_exclusive_fp_after_loadingr   _PngImageFile__rewind_idatrb   _PngImageFile__rewind_seekis_animated)rZ   rK   rh   ri   rj   rH   rawmoderO   s           r;   _openPngImageFile._open  sn   ww"""tww||A''"Cc""77
 VX%.tww%7  $xx}}Cf9HHMM#F3 HHLL !   ! 913VD((&9q8##%%''..x8	9 XX%%
XX%%
HH$$	37
HH$$	#xx::,,1!YY]]?EB88 HH//MG'++G:DL'>"(1*D"(88+5:D2HH  "!%!4!4D HHMMODM!!"JJqM==1,s   C 
E#A5EEc                ,   U R                   cm  U R                  (       a*  U R                  nU R                  U R                  S-
  5        U R                  5         U R                  (       a  U R                  W5        U R                   c   eU R                   $ )Nr	   )r  r  r  r`   rb  load)rZ   frames     r;   r   PngImageFile.text>  so     :: 		$--!+,IIK		% zz%%%zzr:   c                8  > U R                   c  Sn[        U5      eU R                   R                  U R                  S   S   S-
  5        U R                  c   eU R                  R                  5         U R                  R                  5         [        TU ]  5         g)zVerify PNG fileNz)verify must be called directly after openr   r'   r)   )rX   RuntimeErrorr`   r   r  r   rq   r   )rZ   rK   r   s     r;   r   PngImageFile.verifyN  sw     77?=Cs## 	TYYq\!_q()xx###r:   c                X   U R                  U5      (       d  g XR                  :  a  U R                  SS5        U R                  n[        U R                  S-   US-   5       H  n U R                  U5        M     g ! [         a$  nU R                  U5        Sn[	        U5      UeS nAff = f)Nr   Tr	   zno more images in APNG file)_seek_checkr  r  ranger  r`   )rZ   r  
last_framefr   rK   s         r;   r`   PngImageFile.seek^  s    &&<<JJq$\\
t||a'3A+

1 4  +		*%3sm*+s   %A;;
B)B$$B)c                F   U R                   c   e[        U R                  [        5      (       a  U R                  R                  eU   S nUS:X  Ga8  U(       a  U R                  R                  U R                  5        U R                   R                  5         U R                  U l	        S U l
        U R                   R                  U l        U R                   R                  U l        U R                  U l        S U l        S U l        U R                  R%                  SS5      U l        U R                  R%                  S5      U l        U R                  R%                  S5      U l        U R                  R%                  S5      nSU l        GOpXR,                  S-   :w  a  SU 3n[/        U5      eU R1                  5         U R"                  (       a0  U R2                  R5                  U R"                  U R6                  5        U R2                  R9                  5       U l        U R                  U l        U R                  (       a2  [:        R<                  " U R                  U R                  5        SU l	        Sn U R                  R?                  S
5         U R                   R?                  5       u  pgnUS:X  a  Sn[G        U5      eUS:X  a  U(       a  Sn[E        U5      eS	n U R                   RI                  XgU5        M  U(       a  X0l        U R                   c3  U R(                  [R        RT                  :X  a  [R        RV                  U l        S U l        U R(                  [R        RT                  :X  a]  U R                   (       aK  U R                   R9                  5       U l        U RY                  U R"                  U R6                  5      U l        g g U R(                  [R        RV                  :X  ae  [Z        R\                  R_                  U R`                  U Rb                  5      U l        U RY                  U R"                  U R6                  5      U l        g g ! [@        RB                  [D        4 a     Of = f! [J         a     O[F         a?    US:X  a  US
-  nU(       a  Xl	         Ol[:        R<                  " U R                  U5         GN[L         a<    [N        RQ                  SXgU5        [:        R<                  " U R                  U5         GNf = fXl        U R                   R                  U l        U R                  R%                  S5      U l        U R                  R%                  S5      U l        U R                  R%                  S5      nU R                  (       a  GM  Sn[G        U5      e)Nr   r  Frn  rp  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)2r  r   r  r   exr`   r  r   r  r  _imr   r   r   r   rX   _prev_imdisposer  r  
dispose_opblend_opr  rG   r  impastedispose_extentr   r   r   ra   r   r   rg   r  r   UnicodeDecodeErrorr  r   r   r/   r8   r7   _cropr
   corefillmodesize)	rZ   r  r   r  rK   frame_startrh   ri   rj   s	            r;   r  PngImageFile._seekm  s
   xx###dhh..((++A:dmm,!&*&8&8# HH,,	 HH,,	(( DMDL!%!FD"iimmJ7DO IIMM'2DM!YY]]62NDLq((-eW5 o% IIK||dllD,?,?@ GGLLNDMhhDG ""$$TWWd.A.AB&'#KQ'+xx}}$Cf '>7C"3-''>"7)#.."&K:HHMM#F3' T ES == T__8L8L%L&44DO??h222}}#}}113#zz$,,8K8KL  __ 6 66 ::??499dii@DL::dllD4G4GHDL 7c k2  *  :g~!&28/!((&9% :LL!5sH((&9: !L((DI"iimmJ7DO IIMM'2DM!YY]]62N9995sm#s7   Q Q+ Q('Q(+
T7!T!T>ATTc                    U R                   $ rV   )r  rm   s    r;   rb   PngImageFile.tell  s    ||r:   c                    U R                   R                  S5      (       a  U R                  S-   U l        U R                  U l        [
        R
                  R                  U 5        g)z"internal: prepare to read PNG filer  )r	   N)r   r  decoderconfigr  _PngImageFile__idatr   load_preparerm   s    r;   r  PngImageFile.load_prepare  sK     99==%%!%!3!3d!:D))((.r:   c                n   U R                   c   eU R                  c   eU R                  S:X  a  U R                  R                  S5        U R                   R                  5       u  p#nUS;  a  U R                   R	                  X#U5        gUS:X  a(   U R                   R                  X#U5        US-
  U l        OX@l        U R                  S:X  a  M  US::  a  U R                  nO[        XR                  5      nU R                  U-
  U l        U R                  R                  U5      $ ! [         a     Nf = f)zinternal: read more image datar   r(   )   IDATs   DDATr  r:   r  )r  rX   r  ra   rz   r   r  min)rZ   
read_bytesrh   ri   rj   s        r;   	load_readPngImageFile.load_read  s    xx###ww"""kkQ GGLLO#xx}}Cf55c/g~HHMM#F3 %qj$% kkQ* ?JZ5JkkJ.ww||J''   s   D' '
D43D4c                   U R                   c   eU R                  c   eU R                  S:w  a%  U R                  R                  U R                  5         U R                  R                  S5         U R                   R                  5       u  pnUS:X  a  OZUS:X  a5  U R                  (       a$  SU l        U R                   R                  XU5        O U R                   R                  XU5        M  U R                   R.                  U l        U R                  (       d"  U R                   R3                  5         SU l         gU R4                  (       Ga_  U R6                  [8        R:                  :X  Ga?  U R=                  U R>                  U R@                  5      nU R>                  RB                  S:X  a0  SU RD                  ;   a   URG                  SU RD                  S   5      nOU R>                  RB                  S:X  al  SU RD                  ;   a\  U RD                  S   n[I        U[J        5      (       a  URM                  U5        O&[I        U[N        5      (       a  URQ                  U5        URS                  S5      nU R4                  RU                  X`R@                  U5        U R4                  U l        ggg! [        R
                  [        4 a     GM  f = f! [         a     GM  [         ab    US:X  a  US-  n [        R                  " U R                  U5         GN+! [         a$  n[        R                   (       a   SnA GMP  UeSnAff = f["         aq    [$        R'                  SXU5        [        R                  " U R                  U5      nUS	S
 R)                  5       (       a  U R*                  R-                  XS45         GNf = f)z%internal: finished reading image dataNr   Tr(   r   r  r  r  r	   r'   r    r  r&   r!   )+r  rX   r  ra   r   r   rg   r  r  rz   r   r  r  r   r   r   re   r  r   r   r  r  rx   r   r  rq   r  r  r=   r@   r  r  r  r  r   convert_transparentr   r   putpalettealphasr   putpalettealphaconvertr  )	rZ   rh   ri   rj   r   rH   updatedmaskts	            r;   load_endPngImageFile.load_end   s   xx###ww""";;!GGLL%GGLLO#'88==? & g~D$4$4&'#c/?c/# F XX%%
HHNNDH}}}%--!?**TWWd.A.AB77<<5(^tyy-H"66		. 9D ww||s*~/J IIn5%a//#44Q7'3//#33A6"??62D##G-@-@$G-- "@}G LL+.  &  	 '>aKF ((&9   66	 
 " ?13VD((&9q8##%%''..~>	?sU   1J/ K /KK
OO4!L
M"M7O?MMA9OOc                    SU R                   ;  a  U R                  5         SU R                   ;  a  SU R                   ;  a  g U R                  5       R                  5       $ )Nr[  zRaw profile type exif)r   r  getexif_get_merged_dictrm   s    r;   _getexifPngImageFile._getexif?  sG    "IIK"'>dii'O||~..00r:   c                `   > SU R                   ;  a  U R                  5         [        TU ]  5       $ )Nr[  )r   r  r   r  )rZ   r   s    r;   r  PngImageFile.getexifF  s%    "IIKw  r:   )__frame__idat__prepare_idat__rewind__rewind_idatr  r  r  r  r  r  r  r  r  r  r  r  r  r  rX   r  r   r  rb  r  r  r  r   r   )r   zdict[str, str | iTXt])r  r   r   r   r   )r  r   r   r   r   r   )r   r   )r  r   r   r   )r   zdict[int, Any] | None)r   z
Image.Exif)r2   r3   r4   r5   formatformat_descriptionr  propertyr   r   r`   r  rb   r  r  r  r  r  r9   r~  r  s   @r;   r  r    s`    F4B-H   +bIH/!(F=(~1! !r:   r  )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&   c                    SR                  U5      nU R                  [        [        U5      5      U-   5        U R                  U5        [	        U[	        U5      5      nU R                  [        U5      5        g)z'Write a PNG chunk (including CRC field)r:   N)joinwriteo32r1  rQ   )rX   rh   rO   	byte_datar   s        r;   putchunkr  d  sW     IHHSY 3&'HHY
F3K
(CHHSXr:   c                  (    \ rS rSrSS jrSS jrSrg)_idatio  c                    Xl         X l        g rV   )rX   chunk)rZ   rX   r  s      r;   r[   _idat.__init__r  s    
r:   c                >    U R                  U R                  SU5        g )Nr  r  rX   rZ   rO   s     r;   r  _idat.writev  s    

477GT*r:   r  N)rX   r   r  Callable[..., None]r   r   rO   r   r   r   r2   r3   r4   r5   r[   r  r9   r1   r:   r;   r  r  o  s    +r:   r  c                  (    \ rS rSrSS jrSS jrSrg)_fdatiz  c                (    Xl         X l        X0l        g rV   )rX   r  r   )rZ   rX   r  r   s       r;   r[   _fdat.__init__}  s    
r:   c                    U R                  U R                  S[        U R                  5      U5        U =R                  S-  sl        g )Nr  r	   )r  rX   r  r   r  s     r;   r  _fdat.write  s/    

477GS%6=r:   )r  rX   r   N)rX   r   r  r  r   r   r   r   r  r   r1   r:   r;   r  r  z  s    
r:   r  c                    UR                  SS5      UR                  SS5      UR                  SS5      UR                  SS5      4U l        g )NoptimizeFcompress_levelcompress_type
dictionaryr:   )r  encoderconfig)r  encoderinfos     r;   _apply_encoderinfor    sE    
E*("-,c*	Br:   c                  4    \ rS rSr% S\S'   S\S'   S\S'   Srg	)
_Framei  Image.Imager  z tuple[int, int, int, int] | Noner  dict[str, Any]r  r1   Nr   r1   r:   r;   r  r    s    O
**r:   r  c                   U R                   R                  S5      nU R                   R                  SU R                  R                  SS5      5      nU R                   R                  SU R                  R                  S[        R                  5      5      n	U R                   R                  SU R                  R                  S[
        R                  5      5      n
U(       a  [        R                  " U5      nO[        R                  " U /U5      n/ nSnU GH  n[        R                  " U5       GH  nUR                  U:X  a  UR                  5       nOUR                  U5      nU R                   R                  5       n[        U[        [         45      (       a  X}   US'   O%Uc"  SUR                  ;   a  UR                  S   US'   [        U	[        [         45      (       a  X   US'   [        U
[        [         45      (       a  X   US'   US-  nU(       Ga  US   nUR                   R                  S5      nUR                   R                  S5      nU[        R"                  :X  a  [%        U5      S:  a  [        R&                  nU[        R&                  :X  a  UR(                  R                  5       n[*        R,                  R/                  S	U R0                  S
5      nUR2                  nU(       a  UR5                  U5      nOSU R0                  -   nUR7                  UU5        O0U[        R"                  :X  a  US   R(                  nOUR(                  n[8        R:                  " UR                  S	5      UR                  S	5      5      nUR=                  SS9nU(       dM  UUR                  S5      :X  a8  UUR                  S5      :X  a#  SU;   a  UR                   S==   US   -  ss'   GM  OS nUR?                  [A        UUU5      5        GM     GM      [%        U5      S:X  a  U(       d  US   R(                  $ U" US[C        [%        U5      5      [C        U5      5        U(       a  U R                  U:X  a  U OU R                  U5      n[E        UU R                   5        [F        RH                  " U[K        [L        [N           [Q        X5      5      [F        RR                  " SSU R0                  -   SU5      /5        Sn[U        U5       GHK  u  nnUR(                  nUR2                  (       d  SUR0                  -   nOUR2                  nUR5                  U5      nUR0                  nUR                   nUR                  SS5      n[W        US-  5      RY                  S5      nURZ                  S:  a  Sn[]        U5      eUR                  SU	5      n UR                  SU
5      n!U" US[C        U5      [C        US   5      [C        US   5      [C        US   5      [C        US   5      [_        URZ                  5      [_        UR`                  5      [c        U 5      [c        U!5      5        US-  n[E        XR                   5        US:X  ae  U(       d^  [F        RH                  " U[K        [L        [N           [Q        X5      5      [F        RR                  " SSUR0                  -   SU5      /5        GM  [e        XU5      n"[F        RH                  " U[K        [L        [N           U"5      [F        RR                  " SSUR0                  -   SU5      /5        U"Rf                  nGMN     g )Nrl  r_  r   rn  rp  r	   r
  r'   r&   )r   r   r   r   r   F)
alpha_onlys   acTLr   rk    zcannot write durationr  )4r  r  r   r/   r6   r=   r?   	itertoolschainr   Iteratorr  r   r  r   listr2  r8   r1  r7   r  r
   r  r  r  r  cropr  r   subtract_modulogetbboxrx   r  r  r  r   _saver   r   r   r  r  	enumerater   limit_denominator	numeratorrG   o16denominatorr   r  r   )#r  rX   r  r  r  r  append_imagesrl  r_  rn  rp  r  	im_framesframe_countim_seqim_framer  previousprev_disposal
prev_blendbase_imr  r  delta
default_imr   r  
frame_datar  frame_durationdelayrK   frame_disposalframe_blendfdat_chunkss#                                      r;   _write_multiple_framesr6    s    ~~!!*-H>>fbggkk&!&<=D~~!!*bggkk*hFVFV.WXHNNwGU__(MNE.m4 IK%..v6H}}$#==?#++D1..--/K(T5M22*2*?J'!jHMM&A*2--
*CJ'(T5M22*2*?J'%$//','9G$1K$R= ( 4 4 8 8 D%1155g>
 H$8$88S^a=O$,$:$:M H$:$::&kk..0G#jjoofbgg|LG#==D"),,t"4%/MM'40"h&:&::'m..G&kkG"22$$V,goof.E }}}6%)DD"koog&>>"k1((4J8OO4VHdK@Ae 7 j 9~=| 

C	ND		 77d?R

40@
:r~~6EE",-__UFRWW$4aAB	
 G&y1z==HMM)D??D}}T*H}} ,,$Q7$./AA%H??U")CS/!$X>!oogu5LQLQLQLQL !!"~{O	
 	18^^4A:mOORYb 01(>7KL  73KOORY,(>7KL
 "))G_ 2` r:   c                    [        XUSS9  g )NT)save_all)r  )r  rX   filenames      r;   	_save_allr:  )  s    	"(T*r:   c                  ^( U(       Ga  U R                   R                  SU R                  R                  S5      5      n[        5       n[        5       m(U R                   R                  S/ 5      n[        R
                  " U /U5       HV  n[        R                  " U5       H9  n	UR                  U	R                  5        T(R                  U	R                  5        M;     MX     S H
  n
X;   d  M
    O   UR                  5       n
[        U(4S j[        S5       5       5      nOU R                  nU R                  n
U
nU
S:X  a  SU R                   ;   a  [        SU R                   S   -  S	5      nOQU R                  (       a>  [!        [        [#        U R                  R%                  5       S   5      S
-  S	5      S5      nOS	nUS::  a  US::  a  SnOUS::  a  SnOSnUSU 3-  n [&        U   u  nnnUS:X  a  [-        SSSS9  UR/                  [0        5        U" US[3        US   5      [3        US   5      UUSSS5	        / SQnU R                   R                  SU R                  R                  S5      5      nU(       a9  SnUS-   [4        R6                  " U5      -   nU" USU5        UR9                  S5        U R                   R                  S5      nU(       a  / SQnUR:                   H  nUS S u  nnUU;   a  UR9                  U5        U" UUU5        M.  UU;   a  U" UUU5        M@  USS R=                  5       (       d  MZ  [#        U5      S
:H  =(       a    US   nU(       a  M}  U" UUU5        M     U R                  S:X  aR  WS
-  nU R>                  RA                  S5      S U n[#        U5      U:  a  US-  n[#        U5      U:  a  M  U" US U5        U R                   R                  S!U R                  R                  S!S 5      5      nU(       d  US:X  a  U R                  S:X  aR  Wn [C        U[D        5      (       a  U" US"US U  5        GO[!        S[        S#U5      5      nS$U-  S-   n!U" US"U!S U  5        OU R                  S%;   a*  [!        S[        S&U5      5      nU" US"[G        U5      5        OU R                  S:X  a2  Uu  n"n#n$U" US"[G        U"5      [G        U#5      -   [G        U$5      -   5        OwS!U R                   ;   a  S'n[+        U5      eOYU R                  S:X  aI  U R>                  RI                  5       S(:X  a+  U R>                  RA                  S(S)5      n!Wn U" US"U!S U  5        U R                   R                  S*5      n%U%(       aB  U" US+[3        [K        U%S   S,-  S--   5      5      [3        [K        U%S   S,-  S--   5      5      S.5        U(       aB  S/S0/nUR:                   H.  nUS S u  nnUU;   d  M  UR9                  U5        U" UUU5        M0     U R                   R                  S15      n&U&(       aU  [C        U&[L        RN                  5      (       a  U&RQ                  S25      n&U&RS                  S35      (       a  U&S4S  n&U" US5U&5        U n'U(       a  [U        XX:UWW5      n'U'(       aq  [W        U'U R                   5        [X        RZ                  " U'[]        [^        [D           [a        X5      5      [X        Rb                  " S6S7U'R                  -   SU5      /5        U(       ab  UR:                   HR  nUS S u  nnUSS R=                  5       (       d  M%  [#        U5      S
:H  =(       a    US   nU(       d  MH  U" UUU5        MT     U" US8S95        [e        US:5      (       a  URg                  5         g g ! [(         a  nSU
 S3n[+        U5      UeS nAff = f);Nr  r%  )r&   r    r!   c              3  P   >^#    U  H  m[        U4S  jT 5       5      v   M     g7f)c              3  ,   >#    U  H	  oT   v   M     g 7frV   r1   )r+  
frame_sizer   s     r;   r-  "_save.<locals>.<genexpr>.<genexpr>F  s     ?:As   N)max)r+  r   sizess    @r;   r-  _save.<locals>.<genexpr>F  s     RAS????s   "&r'   r!   bitsr	   r   r+   r*   r(   ;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   iCCPrF  pnginfo)s   sPLTr   r   r   r    s   PLTEr  s   tRNSr     )r   r   r)  r   r  z%cannot use transparency for this moder&   Ar<  s   pHYsr;  g      ?r  s   bKGDs   hISTr[  r)   rZ  r,   s   eXIfr   r   r   r:   flush)4r  r  r   setr  r  r   r  r   r  r  r_   r2  r  r  r  r@  r1  getdata	_OUTMODESKeyErrorr   r   r  r  r  rB   r   remover   r  r  
getpaletter   r   r#  getpalettemoder   r
   Exiftobytesr  r6  r  r   r  r   r   r  r  hasattrrJ  ))r  rX   r9  r  r8  r  modesr%  r(  r)  r  r  outmodecolorsrC  r  	bit_depth
color_typer   rK   r   iccnamerO   r   chunks_multiple_allowed
info_chunkrh   r   palette_byte_numberpalette_bytesr  alpha_bytesalpharedgreenbluer<  r[  	single_imrA  s)                                           @r;   r  r  -  s    **RWW[[9
 **?B?oordM:F)226:		(--(		(--( ; ; )D} ) 99;DRqRRwwwwGs{ R^^#bnnV44c:F zzSRZZ%7%7%9!%<!=!BCH!LR<{14&z!G")27);&J #~/B
 HHV	
DGDG
 DF
..

]BGGKK,F
GC
 g~c 22b'4  	g>>i(D"F++J"2AICf}c"b#t$//b#t$Qq!!## _1Cjm
!z"c4( & 
ww#~$qj((/0D1DE- #66U"M - #66b'=)>>%%nbggkk.RV6WXL|q(77c> K,..b'<#=>"1c#|&<=,.6b'5+#67WW//q#e\":;L"gs<01WW+C"gs3x#e*4s4y@A/ >cl"	 0 77c>bee224>EE$$VS1E K"gu\k23
..

U
#C
CFVOc)*+CFVOc)*+	
 7#++J"2AICf}c"b#t$	 & >>f%DdEJJ''<<?D???++8Db'4 $&I*E-
	 9bnn5EE",-__UFY^^$;QHI	
 ++J"2AIC1Qx!! _1Cjm
:"c4( & 
"gsr7

 a  ""4&0cl!"s   !^6 6
_ __c                p   ^ SSK Jn  / mSU4S jjnU" 5       n Xl        [        XSU5        U ?T$ ! U ?f = f)z4Return a list of PNG chunks representing this image.r   )BytesIOc                   > SR                  U5      n[        [        U[        U5      5      5      nTR                  XU45        g )Nr:   )r  r  rQ   rx   )rX   rh   rO   r  r   r   s        r;   rx   getchunks.<locals>.append  s6    HHTN	&F3K01ss+,r:   r   rX   r   rh   r   rO   r   r   r   )iorg  r  r  )r  paramsrg  rx   rX   r   s        @r;   	getchunksrm    sB    F-
 
Bbb&!NM Ns   1 5z.pngz.apngz	image/png)rH   r   r   r   )r   )rO   r   rP   r   r   r   )r  r   r   r   rj  )r  r  r  r  r   r   )r  r  rX   r   r  r  r  r   r  r   r  Image.Image | Noner%  zlist[Image.Image]r   rn  )r  r  rX   r   r9  r   r   r   )r  r  rX   r   r9  r   r  r  r8  r   r   r   )r  r  rl  r   r   z list[tuple[bytes, bytes, bytes]])R
__future__r   r  loggingrer   r`  rB   enumr   	fractionsr   typingr   r   r   r   r
   r   r   r   r   _binaryr   r  r   rc   r   r   r#  r   r  
_deprecater   _utilr   TYPE_CHECKINGcollections.abcr   r   r   r   	getLoggerr2   r   compiler  rd   r  r  r  	SAFEBLOCKrE   r   r/   r=   rL   rQ   rS   r   r   r   r   r   r  r  rM  r  r  r  r  r  r6  r:  r  rm  register_openr  register_saveregister_save_allregister_extensionsregister_mimer1   r:   r;   <module>r     s  B #   	      ' ' G G ! !  ! ! !  ($			8	$	L	!	'	' 
 !+
2 **01$$
 ~%w *G /[ [|3 6Y3 Y3@: f4 f4Z%T!9&& T!x
 
!$$$	 
"	$'($$$	 $&!	(+ +
 
 Z  PPP P 	P
 P &P %P Pf+ "*III I 	I
 I 
I`2   L''w ?   L'' /   ++Y 7   ,--/@ A   L'' 5r:   