ó
    "%vgð¡  ã                  ó  • S SK J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JrJrJr  SSKJrJr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  \(       a  SSKJr  SSK J!r!   " S S\5      r"\"RF                  r$S-S jr% " S S\R(                  5      r&SSSS.r'S.S jr(\\)\*\+\,   \R.                  4   r-        S/S jr.        S0S jr/      S1S jr0 " S S\5      r1        S2S jr2S3S jr3 S4         S5S jjr4S6S jr5          S7S  jr6S3S! jr7Sr8S8S" jr9S9S# 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@ SA       SBS* jjrA\R„                  " \&R†                  \&\%5        \Rˆ                  " \&R†                  \45        \RŠ                  " \&R†                  \35        \RŒ                  " \&R†                  S+5        \RŽ                  " \&R†                  S,5        g)Cé    )ÚannotationsN)ÚIntEnum)Úcached_property)ÚIOÚTYPE_CHECKINGÚAnyÚLiteralÚ
NamedTupleÚUnioné   )ÚImageÚ
ImageChopsÚ	ImageFileÚ	ImageMathÚImageOpsÚImagePaletteÚImageSequence)Úi16le)Úo8)Úo16le)Ú_imaging)ÚBufferc                  ó$   • \ rS rSrSrSrSrSrSrg)ÚLoadingStrategyé6   z.. versionadded:: 9.1.0r   r   é   © N)	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__ÚRGB_AFTER_FIRSTÚ RGB_AFTER_DIFFERENT_PALETTE_ONLYÚ
RGB_ALWAYSÚ__static_attributes__r   ó    Ú4/usr/lib/python3/dist-packages/PIL/GifImagePlugin.pyr   r   6   s   † Ù!à€OØ'(Ð$ØƒJr'   r   c                ó   • U S S S;   $ )Né   )s   GIF87as   GIF89ar   )Úprefixs    r(   Ú_acceptr,   E   s   € Ø�"�1ˆ:Ð/Ñ/Ð/r'   c                  ó®   ^ • \ rS rSrSrSrSrSrSS jrSS jr	SS jr
\SS	 j5       r\SS
 j5       rSS jrSSS jjrSU 4S jjrSS jrSS jrSrU =r$ )ÚGifImageFileéN   ÚGIFzCompuserve GIFFNc                ó˜   • U R                   R                  S5      nU(       a(  US   (       a  U R                   R                  US   5      $ g )Nr   r   )ÚfpÚread)ÚselfÚss     r(   ÚdataÚGifImageFile.dataU   s6   € Ø�G‰G�L‰L˜‹OˆÞ��1—Ø—7‘7—<‘<  !¡Ó%Ð%Ør'   c                ó�   • [        S[        U5      S5       H,  nUS-  X   s=:X  a  XS-      s=:X  a  XS-      :X  a  M(     g    g   g)Nr   é   r   r   TF)ÚrangeÚlen)r4   ÚpÚis      r(   Ú_is_palette_neededÚGifImageFile._is_palette_needed[   sM   € Ü�qœ#˜a›& !Ö$ˆAØ˜‘F˜a™dÕ: a¨A©¡hÕ:°!¸±E±(Ö:Ùð ;Ùñ %ð r'   c                óf  • U R                   R                  S5      n[        U5      (       d  Sn[        U5      eUS S U R                  S'   [        US5      [        US5      4U l        US   nUS-  S-   nUS	-  (       ak  US
   U R                  S'   U R                   R                  SU-  5      nU R                  U5      (       a%  [        R                  " SU5      nU=U l
        U l        U R                   U l        U R                   R                  5       U l        S U l        U R!                  S5        g )Né   znot a GIF filer*   Úversioné   é
   é   r   é€   é   Ú
backgroundr9   ÚRGBr   )r2   r3   r,   ÚSyntaxErrorÚinfoÚi16Ú_sizer>   r   ÚrawÚglobal_paletteÚpaletteÚ_fpÚtellÚ_GifImageFile__rewindÚ	_n_framesÚ_seek)r4   r5   ÚmsgÚflagsÚbitsr<   s         r(   Ú_openÚGifImageFile._opena   sþ   € à�G‰G�L‰L˜ÓˆÜ�q�z‰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                ó  • U R                   c7  U R                  5       n  U R                  U R                  5       S-   S5        M%  U R                   $ ! [         a    U R                  5       S-   U l          Of = fU R	                  U5        NF)Nr   F©rT   rR   rU   ÚEOFErrorÚseek)r4   Úcurrents     r(   Ún_framesÚGifImageFile.n_frames{   sv   € à�>‰>Ñ!Ø—i‘i“kˆGð1ØØ—J‘J˜tŸy™y›{¨Q™°Ô6ñ ð
 �~‰~Ðøô ó 1Ø!%§¡£¨q¡�–ð1úà�I‰I�gÕs   Ÿ&A Á"A6Á5A6c                óÞ   • U R                   b  U R                   S:g  $ U R                  5       nU(       a  g U R                  SS5        SnU R	                  U5        U$ ! [         a    Sn N!f = f)Nr   TFr\   )r4   r_   Úis_animateds      r(   rc   ÚGifImageFile.is_animated‡   sn   € à�>‰>Ñ%Ø—>‘> QÑ&Ð&à—)‘)“+ˆÞØð	 Ø�J‰J�q˜%Ô ØˆKð 	�	‰	�'ÔØÐøô	 ó 	 ØŠKð	 ús   ¶A ÁA,Á+A,c                ód  • U R                  U5      (       d  g XR                  :  a  S U l        U R                  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   r   úno more images in GIF file)Ú_seek_checkÚ_GifImageFile__frameÚ_imrU   r:   r]   r^   )r4   ÚframeÚ
last_frameÚfÚerV   s         r(   r^   ÚGifImageFile.seek™   s˜   € Ø×Ñ ×&Ñ&ØØ—<‘<ÓØˆDŒHØ�J‰J�qŒMà—\‘\ˆ
Ü�t—|‘| aÑ'¨°©Ö3ˆAð+Ø—
‘
˜1–ò 4øô ó +Ø—	‘	˜*Ô%Ø2�Ü˜s“m¨Ð*ûð+ús   Á+BÂ
B/ÂB*Â*B/c                óä  ^ • US:X  a_  ST l         S T l        ST l        T R                  R	                  T R
                  5        ST l        ST R                  ;   a  T R                  S	 O(T R                  (       a  U(       a  T R                  5         UT R                  S-   :w  a  SU 3n[        U5      eT R                  T l        T R                   (       aY  T R                  R	                  T R                   5        T R                  5       (       a   T R                  5       (       a  M  ST l         T R                  R                  S5      nU(       a  US:X  a  Sn[        U5      eS n0 nS nS nS n	 U(       d  T R                  R                  S5      nU(       a  US:X  a  GOUS:X  Gau  T R                  R                  S5      nT R                  5       n
US   S	:X  aB  U
b?  U
S   nUS-  (       a  U
S
   n[        U
S5      S-  US'   SU-  nUS-	  nU(       a  UT l        OÐUS   S:X  aE  SnU
(       a  XÚ-  nT R                  5       n
U
(       a  M  SU;   a  US==   SU-   -  ss'   OXÖS'   S nMý  US   S:X  ay  US:X  as  U
bp  U
T R                  R!                  5       4US'   U
S S S:X  aH  T R                  5       n
U
(       a1  [#        U
5      S
:¼  a"  U
S   S:X  a  [        U
S5      T R                  S'   T R                  5       (       a   T R                  5       (       a  M  GO‹US:X  Ga„  T R                  R                  S5      n[        US5      [        US5      pþU[        US5      -   U[        US5      -   nnUT R$                  S   :”  d  UT R$                  S   :”  a^  U(       aW  ['        UT R$                  S   5      ['        UT R$                  S   5      4T l        [*        R,                  " T R(                  5        XïUU4n	US   nUS-  S:g  nUS-  (       aV  US-  S-   nT R                  R                  S
U-  5      nT R/                  U5      (       a  [0        R2                  " SU5      nOS nT R                  R                  S5      S   nT R                  R!                  5       T l         OS nGM=  Uc  S!n[        U5      eUT l        U(       d  g / T l        T R                  (       a0  T R4                  R7                  T R                  T R8                  5        Ub  UOT R:                  T l        UT l        US:X  aŒ  T R<                  (       a-  [@        [B        RD                  :X  a  Ub  S"OST l#        OS#T l#        OS$T l#        U(       a	  UT l$        GO-T R:                  (       a  SS%K%J%n  U" T R:                  5      T l$        OþS T l$        OöT RL                  S#:X  aæ  [@        [B        RN                  :w  d  U(       aÇ  S&T R                  ;   aw  T R4                  RQ                  T R                  S&   S5        T R4                  RS                  S"[*        RT                  RV                  5      T l        S"T l#        T R                  S&	 O@ST l#        T R4                  RS                  S[*        RT                  RV                  5      T l        S-U 4S' jjnS T l        U	T l        T R8                  (       Ga¡  T R                  S:¼  Ga�   T R                  S:X  aÌ  T R8                  u  pïnnUU-
  UU-
  4n[*        R,                  " U5        S#nT R                  RY                  S&U5      nUb  T RL                  S(;   a  S"nU" U5      S)-   nO6T R                  RY                  S*S5      nT RL                  S(;   a
  SnU" U5      n[*        RZ                  R]                  UUU5      T l        O³T R^                  b,  T Ra                  T R4                  T R8                  5      T l        OzUbw  T R8                  u  pïnnUU-
  UU-
  4n[*        R,                  " U5        S#nUnT RL                  S(;   a  S"nU" U5      S)-   n[*        RZ                  R]                  UUU5      T l        Ubu  SnUb@  US:X  a(  [@        [B        RD                  :w  a  UT R                  S&'   OT RL                  S(;  a  Un[d        Rf                  " S+WWWW4T R                   WUU45      /T l        URY                  S5      (       a  US   T R                  S'   S, H<  nUU;   a  UU   T R                  U'   M  UT R                  ;   d  M/  T R                  U	 M>     g ! [b         a     Nïf = f).Nr   éÿÿÿÿÚcommentr   zcannot seek to frame ó   ;rf   ó   !éù   r9   rD   Údurationé   r   éþ   r'   ó   
éÿ   Ú	extensionrG   ó   NETSCAPE2.0Úloopó   ,é	   é   r*   rC   é@   rF   rE   rI   Fzimage not found in GIF frameÚRGBAÚPÚL)ÚcopyÚtransparencyc                óÚ   >• TR                   (       aV  U S-  S-   [        TR                   R                  5      :”  a  Sn [        TR                   R                  U S-  U S-  S-    5      $ X U 4$ )Nr9   r   )Ú_frame_paletter;   rP   Útuple)Úcolorr4   s    €r(   Ú_rgbÚ GifImageFile._seek.<locals>._rgbY  sh   ø€ Ø×"×"Ø˜1‘9˜q‘=¤3 t×':Ñ':×'BÑ'BÓ#CÓCØ�EÜ˜T×0Ñ0×8Ñ8¸À¹ÀUÈQÁYÐQRÁ]ÐSÓTÐTà eÐ,Ð,r'   ©rI   r�   )r   rH   Úgif)ru   rz   )r‰   ÚintÚreturnztuple[int, int, int])4Ú_GifImageFile__offsetÚdisposerh   rQ   r^   rS   Údisposal_methodrK   ÚtileÚloadÚ
ValueErrorr2   r6   r3   r]   rL   rR   r;   ÚsizeÚmaxrM   r   Ú_decompression_bomb_checkr>   r   rN   ÚimÚpasteÚdispose_extentrO   r‡   Ú_frame_transparencyÚLOADING_STRATEGYr   r%   Ú_moderP   r„   Úmoder$   ÚputpalettealphaÚconvertÚDitherÚFLOYDSTEINBERGÚgetÚcoreÚfillri   Ú_cropÚAttributeErrorr   Ú_Tile)r4   rj   Úupdate_imagerV   r5   rP   rK   Úframe_transparencyÚ	interlaceÚframe_dispose_extentÚblockrW   Údispose_bitsrq   Úx0Úy0Úx1Úy1rX   r<   r„   rŠ   Údispose_sizeÚdispose_moder‰   r…   Úks   `                          r(   rU   Ú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ö  ØÑ(˜Ø $§	¡	£˜÷  ˜%ð ! 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‘kØð —i‘i—k“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Ô?Ø')¨r°2 ~Ð$Ø˜!™�à" R™Z¨AÑ-�	à˜3—;Ø! A™I¨™?�DØŸ™Ÿ™ Q¨$¡YÓ/�AØ×.Ñ.¨q×1Ñ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à �”
æØ&�–Ø×$×$Ý%á# D×$7Ñ$7Ó8�•à#�•à�y‰y˜CÓä$¬×(XÑ(XÓXÞà%¨¯©Ó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ð —x‘xÑ+à'+§z¡z°$·'±'¸4×;NÑ;NÓ'O˜�Ø+Ñ7Ø)-×)<Ñ)<™˜  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    Û0Ce" ß8e" àA:e" å"
e/å.e/c                óp  >• U R                   (       a  SOSnS U l        U R                  S:X  aG  U R                  b9  [        R
                  R                  XR                  U R                  5      U l        O²U R                  S;   a¢  U R                  U l        U R                   (       ay  [        R
                  R                  SU R                  U R                  =(       d    S5      U l        U R                  R                  " S/U R                   R                  5       Q76   OS U l        U R                  (       dä  U R                  b×  U R                  U R                  R                  :w  a³  [        R
                  R                  U R                  R                  U R                  5      nU R                   (       a+  UR                  " S/U R                   R                  5       Q76   UR                  U R                  SU R                  R                  -   5        X l        Xl        S U l         [        TU ]A  5         g )Nr‚   rƒ   r   rŒ   rI   ©r   r   )r‡   Ú_prev_imrh   rœ   r   r¥   r¦   r–   r™   rŸ   Ú
putpaletteÚgetdatari   rš   rž   ÚsuperÚload_prepare)r4   Ú	temp_modeÚexpanded_imÚ	__class__s      €r(   r¾   ÚGifImageFile.load_prepare©  sx  ø€ Ø×.×.‘C°Cˆ	ØˆŒØ�<‰<˜1ÓØ×'Ñ'Ñ3ÜŸ*™*Ÿ/™/ØŸ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à�”Ø�}�} §¡Ñ!5¸$¿)¹)ÀtÇwÁwÇ|Á|Ó:SÜŸ*™*Ÿ/™/¨$¯'©'¯,©,¸¿	¹	ÓBˆKØ×"×"Ø×&Ò& uÐM¨t×/BÑ/B×/JÑ/JÓ/LÓMØ×Ñ˜dŸg™g v°·±·±Ñ'<Ô=à!ŒGØŒ
Ø"ˆÔä‰ÑÕr'   c                óð  • U R                   S:X  a®  U R                  S:X  a�  [        [        R                  :X  a…  U R
                  b.  U R                  R                  U R
                  S5        SU l        OSU l        U R                  R                  U R                  [        R                  R                  5      U l        g U R                  (       d  g U R                  U R                  R                  :w  aæ  U R
                  b+  [        R                  R!                  SU R                  5      nOf[        R                  R!                  SU R                  5      nUR#                  SSU R                  R%                  5       5        UR                  S5      nUR'                  U R                  SU R                  R                  -   5        Xl        U R                  c   eU R
                  bB  U R                  R                  U R
                  S5        U R                  R                  S5      nOU R                  R                  S5      nU R(                  c   eU R+                  X R(                  5      nU R                  U l        U R                  R                  U l        UR                  S:X  a'  U R                  R'                  X R(                  U5        g U R                  R'                  X R(                  5        g )Nr   r‚   r�   rI   r¹   )rh   rŸ   r�   r   r%   rœ   r™   r    rž   r¡   r   r¢   r£   rº   r–   r¥   r¦   r»   Ú
getpaletterš   r›   r§   )r4   rÀ   Úframe_ims      r(   Úload_endÚGifImageFile.load_endÄ  s
  € Ø�<‰<˜1ÓØ�y‰y˜CÓÔ$4¼×8RÑ8RÓ$RØ×+Ñ+Ñ7Ø—G‘G×+Ñ+¨D×,DÑ,DÀaÔHØ!'�D•Jà!&�D”JØŸ'™'Ÿ/™/¨$¯)©)´U·\±\×5PÑ5PÓQ�”ØØ�}�}ØØ�9‰9˜Ÿ™×*Ñ*Ó*Ø×'Ñ'Ñ3Ü#Ÿj™jŸo™o¨f°d·i±iÓ@‘ä#Ÿj™jŸo™o¨c°4·9±9Ó=�Ø×&Ñ& u¨e°T·W±W×5GÑ5GÓ5IÔJØ)×1Ñ1°%Ó8�Ø×Ñ˜dŸm™m¨V°d·m±m×6HÑ6HÑ-HÔIà'ŒMØ—=‘=Ñ,Ð,Ð,Ø×#Ñ#Ñ/Ø�G‰G×#Ñ# D×$<Ñ$<¸aÔ@Ø—w‘w—‘ vÓ.‰Hà—w‘w—‘ uÓ-ˆHà×"Ñ"Ñ.Ð.Ð.Ø—:‘:˜h×(;Ñ(;Ó<ˆà—-‘-ˆŒØ—W‘W—\‘\ˆŒ
Ø�=‰=˜FÓ"Ø�G‰G�M‰M˜(×$7Ñ$7¸ÕBà�G‰G�M‰M˜(×$7Ñ$7Õ8r'   c                ó   • U R                   $ ©N)rh   )r4   s    r(   rR   ÚGifImageFile.tellë  s   € Ø�|‰|Ðr'   )Ú__frameÚ__offsetÚ__rewindrQ   r‡   rœ   ri   rž   rT   rº   rM   r’   r‘   r›   r2   rO   r™   rP   r“   )r�   zbytes | None)r<   Úbytesr�   Úbool)r�   ÚNone)r�   rŽ   )r�   rÏ   )rj   rŽ   r�   rÐ   )T)rj   rŽ   rª   rÏ   r�   rÐ   )r   r   r    r!   ÚformatÚformat_descriptionÚ!_close_exclusive_fp_after_loadingrO   r6   r>   rY   Úpropertyr`   r   rc   r^   rU   r¾   rÆ   rR   r&   Ú__classcell__)rÁ   s   @r(   r.   r.   N   sq   ø† Ø€FØ)ÐØ(-Ð%à€Nôôôð4 ó	ó ð	ð óó ðô"+ö ~!÷@ô6%9÷Nò r'   r.   rƒ   r‚   )Ú1rƒ   r‚   c                óü  • U R                   [        ;   a  U R                  5         U $ [        R                  " U R                   5      S:X  a¢  U R                  S[        R                  R                  S9n U R                  c   eU R                  R                   S:X  aO  U R                  R                   H5  nUS   S:X  d  M  U R                  R                  U   U R                  S'     U $    U $ U R                  S5      $ )	zï
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
rI   r‚   ©rP   r�   r9   r   r…   rƒ   )rŸ   ÚRAWMODEr”   r   Úgetmodebaser¡   ÚPaletteÚADAPTIVErP   ÚcolorsrK   )r™   Úrgbas     r(   Ú_normalize_moderß   ö  sÊ   € ð 
‡w�w”'ÓØ
�‰Œ	Øˆ	Ü×Ò˜Ÿ™Ó! UÓ*Ø�Z‰Z˜¤U§]¡]×%;Ñ%;ˆZÐ<ˆØ�z‰zÑ%Ð%Ð%Ø�:‰:�?‰?˜fÓ$ØŸ
™
×)Ô)�Ø˜‘7˜a•<Ø.0¯j©j×.?Ñ.?ÀÑ.E�B—G‘G˜NÑ+ØØˆ	ñ	 *ð ˆ	Ø�:‰:�c‹?Ðr'   c                ó¢  • SnU(       ab  [        U[        [        [        45      (       a  [        USS 5      n[        U[        R                  5      (       a  [        UR
                  5      nU R                  S:X  a)  U(       d!  U R                  S5      nUc   e[        U5      nO<U(       d  [        S [        S5       5       5      n[        R                  " SUS9U l        Uc   eU(       aî  / nU R
                  c   e[        S[        U5      S5       HP  n[        X6US-    5      nU R
                  R                  R                  U5      nX…;   a  SnUR                  U5        MR     [        U5       H1  u  phUb  M
  [        [        U5      5       H  n	X•;  d  M
  X•U'     M/     M3     / n
U H  nUc   eU
R                  U5        M     U R                  U
5      n OA[!        X5      nUb3  U R                  X³5      n S	U;   a   UR#                  US	   5      US	'   U $ U $ U R
                  c   eX0R
                  l        U $ ! [$         a    US		  U $ f = f)
aP  
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   r‚   c              3  ó*   #   • U  H	  oS -  v •  M     g7f)r9   Nr   )Ú.0r=   s     r(   Ú	<genexpr>Ú%_normalize_palette.<locals>.<genexpr>0  s   é € Ð&B²z°!¨A¦v²zùs   ‚rI   rØ   r   r9   r…   )Ú
isinstancerÎ   Ú	bytearrayÚlistr   rP   rŸ   rÄ   r:   r;   rˆ   rÝ   r¤   ÚappendÚ	enumerateÚremap_paletteÚ_get_optimizeÚindexr•   )r™   rP   rK   Úsource_paletteÚ
im_paletteÚused_palette_colorsr=   Úsource_colorrì   ÚjÚdest_mapÚoptimized_palette_colorss               r(   Ú_normalize_paletterô     s@  € ð €NÞä�g¤¤y´$Ð7×8Ñ8Ü& w¨t° }Ó5ˆNÜ�gœ|×8Ñ8×9Ñ9Ü& w§¡Ó7ˆNà	‡w�w�#ƒ~ÞØŸ™ tÓ,ˆJØÑ)Ð)Ð)Ü& zÓ2ˆNøæÜ&Ñ&B´u¸S´zÓ&BÓBˆNÜ!×.Ò.¨u¸nÑMˆŒ
ØÑ%Ð%Ð%æØ02ÐØ�z‰zÑ%Ð%Ð%Ü�qœ#˜nÓ-¨qÖ1ˆAÜ  °A¸±EÐ!:Ó;ˆLØ—J‘J×%Ñ%×)Ñ)¨,Ó7ˆEØÓ+Ø�Ø×&Ñ& uÖ-ñ 2ô "Ð"5Ö6‰HˆAØ‹}ÜœsÐ#6Ó7Ö8�AØÕ3Ø12¨AÑ.Úó 9ñ 7ð !ˆÛ(ˆEØÑ$Ð$Ð$Ø�O‰O˜EÖ"ñ )ð ×Ñ˜hÓ'‰ä#0°Ó#:Ð Ø#Ñ/Ø×!Ñ!Ð":ÓKˆBØ Ó%ð-Ø+C×+IÑ+IØ˜^Ñ,ó,�D˜Ñ(ð
 ˆI�2ˆIà�:‰:Ñ!Ð!Ð!Ø'‡J�JÔØ€Iøô "ó -Ø˜^Ñ,ØˆIð-ús   ÈH= È=IÉIc                ór  • [        U 5      nUR                  R                  5        H7  u  pE[        U[        5      (       d  M  U R
                  R                  XE5        M9     [        X2U R
                  5      n[        X0R
                  5       H  nUR                  U5        M     Sn[        U 5      (       a  US-  n[        XSU5        S[        U 5      4Ul        [        R                  " X1[        R                  " SSU R                   -   S["        UR$                     5      /5        UR                  S5        g )Nr   r€   r¹   rC   r�   ó    )rß   rK   Úitemsrå   ÚstrÚencoderinfoÚ
setdefaultrô   Ú_get_global_headerÚwriteÚget_interlaceÚ_write_local_headerÚencoderconfigr   Ú_saver©   r–   rÙ   rŸ   )r™   r2   rP   Úim_outr¶   Úvr5   rW   s           r(   Ú_write_single_framer  Z  sñ   € ô
 ˜RÓ €FØ—‘×!Ñ!Ö#‰ˆÜ�aœ×ÓØ�N‰N×%Ñ% aÖ+ñ $ô   °·±Ó@€Fä ¯©Ö7ˆØ
�‰�Žñ 8ð €EÜ�R×ÑØ˜‘
ˆÜ˜ ¨Ô.àœ}¨RÓ0Ð1€FÔÜ‡O‚OØ”Y—_’_ U¨F°R·W±WÑ,<¸aÄÈÏÉÑAUÓVÐWôð ‡H�HˆU…Or'   c                ó8  • X4 Vs/ s H4  o"R                   (       a  [        UR                   R                   5      OSPM6     nnUS   US   :w  a"  UR                  S5      nU R                  S5      n [        R                  " X5      nXDR                  SS94$ s  snf )Nr'   r   r   r�   F)Ú
alpha_only)rP   rÎ   r¡   r   Úsubtract_moduloÚgetbbox)Úbase_imÚim_framer™   Úpalette_bytesÚdeltas        r(   Ú_getbboxr  v  s™   € ð ELÑCVóÚCV¸R§Z§ZŒˆb�j‰j× Ñ Ô!°SÒ8ÑCVð ð ð �QÑ˜=¨Ñ+Ó+Ø×#Ñ# FÓ+ˆØ—/‘/ &Ó)ˆÜ×&Ò& xÓ9€EØ—-‘-¨5�-Ð1Ð1Ð1ùòs   †;B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] | NoneÚbboxúdict[str, Any]rù   r   N)r   r   r    r!   Ú__annotations__r&   r   r'   r(   r  r  ƒ  s   ‡ ØƒOØ
*Ó*ØÖr'   r  c           
     ó^  • U R                   R                  S5      nU R                   R                  SU R                  R                  S5      5      n/ nS nSnS n[        R                  " U /U R                   R                  S/ 5      5       GH   n	[
        R                  " U	5       GH  n
[        U
R                  5       5      n
US:X  a]  U
R                  R                  5        H?  u  p¼US:X  a  M  [        U[        5      (       d  M$  U R                   R                  X¼5        MA     U R                   R                  5       nSU
R                  ;   a  UR                  SU
R                  S   5        [        X¢U5      n
[        U[        [        45      (       a  X7   US'   O%Uc"  SU
R                  ;   a  U
R                  S   US'   [        U[        [        45      (       a  XG   US'   US-  nS nU(       GaŠ  U(       Ga‚  [!        Xj5      u  nnU(       d6  UR                  S5      (       a  US   R                   S==   US   -  ss'   GM¡  US   R                   R                  S5      S:X  a±  Ucž  U R                   R                  SU R                  R                  SS	5      5      n[#        U
U5      n[$        R&                  " S
U
R(                  U5      nUS   R*                  R,                  nUc   eUR/                  UUR0                  5        [!        XŠ5      S   nGOfUR                  S5      (       GaL  U
R0                  S:w  Ga;  SU;  a.  U
R,                  c   e U
R,                  R3                  U
5      US'   SU;   Ga   U
R                  5       n[$        R&                  " S
UR(                  US   5      nUR0                  S:X  a/  UR7                  5       u  nnnn[8        R:                  " S UUUUS9nOhUR0                  S
:X  aB  [$        R&                  " SUR(                  5      nUR=                  UR?                  5       5        Un[8        R:                  " S US9nURA                  U[B        RD                  " U5      S9  OS nU
nURG                  [I        U=(       d    U
UU5      5        GM     GM#     [K        U5      S:X  a0  SU R                   ;   a  US   R                   S   U R                   S'   gU H¨  nUR*                  n
URL                  (       d1  [O        U
UR                   5       H  nURQ                  U5        M     SnO@U(       d  SUR                   S'   U
RS                  URL                  5      n
URL                  S S n[U        XUUR                   5        Mª     g! [4         a     GN6f = f)Nru   Údisposalr   Úappend_imagesr…   r   rp   r   )r   r   r   r‚   ÚoptimizerÖ   r�   c                ót   • U S   " U S   " U S   " U S   " U S   U S   5      U S   5      U S   5      S-  S5      $ )	Nr¡   r—   ÚrÚgÚbÚary   rÖ   r   ©Úargss    r(   Ú<lambda>Ú(_write_multiple_frames.<locals>.<lambda>Î  sZ   € ¨T°)ª_Ø$(¨¢KØ(,¨UªØ,0°ªK¸¸S¹	À4ÈÁ9Ó,MÈtÐTWÉyó)*ð )-¨S©	ó	%&ð '*ñ%*ð %(ô	."r'   )r  r  r  r  rƒ   c                ó&   • U S   " U S   S-  S5      $ )Nr¡   r™   ry   rÖ   r   r  s    r(   r  r  ä  s   € ¨T°)ª_¸TÀ$¹ZÈ#Ñ=MÈsÔ-Sr'   )r™   )ÚmaskFr¹   TÚinclude_color_table)+rù   r¤   rK   Ú	itertoolsÚchainr   ÚIteratorrß   r„   r÷   rå   rø   rú   rô   rç   rˆ   r  Ú_get_backgroundr   Únewr–   r™   rP   r»   rŸ   Ú_new_color_indexr•   Úsplitr   Úlambda_evalÚputdatar¼   rš   r   Úinvertrè   r  r;   r  rû   rü   ÚcropÚ_write_frame_data)r™   r2   rP   ru   r  Ú	im_framesÚprevious_imÚframe_countÚbackground_imÚ
imSequencer	  r¶   r  rù   Ú
diff_framer  r  r‰   rH   Úfirst_paletter¦   r  r  r  r  r!  Údelta_lÚ
frame_datar5   Úoffsets                                 r(   Ú_write_multiple_framesr9  ‰  sÖ  € ð �~‰~×!Ñ! *Ó-€HØ�~‰~×!Ñ! *¨b¯g©g¯k©k¸*Ó.EÓF€Hà €IØ&*€KØ€KØ€MÜ—o’o r d¨B¯N©N×,>Ñ,>¸ÐPRÓ,S×Tˆ
Ü%×.Ò.¨z×:ˆHä& x§}¡}£Ó7ˆHØ˜aÓØ$ŸM™M×/Ñ/Ö1‘D�AØ˜NÓ*Ù Ü! !¤S×)Ó)ØŸ™×1Ñ1°!Ö7ñ	 2ð Ÿ.™.×-Ñ-Ó/ˆKØ §¡Ó.Ø×&Ñ& ~°x·}±}À^Ñ7TÔUÜ)¨(¸[ÓIˆHÜ˜(¤T¬5 M×2Ñ2Ø*2Ñ*?�˜JÒ'ØÑ! j°H·M±MÓ&AØ*2¯-©-¸
Ñ*C�˜JÑ'Ü˜(¤T¬5 M×2Ñ2Ø*2Ñ*?�˜JÑ'Ø˜1ÑˆKàˆJßŸ[ä& {Ó=‘��tÞà"—‘ z×2Ñ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˜Ø(1°!©¯©×(?Ñ(?˜Ø,Ñ8Ð8Ð8Ø%×0Ñ0°À×@RÑ@RÔSÜ# MÓ<¸QÑ?’DØ —_‘_ Z×0Ò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ôo ;ñ Uôt ˆ9ƒ~˜ÓØ˜Ÿ™Ó'à)2°1©×)AÑ)AÀ*Ñ)MˆB�N‰N˜:Ñ&Øãˆ
Ø—=‘=ˆØ��ä'¨°*×2HÑ2HÖI�Ø—‘˜–ñ Jà‰Fö Ø@D�
×&Ñ&Ð'<Ñ=à—}‘} Z§_¡_Ó5ˆHØ—_‘_ R aÐ(ˆFÜ˜"¨°
×0FÑ0FÖGñ  ð øô{  *ó !Ú ð!ús   ÍVÖ
V,Ö+V,c                ó   • [        XUSS9  g )NT)Úsave_all)r   )r™   r2   Úfilenames      r(   Ú	_save_allr=    s   € Ü	ˆ"�( TÓ*r'   Fc                óš  • SU R                   ;   d  SU R                  ;   a6  U R                   R                  SU R                  R                  S5      5      nOS nU R                   R                  SS5        U(       a  [	        XU5      (       d  [        XU5        UR                  S5        [        US5      (       a  UR                  5         g g )NrP   r  Trr   Úflush)	rù   rK   r¤   rú   r9  r  rü   Úhasattrr?  )r™   r2   r<  r;  rP   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                ót   • U R                   R                  SS5      n[        U R                  5      S:  a  SnU$ )Nr¬   r   é   r   )rù   r¤   Úminr–   )r™   r¬   s     r(   rý   rý     s5   € Ø—‘×"Ñ" ;°Ó2€Iô ˆ2�7‰7ƒ|�bÓØˆ	àÐr'   c                óÞ  •  UR                   S   nSUR                   ;   a  [        UR                   S   S-  5      nOSn[        UR                   R                  SS5      5      nUc  US:w  d  U(       ap  Ub  SOSnXvS-  -  nU R	                  S[        S	5      -   [        S
5      -   [        U5      -   [        U5      -   [        U=(       d    S5      -   [        S5      -   5        UR                   R                  S5      nU(       a&  [        U5      n	[        U	5      n
U
(       a	  US-  nX:-  nU R	                  S[        US   5      -   [        US   5      -   [        UR                  S   5      -   [        UR                  S   5      -   [        U5      -   5        U(       a!  W
(       a  U R	                  [        W	5      5        U R	                  [        S5      5        g ! [         a    S n GNÚf = f)Nr…   ru   rD   r   r  r   r   rs   rt   r   r"  rF   r}   rC   )rù   ÚKeyErrorrŽ   r¤   rü   r   Úo16Ú_get_palette_bytesÚ_get_color_table_sizer–   Ú_get_header_palette)r2   r™   r8  rW   r…   ru   r  Úpacked_flagr"  r
  Ú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¸ˆØ 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   ‚G ÇG,Ç+G,c                ó^  • U R                  5       n [        US5       nU R                  S:w  a'  [        R                  " SU/U[        R
                  S9  OìSSU/nS/n[        R                  " U[        R                  [        R
                  S9n[        R                  " UUR                  U[        R
                  S9nUR                  c   eUR                  R                  5         UR                  5       n	U	(       a  [        R                  " X•5      eUR                  5       n	U	(       a  [        R                  " X–5      eS S S 5         [        R                  " U5        g ! , (       d  f       N&= f! [         a     g f = f!  [        R                  " U5        f ! [         a     f f = f= f)NÚwbrI   Úppmtogif)ÚstdoutÚstderrÚppmquantÚ256)ÚstdinrO  rP  )Ú_dumpÚopenrŸ   Ú
subprocessÚ
check_callÚDEVNULLÚPopenÚPIPErO  ÚcloseÚwaitÚCalledProcessErrorÚosÚunlinkÚOSError)
r™   r2   r<  Útempfilerl   Ú	quant_cmdÚ	togif_cmdÚ
quant_procÚ
togif_procÚretcodes
             r(   Ú_save_netpbmrg  X  sj  € ð �x‰x‹z€Hð$Ü�(˜DÔ! 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÷= "ð@	Ü�IŠI�hÕ÷C "Õ!ûôD ó 	Ùð	ûð	Ü�IŠI�hÕøÜó 	Ùð	ýsY   ’F žD$E"ÅF ÅE3 Å"
E0Å,F Å3
F Å?F ÆF,ÆFÆF,Æ
F)Æ&F,Æ(F)Æ)F,c                ó´  • U R                   S;   GaG  U(       Ga?  UR                  S5      (       Ga(  [        =(       d    U R                   S:H  nU(       d  U R                  U R                  -  S:  aè  / n[        U R                  5       5       H  u  pEU(       d  M  UR                  U5        M!     U(       d  [        U5      [        U5      :¼  a  U$ U R                  c   e[        U R                  R                  5      [        R                  " U R                  R                   5      -  nSUS-
  R                  5       -  n[        U5      US-  ::  a  US:”  a  U$ g)a0  
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
)r‚   rƒ   r  rƒ   i   Nr   r   )rŸ   r¤   Ú_FORCE_OPTIMIZEÚwidthÚheightré   Ú	histogramrè   r—   r;   rP   r   ÚgetmodebandsÚ
bit_length)r™   rK   Úoptimiserï   r=   ÚcountÚnum_palette_colorsÚcurrent_palette_sizes           r(   rë   rë   �  s  € ð 
‡w�w�*Ô§¨$¯(©(°:×*>Ò*>ô #×4 b§g¡g°¡nˆÞ�r—x‘x "§)¡)Ñ+¨iÓ7à"$ÐÜ% b§l¡l£nÖ5‘�ß�5Ø'×.Ñ.¨qÖ1ñ 6ö œ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                ó¦   • U (       d  g[        U 5      S:  a  g[        R                  " [        R                  " [        U 5      S-  S5      5      S-
  $ )Nr   r~   r   r9   r   )r;   ÚmathÚceilÚlog)r
  s    r(   rH  rH  ½  sA   € æØÜ	ˆ]Ó	˜aÓ	Øä�yŠyœŸš¤# mÓ"4¸Ñ"9¸1Ó=Ó>ÀÑBÐBr'   c                óx   • [        U 5      nSU-  [        U 5      S-  -
  nUS:”  a  U [        S5      S-  U-  -  n U $ )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   r9   r   )rH  r;   r   )r
  rK  Úactual_target_size_diffs      r(   rI  rI  Ç  sR   € ô -¨]Ó;Ðð  !Ð$4Ñ4¼¸MÓ8JÈaÑ8OÑOÐØ Ó"Øœ˜A› ™Ð%<Ñ<Ñ<ˆØÐr'   c                óþ   ^• U R                   (       d  g[        U R                   R                   5      mU R                   R                  S:X  a0  SR                  U4S j[	        [        T5      S-  5       5       5      mT$ )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�   c              3  ó@   >#   • U  H  nTUS -  US -  S-    v •  M     g7f)r   r9   Nr   )râ   r=   rP   s     €r(   rã   Ú%_get_palette_bytes.<locals>.<genexpr>å  s&   øé € ÐXÒ?W¸!˜7 1 q¡5¨1¨q©5°1©9Õ5Ò?Wùs   ƒr9   )rP   rÎ   rŸ   Újoinr:   r;   )r™   rP   s    @r(   rG  rG  Ù  s[   ø€ ð �:�:Øä�B—J‘J×&Ñ&Ó'€GØ	‡z�z‡�˜&Ó Ø—(‘(ÔX¼uÄSÈÃ\ÐUVÑEVÔ?WÓXÓXˆØ€Nr'   c                óð   • SnU(       aD  [        U[        5      (       a-  U R                  c   e U R                  R                  X5      nU$ UnU$ ! [         a  n[        U5      S;  a  e  S nAU$ S nAff = f)Nr   )z$cannot allocate more than 256 colorsz/cannot add non-opaque RGBA color to RGB palette)rå   rˆ   rP   Úgetcolorr•   rø   )r™   Úinfo_backgroundrH   rm   s       r(   r&  r&  é  sŽ   € ð €JÞÜ�o¤u×-Ñ-ð —:‘:Ñ)Ð)Ð)ð
ØŸZ™Z×0Ñ0°ÓE�
ð Ðð )ˆJØÐøô ó Ü�q“6ð "ó ð óð Ðûðús   ¯A Á
A5ÁA0Á0A5c                óD  • SnU R                   R                  S5      S:X  dK  U(       aF  SU;   d>  UR                  S5      c,  UR                  S5      (       d  UR                  S5      (       a  Sn[        XR                  S5      5      n[        U 5      n[	        U5      nS	U-   [        U R                  S
   5      -   [        U R                  S   5      -   [        US-   5      [        U5      [        S
5      -   [        U5      /nUR                  S5      b_  UR                  S[        S5      -   [        S5      -   S-   [        S5      -   [        S5      -   [        US   5      -   [        S
5      -   5        UR                  S5      (       a•  S[        S5      -   nUS   n[        U[        5      (       a  UR                  5       n[        S
[        U5      S5       H$  n	X‰U	S-    n
U[        [        U
5      5      U
-   -  nM&     U[        S
5      -  nUR                  U5        U$ )z2Return a list of strings representing a GIF headers   87arB   s   89ar…   r|   ru   rq   rH   s   GIFr   r   rF   rs   ry   rG   r{   r9   rw   )rK   r¤   r&  rG  rH  rF  r–   r   rI  rè   rå   rø   Úencoder:   r;   )r™   rK   rB   rH   r
  rK  ÚheaderÚcomment_blockrq   r=   Úsubblocks              r(   rû   rû     s  € ð €GØ	‡w�w‡{�{�9Ó Ó'Þà˜dÓ"Ø�x‰x˜ÓÑ+Ø�x‰x˜
×#Ñ#Ø�x‰x˜	×"Ñ"ð ˆä  §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Ø 1 s¡7Ð+ˆHØœR¤ H£Ó.°Ñ9Ñ9ŠMñ -ð 	œ˜A›ÑˆØ�‰�mÔ$Ø€Mr'   c                óü   •  X1l         [        XUS5        [        R                  " UU [        R                  " SSUR
                  -   S[        UR                     5      /5        U R                  S5        U? g ! U? f = f)Nr   r�   r¹   rö   )	rù   rþ   r   r   r©   r–   rÙ   rŸ   rü   )r2   r	  r8  Úparamss       r(   r.  r.  B  sn   € ð!Ø%Ôô 	˜B¨&°!Ô4ä�ŠØØÜ�_Š_˜U F¨X¯]©]Ñ$:¸A¼wÀxÇ}Á}Ñ?UÓVÐWô	
ð 	�‰�ŒàÑ øˆHÑ ús   ‚A2A7 Á7A;c                óê   • Uc  0 n[        X5      nSU;  a"  SU R                  ;   a  U R                  S   US'   [        XU5      nUR                  U l        UR                  U l        [        X5      nXS4$ )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)

rH   )rë   rK   rô   rP   r™   rû   )r™   rP   rK   rï   Úim_modr‚  s         r(   Ú	getheaderr‰  ]  st   € ð �|Øˆä'¨Ó1Ðà˜4Ó L°B·G±GÓ$;ØŸW™W \Ñ2ˆˆ\Ñä ¨TÓ2€FØ—‘€B„JØ�I‰I€B„EÜ Ó)€FàÐ&Ð&r'   c                ó‚   • SSK Jn   " S SU5      nU R                  5         U" 5       n[        XPX5        UR                  $ )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                  ó"   • \ rS rSr/ rSS jrSrg)Úgetdata.<locals>.Collectori�  c                óN   • U R                   R                  U5        [        U5      $ rÉ   )r6   rè   r;   )r4   r6   s     r(   rü   Ú getdata.<locals>.Collector.write“  s   € Ø�I‰I×Ñ˜TÔ"Ü�t“9Ðr'   r   N)r6   r   r�   rŽ   )r   r   r    r!   r6   rü   r&   r   r'   r(   Ú	Collectorr�  �  s   † Øˆ÷	r'   r�  )Úior‹  r”   r.  r6   )r™   r8  r†  r‹  r�  r2   s         r(   r¼   r¼   {  s8   € õ& ô�Gô ð ‡G�G„Iá	‹€Bä�b˜fÔ-à�7‰7€Nr'   z.gifz	image/gif)r+   rÎ   r�   rÏ   )r™   r  r�   r  )r™   r  rP   ú_Palette | NonerK   r  r�   r  )r™   r  r2   ú	IO[bytes]rP   r’  r�   rÐ   )r  r  r	  r  r�   z4tuple[Image.Image, tuple[int, int, int, int] | None])r™   r  r2   r“  rP   r’  r�   rÏ   )r™   r  r2   r“  r<  ústr | bytesr�   rÐ   )F)
r™   r  r2   r“  r<  r”  r;  rÏ   r�   rÐ   )r™   r  r�   rŽ   )
r2   r“  r™   r  r8  útuple[int, int]rW   rŽ   r�   rÐ   )r™   r  rK   r  r�   zlist[int] | None)r
  rÎ   r�   rŽ   )r
  rÎ   r�   rÎ   )r™   r  r�   rÎ   )r™   r  r  z=int | tuple[int, int, int] | tuple[int, int, int, int] | Noner�   rŽ   )r™   r  rK   r  r�   úlist[bytes])
r2   r“  r	  r  r8  r•  r†  r  r�   rÐ   )NN)r™   r  rP   r’  rK   zdict[str, Any] | Noner�   z$tuple[list[bytes], list[int] | None])r¹   )r™   r  r8  r•  r†  r   r�   r–  )HÚ
__future__r   r#  rt  r^  rV  Úenumr   Ú	functoolsr   Útypingr   r   r   r	   r
   r   Ú r   r   r   r   r   r   r   Ú_binaryr   rL   r   r   rF  r   Ú_typingr   r   r#   r�   r,   r.   rÙ   rß   rÎ   ræ   rç   rŽ   Ú_Paletterô   r  r  r  r9  r=  r   rý   rþ   rg  ri  rë   rH  rI  rG  r&  rû   r.  r‰  r¼   Úregister_openrÑ   Úregister_saveÚregister_save_allÚregister_extensionÚregister_mimer   r'   r(   Ú<module>r¤     s  ðõ4 #ã Û Û 	Û Ý Ý %ß E× E÷÷ ñ õ "Ý Ý !æÝÝô�gô ð #×2Ñ2Ð ô0ô^�9×&Ñ&ô ^ðJ ˜# CÑ
(€ôð4 �˜	 4¨¡9¨l×.GÑ.GÐGÑH€ðDØðDØ-ðDØ5CðDàôDðNØðàðð ðð 
ô	ð8
2Øð
2Ø$/ð
2à9ô
2ô ˆZô  ðyØðyØ"ðyØ-<ðyà	ôyôx+ð
 MRðØðØ"ðØ.9ðØEIðà	õô&ð/Øð/Ø"ð/Ø,;ð/ØDGð/à	ô/ôd-ðd €ô-ô`Côô$ð ØðàRðð 	ôô6;ð|!Øð!àð!ð ð!ð ð	!ð
 
ô!ð8 UYð'Øð'Ø-ð'Ø<Qð'à)õ'ð> 06ð"Øð"Ø,ð"ØADð"àõ"ðP × Ò �L×'Ñ'¨°wÔ ?Ø × Ò �L×'Ñ'¨Ô /Ø × Ò ˜×+Ñ+¨YÔ 7Ø × Ò ˜×,Ñ,¨fÔ 5Ø × Ò �L×'Ñ'¨Õ 5r'   