Ë
    o]jÛ�  ã                   óÈ  — d 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 ddl	m
Z
 ddlmZ ddlZddlmZmZmZ dd	lmZ d
dlmZ d
dlmZ d
dlmZ d
dlmZ d
dlmZmZ de_         G d„ de «      Z! G d„ d«      Z" G d„ dejF                  «      Z$ G d„ dejF                  «      Z% G d„ d«      Z&	 	 d&d„Z'd„ Z(d„ Z)d„ Z*d„ Z+ G d „ d!«      Z, G d"„ d#e,«      Z- G d$„ d%e,«      Z.y)'z+Fetch and decode images in various formats.é    N)Úmd5)ÚBytesIO)Úcycle)ÚPath)ÚElementTree)ÚImageÚ	ImageFileÚImageOps)Úparse_coloré   )ÚDEFAULT_OPTIONS)Ú
percentage)ÚLOGGER)ÚSVG)ÚURLFetchingErrorÚfetchTc                   ó   — e Zd ZdZy)ÚImageLoadingErrorzpAn error occured when loading an image.

    The image data is probably corrupted or in an invalid format.

    N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© ó    úH/var/www/zogu/zoguvenv/lib/python3.12/site-packages/weasyprint/images.pyr   r      s   „ òr   r   c                   óF   — e Zd Zdddefd„Zd„ Zd„ Zd	d„Zd„ Ze	d„ «       Z
y)
ÚRasterImageNÚnonec                 óD  — |}t        ||«      }||ur|j                  |_        d x}}|| _        |€i n|| _        |d   x| _        }	|d   | _        d|j                  v r|j                  d«      }n|j                  dv r|j                  d«      }|j                  | _        |j                  | _	        |j                  | _
        | j                  dk7  r| j                  | j                  z  nt        j                  | _        |d   x| _        }
t        |d	i «      j!                  d
«      }| j                  dk(  xr |d u| _        |j                  dv rgd| _        |�|
s|	�®t%        j&                  «       }d|
dœ}| j                  �| j                  |d<    |j(                  |fi |¤Ž |j+                  «       }d }nTd| _        |�|
s|j                  dk7  r:t%        j&                  «       }|j)                  |d|
¬«       |j+                  «       }d }| j-                  ||«      | _        y )NÚjpeg_qualityÚdpiÚtransparencyÚRGBA)Ú1ÚPÚIÚRGBr   Úoptimize_imagesÚappÚAPP14ÚCMYK)ÚJPEGÚMPOr,   ©ÚformatÚoptimizeÚqualityÚPNG)Úrotate_pillow_imager/   ÚidÚ_cacheÚ_jpeg_qualityÚ_dpiÚinfoÚconvertÚmodeÚwidthÚheightÚmathÚinfÚratior0   ÚgetattrÚgetÚinvert_colorsÚior   ÚsaveÚgetvalueÚcache_image_dataÚ
image_data)ÚselfÚpillow_imageÚimage_idrG   ÚfilenameÚcacheÚorientationÚoptionsÚoriginal_pillow_imager    r0   Úapp14Ú
image_files                r   Ú__init__zRasterImage.__init__#   s  € ð !-ÐÜ*¨<¸ÓEˆØ ¨Ñ4à"7×">Ñ">ˆLÔà$(Ð(ˆJ˜àˆŒØ!˜M‘b¨uˆŒØ,3°NÑ,CÐCˆÔ˜\Ø˜E‘NˆŒ	à˜\×.Ñ.Ñ.Ø'×/Ñ/°Ó7‰LØ×Ñ /Ñ1Ø'×/Ñ/°Ó6ˆLà ×%Ñ%ˆŒ	Ø!×'Ñ'ˆŒ
Ø"×)Ñ)ˆŒØ37·;±;À!Ò3C�d—j‘j 4§;¡;Ò.ÌÏÉˆŒ
Ø#*Ð+<Ñ#=Ð=ˆŒ˜ô
 Ð-¨u°bÓ9×=Ñ=¸gÓFˆØ!ŸY™Y¨&Ñ0ÒF°UÀ$Ð5FˆÔà×Ñ /Ñ1Ø ˆDŒKØÐ!¡X°Ð1IÜŸZ™Z›\�
Ø%+¸ÑB�Ø×%Ñ%Ð1Ø)-×);Ñ);�G˜IÑ&Ø!�×!Ñ! *Ñ8°Ò8Ø'×0Ñ0Ó2�
Ø‘àˆDŒKØÐ!¡X°×1DÑ1DÈÒ1MÜŸZ™Z›\�
Ø×!Ñ! *°UÀXÐ!ÔNØ'×0Ñ0Ó2�
Ø�Ø×/Ñ/°
¸HÓEˆ�r   c                 óT   — | j                   |z  | j                  |z  | j                  fS ©N)r;   r<   r?   )rH   Ú
resolutionÚ	font_sizes      r   Úget_intrinsic_sizezRasterImage.get_intrinsic_sizeW   s%   € Ø�z‰z˜JÑ&¨¯©°jÑ(@À$Ç*Á*ÐLÐLr   c                 óø  — | j                   dk  s| j                  dk  ry |d   }|dk(  }d}| j                  rˆd}t        ||j                  d   d   z  |z  «      }	t        ||j                  d   d   z  |z  «      }
t        | j                   |	z  | j                  |
z  «      }|| j                  kD  r| j                  |z  }|j                  | ||«      }|j                  |dd| d|«       |j                  |«       y )Nr   Úimage_renderingÚautor   gÇqÇqŒ?)	r;   r<   r7   ÚabsÚctmÚmaxÚ	add_imageÚ	transformÚdraw_x_object)rH   ÚstreamÚconcrete_widthÚconcrete_heightÚstylerY   Úinterpolater?   Úpt_to_inÚwidth_inchesÚheight_inchesr!   Ú
image_names                r   ÚdrawzRasterImage.drawZ   sú   € Ø�:‰:˜Š?˜dŸk™k¨QÒ.ØàÐ 1Ñ2ˆØ%¨Ñ/ˆØˆØ�9Š9Ø!ˆHÜ˜~°·
±
¸1±¸aÑ0@Ñ@À8ÑKÓLˆLÜ °&·*±*¸Q±-ÀÑ2BÑ BÀXÑ MÓNˆMÜ�d—j‘j <Ñ/°·±¸}Ñ1LÓMˆCØ�T—Y‘YŠØŸ	™	 C™�Ø×%Ñ% d¨K¸Ó?ˆ
à×ÑØ˜A˜q ?Ð"2°A°ô	Hà×Ñ˜ZÕ(r   c                 óŽ   — |rt        |«      S | j                  › d|› d| j                  xs d› �}t        | j                  ||«      S )Nú-Ú )ÚLazyLocalImager4   r7   Ú	LazyImager5   )rH   ÚdatarK   ÚslotÚkeys        r   rF   zRasterImage.cache_image_datan   sF   € ÙÜ! (Ó+Ð+à—W‘W�I˜Q˜t˜f A d§i¡i¢o°2Ð%6Ð7ˆCÜ˜TŸ[™[¨#¨tÓ4Ð4r   c                 ó$  — |dk(  r| j                   | j                  }}�nt        j                  t	        j
                  | j                  j                  «      «      }t        dt        | j                   |z  «      «      }t        dt        | j                  |z  «      «      }|j                  ||f«       t	        j
                  «       }|j                  ||j                  | j                  ¬«       |j                   |j                  }}| j                  |j                  «       «      | _        | j                   dv rd}nE| j                   dv rd}n4| j                   dk(  rd}n"t#        j$                  d	| j                   «       d}t'        j(                  d
d|||d|rdnddœ«      }| j                  dk(  rJ| j*                  rt'        j,                  d«      |d<   d|d<   t'        j.                  | j                  g|«      S d|d<   t'        j(                  d|dœ«      |d<   | j                   dv rd|d   d<   | j                   dv ràt        j                  t	        j
                  | j                  j                  «      «      }	|	j1                  d«      }
|	j3                  | j                   d d «      }	| j5                  |	«      }| j5                  |
«      }| j                  |d¬«      }t'        j.                  |gdd
dt'        j(                  d|dœ«      ||dd|rdndd œ	¬!«      |d"<   nK| j5                  t        j                  t	        j
                  | j                  j                  «      «      «      }t'        j.                  | j                  |d#¬«      g|«      S )$Nr   r.   )r'   r#   z
/DeviceRGB)ÚLÚLAz/DeviceGrayr+   z/DeviceCMYKzUnknown image mode: %sz/XObjectz/Imageé   ÚtrueÚfalse)ÚTypeÚSubtypeÚWidthÚHeightÚ
ColorSpaceÚBitsPerComponentÚInterpolater,   )r   r   r   r   r   r   r   r   ÚDecodez
/DCTDecodeÚFilterz/FlateDecodeé   )Ú	PredictorÚColumnsÚDecodeParmsé   ÚColors)r#   ru   ÚAéÿÿÿÿÚstreamalpha)rq   )	r�   ry   rz   r…   r{   r|   r}   r~   r   )ÚextraÚSMaskra   )r;   r<   r   ÚopenrC   r   rG   rp   r]   ÚroundÚ	thumbnailrD   r/   r0   rF   rE   r:   r   ÚwarningÚpydyfÚ
DictionaryrB   ÚArrayÚStreamÚ
getchannelr9   Ú_get_png_data)rH   re   Ú	dpi_ratior;   r<   r�   rQ   Úcolor_spacer‹   rI   ÚalphaÚpng_dataÚ
alpha_datara   s                 r   Úget_x_objectzRasterImage.get_x_objectu   s  € Ø˜Š>Ø ŸJ™J¨¯©�6ŠEäŸ
™
¤2§:¡:¨d¯o©o×.BÑ.BÓ#CÓDˆIÜ˜œ5 §¡¨iÑ!7Ó8Ó9ˆEÜ˜œE $§+¡+°	Ñ"9Ó:Ó;ˆFØ×Ñ ¨ Ô0ÜŸ™›ˆJØ�N‰NØ 9×#3Ñ#3¸d¿m¹mð ô Mà%ŸO™O¨Y×-=Ñ-=�6ˆEØ"×3Ñ3°J×4GÑ4GÓ4IÓJˆDŒOà�9‰9˜Ñ'Ø&‰KØ�Y‰Y˜+Ñ%Ø'‰KØ�Y‰Y˜&Ò Ø'‰Kä�N‰NÐ3°T·Y±YÔ?Ø&ˆKä× Ñ ØØØØØ%Ø !Ù%0™6°gñ"
ó ˆð �;‰;˜&Ò Ø×!Ò!Ü"'§+¡+¨jÓ"9��h‘Ø*ˆE�(‰OÜ—<‘< §¡Ð 1°5Ó9Ð9à(ˆˆh‰Ü$×/Ñ/ð Øñ	1
ó 	 ˆˆmÑð �9‰9˜Ñ'à-.ˆE�-Ñ  Ñ*Ø�9‰9˜Ñ&ä Ÿ:™:¤b§j¡j°·±×1EÑ1EÓ&FÓGˆLØ ×+Ñ+¨CÓ0ˆEØ'×/Ñ/°·	±	¸#¸2°Ó?ˆLØ×)Ñ)¨,Ó7ˆHà×+Ñ+¨EÓ2ˆJØ×*Ñ*¨:¸MÐ*ÓJˆFÜ"Ÿ\™\¨6¨(Ø(Ø"Ø#Ü$×/Ñ/Ø!#Ø$ñ1ó  ð Ø Ø+Ø$%Ù)4™v¸'ñ;ô ˆE�'ŠNð ×)Ñ)Ü—
‘
œ2Ÿ:™: d§o¡o×&:Ñ&:Ó;Ó<ó>ˆHô �|‰|˜T×2Ñ2°8À(Ð2ÓKÐLÈeÓTÐTr   c                 óð  — t        «       }| j                  |d¬«       |j                  d«       g }|j                  d«      }|r£t	        j
                  d|«      \  }|j                  d«      }|dk(  r!|j                  |j                  |«      «       n |j                  |t        j                  «       |j                  dt        j                  «       |j                  d«      }|rŒ£dj                  |«      S )Nr2   )r/   rv   é   z!Is   IDATr   )
r   rD   ÚseekÚreadÚstructÚunpackÚappendrC   ÚSEEK_CURÚjoin)rI   rQ   rš   Úraw_chunk_lengthÚchunk_lengthÚ
chunk_types         r   r–   zRasterImage._get_png_dataÈ   sÊ   € ä“Yˆ
Ø×Ñ˜*¨UÐÔ3ð 	�‰˜ÔàˆØ%Ÿ?™?¨1Ó-Ðáô #ŸM™M¨$Ð0@ÓA‰MˆLØ#Ÿ™¨Ó+ˆJØ˜WÒ$Ø—‘ 
§¡°Ó =Õ>à—‘ ¬b¯k©kÔ:à�O‰O˜AœrŸ{™{Ô+Ø)Ÿ™¨qÓ1Ðò ð �x‰x˜Ó!Ð!r   )NÚsource)r   r   r   r   rR   rW   rj   rF   rœ   Ústaticmethodr–   r   r   r   r   r   "   s?   „ ØDHØ¨¸ó2FòhMò)ó(5òQUðf ñ"ó ñ"r   r   c                   ó.   ‡ — e Zd Zˆ fd„Zed„ «       Zˆ xZS )ro   c                 óH   •— t         ‰| �  «        || _        || _        |||<   y rT   )ÚsuperrR   Ú_keyr5   )rH   rL   rr   rp   Ú	__class__s       €r   rR   zLazyImage.__init__æ   s%   ø€ Ü‰ÑÔØˆŒ	ØˆŒØˆˆcŠ
r   c                 ó4   — | j                   | j                     S rT   )r5   r®   ©rH   s    r   rp   zLazyImage.dataì   s   € à�{‰{˜4Ÿ9™9Ñ%Ð%r   ©r   r   r   rR   Úpropertyrp   Ú__classcell__©r¯   s   @r   ro   ro   å   s   ø„ ôð ñ&ó ô&r   ro   c                   ó.   ‡ — e Zd Zˆ fd„Zed„ «       Zˆ xZS )rn   c                 ó0   •— t         ‰| �  «        || _        y rT   )r­   rR   Ú	_filename)rH   rK   r¯   s     €r   rR   zLazyLocalImage.__init__ò   s   ø€ Ü‰ÑÔØ!ˆ�r   c                 óH   — t        | j                  «      j                  «       S rT   )r   r¸   Ú
read_bytesr±   s    r   rp   zLazyLocalImage.dataö   s   € ä�D—N‘NÓ#×.Ñ.Ó0Ð0r   r²   rµ   s   @r   rn   rn   ñ   s   ø„ ô"ð ñ1ó ô1r   rn   c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)ÚSVGImagec                 ót   — |r|j                   nd }t        ||||«      | _        || _        || _        || _        y rT   )Úfont_configr   Ú_svgÚ	_base_urlÚ_url_fetcherÚ_context)rH   ÚtreeÚbase_urlÚurl_fetcherÚcontextr¾   s         r   rR   zSVGImage.__init__ü   s9   € Ù-4�g×)Ò)¸$ˆÜ˜˜h¨°[ÓAˆŒ	Ø!ˆŒØ'ˆÔØˆ�r   c                 óô   — | j                   j                  |«      \  }}d ||fv rD| j                   j                  «       }|r%|d   r |d   r|d   |d   z  }|r||z  }n|r||z  }nd }n|r|r||z  }nd}|||fS )Né   r†   r   )r¿   rW   Úget_viewbox)rH   Úimage_resolutionrV   r;   r<   Úviewboxr?   s          r   rW   zSVGImage.get_intrinsic_size  s–   € ØŸ	™	×4Ñ4°YÓ?‰ˆˆvØ�E˜6�?Ñ"Ø—i‘i×+Ñ+Ó-ˆGÙ˜7 1š:¨'°!ª*Ø ™
 W¨Q¡ZÑ/�ÙØ" U™]‘FÙØ" U™N‘Eà‘Ù‘vØ˜F‘N‰EàˆEØ�f˜eÐ#Ð#r   c                 ó  — 	 | j                   j                  |||| j                  | j                  «       y # t        $ rA}t        j                  d| j                  «       t        j                  d|¬«       Y d }~y d }~ww xY w)NzFailed to render SVG image %sz Error while rendering SVG image:©Úexc_info)r¿   rj   rÀ   rÂ   ÚBaseExceptionr   ÚerrorÚdebug)rH   ra   rb   rc   Ú_styleÚ	exceptions         r   rj   zSVGImage.draw  se   € ð	QØ�I‰I�N‰NØ˜¨¸¿¹Ø—‘õøô ò 	QÜ�L‰LÐ8¸$¿.¹.ÔIÜ�L‰LÐ;Ài×PÒPûð	Qús   ‚36 ¶	B ¿7A;Á;B N)r   r   r   rR   rW   rj   r   r   r   r¼   r¼   û   s   „ ò ò$ó$Qr   r¼   c           	      ól  — || v r| |   S 	 t        ||«      5 }|j                  «       }|xs |j                  }	ddd«       d}
g }	dk(  r$	 t        j                  «      }t        ||||«      }
|
€c	 t        j                  t        «      «      }t        |j                  «       d¬«      j                  «       }t        |||j                  | ||«      }
|
| |<   |
S # 1 sw Y   Œ¢xY w# t        $ r}|j                  |«       Y d}~Œ—d}~ww xY w# t        $ rR}|	dk(  r
t         |d   ‚	 t        j                  «      }t        ||||«      }
n# t        $ r t         |‚w xY wY d}~Œ�d}~ww xY w# t"        t         f$ r:}t%        j&                  d||«       t%        j(                  d|¬«       d}
Y d}~ŒÜd}~ww xY w)	z(Get an Image instance from an image URI.Nzimage/svg+xmlF)Úusedforsecurityr   zFailed to load image at %r: %szError while loading image:rÍ   )r   r    Úcontent_typer   Ú
fromstringr¼   Ú	Exceptionr£   r   r�   r   r   ÚencodeÚ	hexdigestr   Úpathr   r   r   rÐ   rÑ   )rL   rÅ   rN   ÚurlÚforced_mime_typerÆ   rM   ÚresponseÚ
bytestringÚ	mime_typeÚimageÚsvg_exceptionsrÃ   Úsvg_exceptionrI   rJ   Úraster_exceptionrÓ   s                     r   Úget_image_from_urirå     sÉ  € ð ˆe�|Ø�S‰zÐð'Ü�; Ó$ð 	B¨Ø!Ÿ™›ˆJØ(ÒA¨H×,AÑ,AˆI÷	Bð ˆØˆà˜Ò'ð5Ü"×-Ñ-¨jÓ9�Ü   s¨K¸ÓA�ð ˆ=ð*Ü$Ÿz™z¬'°*Ó*=Ó>�ô ˜sŸz™z›|¸UÔC×MÑMÓO�Ü#Ø  (¨J¸¿¹ÀuØ ó*�ð €Eˆ#�JØ€L÷S	Bð 	Bûô ò 5Ø×%Ñ% m×4Ñ4ûð5ûô ò 
BØ Ò/ä+°ÀÑ1BÐBðBä&×1Ñ1°*Ó=�DÜ$ T¨3°¸WÓE‘EøÜ ò Bä+Ð1AÐAðBúô ûð
Bûô$ Ô/Ð0ò Ü�‰Ð5°s¸IÔFÜ�‰Ð1¸IÕFØ�ûðúsš   ‹E* —!C¸E* Á
#C% Á-E* Á0D ÂAE* ÃC"ÃE* Ã%	D	Ã.DÃ?E* ÄD	Ä	E* Ä	E'ÄE"Ä%#E	ÅE"Å	EÅE"ÅE* Å"E'Å'E* Å*F3Å90F.Æ.F3c                 óN  — | j                   }|dk(  r$d| j                  v r~t        j                  | «      } nh|dk7  rc|\  }}|dkD  r.t	        t
        j                  d|› �«      }| j                  |«      } |r)| j                  t
        j                  j                  «      } || _         | S )z{Return a copy of a Pillow image with modified orientation.

    If orientation is not changed, return the same image.

    ú
from-imageÚexifr   r   ÚROTATE_)	r/   r8   r
   Úexif_transposer@   r   Ú	TransposeÚ	transposeÚFLIP_LEFT_RIGHT)rI   rM   Úimage_formatÚangleÚflipÚrotations         r   r3   r3   R  s¤   € ð  ×&Ñ&€LØ�lÒ"Ø�\×&Ñ&Ñ&Ü#×2Ñ2°<Ó@‰LØ	˜Ò	Ø!‰ˆˆtØ�1Š9ÜœuŸ™°'¸%¸Ð0AÓBˆHØ'×1Ñ1°(Ó;ˆLÙØ'×1Ñ1Ü—‘×/Ñ/ó1ˆLð '€LÔØÐr   c           
      ó  — |D �cg c]  }t        ||| «      ‘Œ }}|D �cg c]  }t        ||| «      | z  ‘Œ }}|d   €d|d<   |d   €| |d<   |d   }t        |«      D ]  \  }}|€Œ	||k  r|||<   Œ|}Œ d}t        |«      D ]9  \  }}|€Œ	||   }	||	z
  ||z
  z  }
t        |dz   |«      D ]  }|	||
z  z   ||<   Œ |}Œ; |D �cg c]0  }|dk  rdn&|dk\  rdnt        dt	        j
                  d|«      «      ‘Œ2 }}||fS c c}w c c}w c c}w )aª  Give color stops positions and hints on the gradient vector.

    ``vector_length`` is the distance between the starting point and ending
    point of the vector gradient.

    ``positions`` is a list of ``None``, or ``Dimension`` in px or %. 0 is the
    starting point, 1 the ending point.

    See https://drafts.csswg.org/css-images-3/#color-stop-syntax.

    Return processed color stops, as a list of floats in px.

    r   r‰   r   l        g      à?)r   Ú	enumerateÚrangeÚminr=   Úlog)Úvector_lengthÚ	positionsÚhintsrd   ÚpositionÚhintÚprevious_posÚiÚ
previous_iÚbaseÚ	incrementÚjs               r   Úprocess_color_stopsr  j  s‚  € ð MVÖVÀ”˜H e¨]Õ;ÐV€IÐVØPUÖVÈŒZ˜˜e ]Ó3°mÓCÐV€EÐVð ��|ÐØˆ	�!‰Ø��}ÐØ%ˆ	�"‰ð ˜Q‘<€LÜ  Ó+ò (‰ˆˆ8ØÑØ˜,Ò&Ø+�	˜!’à'‘ð(ð €JÜ  Ó+ò ‰ˆˆ8ØÑØ˜ZÑ(ˆDØ! D™¨Q°©^Ñ<ˆIÜ˜:¨™>¨1Ó-ò 4�Ø# a¨)¡mÑ3�	˜!’ð4à‰Jðð 7<ö=ð /3ð �QŠY‰Ø˜1’9‰ÜˆG”T—X‘X˜c 4Ó(Ó)ñ	*ð=€Eð =ð
 �eÐÐùòE WùÚVùò8=s   …C<ŸDÃ5Dc                 óˆ   — | d   | d   }}||z
  }|dk(  rdgt        | «      z  } n| D �cg c]
  }||z
  |z  ‘Œ } }||| fS c c}w )zòNormalize stop positions between 0 and 1.

    Return ``(first, last, positions)``.

    first: original position of the first position.
    last: original position of the last position.
    positions: list of positions between 0 and 1.

    r   r‰   )Úlen)rø   ÚfirstÚlastÚtotal_lengthÚposs        r   Únormalize_stop_positionsr	  ž  se   € ð ˜A‘, 	¨"¡ˆ4€EØ˜%‘<€LØ�qÒØ�Cœ#˜i›.Ñ(‰	à=FÖG°c�c˜E‘k \Ó1ÐGˆ	ÐGØ�$˜	Ð!Ð!ùò Hs   ©?c                 ó  — t        |«      }|dkD  sJ ‚|t        | «      k(  sJ ‚|d   |d   z
  }|dk(  rt        t        |«      «      }|dz
  }| D ����cg c]  \  }}}}||z  ‘Œ }}}}}| D ����cg c]  \  }}}}||z  ‘Œ }	}}}}| D ����cg c]  \  }}}}||z  ‘Œ }
}}}}| D ����cg c]	  \  }}}}|‘Œ }}}}}dx}x}x}}d|z  }t        |dd d«      D ]K  \  }}|||dz
     z
  |z  }|dz
  |fD ].  }|||   |z  z  }||	|   |z  z  }||
|   |z  z  }|||   |z  z  }Œ0 ŒM |dk(  rt	        d«      S t	        d||z  dz  › d	||z  dz  › d	||z  dz  › d
|› d�	«      S c c}}}}w c c}}}}w c c}}}}w c c}}}}w )zG
    https://drafts.csswg.org/css-images-3/#gradient-average-color
    r   r‰   r   rÈ   NÚtransparentzrgb(éÿ   ú ú/ú))r  Úlistrô   ró   r   )Úcolorsrø   Únb_stopsr  ÚrÚgÚbÚaÚpremul_rÚpremul_gÚpremul_br™   Úresult_rÚresult_gÚresult_bÚresult_aÚtotal_weightrý   rú   Úweightr  s                        r   Úgradient_average_colorr   ±  s
  € ô
 �9‹~€HØ�aŠ<Ðˆ<Ø”s˜6“{Ò"Ð"Ð"Ø˜R‘= 9¨Q¡<Ñ/€LØ�qÒÜœ˜x›Ó)ˆ	Ø !‘|ˆØ(.×/Ñ/™*˜!˜Q  1��A“Ð/€HÓ/Ø(.×/Ñ/™*˜!˜Q  1��A“Ð/€HÓ/Ø(.×/Ñ/™*˜!˜Q  1��A“Ð/€HÓ/Ø!'×(Ñ(‘:�1�a˜˜AŠQÐ(€EÓ(Ø01Ð1€HÐ1ˆxÐ1˜( XØ�|Ñ#€LÜ  ¨1¨2 °Ó2ò *‰ˆˆ8Ø˜Y q¨1¡uÑ-Ñ-°Ñ=ˆØ�a‘%˜�ò 	*ˆAØ˜ ™ fÑ,Ñ,ˆHØ˜ ™ fÑ,Ñ,ˆHØ˜ ™ fÑ,Ñ,ˆHØ˜˜a™ 6Ñ)Ñ)‰Hñ		*ð*ð �1‚}Ü˜=Ó)Ð)äØ�8˜hÑ&¨Ñ,Ð-¨Q¨x¸(Ñ/BÀSÑ/HÐ.IÈØ˜(Ñ" SÑ(Ð)¨¨H¨,°að9ó:ð 	:ùõ# 0ùÝ/ùÝ/ùÝ(s   ÁE!
Á0E)
ÂE1
Â*E9
c                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)ÚGradientc                 ó„   — |sJ ‚t        d„ |D «       «      | _        t        d„ |D «       «      | _        || _        || _        y )Nc              3   ó&   K  — | ]	  \  }}|–— Œ y ­wrT   r   )Ú.0ÚcolorÚ_s      r   ú	<genexpr>z$Gradient.__init__.<locals>.<genexpr>×  s   è ø€ Ò>¡h e¨QœEÑ>ùó   ‚c              3   ó&   K  — | ]	  \  }}|–— Œ y ­wrT   r   )r%  r'  rú   s      r   r(  z$Gradient.__init__.<locals>.<genexpr>Ù  s   è ø€ Ò#L±°°H¤HÑ#Lùr)  )Útupler  Ústop_positionsÚcolor_hintsÚ	repeating)rH   Úcolor_stopsr.  r-  s       r   rR   zGradient.__init__Ô  s>   € ÙÐˆ{äÑ>°+Ô>Ó>ˆŒä#Ñ#LÀÔ#LÓLˆÔà&ˆÔà"ˆ�r   c                  ó   — y)N)NNNr   )rH   rÊ   rV   s      r   rW   zGradient.get_intrinsic_sizeß  s   € Ør   c                 óX  ‡— | j                  |||«      \  }}}}}	}
|dk(  r9‰j                  dd||«       ‰j                  |	d   «       ‰j                  «        y |	D �cg c]  }|d   ‘Œ	 }}t	        t        |«      dz
  «      D �cg c]  }||   ||dz      |
|   g‘Œ }}t	        t        |	«      dz
  «      D �cg c]7  }|	|   j                  d«      d d |	|dz      j                  d«      d d |
|   g‘Œ9 }}t        |«      D ]D  \  }}|dk(  sŒ|dkD  r||dz
     d   ||dz
     d<   |t        |	«      dz
  k  sŒ7||   d   ||   d<   ŒF t        |«      D ]#  \  }\  }}}d||fvsŒ||fdk7  sŒ||z  ||   d<   Œ% |dk(  rdnd}|d   |d	   f}| j                   }t        |	«      dz
  d
z  }|dd	 }ˆfd„|D «       }‰j                  ||||«      }‰j                  |||||«      }‰j                  |¬«       t        d„ |D «       «      rz‰j                  dd||«      }|dk(  rdnd}ˆfd„|D «       }‰j                  ||||«      }|j                  |||||d«      }|j                  |¬«       d|j                  › d�g|_        ‰j!                  |j                  «       y c c}w c c}w c c}w )NÚsolidr   r†   r   Úsrgb)r   r   rÈ   Úlinearr‰   ©r   r   c              3   óN   •K  — | ]  \  }}}‰j                  d |||«      –— Œ y­w©r5  N©Úcreate_interpolation_function©r%  Úc0Úc1rû   ra   s       €r   r(  z Gradient.draw.<locals>.<genexpr>  s0   øè ø€ ò /á��B˜ð ×0Ñ0°¸¸RÀ×Fñ/ùs   ƒ"%)Údc              3   ó&   K  — | ]	  }|d k7  –— Œ y­w)r   Nr   )r%  r™   s     r   r(  z Gradient.draw.<locals>.<genexpr>  s   è ø€ Ò.˜eˆu˜�zÑ.ùr)  c              3   óR   •K  — | ]  \  }}}‰j                  d |f|f|«      –— Œ  y­wr7  r8  r:  s       €r   r(  z Gradient.draw.<locals>.<genexpr>  s4   øè ø€ ò 3á �B˜˜Dð ×4Ñ4°V¸b¸UÀRÀEÈ4×Pñ3ùs   ƒ$'Ú
DeviceGrayr  z sh)ÚlayoutÚ	rectangleÚ	set_colorÚfillrô   r  Útoró   r.  Úcreate_stitching_functionÚadd_shadingr_   ÚanyÚset_alpha_stater4   ra   Úpaint_shading)rH   ra   rb   rc   rd   Úscale_yÚtype_Úpointsrø   r  r-  r&  Úalphasrý   Úalpha_couplesÚcolor_couplesr™   Úa0Úa1rû   Úshading_typeÚdomainÚextendrÙ   ÚboundsÚsub_functionsÚfunctionÚshadingÚalpha_streamÚalpha_shadings    `                            r   rj   zGradient.drawâ  sJ  ø€ ØAEÇÁØ˜O¨UóB4Ñ>ˆ�˜ 	¨6°;ð �GÒØ×Ñ˜Q  >°?ÔCØ×Ñ˜V A™YÔ'Ø�K‰KŒMØà(.Ö/˜u�%˜“(Ð/ˆÐ/ô œ3˜v›;¨™?Ó+ö-àð �A‰Y˜˜q 1™u™ {°1¡~Ò6ð-ˆð -ô œ3˜v›;¨™?Ó+ö-àð �A‰Y�\‰\˜&Ó! " 1Ð% v¨a°!©e¡}×'7Ñ'7¸Ó'?ÀÀÐ'CÀ[ÐQRÁ^ÒTð-ˆð -ô
 " &Ó)ò 	>‰HˆAˆuØ˜‹zØ�q’5Ø.;¸AÀ¹EÑ.BÀ1Ñ.E�M ! a¡%Ñ(¨Ñ+Ø”s˜6“{ Q‘Ó&Ø*7¸Ñ*:¸1Ñ*=�M !Ñ$ QÒ'ð	>ô "+¨=Ó!9ò 	.ÑˆA‰~��B˜Ø˜˜R˜Ò  b¨" X°Ó%7Ø&(¨2¡g�˜aÑ  Ò#ð	.ð " XÒ-‘q°1ˆØ˜A‘, 	¨"¡Ð.ˆØ—^‘^Ð#ˆÜ�f“+ ‘/ VÑ+ˆØ˜1˜R�ˆó/à -ô/ˆð ×3Ñ3Ø�F˜F Mó3ˆà×$Ñ$ \°6¸6À6È8ÓTˆØ×Ñ˜7ÐÔ#äÑ. vÔ.Ô.Ø!×1Ñ1Ø�1�n oó7ˆLð !&¨Ò 1™1°qˆLó3à$1ô3ˆMð ×7Ñ7Ø˜ ¨ó7ˆHà(×4Ñ4Ø˜f f¨f°hÀóNˆMà×"Ñ" WÐ"Ô-Ø%& }×'7Ñ'7Ð&8¸Ð#<Ð"=ˆLÔà×Ñ˜WŸZ™ZÕ(ùòa 0ùò-ùò-s   ÁJÂJ"Â8<J'c                 ó   — t         ‚)a€  Get layout information about the gradient.

        width, height: Gradient box. Top-left is at coordinates (0, 0).
        style: box computed style.

        Returns (scale_y, type_, points, positions, colors).

        scale_y: vertical scale of the gradient. float, used for ellipses
                 radial gradients. 1 otherwise.
        type_: gradient type.
        points: coordinates of useful points, depending on type_:
            'solid': None.
            'linear': (x0, y0, x1, y1)
                      coordinates of the starting and ending points.
            'radial': (cx0, cy0, radius0, cx1, cy1, radius1)
                      coordinates of the starting end ending circles
        positions: positions of the color stops. list of floats in between 0
                   and 1 (0 at the starting point, 1 at the ending point).
        colors: list of (r, g, b, a).

        )ÚNotImplementedError)rH   r;   r<   rd   s       r   rA  zGradient.layout  s
   € ô, "Ð!r   N)r   r   r   rR   rW   rj   rA  r   r   r   r"  r"  Ó  s   „ ò	#ò ò:)óx"r   r"  c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚLinearGradientc                 óF   •— t         ‰| �  |||«       |\  | _        | _        y rT   )r­   rR   Údirection_typeÚ	direction)rH   r/  rb  r.  r-  r¯   s        €r   rR   zLinearGradient.__init__8  s#   ø€ Ü‰Ñ˜ i°Ô=à.7Ñ+ˆÔ˜T�^r   c                 óš  — t        | j                  «      dk(  rddd g | j                  d   gg fS | j                  dk(  rW| j                  j	                  d«      \  }}|dk(  rdnd}|dk(  rdnd}t        j                  ||«      }||z  |z  }	||z  |z  }
nH| j                  d	k(  sJ ‚| j                  }t        j                  |«      }	t        j                  |«       }
t        |	d
«      t        |
d
«      }
}	t        | j                  «      }t        ||	z  «      t        ||
z  «      z   }t        || j                  | j                  |«      \  }}| j                  s‘|d   |d   k(  r?|j!                  d|d   dz
  «       |j!                  d|d   «       |j!                  dd«       |d   |d   k(  r<|j#                  |d   dz   «       |j#                  |d   «       |j#                  d«       t%        |«      \  }}}| j                  �r‡||k(  rt'        ||«      }ddd g |gg fS ||z
  }|dkD  sJ ‚t)        t        |«      dz
  «      D �cg c]  }||dz      ||   z
  ‘Œ }}t+        dg|¢­«      }t+        |«      }t+        |«      }t+        dg|d d d…   ¢­«      }t+        |d d d…   «      }t+        |d d d…   «      }||k  rdt-        |«      }|j#                  t-        |«      «       |j#                  t-        |«      «       |j#                  |d   |z   «       |||z  z  }||k  rŒd|dkD  rgt-        |«      }|j!                  dt-        |«      «       |j!                  dt-        |«      «       |j!                  d|d   |z
  «       |||z  z  }|dkD  rŒg||	|z  z
  dz  }||
|z  z
  dz  }||	|z  z   ||
|z  z   ||	|z  z   ||
|z  z   f}dd||||fS c c}w )Nr   r2  r   Úcornerr'  Úleftr‰   Útoprï   é	   éþÿÿÿrÈ   r4  )r  r  ra  rb  Úsplitr=   ÚhypotÚsinÚcosrŽ   r  r[   r  r,  r-  r.  Úinsertr£   r	  r   rô   r   Únext) rH   r;   r<   rd   ÚyÚxÚfactor_xÚfactor_yÚdiagonalÚdxÚdyrï   r  r÷   rø   rù   r  r  r&  Ústop_lengthrý   Úposition_stepsÚ
next_stepsÚnext_colorsÚ
next_hintsÚprevious_stepsÚprevious_colorsÚprevious_hintsÚstepÚstart_xÚstart_yrM  s                                    r   rA  zLinearGradient.layout=  s  € äˆt�{‰{Ó˜qÒ Ø�g˜t R¨$¯+©+°a©.Ð)9¸2Ð=Ð=ð ×Ñ (Ò*Ø—>‘>×'Ñ'¨Ó,‰DˆAˆqØ &š[‘r¨aˆHØ %šZ‘r¨QˆHÜ—z‘z %¨Ó0ˆHð ˜FÑ" XÑ-ˆBØ˜EÑ! HÑ,‰Bà×&Ñ&¨'Ò1Ð1Ð1Ø—N‘NˆEÜ—‘˜%“ˆBÜ—(‘(˜5“/Ð!ˆBô �r˜1“œu R¨›|ˆBˆô �d—k‘kÓ"ˆÜ˜E B™J›¬#¨f°r©kÓ*:Ñ:ˆÜ.Ø˜4×.Ñ.°×0@Ñ0@À%óIÑˆ	�5à�~Š~ð ˜‰|˜y¨™|Ò+Ø× Ñ   I¨a¡L°1Ñ$4Ô5Ø—‘˜a ¨¡Ô+Ø—‘˜Q Ô"Ø˜‰} 	¨"¡Ò-Ø× Ñ  ¨2¡°Ñ!2Ô3Ø—‘˜f R™jÔ)Ø—‘˜Q”Ü!9¸)Ó!DÑˆˆt�Yà�>‹>ð ˜Š}Ü.¨v°yÓA�Ø˜' 4¨¨e¨W°bÐ8Ð8ð  ™,ˆKØ ’?Ð"�?ô œs 9›~°Ñ1Ó2ö4àð ˜!˜a™%Ñ  9¨Q¡<Ó/ð4ˆNð 4ô
  Ð3 NÑ3Ó4ˆJÜ ›-ˆKÜ˜u›ˆJÜ" AÐ#=¨±t¸°tÑ(<Ñ#=Ó>ˆNÜ# F©4¨R¨4¡LÓ1ˆOÜ" 5©¨2¨¡;Ó/ˆNð ˜Ò&Ü˜JÓ'�Ø—‘œd ;Ó/Ô0Ø—‘œT *Ó-Ô.Ø× Ñ  ¨2¡°Ñ!5Ô6Ø˜˜{Ñ*Ñ*�ð ˜Ó&ð ˜!’)Ü˜NÓ+�Ø—‘˜a¤ oÓ!6Ô7Ø—‘˜Q¤ ^Ó 4Ô5Ø× Ñ   I¨a¡L°4Ñ$7Ô8Ø˜ Ñ+Ñ+�ð ˜!“)ð ˜2 Ñ-Ñ-°Ñ2ˆØ˜B Ñ.Ñ.°!Ñ3ˆà�b˜5‘jÑ  '¨B°©JÑ"6Ø�b˜4‘iÑ ¨2°©9Ñ!4ð6ˆð �(˜F I¨v°uÐ<Ð<ùòG4s   ÉO)r   r   r   rR   rA  r´   rµ   s   @r   r_  r_  7  s   ø„ ô8ö
Y=r   r_  c                   ó6   ‡ — e Zd Zˆ fd„Zd„ Zd„ Zd„ Zd„ Zˆ xZS )ÚRadialGradientc                 ób   •— t         ‰| �  |||«       || _        || _        |\  | _        | _        y rT   )r­   rR   ÚcenterÚshapeÚ	size_typeÚsize)rH   r/  r…  r‡  r„  r.  r-  r¯   s          €r   rR   zRadialGradient.__init__š  s2   ø€ Ü‰Ñ˜ i°Ô=àˆŒàˆŒ
ð %)Ñ!ˆŒ˜�	r   c           	      óf  — t        | j                  «      dk(  rddd g | j                  d   gg fS | j                  \  }}}}t        |||«      }t        |||«      }|dk(  r||z
  }|dk(  r||z
  } | j                  | j                  |||||«      Ž \  }}	|	|z  }
t        | j                  «      }t        || j                  | j                  |«      \  }}| j                  s“|d   dkD  rD|d   |d   k(  r9|j                  dd«       |j                  d|d   «       |j                  dd«       |d   |d   k(  r<|j                  |d   dz   «       |j                  |d   «       |j                  d«       |d   dk  rÂ| j                  r-|d   |d   z
  }|d|d    |z  z   z  }|D �cg c]  }||z   ‘Œ	 }}n‰|d   dk  rddd g | j                  d   gg fS t        |«      D ]]  \  }}|dk(  r||d  ||d  }} nI|dkD  sŒ||   }||dz
     }||dz
     }|dk  sJ ‚t        ||||g|dd|g«      }|g||d  ¢}dg||d  ¢} n t        |«      \  }}}||k(  r!| j                  rt        ||«      }ddd g |gg fS |||
z  ||||
z  |f}| j                  r| j!                  |||
||||«      \  }}}}|
d||||fS c c}w )	Nr   r2  r   ÚrightÚbottomrh  r‰   Úradial)r  r  r„  r   Ú_handle_degenerateÚ_resolve_sizer  r  r,  r-  r.  rm  r£   ró   r   r	  Ú_repeat)rH   r;   r<   rd   Úorigin_xÚcenter_xÚorigin_yÚcenter_yÚsize_xÚsize_yrK  r  rø   rù   r÷   Úoffsetrú   rý   r&  Úprevious_colorÚprevious_positionÚintermediate_colorr  r  rM  s                            r   rA  zRadialGradient.layout§  s{  € äˆt�{‰{Ó˜qÒ Ø�g˜t R¨$¯+©+°a©.Ð)9¸2Ð=Ð=ð 26·±Ñ.ˆ�(˜H hÜ˜h¨¨uÓ5ˆÜ˜h¨¨vÓ6ˆØ�wÒØ˜xÑ'ˆHØ�xÒØ Ñ(ˆHð 1˜×0Ñ0Ø×Ñ  v¨x¸À5ÓIðK‰ˆ�à˜6‘/ˆô �d—k‘kÓ"ˆÜ.Ø�D×'Ñ'¨×)9Ñ)9¸5óBÑˆ	�5à�~Š~ð ˜‰|˜aÒ I¨a¡L°I¸a±LÒ$@Ø× Ñ   AÔ&Ø—‘˜a ¨¡Ô+Ø—‘˜Q Ô"Ø˜‰} 	¨"¡Ò-Ø× Ñ  ¨2¡°Ñ!2Ô3Ø—‘˜f R™jÔ)Ø—‘˜Q”Ø�Q‰<˜!Òà�~Š~à )¨"¡°	¸!±Ñ <�Ø&¨!°	¸!±¨}ÀÑ/MÑ*NÑO�Ø?HÖI°8˜X¨Ó.ÐI�	ÑIð ˜R‘= AÒ%à˜g t¨R°$·+±+¸b±/Ð1BÀBÐFÐFÜ#,¨YÓ#7ò ‘K�A�xØ 1’}à,2°1°2¨J¸	À!À"¸ 	˜ÙØ !“|à & q¡	˜Ø)/°°A±©˜Ø,5°a¸!±eÑ,<Ð)Ø0°1Ò4Ð4Ð4Ü-CØ+¨^¸UÀEÐJØ.°°1°hÐ?ó.AÐ*ð #5Ð!B°v¸a¸b°zÐ!B˜Ø%&Ð$7¨°1°2¨Ð$7˜	Ùð!ô" ":¸)Ó!DÑˆˆt�Yð �DŠ=˜TŸ^š^Ü*¨6°9Ó=ˆEØ�g˜t R¨%¨°"Ð4Ð4ð �h Ñ(¨%Ø�h Ñ(¨$ð0ˆð �>Š>Ø/3¯|©|Ø�v˜w¨°	¸6À5ó0JÑ,ˆF�I˜v uð ˜ &¨)°V¸UÐBÐBùòQ Js   Æ#J.c           
      ó¶  — |j                  «       }|j                  «       }	|j                  «       }
|d   |d   z
  }t        t        j                  ||d   z
  ||z  |d   z
  «      t        j                  ||d   z
  |d    |z  «      t        j                  |d    ||z  |d   z
  «      t        j                  |d    |d    |z  «      «      }t        j                  ||d   z
  |z  «      }|dkD  rMd|z   }||z  }g |¢d‘|z  d d }t        |«      D ��cg c]  }|D ]  }||z   ‘Œ	 Œ }}}g |d d ¢|d   ||z  z   ‘­}|d   dk(  r||||fS |d   |z  }g |d d ¢d‘|dd  ¢­}t        |«      }|r>|||z  z  }|dg|	¢|z  z  }t        |«      D ��cg c]  }|
D ]
  }||z
  |z   ‘Œ Œ c}}|z   }||z
  }|dk(  r||||fS |
d   |
d   fdk(  sJ ‚d|cxk  rdk  sJ ‚ J ‚|
d d d…   }d|z
  }t        |d¬«      D ]Ê  \  }}||k(  r;|| d  |z   }g |	| d  ¢d‘|¢}|
| d  D �cg c]
  }||z
  dz
  ‘Œ }}||z   }||||fc S ||k  sŒL||    }||dz
      }|
|dz
      }||||g}||||g}t        ||«      }|g||dz
   d  ¢|¢}dg|	|dz
   d  ¢d‘|¢}|
|dz
   d  D �cg c]
  }|dz
  |z
  ‘Œ }}|dz
  |z
  g|¢|¢­}||||fc S  y c c}}w c c}}w c c}w c c}w )	Né   rÈ   r   r   r‰   r†   r5  )Ústart)	Úcopyr]   r=   rj  Úceilrô   Úintró   r   )rH   r;   r<   rK  rM  rø   r  rù   Úoriginal_colorsÚoriginal_hintsÚoriginal_positionsÚgradient_lengthÚmax_distanceÚrepeat_afterÚrepeatrý   rú   Úrepeat_beforeÚfull_repeatÚpartial_repeatÚreverser?   Únew_positionsr&  Ú
next_colorÚnext_positionÚaverage_colorsÚaverage_positionsÚ
zero_colors                                r   rŽ  zRadialGradient._repeatù  si  € à Ÿ+™+›-ˆØŸ™›ˆØ&Ÿ^™^Ó-ÐØ  ™) f¨Q¡iÑ/ˆô Ü�J‰J�u˜v a™yÑ(¨&°7Ñ*:¸VÀA¹YÑ*FÓGÜ�J‰J�u˜v a™yÑ(¨6°!©9¨*°wÑ*>Ó?Ü�J‰J˜˜q™	�z 6¨GÑ#3°f¸Q±iÑ#?Ó@Ü�J‰J˜˜q™	�z F¨1¡I :°Ñ#7Ó8ó	:ˆô
 —y‘y ,°¸±Ñ":¸oÑ!MÓNˆØ˜!Òà˜Ñ%ˆFØ�fÑˆFØ �u�[˜a�[ 6Ñ)¨3¨BÐ/ˆEä&+¨F£m÷OØ!"ÀIòOØ8@��H“ðOØðOˆIñ OàN�v˜b˜q�zÐN 6¨!¡9¨ÀÑ/MÑ#MÑNˆFà�!‰9˜Š>à˜9 f¨eÐ3Ð3ð ˜q™	 OÑ3ˆð /�6˜"˜1�:Ð.˜qÐ. 6¨!¨" :Ñ.ˆô ˜-Ó(ˆÙà�o¨Ñ3Ñ3ˆFØ�aÐ)˜.Ð)¨KÑ7Ñ7ˆEä49¸+Ó4F÷4Ø/0Ø 2ò4àð �K‘ (Ó*ð4Ø*ó4à6?ñ@ˆIð
 '¨Ñ4ˆØ˜QÒà˜9 f¨eÐ3Ð3ð
 # 1Ñ%Ð'9¸"Ñ'=Ð>À&ÒHÐHÐHØ�>Ô% AÒ%Ð%Ñ%Ð%Ð%Ø$¡T r TÑ*ˆØ�NÑ"ˆÜ$ W°AÔ6ò 	8‰KˆAˆxØ˜5Ò ð )¨!¨¨Ð-°Ñ6�Ø9˜.¨!¨¨Ð-Ð9¨qÐ9°5Ð9�ð %7¸°r°sÐ$;ö!=à ð ˜{Ñ*¨QÓ.ð!=�ð !=ð *¨IÑ5�	Ø˜y¨&°%Ð7Ò7Ø˜%Óð (¨¨Ñ+�Ø,¨q°1©u¨XÑ6�
Ø 2°Q¸±U°8Ñ <�Ø"'¨°
¸JÐ!G�Ø%-¨u°e¸]Ð$KÐ!Ü3°NÐDUÓV�
Ø$ÐI ¸¸1¹°v°wÐ'?ÐIÀ&ÐI�ØÐ@˜^¨a°©c¨F¨GÐ4Ð@°aÐ@¸%Ð@�ð *¨A°©E¨(¨)Ð4ö!6Ø3;�H˜q‘L ;Ó.ð!6�ð !6ð # Q™Y¨Ñ4ÐQ°}ÐQÀyÑQ�	Ø˜y¨&°%Ð7Ò7ñ7	8ùóKOùó(4ùò.!=ùò"!6s   ÄKÆKÈKÊKc           	      ó0  — | j                   dk(  r-| j                  \  }}t        |||«      }t        |||«      }||fS t        |«      }t        ||z
  «      }	t        |«      }
t        ||z
  «      }| j                  j	                  d«      rt
        nt        }| j                  j                  d«      r0| j                  dk(  r |||	|
|«      }||fS  |||	«       ||
|«      fS | j                  dk(  r_ |t        j                  ||
«      t        j                  ||«      t        j                  |	|
«      t        j                  |	|«      «      }||fS  |||
f||f|	|
f|	|fd„ ¬«      \  }}|t        j                  d«      z  |t        j                  d«      z  fS )z+Resolve circle size of the radial gradient.ÚexplicitÚclosestÚsideÚcirclec                 ó&   — t        j                  | Ž S rT   )r=   rj  )r  s    r   ú<lambda>z.RadialGradient._resolve_size.<locals>.<lambda>i  s   € œ$Ÿ*™* a˜.€ r   )rr   rÈ   )r†  r‡  r   r[   Ú
startswithrõ   r]   Úendswithr…  r=   rj  Úsqrt)rH   r;   r<   r�  r’  rd   r“  r”  re  r‰  rf  rŠ  ÚpickÚsize_xyÚcorner_xÚcorner_ys                   r   r�  zRadialGradient._resolve_sizeO  s„  € à�>‰>˜ZÒ'Ø!ŸY™Y‰NˆF�FÜ ¨¨uÓ5ˆFÜ ¨¨vÓ6ˆFØ˜6�>Ð!Ü�8‹}ˆÜ�E˜HÑ$Ó%ˆÜ�(‹mˆÜ�V˜hÑ&Ó'ˆØ—i‘i×*Ñ*¨9Ô5�s¼3ˆØ�9‰9×Ñ˜fÔ%Ø�z‰z˜XÒ%Ù˜t U¨C°Ó8�Ø Ð'Ð'á˜˜eÓ$¡d¨3°Ó&7Ð7Ð7à�:‰:˜Ò!Ùœ4Ÿ:™: d¨CÓ0´$·*±*¸TÀ6Ó2JÜŸ:™: e¨SÓ1´4·:±:¸eÀVÓ3LóNˆGà˜GÐ#Ð#á!Ø�3ˆK˜$ ˜¨%°¨¸¸v°Ù(ô*Ñˆ�(ð œ$Ÿ)™) A›,Ñ&¨´4·9±9¸Q³<Ñ(?Ð?Ð?r   c                 ób   — ||cxk(  rdk(  rn ndx}}||fS |dk(  rd}d}||fS |dk(  rd}d}||fS )ztHandle degenerate radial gradients.

        See https://drafts.csswg.org/css-images-3/#degenerate-radials

        r   gH¯¼šò×z>g    ÐcAr   )rH   r“  r”  s      r   rŒ  z!RadialGradient._handle_degeneratel  sc   € ð �VÔ ˜qÕ Ø"Ð"ˆF�Vð �vˆ~Ðð �qŠ[ØˆFØˆFð �vˆ~Ðð �qŠ[ØˆFØˆFØ�vˆ~Ðr   )	r   r   r   rR   rA  rŽ  r�  rŒ  r´   rµ   s   @r   r‚  r‚  ™  s"   ø„ ô)òPCòdT8òl@ö:r   r‚  )NNrç   )/r   rC   r=   r¡   Úhashlibr   r   Ú	itertoolsr   Úpathlibr   Ú	xml.etreer   r‘   ÚPILr   r	   r
   Útinycss2.color5r   rm   r   Úlayout.percentr   Úloggerr   Úsvgr   Úurlsr   r   ÚLOAD_TRUNCATED_IMAGESÚ
ValueErrorr   r   ÚObjectro   rn   r¼   rå   r3   r  r	  r   r"  r_  r‚  r   r   r   ú<module>rÌ     sÛ   ðÙ 1ã 	Û Û Ý Ý Ý Ý Ý !ã ß *Ñ *Ý 'å Ý &Ý Ý ß )ð #'€	Ô ô˜
ô ÷@"ñ @"ôF	&�—‘ô 	&ô1�U—\‘\ô 1÷!Qñ !QðH KOØ1=ó0òfò01òh"ò&:÷Da"ñ a"ôH_=�Xô _=ôDa�Xõ ar   