Files
serveur-d-authentification/venv/lib/python3.10/site-packages/PIL/__pycache__/GifImagePlugin.cpython-310.pyc

341 lines
23 KiB
Plaintext
Raw Normal View History

o
<00>Q<EFBFBD>j<EFBFBD><6A><00>@sZddlmZddlZddlZddlZddlZddlmZddlm Z ddl
m Z m Z m Z ddlmZmZmZmZmZmZmZddlmZdd lmZdd
lmZdd lmZd Zerndd l
mZm Z ddlm!Z!ddl"m#Z#Gdd<11>de<07>Z$e$j%Z&dddd<17>Z'Gdd<19>dej<11>Z(dddd<1C>Z)dedd <20>Z*e+e,Be-e.BejBZ/dfd%d&<26>Z0dgd*d+<2B>Z1dhd/d0<64>Z2Gd1d2<64>d2e <0C>Z3did3d4<64>Z4djd7d8<64>Z5 dkdld:d;<3B>Z6dmd=d><3E>Z7dndBdC<64>Z8djdDdE<64>Z9d Z:dodGdH<64>Z;dpdJdK<64>Z<dqdLdM<64>Z=drdNdO<64>Z>dsdRdS<64>Z?dtdUdV<64>Z@dudXdY<64>ZA dvdwd\d]<5D>ZB ^dxdyd`da<64>ZCe<0F>De(jEe(e'<27>e<0F>Fe(jEe6<65>e<0F>Ge(jEe5<65>e<0F>He(jEdb<64>e<0F>Ie(jEdc<64>dS)z<>)<01> annotationsN)<01>IntEnum)<01>cached_property)<03>Any<6E>
NamedTuple<EFBFBD>cast<73>)<07>Image<67>
ImageChops<EFBFBD> ImageFile<6C> ImageMath<74>ImageOps<70> ImagePalette<74> ImageSequence)<01>i16le)<01>o8)<01>o16le)<01> DeferredErrorF)<02>IO<49>Literal)<01>_imaging)<01>Bufferc@seZdZdZdZdZdZdS)<06>LoadingStrategyz.. versionadded:: 9.1.0rr<00>N)<07>__name__<5F>
__module__<EFBFBD> __qualname__<5F>__doc__<5F>RGB_AFTER_FIRST<53> RGB_AFTER_DIFFERENT_PALETTE_ONLY<4C>
RGB_ALWAYS<EFBFBD>r!r!<00>u/home/sorel/systeme_gestion_cerfig/serveur-d-authentification/venv/lib/python3.10/site-packages/PIL/GifImagePlugin.pyr:s
r<00>prefix<69>bytes<65>return<72>boolcCs
|<00>d<01>S)N)sGIF87asGIF89a)<01>
startswith)r#r!r!r"<00>_acceptIs
r(cs<>eZdZdZdZdZdZd#dd<08>Zd$d d <0A>Zd%dd<10>Z e
d&dd<13><04>Z e d'dd<15><04>Z d(dd<18>Zd)d*dd<1C>Zd%<25>fdd<1E> Zd%dd <20>Zd&d!d"<22>Z<12>ZS)+<2B> GifImageFile<6C>GIFzCompuserve GIFFNr%<00> bytes | NonecCs:|jdusJ<00>|j<00>d<01>}|r|dr|j<00>|d<00>SdS)Nrr)<02>fp<66>read)<02>self<6C>sr!r!r"<00>dataYs
  zGifImageFile.data<74>pr$r&cCs\tdt|<01>d<02>D]#}|d||kr'||dkr'||dks+dSdSqdS)Nr<00>rrTF)<02>range<67>len)r.r1<00>ir!r!r"<00>_is_palette_needed`s4<02><02>zGifImageFile._is_palette_needed<65>NonecCs<>|jdusJ<00>|j<00>d<01>}t|<01>sd}t|<02><01>|dd<03>|jd<t|d<03>t|d<05>f|_|d}|d@d}|d @rY|d
|jd <|j<00>d |><00>}|<00>|<05>rYt<08> d |<05>}||_
|_ |j|_ |j<00> <0A>|_d|_|<00>d<0E>dS)N<> znot a GIF file<6C><00>version<6F><00>
<00>r<00><><00> <00>
backgroundr2<00>RGBr)r,r-r(<00> SyntaxError<6F>info<66>i16<31>_sizer6r<00>raw<61>global_palette<74>palette<74>_fp<66>tell<6C>_GifImageFile__rewind<6E> _n_frames<65>_seek)r.r/<00>msg<73>flags<67>bitsr1rHr!r!r"<00>_openfs&  
   zGifImageFile._open<65>intcCs\|jdur+|<00><01>}z |<00>|<00><01>dd<03>q ty%|<00><01>d|_Ynw|<00>|<01>|jS)NTrF<>rLrJrM<00>EOFError<6F>seek)r.<00>currentr!r!r"<00>n_frames<65>s
<02> <02>
zGifImageFile.n_framescCs^|jdur
|jdkS|<00><01>}|rdSz
|<00>dd<03>d}Wn ty'd}Ynw|<00>|<01>|S)NrTFrS)r.rV<00> is_animatedr!r!r"rX<00>s

  <02>
zGifImageFile.is_animated<65>framec
Cs<>|<00>|<01>sdS||jkrd|_|<00>d<01>|j}zt|jd|d<00>D]}|<00>|<03>q"WdStyD}z |<00>|<02>d}t|<05>|<04>d}~ww)Nrr<00>no more images in GIF file)<07> _seek_check<63>_GifImageFile__frame<6D>_imrMr3rTrU)r.rY<00>
last_frame<EFBFBD>f<>erNr!r!r"rU<00>s


 <06>

<08><02>zGifImageFile.seekT<6B> update_imagecs2t<00>jt<02>r
<EFBFBD>jj<03>|dkr+d<01>_d<00>_d<02>_<06>j<01><07>j<08>d<01>_ d<03>j
vr*<2A>j
d=n <09>j r4|r4<72><00> <0C>|<01>jdkrDd|<01><00>}t |<03><01><01>j<01>_<0E>jr^<5E>j<0E><07>j<04><00><00><0F>r[ <00><00><0F>sVd<01>_<04>j<0E>d<04>}|rj|dkrpd}t|<03><01>d}i}d}d}d} |s<><73>j<0E>d<04>}|r<>|dkr<><72>nB|d k<02>r:<3A>j<0E>d<04>}<04><00><0F>}
|dd
kr<>|
dur<>|
d} | d@r<>|
d }t|
d<04>d |d <d| @} | d?} | r<>| <0C>_ ng|ddkr<>d} |
r<EFBFBD>| |
7} <0A><00><0F>}
|
s<EFBFBD>d|vr<>|dd| 7<n| |d<d}qz|ddk<02>r.|dk<02>r.|
du<01>r.|
<EFBFBD>j<0E><13>f|d<|
<EFBFBD>d<15><01>r.<2E><00><0F>}
|
<EFBFBD>r.t|
<EFBFBD>d k<05>r.|
ddk<02>r.t|
d<04><02>j
d<<00><00><0F><00>r9 <00><00><0F><00>s3n<33>|dk<02>rʈj<0E>d<18>}t|d<01>t|d<0F>}}|t|d<19>|t|d<1A>}}|<10>jdk<04>so|<11>jdk<04>r<>|<02>r<>t|<10>jd<00>t|<11>jd<00>f<02>_t<19><1A>j<18>||||f} |d} | d@dk}| d@<00>r<>| d@d}<12>j<0E>d |><00>}<13><00>|<13><01>r<>t<1C>d|<13>}nd }<05>j<0E>d<04>d}<12>j<0E><13><00>_nd}q{|du<00>r<>d!}t|<03><01>|<01>_|<02>s<>dSg<00>_ <0B>j<05>r<><72>j<1E><1F>j<05>j <20>|du<01>r<>|n<02>j!<21>_"|<07>_#|dk<02>r;<3B>j"<22>rt$t%j&k<02>r|du<01>rd"nd<1F>_'nd#<23>_'nd$<24>_'|<05>r&|<05>_(nS<6E>j!<21>r7dd%l)m)}|<14>j!<21><01>_(nBd<00>_(n><3E>j*d#k<02>ryt$t%j+k<03>sJ|<05>ryd&<26>j
v<00>rl<72>j<1E>,<2C>j
d&d<01><00>j<1E>-d"tj.j/<2F><02>_d"<22>_'<27>j
d&=n d<1F>_'<27>j<1E>-dtj.j/<2F><02>_d2<64>fd+d,<2C> }d<00>_| <09>_ <20>j <20>r5<72>j dk<05>r5z<35><7A>j dk<02>r<><72>j \}}}}||||f}t<19>|<16>d#}<17>j
<EFBFBD>0d&|<07>}|du<01>rȈj*d-v<00>r<>d"}||<18>d.}n<13>j
<EFBFBD>0d/d<01>}<18>j*d-v<00>r<>d}||<18>}tj1<6A>2|||<18><03>_nD<6E>j3du<01>r<><72><00>4<EFBFBD>j<1E>j <20><02>_n4|du<01>r)<29>j \}}}}||||f}t<19>|<16>d#}|}<18>j*d-v<00>r d"}||<07>d.}tj1<6A>2|||<18><03>_Wn
t5<74>y4Ynw|du<01>rld}|du<01>rZ|dk<02>rRt$t%j&k<03>rQ|<07>j
d&<n<08>j*d-v<01>rZ|}t6<74>7d0||||f<04>j|||f<03>g<01>_ |<06>0d<03><01>ry|d<00>j
d<d1D]}||v<00>r<>||<00>j
|<<00>q{|<1A>j
v<00>r<><72>j
|=<00>q{dS)3Nr<00><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>commentrzcannot seek to frame <20>;rZT<>!<21><>r2r<<00>duration<6F>r<00><><00><00>
<EFBFBD><EFBFBD><00> extension<6F> NETSCAPE2.0<EFBFBD>loop<6F>,<2C> <00>r9r;<00>@r>r=rAFzimage not found in GIF frame<6D>RGBA<42>P<>L)<01>copy<70> transparency<63>colorrRr%<00>tuple[int, int, int]cs\<00>jr)|ddt<01>jj<02>krd}tttttft<04>jj|d|dd<00><00><01>S|||fS)Nr2r)<06>_frame_paletter4rHr<00>tuplerR)ry<00>r.r!r"<00>_rgbas <04>
z GifImageFile._seek.<locals>._rgb<67>rArt)rr@<00>gif)rgrm)ryrRr%rz)8<>
isinstancerIr<00>ex<65>_GifImageFile__offset<65>disposer\rUrK<00>disposal_methodrC<00>tile<6C>load<61>
ValueErrorr,r0r-rTrDrJr'r4<00>size<7A>maxrEr <00>_decompression_bomb_checkr6rrF<00>im<69>paste<74>dispose_extentrGr{<00>_frame_transparency<63>LOADING_STRATEGYrr <00>_moderHrw<00>moder<00>putpalettealpha<68>convert<72>Dither<65>FLOYDSTEINBERG<52>get<65>core<72>fillr]<00>_crop<6F>AttributeErrorr <00>_Tile)r.rYrarNr/rHrC<00>frame_transparency<63> interlace<63>frame_dispose_extent<6E>blockrO<00> dispose_bitsrc<00>x0<78>y0<79>x1<78>y1rPr1rwr~<00> dispose_size<7A> dispose_moderyrx<00>kr!r}r"rM<00>s| 
<02>

<08>    
 <02> <04>" "

<EFBFBD><02>
 &"   
   <02>
[
    <04> 
  

  <02>  

  <06><04><02>


 
<02> 
<02><06> 
 <04><04>zGifImageFile._seekcs|jrdnd}d|_|jdkr |jdurtj<05>||j|j<03>|_n*|j dvrJ|j|_|jrGtj<05>d|j|jp6d<03>|_|jj
dg|j<00> <0B><00>R<00>nd|_ |js<>|j dur<>|j|jjkr<>tj<05>|jj |j<07>}|jrr|j
dg|j<00> <0B><00>R<00>|<02> |jd|jj<00>||_||_d|_t<0F><00><10>dS)NrurvrrrA<00>rr)r{<00>_prev_imr\r<>r r<>r<>r<>r<>r<><00>
putpalette<EFBFBD>getdatar]r<>r<><00>super<65> load_prepare)r.<00> temp_mode<64> expanded_im<69><01> __class__r!r"r<><00>s.


<06><02>
zGifImageFile.load_preparecCs<>|jdkr0|jdkr.ttjkr.|jdur |j<06>|jd<01>d|_nd|_|j<06> |jt
j j <0C>|_dS|j s5dS|j|j jkrv|jdurJt
j<0F>d|j<0E>}nt
j<0F>d|j<0E>}|<01>dd|j<06><12><00>|<01> d<04>}|<01>|j d|j j<00>||_ |j dusvJ<00>|jdur<>|jdkr<>|j<06>d|j<05>}n|j<06>|jd<01>|j<06> d<03>}n|j<06> d<04>}|jdus<>J<00>|<00>||j<15>}|j |_|jj|_|jdvr<>|j<06>||j|<02>dS|j<06>||j<15>dS) NrrurtrAr<>rv<00>LA)r<>rt)r\r<>r<>rr r<>r<>r<>r<>r<>r r<>r<>r<>r<>r<>r<>r<><00>
getpaletter<EFBFBD><00>convert_transparentr<74>r<>)r.r<><00>frame_imr!r!r"<00>load_end<6E>s@





 

zGifImageFile.load_endcCs|jS<00>N)r\r}r!r!r"rJ<00>szGifImageFile.tell)r%r+)r1r$r%r&)r%r7)r%rR)r%r&)rYrRr%r7)T)rYrRrar&r%r7)rrr<00>format<61>format_description<6F>!_close_exclusive_fp_after_loadingrGr0r6rQ<00>propertyrWrrXrUrMr<>r<>rJ<00> __classcell__r!r!r<>r"r)Rs&


  
 
*r)rvru)<03>1rvrur<><00> Image.ImagecCs<>|jtvr |<00><02>|St<03>|j<00>dkrD|jdtjjd<03>}|jdus#J<00>|jjdkrB|jj D]}|ddkrA|jj ||j
d<|Sq-|S|<00>d <09>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
rAru<00>rHNrtr2rrxrv) r<><00>RAWMODEr<45>r <00> getmodebaser<65><00>Palette<74>ADAPTIVErH<00>colorsrC)r<><00>rgbar!r!r"<00>_normalize_modes
   <02>
r<>rH<00>_Palette | NonerC<00>dict[str, Any]c Cs<>d}|rt|tttf<03>rt|dd<02><00>}t|tj<04>rt|j<05>}|jdkr6|s5|<00>d<01>}|dus1J<00>t|<04>}n|sCtdd<05>td<02>D<00><01>}tjd|d<07>|_|dusQJ<00>|r<>g}|jdus\J<00>tdt |<03>d <09>D]}t
|||d <00><00>}|jj <0B> |<07>}||vr}d}|<05> |<08>qdt|<05>D]\}}|dur<>tt |<05><01>D] } | |vr<>| ||<nq<>q<EFBFBD>g}
|D] }|dus<>J<00>|
<EFBFBD> |<08>q<>|<00>|
<EFBFBD>}n/t||<02>} | dur<>|<00>| |<03>}d
|vr<>z | <0B>|d
<00>|d
<W|Sty<>|d
=Y|Sw|S|jdus<>J<00>||j_|S) 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
Nirucss<00>|]}|dVqdS)r2Nr!<00><02>.0r5r!r!r"<00> <genexpr>>s<02>z%_normalize_palette.<locals>.<genexpr>rAr<>rr2rx)r<>r$<00> bytearray<61>listrrHr<>r<>r3r4r|r<>r<><00>append<6E> enumerate<74> remap_palette<74> _get_optimize<7A>indexr<78>) r<>rHrC<00>source_palette<74>
im_palette<EFBFBD>used_palette_colorsr5<00> source_colorr<72><00>j<>dest_map<61>optimized_palette_colorsr!r!r"<00>_normalize_palette!sn 


 <02>  <02><02>   
 
<EFBFBD> <0C><02>r<>r,<00> IO[bytes]r7c Cs<>t|<00>}|j<01><02>D]\}}t|t<04>r|j<05>||<05>q t|||j<05>}t||j<05>D]}|<01> |<06>q'd}t
|<00>r9|dB}t ||d|<07>dt
|<00>f|_ t <0A>||t <0A>dd|jdt|j<00>g<01>|<01> d<06>dS)Nrrsr<>r;r<><00>)r<>rC<00>itemsr<73><00>str<74> encoderinfo<66>
setdefaultr<EFBFBD><00>_get_global_header<65>write<74> get_interlace<63>_write_local_header<65> encoderconfigr <00>_saver<65>r<>r<>r<>)r<>r,rH<00>im_outr<74><00>vr/rOr!r!r"<00>_write_single_framehs"
<02>  <04>r<><00>base_im<69>im_frame<6D>4tuple[Image.Image, tuple[int, int, int, int] | None]cCsRdd<02>||fD<00>}|d|dkr|<01>d<05>}|<00>d<05>}t<01>||<00>}||jdd<07>fS)NcSs"g|] }|jr t|jj<00>nd<00>qS)rj)rHr$)r<>r<>r!r!r"<00>
<listcomp><3E>s<06>z_getbbox.<locals>.<listcomp>rrrtF)<01>
alpha_only)r<>r
<00>subtract_modulo<6C>getbbox)r<>r<><00> palette_bytes<65>deltar!r!r"<00>_getbbox<6F>s<06>

 r<>c@s&eZdZUded<ded<ded<dS)<08>_Framer<65>r<>z tuple[int, int, int, int] | None<6E>bboxr<78>r<>N)rrr<00>__annotations__r!r!r!r"r<><00>s
 r<>c
Cs|j<00>d<01>}|j<00>d|j<02>d<02><01>}g}d}d}d}t<03>|g|j<00>dg<00><02>D<00>]<5D>} t<05>| <09>D<00>]w}
t|
<EFBFBD><08><00>}
|dkrU|
j<02> <09>D]\} } | dkrHq?t
| t <0B>rT|j<00> | | <0C>q?|j<00><08>} d|
jvrh| <0A> d|
jd<00>t |
|| <0A>}
t
|ttf<02>r|||| d<n|dur<>d|
jvr<>|
jd| d<t
|ttf<02>r<>||| d<|d7}d}|<05>r<>|<06>r<>t||
<EFBFBD>\}}|s<>| <0A>d<01>r<>|djd| d7<q-|dj<00>d<02>dk<02>r|j<00>d|j<02>d<05><01>}|du<01>r |du<00>rt|
|<11>}t<12>d |
j|<12>}|djj}|dus<>J<00>|<08>||j<18>t||
<EFBFBD>d}n<>d
|
j}n<>| <0A>d <0B><01>r<>|
jd k<03>r<>d| v<01>r=|
jdu<01>s(J<00>z
|
j<16>|
<EFBFBD>| d<Wn
t<1A>y<Ynwd| v<00>r<>|
<EFBFBD><08>}t<12>d |j| d<00>}|jd k<02>rk|<0F><1B>\}}}}tjdd<0F>||||d<10>}n|jd k<02>r<>t<12>d|j<14>}|<1A>|<0F><1F><00>|}tjdd<0F>|d<13>}|j |t!<21>"|<19>d<14>nd}|
}|<05>#t$|<0E>p<>|
|| <0A><03>q-q%t%|<05>dk<02>r<>d|jv<00>r<>|djd|jd<dS|D]B}|j}
|j&<26>s<>t'|
|j<00>D]}|<01>(|<1C><00>q<>d
}n|<02>s<>d|jd<|j&d
|
jk<03>r<>|
<EFBFBD>)|j&<26>}
|j&dd<08>}t*||
||j<00><00>q<>dS)Nrg<00>disposalr<00> append_imagesrxrrbrrur<><00>optimizer<65>rtcSs@|d|d|d|d|d|d<00>|d<00>|d<00>dd<08>S) Nr<4E>r<><00>r<>g<>b<>arlr<>r!<00><01>argsr!r!r"<00><lambda><3E>s<02><02><02><04>z(_write_multiple_frames.<locals>.<lambda>)r<>r<>r<>r<>rvcSs|d|ddd<04>S)Nr<4E>r<>rlr<>r!r<>r!r!r"r<00>s<00>r<>)<01>maskFT<46>include_color_table)+r<>r<>rC<00> itertools<6C>chainr<00>Iteratorr<72>rwr<>r<>r<>r<>r<>r<>r|r<><00>_get_backgroundr <00>newr<77>r<>rHr<>r<><00>_new_color_indexr<78><00>splitr <00> lambda_eval<61>putdata<74>get_flattened_datar<61>r <00>invertr<74>r<>r4r<>r<>r<><00>crop<6F>_write_frame_data)r<>r,rHrgr<><00> im_frames<65> previous_im<69> frame_count<6E> background_im<69>
imSequencer<EFBFBD>r<>r<>r<><00>
diff_framer<EFBFBD>r<>ryr@<00> first_paletter<65>r<>r<>r<>r<>r<00>delta_l<5F>
frame_datar/<00>offsetr!r!r"<00>_write_multiple_frames<65>s<>  
<02>

   
 <04>


   


<EFBFBD><02>
 
<08> <06><02><02>^ 
 r<00>filename<6D> str | bytescCst|||dd<02>dS)NT)<01>save_all)r<>)r<>r,rr!r!r"<00> _save_allsr rcCs~d|jvs
d|jvr|j<00>d|j<01>d<01><01>}n d}|j<00>dd<03>|r't|||<04>s-t|||<04>|<01>d<04>t|d<05>r=|<01><08>dSdS)NrHr<>Trd<00>flush) r<>rCr<>r<>rr<>r<><00>hasattrr!)r<>r,rrrHr!r!r"r<>s 

 <04>r<EFBFBD>rRcCs$|j<00>dd<02>}t|j<03>dkrd}|S)Nr<4E>r<00>r)r<>r<><00>minr<6E>)r<>r<>r!r!r"r<>0sr<>r<00>tuple[int, int]rOc Csjz|jd}Wn tyd}Ynwd|jvr"t|jdd<00>}nd}t|j<00>dd<04><02>}|dus7|dks7|rd|dur=dnd}||d>O}|<00>dtd <09>td
<EFBFBD>t|<07>t|<05>t|p\d<04>td<04><00>|j<00>d <0B>}|r~t|<01>} t| <09>}
|
r~|d B}||
B}|<00>d t|d<00>t|d<00>t|j d<00>t|j d<00>t|<03><00>|r<>|
r<EFBFBD>|<00>t
| <09><01>|<00>td<0E><01>dS)Nrxrgr<rr<>rrrerfrrrr>rpr;) r<><00>KeyErrorrRr<>r<>r<00>o16<31>_get_palette_bytes<65>_get_color_table_sizer<65><00>_get_header_palette) r,r<>rrOrxrgr<><00> packed_flagrr<><00>color_table_sizer!r!r"r<>:sd <02>
 <02><02><02><02>
<02><02><04>

<02>
<02> <02> <02><02><04>r<>c
Cs"|<00><00>}z{t|d<01><02>Z}|jdkrtjd|g|tjd<04>nAdd|g}dg}tj|tjtjd<04>}tj||j|tjd<07>}|jdus@J<00>|j<08> <09>|<07>
<EFBFBD>} | rQt<03> | |<05><02>|<08>
<EFBFBD>} | r]t<03> | |<06><02>Wd<00>n1sgwYWzt <0C> |<03>WdStyYdSwzt <0C> |<03>Wwty<>Yww)N<>wbrA<00>ppmtogif)<02>stdout<75>stderr<72>ppmquant<6E>256)<03>stdinr/r0)<0F>_dump<6D>openr<6E><00>
subprocess<EFBFBD>
check_call<EFBFBD>DEVNULL<4C>Popen<65>PIPEr/<00>close<73>wait<69>CalledProcessError<6F>os<6F>unlink<6E>OSError)
r<EFBFBD>r,r<00>tempfiler_<00> quant_cmd<6D> togif_cmd<6D>
quant_proc<EFBFBD>
togif_proc<EFBFBD>retcoder!r!r"<00> _save_netpbmlsN 
 <08>

<06><06>
  <02><1C><02>  <02><02> <02>rG<00>list[int] | NonecCs<>|jdvrq|rq|<01>d<02>rq|jdkrq|jdkrqtp|jdk}|s'|j|jdkrqg}t|<00><06><00>D] \}}|r:|<03>|<04>q/|sEt|<03>t |<03>krG|S|j
dusNJ<00>t |j
j
<EFBFBD>t <0B> |j
j<00>}d|d<00> <0A>>}t |<03>|dkrq|dkrq|SdS) 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
)rurvr<>rrviNrr)r<>r<><00>width<74>height<68>_FORCE_OPTIMIZEr<45><00> histogramr<6D>r<>r4rHr <00> getmodebands<64>
bit_length)r<>rC<00>optimiser<65>r5<00>count<6E>num_palette_colors<72>current_palette_sizer!r!r"r<><00>s2
<02><02>

 
<02><06>r<>r<>cCs6|sdSt|<00>dkr dSt<01>t<01>t|<00>dd<05><02>dS)Nrrqrr2r)r4<00>math<74>ceil<69>log)r<>r!r!r"r)<00>s
 r)cCs<t|<00>}d|>t|<00>d}|dkr|td<03>d|7}|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
rr2r)r)r4r)r<>r,<00>actual_target_size_diffr!r!r"r*<00>s
r*csJ|jsdSt|jj<00><01>|jjdkr#d<01><03>fdd<04>tt<05><00>d<00>D<00><01><01><00>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
rjrtc3s(<00>|]}<01>|d|dd<00>VqdS)rrr2Nr!r<>r<>r!r"r<><00>s<02>&z%_get_palette_bytes.<locals>.<genexpr>r2)rHr$r<><00>joinr3r4rr!r<>r"r(<00>s   $r(<00>info_background<6E>=int | tuple[int, int, int] | tuple[int, int, int, int] | Nonec
Csrd}|r7t|t<01>r5|jdusJ<00>z
|j<02>||<00>}W|Sty4}zt|<03>dvr)<29>WYd}~|Sd}~ww|}|S)Nr)z$cannot allocate more than 256 colorsz/cannot add non-opaque RGBA color to RGB palette)r<>r|rH<00>getcolorr<72>r<>)r<>rXr@r`r!r!r"rs 
 <0E> 
<EFBFBD>
<08><02>
r<00> list[bytes]c Cs~d}|j<00>d<02>dks!|r#d|vs!|<01>d<05>dus!|<01>d<07>s!|<01>d<08>r#d}t||<01>d <09><01>}t|<00>}t|<04>}d
|t|jd <00>t|jd <00>t|d <00>t|<03>td <0B>t|<04>g}|<01>d<05>dur}|<06> dtd<0F>td<10>dtd<12>td <0C>t|d<00>td <0B><00>|<01>d<08>r<>dtd<13>}|d}t
|t <0B>r<>|<08> <0C>}t d t|<08>d<0F>D]} || | d<00>}
|tt|
<EFBFBD><01>|
7}q<>|td <0B>7}|<06> |<07>|S)z2Return a list of strings representing a GIF headers87ar:s89arxroNrgrcr@sGIFrrr>rerlr?rnr2ri)rCr<>rr(r)r'r<>rr*r<>r<>r<><00>encoder3r4) r<>rCr:r@r<>r,<00>header<65> comment_blockrcr5<00>subblockr!r!r"r<>sl<02><02><02><02> <02> <02>
<04> <02><02><02><02><02>
<02><02><04>

 
r<><00>paramsc CsXz(||_t|||d<01>t<02>||t<02>dd|jdt|j<00>g<01>|<00>d<04>W|`dS|`w)Nrr<>r<>r<>) r<>r<>r r<>r<>r<>r<>r<>r<>)r,r<>rr`r!r!r"r\s<04> r<00>dict[str, Any] | None<6E>$tuple[list[bytes], list[int] | None]cCsd|duri}t||<02>}d|vrd|jvr|jd|d<t|||<02>}|j|_|j|_t||<02>}||fS)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)
Nr@)r<>rCr<>rHr<>r<>)r<>rHrCr<><00>im_modr]r!r!r"<00> getheaderws
 
rdr<>rcKs>ddlm}Gdd<04>d|<03>}|<00><02>|<04>}t||||<02>|jS)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)<01>BytesIOc@seZdZgZddd<06>ZdS) zgetdata.<locals>.Collectorr0rr%rRcSs|j<00>|<01>t|<01>Sr<>)r0r<>r4)r.r0r!r!r"r<><00>s z getdata.<locals>.Collector.writeN)r0rr%rR)rrrr0r<>r!r!r!r"<00> Collector<6F>srf)<05>iorer<>rr0)r<>rr`rerfr,r!r!r"r<><00>s r<>z.gifz image/gif)r#r$r%r&)r<>r<>r%r<>)r<>r<>rHr<>rCr<>r%r<>)r<>r<>r,r<>rHr<>r%r7)r<>r<>r<>r<>r%r<>)r<>r<>r,r<>rHr<>r%r&)r<>r<>r,r<>rrr%r7)F)
r<EFBFBD>r<>r,r<>rrrr&r%r7)r<>r<>r%rR)
r,r<>r<>r<>rr%rOrRr%r7)r<>r<>rCr<>r%rH)r<>r$r%rR)r<>r$r%r$)r<>r<>r%r$)r<>r<>rXrYr%rR)r<>r<>rCr<>r%r[)
r,r<>r<>r<>rr%r`r<>r%r7)NN)r<>r<>rHr<>rCrar%rb)r<>)r<>r<>rr%r`rr%r[)J<>
__future__rrrSr>r6<00>enumr<00> functoolsr<00>typingrrr<00>r r
r r r rr<00>_binaryrrDrrr'<00>_utilr<00> TYPE_CHECKINGrrr<00>_typingrrrr<>r(r)r<>r<>r$r<>r<>rR<00>_Paletter<65>r<>r<>r<>rr r<>r<>r<>rGrKr<>r)r*r(rr<>rrdr<><00> register_openr<6E><00> register_save<76>register_save_all<6C>register_extension<6F> register_mimer!r!r!r"<00><module>sr   $     
  2


G


 <0C>

22

6



> <0C> <0C>(