Ë
    D·jA›  ã                  óä  — 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mZ d dl	m
Z
 d dlmZmZmZmZmZmZmZ ddlmZmZ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  erddlm!Z!  G d„ de«      Z"e"jF                  Z$d,d„Z% G d„ dej,                  «      Z&ddddœZ'd-d„Z(ee)e*ee+   ej2                  f   Z,	 	 	 	 	 	 	 	 d.d„Z-	 	 	 	 	 	 	 	 d/d„Z.	 	 	 	 	 	 d0d„Z/ G d„ de«      Z0	 	 	 	 	 	 	 	 d1d„Z1d2d„Z2	 d3	 	 	 	 	 	 	 	 	 d4d„Z3d5d„Z4	 	 	 	 	 	 	 	 	 	 d6d„Z5d2d „Z6dZ7d7d!„Z8d8d"„Z9d9d#„Z:d:d$„Z;	 	 	 	 	 	 d;d%„Z<d<d&„Z=	 	 	 	 	 	 	 	 	 	 d=d'„Z>	 d>	 	 	 	 	 	 	 d?d(„Z?	 d@	 	 	 	 	 	 	 dAd)„Z@ ej‚                  e&j„                  e&e%«        ej†                  e&j„                  e3«        ejˆ                  e&j„                  e2«        ejŠ                  e&j„                  d*«        ejŒ                  e&j„                  d+«       y)Bé    )ÚannotationsN)ÚIntEnum)Úcached_property)ÚIOÚTYPE_CHECKINGÚAnyÚListÚLiteralÚ
NamedTupleÚUnioné   )ÚImageÚ
ImageChopsÚ	ImageFileÚ	ImageMathÚImageOpsÚImagePaletteÚImageSequence)Úi16le)Úo8)Úo16le)Ú_imagingc                  ó   — e Zd ZdZdZdZdZy)ÚLoadingStrategyz.. versionadded:: 9.1.0r   r   é   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚRGB_AFTER_FIRSTÚ RGB_AFTER_DIFFERENT_PALETTE_ONLYÚ
RGB_ALWAYS© ó    ú`/var/www/html/ai-video-generator/backend/venv/lib/python3.12/site-packages/PIL/GifImagePlugin.pyr   r   6   s   „ Ù!à€OØ'(Ð$Ø�Jr$   r   c                ó   — | d d dv S )Né   )s   GIF87as   GIF89ar#   )Úprefixs    r%   Ú_acceptr)   E   s   € Ø�"�1ˆ:Ð/Ð/Ð/r$   c                  óŽ   ‡ — e Zd ZdZdZdZdZdd„Zdd„Zdd„Z	e
dd„«       Zedd	„«       Zdd
„Zddd„Zdˆ fd„Zdd„Zdd„Zˆ xZS )ÚGifImageFileÚGIFzCompuserve GIFFNc                ó„   — | j                   j                  d«      }|r#|d   r| j                   j                  |d   «      S y )Nr   r   )ÚfpÚread)ÚselfÚss     r%   ÚdatazGifImageFile.dataU   s6   € Ø�G‰G�L‰L˜‹OˆÙ��1’Ø—7‘7—<‘<  !¡Ó%Ð%Ør$   c                óŠ   — t        dt        |«      d«      D ]*  }|dz  ||   cxk(  r||dz      cxk(  r||dz      k(  rŒ' y  y y)Nr   é   r   r   TF)ÚrangeÚlen)r0   ÚpÚis      r%   Ú_is_palette_neededzGifImageFile._is_palette_needed[   sX   € Ü�qœ#˜a›& !Ó$ò 	ˆAØ˜‘F˜a ™dÔ: a¨¨A©¡hÔ:°!°A¸±E±(Ó:Ùð ;Ùð	ð r$   c                óT  — | j                   j                  d«      }t        |«      sd}t        |«      ‚|d d | j                  d<   t        |d«      t        |d«      f| _        g | _        |d   }|dz  dz   }|d	z  re|d
   | j                  d<   | j                   j                  d|z  «      }| j                  |«      r$t        j                  d|«      }|x| _        | _        | j                   | _        | j                   j                  «       | _        d | _        | j#                  d«       y )Né   znot a GIF filer'   Úversioné   é
   é   r   é€   é   Ú
backgroundr4   ÚRGBr   )r.   r/   r)   ÚSyntaxErrorÚinfoÚi16Ú_sizeÚtiler9   r   ÚrawÚglobal_paletteÚpaletteÚ_fpÚtellÚ_GifImageFile__rewindÚ	_n_framesÚ_seek)r0   r1   ÚmsgÚflagsÚbitsr7   s         r%   Ú_openzGifImageFile._opena   s   € à�G‰G�L‰L˜ÓˆÜ�qŒzØ"ˆCÜ˜cÓ"Ð"à   !˜uˆ�	‰	�)ÑÜ˜˜A“Y¤ A q£	Ð)ˆŒ
ØˆŒ	Ø�"‘ˆØ˜‘	˜Q‰ˆà�3Š;à&'¨¡eˆD�I‰I�lÑ#à—‘—‘˜Q $™YÓ'ˆAØ×&Ñ& qÔ)Ü ×$Ñ$ U¨AÓ.�Ø56Ð6�Ô# d¤là—7‘7ˆŒØŸ™Ÿ™›ˆŒØ%)ˆŒØ�
‰
�1�r$   c                ó  — | j                   €6| j                  «       }	 	 | j                  | j                  «       dz   d«       Œ$| j                   S # t        $ r | j                  «       dz   | _         Y nw xY w| j	                  |«       ŒE)Nr   F©rO   rM   rP   ÚEOFErrorÚseek)r0   Úcurrents     r%   Ún_frameszGifImageFile.n_frames|   sw   € à�>‰>Ð!Ø—i‘i“kˆGð1ØØ—J‘J˜tŸy™y›{¨Q™°Ô6ð ð
 �~‰~Ðøô ò 1Ø!%§¡£¨q¡�–ð1úà�I‰I�gÔøs   ž%A Á!A3Á2A3c                óÐ   — | j                   �| j                   dk7  S | j                  «       }|ry	 | j                  dd«       d}| j	                  |«       |S # t        $ r d}Y Œ w xY w)Nr   TFrV   )r0   rY   Úis_animateds      r%   r\   zGifImageFile.is_animatedˆ   sn   € à�>‰>Ð%Ø—>‘> QÑ&Ð&à—)‘)“+ˆÙØð	 Ø�J‰J�q˜%Ô ØˆKð 	�	‰	�'ÔØÐøô	 ò 	 ØŠKð	 ús   °A ÁA%Á$A%c                óT  — | j                  |«      sy || j                  k  rd | _        | j                  d«       | j                  }t	        | j                  dz   |dz   «      D ]  }	 | j                  |«       Œ y # t
        $ r$}| j                  |«       d}t        |«      |‚d }~ww xY w)Nr   r   úno more images in GIF file)Ú_seek_checkÚ_GifImageFile__frameÚimrP   r5   rW   rX   )r0   ÚframeÚ
last_frameÚfÚerQ   s         r%   rX   zGifImageFile.seekš   sœ   € Ø×Ñ Ô&ØØ�4—<‘<ÒØˆDŒGØ�J‰J�qŒMà—\‘\ˆ
Ü�t—|‘| aÑ'¨°©Ó3ò 	+ˆAð+Ø—
‘
˜1•ñ	+øô ò +Ø—	‘	˜*Ô%Ø2�Ü˜s“m¨Ð*ûð+ús   Á&A:Á:	B'ÂB"Â"B'c                ó2  ‡ — |dk(  r]d‰ _         d ‰ _        d‰ _        ‰ j                  j	                  ‰ j
                  «       d‰ _        d‰ j                  v r,‰ j                  d= n‰ j                  r|r‰ j                  «        |‰ j                  dz   k7  rd|› �}t        |«      ‚‰ j                  ‰ _        ‰ j                   rN‰ j                  j	                  ‰ j                   «       ‰ j                  «       r	 ‰ j                  «       rŒd‰ _         ‰ j                  j                  d«      }|r|dk(  rd}t        |«      ‚d }i }d }d }d }		 |s‰ j                  j                  d«      }|r|dk(  r�nÊ|dk(  �rG‰ j                  j                  d«      }‰ j                  «       }
|d   d	k(  r7|
�5|
d   }|dz  r|
d
   }t        |
d«      dz  |d<   d|z  }|dz	  }|rÀ|‰ _        n¸|d   dk(  r9d}|
r||
z  }‰ j                  «       }
|
rŒd|v r|dxx   d|z   z  cc<   n||d<   d }ŒØ|d   dk(  ro|dk(  rj|
�h|
‰ j                  j!                  «       f|d<   |
d d dk(  rA‰ j                  «       }
|
r/t#        |
«      d
k\  r!|
d   dk(  rt        |
d«      ‰ j                  d<   ‰ j                  «       �r�	 ‰ j                  «       rŒ�ny|dk(  �rs‰ j                  j                  d«      }t        |d«      t        |d«      }}|t        |d«      z   |t        |d«      z   }}|‰ j$                  d   kD  s|‰ j$                  d   kD  rX|rVt'        |‰ j$                  d   «      t'        |‰ j$                  d   «      f‰ _        t+        j,                  ‰ j(                  «       ||||f}	|d   }|dz  dk7  }|dz  rP|dz  dz   }‰ j                  j                  d
|z  «      }‰ j/                  |«      rt1        j2                  d|«      }nd }‰ j                  j                  d«      d   }‰ j                  j!                  «       ‰ _         nd }�Œð|€d!}t        |«      ‚|‰ _        |sy g ‰ _        ‰ j                  r0‰ j4                  j7                  ‰ j                  ‰ j8                  «       |�|n‰ j:                  ‰ _        |‰ _        |dk(  rl‰ j<                  r+t@        tB        jD                  k(  r|�d"nd‰ _#        nd#‰ _#        nd$‰ _#        |s$‰ j:                  rdd%l$m$}  |‰ j:                  «      }|‰ _%        nô‰ jL                  d#k(  råt@        tB        jN                  k7  s|rÌd ‰ _(        d&‰ j                  v rw‰ j4                  jS                  ‰ j                  d&   d«       ‰ j4                  jU                  d"t*        jV                  jX                  «      ‰ _        d"‰ _#        ‰ j                  d&= n@d‰ _#        ‰ j4                  jU                  dt*        jV                  jX                  «      ‰ _        d-ˆ fd'„}d ‰ _        |	‰ _        ‰ j8                  �r–‰ j                  dk\  �r†	 ‰ j                  dk(  rÇ‰ j8                  \  }}}}||z
  ||z
  f}t+        j,                  |«       d#}‰ j                  j[                  d&|«      }|�‰ jL                  d(v rBd"} ||«      d)z   }n4‰ j                  j[                  d*d«      }‰ jL                  d(v r
d} ||«      }t*        j\                  j_                  |||«      ‰ _        n¯‰ j4                  �,‰ ja                  ‰ j4                  ‰ j8                  «      ‰ _        nw|�u‰ j8                  \  }}}}||z
  ||z
  f}t+        j,                  |«       d#}|}‰ jL                  d(v rd"} ||«      d)z   }t*        j\                  j_                  |||«      ‰ _        |�]d}|�<|dk(  r't@        tB        jD                  k7  r |‰ j                  d&<   n‰ jL                  d(vr|}d+f‰ j                   ||ffg‰ _        |j[                  d«      r|d   ‰ j                  d<   d,D ]5  }||v r||   ‰ j                  |<   Œ|‰ j                  v sŒ)‰ j                  |= Œ7 y # tb        $ r Y ŒÈw xY w).Nr   éÿÿÿÿÚcommentr   zcannot seek to frame ó   ;r^   ó   !éù   r4   r>   Údurationé   r   éþ   r$   ó   
éÿ   Ú	extensionrA   ó   NETSCAPE2.0Úloopó   ,é	   é   r'   r=   é@   r@   r?   rC   Fzimage not found in GIF frameÚRGBAÚPÚL)ÚcopyÚtransparencyc                óÐ   •— ‰j                   rU| dz  dz   t        ‰j                   j                  «      kD  rd} t        ‰j                   j                  | dz  | dz  dz    «      S | | | fS )Nr4   r   )Ú_frame_paletter6   rK   Útuple)Úcolorr0   s    €r%   Ú_rgbz GifImageFile._seek.<locals>._rgbX  sj   ø€ Ø×"Ò"Ø˜1‘9˜q‘=¤3 t×':Ñ':×'BÑ'BÓ#CÒCØ�EÜ˜T×0Ñ0×8Ñ8¸À¹ÀUÈQÁYÐQRÁ]ÐSÓTÐTà˜u eÐ,Ð,r$   ©rC   rx   )r   rB   Úgif)rl   rq   )r€   ÚintÚreturnztuple[int, int, int])2Ú_GifImageFile__offsetÚdisposer`   rL   rX   rN   Údisposal_methodrE   rH   ÚloadÚ
ValueErrorr.   r2   r/   rW   rF   rM   r6   ÚsizeÚmaxrG   r   Ú_decompression_bomb_checkr9   r   rI   ra   ÚpasteÚdispose_extentrJ   r~   Ú_frame_transparencyÚLOADING_STRATEGYr   r"   Ú_moder{   rK   Úmoder!   ÚpyaccessÚputpalettealphaÚconvertÚDitherÚFLOYDSTEINBERGÚgetÚcoreÚfillÚ_cropÚAttributeError)r0   rb   Úupdate_imagerQ   r1   rK   rE   Úframe_transparencyÚ	interlaceÚframe_dispose_extentÚblockrR   Údispose_bitsrh   Úx0Úy0Úx1Úy1rS   r7   r{   r�   Údispose_sizeÚdispose_moder€   r|   Úks   `                          r%   rP   zGifImageFile._seekª   s   ø€ Ø�AŠ:àˆDŒMØ8<ˆDŒLØˆDŒLØ�H‰H�M‰M˜$Ÿ-™-Ô(Ø#$ˆDÔ Ø˜DŸI™IÑ%Ø—I‘I˜iÑ(ð �yŠy™\Ø—	‘	”à�D—L‘L 1Ñ$Ò$Ø)¨%¨Ð1ˆCÜ˜S“/Ð!à—(‘(ˆŒØ�=Š=à�G‰G�L‰L˜Ÿ™Ô'Ø—)‘)”+Øð —)‘)•+àˆDŒMà�G‰G�L‰L˜‹OˆÙ�A˜’IØ.ˆCÜ˜3“-ÐàEIˆà!ˆØ!ÐØˆ	Ø#ÐØÙØ—G‘G—L‘L “O�Ù˜˜Tš	Ùà�d“ð —G‘G—L‘L “O�ØŸ	™	›�Ø�Q‘4˜3’; 5Ð#4ð " !™H�EØ˜q’yØ-2°1©XÐ*Ü'*¨5°!£}°rÑ'9�D˜Ñ$ð $.°Ñ#5�LØ#/°1Ñ#4�LÙ#ð
 0<˜Õ,Ø�q‘T˜S’[ð "�Gñ  Ø 5Ñ(˜Ø $§	¡	£˜ò  ð ! DÑ(à˜Y›¨5°7©?Ñ:œà*1˜˜Y™Ø�AØØ�q‘T˜S’[ U¨a¢Z°EÐ4Eð ).¨t¯w©w¯|©|«~Ð(=�D˜Ñ%Ø˜S˜b�z ^Ò3Ø $§	¡	£˜Ù ¤S¨£Z°1¢_¸¸q¹ÀQºÜ03°E¸1³˜DŸI™I fÑ-Ø—i‘i•kØð —i‘i—kð �d“ð —G‘G—L‘L “O�ô ˜Q ›¤C¨¨1£I�B�Øœc ! Q›i™¨¬c°!°Q«i©�B�Ø˜Ÿ™ 1™Ò%¨¨d¯i©i¸©lÒ):ÁÜ!$ R¨¯©°1©Ó!6¼¸BÀÇ	Á	È!ÁÓ8MÐ!M�D”JÜ×3Ñ3°D·J±JÔ?Ø')¨2¨r°2 ~Ð$Ø˜!™�à" R™Z¨AÑ-�	à˜3’;Ø! A™I¨™?�DØŸ™Ÿ™ Q¨$¡YÓ/�AØ×.Ñ.¨qÔ1Ü".×"2Ñ"2°5¸!Ó"<™à"'˜ð —w‘w—|‘| A“ qÑ)�Ø $§¡§¡£�”ØØˆAñs ðv ÐØ0ˆCÜ˜3“-ÐàˆŒÙØàˆŒ	à�<Š<Ø�G‰G�M‰M˜$Ÿ,™,¨×(;Ñ(;Ô<à)0Ð)<™gÀ$×BUÑBUˆÔØ#5ˆÔ Ø�AŠ:Ø×"Ò"Ü#¤×'AÑ'AÒAØ+=Ð+I¡Èu�D•Jà!$�D•Jà �”
á˜t×2Ò2Ý%á˜t×2Ñ2Ó3�Ø"ˆD�Là�y‰y˜CÒä$¬×(XÑ(XÒXÙà$(�D”MØ%¨¯©Ñ2ØŸ™×/Ñ/°·	±	¸.Ñ0IÈ1ÔMØ"&§'¡'§/¡/°&¼%¿,¹,×:UÑ:UÓ"V˜œØ%+˜œ
Ø ŸI™I nÑ5à%*˜œ
Ø"&§'¡'§/¡/°%¼¿¹×9TÑ9TÓ"U˜œõ	-ð ˆŒØ2ˆÔØ×Ó 4×#7Ñ#7¸1Ó#<ð*Ø×'Ñ'¨1Ò,ð &*×%8Ñ%8‘N�B˜˜B Ø$&¨¡G¨R°"©WÐ#5�Lä×3Ñ3°LÔAð $'�LØ ŸI™IŸM™M¨.Ð:LÓM�EØÐ(ØŸ9™9¨Ñ7Ø+1˜LÙ$(¨£K°$Ñ$6™Eà $§	¡	§¡¨l¸AÓ >˜ØŸ9™9¨Ñ7Ø+0˜LÙ$(¨£K˜EÜ#(§:¡:§?¡?°<ÀÈuÓ#U�D•Lð —w‘wÐ*à'+§z¡z°$·'±'¸4×;NÑ;NÓ'O˜�Ø+Ð7Ø)-×)<Ñ)<™˜˜B  BØ(*¨R©°°b±Ð'9˜ä×7Ñ7¸ÔEØ'*˜Ø 2˜ØŸ9™9¨Ñ7Ø+1˜LÙ$(Ð);Ó$<¸tÑ$C˜EÜ',§z¡z§¡Ø(¨,¸ó(˜œð Ð ØˆLØ!Ð-Ø˜A’:Ü'¬?×+EÑ+EÒEØ4F˜Ÿ	™	 .Ò1Ø—Y‘Y oÑ5Ø#5�Lð Ø˜˜R Ð$Ø—M‘MØ˜9 lÐ3ð	ðˆDŒIð �8‰8�IÔØ#'¨	¡?ˆD�I‰I�iÑ Ø*ò 	!ˆAØ�D‰yØ# A™w�—	‘	˜!’Ø�d—i‘i’Ø—I‘I˜a‘Lñ		!øô- "ò Ùðús   ÙFb
 â
	bâbc                ód  •— | j                   rdnd}d | _        | j                  dk(  rG| j                  �át        j
                  j                  || j                  | j                  «      | _        n¦| j                  dv r˜| j                  | _        | j                   rtt        j
                  j                  d| j                  | j                  xs d«      | _         | j                  j                  dg| j                   j                  «       ¢­Ž  nd | _        || _        d | _         t        ‰| �9  «        y )Nry   rz   r   r‚   rC   )r~   Ú_prev_imr`   r�   r   rš   r›   r‹   ra   r“   Ú
putpaletteÚgetdatar’   ÚsuperÚload_prepare)r0   Ú	temp_modeÚ	__class__s     €r%   r°   zGifImageFile.load_prepare¨  sé   ø€ Ø×.Ò.‘C°Cˆ	ØˆŒØ�<‰<˜1ÒØ×'Ñ'Ð3ÜŸ*™*Ÿ/™/Ø˜tŸy™y¨$×*BÑ*Bó�•ð �Y‰Y˜/Ñ)Ø ŸG™GˆDŒMØ×"Ò"ÜŸ*™*Ÿ/™/¨#¨t¯y©y¸$×:RÑ:RÒ:WÐVWÓX�”Ø"�—‘×"Ñ" 5ÐI¨4×+>Ñ+>×+FÑ+FÓ+HÔIà�”ØˆŒ
Ø"ˆÔä‰ÑÕr$   c                óÊ  — | j                   dk(  r«| j                  dk(  r›t        t        j                  k(  r„| j
                  �.| j                  j                  | j
                  d«       d| _        nd| _        | j                  j                  | j                  t        j                  j                  «      | _        y | j                  sy | j
                  �B| j                  j                  | j
                  d«       | j                  j                  d«      }n| j                  j                  d«      }| j                  €J ‚| j                  || j                  «      }| j                  | _        | j                  j                  | _        |j                  dk(  r(| j                  j!                  || j                  |«       y | j                  j!                  || j                  «       y )Nr   ry   rx   rC   )r`   r“   r‘   r   r"   r�   ra   r•   r’   r–   r   r—   r˜   r¬   r�   rœ   rŽ   )r0   Úframe_ims     r%   Úload_endzGifImageFile.load_end¼  sW  € Ø�<‰<˜1ÒØ�y‰y˜CÒÔ$4¼×8RÑ8RÒ$RØ×+Ñ+Ð7Ø—G‘G×+Ñ+¨D×,DÑ,DÀaÔHØ!'�D•Jà!&�D”JØŸ'™'Ÿ/™/¨$¯)©)´U·\±\×5PÑ5PÓQ�”ØØ�}Š}ØØ×#Ñ#Ð/Ø�G‰G×#Ñ# D×$<Ñ$<¸aÔ@Ø—w‘w—‘ vÓ.‰Hà—w‘w—‘ uÓ-ˆHà×"Ñ"Ð.Ð.Ð.Ø—:‘:˜h¨×(;Ñ(;Ó<ˆà—-‘-ˆŒØ—W‘W—\‘\ˆŒ
Ø�=‰=˜FÒ"Ø�G‰G�M‰M˜( D×$7Ñ$7¸ÕBà�G‰G�M‰M˜( D×$7Ñ$7Õ8r$   c                ó   — | j                   S ©N)r`   )r0   s    r%   rM   zGifImageFile.tellØ  s   € Ø�|‰|Ðr$   )r…   zbytes | None)r7   Úbytesr…   Úbool)r…   ÚNone)r…   r„   )r…   r¹   )rb   r„   r…   rº   )T)rb   r„   rž   r¹   r…   rº   )r   r   r   ÚformatÚformat_descriptionÚ!_close_exclusive_fp_after_loadingrJ   r2   r9   rT   ÚpropertyrZ   r   r\   rX   rP   r°   rµ   rM   Ú__classcell__)r²   s   @r%   r+   r+   N   sk   ø„ Ø€FØ)ÐØ(-Ð%à€Nóóóð6 ò	ó ð	ð òó ðó"+ô |!õ|ó(9÷8r$   r+   rz   ry   )Ú1rz   ry   c                óÔ  — | j                   t        v r| j                  «        | S t        j                  | j                   «      dk(  r’| j                  dt        j                  j                  ¬«      } | j                  j                   dk(  rL| j                  j                  D ]3  }|d   dk(  sŒ| j                  j                  |   | j                  d<    | S  | S | j                  d«      S )	a  
    Takes an image (or frame), returns an image in a mode that is appropriate
    for saving in a Gif.

    It may return the original image, or it may return an image converted to
    palette or 'L' mode.

    :param im: Image object
    :returns: Image object
    rC   ry   ©rK   rx   r4   r   r|   rz   )r“   ÚRAWMODEr‰   r   Úgetmodebaser–   ÚPaletteÚADAPTIVErK   ÚcolorsrE   )ra   Úrgbas     r%   Ú_normalize_moderÉ   ã  s¿   € ð 
‡w�w”'ÑØ
�‰Œ	Øˆ	Ü×Ñ˜Ÿ™Ó! UÒ*Ø�Z‰Z˜¤U§]¡]×%;Ñ%;ˆZÓ<ˆØ�:‰:�?‰?˜fÒ$ØŸ
™
×)Ñ)ò �Ø˜‘7˜a“<Ø.0¯j©j×.?Ñ.?ÀÑ.E�B—G‘G˜NÑ+ØØˆ	ð	ð ˆ	Ø�:‰:�c‹?Ðr$   c                óÐ  — d}|rXt        |t        t        t        f«      rt        |dd «      }t        |t        j                  «      rt        |j
                  «      }| j                  dk(  r!|sX| j                  j                  d«      dd }n9|st        d„ t        d«      D «       «      }t	        j                  d|¬«      | _        |rºg }|€J ‚t        dt        |«      d«      D ]O  }t        |||dz    «      }| j
                  j                  j                  |«      }||v rd}|j                  |«       ŒQ t        |«      D ],  \  }}|�Œ	t        t        |«      «      D ]  }||vsŒ|||<    Œ, Œ. | j!                  |«      } n@t#        | |«      }|�2| j!                  ||«      } d	|v r	 |j%                  |d	   «      |d	<   | S | S || j
                  _        | S # t&        $ r |d	= Y | S w xY w)
at  
    Normalizes the palette for image.
      - Sets the palette to the incoming palette, if provided.
      - Ensures that there's a palette for L mode images
      - Optimizes the palette if necessary/desired.

    :param im: Image object
    :param palette: bytes object containing the source palette, or ....
    :param info: encoderinfo
    :returns: Image object
    Ni   ry   rC   c              3  ó&   K  — | ]	  }|d z  –— Œ y­w)r4   Nr#   )Ú.0r8   s     r%   ú	<genexpr>z%_normalize_palette.<locals>.<genexpr>  s   è ø€ Ò&B°! q¨A¥vÑ&Bùs   ‚rÂ   r   r4   r|   )Ú
isinstancer¸   Ú	bytearrayÚlistr   rK   r“   ra   Ú
getpaletter5   r6   r   rÇ   r™   ÚappendÚ	enumerateÚremap_paletteÚ_get_optimizeÚindexrŠ   )	ra   rK   rE   Úsource_paletteÚused_palette_colorsr8   Úsource_colorrÖ   Újs	            r%   Ú_normalize_paletterÛ   ÿ  s  € ð €NÙä�g¤¤y´$Ð7Ô8Ü& w¨t° }Ó5ˆNÜ�gœ|×8Ñ8Ô9Ü& w§¡Ó7ˆNà	‡w�w�#‚~ÙØŸU™U×-Ñ-¨eÓ4°T°cÐ:‰NáÜ&Ñ&B´u¸S³zÔ&BÓBˆNÜ!×.Ñ.¨u¸nÔMˆŒ
ñ Ø ÐØÐ)Ð)Ð)Ü�qœ#˜nÓ-¨qÓ1ò 	.ˆAÜ  °°A¸±EÐ!:Ó;ˆLØ—J‘J×%Ñ%×)Ñ)¨,Ó7ˆEØÐ+Ñ+Ø�Ø×&Ñ& uÕ-ð	.ô "Ð"5Ó6ò 	‰HˆAˆuØ‰}ÜœsÐ#6Ó7Ó8ò �AØÐ 3Ò3Ø12Ð+¨AÑ.Ùñð	ð ×ÑÐ1Ó2‰ä+¨B°Ó5ÐØÐ*Ø×!Ñ!Ð"5°~ÓFˆBØ Ñ%ð-Ø+>×+DÑ+DØ˜^Ñ,ó,�D˜Ñ(ð
 ˆI�2ˆIà'€B‡J�JÔØ€Iøô "ò -Ø˜^Ñ,ØˆIð-ús   Æ'G ÇG%Ç$G%c           	     ó  — t        | «      }|j                  j                  «       D ]!  \  }}| j                  j	                  ||«       Œ# t        ||| j                  «      }t        || j                  «      D ]  }|j                  |«       Œ d}t        | «      r|dz  }t        || d|«       dt        | «      f|_
        t        j                  ||dd| j                  z   dt        |j                     fg«       |j                  d«       y )Nr   rw   ©r   r   r=   rƒ   ó    )rÉ   rE   ÚitemsÚencoderinfoÚ
setdefaultrÛ   Ú_get_global_headerÚwriteÚget_interlaceÚ_write_local_headerÚencoderconfigr   Ú_saver‹   rÃ   r“   )ra   r.   rK   Úim_outrª   Úvr1   rR   s           r%   Ú_write_single_framerê   ?  sê   € ô
 ˜RÓ €FØ—‘×!Ñ!Ó#ò (‰ˆˆ1Ø
�‰×!Ñ! ! QÕ'ð(ä ¨°·±Ó@€Fä ¨¯©Ó7ò ˆØ
�‰��ðð €EÜ�RÔØ˜‘
ˆÜ˜˜B ¨Ô.àœ}¨RÓ0Ð1€FÔÜ‡O�O�F˜B %¨°"·'±'Ñ)9¸1¼gÀfÇkÁkÑ>RÐ!SÐ TÔUà‡H�HˆU…Or$   c                óÈ   — t        |«      t        | «      k7  r"|j                  d«      }| j                  d«      } t        j                  || «      }||j	                  d¬«      fS )Nrx   F)Ú
alpha_only)Ú_get_palette_bytesr–   r   Úsubtract_moduloÚgetbbox)Úbase_imÚim_frameÚdeltas      r%   Ú_getbboxró   X  s]   € ô ˜(Ó#Ô'9¸'Ó'BÒBØ×#Ñ# FÓ+ˆØ—/‘/ &Ó)ˆÜ×&Ñ& x°Ó9€EØ�%—-‘-¨5�-Ó1Ð1Ð1r$   c                  ó,   — e Zd ZU ded<   ded<   ded<   y)Ú_FrameúImage.Imagera   z tuple[int, int, int, int] | NoneÚbboxúdict[str, Any]rà   N)r   r   r   Ú__annotations__r#   r$   r%   rõ   rõ   b  s   … ØƒOØ
*Ó*ØÔr$   rõ   c           	     ó\
  — | j                   j                  d«      }| j                   j                  d| j                  j                  d«      «      }g }d }d}d }t        j                  | g| j                   j                  dg «      «      D �]²  }	t        j                  |	«      D �]–  }
t        |
j                  «       «      }
|dk(  rD|
j                  j                  «       D ]'  \  }}|dk(  rŒ| j                   j                  ||«       Œ) | j                   j                  «       }d|
j                  v r|j                  d|
j                  d   «       t        |
||«      }
t        |t        t        f«      r	||   |d<   n"|€ d|
j                  v r|
j                  d   |d<   t        |t        t        f«      r||   |d<   |dz  }d }|�rP|�rMt        ||
«      \  }}|s0|j                  d«      r|d   j                   dxx   |d   z  cc<   �Œg|d   j                   j                  d«      dk(  rž|€‹| j                   j                  d| j                  j                  dd	«      «      }t!        |
|«      }t#        j$                  d
|
j&                  |«      }|j)                  |d   j*                  j,                  «       t        ||
«      d   }�nO|j                  d«      �r=|
j.                  dk7  �r-d|vr	 |
j,                  j1                  |
«      |d<   d|v �r|
j                  «       }t#        j$                  d
|j&                  |d   «      }|j.                  dk(  r1|j5                  «       \  }}}}t7        j8                  d„ ||||¬«      }nh|j.                  d
k(  rAt#        j$                  d|j&                  «      }|j;                  |j=                  «       «       |}t7        j8                  d„ |¬«      }|j?                  |tA        jB                  |«      ¬«       nd }|
}|jE                  tG        |xs |
||«      «       �Œ™ �Œµ tI        |«      dk(  r.d| j                   v r|d   j                   d   | j                   d<   y|D ]œ  }|j*                  }
|jJ                  s/tM        |
|j                   «      D ]  }|jO                  |«       Œ d}n;|sd|j                   d<   |
jQ                  |jJ                  «      }
|jJ                  d d }tS        ||
||j                   «       Œž y# t2        $ r Y �Œw xY w)Nrl   Údisposalr   Úappend_imagesr|   r   rg   r   )r   r   r   ry   ÚoptimizerÀ   rx   c                ót   —  | d    | d    | d    | d   | d   | d   «      | d   «      | d   «      dz  d«      S )	Nr–   rŒ   ÚrÚgÚbÚarp   rÀ   r#   ©Úargss    r%   ú<lambda>z(_write_multiple_frames.<locals>.<lambda>©  sd   € ¨_¨T°)©_Ø$/ D¨¡KØ(3¨¨U©Ø,7¨D°©K¸¸S¹	À4ÈÁ9Ó,MÈtÐTWÉyó)*ð )-¨S©	ó	%&ð '*ñ%*ð %(ó	."€ r$   )rÿ   r   r  r  rz   c                ó&   —  | d   | d   dz  d«      S )Nr–   ra   rp   rÀ   r#   r  s    r%   r  z(_write_multiple_frames.<locals>.<lambda>¿  s   € ¨_¨T°)©_¸TÀ$¹ZÈ#Ñ=MÈsÓ-S€ r$   ©ra   )ÚmaskFrÝ   TÚinclude_color_table)*rà   r™   rE   Ú	itertoolsÚchainr   ÚIteratorrÉ   r{   rß   rá   rÛ   rÎ   rÐ   r   ró   Ú_get_backgroundr   Únewr‹   r­   ra   rK   r“   Ú_new_color_indexrŠ   Úsplitr   Úlambda_evalÚputdatar®   rŽ   r   ÚinvertrÒ   rõ   r6   r÷   râ   rã   ÚcropÚ_write_frame_data)ra   r.   rK   rl   rû   Ú	im_framesÚprevious_imÚframe_countÚbackground_imÚ
imSequencerñ   rª   ré   rà   Ú
diff_framerò   r÷   r€   rB   r›   rÿ   r   r  r  r  Údelta_lÚ
frame_datar1   Úoffsets                                r%   Ú_write_multiple_framesr  h  sÂ  € ð �~‰~×!Ñ! *Ó-€HØ�~‰~×!Ñ! *¨b¯g©g¯k©k¸*Ó.EÓF€Hà €IØ&*€KØ€KØ€MÜ—o‘o r d¨B¯N©N×,>Ñ,>¸ÐPRÓ,SÓTó TPˆ
Ü%×.Ñ.¨zÓ:ó S	PˆHä& x§}¡}£Ó7ˆHØ˜aÒØ$ŸM™M×/Ñ/Ó1ò 4‘D�A�qØ˜NÒ*Ø Ø—N‘N×-Ñ-¨a°Õ3ð4ð
 Ÿ.™.×-Ñ-Ó/ˆKØ §¡Ñ.Ø×&Ñ& ~°x·}±}À^Ñ7TÔUÜ)¨(°G¸[ÓIˆHÜ˜(¤T¬5 MÔ2Ø*2°;Ñ*?�˜JÒ'ØÐ! j°H·M±MÑ&AØ*2¯-©-¸
Ñ*C�˜JÑ'Ü˜(¤T¬5 MÔ2Ø*2°;Ñ*?�˜JÑ'Ø˜1ÑˆKàˆJÚš[ä& {°HÓ=‘��tÙà"—‘ zÔ2Ø! "™×1Ñ1°*Ó=ÀÈZÑAXÑXÓ=ÙØ˜R‘=×,Ñ,×0Ñ0°Ó<ÀÒAØ$Ð,Ø "§¡× 2Ñ 2Ø*¨B¯G©G¯K©K¸È	Ó,Ró!˜ô &5°X¸uÓ%E˜
Ü(-¯	©	°#°x·}±}ÀjÓ(Q˜Ø%×0Ñ0°¸1±·±×1HÑ1HÔIÜ# M°8Ó<¸QÑ?’DØ —_‘_ ZÕ0°X·]±]ÀcÓ5IØ%¨[Ñ8ð!à (× 0Ñ 0× AÑ AÀ(Ó Kð (¨Ñ7ð
 &¨Ò4à%-§]¡]£_˜
Ü$Ÿy™y¨¨e¯j©j¸+ÀnÑ:UÓV˜Ø Ÿ:™:¨Ò/Ø).¯©«™J˜A˜q ! QÜ#,×#8Ñ#8ñ	!"ð #$Ø"#Ø"#Ø"#ô$™Dð"  %Ÿz™z¨SÒ0ä*/¯)©)°C¸¿¹Ó*D Ø '§¡°·±³Ô @Ø(/ Ü#,×#8Ñ#8Ù SØ#(ô$˜Dð #×(Ñ(¨´H·O±OÀDÓ4IÐ(ÕJà�Ø"ˆKØ×ÑœV JÒ$:°(¸DÀ+ÓNÖOògS	PðTPôl ˆ9ƒ~˜ÒØ˜Ÿ™Ñ'à)2°1©×)AÑ)AÀ*Ñ)MˆB�N‰N˜:Ñ&Øàò Hˆ
Ø—=‘=ˆØ�Šä'¨°*×2HÑ2HÓIò �Ø—‘˜•ðà‰Fñ Ø@D�
×&Ñ&Ð'<Ñ=à—}‘} Z§_¡_Ó5ˆHØ—_‘_ R aÐ(ˆFÜ˜"˜h¨°
×0FÑ0FÕGðHð øô{  *ò !Ú ð!ús   Ë0TÔ	T+Ô*T+c                ó"   — t        | ||d¬«       y )NT)Úsave_all)rç   )ra   r.   Úfilenames      r%   Ú	_save_allr#  à  s   € Ü	ˆ"ˆb�( TÖ*r$   Fc                óx  — d| j                   v sd| j                  v r6| j                   j                  d| j                  j                  d«      «      }nd }| j                   j                  dd«       |rt	        | ||«      st        | ||«       |j                  d«       t        |d«      r|j                  «        y y )NrK   rý   Tri   Úflush)	rà   rE   r™   rá   r  rê   rã   Úhasattrr%  )ra   r.   r"  r!  rK   s        r%   rç   rç   ä  s•   € ð �B—N‘NÑ" i°2·7±7Ñ&:Ø—.‘.×$Ñ$ Y°·±·±¸IÓ0FÓG‰àˆØ
�‰×!Ñ! *¨dÔ3áÔ1°"°b¸'ÔBÜ˜B  GÔ,à‡H�HˆT„Näˆr�7ÔØ
�‰�
ð r$   c                ór   — | j                   j                  dd«      }t        | j                  «      dk  rd}|S )Nr    r   é   r   )rà   r™   Úminr‹   )ra   r    s     r%   rä   rä   ÷  s5   € Ø—‘×"Ñ" ;°Ó2€Iô ˆ2�7‰7ƒ|�bÒØˆ	àÐr$   c                óš  — 	 |j                   d   }d|j                   v rt        |j                   d   dz  «      }nd}t        |j                   j                  dd«      «      }|€|dk7  s|rk|�dnd}||dz  z  }| j	                  dt        d	«      z   t        d
«      z   t        |«      z   t        |«      z   t        |xs d«      z   t        d«      z   «       |j                   j                  d«      }|r"t        |«      }	t        |	«      }
|
r
|dz  }||
z  }| j	                  dt        |d   «      z   t        |d   «      z   t        |j                  d   «      z   t        |j                  d   «      z   t        |«      z   «       |r
r| j	                  t        	«      «       | j	                  t        d«      «       y # t        $ r d }Y �Œ¸w xY w)Nr|   rl   r>   r   rû   r   r   rj   rk   rv   r	  r@   rt   r=   )rà   ÚKeyErrorr„   r™   rã   r   Úo16rí   Ú_get_color_table_sizer‹   Ú_get_header_palette)r.   ra   r  rR   r|   rl   rû   Úpacked_flagr	  Úpalette_bytesÚcolor_table_sizes              r%   rå   rå     sØ  € ðØ—~‘~ nÑ5ˆð �R—^‘^Ñ#Ü�r—~‘~ jÑ1°BÑ6Ó7‰àˆä�2—>‘>×%Ñ% j°!Ó4Ó5€HàÐ 8¨q¢=±HØ'Ð3‘a¸ˆØ�x 1‘}Ñ$ˆà
�‰ØÜ�‹gñä�‹eñô �‹oñô �(‹mñ	ô
 �Ò" Ó#ñ$ô �‹eñô	
ð Ÿ.™.×,Ñ,Ð-BÓCÐÙÜ*¨2Ó.ˆÜ0°Ó?ÐÙØ˜C‘KˆEØÐ,Ñ,ˆEà‡H�HØÜ
ˆf�Q‰i‹.ñ	ä
ˆf�Q‰i‹.ñ	ô ˆb�g‰g�a‰j‹/ñ	ô ˆb�g‰g�a‰j‹/ñ		ô
 ˆU‹)ñ	ôñ Ñ/Ø
�‰Ô$ ]Ó3Ô4Ø‡H�HŒR�‹U…OøôU ò Ø‹ðús   ‚F; Æ;G
Ç	G
c                ó@  — | j                  «       }	 t        |d«      5 }| j                  dk7  r)t        j                  d|g|t        j
                  ¬«       nådd|g}dg}t        j                  |t        j                  t        j
                  ¬«      }t        j                  ||j                  |t        j
                  ¬«      }|j                  €J ‚|j                  j                  «        |j                  «       }	|	rt        j                  |	|«      ‚|j                  «       }	|	rt        j                  |	|«      ‚d d d «       	 t        j                  |«       y # 1 sw Y   Œ xY w# t        $ r Y y w xY w# 	 t        j                  |«       w # t        $ r Y w w xY wxY w)NÚwbrC   Úppmtogif)ÚstdoutÚstderrÚppmquantÚ256)Ústdinr5  r6  )Ú_dumpÚopenr“   Ú
subprocessÚ
check_callÚDEVNULLÚPopenÚPIPEr5  ÚcloseÚwaitÚCalledProcessErrorÚosÚunlinkÚOSError)
ra   r.   r"  Útempfilerd   Ú	quant_cmdÚ	togif_cmdÚ
quant_procÚ
togif_procÚretcodes
             r%   Ú_save_netpbmrM  3  sy  € ð �x‰x‹z€Hð$Ü�(˜DÓ!ð 	L QØ�w‰w˜%ÒÜ×%Ñ%Ø Ð*°1¼Z×=OÑ=Oöð (¨°Ð9�	Ø'˜L�	Ü'×-Ñ-Ø¤j§o¡o¼j×>PÑ>Pô�
ô (×-Ñ-ØØ$×+Ñ+ØÜ%×-Ñ-ô	�
ð "×(Ñ(Ð4Ð4Ð4Ø×!Ñ!×'Ñ'Ô)à$Ÿ/™/Ó+�ÙÜ$×7Ñ7¸ÀÓKÐKà$Ÿ/™/Ó+�ÙÜ$×7Ñ7¸ÀÓKÐK÷=	Lð@	Ü�I‰I�hÕ÷C	Lð 	LûôD ò 	Ùð	ûð	Ü�I‰I�hÕøÜò 	Ùð	ýsY   ’E6 žDEÄ<E6 ÅE' ÅE$Å E6 Å'	E3Å2E3Å6FÅ8FÆFÆ	FÆFÆFÆFc                óF  — | j                   dv �r|�r|j                  d«      rþt        xs | j                   dk(  }|s| j                  | j                  z  dk  rÉg }t        | j                  «       «      D ]  \  }}|sŒ	|j                  |«       Œ |st        |«      t        |«      k\  r|S t        | j                  j                  «      t        j                  | j                  j                   «      z  }d|dz
  j                  «       z  }t        |«      |dz  k  r|dkD  r|S y)aL  
    Palette optimization is a potentially expensive operation.

    This function determines if the palette should be optimized using
    some heuristics, then returns the list of palette entries in use.

    :param im: Image object
    :param info: encoderinfo
    :returns: list of indexes of palette entries in use, or None
    )ry   rz   rý   rz   i   r   r   N)r“   r™   Ú_FORCE_OPTIMIZEÚwidthÚheightrÓ   Ú	histogramrÒ   rŒ   r6   rK   r   ÚgetmodebandsÚ
bit_length)ra   rE   ÚoptimiserØ   r8   ÚcountÚnum_palette_colorsÚcurrent_palette_sizes           r%   rÕ   rÕ   h  s  € ð 
‡w�w�*Ò¢¨$¯(©(°:Ô*>ô #Ò4 b§g¡g°¡nˆÙ�r—x‘x "§)¡)Ñ+¨iÒ7à"$ÐÜ% b§l¡l£nÓ5ò 2‘��5ÚØ'×.Ñ.¨qÕ1ð2ñ œ3Ð2Ó3´sÐ;NÓ7OÒOØ*Ð*ä!$ R§Z¡Z×%7Ñ%7Ó!8¼E×<NÑ<NØ—
‘
—‘ó=ñ "Ðð $%Ð);¸aÑ)?×(KÑ(KÓ(MÑ#MÐ ô Ð'Ó(Ð,@ÀAÑ,EÒEà(¨1Ò,à*Ð*Ør$   c                ó–   — | syt        | «      dk  ryt        j                  t        j                  t        | «      dz  d«      «      dz
  S )Nr   ru   r   r4   r   )r6   ÚmathÚceilÚlog)r0  s    r%   r-  r-  —  sA   € áØÜ	ˆ]Ó	˜aÒ	Øä�y‰yœŸ™¤# mÓ"4¸Ñ"9¸1Ó=Ó>ÀÑBÐBr$   c                óv   — t        | «      }d|z  t        | «      dz  z
  }|dkD  r| t        d«      dz  |z  z  } | S )zä
    Returns the palette, null padded to the next power of 2 (*3) bytes
    suitable for direct inclusion in the GIF header

    :param palette_bytes: Unpadded palette bytes, in RGBRGB form
    :returns: Null padded palette
    r   r4   r   )r-  r6   r   )r0  r1  Úactual_target_size_diffs      r%   r.  r.  ¡  sR   € ô -¨]Ó;Ðð  !Ð$4Ñ4¼¸MÓ8JÈaÑ8OÑOÐØ Ò"Øœ˜A› ™Ð%<Ñ<Ñ<ˆØÐr$   c                óJ   — | j                   r| j                   j                   S dS )zš
    Gets the palette for inclusion in the gif header

    :param im: Image object
    :returns: Bytes, len<=768 suitable for inclusion in gif header
    r$   rÂ   r  s    r%   rí   rí   ³  s   € ð "$§¢ˆ2�:‰:×ÑÐ4°Ð4r$   c                óº   — d}|r1t        |t        «      r	 | j                  j                  || «      }|S |}|S # t        $ r}t        |«      dvr‚ Y d }~|S d }~ww xY w)Nr   )z$cannot allocate more than 256 colorsz/cannot add non-opaque RGBA color to RGB palette)rÎ   r   rK   ÚgetcolorrŠ   Ústr)ra   Úinfo_backgroundrB   re   s       r%   r  r  ½  s{   € ð €JÙÜ�o¤uÔ-ð
ØŸZ™Z×0Ñ0°À"ÓE�
ð Ðð )ˆJØÐøô ò Ü�q“6ð "ñ ð óð Ðûðús   –8 ¸	AÁAÁAc                ó  — d}| j                   j                  d«      dk(  s9|r9d|v s3|j                  d«      €"|j                  d«      s|j                  d«      rd}t        | |j                  d«      «      }t        | «      }t	        |«      }d	|z   t        | j                  d
   «      z   t        | j                  d   «      z   t        |dz   «      t        |«      t        d
«      z   t        |«      g}|j                  d«      �_|j                  dt        d«      z   t        d«      z   dz   t        d«      z   t        d«      z   t        |d   «      z   t        d
«      z   «       |j                  d«      r�dt        d«      z   }|d   }t        |t        «      r|j                  «       }t        d
t        |«      d«      D ]$  }	||	|	dz    }
|t        t        |
«      «      |
z   z  }Œ& |t        d
«      z  }|j                  |«       |S )z2Return a list of strings representing a GIF headers   87ar<   s   89ar|   rs   rl   rh   rB   s   GIFr   r   r@   rj   rp   rA   rr   r4   rn   )rE   r™   r  rí   r-  r,  r‹   r   r.  rÒ   rÎ   rb  Úencoder5   r6   )ra   rE   r<   rB   r0  r1  ÚheaderÚcomment_blockrh   r8   Úsubblocks              r%   râ   râ   ×  s  € ð €GØ	‡w�w‡{�{�9Ó Ò'Ùà˜dÑ"Ø�x‰x˜ÓÐ+Ø�x‰x˜
Ô#Ø�x‰x˜	Ô"ð ˆä   T§X¡X¨lÓ%;Ó<€Jä& rÓ*€MÜ,¨]Ó;Ðð 	Ø
ñ	ä
ˆb�g‰g�a‰j‹/ñ	ô ˆb�g‰g�a‰j‹/ñ	ô 	Ð˜cÑ!Ó"ä
ˆ:‹œ˜A›Ñä˜MÓ*ð€Fð ‡x�x�ÓÐ#Ø�‰ØÜ�‹gñä�‹fñð ñô �‹eñ	ô
 �‹eñô �$�v‘,Óñ ô �‹eñô		
ð ‡x�x�	ÔØœr #›w™ˆà�y‘/ˆÜ�gœsÔ#Ø—n‘nÓ&ˆGÜ�qœ#˜g›,¨Ó,ò 	:ˆAØ˜q 1 s¡7Ð+ˆHØœR¤ H£Ó.°Ñ9Ñ9‰Mð	:ð 	œ˜A›ÑˆØ�‰�mÔ$Ø€Mr$   c           	     óØ   — 	 ||_         t        | ||d«       t        j                  || dd|j                  z   dt
        |j                     fg«       | j                  d«       |` y # |` w xY w)Nr   rƒ   rÝ   rÞ   )rà   rå   r   rç   r‹   rÃ   r“   rã   )r.   rñ   r  Úparamss       r%   r  r    sj   € ð!Ø%ˆÔô 	˜B ¨&°!Ô4ä�‰Ø�b˜E 6¨H¯M©MÑ#9¸1¼gÀhÇmÁmÑ>TÐUÐVô	
ð 	�‰�ŒàÑ øˆHÑ ús   ‚A A% Á%A)c                óè   — |€i }t        | |«      }d|vr d| j                  v r| j                  d   |d<   t        | ||«      }|j                  | _        |j                  | _        t        | |«      }||fS )a  
    Legacy Method to get Gif data from image.

    Warning:: May modify image data.

    :param im: Image object
    :param palette: bytes object containing the source palette, or ....
    :param info: encoderinfo
    :returns: tuple of(list of header items, optimized palette)

    rB   )rÕ   rE   rÛ   rK   ra   râ   )ra   rK   rE   rØ   Úim_modrf  s         r%   Ú	getheaderrm  .  s}   € ð €|Øˆä'¨¨DÓ1Ðà˜4Ñ L°B·G±GÑ$;ØŸW™W \Ñ2ˆˆ\Ñä  G¨TÓ2€FØ—‘€B„JØ�I‰I€B„EÜ  DÓ)€FàÐ&Ð&Ð&r$   c                ó†   — ddl m}  G d„ d|«      }| j                  «         |«       }t        || ||«       |j                  S )aë  
    Legacy Method

    Return a list of strings representing this image.
    The first string is a local image header, the rest contains
    encoded image data.

    To specify duration, add the time in milliseconds,
    e.g. ``getdata(im_frame, duration=1000)``

    :param im: Image object
    :param offset: Tuple of (x, y) pixels. Defaults to (0, 0)
    :param \**params: e.g. duration or other encoder info parameters
    :returns: List of bytes containing GIF encoded frame data

    r   )ÚBytesIOc                  óL   — e Zd Zg Zej
                  dk\  rddlmZ dd„Zydd„Zy)	úgetdata.<locals>.Collector)r4   é   r   )ÚBufferc                óN   — | j                   j                  |«       t        |«      S r·   ©r2   rÒ   r6   ©r0   r2   s     r%   rã   z getdata.<locals>.Collector.writeg  ó   € Ø—	‘	× Ñ  Ô&Ü˜4“yÐ r$   c                óN   — | j                   j                  |«       t        |«      S r·   ru  rv  s     r%   rã   z getdata.<locals>.Collector.writem  rw  r$   N)r2   rs  r…   r„   )r2   r   r…   r„   )	r   r   r   r2   ÚsysÚversion_infoÚcollections.abcrs  rã   r#   r$   r%   Ú	Collectorrq  a  s"   „ Øˆà×Ñ˜wÒ&Ý.ô!ô!r$   r|  )Úioro  r‰   r  r2   )ra   r  rj  ro  r|  r.   s         r%   r®   r®   L  s<   € õ& ô!�Gô !ð  ‡G�G„Iá	‹€Bä�b˜"˜f fÔ-à�7‰7€Nr$   z.gifz	image/gif)r(   r¸   r…   r¹   )ra   rö   r…   rö   )ra   rö   rK   ú_Palette | NonerE   rø   r…   rö   )ra   rö   r.   ú	IO[bytes]rK   r~  r…   rº   )rð   rö   rñ   rö   r…   z4tuple[Image.Image, tuple[int, int, int, int] | None])ra   rö   r.   r  rK   r~  r…   r¹   )ra   rö   r.   r  r"  ústr | bytesr…   rº   )F)
ra   rö   r.   r  r"  r€  r!  r¹   r…   rº   )ra   rö   r…   r„   )
r.   r  ra   rö   r  útuple[int, int]rR   r„   r…   rº   )ra   rö   rE   rø   r…   zlist[int] | None)r0  r¸   r…   r„   )r0  r¸   r…   r¸   )ra   rö   r…   r¸   )ra   rö   rc  z=int | tuple[int, int, int] | tuple[int, int, int, int] | Noner…   r„   )ra   rö   rE   rø   r…   úlist[bytes])
r.   r  rñ   rö   r  r�  rj  rø   r…   rº   )NN)ra   rö   rK   r~  rE   zdict[str, Any] | Noner…   z$tuple[list[bytes], list[int] | None])rÝ   )ra   rö   r  r�  rj  r   r…   r‚  )GÚ
__future__r   r
  rZ  rD  r<  ry  Úenumr   Ú	functoolsr   Útypingr   r   r   r	   r
   r   r   Ú r   r   r   r   r   r   r   Ú_binaryr   rF   r   r   r,  r   r   r    r‘   r)   r+   rÃ   rÉ   r¸   rÏ   r„   Ú_PaletterÛ   rê   ró   rõ   r  r#  rç   rä   rå   rM  rO  rÕ   r-  r.  rí   r  râ   r  rm  r®   Úregister_openr»   Úregister_saveÚregister_save_allÚregister_extensionÚregister_mimer#   r$   r%   ú<module>r�     s  ðõ4 #ã Û Û 	Û Û 
Ý Ý %ß K× KÑ K÷÷ ñ õ "Ý Ý !áÝô�gô ð #×2Ñ2Ð ó0ôK�9×&Ñ&ô Kðd ˜# CÑ
(€óð2 �˜	 4¨¡9¨l×.GÑ.GÐGÑH€ð=Øð=Ø-ð=Ø5Cð=àó=ð@Øðàðð ðð 
ó	ð22Øð2Ø$/ð2à9ó2ô ˆZô  ðuØðuØ"ðuØ-<ðuà	óuóp+ð
 MRðØðØ"ðØ.9ðØEIðà	óó&ð/Øð/Ø"ð/Ø,;ð/ØDGð/à	ó/ód-ðd €ó,ó^Cóó$5ðØðàRðð 	óó4;ð|!Øð!àð!ð ð!ð ð	!ð
 
ó!ð4 UYð'Øð'Ø-ð'Ø<Qð'à)ó'ð> 06ð+Øð+Ø,ð+ØADð+àó+ðb €× Ñ �L×'Ñ'¨°wÔ ?Ø €× Ñ �L×'Ñ'¨Ô /Ø €× Ñ ˜×+Ñ+¨YÔ 7Ø €× Ñ ˜×,Ñ,¨fÔ 5Ø €× Ñ �L×'Ñ'¨Õ 5r$   