Ë
    ²‰iQ: ã                   óÀ
  — d dl Z 	 d dlmZ d dlmZ d dlmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZ d dlmZ 	 d dlmZ 	 d	Zd
ZdZd ZdZdZdZdZdZdZ dZ!dZ"dZ#dZ$dZ%dZ&dZ'dZ(dZ)dZ*dZ+dZ,dZ-dZ.d Z/d!Z0d"Z1d#Z2d$Z3d%Z4d&Z5d'Z6d(Z7d)Z8d*Z9d+Z:d,Z;d-Z<d.Z=d/Z>d0Z?d1Z@d2ZAd3ZBd4ZCd5ZDd6ZEd7ZFd8ZGd9ZHd*ZId:ZJd;ZKd<ZLd=ZMd>ZNd?ZOd@ZPdAZQdBZRdCZSdDZTdEZUdFZVdGZWdHZXdIZYdJZZdKZ[dLZ\dMZ]dNZ^dOZ_dPZ`dQZadRZbdSZcdTZddUZedVZfdWZgdXZhdYZidZZjd[Zkd\Zld]Zmd^Znd_Zod`ZpdaZqdbZrdcZsddZtdeZudfZvdgZwdhZxdiZydjZzdkZ{dlZ|dmZ}dnZ~doZdpZ€dqZ�drZ‚dsZƒdtZ„duZ…dvZ†dwZ‡dxZˆdyZ‰erdzz   esz   dzz   eyz   dzz   ezz   dzz   etz   dzz   e{z   dzz   e|z   dzz   euz   dzz   exz   dzz   evz   dzz   ewz   ZŠe„dzz   e…z   dzz   e‰z   Z‹ e �j                  d{«      Z� e �j                  d|«      ZŽ e �j                  eƒ«      Z� e �j                  d}eƒ›d~e�›d}eƒ›d~�«      Z� e �j                  deŠ›d~e€›d€�«      Z‘ e �j                  d}eƒ›d~e€›d}e‹›d��«      Z’ e �j                  d‚«      Z“ e �j                  dƒeƒ›d„eƒ›d„eƒ›d…eƒ›d†�	«      Z” e �j                  dƒeƒ›d‡eƒ›d‡eƒ›dˆeƒ›d†�	«      Z• e �j                  d‰eƒ›d„eƒ›d‡eƒ›dˆeƒ›d†�	«      Z– e �j                  dŠeƒz  «      Z— e �j                  d‹e �j0                  «      Z™ e �j                  dŒ«      Zš e �j                  d�«      Z› e �j                  dŽ«      Zœd�d�e‚fgZ� e �j                  dz�j=                  d‘„ e�D «       «      «      ZŸd’eƒfd“d�e‚fgZ  e �j                  dz�j=                  d”„ e D «       «      «      Z¡d•d�e‚fgZ¢ e �j                  dz�j=                  d–„ e¢D «       «      «      Z£ G d—„ d˜«      Z¤ G d™„ dše¥«      Z¦ G d›„ dœe¥«      Z§ G d�„ dž«      Z¨ G dŸ„ d e©«      Zª G d¡„ d¢«      Z« G d£„ d¤«      Z¬ G d¥„ d¦e¥«      Z­ G d§„ d¨«      Z® G d©„ dª«      Z¯ G d«„ d¬e­e¯e®«      Z° G d­„ d®«      Z± G d¯„ d°e±«      Z² G d±„ d²e±«      Z³ G d³„ d´e±«      Z´ G dµ„ d¶e´«      Zµ G d·„ d¸e´«      Z¶ G d¹„ dºe³«      Z· G d»„ d¼e³«      Z¸ G d½„ d¾e³«      Z¹ G d¿„ dÀe°e«      Zº G dÁ„ dÂe°«      Z» G dÃ„ dÄe°«      Z¼ G dÅ„ dÆe¼«      Z½ G dÇ„ dÈe¼«      Z¾ G dÉ„ dÊe°«      Z¿ G dË„ dÌe°«      ZÀ G dÍ„ dÎeÀ«      ZÁ G dÏ„ dÐeÀ«      ZÂ G dÑ„ dÒ«      ZÃ G dÓ„ dÔe­e®eÄ«      ZÅ G dÕ„ dÖe­e®eÄ«      ZÆ G d×„ dØe­eÄ«      ZÇ G dÙ„ dÚe­eÄ«      ZÈ G dÛ„ dÜe­e¯e®«      ZÉeÉZÊ G dÝ„ dÞe­e¯e®«      ZËeËZÌ G dß„ dàe­«      ZÍeÍZÎ G dá„ dâe­«      ZÏ G dã„ däeÅ«      ZÐdå„ ZÑdédæ„ZÒdêdç„ZÓdëdè„ZÔy# e$ r
 d dlmZ Y �Œ9w xY w# e$ r d dlmZ edz  ZY �Œ!w xY w)ìé    N)ÚMutableSequence©Úcopy)ÚacosÚatanÚatan2ÚceilÚcosÚdegreesÚhypotÚlogÚradiansÚsinÚsqrtÚtan)Ú	iterparse©Útau)Úpié   z1.9.6é   çê-�™—q=g      X@ÚsvgÚversionz1.1Úxmlnszhttp://www.w3.org/2000/svgzxmlns:xlinkzhttp://www.w3.org/1999/xlinkzxmlns:evz!http://www.w3.org/2001/xml-eventsz"{http://www.w3.org/1999/xlink}hrefÚhrefÚwidthÚheightÚviewBoxÚviewbox_transformÚpathÚgÚrectÚcircleÚellipseÚlineÚpolylineÚpolygonÚtextÚtspanÚimageÚdescÚtitleÚmetadataÚstyleÚdefsÚuseÚclipPathÚpatternÚ
attributesÚidÚdÚdisplayÚcolorÚfillzfill-opacityÚstrokezstroke-opacityzstroke-widthÚ	transformÚclassz	clip-pathz	clip-ruleÚclipPathUnitsÚcxÚcyÚrxÚryÚrÚpointsÚpreserveAspectRatioÚxÚyÚx0Úy0Úx1Úy1Úx2Úy2ÚdxÚdyÚtagÚfontzfont-familyz
font-stylezfont-variantzfont-weightzfont-stretchz	font-sizeztext-anchorzalignment-baselinezdominant-baselineÚpatternContentUnitsÚpatternTransformÚpatternUnitszvector-effectÚuserSpaceOnUseÚobjectBoundingBoxÚnonzeroÚevenoddÚmatrixÚ	translateÚscaleÚrotateÚskewxÚskewyÚskewÚ
translatexÚ
translateyÚscalexÚscaleyÚnoneÚcurrentColorznon-scaling-strokez	[\s\t\n]*z(?:\s*,\s*|\s+|(?=-))z[ ,\t\n\x09\x0A\x0C\x0D]+z([-+]?[0-9]*\.?[0-9]+(?:[eE][-+]?[0-9]+)?z0cm|mm|Q|in|pt|pc|px|em|cx|ch|rem|vw|vh|vmin|vmaxzdeg|grad|rad|turnzs|mszHz|kHzzdpi|dpcm|dppxÚ%Ú|zurl\(#?(.*)\)z^data:([^,]*),Ú(Ú)z(?u)(z\(([^)]+)\)z)?z^#?([0-9A-Fa-f]{3,8})$zrgba?\(\s*(z	)\s*,\s*(z)\s*(?:,\s*(z)\s*)?\)z
)%\s*,\s*(z)%\s*(?:,\s*(zhsla?\(\s*(z(%s)([A-Za-z%%]*)z\/\*[\s\S]*?\*\/|\/\/.*$z([^{]+)\s*\{\s*([^}]+)\s*\}a¸  ^(?:(?:(normal|italic|oblique)\s)?(?:(normal|small-caps)\s)?(?:(normal|bold|bolder|lighter|[0-9]{3})\s)?(?:(normal|(?:ultra-|extra-|semi-)?condensed|(?:semi-|extra-)?expanded)\s)?){0,4}(?:((?:x-|xx-)?small|medium|(?:x-|xx-)?large|larger|smaller|[-+]?[0-9]*\.?[0-9]+(?:[eE][-+]?[0-9]+)?(?:em|pt|pc|px|%)?)(?:/((?:x-|xx-)?small|medium|(?:x-|xx-)?large|larger|smaller|[-+]?[0-9]*\.?[0-9]+(?:[eE][-+]?[0-9]+)?(?:em|pt|pc|px|%)?))?\s)?([^;]*);?$zV(?:([^\s"';,]+|"[^";,]+"|'[^';,]+'|serif|sans-serif|cursive|fantasy|monospace)),?\s*;?)ÚCOMMANDz[MmZzLlHhVvCcSsQqTtAa]ÚSKIPc              #   ó&   K  — | ]	  }d |z  –— Œ y­w©z
(?P<%s>%s)N© ©Ú.0Úpairs     úh/workspace/moltex-experiments/.pixi/envs/default/lib/python3.12/site-packages/svgelements/svgelements.pyÚ	<genexpr>rr   ý   ó   è ø€ ÐG¹Y°T˜\¨DÕ0¹Yùó   ‚ÚFLOAT)ÚCLOSEz[Zz]c              #   ó&   K  — | ]	  }d |z  –— Œ y­wrl   rm   rn   s     rq   rr   rr   ÿ   rs   rt   )ÚFLAGz[01]c              #   ó&   K  — | ]	  }d |z  –— Œ y­wrl   rm   rn   s     rq   rr   rr     s   è ø€ ÐI¹j°d˜l¨TÕ1¹jùrt   c                   ó<   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
y	)
ÚSVGLexicalParserc                 óJ   — d | _         d | _        d| _        d| _        d | _        y ©Nr   )ÚparserÚpathdÚposÚlimitÚinline_close©Úselfs    rq   Ú__init__zSVGLexicalParser.__init__  s&   € ØˆŒØˆŒ
ØˆŒØˆŒ
Ø ˆÕó    c                 óþ   — | j                   | j                  k  rdt        j                  | j                  | j                   «      }|€y |j                  «       | _         |j                  }|dk(  rŒm|j                  «       S y ©Nrj   )r€   r�   Úsvg_reÚmatchr   ÚendÚ	lastgroupÚgroup©r„   rŠ   Úkinds      rq   Ú_commandzSVGLexicalParser._command  sa   € Ø�h‰h˜Ÿ™Ò#Ü—L‘L §¡¨T¯X©XÓ6ˆEØˆ}ØØ—y‘y“{ˆDŒHØ—?‘?ˆDØ�vŠ~ØØ—;‘;“=Ð Ør†   c                 ó  — | j                   | j                  k  rpt        j                  | j                  | j                   «      }|€y|j
                  }|dk(  r|j                  «       | _        y|dk(  r|j                  «       | _         Œˆyy )NFrv   rj   T)	r€   r�   Únum_rerŠ   r   rŒ   r�   r‚   r‹   rŽ   s      rq   Ú_morezSVGLexicalParser._more  sp   € Ø�h‰h˜Ÿ™Ò#Ü—L‘L §¡¨T¯X©XÓ6ˆEØˆ}ØØ—?‘?ˆDØ�wŠØ$)§K¡K£M�Ô!ØØ�vŠ~à Ÿ9™9›;�”ØØØr†   c                 óH  — | j                   | j                  k  r‰t        j                  | j                  | j                   «      }|€	 y |j
                  }|dk(  r|j                  «       | _        y |j                  «       | _         |dk(  rŒ‰t        |j                  «       «      S y )Nrv   rj   )
r€   r�   r’   rŠ   r   rŒ   r�   r‚   r‹   ÚfloatrŽ   s      rq   Ú_numberzSVGLexicalParser._number(  s…   € Ø�h‰h˜Ÿ™Ò#Ü—L‘L §¡¨T¯X©XÓ6ˆEØˆ}Øð ð —?‘?ˆDØ�wŠà$)§K¡K£M�Ô!ØØ—y‘y“{ˆDŒHØ�vŠ~ØÜ˜Ÿ™›Ó'Ð'Ør†   c                 ó$  — | j                   | j                  k  rwt        j                  | j                  | j                   «      }|€	 y |j                  «       | _         |j                  }|dk(  rŒnt        t        |j                  «       «      «      S y rˆ   )
r€   r�   Úflag_rerŠ   r   r‹   rŒ   ÚboolÚintr�   rŽ   s      rq   Ú_flagzSVGLexicalParser._flag8  sr   € Ø�h‰h˜Ÿ™Ò#Ü—M‘M $§*¡*¨d¯h©hÓ7ˆEØˆ}Øð ð —y‘y“{ˆDŒHØ—?‘?ˆDØ�vŠ~ØÜœ˜EŸK™K›MÓ*Ó+Ð+Ør†   c                 ó`   — | j                  «       }|€y | j                  «       }|€t        ‚||fS ©N)r–   Ú
ValueError)r„   rE   rF   s      rq   Ú_coordzSVGLexicalParser._coordD  s4   € Ø�L‰L‹NˆØˆ9ØØ�L‰L‹NˆØˆ9ÜÐØ�!ˆtˆr†   c                 ó¤   — | j                  «       }|€y | j                  j                  }|€|S |d   |j                  z   |d   |j                  z   fS ©Nr   é   )rŸ   r~   Úcurrent_pointrE   rF   )r„   ÚpositionÚcurrent_poss      rq   Ú_rcoordzSVGLexicalParser._rcoordM  sU   € Ø—;‘;“=ˆØÐØØ—k‘k×/Ñ/ˆØÐØˆOØ˜‰{˜[Ÿ]™]Ñ*¨H°Q©K¸+¿-¹-Ñ,GÐGÐGr†   c           	      ó¼  — || _         | j                   j                  «        || _        d| _        t	        |«      | _        	 | j                  «       }|€y |dk(  s|dk(  rH| j                  «       rt        ‚| j                   j                  |j                  «       ¬«       d | _        Œf|dk(  r”| j                  «       st        ‚| j                  «       }| j                   j                  |d¬«       | j                  «       �r]| j                  «       }| j                   j                  |d¬«       | j                  «       rŒ>�n|dk(  r”| j                  «       st        ‚| j                  «       }| j                   j                  |d¬«       | j                  «       �rÄ| j                  «       }| j                   j                  |d¬«       | j                  «       rŒ>�n„|d	k(  rW	 | j                  «       }|€| j                  }|€t        ‚| j                   j                  |d¬«       | j                  «       s�n)ŒV|d
k(  rW	 | j                  «       }|€| j                  }|€t        ‚| j                   j                  |d¬«       | j                  «       s�nÍŒV|dk(  rW	 | j                  «       }|€| j                  }|€t        ‚| j                   j!                  |d¬«       | j                  «       s�nqŒV|dk(  rW	 | j                  «       }|€| j                  }|€t        ‚| j                   j!                  |d¬«       | j                  «       s�nŒV|dk(  rA	 | j#                  «       }| j                   j%                  |d¬«       | j                  «       s�nÏŒ@|dk(  rA	 | j#                  «       }| j                   j%                  |d¬«       | j                  «       s�n‰Œ@|dk(  rA	 | j#                  «       }| j                   j'                  |d¬«       | j                  «       s�nCŒ@|dk(  rQ| j                  «       �r,| j#                  «       }| j                   j'                  |d¬«       | j                  «       rŒ>�nì|dk(  r¥	 | j                  «       | j                  «       | j                  «       }}}|€| j                  }|€t        ‚|€| j                  }|€t        ‚|€| j                  }|€t        ‚| j                   j)                  |||d¬«       | j                  «       s�nCŒ¤|dk(  r¥	 | j                  «       | j                  «       | j                  «       }}}|€| j                  }|€t        ‚|€| j                  }|€t        ‚|€| j                  }|€t        ‚| j                   j)                  |||d¬«       | j                  «       s�n™Œ¤|dk(  r~	 | j                  «       | j                  «       }}|€| j                  }|€t        ‚|€| j                  }|€t        ‚| j                   j+                  ||d¬«       | j                  «       s�nŒ}|dk(  r~	 | j                  «       | j                  «       }}|€| j                  }|€t        ‚|€| j                  }|€t        ‚| j                   j+                  ||d¬«       | j                  «       s�n“Œ}|dk(  r~	 | j                  «       | j                  «       }}|€| j                  }|€t        ‚|€| j                  }|€t        ‚| j                   j-                  ||d¬«       | j                  «       s�nŒ}|dk(  r~	 | j                  «       | j                  «       }}|€| j                  }|€t        ‚|€| j                  }|€t        ‚| j                   j-                  ||d¬«       | j                  «       s�n�Œ}|dk(  rÆ| j                  «       �rv| j#                  «       | j#                  «       | j#                  «       | j/                  «       | j/                  «       | j                  «       f\  }	}
}}}}|€t        ‚|€| j                  }|€t        ‚| j                   j1                  |	|
||||d¬«       | j                  «       rŒ´nÁ|dk(  r¼| j                  «       r¬| j#                  «       | j#                  «       | j#                  «       | j/                  «       | j/                  «       | j                  «       f\  }	}
}}}}|€| j                  }|€t        ‚| j                   j1                  |	|
||||d¬«       | j                  «       rŒ¬�	Œ)Nr   TÚzÚZ©ÚrelativeÚmÚMFÚlÚLÚtÚTÚhÚHÚvÚVÚcÚCÚqÚQÚsÚSÚaÚA)r~   Ústartr   r€   Úlenr�   r�   r“   rž   ÚclosedÚislowerr‚   r¦   Úmover&   rŸ   Úsmooth_quadr–   Ú
horizontalÚverticalÚcubicÚquadÚsmooth_cubicr›   Úarcr‹   )r„   r~   r   ÚcmdÚcoordÚvalueÚcoord1Úcoord2Úcoord3r@   rA   ÚrotationrÉ   Úsweeps                 rq   ÚparsezSVGLexicalParser.parseV  s~  € ØˆŒØ�‰×ÑÔØˆŒ
ØˆŒÜ˜“ZˆŒ
ØØ—-‘-“/ˆCØˆ{ØØ˜’˜s cšzØ—:‘:”<Ü$Ð$Ø—‘×"Ñ"¨C¯K©K«MÐ"Ô:Ø$(�Ô!ØØ˜’Ø—z‘z”|Ü$Ð$ØŸ™›�Ø—‘× Ñ  °Ð Ô6Ø—j‘j•lØ ŸL™L›N�EØ—K‘K×$Ñ$ U°TÐ$Ô:ð —j‘j—lð ˜’Ø—z‘z”|Ü$Ð$ØŸ™›�Ø—‘× Ñ  °Ð Ô7Ø—j‘j•lØ ŸK™K›M�EØ—K‘K×$Ñ$ U°UÐ$Ô;ð —j‘j—lð ˜’ØØ ŸL™L›N�EØ�}Ø $× 1Ñ 1˜Ø ˜=Ü",Ð,Ø—K‘K×$Ñ$ U°TÐ$Ô:ØŸ:™:œ<Ùð ð ˜’ØØ ŸK™K›M�EØ�}Ø $× 1Ñ 1˜Ø ˜=Ü",Ð,Ø—K‘K×$Ñ$ U°UÐ$Ô;ØŸ:™:œ<Ùð ð ˜’ØØ ŸL™L›N�EØ�}Ø $× 1Ñ 1˜Ø ˜=Ü",Ð,Ø—K‘K×+Ñ+¨E¸DÐ+ÔAØŸ:™:œ<Ùð ð ˜’ØØ ŸK™K›M�EØ�}Ø $× 1Ñ 1˜Ø ˜=Ü",Ð,Ø—K‘K×+Ñ+¨E¸EÐ+ÔBØŸ:™:œ<Ùð ð ˜’ØØ ŸL™L›N�EØ—K‘K×*Ñ*¨5¸4Ð*Ô@ØŸ:™:œ<Ùð	 ð
 ˜’ØØ ŸL™L›N�EØ—K‘K×*Ñ*¨5¸5Ð*ÔAØŸ:™:œ<Ùð	 ð
 ˜’ØØ ŸL™L›N�EØ—K‘K×(Ñ(¨¸Ð(Ô>ØŸ:™:œ<Ùð	 ð
 ˜’Ø—j‘j•lØ ŸL™L›N�EØ—K‘K×(Ñ(¨¸Ð(Ô?ð —j‘j—lð ˜’ØàŸ™›ØŸ™›ØŸ™›ð %+˜F�Fð
 �~Ø!%×!2Ñ!2˜Ø!˜>Ü",Ð,Ø�~Ø!%×!2Ñ!2˜Ø!˜>Ü",Ð,Ø�~Ø!%×!2Ñ!2˜Ø!˜>Ü",Ð,Ø—K‘K×%Ñ% f¨f°fÀtÐ%ÔLØŸ:™:œ<Ùð) ð* ˜’ØØ-1¯[©[«]¸D¿K¹K»MÈ4Ï;É;Ë= F˜F�FØ�~Ø!%×!2Ñ!2˜Ø!˜>Ü",Ð,Ø�~Ø!%×!2Ñ!2˜Ø!˜>Ü",Ð,Ø�~Ø!%×!2Ñ!2˜Ø!˜>Ü",Ð,Ø—K‘K×%Ñ% f¨f°fÀuÐ%ÔMØŸ:™:œ<Ùð! ð" ˜’ØØ%)§\¡\£^°T·\±\³^˜F�FØ�~Ø!%×!2Ñ!2˜Ø!˜>Ü",Ð,Ø�~Ø!%×!2Ñ!2˜Ø!˜>Ü",Ð,Ø—K‘K×$Ñ$ V¨V¸dÐ$ÔCØŸ:™:œ<Ùð ð ˜’ØØ%)§[¡[£]°D·K±K³M˜F�FØ�~Ø!%×!2Ñ!2˜Ø!˜>Ü",Ð,Ø�~Ø!%×!2Ñ!2˜Ø!˜>Ü",Ð,Ø—K‘K×$Ñ$ V¨V¸eÐ$ÔDØŸ:™:œ<Ùð ð ˜’ØØ%)§\¡\£^°T·\±\³^˜F�FØ�~Ø!%×!2Ñ!2˜Ø!˜>Ü",Ð,Ø�~Ø!%×!2Ñ!2˜Ø!˜>Ü",Ð,Ø—K‘K×,Ñ,¨V°VÀdÐ,ÔKØŸ:™:œ<Ùð ð ˜’ØØ%)§[¡[£]°D·K±K³M˜F�FØ�~Ø!%×!2Ñ!2˜Ø!˜>Ü",Ð,Ø�~Ø!%×!2Ñ!2˜Ø!˜>Ü",Ð,Ø—K‘K×,Ñ,¨V°VÀeÐ,ÔLØŸ:™:œ<Ùð ð ˜’Ø—j‘j•làŸ™›ØŸ™›ØŸ™›ØŸ
™
›ØŸ
™
›ØŸ™›ð;Ñ7�B˜˜H c¨5°%ð �}Ü(Ð(Ø�}Ø $× 1Ñ 1˜Ø ˜=Ü",Ð,Ø—K‘K—O‘O B¨¨H°c¸5À%ÐRV�OÔWð —j‘j–lð  ˜’Ø—j‘j”làŸ™›ØŸ™›ØŸ™›ØŸ
™
›ØŸ
™
›ØŸ™›ð;Ñ7�B˜˜H c¨5°%ð �}Ø $× 1Ñ 1˜Ø ˜=Ü",Ð,Ø—K‘K—O‘O B¨¨H°c¸5À%ÐRW�OÔXð —j‘j•lñU r†   N)Ú__name__Ú
__module__Ú__qualname__r…   r�   r“   r–   r›   rŸ   r¦   rÒ   rm   r†   rq   r{   r{     s,   „ ò!ò
òò ò 
òòHó^r†   r{   c                   ó  — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	e	Z
e	Zd„ Zd	„ Zd
„ Zd„ Zd„ Zd„ ZeZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZeZd„ Zd„ Zd„ Zed„ «       Zd„ Z d„ Z!e"ddddfd„Z#e"ddddfd„Z$e"ddddfd„Z%	 	 	 	 	 d!d„Z&e'd „ «       Z(y)"ÚLengthaN  
    SVGLength as used in SVG

    Length class is lazy when solving values. Several conversion values are unknown by default and length simply
    stores that ambiguity. So we can have a length of 50% and without calling .value(relative_length=3000) it will
    simply store as 50%. Likewise, you can have absolute values like 30cm or 20in which are not knowable in pixels
    unless a PPI value is supplied. We can say .value(relative_length=30cm, PPI=96) and solve this for a value like
    12%. We can also convert values between knowable lengths. So 30cm is 300mm regardless whether we know how to
    convert this to pixels. 0% is 0 in any units or relative values. We can convert pixels to pc and pt without issue.
    We can convert vh, vw, vmax, vmin values if we know viewbox values. We can convert em values if we know the
    font_size. We can add values together if they are convertible units e.g. Length("20in") + Length("3cm").

    If .value() cannot solve for the value with the given information then it will return a Length value. If it can
    be solved it will return a float.
    c                 ó6  — t        |«      dk(  rZ|d   }|€d | _        d | _        y t        |«      }t        j                  |«      D ]   }t        |d   «      | _        |d   | _         y  n#t        |«      dk(  r|d   | _        |d   | _        y d| _        d| _        y )Nr¢   r   r   ç        Ú )r¿   ÚamountÚunitsÚstrÚREGEX_LENGTHÚfindallr•   )r„   ÚargsÚkwargsrÌ   rº   r¬   s         rq   r…   zLength.__init__H  s›   € Üˆt‹9˜Š>Ø˜‘GˆEØˆ}Ø"�”Ø!�”
ØÜ�E“
ˆAÜ!×)Ñ)¨!Ö,�Ü# A a¡D›k�”Ø˜q™T�”
Ùñ -ô �‹Y˜!Š^Ø˜q™'ˆDŒKØ˜a™ˆDŒJØØˆŒØˆ�
r†   c                 ó²   — | j                   €y | j                  dk(  r| j                   dz  dz  S | j                  dk(  r| j                   dz  S | j                   S )NÚptç      @ç      @Úpcç      0@)rÛ   rÜ   rƒ   s    rq   Ú	__float__zLength.__float__[  sT   € Ø�;‰;ÐØØ�:‰:˜ÒØ—;‘; Ñ$ sÑ*Ð*Ø�Z‰Z˜4ÒØ—;‘; Ñ%Ð%Ø�{‰{Ðr†   c                 ól  — t        |t        t        f«      r| xj                  |z  c_        | S | j                  dk(  ryt        |t        «      rt        |«      }t        |t
        «      rÇ|j                  dk(  r	d| _        | S | j                  |j                  k(  r!| xj                  |j                  z  c_        | S | j                  dk(  r4|j                  | _        | j                  |j                  z  dz  | _        | S |j                  dk(  r#| j                  |j                  z  dz  | _        | S t        ‚)NrÙ   re   ç      Y@)Ú
isinstancerš   r•   rÛ   rÝ   r×   rÜ   rž   ©r„   Úothers     rq   Ú__imul__zLength.__imul__d  só   € Ü�eœc¤5˜\Ô*Ø�KŠK˜5Ñ �KØˆKØ�;‰;˜#ÒØÜ�eœSÔ!Ü˜5“MˆEÜ�eœVÔ$Ø�|‰|˜sÒ"Ø!�”Ø�Ø�z‰z˜UŸ[™[Ò(Ø—’˜uŸ|™|Ñ+•Ø�Ø�z‰z˜SÒ Ø"Ÿ[™[�”
Ø"Ÿk™k¨E¯L©LÑ8¸5Ñ@�”Ø�Ø—‘ Ò#Ø"Ÿk™k¨E¯L©LÑ8¸5Ñ@�”Ø�ÜÐr†   c                 ó  — t        |t        «      st        |«      }| j                  |j                  k(  r!| xj                  |j                  z  c_        | S | j                  dk(  r$|j                  | _        |j                  | _        | S |j                  dk(  r| S | j                  dk(  s| j                  dk(  r®|j                  dk(  s|j                  dk(  r!| xj                  |j                  z  c_        | S |j                  dk(  r'| xj                  |j                  dz  dz  z  c_        | S |j                  dk(  r$| xj                  |j                  dz  z  c_        | S t        ‚| j                  dk(  r~|j                  dk(  s|j                  dk(  r'| xj                  |j                  dz  dz  z  c_        | S |j                  dk(  r$| xj                  |j                  d	z  z  c_        | S t        ‚| j                  dk(  r{|j                  dk(  s|j                  dk(  r$| xj                  |j                  dz  z  c_        | S |j                  dk(  r$| xj                  |j                  d	z  z  c_        | S t        ‚| j                  d
k(  rl|j                  dk(  r$| xj                  |j                  dz  z  c_        | S |j                  dk(  r$| xj                  |j                  dz  z  c_        | S t        ‚| j                  dk(  rl|j                  d
k(  r$| xj                  |j                  dz  z  c_        | S |j                  dk(  r$| xj                  |j                  dz  z  c_        | S t        ‚| j                  dk(  rl|j                  d
k(  r$| xj                  |j                  dz  z  c_        | S |j                  dk(  r$| xj                  |j                  dz  z  c_        | S t        ‚t	        d| j                  z  «      ‚)Nr   ÚpxrÚ   rã   rä   rå   ræ   rç   ç      (@ÚcmÚmmç      $@ÚinçÂÙ­e2Ù?çeháWQ(¤?z%s units were not determined.)rë   r×   rÜ   rÛ   rž   rì   s     rq   Ú__iadd__zLength.__iadd__|  sb  € Ü˜%¤Ô(Ü˜5“MˆEØ�:‰:˜Ÿ™Ò$Ø�KŠK˜5Ÿ<™<Ñ'�KØˆKØ�;‰;˜!ÒØŸ,™,ˆDŒKØŸ™ˆDŒJØˆKØ�<‰<˜1ÒØˆKØ�:‰:˜Ò §¡¨rÒ!1Ø�{‰{˜dÒ" e§k¡k°RÒ&7Ø—’˜uŸ|™|Ñ+•ð ˆKð —‘ Ò$Ø—’˜uŸ|™|¨cÑ1°CÑ7Ñ7•ð
 ˆKð	 —‘ Ò$Ø—’˜uŸ|™|¨dÑ2Ñ2•ð ˆKô !Ð à�:‰:˜ÒØ�{‰{˜dÒ" e§k¡k°RÒ&7Ø—’˜uŸ|™|¨cÑ1°CÑ7Ñ7•ð
 ˆKð	 —‘ Ò$Ø—’˜uŸ|™|¨dÑ2Ñ2•ð ˆKô !Ð à�Z‰Z˜4ÒØ�{‰{˜dÒ" e§k¡k°RÒ&7Ø—’˜uŸ|™|¨dÑ2Ñ2•ð
 ˆKð	 —‘ Ò$Ø—’˜uŸ|™|¨dÑ2Ñ2•ð ˆKô !Ð à�Z‰Z˜4ÒØ�{‰{˜dÒ"Ø—’˜uŸ|™|¨dÑ2Ñ2•ð
 ˆKð	 —‘ Ò$Ø—’˜uŸ|™|¨hÑ6Ñ6•ð ˆKô !Ð à�Z‰Z˜4ÒØ�{‰{˜dÒ"Ø—’˜uŸ|™|¨dÑ2Ñ2•ð
 ˆKð	 —‘ Ò$Ø—’˜uŸ|™|¨iÑ7Ñ7•ð ˆKô !Ð à�Z‰Z˜4ÒØ�{‰{˜dÒ"Ø—’˜uŸ|™|¨hÑ6Ñ6•ð
 ˆKð	 —‘ Ò$Ø—’˜uŸ|™|¨iÑ7Ñ7•ð ˆKô !Ð äÐ8¸4¿:¹:ÑEÓFÐFr†   c                 óZ   — | j                  «       }t        |j                  «      |_        |S r�   )Ú__copy__ÚabsrÛ   )r„   r¶   s     rq   Ú__abs__zLength.__abs__¼  s!   € Ø�M‰M‹OˆÜ�q—x‘x“=ˆŒØˆr†   c                 ó>  — t        |t        t        f«      r'| j                  «       }|xj                  |z  c_        |S | j                  dk(  ryt        |t
        «      rt        |«      }t        |t        «      r4| j                  |j                  k(  r| j                  |j                  z  }|S | j                  dk(  s| j                  dk(  r–|j                  dk(  s|j                  dk(  r| j                  |j                  z  S |j                  dk(  r| j                  |j                  dz  dz  z  S |j                  dk(  r| j                  |j                  dz  z  S t        ‚| j                  dk(  rn|j                  dk(  s|j                  dk(  r| j                  |j                  dz  dz  z  S |j                  dk(  r| j                  |j                  d	z  z  S t        ‚| j                  dk(  rk|j                  dk(  s|j                  dk(  r| j                  |j                  dz  z  S |j                  dk(  r| j                  |j                  d	z  z  S t        ‚| j                  d
k(  r\|j                  dk(  r| j                  |j                  dz  z  S |j                  dk(  r| j                  |j                  dz  z  S t        ‚| j                  dk(  r\|j                  d
k(  r| j                  |j                  dz  z  S |j                  dk(  r| j                  |j                  dz  z  S t        ‚| j                  dk(  r\|j                  d
k(  r| j                  |j                  dz  z  S |j                  dk(  r| j                  |j                  dz  z  S t        ‚t        ‚)NrÙ   rð   rÚ   rã   rä   rå   ræ   rç   rñ   rò   ró   rô   rõ   rö   r÷   )	rë   rš   r•   rú   rÛ   rÝ   r×   rÜ   rž   )r„   rí   r¶   r¸   s       rq   Ú__truediv__zLength.__truediv__Á  sø  € Ü�eœc¤5˜\Ô*Ø—‘“ˆAØ�HŠH˜Ñ�HØˆHØ�;‰;˜#ÒØÜ�eœSÔ!Ü˜5“MˆEÜ�eœVÔ$Ø�z‰z˜UŸ[™[Ò(Ø—K‘K %§,¡,Ñ.�Ø�Ø�:‰:˜Ò §¡¨rÒ!1Ø�{‰{˜dÒ" e§k¡k°RÒ&7Ø—{‘{ U§\¡\Ñ1Ð1Ø—‘ Ò$Ø—{‘{ e§l¡l°SÑ&8¸3Ñ&>Ñ?Ð?Ø—‘ Ò$Ø—{‘{ e§l¡l°TÑ&9Ñ:Ð:ä Ð Ø�:‰:˜ÒØ�{‰{˜dÒ" e§k¡k°RÒ&7Ø—{‘{ e§l¡l°SÑ&8¸3Ñ&>Ñ?Ð?Ø—‘ Ò$Ø—{‘{ e§l¡l°TÑ&9Ñ:Ð:ä Ð Ø�:‰:˜ÒØ�{‰{˜dÒ" e§k¡k°RÒ&7Ø—{‘{ e§l¡l°TÑ&9Ñ:Ð:Ø—‘ Ò$Ø—{‘{ e§l¡l°TÑ&9Ñ:Ð:ä Ð Ø�:‰:˜ÒØ�{‰{˜dÒ"Ø—{‘{ e§l¡l°TÑ&9Ñ:Ð:Ø—‘ Ò$Ø—{‘{ e§l¡l°XÑ&=Ñ>Ð>ä Ð Ø�:‰:˜ÒØ�{‰{˜dÒ"Ø—{‘{ e§l¡l°TÑ&9Ñ:Ð:Ø—‘ Ò$Ø—{‘{ e§l¡l°YÑ&>Ñ?Ð?ä Ð Ø�:‰:˜ÒØ�{‰{˜dÒ"Ø—{‘{ e§l¡l°XÑ&=Ñ>Ð>Ø—‘ Ò$Ø—{‘{ e§l¡l°YÑ&>Ñ?Ð?ä Ð ÜÐr†   c                 ó&   — | |z
  j                   dk  S ©NrÙ   ©rÛ   rì   s     rq   Ú__lt__zLength.__lt__ÿ  ó   € Ø�u‘×$Ñ$ sÑ*Ð*r†   c                 ó&   — | |z
  j                   dk  S r   r  rì   s     rq   Ú__le__zLength.__le__  ó   € Ø�u‘×$Ñ$¨Ñ+Ð+r†   c                 ó&   — | |z
  j                   dkD  S r   r  rì   s     rq   Ú__gt__zLength.__gt__  r  r†   c                 ó&   — | |z
  j                   dk\  S r   r  rì   s     rq   Ú__ge__zLength.__ge__  r  r†   c                 ó&   — | j                  |«       S r�   ©Ú__eq__rì   s     rq   Ú__ne__zLength.__ne__  ó   € Ø—;‘;˜uÓ%Ð%Ð%r†   c                 ó|   — t        |t        t        t        f«      rt	        |«      }| j                  «       }||z  }|S r�   )rë   rÝ   r•   rš   r×   rú   ©r„   rí   r¶   s      rq   Ú__add__zLength.__add__  s5   € Ü�eœc¤5¬#Ð.Ô/Ü˜5“MˆEØ�M‰M‹OˆØ	ˆU‰
ˆØˆr†   c                 ó&   — t        | «      }||z  }|S r�   r   r  s      rq   Ú__mul__zLength.__mul__  s   € Ü�‹JˆØ	ˆU‰
ˆØˆr†   c                 ó@   — t        | «      }|d|j                  z  z  }|S ©Nç      ð?)r   rÛ   r  s      rq   Ú__rdiv__zLength.__rdiv__  s#   € Ü�‹JˆØ	ˆS�5—<‘<ÑÑˆØˆr†   c                 óJ   — | j                  «       }|j                   |_        |S r�   )rú   rÛ   ©r„   rº   s     rq   Ú__neg__zLength.__neg__!  s   € Ø�M‰M‹OˆØ—H‘H�9ˆŒØˆr†   c                 ó^   — t        |t        t        t        f«      rt	        |«      }| | z  } | S r�   ©rë   rÝ   r•   rš   r×   rì   s     rq   Ú__isub__zLength.__isub__&  s,   € Ü�eœc¤5¬#Ð.Ô/Ü˜5“MˆEØ��‰ˆØˆr†   c                 ó0   — | j                  «       }||z  }|S r�   )rú   )r„   rí   rº   s      rq   Ú__sub__zLength.__sub__,  s   € Ø�M‰M‹OˆØ	ˆU‰
ˆØˆr†   c                 óZ   — t        |t        t        t        f«      rt	        |«      }|  |z   S r�   r  rì   s     rq   Ú__rsub__zLength.__rsub__1  s(   € Ü�eœc¤5¬#Ð.Ô/Ü˜5“MˆEØ�˜‰Ðr†   c                 óB   — t        | j                  | j                  «      S r�   )r×   rÛ   rÜ   rƒ   s    rq   rú   zLength.__copy__6  s   € Ü�d—k‘k 4§:¡:Ó.Ð.r†   c                 ó   — dt        | «      z  S )NzLength('%s')©rÝ   rƒ   s    rq   Ú__repr__zLength.__repr__;  s   € Ø¤ T£Ñ+Ð+r†   c                 ó€   — | j                   €t        S t        j                  | j                   «      ›| j                  ›�S r�   )rÛ   ÚSVG_VALUE_NONEr×   rÝ   rÜ   rƒ   s    rq   Ú__str__zLength.__str__>  s.   € Ø�;‰;ÐÜ!Ð!ÜŸ™ D§K¡KÔ0°$·*²*Ð=Ð=r†   c                 ó  — |€y| j                  «       }t        |t        t        f«      r-|�t	        ||z
  «      t
        k  S |dk(  xr | j                  dk(  S t        |t        «      rt        |«      }| j                  |j                  k(  r| j                  |j                  k(  ry|�(|j                  «       }|�t	        ||z
  «      t
        k  ry| j                  «       }|�(|j                  «       }|�t	        ||z
  «      t
        k  ryy)NFr   T)Ú	in_pixelsrë   r•   rš   rû   ÚERRORrÛ   rÝ   r×   rÜ   Ú	in_inches©r„   rí   rº   Úos       rq   r  zLength.__eq__C  sê   € Øˆ=ØØ�N‰NÓˆÜ�eœe¤S˜\Ô*Øˆ}Ü˜1˜u™9“~¬Ñ.Ð.à ‘zÒ6 d§k¡k°QÑ&6Ð6Ü�eœSÔ!Ü˜5“MˆEØ�;‰;˜%Ÿ,™,Ò&¨4¯:©:¸¿¹Ò+DØØˆ=Ø—‘Ó!ˆAØˆ}Ü�q˜1‘u“:¤Ò&ØØ�N‰NÓˆØˆ=Ø—‘Ó!ˆAØˆ}Ü�q˜1‘u“:¤Ò&ØØr†   c                 ó   — | j                   S r�   r  rƒ   s    rq   Úvalue_in_unitszLength.value_in_units]  s   € à�{‰{Ðr†   c                 óÖ   — | j                   dk(  s| j                   dk(  r| j                  S | j                   dk(  r| j                  dz  dz  S | j                   dk(  r| j                  dz  S y )Nrð   rÚ   rã   rå   rä   ræ   rç   ©rÜ   rÛ   rƒ   s    rq   r+  zLength.in_pixelsa  sa   € Ø�:‰:˜Ò §¡¨rÒ!1Ø—;‘;ÐØ�:‰:˜ÒØ—;‘; Ñ$ sÑ*Ð*Ø�:‰:˜ÒØ—;‘; Ñ%Ð%Ør†   c                 ó²   — | j                   dk(  r| j                  dz  S | j                   dk(  r| j                  dz  S | j                   dk(  r| j                  S y )Nró   r÷   rò   rö   rõ   r3  rƒ   s    rq   r-  zLength.in_inchesj  sQ   € Ø�:‰:˜ÒØ—;‘; Ñ*Ð*Ø�:‰:˜ÒØ—;‘; Ñ)Ð)Ø�:‰:˜ÒØ—;‘;ÐØr†   Nc                 ó€   — | j                  |||||¬«      }||dz  z  }t        dt        j                  |«      z  «      S )N©ÚppiÚrelative_lengthÚ	font_sizeÚfont_heightÚviewboxr÷   z%smm©rÌ   r×   rÝ   ©r„   r7  r8  r9  r:  r;  rÌ   r´   s           rq   Úto_mmzLength.to_mms  sN   € ð —
‘
ØØ+ØØ#Øð ó 
ˆð �S˜9‘_Ñ%ˆÜ�f¤§
¡
¨1£Ñ.Ó/Ð/r†   c                 ó€   — | j                  |||||¬«      }||dz  z  }t        dt        j                  |«      z  «      S )Nr6  rö   z%scmr<  r=  s           rq   Úto_cmzLength.to_cm…  sN   € ð —
‘
ØØ+ØØ#Øð ó 
ˆð �S˜8‘^Ñ$ˆÜ�f¤§
¡
¨1£Ñ.Ó/Ð/r†   c                 óz   — | j                  |||||¬«      }||z  }t        dt        j                  |«      z  «      S )Nr6  z%sinr<  r=  s           rq   Úto_inchzLength.to_inch—  sI   € ð —
‘
ØØ+ØØ#Øð ó 
ˆð �C‰KˆÜ�f¤§
¡
¨1£Ñ.Ó/Ð/r†   c                 óÖ  — | j                   €y | j                  dk(  rr|€| S | j                   dz  }t        |t        t        f«      r||z  S t        |t
        t        f«      r,|| z  }t        |t        «      r|j                  ||||¬«      S |S | S | j                  dk(  r|€| S | j                   |z  dz  S | j                  dk(  r|€| S | j                   |z  dz  S | j                  dk(  r|€| S | j                   |z  S | j                  d	k(  s| j                  d
k(  r| j                   S | j                  dk(  r| j                   dz  dz  S | j                  dk(  r| j                   dz  S | j                  dk(  r|€| S | j                   t        |«      z  S | j                  dk(  r|€| S | j                   t        |«      z  S | j                  dk(  r+|€| S t        |«      }	| j                   |	j                  z  dz  S | j                  dk(  r+|€| S t        |«      }	| j                   |	j                  z  dz  S | j                  dk(  rA|€| S t        |«      }	t        |	j                  |	j                  «      }
| j                   |
z  dz  S | j                  dk(  rA|€| S t        |«      }	t        |	j                  |	j                  «      }
| j                   |
z  dz  S 	 t        | «      S # t        $ r | cY S w xY w)Nre   rê   )r7  r9  r:  r;  ró   r÷   rò   rö   rõ   rð   rÚ   rã   rä   rå   ræ   rç   ÚemÚexÚvwÚvhÚvminÚvmax)rÛ   rÜ   rë   r•   rš   rÝ   r×   rÌ   ÚViewboxr   r   ÚminÚmaxrž   )r„   r7  r8  r9  r:  r;  rá   ÚfractionÚlengthr´   r¬   s              rq   rÌ   zLength.value©  së  € ð �;‰;ÐØØ�:‰:˜ÒØÐ&Ø�Ø—{‘{ UÑ*ˆHÜ˜/¬E´3¨<Ô8Ø /Ñ1Ð1Ü˜O¬c´6¨]Ô;Ø(¨4Ñ/�Ü˜f¤fÔ-Ø!Ÿ<™<ØØ"+Ø$/Ø 'ð	 (ó ð ð �ØˆKØ�:‰:˜ÒØˆ{Ø�Ø—;‘; Ñ$ yÑ0Ð0Ø�:‰:˜ÒØˆ{Ø�Ø—;‘; Ñ$ xÑ/Ð/Ø�:‰:˜ÒØˆ{Ø�Ø—;‘; Ñ$Ð$Ø�:‰:˜Ò §¡¨rÒ!1Ø—;‘;ÐØ�:‰:˜ÒØ—;‘; Ñ$ sÑ*Ð*Ø�:‰:˜ÒØ—;‘; Ñ%Ð%Ø�:‰:˜ÒØÐ Ø�Ø—;‘;¤ yÓ!1Ñ1Ð1Ø�:‰:˜ÒØÐ"Ø�Ø—;‘;¤ {Ó!3Ñ3Ð3Ø�:‰:˜ÒØˆØ�Ü˜Ó ˆAØ—;‘; §¡Ñ(¨5Ñ0Ð0Ø�:‰:˜ÒØˆØ�Ü˜Ó ˆAØ—;‘; §¡Ñ)¨EÑ1Ð1Ø�:‰:˜ÒØˆØ�Ü˜Ó ˆAÜ�A—H‘H˜aŸh™hÓ'ˆAØ—;‘; ‘? UÑ*Ð*Ø�:‰:˜ÒØˆØ�Ü˜Ó ˆAÜ�A—H‘H˜aŸh™hÓ'ˆAØ—;‘; ‘? UÑ*Ð*ð	Ü˜“;ÐøÜò 	ØŠKð	ús   Ë
K ËK(Ë'K(c                 óv  — | €yt        | t        «      ra| j                  dk(  r| j                  } nEd| j                  z  }d|v r |j	                  d«      j	                  d«      }d|›| j                  ›d�S 	 d| z  } d| v r | j	                  d«      j	                  d«      } | S # t
        $ r t        | «      cY S w xY w)Nzn/arÚ   z%.12fÚ.Ú0Ú')rë   r×   rÜ   rÛ   ÚrstripÚ	TypeErrorrÝ   )rº   r¼   s     rq   rÝ   z
Length.strú  s³   € àˆ9ØÜ�aœÔ Ø�w‰w˜"Š}Ø—H‘H‘à˜aŸh™hÑ&�Ø˜!‘8ØŸ™ ›×,Ñ,¨SÓ1�AøÙ#$ a§g£gÐ.Ð.ð	Ø˜!‘ˆAð �!‰8Ø—‘˜“×$Ñ$ SÓ)ˆAØˆøô	 ò 	Ü�q“6ŠMð	ús   Á6B! Â!B8Â7B8)NNNNN))rÓ   rÔ   rÕ   Ú__doc__r…   rè   rî   rø   rü   rþ   Ú__floordiv__Ú__div__r  r  r  r
  r  r  Ú__radd__r  r  r  r  r   r"  rú   Ú__rmul__r&  r)  r  Úpropertyr1  r+  r-  ÚDEFAULT_PPIr>  r@  rB  rÌ   ÚstaticmethodrÝ   rm   r†   rq   r×   r×   7  s  „ ñò ò&òò0>Gò@ò
9ðv €LØ€Gò+ò,ò+ò,ò&òð €Hòò
ò
ò
òò
ò
/ð €Hò,ò>ò
ð4 ñó ðòòð ØØØØó0ð( ØØØØó0ð( ØØØØó0ð( ØØØØóOðb ñó ñr†   r×   c                   ó@  — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
ed;d	„«       Zed;d
„«       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zej0                  d„ «       Zed„ «       Zej0                  d„ «       Zed„ «       Zej0                  d„ «       Zed„ «       Zej0                  d„ «       Zed„ «       Zej0                  d„ «       Zed„ «       Zej0                  d„ «       Zed„ «       Zej0                  d„ «       Zed „ «       Zej0                  d!„ «       Zed"„ «       Z e j0                  d#„ «       Z ed$„ «       Z!ed%„ «       Z"ed&„ «       Z#ed'„ «       Z$e$j0                  d(„ «       Z$ed)„ «       Z%e%j0                  d*„ «       Z%ed+„ «       Z&e&j0                  d,„ «       Z&ed-„ «       Z'ed.„ «       Z(ed/„ «       Z)ed0„ «       Z*ed1„ «       Z+ed2„ «       Z,ed3„ «       Z-ed4„ «       Z.ed5„ «       Z/ed6„ «       Z0e0j0                  d7„ «       Z0d8„ Z1d<d:„Z2y9)=ÚColorz—
    SVG Color Parsing
    Parses different forms of defining colors.

    Including keyword: https://www.w3.org/TR/SVG11/types.html#ColorKeywords
    c                 óš  — d| _         t        |«      }|dk(  r[|d   }t        |t        «      r|j                   | _         �nt        |t        «      r|| _        n÷t        j                  |«      | _         nÜ|dk(  rm|d   }t        |t        «      r|j                   | _         n2t        |t        «      r|| _        nt        j                  |«      | _         t        |d   «      | _        nj|dk(  r,|d   }|d   }|d   }t        j                  |||«      | _         n9|dk(  r4|d   }|d   }|d   }|d   dz  }t        j                  ||||«      | _         d|v r
|d   | _
        d|v r
|d   | _        d	|v r
|d	   | _        d
|v r
|d
   | _        d|v r
|d   | _        d|v r
|d   | _
        d|v r
|d   | _        d|v r
|d   | _        d|v r
|d   | _        d|v r
|d   | _        d|v r
|d   | _        d|v r
|d   | _        d|v r
|d   | _        d|v r
|d   | _        d|v r
|d   | _        d|v r
|d   | _        d|v r
|d   | _        d|v r|d   | _        y y )Nr   r¢   r   é   é   ç     ào@ÚredÚgreenÚblueÚalphaÚopacityrB   r"   ÚbÚrgbÚbgrÚargbÚrgbar²   rº   r®   ÚhueÚ
saturationÚ	lightness)rÌ   r¿   rë   r^  rš   ri  rÒ   r•   rg  Ú
rgb_to_intrc  rd  re  rf  rj  rk  rl  rm  rn  ro  )	r„   rà   rá   Úarglenr´   rB   r"   rh  rg  s	            rq   r…   zColor.__init__  s~  € ØˆŒ
ä�T“ˆØ�QŠ;Ø�Q‘ˆAÜ˜!œUÔ#ØŸW™W�–
Ü˜AœsÔ#Ø�•ä"Ÿ[™[¨›^�•
Ø�qŠ[Ø�Q‘ˆAÜ˜!œUÔ#ØŸW™W�•
Ü˜AœsÔ#Ø�•ä"Ÿ[™[¨›^�”
Ü   a¡›>ˆD�LØ�qŠ[Ø�Q‘ˆAØ�Q‘ˆAØ�Q‘ˆAÜ×)Ñ)¨!¨Q°Ó2ˆD�JØ�qŠ[Ø�Q‘ˆAØ�Q‘ˆAØ�Q‘ˆAØ˜1‘g ‘oˆGÜ×)Ñ)¨!¨Q°°7Ó;ˆDŒJØ�F‰?Ø˜e‘}ˆDŒHØ�fÑØ ™ˆDŒJØ�VÑØ˜v™ˆDŒIØ�fÑØ ™ˆDŒJØ˜ÑØ! )Ñ,ˆDŒLØ�&‰=Ø˜c‘{ˆDŒHØ�&‰=Ø ™ˆDŒJØ�&‰=Ø˜s™ˆDŒIØ�F‰?Ø˜e‘}ˆDŒHØ�F‰?Ø˜e‘}ˆDŒHØ�VÑØ˜v™ˆDŒIØ�VÑØ˜v™ˆDŒIØ�&‰=Ø˜c‘{ˆDŒHØ�&‰=Ø$ S™kˆDŒOØ�&‰=Ø# C™[ˆDŒNØ�F‰?Ø˜e‘}ˆDŒHØ˜6Ñ!Ø$ \Ñ2ˆDŒOØ˜&Ñ Ø# KÑ0ˆD�Nð !r†   c                 ó   — | j                   S r�   ©rÌ   rƒ   s    rq   Ú__int__zColor.__int__\  s   € Ø�z‰zÐr†   c                 ó\   — | j                   €t        | j                   «      S | j                  S r�   )rÌ   rÝ   Úhexrƒ   s    rq   r)  zColor.__str___  s#   € Ø�:‰:ÐÜ�t—z‘z“?Ð"Ø�x‰xˆr†   c                 ó   — dt        | «      z  S )NzColor('%s')r%  rƒ   s    rq   r&  zColor.__repr__d  s   € Øœs 4›yÑ(Ð(r†   c                 óÄ   — | |u ry| j                   }|}t        |t        «      rt        |«      }t        |t        «      r|j                   }|€|d u S |€|d u S |dz  |dz  k(  S )NTl   ÿÿ )rÌ   rë   rÝ   r^  ©r„   rí   ÚfirstÚseconds       rq   r  zColor.__eq__g  ss   € Ø�5‰=ØØ—
‘
ˆØˆÜ�fœcÔ"Ü˜6“]ˆFÜ�fœeÔ$Ø—\‘\ˆFØˆ=Ø˜T�>Ð!Øˆ>Ø˜D�=Ð Ø�zÑ! V¨jÑ%8Ñ8Ð8r†   c                 ó   — | |k(   S r�   rm   rì   s     rq   r  zColor.__ne__v  ó   € Ø˜5‘=Ð Ð r†   c                 óš   — | j                   €t        | j                   «      S t        | j                  | j                  | j                  «      S r�   )rÌ   r^  rc  rd  re  rƒ   s    rq   rü   zColor.__abs__y  s6   € à�:‰:ÐÜ˜Ÿ™Ó$Ð$Ü�T—X‘X˜tŸz™z¨4¯9©9Ó5Ð5r†   c                 ó,  — |dkD  rd}|dk  rd}t         j                  | «      } t         j                  |«      }t         j                  |«      }t        t        |dz  «      «      }t         j                  |«      }| dz  } |dz  }|dz  }| |z  |z  |z  }|S )Nr¢   r  r   rb  é   é   é   )r^  Úcrimprš   Úround)rB   r"   rh  rg  r¼   r¶   s         rq   rp  zColor.rgb_to_int  s’   € à�QŠ;ØˆGØ�QŠ;ØˆGÜ�K‰K˜‹NˆÜ�K‰K˜‹NˆÜ�K‰K˜‹NˆÜ”�g ‘oÓ&Ó'ˆÜ�K‰K˜‹NˆØ	ˆb‰ˆØ	ˆb‰ˆØ	ˆa‰ˆØ�‰E�A‰I˜‰MˆØˆr†   c                 ó  — d„ }|dk(  rd|z  }d|z  }d|z  }nN|dk  r	|d|z   z  }n||z   ||z  z
  }d|z  |z
  }	d ||	|| dz   «      z  }d ||	|| «      z  }d ||	|| dz
  «      z  }t         j                  ||||¬«      }
|
S )	Nc                 ó    — |dk  r|dz  }|dkD  r|dz  }d|z  dk  r| || z
  dz  |z  z   S d|z  dk  r|S d|z  dk  r| || z
  d|z
  z  dz  z   S | S )Nr   r¢   ç      @r  ç       @r`  çUUUUUUå?rm   )Úv1Úv2rG  s      rq   Ú	hue_2_rgbz#Color.hsl_to_int.<locals>.hue_2_rgb’  sƒ   € Ø�AŠvØ�a‘�Ø�AŠvØ�a‘�Ø�R‰x˜#Š~Ø˜R "™W¨™O¨bÑ0Ñ0Ð0Ø�R‰x˜!Š|Ø�	Ø�2‰v˜Š|Ø˜R "™W¨)°rÑ)9Ñ:¸SÑ@Ñ@Ð@ØˆIr†   rÙ   rb  ç      à?r  r   çUUUUUUÕ?)rg  )r^  rp  )r²   rº   r®   rg  rŒ  rB   r"   rh  r‹  rŠ  rÌ   s              rq   Ú
hsl_to_intzColor.hsl_to_int�  s½   € ò	ð �Š8Ø˜‘	ˆAØ˜‘	ˆAØ˜‘	‰Aà�3ŠwØ˜# ™'‘]‘à˜!‘e  A¡Ñ&�Ø�Q‘˜‘ˆBØ™	 " b¨!¨y©/Ó:Ñ:ˆAØ™	 " b¨!Ó,Ñ,ˆAØ™	 " b¨!¨y©/Ó:Ñ:ˆAÜ× Ñ   A q°'Ð Ó:ˆØˆr†   c                 óø  — | �	| t         k(  ryt        j                  | «      }|rt        j	                  | «      S t
        j                  | «      }|r#t        j                  |j                  «       «      S t        j                  | «      }|r#t        j                  |j                  «       «      S t        j                  | «      }|r#t        j                  |j                  «       «      S t        j                  | «      S )z)Parse SVG color, will return a set value.N)r(  ÚREGEX_COLOR_HEXrŠ   r^  Úparse_color_hexÚREGEX_COLOR_RGBÚparse_color_rgbÚgroupsÚREGEX_COLOR_RGB_PERCENTÚparse_color_rgbpÚREGEX_COLOR_HSLÚparse_color_hslÚparse_color_lookup)Úcolor_stringrŠ   s     rq   rÒ   zColor.parse¯  sÇ   € ð Ð <´>Ò#AØÜ×%Ñ% lÓ3ˆÙÜ×(Ñ(¨Ó6Ð6Ü×%Ñ% lÓ3ˆÙÜ×(Ñ(¨¯©«Ó8Ð8Ü'×-Ñ-¨lÓ;ˆÙÜ×)Ñ)¨%¯,©,«.Ó9Ð9Ü×%Ñ% lÓ3ˆÙÜ×(Ñ(¨¯©«Ó8Ð8Ü×'Ñ'¨Ó5Ð5r†   c                 óÆ!  — t        | t        «      st        j                  ddd«      S | j	                  dd«      j                  «       } | dk(  rt        j                  dddd«      S | dk(  rt        j                  ddd	«      S | dk(  rt        j                  d
dd	«      S | dk(  rt        j                  ddd«      S | dk(  rt        j                  dd	d	«      S | dk(  rt        j                  dd	d«      S | dk(  rt        j                  d
d	d	«      S | dk(  rt        j                  ddd«      S | dk(  rt        j                  d	dd«      S | dk(  rt        j                  ddd«      S | dk(  rt        j                  d	dd«      S | dk(  rt        j                  ddd	«      S | dk(  rt        j                  ddd «      S | d!k(  rt        j                  d"d#d#«      S | d$k(  rt        j                  d%d&d'«      S | d(k(  rt        j                  d)d*d+«      S | d,k(  rt        j                  dd	d«      S | d-k(  rt        j                  d.d/d0«      S | d1k(  rt        j                  d	dd2«      S | d3k(  rt        j                  d4d5d6«      S | d7k(  rt        j                  d	dd«      S | d8k(  rt        j                  dd9d:«      S | d;k(  rt        j                  dd	d	«      S | d<k(  rt        j                  ddd=«      S | d>k(  rt        j                  dd=d=«      S | d?k(  rt        j                  d&d@dA«      S | dBk(  rt        j                  dCdCdC«      S | dDk(  rt        j                  dd4d«      S | dEk(  rt        j                  dCdCdC«      S | dFk(  rt        j                  dGdHdI«      S | dJk(  rt        j                  d=dd=«      S | dKk(  rt        j                  dLdIdM«      S | dNk(  rt        j                  d	dOd«      S | dPk(  rt        j                  dQdRdS«      S | dTk(  rt        j                  d=dd«      S | dUk(  rt        j                  dVdWdX«      S | dYk(  rt        j                  dZd[dZ«      S | d\k(  rt        j                  d]d^d=«      S | d_k(  rt        j                  dMd`d`«      S | dak(  rt        j                  dMd`d`«      S | dbk(  rt        j                  ddcdd«      S | dek(  rt        j                  dfddg«      S | dhk(  rt        j                  d	d9di«      S | djk(  rt        j                  ddkd	«      S | dlk(  rt        j                  d/d/d/«      S | dmk(  rt        j                  d/d/d/«      S | dnk(  rt        j                  d0dod	«      S | dpk(  rt        j                  dqdrdr«      S | dsk(  rt        j                  d	dd
«      S | dtk(  rt        j                  drd=dr«      S | duk(  rt        j                  d	dd	«      S | dvk(  rt        j                  ddd«      S | dwk(  rt        j                  ddd	«      S | dxk(  rt        j                  d	dd«      S | dyk(  rt        j                  dzd"d{«      S | d|k(  rt        j                  d}d}d}«      S | d~k(  rt        j                  d}d}d}«      S | dk(  rt        j                  dd}d«      S | d€k(  rt        j                  d�d	dM«      S | d‚k(  rt        j                  d
d	d
«      S | dƒk(  rt        j                  d	d/d„«      S | d…k(  rt        j                  dd†d†«      S | d‡k(  rt        j                  dˆdd‰«      S | dŠk(  rt        j                  d	d	d
«      S | d‹k(  rt        j                  d
dŒdO«      S | d�k(  rt        j                  dŒdŒd«      S | dŽk(  rt        j                  d	d
d«      S | d�k(  rt        j                  d�d‘d«      S | d’k(  rt        j                  d	dd«      S | d“k(  rt        j                  d�d”dŒ«      S | d•k(  rt        j                  d
d}d}«      S | d–k(  rt        j                  d—d	d	«      S | d˜k(  rt        j                  ddd.«      S | d™k(  rt        j                  dgdgdg«      S | dšk(  rt        j                  dod›do«      S | dœk(  rt        j                  dgdgdg«      S | d�k(  rt        j                  d	dždŸ«      S | d k(  rt        j                  d	d+dX«      S | d¡k(  rt        j                  d{dqd¢«      S | d£k(  rt        j                  d'dcd«      S | d¤k(  rt        j                  d¥d¦dQ«      S | d§k(  rt        j                  d¥d¦dQ«      S | d¨k(  rt        j                  d©dd%«      S | dªk(  rt        j                  d	d	d—«      S | d«k(  rt        j                  dd	d«      S | d¬k(  rt        j                  dRddR«      S | d­k(  rt        j                  dd
dŒ«      S | d®k(  rt        j                  d	dd	«      S | d¯k(  rt        j                  d}dd«      S | d°k(  rt        j                  d±dd¢«      S | d²k(  rt        j                  ddd«      S | d³k(  rt        j                  d´dLdg«      S | dµk(  rt        j                  did¶d·«      S | d¸k(  rt        j                  d:d¹dº«      S | d»k(  rt        j                  d¼d½d›«      S | d¾k(  rt        j                  ddd¿«      S | dÀk(  rt        j                  d]dddS«      S | dÁk(  rt        j                  dÂdÃdÄ«      S | dÅk(  rt        j                  dÆdÆd¶«      S | dÇk(  rt        j                  dd	d«      S | dÈk(  rt        j                  d	ddÉ«      S | dÊk(  rt        j                  d	ddË«      S | dÌk(  rt        j                  d	d%d�«      S | dÍk(  rt        j                  ddd}«      S | dÎk(  rt        j                  dÏddŒ«      S | dÐk(  rt        j                  d}d}d«      S | dÑk(  rt        j                  dIdÒdÓ«      S | dÔk(  rt        j                  d	d"d«      S | dÕk(  rt        j                  d	dÖd«      S | d×k(  rt        j                  dzd¶dØ«      S | dÙk(  rt        j                  d›dÚd¢«      S | dÛk(  rt        j                  dÜdÝdÜ«      S | dÞk(  rt        j                  dßd›d›«      S | dàk(  rt        j                  d·d¶di«      S | dák(  rt        j                  d	dâdã«      S | däk(  rt        j                  d	dzdå«      S | dæk(  rt        j                  ddÄdç«      S | dèk(  rt        j                  d	dédê«      S | dëk(  rt        j                  dìd+dì«      S | dík(  rt        j                  d©d—dŒ«      S | dîk(  rt        j                  d}dd}«      S | dïk(  rt        j                  d	dd«      S | dðk(  rt        j                  d[dZdZ«      S | dñk(  rt        j                  dòd/dÉ«      S | dók(  rt        j                  d=dÖdô«      S | dõk(  rt        j                  dd}dö«      S | d÷k(  rt        j                  dødùdú«      S | dûk(  rt        j                  düd=dý«      S | dþk(  rt        j                  d	dd›«      S | dÿk(  rt        j                  d+�d �d«      S | �dk(  rt        j                  dédédé«      S | �dk(  rt        j                  d'dcd«      S | �dk(  rt        j                  �d�dd«      S | �dk(  rt        j                  d¶d}do«      S | �dk(  rt        j                  d¶d}do«      S | �d	k(  rt        j                  d	dd«      S | �d
k(  rt        j                  dd	d«      S | �dk(  rt        j                  �dd‰d„«      S | �dk(  rt        j                  d.d„dO«      S | �dk(  rt        j                  dd}d}«      S | �dk(  rt        j                  d”dkd”«      S | �dk(  rt        j                  d	�d�d«      S | �dk(  rt        j                  �dd—�d«      S | �dk(  rt        j                  d›d‰d›«      S | �dk(  rt        j                  dd%d¹«      S | �dk(  rt        j                  d	d	d	«      S | �dk(  rt        j                  ddd«      S | �dk(  rt        j                  d	d	d«      S | �dk(  rt        j                  d¿ddR«      S 	 t        | «      S # t        $ r t        j                  ddd«      cY S w xY w(  z/Parse SVG Color by Keyword on dictionary lookupr   Ú rÚ   ÚtransparentrÙ   Ú	aliceblueéú   éø   éÿ   éð   Úantiquewhiteéë   é×   ÚaquaÚ
aquamarineé   éÔ   ÚazureÚbeigeéõ   éÜ   Úbisqueéä   éÄ   ÚblackÚblanchedalmondéÍ   re  Ú
bluevioletéŠ   é+   éâ   Úbrowné¥   é*   Ú	burlywoodéÞ   é¸   é‡   Ú	cadetblueé_   éž   é    Ú
chartreuseÚ	chocolateéÒ   éi   é   ÚcoraléP   Úcornflowerblueéd   é•   éí   ÚcornsilkÚcrimsoné   é<   ÚcyanÚdarkblueé‹   ÚdarkcyanÚdarkgoldenrodé†   é   Údarkgrayé©   Ú	darkgreenÚdarkgreyÚ	darkkhakié½   é·   ék   ÚdarkmagentaÚdarkolivegreenéU   é/   Ú
darkorangeéŒ   Ú
darkorchidé™   é2   éÌ   ÚdarkredÚ
darksalmonéé   é–   éz   Údarkseagreené�   é¼   ÚdarkslateblueéH   é=   ÚdarkslategrayéO   ÚdarkslategreyÚdarkturquoiseéÎ   éÑ   Ú
darkvioleté”   éÓ   Údeeppinké“   Údeepskyblueé¿   ÚdimgrayÚdimgreyÚ
dodgerblueé�   Ú	firebrické²   é"   ÚfloralwhiteÚforestgreenÚfuchsiaÚ	gainsboroÚ
ghostwhiteÚgoldÚ	goldenrodéÚ   é    Úgrayé€   Úgreyrd  Úgreenyellowé­   ÚhoneydewÚhotpinké´   Ú	indianredé\   ÚindigoéK   é‚   ÚivoryÚkhakiéæ   ÚlavenderÚlavenderblushÚ	lawngreené|   éü   ÚlemonchiffonÚ	lightblueéØ   Ú
lightcoralÚ	lightcyanéà   ÚlightgoldenrodyellowÚ	lightgrayÚ
lightgreenéî   Ú	lightgreyÚ	lightpinké¶   éÁ   ÚlightsalmonÚlightseagreenéª   ÚlightskyblueÚlightslategrayéw   éˆ   ÚlightslategreyÚlightsteelblueé°   ÚlightyellowÚlimeÚ	limegreenÚlinenÚmagentaÚmaroonÚmediumaquamarineéf   Ú
mediumblueÚmediumorchidéº   Úmediumpurpleép   éÛ   Úmediumseagreené³   éq   Úmediumslateblueé{   éh   Úmediumspringgreenéš   ÚmediumturquoiseÚmediumvioletredéÇ   é   é…   Úmidnightblueé   Ú	mintcreamÚ	mistyroseéá   Úmoccasinéµ   ÚnavajowhiteÚnavyÚoldlaceéý   ÚoliveÚ	olivedrabéŽ   é#   ÚorangeÚ	orangeredéE   ÚorchidéÖ   Úpalegoldenrodéè   Ú	palegreené˜   éû   Úpaleturquoiseé¯   ÚpalevioletredÚ
papayawhipéï   éÕ   Ú	peachpuffé¹   Úperué?   ÚpinkéÀ   éË   ÚpluméÝ   Ú
powderblueÚpurplerc  Ú	rosybrownÚ	royalblueéA   Úsaddlebrowné   Úsalmonér   Ú
sandybrownéô   é¤   é`   Úseagreené.   éW   ÚseashellÚsiennaéR   é-   ÚsilverÚskyblueÚ	slateblueéj   éZ   Ú	slategrayÚ	slategreyÚsnowÚspringgreenÚ	steelblueéF   r   ÚtealÚthistleÚtomatoéc   éG   Ú	turquoiseé@   éÐ   ÚvioletÚwheatÚwhiteÚ
whitesmokeÚyellowÚyellowgreen)rë   rÝ   r^  rp  ÚreplaceÚlowerrš   rž   ©r´   s    rq   rš  zColor.parse_color_lookupÂ  s"  € ô ˜!œSÔ!Ü×#Ñ# A q¨!Ó,Ð,à—	‘	˜#˜rÓ"×(Ñ(Ó*ˆAØ�ÒÜ×#Ñ# A q¨!¨SÓ1Ð1Ø�ÒÜ×#Ñ# C¨¨cÓ2Ð2Ø�ÒÜ×#Ñ# C¨¨cÓ2Ð2Ø�ÒÜ×#Ñ# C¨¨cÓ2Ð2Ø�Š;Ü×#Ñ# A s¨CÓ0Ð0Ø�ÒÜ×#Ñ# C¨¨cÓ2Ð2Ø�Š<Ü×#Ñ# C¨¨cÓ2Ð2Ø�Š<Ü×#Ñ# C¨¨cÓ2Ð2Ø�Š=Ü×#Ñ# C¨¨cÓ2Ð2Ø�Š<Ü×#Ñ# A q¨!Ó,Ð,ØÐ Ò Ü×#Ñ# C¨¨cÓ2Ð2Ø�Š;Ü×#Ñ# A q¨#Ó.Ð.Ø�ÒÜ×#Ñ# C¨¨SÓ1Ð1Ø�Š<Ü×#Ñ# C¨¨RÓ0Ð0Ø�ÒÜ×#Ñ# C¨¨cÓ2Ð2Ø�ÒÜ×#Ñ# B¨¨SÓ1Ð1Ø�ÒÜ×#Ñ# C¨¨aÓ0Ð0Ø�ÒÜ×#Ñ# C¨¨bÓ1Ð1Ø�Š<Ü×#Ñ# C¨¨bÓ1Ð1ØÐ Ò Ü×#Ñ# C¨¨cÓ2Ð2Ø�
Š?Ü×#Ñ# C¨¨cÓ2Ð2Ø�	Š>Ü×#Ñ# C¨¨RÓ0Ð0Ø�Š;Ü×#Ñ# A s¨CÓ0Ð0Ø�
Š?Ü×#Ñ# A q¨#Ó.Ð.Ø�
Š?Ü×#Ñ# A s¨CÓ0Ð0Ø�ÒÜ×#Ñ# C¨¨bÓ1Ð1Ø�
Š?Ü×#Ñ# C¨¨cÓ2Ð2Ø�ÒÜ×#Ñ# A s¨AÓ.Ð.Ø�
Š?Ü×#Ñ# C¨¨cÓ2Ð2Ø�ÒÜ×#Ñ# C¨¨cÓ2Ð2Ø�ÒÜ×#Ñ# C¨¨CÓ0Ð0ØÐ Ò Ü×#Ñ# B¨¨RÓ0Ð0Ø�ÒÜ×#Ñ# C¨¨aÓ0Ð0Ø�ÒÜ×#Ñ# C¨¨SÓ1Ð1Ø�	Š>Ü×#Ñ# C¨¨AÓ.Ð.Ø�ÒÜ×#Ñ# C¨¨cÓ2Ð2Ø�ÒÜ×#Ñ# C¨¨cÓ2Ð2Ø�ÒÜ×#Ñ# B¨¨CÓ0Ð0Ø�ÒÜ×#Ñ# B¨¨BÓ/Ð/Ø�ÒÜ×#Ñ# B¨¨BÓ/Ð/Ø�ÒÜ×#Ñ# A s¨CÓ0Ð0Ø�ÒÜ×#Ñ# C¨¨CÓ0Ð0Ø�
Š?Ü×#Ñ# C¨¨SÓ1Ð1Ø�ÒÜ×#Ñ# A s¨CÓ0Ð0Ø�	Š>Ü×#Ñ# C¨¨cÓ2Ð2Ø�	Š>Ü×#Ñ# C¨¨cÓ2Ð2Ø�ÒÜ×#Ñ# B¨¨SÓ1Ð1Ø�ÒÜ×#Ñ# C¨¨RÓ0Ð0Ø�ÒÜ×#Ñ# C¨¨cÓ2Ð2Ø�ÒÜ×#Ñ# B¨¨RÓ0Ð0Ø�	Š>Ü×#Ñ# C¨¨CÓ0Ð0Ø�ÒÜ×#Ñ# C¨¨cÓ2Ð2Ø�ÒÜ×#Ñ# C¨¨cÓ2Ð2Ø�Š;Ü×#Ñ# C¨¨aÓ0Ð0Ø�ÒÜ×#Ñ# C¨¨bÓ1Ð1Ø�Š;Ü×#Ñ# C¨¨cÓ2Ð2Ø�Š;Ü×#Ñ# C¨¨cÓ2Ð2Ø�Š<Ü×#Ñ# A s¨AÓ.Ð.Ø�ÒÜ×#Ñ# C¨¨bÓ1Ð1Ø�
Š?Ü×#Ñ# C¨¨cÓ2Ð2Ø�	Š>Ü×#Ñ# C¨¨cÓ2Ð2Ø�ÒÜ×#Ñ# C¨¨RÓ0Ð0Ø�Š=Ü×#Ñ# B¨¨3Ó/Ð/Ø�Š<Ü×#Ñ# C¨¨cÓ2Ð2Ø�Š<Ü×#Ñ# C¨¨cÓ2Ð2Ø�
Š?Ü×#Ñ# C¨¨cÓ2Ð2Ø�ÒÜ×#Ñ# C¨¨cÓ2Ð2Ø�ÒÜ×#Ñ# C¨¨aÓ0Ð0Ø�ÒÜ×#Ñ# C¨¨cÓ2Ð2Ø�ÒÜ×#Ñ# C¨¨cÓ2Ð2Ø�ÒÜ×#Ñ# C¨¨cÓ2Ð2Ø�ÒÜ×#Ñ# C¨¨cÓ2Ð2ØÐ&Ò&Ü×#Ñ# C¨¨cÓ2Ð2Ø�ÒÜ×#Ñ# C¨¨cÓ2Ð2Ø�ÒÜ×#Ñ# C¨¨cÓ2Ð2Ø�ÒÜ×#Ñ# C¨¨cÓ2Ð2Ø�ÒÜ×#Ñ# C¨¨cÓ2Ð2Ø�ÒÜ×#Ñ# C¨¨cÓ2Ð2Ø�ÒÜ×#Ñ# B¨¨SÓ1Ð1Ø�ÒÜ×#Ñ# C¨¨cÓ2Ð2ØÐ Ò Ü×#Ñ# C¨¨cÓ2Ð2ØÐ Ò Ü×#Ñ# C¨¨cÓ2Ð2ØÐ Ò Ü×#Ñ# C¨¨cÓ2Ð2Ø�ÒÜ×#Ñ# C¨¨cÓ2Ð2Ø�Š;Ü×#Ñ# A s¨AÓ.Ð.Ø�ÒÜ×#Ñ# B¨¨RÓ0Ð0Ø�Š<Ü×#Ñ# C¨¨cÓ2Ð2Ø�	Š>Ü×#Ñ# C¨¨CÓ0Ð0Ø�Š=Ü×#Ñ# C¨¨AÓ.Ð.ØÐ"Ò"Ü×#Ñ# C¨¨cÓ2Ð2Ø�ÒÜ×#Ñ# A q¨#Ó.Ð.Ø�ÒÜ×#Ñ# C¨¨SÓ1Ð1Ø�ÒÜ×#Ñ# C¨¨cÓ2Ð2ØÐ Ò Ü×#Ñ# B¨¨SÓ1Ð1ØÐ!Ò!Ü×#Ñ# C¨¨cÓ2Ð2ØÐ#Ò#Ü×#Ñ# A s¨CÓ0Ð0ØÐ!Ò!Ü×#Ñ# B¨¨SÓ1Ð1ØÐ!Ò!Ü×#Ñ# C¨¨SÓ1Ð1Ø�ÒÜ×#Ñ# B¨¨CÓ0Ð0Ø�ÒÜ×#Ñ# C¨¨cÓ2Ð2Ø�ÒÜ×#Ñ# C¨¨cÓ2Ð2Ø�
Š?Ü×#Ñ# C¨¨cÓ2Ð2Ø�ÒÜ×#Ñ# C¨¨cÓ2Ð2Ø�Š;Ü×#Ñ# A q¨#Ó.Ð.Ø�	Š>Ü×#Ñ# C¨¨cÓ2Ð2Ø�Š<Ü×#Ñ# C¨¨aÓ0Ð0Ø�ÒÜ×#Ñ# C¨¨bÓ1Ð1Ø�Š=Ü×#Ñ# C¨¨aÓ0Ð0Ø�ÒÜ×#Ñ# C¨¨QÓ/Ð/Ø�Š=Ü×#Ñ# C¨¨cÓ2Ð2Ø�ÒÜ×#Ñ# C¨¨cÓ2Ð2Ø�ÒÜ×#Ñ# C¨¨cÓ2Ð2Ø�ÒÜ×#Ñ# C¨¨cÓ2Ð2Ø�ÒÜ×#Ñ# C¨¨cÓ2Ð2Ø�ÒÜ×#Ñ# C¨¨cÓ2Ð2Ø�ÒÜ×#Ñ# C¨¨cÓ2Ð2Ø�Š;Ü×#Ñ# C¨¨bÓ1Ð1Ø�Š;Ü×#Ñ# C¨¨cÓ2Ð2Ø�Š;Ü×#Ñ# C¨¨cÓ2Ð2Ø�ÒÜ×#Ñ# C¨¨cÓ2Ð2Ø�Š=Ü×#Ñ# C¨¨CÓ0Ð0Ø�Š:Ü×#Ñ# C¨¨AÓ.Ð.Ø�ÒÜ×#Ñ# C¨¨cÓ2Ð2Ø�ÒÜ×#Ñ# B¨¨SÓ1Ð1Ø�ÒÜ×#Ñ# C¨¨RÓ0Ð0Ø�Š=Ü×#Ñ# C¨¨cÓ2Ð2Ø�ÒÜ×#Ñ# C¨¨bÓ1Ð1Ø�
Š?Ü×#Ñ# B¨¨RÓ0Ð0Ø�
Š?Ü×#Ñ# C¨¨cÓ2Ð2Ø�Š=Ü×#Ñ# C©©RÓ0Ð0Ø‘Š=Ü×#Ñ# C¨¨cÓ2Ð2Ø‘	Š>Ü×#Ñ# C¨¨cÓ2Ð2Ø‘ÒÜ×#Ñ#¡C©¨SÓ1Ð1Ø‘ÒÜ×#Ñ# C¨¨cÓ2Ð2Ø‘ÒÜ×#Ñ# C¨¨cÓ2Ð2Ø‘Š;Ü×#Ñ# C¨¨cÓ2Ð2Ø‘ÒÜ×#Ñ# A s¨CÓ0Ð0Ø‘ÒÜ×#Ñ#¡B¨¨SÓ1Ð1Ø‘Š:Ü×#Ñ# C¨¨cÓ2Ð2Ø‘Š;Ü×#Ñ# A s¨CÓ0Ð0Ø‘	Š>Ü×#Ñ# C¨¨cÓ2Ð2Ø‘Š=Ü×#Ñ# C©©RÓ0Ð0Ø‘ÒÜ×#Ñ#¡B¨©SÓ1Ð1Ø‘Š=Ü×#Ñ# C¨¨cÓ2Ð2Ø‘Š<Ü×#Ñ# C¨¨cÓ2Ð2Ø‘Š<Ü×#Ñ# C¨¨cÓ2Ð2Ø‘ÒÜ×#Ñ# C¨¨cÓ2Ð2Ø‘Š=Ü×#Ñ# C¨¨aÓ0Ð0Ø‘ÒÜ×#Ñ# C¨¨bÓ1Ð1ð	-Ü�q“6ˆMøÜò 	-Ü×#Ñ# A q¨!Ó,Ò,ð	-ús   ÁB2
AB= ÁB= AC ÁCAC c                 ó¼  — | j                  d«      }t        |«      }|dk(  rt        |dd d«      S |dk(  r"dj                  |dd «      }t        |d«      }|S |dk(  r;|d   |d   z   |d	   z   |d	   z   |d
   z   |d
   z   |d   z   |d   z   }t        |d«      S |dk(  r*dj                  |d   |d	   |d
   «      }t        |d«      }|S t        j                  ddd«      S )zParse SVG Color by Hex StringÚ#r‚  Nr�  é   z{0}FFra  r   r¢   r   r`  z{0}{0}{1}{1}{2}{2}FF)Úlstripr¿   rš   Úformatr^  rp  )Ú
hex_stringr²   Úsizerº   r´   s        rq   r’  zColor.parse_color_hexø  s  € ð ×Ñ˜cÓ"ˆÜ�1‹vˆØ�1Š9Ü�q˜˜!�u˜b“>Ð!Ø�QŠYØ—‘˜q  !˜uÓ%ˆAÜ�A�r“
ˆAØˆHØ�QŠYØ�!‘�q˜‘t‘˜a ™dÑ" Q q¡TÑ)¨A¨a©DÑ0°1°Q±4Ñ7¸!¸A¹$Ñ>ÀÀ1ÁÑEˆAÜ�q˜"“:ÐØ�QŠYØ&×-Ñ-¨a°©d°A°a±D¸!¸A¹$Ó?ˆAÜ�A�r“
ˆAØˆHÜ×Ñ  1 aÓ(Ð(r†   c                 ó²   — t        | d   «      }t        | d   «      }t        | d   «      }| d   �t        | d   «      }nd}t        j                  ||||«      S )z'Parse SVG Color, RGB value declarationsr   r¢   r   r`  )rš   r•   r^  rp  )ÚvaluesrB   r"   rh  rg  s        rq   r”  zColor.parse_color_rgb  s_   € ô ��q‘	‹NˆÜ��q‘	‹NˆÜ��q‘	‹NˆØ�!‰9Ð Ü˜F 1™IÓ&‰GàˆGÜ×Ñ  1 a¨Ó1Ð1r†   c                 óþ   — d}t        t        | d   «      |z  «      }t        t        | d   «      |z  «      }t        t        | d   «      |z  «      }| d   �t        | d   «      }nd}t        j                  ||||«      S )z/Parse SVG color, RGB percent value declarationsgffffff@r   r¢   r   r`  )r„  r•   r^  rp  )r¼  ÚratiorB   r"   rh  rg  s         rq   r—  zColor.parse_color_rgbp  s…   € ð ˆÜ”%˜˜q™	Ó" UÑ*Ó+ˆÜ”%˜˜q™	Ó" UÑ*Ó+ˆÜ”%˜˜q™	Ó" UÑ*Ó+ˆØ�!‰9Ð Ü˜F 1™IÓ&‰GàˆGÜ×Ñ  1 a¨Ó1Ð1r†   c                 ó"  — t         j                  | d   «      }|j                  }t        | d   «      dz  }|dkD  rd}|dk  rd}t        | d   «      dz  }|dkD  rd}|dk  rd}| d   �t        | d   «      }nd}t        j                  ||||«      S )z'Parse SVG color, HSL value declarationsr   r¢   rê   r  rÙ   r   r`  )ÚAnglerÒ   Úas_turnsr•   r^  r�  )r¼  r²   rº   r®   rg  s        rq   r™  zColor.parse_color_hsl%  s©   € ô �K‰K˜˜q™	Ó"ˆØ�J‰JˆÜ�&˜‘)Ó˜uÑ$ˆØˆqŠ5ØˆAØˆqŠ5ØˆAÜ�&˜‘)Ó˜uÑ$ˆØˆqŠ5ØˆAØˆqŠ5ØˆAØ�!‰9Ð Ü˜F 1™IÓ&‰GàˆGÜ×Ñ  1 a¨Ó1Ð1r†   c                 óŠ   — dt         fd„}dt         fd„} ||«      }t         ||d   «       ||d   «       ||d   «      «      S )zN
        Produces a deterministic distinct color for the given index.
        r3   c                 óì   — t        | dz  «      }| ||z  |z  z  } |gdz  }| dk(  r|S | dz  } t        | dz  «      }t        | dz  «      } | |k  r
| |z  ||<   |S | |z  } | |z  ||<   |dz  }| |z  ||dz  <   |S )NrŽ  r`  r   r¢   ©rš   )r3   ÚnÚpr´   s       rq   Ú_patternz Color.distinct.<locals>._pattern@  s­   € Ü�G 	Ñ*Ó+ˆAØ�q˜1‘u˜q‘yÑ ˆGØ��a‘ˆAØ˜!Š|Ø�Ø�q‰LˆGä�G˜a‘KÓ ˆAÜ˜' Q™,Ó'ˆGØ˜Š{Ø ‘{��!‘Ø�Ø�q‰LˆGà˜a‘<ˆAˆa‰DØ�‰FˆAØ ‘{ˆAˆa�!‰e‰HØˆHr†   rB   c                 ój   — | dz
  }d}t        dd«      D ]  }||dz  z  }|dz  }|dz  }Œ |dz  }|dz  S )Nr¢   r   r‚  r¢  )Úrange)rB   rÌ   r´   Úis       rq   Ú_8bit_reversez%Color.distinct.<locals>._8bit_reverseT  sS   € Ø˜‘EˆEØˆAÜ˜1˜a–[�Ø˜ ™‘O�Ø�a‘�Ø˜!‘‘ð !ð �!‰GˆAØ�t‘8ˆOr†   r   r¢   r   )rš   r^  )ÚclsÚindexrÇ  rË  rÆ  s        rq   ÚdistinctzColor.distinct:  sV   € ð	œcó 	ð(	œSó 	ñ �U‹OˆÜÙ˜!˜A™$ÓÙ˜!˜A™$ÓÙ˜!˜A™$Óó
ð 	
r†   c                 ó:   — | j                   €y | j                   dz	  S )Nr‚  rs  rƒ   s    rq   ri  z	Color.rgbe  s   € à�:‰:ÐØØ�z‰z˜Q‰Ðr†   c                 ó&   — |dz  }|dz  }|| _         y ©Nr‚  r¢  rs  )r„   ri  s     rq   ri  z	Color.rgbk  s   € à�‰	ˆØˆt‰ˆØˆ�
r†   c                 ót   — | j                   €y | j                  dz  | j                  dz  z  | j                  z  S )Nr�  r‚  )rÌ   re  rd  rc  rƒ   s    rq   rj  z	Color.bgrq  s3   € à�:‰:ÐØØ�y‰y˜B‰ §¡¨q¡Ñ0°4·8±8Ñ;Ð;r†   c                 óh   — d| _         d| _        |dz  | _        |dz	  dz  | _        |dz	  dz  | _        y )Nr   r¢  r‚  r�  )rÌ   rf  rc  rd  re  )r„   rj  s     rq   rj  z	Color.bgrw  s;   € àˆŒ
ØˆŒ
Ø˜‘:ˆŒØ˜Q‘h $Ñ&ˆŒ
Ø˜B‘Y $Ñ&ˆ�	r†   c                 ó   — | j                   S r�   rs  rƒ   s    rq   rl  z
Color.rgba  s   € à�z‰zÐr†   c                 ó   — || _         y r�   rs  )r„   rl  s     rq   rl  z
Color.rgbaƒ  s	   € àˆ�
r†   c                 ó`   — | j                   €y | j                   dz	  dz  | j                  dz  z  S )Nr‚  iÿÿÿ r€  ©rÌ   rf  rƒ   s    rq   rk  z
Color.argb‡  s0   € à�:‰:ÐØØ—‘˜q‘ HÑ,°·±¸rÑ1AÑBÐBr†   c                 ó0   — |dz  dz  |dz	  dz  z  | _         y )Nr‚  l    ÿ r€  r¢  rs  )r„   rk  s     rq   rk  z
Color.argb�  s    € à˜q‘y JÑ.°4¸2±:ÀÑ3DÑEˆ�
r†   c                 ó<   — | j                   �| j                  dz  S d S ©Nrb  r×  rƒ   s    rq   rg  zColor.opacity‘  s   € à%)§Z¡ZÐ%;ˆt�z‰z˜EÑ!ÐEÀÐEr†   c                 óŽ   — | j                   €t        ‚t        t        |dz  «      «      }t        j                  |«      }|| _        y rÚ  )rÌ   rž   rš   r„  r^  rƒ  rf  )r„   rg  r¼   s      rq   rg  zColor.opacity•  s9   € à�:‰:ÐÜÐÜ”�g ‘oÓ&Ó'ˆÜ�K‰K˜‹NˆØˆ�
r†   c                 ó<   — | j                   �| j                   dz  S d S ©Nr¢  rs  rƒ   s    rq   rf  zColor.alpha�  s   € à$(§J¡JÐ$:ˆt�z‰z˜DÑ ÐDÀÐDr†   c                 ó¦   — | j                   €t        ‚t        j                  |«      }| xj                   dz  c_         | xj                   |z  c_         y )Ni ÿÿÿ©rÌ   rž   r^  rƒ  )r„   r¼   s     rq   rf  zColor.alpha¡  s:   € à�:‰:ÐÜÐÜ�K‰K˜‹NˆØ�
Š
�eÑ�
Ø�
Š
�a‰Ž
r†   c                 óB   — | j                   �| j                   dz	  dz  S d S )Nr€  r¢  rs  rƒ   s    rq   rc  z	Color.red©  ó$   € à,0¯J©JÐ,B�—
‘
˜bÑ  DÑ(ÐLÈÐLr†   c                 ó¬   — | j                   €t        ‚t        j                  |«      }| xj                   dz  c_         | xj                   |dz  z  c_         y )Nlýÿÿÿ  ~ r€  rß  )r„   rB   s     rq   rc  z	Color.red­  s?   € à�:‰:ÐÜÐÜ�K‰K˜‹NˆØ�
Š
�kÑ!�
Ø�
Š
�a˜2‘gÑŽ
r†   c                 óB   — | j                   �| j                   dz	  dz  S d S )Nr�  r¢  rs  rƒ   s    rq   rd  zColor.greenµ  rá  r†   c                 ó¬   — | j                   €t        ‚t        j                  |«      }| xj                   dz  c_         | xj                   |dz  z  c_         y )Niÿÿ ÿr�  rß  )r„   r"   s     rq   rd  zColor.green¹  s?   € à�:‰:ÐÜÐÜ�K‰K˜‹NˆØ�
Š
�iÑ�
Ø�
Š
�a˜2‘gÑŽ
r†   c                 óB   — | j                   �| j                   dz	  dz  S d S rÑ  rs  rƒ   s    rq   re  z
Color.blueÁ  s#   € à+/¯:©:Ð+A�—
‘
˜a‘ 4Ñ'ÐKÀtÐKr†   c                 ó¬   — | j                   €t        ‚t        j                  |«      }| xj                   dz  c_         | xj                   |dz  z  c_         y )Niÿ ÿÿr‚  rß  )r„   rh  s     rq   re  z
Color.blueÅ  s?   € à�:‰:ÐÜÐÜ�K‰K˜‹NˆØ�
Š
�gÑ�
Ø�
Š
�a˜1‘fÑŽ
r†   c                 ó~   — | j                   €y d| j                  | j                  | j                  | j                  fz  S )Nz#%02x%02x%02x%02x)rÌ   rc  rd  re  rf  rƒ   s    rq   Úhexaz
Color.hexaÍ  s3   € à�:‰:ÐØØ" d§h¡h°·
±
¸D¿I¹IÀtÇzÁzÐ%RÑRÐRr†   c                 óh   — | j                   €y d| j                  | j                  | j                  fz  S )Nz#%02x%02x%02x©rÌ   rc  rd  re  rƒ   s    rq   ÚhexrgbzColor.hexrgbÓ  s-   € à�:‰:ÐØØ $§(¡(¨D¯J©J¸¿	¹	Ð!BÑBÐBr†   c                 ój   — | j                   €y | j                  dk(  r| j                  S | j                  S rÝ  )rÌ   rf  rë  rè  rƒ   s    rq   rv  z	Color.hexÙ  s/   € à�:‰:ÐØØ�:‰:˜ÒØ—;‘;Ðà—9‘9Ðr†   c                 óÎ  — | j                   €y | j                  dz  }| j                  dz  }| j                  dz  }t	        |||«      }t        |||«      }||z
  }|dk(  ry||z
  dz  |dz  z   |z  }||z
  dz  |dz  z   |z  }||z
  dz  |dz  z   |z  }	||k(  r|	|z
  }
n||k(  r	d|z   |	z
  }
nd|z   |z
  }
|
dk  r|
dz  }
|
dkD  r|
dz  }
t        j                  |
«      j                  S )Nrb  r   r‡  rˆ  rŽ  r‰  r¢   )	rÌ   rc  rd  re  rK  rL  rÀ  ÚturnsÚ
as_degrees)r„   rB   r"   rh  Úvar_minÚvar_maxÚ	delta_maxÚdrÚdgÚdbr²   s              rq   rm  z	Color.hueâ  s$  € à�:‰:ÐØØ�H‰H�uÑˆØ�J‰J˜ÑˆØ�I‰I˜ÑˆÜ�a˜˜A“,ˆÜ�a˜˜A“,ˆØ˜gÑ%ˆ	Ø˜Š>ØØ˜!‘˜sÑ" i°#¡oÑ5¸ÑBˆØ˜!‘˜sÑ" i°#¡oÑ5¸ÑBˆØ˜!‘˜sÑ" i°#¡oÑ5¸ÑBˆØ�Š<Ø�R‘‰AØ�'Š\Ø˜bÑ  2Ñ%‰Aà˜bÑ  2Ñ%ˆAØˆqŠ5Ø�‰FˆAØˆqŠ5Ø�‰FˆAÜ�{‰{˜1‹~×(Ñ(Ð(r†   c                 ó\   — | j                   €t        ‚| j                  \  }}}|||f| _        y r�   ©rÌ   rž   Úhsl©r„   r´   r²   rº   r®   s        rq   rm  z	Color.hueý  ó.   € à�:‰:ÐÜÐØ—(‘(‰ˆˆ1ˆaØ�a˜�7ˆ�r†   c                 óö   — | j                   €y | j                  dz  }| j                  dz  }| j                  dz  }t	        |||«      }t        |||«      }||z
  }||k(  ry||z   dk  r|||z   z  S |d|z
  |z
  z  S )Nrb  rÙ   r¢   rˆ  ©rÌ   rc  rd  re  rK  rL  )r„   rB   r"   rh  Úmin_vÚmax_vÚdeltas          rq   rn  zColor.saturation  s•   € à�:‰:ÐØØ�H‰H�uÑˆØ�J‰J˜ÑˆØ�I‰I˜ÑˆÜ�A�q˜!“ˆÜ�A�q˜!“ˆØ˜‘ˆØ�EŠ>ØØ�E‰M˜QÒØ˜E E™MÑ*Ð*à˜C %™K¨%Ñ/Ñ0Ð0r†   c                 ó\   — | j                   €t        ‚| j                  \  }}}|||f| _        y r�   r÷  rù  s        rq   rn  zColor.saturation  rú  r†   c                 óº   — | j                   €y | j                  dz  }| j                  dz  }| j                  dz  }t	        |||«      }t        |||«      }||z   dz  S )Nrb  rˆ  rü  )r„   rB   r"   rh  rý  rþ  s         rq   ro  zColor.lightness  sb   € à�:‰:ÐØØ�H‰H�uÑˆØ�J‰J˜ÑˆØ�I‰I˜ÑˆÜ�A�q˜!“ˆÜ�A�q˜!“ˆØ˜‘ Ñ$Ð$r†   c                 ó\   — | j                   €t        ‚| j                  \  }}}|||f| _        y r�   r÷  rù  s        rq   ro  zColor.lightness'  rú  r†   c                 óz   — | j                   €y | j                  }| j                  }| j                  }||z   |z   dz  S )Ng      ˆ@rê  ©r„   rB   r"   rh  s       rq   Ú	intensityzColor.intensity.  s=   € à�:‰:ÐØØ�H‰HˆØ�J‰JˆØ�I‰IˆØ�A‘˜‘	˜UÑ"Ð"r†   c                 óˆ   — | j                   €y | j                  }| j                  }| j                  }t	        |||«      }|dz  S rÚ  )rÌ   rc  rd  re  rL  )r„   rB   r"   rh  Úcmaxs        rq   Ú
brightnesszColor.brightness7  sA   € à�:‰:ÐØØ�H‰HˆØ�J‰JˆØ�I‰IˆÜ�1�a˜‹|ˆØ�e‰|Ðr†   c                 ó:   — | j                   €y d| j                  z
  S r  )rÌ   r  rƒ   s    rq   Ú	blacknesszColor.blacknessA  s   € à�:‰:ÐØØ�T—_‘_Ñ$Ð$r†   c                 ó˜   — | j                   €y | j                  dz  }| j                  dz  }| j                  dz  }|dz  |dz  z   |dz  z   S )Nrb  g333333Ó?gáz®Gáâ?g)\�Âõ(¼?rê  r  s       rq   Ú	luminancezColor.luminanceG  sU   € à�:‰:ÐØØ�H‰H�uÑˆØ�J‰J˜ÑˆØ�I‰I˜ÑˆØ�3‰w˜˜T™Ñ! A¨¡HÑ,Ð,r†   c                 ó˜   — | j                   €y | j                  dz  }| j                  dz  }| j                  dz  }|dz  |dz  z   |dz  z   S )Nrb  g¼–�z6Ë?g¥,Cëâæ?g]mÅþ²{²?rê  r  s       rq   Úlumaz
Color.lumaP  sU   € à�:‰:ÐØØ�H‰H�uÑˆØ�J‰J˜ÑˆØ�I‰I˜ÑˆØ�6‰z˜A ™JÑ&¨¨V©Ñ3Ð3r†   c                 óè  — t        | t        «      rt        j                  | «      } nt        | t        «      rt        | «      } t        |t        «      rt        j                  |«      }nt        |t        «      rt        |«      }| j
                  }| j                  }| j                  }| j                  }|dk(  r| j                  S |dk(  r|j                  S |j
                  }|j                  }|j                  }|j                  }	d|z
  }
||z  dz  ||	z  |
z  z   }||z  dz  ||	z  |
z  z   }||z  dz  ||	z  |
z  z   }|dz  |	|
z  z   }||z  }||z  }||z  }|dz  }t        j                  ||||«      S )zƒ
        Porter Duff Alpha compositing operation over.
        Returns c1 over c2. This is the standard painter algorithm.
        r¢  r   rb  g     Àï@)rë   rÝ   r^  rÒ   rš   rc  rd  re  rf  rÌ   rp  )Úc1Úc2Úr1Úg1Úb1Úa1Úr2Úg2Úb2Úa2r¸   ÚsrÚsgÚsbÚsas                  rq   Úoverz
Color.overY  se  € ô �bœ#ÔÜ—‘˜R“‰BÜ˜œCÔ Ü�r“ˆBÜ�bœ#ÔÜ—‘˜R“‰BÜ˜œCÔ Ü�r“ˆBØ�V‰VˆØ�X‰XˆØ�W‰WˆØ�X‰XˆØ�Š9Ø—8‘8ˆOØ�Š7Ø—8‘8ˆOØ�V‰VˆØ�X‰XˆØ�W‰WˆØ�X‰Xˆà�B‰Jˆà�"‰W�u‰_˜r B™w¨™{Ñ*ˆØ�"‰W�u‰_˜r B™w¨™{Ñ*ˆØ�"‰W�u‰_˜r B™w¨™{Ñ*ˆØ�%‰Z˜"˜q™&Ñ ˆØ
ˆb‰ˆØ
ˆb‰ˆØ
ˆb‰ˆØ
ˆmÑˆÜ×Ñ  B¨¨BÓ/Ð/r†   c                 ó@   — t        t        j                  | |«      «      S r�   )r   r^  Údistance_sq)r  r  s     rq   ÚdistancezColor.distance€  s   € ä”E×%Ñ% b¨"Ó-Ó.Ð.r†   c                 ó
  — t        | t        «      rt        | «      } nt        | t        «      rt        | «      } t        |t        «      rt        |«      }nt        |t        «      rt        |«      }t        | j                  |j                  z   dz  «      }| j                  |j                  z
  }| j
                  |j
                  z
  }| j                  |j                  z
  }d|z   |z  |z  dz	  d|z  |z  z   d|z
  |z  |z  dz	  z   S )aü  
        Function returns the square of colordistance. The square of the color distance will always be closer than the
        square of another color distance.

        Rather than naive Euclidean distance we use Compuphase's Redmean color distance.
        https://www.compuphase.com/cmetric.htm

        It's computationally simple, and empirical tests finds it to be on par with LabDE2000.

        :param c1: first color
        :param c2: second color
        :return: square of color distance
        rˆ  i   r‚  ra  iÿ  )rë   rÝ   r^  rš   rc  rd  re  )r  r  Úred_meanrB   r"   rh  s         rq   r   zColor.distance_sq„  sæ   € ô �bœ#ÔÜ�r“‰BÜ˜œCÔ Ü�r“ˆBÜ�bœ#ÔÜ�r“‰BÜ˜œCÔ Ü�r“ˆBÜ˜Ÿ™ §¡™¨3Ñ.Ó/ˆØ�F‰F�R—V‘V‰OˆØ�H‰H�r—x‘xÑˆØ�G‰G�b—g‘gÑˆà�X‰~ Ñ" QÑ&¨1Ñ,Ø�1‰u�q‰yñà�x‘ 1Ñ$ qÑ(¨QÑ.ñ0ð	
r†   c                 ó0   — | dkD  ry| dk  ryt        | «      S )Nr¢  r   rÄ  r³  s    rq   rƒ  zColor.crimp¥  s   € àˆsŠ7ØØˆqŠ5ØÜ�1‹vˆr†   c                 ób   — | j                   €y | j                  | j                  | j                  fS r�   )rÌ   rm  rn  ro  rƒ   s    rq   rø  z	Color.hsl­  s(   € à�:‰:ÐØØ�x‰x˜Ÿ™¨$¯.©.Ð8Ð8r†   c                 óŠ   — t        |t        t        f«      sy |d   }|d   }|d   }t        j	                  |||d«      | _        y )Nr   r¢   r   r  )rë   ÚtupleÚlistr^  r�  rÌ   )r„   rÌ   r²   rº   r®   s        rq   rø  z	Color.hsl³  sF   € ä˜%¤%¬ Ô/ØØ�!‰HˆØ�!‰HˆØ�!‰HˆÜ×%Ñ% a¨¨A¨sÓ3ˆ�
r†   c                 ó.   — t         j                  | |«      S r�   )r^  r!  rì   s     rq   Údistance_tozColor.distance_to¼  s   € Ü�~‰~˜d EÓ*Ð*r†   Nc                 óš   — |€t         j                  || «      | _        yt        |«      }||_        t         j                  || «      | _        y)z@
        Blends the given color with the current color.
        N)r^  r  rÌ   rg  )r„   rí   rg  r8   s       rq   ÚblendzColor.blend¿  s=   € ð ˆ?ÜŸ™ E¨4Ó0ˆD�Jä˜%“LˆEØ#ˆEŒMÜŸ™ E¨4Ó0ˆD�Jr†   ©r  r�   )3rÓ   rÔ   rÕ   rU  r…   rt  r)  r&  r  r  rü   r\  rp  r�  rÒ   rš  r’  r”  r—  r™  ÚclassmethodrÎ  rZ  ri  Úsetterrj  rl  rk  rg  rf  rc  rd  re  rè  rë  rv  rm  rn  ro  r  r  r
  r  r  r  r!  r   rƒ  rø  r*  r,  rm   r†   rq   r^  r^    s2  „ ñòC1òJòò
)ò9ò!ò6ð òó ðð  òó ðð< ñ6ó ð6ð$ ñs-ó ðs-ðj	 ñ)ó ð)ð& ñ	2ó ð	2ð ñ
2ó ð
2ð ñ2ó ð2ð( ñ(
ó ð(
ðT ñó ðð
 	‡Z�Zñó ðð
 ñ<ó ð<ð
 	‡Z�Zñ'ó ð'ð ñó ðð 
‡[�[ñó ðð ñCó ðCð
 
‡[�[ñFó ðFð ñFó ðFð ‡^�^ñó ðð ñEó ðEð ‡\�\ñó ðð ñMó ðMð 	‡Z�Zñó ðð ñMó ðMð ‡\�\ñó ðð ñLó ðLð 
‡[�[ñó ðð ñSó ðSð
 ñCó ðCð
 ñó ðð ñ)ó ð)ð4 	‡Z�Zñó ðð ñ1ó ð1ð  ×Ññó ðð ñ%ó ð%ð ×Ññó ðð ñ#ó ð#ð ñó ðð ñ%ó ð%ð
 ñ-ó ð-ð ñ4ó ð4ð ñ$0ó ð$0ðL ñ/ó ð/ð ñ
ó ð
ð@ ñó ðð ñ9ó ð9ð
 	‡Z�Zñ4ó ð4ò+ô	1r†   r^  c                   óJ  — e Zd ZdZd(d„Zd„ Zd„ Zd„ Zd„ Zd„ Z	d	„ Z
d
„ Zd„ Zd„ Zd„ Zd„ Zd„ ZeZd„ Zd„ ZeZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zed„ «       Zed„ «       Zd„ Z d)d„Z!d„ Z"d„ Z#d „ Z$d!„ Z%e&d"„ «       Z'e&d#„ «       Z(e&d$„ «       Z)e&d%„ «       Z*e&d&„ «       Z+e&d'„ «       Z,y)*ÚPointañ  Point is a general subscriptable point class with .x and .y as well as [0] and [1]

    For compatibility with regebro svg.path we accept complex numbers as points x + yj,
    and provide .real and .imag as properties. As well as float and integer values as (v,0) elements.

    With regard to SVG 7.15.1 defining SVGPoint this class provides for matrix transformations.

    Points are only positions in real Euclidean space. This class is not intended to interact with
    the Length class.
    Nc                 óê  — |�r|€pt        |t        «      r<t        j                  |«      d   \  }}t	        |«      | _        t	        |«      | _        y 	 |j                  | _        |j
                  | _        y || _        || _        y # t        $ r Y nw xY w	 |d   | _        |d   | _        y # t        t        f$ r Y nw xY w	 |j                  | _        |j                  | _        y # t        $ r t        ‚w xY wr¡   )rë   rÝ   ÚREGEX_COORD_PAIRrß   r•   rE   rF   ÚAttributeErrorrT  Ú
IndexErrorÚimagÚreal)r„   rE   rF   Ústring_xÚstring_ys        rq   r…   zPoint.__init__×  sñ   € Øˆ=˜Q˜YÜ˜!œSÔ!Ü%5×%=Ñ%=¸aÓ%@ÀÑ%CÑ"�˜(Ü˜x›�”Ü˜x›�”ØðØŸ™�”ØŸ™�”Øð  ˆŒØˆ�øô! "ò ÙðúðØ˜1™�”Ø˜1™�”ØøÜœzÐ*ò Ùðúð ØŸ™�”ØŸ™�”ØøÜ!ò  ä�ð ús0   Á"B Â	BÂBÂB) Â)B;Â:B;Â?"C" Ã"C2c                 ó2   — | j                   | j                  fS r�   ©rE   rF   rƒ   s    rq   Ú__keyzPoint.__keyô  s   € Ø�v‰v�t—v‘vˆ~Ðr†   c                 ó4   — t        | j                  «       «      S r�   )ÚhashÚ_Point__keyrƒ   s    rq   Ú__hash__zPoint.__hash__÷  s   € Ü�D—J‘J“LÓ!Ð!r†   c                 óJ  — |€y	 t        |t        «      st        |«      }t        | j                  t
        «      sNt        | j                  t
        «      s4t        |j                  t
        «      st        |j                  t
        «      r4| j                  |j                  k(  xr | j                  |j                  k(  S t        | j                  |j                  z
  «      t        k  xr) t        | j                  |j                  z
  «      t        k  S # t        $ r	 t        cY S w xY w©NF)	rë   r1  Ú	ExceptionÚNotImplementedrE   r×   rF   rû   r,  rì   s     rq   r  zPoint.__eq__ú  sÑ   € Øˆ=Øð	"Ü˜e¤UÔ+Ü˜e›�ô �t—v‘vœvÔ&Ü˜$Ÿ&™&¤&Ô)Ü˜%Ÿ'™'¤6Ô*Ü˜%Ÿ'™'¤6Ô*à—6‘6˜UŸW™WÑ$Ò:¨¯©°5·7±7Ñ):Ð:Ü�4—6‘6˜EŸG™GÑ#Ó$¬Ñ-ÒP´#°d·f±f¸u¿w¹wÑ6FÓ2GÌ5Ñ2PÐPøô ò 	"Ü!Ò!ð	"ús   …D ÄD"Ä!D"c                 ó   — | |k(   S r�   rm   rì   s     rq   r  zPoint.__ne__  r}  r†   c                  ó   — y©Nr   rm   rƒ   s    rq   Ú__len__zPoint.__len__  ó   € Ør†   c                 óR   — |dk(  r| j                   S |dk(  r| j                  S t        ‚r¡   ©rE   rF   r5  ©r„   Úitems     rq   Ú__getitem__zPoint.__getitem__  s(   € Ø�1Š9Ø—6‘6ˆMØ�QŠYØ—6‘6ˆMäÐr†   c                 óB   — |dk(  r|| _         y |dk(  r|| _        y t        ‚r¡   rK  ©r„   ÚkeyrÌ   s      rq   Ú__setitem__zPoint.__setitem__  s$   € Ø�!Š8ØˆD�FØ�AŠXØˆD�FäÐr†   c                 ó�   — t         j                  | j                  «      }t         j                  | j                  «      }d|›d|›d�S )NzPoint(Ú,rh   )r×   rÝ   rE   rF   ©r„   Úx_strÚy_strs      rq   r&  zPoint.__repr__!  s1   € Ü—
‘
˜4Ÿ6™6Ó"ˆÜ—
‘
˜4Ÿ6™6Ó"‰Ú!&ªÐ.Ð.r†   c                 óB   — t        | j                  | j                  «      S r�   )r1  rE   rF   rƒ   s    rq   rú   zPoint.__copy__&  ó   € Ü�T—V‘V˜TŸV™VÓ$Ð$r†   c                 ó  — 	 d| j                   z  }d|v r |j                  d«      j                  d«      }d| j                  z  }d|v r |j                  d«      j                  d«      }|›d|›�S # t        $ r | j                  «       cY S w xY w)Nz%.12GrP  rQ  rT  )rE   rT  r&  rS  rF   rU  s      rq   r)  zPoint.__str__)  s�   € ð	#Ø˜dŸf™fÑ$ˆEð �%‰<Ø—L‘L Ó%×,Ñ,¨SÓ1ˆEØ˜$Ÿ&™&Ñ ˆØ�%‰<Ø—L‘L Ó%×,Ñ,¨SÓ1ˆEÚ¡Ð'Ð'øô ò 	#Ø—=‘=“?Ò"ð	#ús   ‚A/ Á/BÂ
Bc                 óv  — t        |t        «      rt        |«      }t        |t        «      r5|j                  | «      }|j                  | _        |j
                  | _        | S 	 t        | «      t        |j                  |j
                  «      z  }|j                  | _        |j                  | _        | S # t        $ r Y nw xY w	 t        | «      t        |d   |d   «      z  }|j                  | _        |j                  | _        | S # t        t        f$ r Y nw xY w	 t        | «      t        |j                  |j                  «      z  }|j                  | _        |j                  | _        | S # t        $ r Y nw xY w	 | xj                  |z  c_        | xj
                  |z  c_        | S # t        $ r	 t        cY S w xY wr¡   )rë   rÝ   ÚMatrixÚpoint_in_matrix_spacerE   rF   Úcomplexr7  r6  r4  rT  r5  rC  rD  )r„   rí   r´   r¶   s       rq   rî   zPoint.__imul__5  su  € Ü�eœSÔ!Ü˜5“MˆEÜ�eœVÔ$Ø×+Ñ+¨DÓ1ˆAØ—S‘SˆDŒFØ—S‘SˆDŒFØˆKð	Ü˜“¤¨¯©°·±Ó 9Ñ9ˆAØ—V‘VˆDŒFØ—V‘VˆDŒFØˆKøÜò 	Ùð	úð	Ü˜“¤¨¨a©°%¸±(Ó ;Ñ;ˆAØ—V‘VˆDŒFØ—V‘VˆDŒFØˆKøÜœ:Ð&ò 	Ùð	úð	Ü˜“¤¨¯
©
°E·J±JÓ ?Ñ?ˆAØ—V‘VˆDŒFØ—V‘VˆDŒFØˆKøÜò 	Ùð	úð	"Ø�FŠF�e‰O�FØ�FŠF�e‰O�FØˆKøÜò 	"Ü!Ò!ð	"úsK   Á"AB2 Â2	B>Â=B>ÃAD ÄDÄDÄAE* Å*	E6Å5E6Å:+F& Æ&F8Æ7F8c                 ó€  — t        |t        «      rt        |«      }t        |t        «      r|j                  | «      S 	 t	        t        | «      t        |j                  |j                  «      z  «      S # t        $ r Y nw xY w	 t	        t        | «      t        |d   |d   «      z  «      S # t        t        f$ r Y nw xY w	 t	        t        | «      t        |j                  |j                  «      z  «      S # t        $ r Y nw xY w	 t	        | j                  |z  | j                  |z  «      S # t        $ r	 t        cY S w xY wr¡   )rë   rÝ   r\  r]  r1  r^  rE   rF   r4  rT  r5  r7  r6  rC  rD  rì   s     rq   r  zPoint.__mul__Y  s  € Ü�eœSÔ!Ü˜5“MˆEÜ�eœVÔ$Ø×.Ñ.¨tÓ4Ð4ð	Üœ ›¬°·±¸%¿'¹'Ó)BÑBÓCÐCøÜò 	Ùð	úð	Üœ ›¬°°q±¸5À¹8Ó)DÑDÓEÐEøÜœ:Ð&ò 	Ùð	úð	Üœ ›¬°·±¸U¿Z¹ZÓ)HÑHÓIÐIøÜò 	Ùð	úð	"Ü˜Ÿ™ %™¨¯©°%©Ó8Ð8øÜò 	"Ü!Ò!ð	"úsG   ¾4A3 Á3	A?Á>A?Â&B* Â*B<Â;B<Ã 4C5 Ã5	DÄ DÄ%D+ Ä+D=Ä<D=c                 ó,  — 	 | xj                   |j                   z  c_         | xj                  |j                  z  c_        | S # t        $ r Y nw xY w	 | xj                  |d   z  c_        | xj                   |d   z  c_         | S # t        t        f$ r Y nw xY w	 | xj                   |j
                  z  c_         | xj                  |j                  z  c_        | S # t        $ r Y nw xY w	 | xj                   |z  c_         | S # t        $ r	 t        cY S w xY w©Nr¢   r   ©	rE   rF   r4  rT  r5  r7  r6  rC  rD  rì   s     rq   rø   zPoint.__iadd__q  óó   € ð	Ø�FŠF�e—g‘gÑ�FØ�FŠF�e—g‘gÑ�FØˆKøÜò 	Ùð	úð	Ø�FŠF�e˜A‘hÑ�FØ�FŠF�e˜A‘hÑ�FØˆKøÜœ:Ð&ò 	Ùð	úð	Ø�FŠF�e—j‘jÑ �FØ�FŠF�e—j‘jÑ �FØˆKøÜò 	Ùð	úð	"Ø�FŠF�e‰O�FØˆKøÜò 	"Ü!Ò!ð	"úóG   ‚?A Á	AÁAÁ1B ÂBÂBÂ?C Ã	C&Ã%C&Ã*D ÄDÄDc                 óH  — 	 | j                   |j                   z   }| j                  |j                  z   }t        ||«      S # t        $ r Y nw xY w	 | j                  |d   z   }| j                   |d   z   }t        ||«      S # t        t
        f$ r Y nw xY w	 | j                   |j                  z   }| j                  |j                  z   }t        ||«      S # t        $ r Y nw xY wt        |t        t        f«      r%| j                   |z   }t        || j                  «      S t        S ra  ©rE   rF   r1  r4  rT  r5  r7  r6  rë   r•   rš   rD  ©r„   rí   rE   rF   s       rq   r  zPoint.__add__Š  ó  € ð	Ø—‘˜Ÿ™Ñ ˆAØ—‘˜Ÿ™Ñ ˆAÜ˜˜A“;ÐøÜò 	Ùð	úð	Ø—‘˜˜q™Ñ!ˆAØ—‘˜˜q™Ñ!ˆAÜ˜˜A“;ÐøÜœ:Ð&ò 	Ùð	úð	Ø—‘˜Ÿ™Ñ#ˆAØ—‘˜Ÿ™Ñ#ˆAÜ˜˜A“;ÐøÜò 	Ùð	úä�eœe¤S˜\Ô*Ø—‘˜‘ˆAÜ˜˜DŸF™FÓ#Ð#ÜÐó5   ‚=A  Á 	AÁAÁ/B  Â BÂBÂ=C Ã	C ÃC c                 ó,  — 	 | xj                   |j                   z  c_         | xj                  |j                  z  c_        | S # t        $ r Y nw xY w	 | xj                  |d   z  c_        | xj                   |d   z  c_         | S # t        t        f$ r Y nw xY w	 | xj                   |j
                  z  c_         | xj                  |j                  z  c_        | S # t        $ r Y nw xY w	 | xj                   |z  c_         | S # t        $ r	 t        cY S w xY wra  rb  rì   s     rq   r  zPoint.__isub__¤  rc  rd  c                 óH  — 	 | j                   |j                   z
  }| j                  |j                  z
  }t        ||«      S # t        $ r Y nw xY w	 | j                  |d   z
  }| j                   |d   z
  }t        ||«      S # t        t
        f$ r Y nw xY w	 | j                   |j                  z
  }| j                  |j                  z
  }t        ||«      S # t        $ r Y nw xY wt        |t        t        f«      r%| j                   |z
  }t        || j                  «      S t        S ra  rf  rg  s       rq   r   zPoint.__sub__½  rh  ri  c                 óH  — 	 |j                   | j                   z
  }|j                  | j                  z
  }t        ||«      S # t        $ r Y nw xY w	 |d   | j                  z
  }|d   | j                   z
  }t        ||«      S # t        t
        f$ r Y nw xY w	 |j                  | j                   z
  }|j                  | j                  z
  }t        ||«      S # t        $ r Y nw xY wt        |t        t        f«      r%|| j                   z
  }t        || j                  «      S t        S ra  rf  rg  s       rq   r"  zPoint.__rsub__Õ  s  € ð	Ø—‘˜$Ÿ&™&Ñ ˆAØ—‘˜$Ÿ&™&Ñ ˆAÜ˜˜A“;ÐøÜò 	Ùð	úð	Ø�a‘˜4Ÿ6™6Ñ!ˆAØ�a‘˜4Ÿ6™6Ñ!ˆAÜ˜˜A“;ÐøÜœ:Ð&ò 	Ùð	úð	Ø—
‘
˜TŸV™VÑ#ˆAØ—
‘
˜TŸV™VÑ#ˆAÜ˜˜A“;ÐøÜò 	Ùð	úä�eœe¤S˜\Ô*Ø˜Ÿ™‘ˆAÜ˜˜DŸF™FÓ#Ð#ÜÐri  c                 ó:   — | j                   | j                  dz  z   S )Nù              ð?r;  rƒ   s    rq   Ú__complex__zPoint.__complex__í  s   € Ø�v‰v˜Ÿ™ ™Ñ#Ð#r†   c                 óB   — t        | j                  | j                  «      S r�   )r   rE   rF   rƒ   s    rq   rü   zPoint.__abs__ð  rY  r†   c                 óÄ   — t        | «      |z  }| j                  «       |z  }t        |t        |«      z  «      }t        |t	        |«      z  «      }| j                  ||«      S r�   )rû   Úargzr„  r
   r   Ú	__class__)r„   rí   Úr_raisedÚargz_multipliedÚ	real_partÚ	imag_parts         rq   Ú__pow__zPoint.__pow__ó  sY   € Ü�t“9 Ñ%ˆØŸ)™)›+¨Ñ-ˆä˜(¤S¨Ó%9Ñ9Ó:ˆ	Ü˜(¤S¨Ó%9Ñ9Ó:ˆ	Ø�~‰~˜i¨Ó3Ð3r†   c                 óP   — | j                  | j                  | j                   «      S r�   )rs  r7  r6  rƒ   s    rq   Ú	conjugatezPoint.conjugateû  s   € Ø�~‰~˜dŸi™i¨$¯)©)¨Ó4Ð4r†   c                 óF   — t        | j                  | j                  z  «      S r�   )r   r6  r7  rƒ   s    rq   rr  z
Point.argzþ  s   € Ü�D—I‘I §	¡	Ñ)Ó*Ð*r†   c                 ó   — | j                   S ©z'Emulate svg.path use of complex numbers©rE   rƒ   s    rq   r7  z
Point.real	  ó   € ð �v‰vˆr†   c                 ó   — | j                   S r}  ©rF   rƒ   s    rq   r6  z
Point.imag	  r  r†   c                 ó   — | |z  } | S r�   rm   )r„   rX   s     rq   Úmatrix_transformzPoint.matrix_transform	  s   € Ø�‰ˆØˆr†   c                 óP   — t        |t        «      st        |«      }| ||| z
  z  z  } y r�   ©rë   r1  )r„   Úp2rÛ   s      rq   Úmove_towardszPoint.move_towards	  s(   € Ü˜"œeÔ$Ü�r“ˆBØ�˜"˜t™)Ñ$Ñ$‰r†   c                 ó   — t        | |z
  «      S r�   ©rû   )r„   r†  s     rq   r*  zPoint.distance_to	  s   € Ü�4˜"‘9‹~Ðr†   c                 ór   — || z
  }t         j                  t        |j                  |j                  «      «      S r�   )rÀ  r   r   rF   rE   )r„   r†  rÆ  s      rq   Úangle_tozPoint.angle_to	  s(   € Ø�‰IˆÜ�}‰}œU 1§3¡3¨¯©›_Ó-Ð-r†   c                 óx   — t         j                  | ||«      }|j                  | _        |j                  | _        | S r�   )r1  ÚpolarrE   rF   )r„   Úangler!  r¸   s       rq   Úpolar_tozPoint.polar_to	  s/   € Ü�K‰K˜˜e XÓ.ˆØ—‘ˆŒØ—‘ˆŒØˆr†   c                 ó   — ||| z
  z   S r�   rm   ©r„   rÆ  s     rq   Úreflected_acrosszPoint.reflected_across!	  s   € Ø�A˜‘H‰~Ðr†   c                 óz   — |d   | d   z
  |d   |d   z
  z  |d   | d   z
  |d   |d   z
  z  z
  }|dk(  ry|dkD  ryy)zTDetermine the clockwise, linear, or counterclockwise orientation of the given pointsr¢   r   r   rm   )rÆ  r¸   rB   Úvals       rq   ÚorientationzPoint.orientation$	  s_   € ð �‰t�a˜‘d‰{˜q ™t a¨¡d™{Ñ+¨q°©t°a¸±d©{¸qÀ¹tÀaÈÁd¹{Ñ.KÑKˆØ�!Š8ØØ�1ŠWØàr†   c              #   óÒ   K  — t        | «      dk(  ry t        t        | «      d„ ¬«      }|d   }|}	 |–— |}|D ]#  }||u st        j	                  |||«      dk(  sŒ"|}Œ% |}||u ry Œ6­w)Nr   c                 ó   — | d   S r}   rm   )rÆ  s    rq   Ú<lambda>z#Point.convex_hull.<locals>.<lambda>3	  s   € °°!²r†   )rQ  r   )r¿   ÚsortedÚsetr1  r•  )ÚptsrC   Úfirst_point_on_hullÚpoint_on_hullÚendpointr°   s         rq   Úconvex_hullzPoint.convex_hull/	  s†   è ø€ äˆs‹8�qŠ=ØÜœ˜C›¡nÔ5ˆØ$ Q™iÐØ+ˆØØÒØ$ˆHÛ�à! XÑ-Ü×(Ñ(¨¸¸8ÓDÈÓIà ‘Hð ð %ˆMØ" mÑ3Øð ùs   ‚AA'ÁA'c                 ó^   — | d   |d   z
  }| d   |d   z
  }||z  }||z  }t        ||z   «      S r¡   )r   )Úp1r†  rM   rN   s       rq   r!  zPoint.distanceC	  sD   € à�‰U�R˜‘U‰]ˆØ�‰U�R˜‘U‰]ˆØ
ˆb‰ˆØ
ˆb‰ˆÜ�B˜‘G‹}Ðr†   c                 ój   — t        |«      |z  }t        |«      |z  }t        | d   |z   | d   |z   «      S r¡   )r
   r   r1  )r¡  rŽ  rB   rM   rN   s        rq   r�  zPoint.polarK	  s9   € ä�‹Z˜!‰^ˆÜ�‹Z˜!‰^ˆÜ�R˜‘U˜R‘Z  A¡¨¡Ó,Ð,r†   c                 ód   — t         j                  t        |d   | d   z
  |d   | d   z
  «      «      S ra  )rÀ  r   r   )r¡  r†  s     rq   rŽ  zPoint.angleQ	  s0   € ä�}‰}œU 2 a¡5¨2¨a©5¡=°"°Q±%¸"¸Q¹%±-Ó@ÓAÐAr†   c                 ój   — ||d   | d   z
  z  | d   z   }||d   | d   z
  z  | d   z   }t        ||«      S r¡   )r1  )r¡  r†  rÛ   ÚtxÚtys        rq   ÚtowardszPoint.towardsU	  sL   € à�r˜!‘u˜r !™u‘}Ñ%¨¨1©Ñ-ˆØ�r˜!‘u˜r !™u‘}Ñ%¨¨1©Ñ-ˆÜ�R˜‹}Ðr†   r�   )r¢   )-rÓ   rÔ   rÕ   rU  r…   r?  r@  r  r  rH  rN  rR  r&  rú   r)  rî   r  rY  rø   r  rX  r  r   r"  ro  rü   rx  rz  rr  rZ  r7  r6  rƒ  r‡  r*  r‹  r�  r’  r\  r•  rŸ  r!  r�  rŽ  r§  rm   r†   rq   r1  r1  Ë  sJ  „ ñ	óò:ò"òQò"!òòòò/ò
%ò
(ò""òH"ð, €Hò"ò2ð0 €Hò"ò2ò0ò0$ò%ò4ò5ò+ð ñó ðð ñó ðòó%ò
ò.òòð ñó ðð ñó ðð& ñó ðð ñ-ó ð-ð
 ñBó ðBð ñó ñr†   r1  c                   óÎ   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zed„ «       Z	ed„ «       Z
ed„ «       Zed	„ «       Zed
„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zd„ Zy)rÀ  z$CSS Angle defines as used in SVG/CSSc                 ó   — d| z  S )NzAngle(%.12f)rm   rƒ   s    rq   r&  zAngle.__repr___	  s   € Ø Ñ$Ð$r†   c                 ó   — t        | «      S r�   )rÀ  rƒ   s    rq   rú   zAngle.__copy__b	  ó   € Ü�T‹{Ðr†   c                 óD   — t        | t        z  |t        z  z
  «      dk  }|S )Ng•dyáý¥=)rû   r   )r„   rí   r  s      rq   r  zAngle.__eq__e	  s#   € ä�$œ‘* ¬¡Ñ-Ó.°%Ñ7ˆØˆ	r†   c                 ó&   — t        | t        z  «      S r�   )rÀ  r   rƒ   s    rq   Ú
normalizedzAngle.normalizedj	  s   € Ü�TœC‘ZÓ Ð r†   c                 óz  — t        |t        «      sy |j                  «       }|j                  d«      r!t        j                  t        |d d «      «      S |j                  d«      r!t        j                  t        |d d «      «      S |j                  d«      r!t        j                  t        |d d «      «      S |j                  d«      r!t        j                  t        |d d «      «      S |j                  d«      r$t        j                  t        |d d «      d	z  «      S t        j                  t        |«      «      S )
NÚdegéýÿÿÿÚgradéüÿÿÿÚradÚturnre   éÿÿÿÿrê   )
rë   rÝ   r²  ÚendswithrÀ  r   r•   Úgradiansr   rî  )rÌ  Úangle_strings     rq   rÒ   zAngle.parsem	  s  € ä˜,¬Ô,ØØ#×)Ñ)Ó+ˆØ× Ñ  Ô'Ü—=‘=¤ |°C°RÐ'8Ó!9Ó:Ð:Ø× Ñ  Ô(Ü—>‘>¤%¨°S°bÐ(9Ó":Ó;Ð;Ø× Ñ Øô
ô —=‘=¤ |°C°RÐ'8Ó!9Ó:Ð:Ø× Ñ  Ô(Ü—;‘;œu \°#°2Ð%6Ó7Ó8Ð8Ø× Ñ  Ô%Ü—;‘;œu \°#°2Ð%6Ó7¸%Ñ?Ó@Ð@Ü�}‰}œU <Ó0Ó1Ð1r†   c                 ó   —  | |«      S r�   rm   )rÌ  r   s     rq   r   zAngle.radians€	  s   € á�7‹|Ðr†   c                 ó&   —  | t         |z  dz  «      S ©Nç     €v@r   )rÌ  r   s     rq   r   zAngle.degrees„	  s   € á”3˜‘= 5Ñ(Ó)Ð)r†   c                 ó&   —  | t         |z  dz  «      S ©Ng      y@r   )rÌ  r¸  s     rq   r¸  zAngle.gradiansˆ	  s   € á”3˜‘> EÑ)Ó*Ð*r†   c                 ó    —  | t         |z  «      S r�   r   )rÌ  rî  s     rq   rî  zAngle.turnsŒ	  s   € á”3˜‘;ÓÐr†   c                 ó   — t        | «      S r�   )r•   rƒ   s    rq   Ú
as_radianszAngle.as_radians�	  s   € ä�T‹{Ðr†   c                 ó   — | dz  t         z  S r¼  r   rƒ   s    rq   rï  zAngle.as_degrees”	  ó   € à�e‰|œcÑ!Ð!r†   c                 ó>   — | j                   }|dk  r|dz  }|dk  rŒ|S )Nr   r½  )rï  )r„   r´   s     rq   Úas_positive_degreeszAngle.as_positive_degrees˜	  s)   € à�O‰OˆØ�!ŠeØ�‰JˆAð �!‹eàˆr†   c                 ó   — | dz  t         z  S r¿  r   rƒ   s    rq   Úas_gradianszAngle.as_gradiansŸ	  rÄ  r†   c                 ó   — | t         z  S r�   r   rƒ   s    rq   rÁ  zAngle.as_turns£	  s   € à”c‰zÐr†   c                 ó    — | t         dz  z  dk(  S )Nrä   r   r   rƒ   s    rq   Úis_orthogonalzAngle.is_orthogonal§	  s   € Øœ˜c™	Ñ" qÑ(Ð(r†   N)rÓ   rÔ   rÕ   rU  r&  rú   r  r®  r.  rÒ   r   r   r¸  rî  rZ  rÂ  rï  rÆ  rÈ  rÁ  rË  rm   r†   rq   rÀ  rÀ  \	  sæ   „ Ù.ò%òòò
!ð ñ2ó ð2ð$ ñó ðð ñ*ó ð*ð ñ+ó ð+ð ñ ó ð ð ñó ðð ñ"ó ð"ð ñó ðð ñ"ó ð"ð ñó ðó)r†   rÀ  c                   óº  — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Ze	Ze
ZeZd
„ Zd„ Zd„ Zd„ Zd„ Zed„ «       Zd„ Z	 	 	 	 	 	 	 dHd„Zed„ «       Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z d„ Z!d„ Z"d„ Z#dId„Z$dJd „Z%dJd!„Z&dKd"„Z'dLd#„Z(dLd$„Z)dKd%„Z*dMd&„Z+dNd'„Z,dNd(„Z-d)„ Z.dId*„Z/dJd+„Z0dJd,„Z1dKd-„Z2dLd.„Z3dLd/„Z4dKd0„Z5dMd1„Z6dNd2„Z7dNd3„Z8d4„ Z9d5„ Z:d6„ Z;d7„ Z<e=d8„ «       Z>e=d9„ «       Z?e=d:„ «       Z@e=d;„ «       ZAe=dOd<„«       ZBe=dPd=„«       ZCe=dPd>„«       ZDe=dKd?„«       ZEe=dLd@„«       ZFe=dLdA„«       ZGe=dLdB„«       ZHe=dKdC„«       ZIe=dLdD„«       ZJe=dLdE„«       ZKe=dF„ «       ZLeMdG„ «       ZNy)Qr\  aF  
    Provides svg matrix interfacing.

    SVG 7.15.3 defines the matrix form as:
    [a c  e]
    [b d  f]

    While e and f are defined as floats, they can be for limited periods defined as a Length.
    With regard to CSS, it's reasonable to perform operations like 'transform(20cm, 20cm)' and
    expect these to be treated consistently. Performing other matrix operations in a consistent
    way. However, render must be called to change these parameters into float locations prior to
    any operation which might be used to transform a point or polyline or path object.
    c                 ó  — d| _         d| _        d| _        d| _        d| _        d| _        t        |«      }|dk(  ry |dk(  ry|d   }t        |t        «      r'|sy | j                  |«        | j                  d	i |¤Ž y |d   | _         |d   | _        |d   | _        |d   | _        |d   | _        |d   | _        y |d   | _         |d   | _        |d   | _        |d   | _        |d   | _        |d   | _         | j                  d	i |¤Ž y )
Nr  rÙ   r   r¢   r   r`  ra  r   rm   )r¼   rh  r¶   r6   ÚeÚfr¿   rë   rÝ   rÒ   Úrender)r„   Ú
componentsrá   Úlen_argsr¬   s        rq   r…   zMatrix.__init__º	  s  € ØˆŒØˆŒØˆŒØˆŒØˆŒØˆŒÜ�z“?ˆØ�qŠ=ØØ˜Š]Ø˜1‘ˆAÜ˜!œSÔ!ÙØØ—
‘
˜1”Ø�—‘Ñ%˜fÓ%à˜1™�”Ø˜1™�”Ø˜1™�”Ø˜1™�”Ø˜1™�”Ø˜1™�•à ‘]ˆDŒFØ ‘]ˆDŒFØ ‘]ˆDŒFØ ‘]ˆDŒFØ ‘]ˆDŒFØ ‘]ˆDŒFØˆD�K‰KÑ!˜&Ó!r†   c                 ó&   — | j                  |«       S r�   r  rì   s     rq   r  zMatrix.__ne__Û	  r  r†   c                 óŽ  — |€yt        |t        «      rt        |«      }t        |t        «      syt        | j                  |j                  z
  «      dkD  ryt        | j
                  |j
                  z
  «      dkD  ryt        | j                  |j                  z
  «      dkD  ryt        | j                  |j                  z
  «      dkD  ry| j                  |j                  k7  r&t        | j                  |j                  z
  «      dkD  ry| j                  |j                  k7  r&t        | j                  |j                  z
  «      dkD  ryy)NFr   T)
rë   rÝ   r\  rû   r¼   rh  r¶   r6   rÎ  rÏ  rì   s     rq   r  zMatrix.__eq__Þ	  sù   € Øˆ=ØÜ�eœSÔ!Ü˜5“MˆEÜ˜%¤Ô(ØÜˆt�v‰v˜Ÿ™ÑÓ  5Ò(ØÜˆt�v‰v˜Ÿ™ÑÓ  5Ò(ØÜˆt�v‰v˜Ÿ™ÑÓ  5Ò(ØÜˆt�v‰v˜Ÿ™ÑÓ  5Ò(ØØ�6‰6�U—W‘WÒ¤ T§V¡V¨e¯g©gÑ%5Ó!6¸Ò!>ØØ�6‰6�U—W‘WÒ¤ T§V¡V¨e¯g©gÑ%5Ó!6¸Ò!>ØØr†   c                  ó   — y)Nr¶  rm   rƒ   s    rq   rH  zMatrix.__len__ó	  rI  r†   c                 óB   — | j                  «       }|j                  «       S r�   )rú   Úinverse©r„   r¬   s     rq   Ú
__invert__zMatrix.__invert__ö	  s   € Ø�M‰M‹OˆØ�y‰y‹{Ðr†   c                 ó>   — t        | «      }|j                  |«       |S r�   ©r   Ú__imatmul__©r„   rí   r¬   s      rq   Ú
__matmul__zMatrix.__matmul__ú	  ó   € Ü�‹JˆØ	�‰�eÔØˆr†   c                 ó>   — t        |«      }|j                  | «       |S r�   rÛ  rÝ  s      rq   Ú__rmatmul__zMatrix.__rmatmul__ÿ	  ó   € Ü�‹KˆØ	�‰�dÔØˆr†   c                 ó²   — t        |t        «      rt        |«      }t        j                  | |«      \  | _        | _        | _        | _        | _        | _	        | S r�   )
rë   rÝ   r\  Úmatrix_multiplyr¼   rh  r¶   r6   rÎ  rÏ  rì   s     rq   rÜ  zMatrix.__imatmul__
  sJ   € Ü�eœSÔ!Ü˜5“MˆEÜ9?×9OÑ9OØ�%ó:
Ñ6ˆŒ�”˜œ ¤¨¬°´ð ˆr†   c                 ó  — |dk(  rt        | j                  «      S |dk(  rt        | j                  «      S |dk(  rt        | j                  «      S |dk(  rt        | j                  «      S |dk(  r| j
                  S |dk(  r| j                  S y ©Nr   r¢   r   r`  ra  r   )r•   r¼   rh  r¶   r6   rÎ  rÏ  rL  s     rq   rN  zMatrix.__getitem__
  s{   € Ø�1Š9Ü˜Ÿ™“=Ð Ø�QŠYÜ˜Ÿ™“=Ð Ø�QŠYÜ˜Ÿ™“=Ð Ø�QŠYÜ˜Ÿ™“=Ð Ø�QŠYØ—6‘6ˆMØ�QŠYØ—6‘6ˆMð r†   c                 ó    — |dk(  r|| _         y |dk(  r|| _        y |dk(  r|| _        y |dk(  r|| _        y |dk(  r|| _        y |dk(  r|| _        y y ræ  ©r¼   rh  r¶   r6   rÎ  rÏ  rP  s      rq   rR  zMatrix.__setitem__
  s[   € Ø�!Š8ØˆD�FØ�AŠXØˆD�FØ�AŠXØˆD�FØ�AŠXØˆD�FØ�AŠXØˆD�FØ�AŠXØˆD�Fð r†   c                 óˆ  — dt         j                  | j                  «      ›dt         j                  | j                  «      ›dt         j                  | j                  «      ›dt         j                  | j
                  «      ›dt         j                  | j                  «      ›dt         j                  | j                  «      ›d�S )NzMatrix(ú, rh   )r×   rÝ   r¼   rh  r¶   r6   rÎ  rÏ  rƒ   s    rq   r&  zMatrix.__repr__,
  sl   � ä�J‰J�t—v‘vÕÜ�J‰J�t—v‘vÕÜ�J‰J�t—v‘vÕÜ�J‰J�t—v‘vÕÜ�J‰J�t—v‘vÕÜ�J‰J�t—v‘vÕð
ð 	
r†   c                 óš   — t        | j                  | j                  | j                  | j                  | j
                  | j                  «      S r�   )r\  r¼   rh  r¶   r6   rÎ  rÏ  rƒ   s    rq   rú   zMatrix.__copy__6
  s/   € Ü�d—f‘f˜dŸf™f d§f¡f¨d¯f©f°d·f±f¸d¿f¹fÓEÐEr†   c                 ó�   — d| j                   | j                  | j                  | j                  | j                  | j
                  fz  S )zs
        Many of SVG's graphics operations utilize 2x3:

        :returns string representation of matrix.
        z[%3f, %3f,
 %3f, %3f,   %s, %s])r¼   r¶   rh  r6   rÎ  rÏ  rƒ   s    rq   r)  zMatrix.__str__9
  s@   € ð 2Ø�F‰FØ�F‰FØ�F‰FØ�F‰FØ�F‰FØ�F‰Fð5
ñ 
ð 	
r†   c                 óh   — t        dd«      }|| z  }t        dd«      }|| z  }|j                  |«      S ra  )r1  r‹  ©r„   ÚprxÚorigins      rq   rÐ   zMatrix.rotationH
  s9   € ä�A�q‹kˆØˆt‰ˆÜ�q˜!“ˆØ�$‰ˆØ�‰˜sÓ#Ð#r†   c                 ó>
  — |syt        |t        «      st        d«      ‚t        j	                  |j                  «       «      D �]‚  }|d   }t        t        j	                  |d   «      «      }|D ��cg c]
  \  }}||z   ‘Œ }}}t        |k(  r t        t        |«      } | j                  |Ž  Œjt        |k(  rM	 t        |d   «      j                  «       }	 t        |d   «      j                  «       }| j!                  ||«       ŒÀt"        |k(  r-| j!                  t        |d   «      j                  «       d«       Œöt$        |k(  r.| j!                  dt        |d   «      j                  «       «       �Œ-t&        |k(  r!t        t        |«      } | j(                  |Ž  �ŒWt*        |k(  r | j)                  t        |d   «      d«       �Œ€t,        |k(  r | j)                  dt        |d   «      «       �Œ©t.        |k(  rgt0        j3                  |d   «      }		 t        |d   «      j                  «       }	 t        |d   «      j                  «       }| j5                  |	||«       �Œt6        |k(  r�t0        j3                  |d   «      }
	 t0        j3                  |d   «      }	 t        |d   «      j                  «       }	 t        |d   «      j                  «       }| j9                  |
|||«       �Œ£t:        |k(  rgt0        j3                  |d   «      }
	 t        |d   «      j                  «       }	 t        |d   «      j                  «       }| j=                  |
||«       �Œt>        |k(  s�Œt0        j3                  |d   «      }	 t        |d   «      j                  «       }	 t        |d   «      j                  «       }| jA                  |||«       �Œ… | S c c}}w # t        $ r Y �Œšw xY w# t        $ r | j!                  |«       Y �Œ»w xY w# t        $ r | j5                  |	«       Y �ŒÜw xY w# t        $ r | j5                  |	|«       Y �Œþw xY w# t        $ r Y �Œw xY w# t        $ r | j9                  |
|«       Y �Œ0w xY w# t        $ r | j9                  |
||«       Y �ŒSw xY w# t        $ r | j=                  |
«       Y �Œtw xY w# t        $ r | j=                  |
|«       Y �Œ–w xY w# t        $ r | jA                  |«       Y �Œ·w xY w# t        $ r | jA                  ||«       Y �ŒÙw xY w)aâ  Parses the svg transform string.

        Transforms from SVG 1.1 have a smaller complete set of operations. Whereas in SVG 2.0 they gain
        the CSS transforms and the additional functions and parsing that go with that. This parse is
        compatible with SVG 1.1 and the SVG 2.0 which includes the CSS 2d superset.

        CSS transforms have scalex() scaley() translatex(), translatey(), and skew() (deprecated).
        2D CSS angles haves units: "deg" tau / 360, "rad" tau/tau, "grad" tau/400, "turn" tau.
        2D CSS distances have length/percentages: "px", "cm", "mm", "in", "pt", etc. (+|-)?d+%

        In the case of percentages there must be a known height and width to properly create a matrix out of that.

        NzMust provide a string to parser   r¢   r   r`  )!rë   rÝ   rT  ÚREGEX_TRANSFORM_TEMPLATErß   r²  r'  ÚREGEX_TRANSFORM_PARAMETERÚSVG_TRANSFORM_MATRIXÚmapr•   Úpre_catÚSVG_TRANSFORM_TRANSLATEr×   rÌ   r5  Úpre_translateÚSVG_TRANSFORM_TRANSLATE_XÚSVG_TRANSFORM_TRANSLATE_YÚSVG_TRANSFORM_SCALEÚ	pre_scaleÚSVG_TRANSFORM_SCALE_XÚSVG_TRANSFORM_SCALE_YÚSVG_TRANSFORM_ROTATErÀ  rÒ   Ú
pre_rotateÚSVG_TRANSFORM_SKEWÚpre_skewÚSVG_TRANSFORM_SKEW_XÚ
pre_skew_xÚSVG_TRANSFORM_SKEW_YÚ
pre_skew_y)r„   Útransform_strÚsub_elementÚnameÚparamsÚmagrÜ   Úx_paramÚy_paramrŽ  Úangle_aÚangle_bs               rq   rÒ   zMatrix.parseP
  s™  € ñ ØÜ˜-¬Ô-ÜÐ<Ó=Ð=ä3×;Ñ;¸M×<OÑ<OÓ<Q×RˆKØ˜q‘>ˆDÜÔ4×<Ñ<¸[È¹^ÓLÓMˆFÙ4:Ô;±F¡j c¨5�c˜E“k°FˆFÑ;Ü# tÒ+ÜœU FÓ+�Ø�—‘˜fÒ%Ü(¨DÒ0ðÜ$ V¨A¡YÓ/×5Ñ5Ó7�Gð0Ü$ V¨A¡YÓ/×5Ñ5Ó7�GØ×&Ñ& w°Õ8ô +¨dÒ2Ø×"Ñ"¤6¨&°©)Ó#4×#:Ñ#:Ó#<¸aÕ@Ü*¨dÒ2Ø×"Ñ" 1¤f¨V°A©YÓ&7×&=Ñ&=Ó&?Ö@Ü$¨Ò,ÜœU FÓ+�Ø�—‘ Ó'Ü&¨$Ò.Ø—‘œu V¨A¡YÓ/°Ö3Ü&¨$Ò.Ø—‘˜q¤%¨¨q©	Ó"2Ö3Ü%¨Ò-ÜŸ™ F¨1¡IÓ.�ðÜ$ V¨A¡YÓ/×5Ñ5Ó7�Gð4Ü$ V¨A¡YÓ/×5Ñ5Ó7�GØ—O‘O E¨7°GÖ<ô $ tÒ+ÜŸ+™+ f¨Q¡iÓ0�ðÜ#Ÿk™k¨&°©)Ó4�GðÜ$ V¨A¡YÓ/×5Ñ5Ó7�Gð=Ü$ V¨A¡YÓ/×5Ñ5Ó7�GØ—M‘M '¨7°G¸WÖEô &¨Ò-ÜŸ+™+ f¨Q¡iÓ0�ðÜ$ V¨A¡YÓ/×5Ñ5Ó7�Gð6Ü$ V¨A¡YÓ/×5Ñ5Ó7�GØ—O‘O G¨W°gÖ>ô &¨Ô-ÜŸ+™+ f¨Q¡iÓ0�ðÜ$ V¨A¡YÓ/×5Ñ5Ó7�Gð6Ü$ V¨A¡YÓ/×5Ñ5Ó7�GØ—O‘O G¨W°gÖ>ð[ Sð` ˆùó[ <øô "ò Úðûô
 "ò 0Ø×&Ñ& w×/ð0ûô" "ò Ø—O‘O EÔ*Úðûô "ò 4Ø—O‘O E¨7×3ð4ûô "ò Úðûô "ò Ø—M‘M '¨7Ô3Úðûô "ò =Ø—M‘M '¨7°G×<ð=ûô "ò Ø—O‘O GÔ,Úðûô "ò 6Ø—O‘O G¨W×5ð6ûô "ò Ø—O‘O GÔ,Úðûô "ò 6Ø—O‘O G¨W×5ð6úsÌ   Á1O
Â6OÃ.O ÈPÈ*/P"É=QÊQÊ30Q6ÌRÌ$/R:Í9SÎ/S=Ï	OÏOÏ O>Ï=O>ÐPÐPÐ"QÑ QÑ	QÑQÑQ3Ñ2Q3Ñ6RÒRÒR7Ò6R7Ò:SÓSÓS:Ó9S:Ó=TÔTNc                 ó  — t        | j                  t        «      r+|€|�|}| j                  j                  |||||¬«      | _        t        | j                  t        «      r+|€|�|}| j                  j                  |||||¬«      | _        | S )z¶
        Provides values to turn trans_x and trans_y values into user units floats rather
        than Lengths by giving the required information to perform the conversions.
        r6  )rë   rÎ  r×   rÌ   rÏ  )	r„   r7  r8  r   r   r9  r:  r;  rá   s	            rq   rÐ  zMatrix.renderµ
  s—   € ô �d—f‘fœfÔ%Øˆ} Ð!<Ø'�Ø—V‘V—\‘\ØØ %Ø#Ø'Øð "ó ˆDŒFô �d—f‘fœfÔ%Øˆ~ /Ð"=Ø(�Ø—V‘V—\‘\ØØ &Ø#Ø'Øð "ó ˆDŒFð ˆr†   c                 óh   — | j                   | j                  z  | j                  | j                  z  z
  S r�   )r¼   r6   r¶   rh  rƒ   s    rq   ÚdeterminantzMatrix.determinantÛ
  s%   € à�v‰v˜Ÿ™‰ §¡¨$¯&©&¡Ñ0Ð0r†   c                 ó   — | j                   S r�   )rÎ  rƒ   s    rq   Úvalue_trans_xzMatrix.value_trans_xß
  ó   € Ø�v‰vˆr†   c                 ó   — | j                   S r�   )rÏ  rƒ   s    rq   Úvalue_trans_yzMatrix.value_trans_yâ
  r  r†   c                 ó,   — t        | j                  «      S r�   )r•   r¼   rƒ   s    rq   Úvalue_scale_xzMatrix.value_scale_xå
  ó   € Ü�T—V‘V‹}Ðr†   c                 ó,   — t        | j                  «      S r�   )r•   r6   rƒ   s    rq   Úvalue_scale_yzMatrix.value_scale_yè
  r  r†   c                 ó,   — t        | j                  «      S r�   )r•   rh  rƒ   s    rq   Úvalue_skew_xzMatrix.value_skew_xë
  r  r†   c                 ó,   — t        | j                  «      S r�   )r•   r¶   rƒ   s    rq   Úvalue_skew_yzMatrix.value_skew_yî
  r  r†   c                 óX   — d| _         d| _        d| _        d| _        d| _        d| _        y)zResets matrix to identity.r  rÙ   Nrè  rƒ   s    rq   ÚresetzMatrix.resetñ
  s,   € àˆŒØˆŒØˆŒØˆŒàˆŒØˆ�r†   c                 óV  — | j                   }| j                  }| j                  }| j                  }| j                  }| j
                  }||z  ||z  z
  }d|z  }||z  | _         | |z  | _        | |z  | _        ||z  | _        ||z  ||z  z
  |z  | _        ||z  ||z  z
  |z  | _        | S )z=
        SVG Matrix:
        [a c e]
        [b d f]
        r  ©r¼   r¶   rÎ  rh  r6   rÏ  )	r„   Úm00Úm01Úm02Úm10Úm11Úm12r  Úinverse_determinants	            rq   r×  zMatrix.inverseû
  sÈ   € ð �f‰fˆØ�f‰fˆØ�f‰fˆØ�f‰fˆØ�f‰fˆØ�f‰fˆØ˜C‘i #¨¡)Ñ+ˆØ! KÑ/ÐØÐ*Ñ*ˆŒØ�Ð+Ñ+ˆŒØ�Ð+Ñ+ˆŒØÐ*Ñ*ˆŒà˜‘)˜c C™iÑ'Ð+>Ñ>ˆŒØ˜‘)˜c C™iÑ'Ð+>Ñ>ˆŒØˆr†   c                 ór   — t        | j                  | j                  | j                  | j                  dd«      S )a3  
        provide the matrix suitable for multiplying vectors. This will be the matrix with the same rotation and scale
        aspects but with no translation. This matrix is for multiplying vector elements where the position doesn't
        matter but the scaling and rotation do.
        :return:
        rÙ   )r\  r¼   rh  r¶   r6   rƒ   s    rq   ÚvectorzMatrix.vector  s)   € ô �d—f‘f˜dŸf™f d§f¡f¨d¯f©f°c¸3Ó?Ð?r†   c                 óÊ   — | j                   dk(  xrS | j                  dk(  xrB | j                  dk(  xr1 | j                  dk(  xr  | j                  dk(  xr | j
                  dk(  S ra  rè  rƒ   s    rq   Úis_identityzMatrix.is_identity  sh   € à�F‰F�a‰Kò Ø—‘˜!‘òà—‘˜!‘òð —‘˜!‘òð —‘˜!‘ò	ð
 —‘˜!‘ð	
r†   c                 ó6   — t        |Ž }| j                  |«       y r�   )r\  rÜ  ©r„   rÑ  Úmxs      rq   Úpost_catzMatrix.post_cat%  s   € Ü�ZÐ ˆØ×Ñ˜Õr†   c                 óì   — |€|}|€d}|€d}|dk(  r+|dk(  r&| j                  t        j                  ||«      «       y | j                  | | «       | j	                  ||«       | j                  ||«       y ©NrÙ   r   )r3  r\  rZ   Úpost_translateÚ
post_scale©r„   ÚsxÚsyrE   rF   s        rq   r7  zMatrix.post_scale)  sv   € Øˆ:ØˆBØˆ9ØˆAØˆ9ØˆAØ�Š6�a˜1’fØ�M‰Mœ&Ÿ,™, r¨2Ó.Õ/à×Ñ   Q BÔ'Ø�O‰O˜B Ô#Ø×Ñ  1Õ%r†   c                 ó,   — | j                  |d||«       y ©Nr¢   ©r7  ©r„   r9  rE   rF   s       rq   Úpost_scale_xzMatrix.post_scale_x7  s   € Ø�‰˜˜A˜q !Õ$r†   c                 ó,   — | j                  d|||«       y r<  r=  ©r„   r:  rE   rF   s       rq   Úpost_scale_yzMatrix.post_scale_y:  s   € Ø�‰˜˜2˜q !Õ$r†   c                 óN   — | j                  t        j                  ||«      «       y r�   )r3  r\  rY   ©r„   r¥  r¦  s      rq   r6  zMatrix.post_translate=  s   € Ø�‰”f×&Ñ& r¨2Ó.Õ/r†   c                 ó(   — | j                  |d«       y r   ©r6  ©r„   r¥  s     rq   Úpost_translate_xzMatrix.post_translate_x@  s   € Ø×Ñ˜B Õ$r†   c                 ó(   — | j                  d|«       y r   rF  ©r„   r¦  s     rq   Úpost_translate_yzMatrix.post_translate_yC  s   € Ø×Ñ˜C Õ$r†   c                 ó<  — |€d}|€d}|dk(  r*|dk(  r%| j                  t        j                  |«      «       y t        «       }|j                  | | «       |j                  t        j                  |«      «       |j                  ||«       | j                  |«       y r5  )r3  r\  r[   r6  )r„   rŽ  rE   rF   rX   s        rq   Úpost_rotatezMatrix.post_rotateF  s„   € Øˆ9ØˆAØˆ9ØˆAØ�Š6�a˜1’fØ�M‰Mœ&Ÿ-™-¨Ó.Õ/ä“XˆFØ×!Ñ! 1 " q bÔ)Ø�O‰OœFŸM™M¨%Ó0Ô1Ø×!Ñ! ! QÔ'Ø�M‰M˜&Õ!r†   c                 óä   — |€d}|€d}|dk(  r+|dk(  r&| j                  t        j                  ||«      «       y | j                  | | «       | j	                  ||«       | j                  ||«       y r}   )r3  r\  r^   r6  Ú	post_skew©r„   r  r  rE   rF   s        rq   rO  zMatrix.post_skewT  sl   € Øˆ9ØˆAØˆ9ØˆAØ�Š6�a˜1’fØ�M‰Mœ&Ÿ+™+ g¨wÓ7Õ8à×Ñ   Q BÔ'Ø�N‰N˜7 GÔ,Ø×Ñ  1Õ%r†   c                 ó,   — | j                  |d||«       y r   ©rO  ©r„   r  rE   rF   s       rq   Úpost_skew_xzMatrix.post_skew_x`  s   € Ø�‰�w  Q¨Õ*r†   c                 ó,   — | j                  d|||«       y r   rR  ©r„   r  rE   rF   s       rq   Úpost_skew_yzMatrix.post_skew_yc  s   € Ø�‰�s˜G Q¨Õ*r†   c                 óŠ   — t        |Ž }t         j                  || «      \  | _        | _        | _        | _        | _        | _        y r�   )r\  rä  r¼   rh  r¶   r6   rÎ  rÏ  r1  s      rq   rö  zMatrix.pre_catf  s:   € Ü�ZÐ ˆÜ9?×9OÑ9OØ�ó:
Ñ6ˆŒ�”˜œ ¤¨¬°µr†   c                 óì   — |€|}|€d}|€d}|dk(  r+|dk(  r&| j                  t        j                  ||«      «       y | j                  ||«       | j	                  ||«       | j                  | | «       y r5  )rö  r\  rZ   rø  rü  r8  s        rq   rü  zMatrix.pre_scalel  sv   € Øˆ:ØˆBØˆ9ØˆAØˆ9ØˆAØ�Š6�a˜1’fØ�L‰LœŸ™ b¨"Ó-Õ.à×Ñ˜q !Ô$Ø�N‰N˜2˜rÔ"Ø×Ñ ˜r A 2Õ&r†   c                 ó,   — | j                  |d||«       y r<  ©rü  r>  s       rq   Úpre_scale_xzMatrix.pre_scale_xz  s   € Ø�‰�r˜1˜a Õ#r†   c                 ó,   — | j                  d|||«       y r<  r[  rA  s       rq   Úpre_scale_yzMatrix.pre_scale_y}  s   € Ø�‰�q˜"˜a Õ#r†   c                 óN   — | j                  t        j                  ||«      «       y r�   )rö  r\  rY   rD  s      rq   rø  zMatrix.pre_translate€  s   € Ø�‰”V×%Ñ% b¨"Ó-Õ.r†   c                 ó(   — | j                  |d«       y r   ©rø  rG  s     rq   Úpre_translate_xzMatrix.pre_translate_xƒ  s   € Ø×Ñ˜2˜sÕ#r†   c                 ó(   — | j                  d|«       y r   ra  rJ  s     rq   Úpre_translate_yzMatrix.pre_translate_y†  s   € Ø×Ñ˜3 Õ#r†   c                 óà   — |€d}|€d}|dk(  r*|dk(  r%| j                  t        j                  |«      «       y | j                  ||«       | j	                  |«       | j                  | | «       y r}   )rö  r\  r[   rø  r   )r„   rŽ  rE   rF   s       rq   r   zMatrix.pre_rotate‰  sh   € Øˆ9ØˆAØˆ9ØˆAØ�Š6�a˜1’fØ�L‰LœŸ™ uÓ-Õ.à×Ñ˜q !Ô$Ø�O‰O˜EÔ"Ø×Ñ ˜r A 2Õ&r†   c                 óä   — |€d}|€d}|dk(  r+|dk(  r&| j                  t        j                  ||«      «       y | j                  ||«       | j	                  ||«       | j                  | | «       y r}   )rö  r\  r^   rø  r  rP  s        rq   r  zMatrix.pre_skew•  sl   € Øˆ9ØˆAØˆ9ØˆAØ�Š6�a˜1’fØ�L‰LœŸ™ W¨gÓ6Õ7à×Ñ˜q !Ô$Ø�M‰M˜' 7Ô+Ø×Ñ ˜r A 2Õ&r†   c                 ó,   — | j                  |d||«       y r}   ©r  rS  s       rq   r  zMatrix.pre_skew_x¡  s   € Ø�‰�g˜q ! QÕ'r†   c                 ó,   — | j                  d|||«       y r   rh  rV  s       rq   r  zMatrix.pre_skew_y¤  s   € Ø�‰�c˜7 A qÕ)r†   c                 óZ   — t        | «      }|j                  «        |j                  |«      S r�   )r\  r×  r]  )r„   Úv0r×  s      rq   Úpoint_in_inverse_spacezMatrix.point_in_inverse_space§  s&   € Ü˜“,ˆØ�‰ÔØ×,Ñ,¨RÓ0Ð0r†   c                 óæ   — t        |d   | j                  z  |d   | j                  z  z   d| j                  z  z   |d   | j                  z  |d   | j
                  z  z   d| j                  z  z   «      S r¡   )r1  r¼   r¶   rÎ  rh  r6   rÏ  )r„   rk  s     rq   r]  zMatrix.point_in_matrix_space¬  si   € ÜØˆq‰E�D—F‘F‰N˜R ™U T§V¡V™^Ñ+¨a°$·&±&©jÑ8Øˆq‰E�D—F‘F‰N˜R ™U T§V¡V™^Ñ+¨a°$·&±&©jÑ8ó
ð 	
r†   c                 óî   — |d   | j                   z  |d   | j                  z  z   d| j                  z  z   }|d   | j                  z  |d   | j                  z  z   d| j
                  z  z   }||d<   ||d<   |S r¡   r$  ©r„   r´   ÚnxÚnys       rq   Útransform_pointzMatrix.transform_point²  sw   € Øˆq‰T�D—F‘F‰]˜Q˜q™T D§F¡F™]Ñ*¨Q°·±©ZÑ7ˆØˆq‰T�D—F‘F‰]˜Q˜q™T D§F¡F™]Ñ*¨Q°·±©ZÑ7ˆØˆˆ!‰Øˆˆ!‰Øˆr†   c                 ó®   — |d   | j                   z  |d   | j                  z  z   }|d   | j                  z  |d   | j                  z  z   }||d<   ||d<   |S )zE
        Applies the transformation without the translation.
        r   r¢   )r¼   r¶   rh  r6   ro  s       rq   Útransform_vectorzMatrix.transform_vector¹  s_   € ð ˆq‰T�D—F‘F‰]˜Q˜q™T D§F¡F™]Ñ*ˆØˆq‰T�D—F‘F‰]˜Q˜q™T D§F¡F™]Ñ*ˆØˆˆ!‰Øˆˆ!‰Øˆr†   c                 ój   — |\  }}|\  }}|\  }}	||z
  }
||z
  }|}|	|z
  }||z
  }|} | |
|||||«      S )zÄ
        Create a matrix which transforms these three ordered points to the clockwise points of the unit-square.

        @param p1:
        @param p2:
        @param p4:
        @return:
        rm   )rÌ  r¡  r†  Úp4rI   rJ   rK   rL   Úx4Úy4r¼   rh  r¶   r6   rÎ  rÏ  s                   rq   ÚaffinezMatrix.affineÃ  sb   € ð ‰ˆˆBØ‰ˆˆBØ‰ˆˆBà�‰GˆØ�‰GˆØˆØ�‰GˆØ�‰GˆØˆÙ�1�a˜˜A˜q !Ó$Ð$r†   c                 ó´  — |\  }}|\  }}|\  }	}
|\  }}d}	 ||z
  |
z   |z
  ||
z
  z  }||z
  |	z   |z
  ||	z
  z  }||
z
  ||
z
  z  }||	z
  ||	z
  z  }||||z  z
  z  d||z  z
  z  }||||z  z
  z  d||z  z
  z  }||z  }||z  }|||z   z  ||z  z
  }|||z   z  ||z  z
  }|||z   z  ||z  z
  }|||z   z  ||z  z
  } | ||||||«      S # t         $ r d}d}Y Œ^w xY w)a�  
        Create a matrix which transforms these four ordered points to the clockwise points of the unit-square.

        If G and H are very close to 0, this is an affine transformation. If they are not, then the perspective
        transform requires g and h, but we do not support non-affine transformations.

        @param p1:
        @param p2:
        @param p3:
        @param p4:
        @return:
        r¢   rÙ   )ÚZeroDivisionError)rÌ  r¡  r†  Úp3rv  rI   rJ   rK   rL   Úx3Úy3rw  rx  rÊ  ÚjÚkr¬   rÅ  r²   r"   r¶   rÏ  r¼   rh  r6   rÎ  s                             rq   ÚperspectivezMatrix.perspectiveÙ  sd  € ð ‰ˆˆBØ‰ˆˆBØ‰ˆˆBØ‰ˆˆBàˆð
	Ø�b‘˜2‘ Ñ" r¨B¡wÑ/ˆAØ�b‘˜2‘ Ñ" r¨B¡wÑ/ˆAØ�b‘˜R "™WÑ%ˆAØ�b‘˜R "™WÑ%ˆAà�Q˜˜Q™‘Y‘ 1 q¨1¡u¡9Ñ-ˆAØ�Q˜˜Q™‘Y‘ 1 q¨1¡u¡9Ñ-ˆAð
 �‰FˆØ�‰FˆØ�!�a‘%‰L˜2 ™6Ñ!ˆØ�!�a‘%‰L˜2 ™6Ñ!ˆØ�!�a‘%‰L˜2 ™6Ñ!ˆØ�!�a‘%‰L˜2 ™6Ñ!ˆá�1�a˜˜A˜q !Ó$Ð$øô !ò 	ØˆAØŠAð	ús   ˜A C ÃCÃCc	                 óz   — t         j                  ||||«      }	t         j                  ||||«      }
 | |	 |
z  «      S )a¦  
        Create a matrix which transforms these four ordered points to equivalent points for the other 4 ordered points.

        If G and H are very close to 0, this is an affine transformation. If they are not, then the perspective
        transform requires g and h, but we do not support non-affine transformations.

        @param p1:
        @param p2:
        @param p3:
        @param p4:
        @return:
        )r\  r�  )rÌ  r¡  r†  r|  rv  Úp5Úp6Úp7Úp8Úm1Úm2s              rq   rõ  z
Matrix.map  s@   € ô ×Ñ  B¨¨BÓ/ˆÜ×Ñ  B¨¨BÓ/ˆÙ�B�3˜‘8‹}Ðr†   c                 óv   — t         j                  |||«      }t         j                  |||«      } | | |z  «      S )a3  
        Create a matrix which transforms these three ordered points to map to 3 other ordered points. This does not
        include p3 or p7 for the ordered squares.

        @param p1:
        @param p2:
        @param p4:
        @param p5:
        @param p6:
        @param p8:
        @return:
        )r\  ry  )	rÌ  r¡  r†  rv  rƒ  r„  r†  r‡  rˆ  s	            rq   Úmap3zMatrix.map3  s8   € ô �]‰]˜2˜r 2Ó&ˆÜ�]‰]˜2˜r 2Ó&ˆÙ�B�3˜‘8‹}Ðr†   c                 ó$   — |€|} | |dd|dd«      S r}   rm   )rÌ  r9  r:  s      rq   rZ   zMatrix.scale&  s!   € àˆ:ØˆBÙ�2�q˜!˜R  AÓ&Ð&r†   c                 ó&   — | j                  |d«      S r  ©rZ   )rÌ  r9  s     rq   Úscale_xzMatrix.scale_x,  s   € à�y‰y˜˜SÓ!Ð!r†   c                 ó&   — | j                  d|«      S r  r�  )rÌ  r:  s     rq   Úscale_yzMatrix.scale_y0  s   € à�y‰y˜˜bÓ!Ð!r†   c                 ó   —  | dddd||«      S )z4SVG Matrix:
        [a c e]
        [b d f]
        r  rÙ   rm   )rÌ  r¥  r¦  s      rq   rY   zMatrix.translate4  s   € ñ �3˜˜S # r¨2Ó.Ð.r†   c                 ó&   — | j                  |d«      S r}   ©rY   )rÌ  r¥  s     rq   Útranslate_xzMatrix.translate_x<  s   € à�}‰}˜R Ó#Ð#r†   c                 ó&   — | j                  d|«      S r   r“  )rÌ  r¦  s     rq   Útranslate_yzMatrix.translate_y@  s   € à�}‰}˜S "Ó%Ð%r†   c                 óJ   — t        |«      }t        |«      } | ||| |dd«      S r   )r
   r   )rÌ  rŽ  ÚctÚsts       rq   r[   zMatrix.rotateD  s+   € ä�‹ZˆÜ�‹ZˆÙ�2�r˜B˜3  C¨Ó-Ð-r†   c                 óH   — t        |«      }t        |«      } | d||ddd«      S )Nr  rÙ   )r   )rÌ  r  r  ÚaaÚbbs        rq   r^   zMatrix.skewJ  s)   € ä�‹\ˆÜ�‹\ˆÙ�3˜˜B  S¨#Ó.Ð.r†   c                 ó&   — | j                  |d«      S r   ©r^   ©rÌ  rŽ  s     rq   Úskew_xzMatrix.skew_xP  s   € à�x‰x˜˜sÓ#Ð#r†   c                 ó&   — | j                  d|«      S r   rž  rŸ  s     rq   Úskew_yzMatrix.skew_yT  s   € à�x‰x˜˜UÓ#Ð#r†   c                 ó   —  | «       S )z+
        1, 0, 0,
        0, 1, 0,
        rm   )rÌ  s    rq   ÚidentityzMatrix.identityX  s   € ñ ‹uˆr†   c                 óž  — |j                   | j                   z  |j                  | j                  z  z   |j                  dz  z   |j                   | j                  z  |j                  | j                  z  z   |j                  dz  z   |j                   | j                  z  |j                  | j
                  z  z   |j                  dz  z   f}|j                  | j                   z  |j                  | j                  z  z   |j
                  dz  z   |j                  | j                  z  |j                  | j                  z  z   |j
                  dz  z   |j                  | j                  z  |j                  | j
                  z  z   |j
                  dz  z   f}t        |d   «      t        |d   «      t        |d   «      t        |d   «      |d   |d   fS )zå
        [a c e]      [a c e]   [a b 0]
        [b d f]   %  [b d f] = [c d 0]
        [0 0 1]      [0 0 1]   [e f 1]

        :param m: matrix operand
        :param s: matrix operand
        :return: multiplied matrix.
        r   r¢   r   )r¼   r¶   rh  rÎ  r6   rÏ  r•   )r¬   rº   Úr0r  s       rq   rä  zMatrix.matrix_multiply`  s`  € ð �C‰C�!—#‘#‰I˜Ÿ™˜aŸc™c™	Ñ! A§C¡C¨!¡GÑ+Ø�C‰C�!—#‘#‰I˜Ÿ™˜aŸc™c™	Ñ! A§C¡C¨!¡GÑ+Ø�C‰C�!—#‘#‰I˜Ÿ™˜aŸc™c™	Ñ! A§C¡C¨!¡GÑ+ð
ˆð �C‰C�!—#‘#‰I˜Ÿ™˜aŸc™c™	Ñ! A§C¡C¨!¡GÑ+Ø�C‰C�!—#‘#‰I˜Ÿ™˜aŸc™c™	Ñ! A§C¡C¨!¡GÑ+Ø�C‰C�!—#‘#‰I˜Ÿ™˜aŸc™c™	Ñ! A§C¡C¨!¡GÑ+ð
ˆô
 �R˜‘U‹|œU 2 a¡5›\¬5°°A±«<¼¸rÀ!¹u»ÀrÈ!ÁuÈbÐQRÉeÐSÐSr†   )NNNNNNN)r  NrÙ   rÙ   )r  rÙ   rÙ   )rÙ   rÙ   )rÙ   )rÙ   rÙ   rÙ   rÙ   )rÙ   rÙ   rÙ   )r  Nr-  )OrÓ   rÔ   rÕ   rU  r…   r  r  rH  rÙ  rÞ  rá  rÜ  r  rY  rî   rN  rR  r&  rú   r)  rZ  rÐ   rÒ   rÐ  r  r  r  r  r  r  r   r"  r×  r-  r/  r3  r7  r?  rB  r6  rH  rK  rM  rO  rT  rW  rö  rü  r\  r^  rø  rb  rd  r   r  r  r  rl  r]  rr  rt  r.  ry  r�  rõ  rŠ  rZ   rŽ  r�  rY   r”  r–  r[   r^   r   r¢  r¤  r\  rä  rm   r†   rq   r\  r\  «	  sŸ  „ ñò"òB&òò*òòò
ò
ð €GØ€HØ€Hòòò
òFò
ð ñ$ó ð$òcðN ØØØØØØó$ðL ñ1ó ð1òòòòòòòòò.@ò
òó&ó%ó%ó0ó%ó%ó"ó
&ó+ó+ò
ó'ó$ó$ó/ó$ó$ó
'ó
'ó(ó*ò1ò

òòð ñ%ó ð%ð* ñ&%ó ð&%ðP ñó ðð" ñó ðð" ò'ó ð'ð
 ò"ó ð"ð ò"ó ð"ð ò/ó ð/ð ò$ó ð$ð ò&ó ð&ð ò.ó ð.ð
 ò/ó ð/ð
 ò$ó ð$ð ò$ó ð$ð ñó ðð ñTó ñTr†   r\  c                   óL   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
ed	„ «       Zy
)rJ  c                 ó>  — d| _         d| _        d| _        d| _        d| _        |r�t        |«      dk  rs|d   }t        |t        «      r| j                  |«       n3t        |t        «      r| j                  |«       n| j                  |«       t        |«      dk(  re|d   | _        nZt        |«      dk(  rLt        |d   «      | _         t        |d   «      | _        t        |d   «      | _        t        |d   «      | _        |r| j                  t        |«      «       yy)a  
        Viewbox controls the scaling between the drawing size view that is observing that drawing.

        :param viewbox: either values or viewbox attribute or a Viewbox object
        :param preserveAspectRatio or preserve_aspect_ratio: preserveAspectRatio
        Nr   r   r¢   ra  r`  )rE   rF   r   r   Úpreserve_aspect_ratior¿   rë   ÚdictÚproperty_by_valuesrJ  Úproperty_by_objectÚset_viewboxr•   )r„   rà   rá   r;  s       rq   r…   zViewbox.__init__z  sô   € ð ˆŒØˆŒØˆŒ
ØˆŒØ%)ˆÔ"Ù”C˜“I ’NØ˜1‘gˆGÜ˜'¤4Ô(Ø×'Ñ'¨Õ0Ü˜G¤WÔ-Ø×'Ñ'¨Õ0à× Ñ  Ô)Ü�4‹y˜AŠ~Ø-1°!©W�Õ*Ü�‹Y˜!Š^Ü˜4 ™7“^ˆDŒFÜ˜4 ™7“^ˆDŒFÜ˜t A™w›ˆDŒJÜ  Q¡›.ˆDŒKÙØ×#Ñ#¤D¨£LÕ1ð r†   c                 ó&  — t        |t        «      sy| j                  |j                  k7  ry| j                  |j                  k7  ry| j                  |j                  k7  ry| j
                  |j
                  k7  ry| j                  |j                  k(  S rB  )rë   rJ  rE   rF   r   r   r©  rì   s     rq   r  zViewbox.__eq__˜  sr   € Ü˜%¤Ô)ØØ�6‰6�U—W‘WÒØØ�6‰6�U—W‘WÒØØ�:‰:˜Ÿ™Ò$ØØ�;‰;˜%Ÿ,™,Ò&ØØ×)Ñ)¨U×-HÑ-HÑHÐHr†   c           	      ó  — t         j                  | j                  «      ›dt         j                  | j                  «      ›dt         j                  | j                  «      ›dt         j                  | j
                  «      ›�S )Nr�  )r×   rÝ   rE   rF   r   r   rƒ   s    rq   r)  zViewbox.__str__¥  sL   € ä�J‰J�t—v‘vÕÜ�J‰J�t—v‘vÕÜ�J‰J�t—z‘zÕ"Ü�J‰J�t—{‘{Ô#ð	
ð 	
r†   c                 ó¬  — g }| j                   �7|j                  t        ›dt        j	                  | j                   «      ›�«       | j
                  �7|j                  t        ›dt        j	                  | j
                  «      ›�«       | j                  �7|j                  t        ›dt        j	                  | j                  «      ›�«       | j                  �7|j                  t        ›dt        j	                  | j                  «      ›�«       | j                  �%|j                  t        ›d| j                  ›d�«       dj                  |«      }d|z  S )NÚ=ú='rR  rê  zViewbox(%s))rE   ÚappendÚ
SVG_ATTR_Xr×   rÝ   rF   Ú
SVG_ATTR_Yr   ÚSVG_ATTR_WIDTHr   ÚSVG_ATTR_HEIGHTr©  ÚSVG_ATTR_PRESERVEASPECTRATIOÚjoin©r„   r¼  r
  s      rq   r&  zViewbox.__repr__­  sè   € ØˆØ�6‰6ÐØ�M‰M¦Z´·±¸D¿F¹FÔ1CÐDÔEØ�6‰6ÐØ�M‰M¦Z´·±¸D¿F¹FÔ1CÐDÔEØ�:‰:Ð!Ø�M‰M¦^´V·Z±ZÀÇ
Á
Ô5KÐLÔMØ�;‰;Ð"Ø�M‰M¦_´f·j±jÀÇÁÔ6MÐNÔOØ×%Ñ%Ð1Ø�M‰MÞ9¸4×;UÓ;UÐVôð —‘˜6Ó"ˆØ˜vÑ%Ð%r†   c                 ó®   — |j                   | _         |j                  | _        |j                  | _        |j                  | _        |j                  | _        y r�   )rE   rF   r   r   r©  ©r„   Úobjs     rq   r¬  zViewbox.property_by_object¾  s<   € Ø—‘ˆŒØ—‘ˆŒØ—Y‘YˆŒ
Ø—j‘jˆŒØ%(×%>Ñ%>ˆÕ"r†   c                 ó>  — t         |v r| j                  |t            «       t        |v r|t           | _        t        |v r|t           | _        t        |v r|t           | _        t        |v r|t           | _	        d|v r
|d   | _
        t        |v r|t           | _
        y y )Nr©  )ÚSVG_ATTR_VIEWBOXr­  r´  rE   rµ  rF   r¶  r   r·  r   r©  r¸  ©r„   r¼  s     rq   r«  zViewbox.property_by_valuesÅ  sŸ   € Ü˜vÑ%Ø×Ñ˜VÔ$4Ñ5Ô6Ü˜ÑØœJÑ'ˆDŒFÜ˜ÑØœJÑ'ˆDŒFÜ˜VÑ#Ø¤Ñ/ˆDŒJÜ˜fÑ$Ø ¤Ñ1ˆDŒKØ" fÑ,Ø)/Ð0GÑ)HˆDÔ&Ü'¨6Ñ1Ø)/Ô0LÑ)MˆDÕ&ð 2r†   c                 óþ   — |�lt        t        j                  |«      «      }	 t        |d   «      | _        t        |d   «      | _        t        |d   «      | _        t        |d   «      | _        y y # t        $ r Y y w xY w©Nr   r¢   r   r`  )	r(  ÚREGEX_FLOATrß   r•   rE   rF   r   r   r5  )r„   r;  Údimss      rq   r­  zViewbox.set_viewboxÕ  sw   € ØÐÜœ×+Ñ+¨GÓ4Ó5ˆDðÜ˜t A™w›�”Ü˜t A™w›�”Ü" 4¨¡7›^�”
Ü# D¨¡G›n�•ð øô ò Ùðús   ¢AA0 Á0	A<Á;A<c                 óð   — t         j                  |j                  |j                  |j                  |j
                  | j                  | j                  | j                  | j
                  | j                  «	      S r�   )rJ  r    rE   rF   r   r   r©  )r„   Úelements     rq   r;   zViewbox.transformà  sV   € Ü×(Ñ(Ø�I‰IØ�I‰IØ�M‰MØ�N‰NØ�F‰FØ�F‰FØ�J‰JØ�K‰KØ×&Ñ&ó

ð 
	
r†   c	           
      óú  — | �|�|�
|�|�|�|�|€y|�|j                  d«      }		 |	d   }
	 |	d   }nd}
d}||z  }||z  }|
t        k7  r|dk(  rt        ||«      x}}n|
t        k7  r|dk(  rt	        ||«      x}}| ||z  z
  }|||z  z
  }|
j                  «       }
d|
v r||||z  z
  d	z  z  }d
|
v r||||z  z
  z  }d|
v r||||z  z
  d	z  z  }d|
v r||||z  z
  z  }t        |t        «      st        |t        «      rt        ‚|dk(  r?|dk(  r:|dk(  r|dk(  rydt        j                  |«      ›dt        j                  |«      ›d�S |dk(  r4|dk(  r/dt        j                  |«      ›dt        j                  |«      ›d�S dt        j                  |«      ›dt        j                  |«      ›dt        j                  |«      ›dt        j                  |«      ›d�	S # t        $ r d}
Y �Œ¼w xY w# t        $ r d}Y �ŒÃw xY w)aÃ  
        SVG 1.1 7.2, SVG 2.0 8.2 equivalent transform of an SVG viewport.
        With regards to https://github.com/w3c/svgwg/issues/215 use 8.2 version.

        It creates transform commands equal to that viewport expected.

        Let e-x, e-y, e-width, e-height be the position and size of the element respectively.
        Let vb-x, vb-y, vb-width, vb-height be the min-x, min-y, width and height values of the viewBox attribute
        respectively.

        Let align be the align value of preserveAspectRatio, or 'xMidYMid' if preserveAspectRatio is not defined.
        Let meetOrSlice be the meetOrSlice value of preserveAspectRatio, or 'meet' if preserveAspectRatio is not defined
        or if meetOrSlice is missing from this value.

        :param e_x: element_x value
        :param e_y: element_y value
        :param e_width: element_width value
        :param e_height: element_height value
        :param vb_x: viewbox_x value
        :param vb_y: viewbox_y value
        :param vb_width: viewbox_width value
        :param vb_height: viewbox_height value
        :param aspect: preserve aspect ratio value
        :return: string of the SVG transform commands to account for the viewbox.
        rÚ   r�  r   ÚxMidyMidr¢   ÚmeetÚsliceÚxmidrˆ  ÚxmaxÚymidÚymaxzscale(rê  rh   ú
translate(z) scale()
Úsplitr5  r(  rK  rL  r²  rë   r×   rž   rÝ   )Úe_xÚe_yÚe_widthÚe_heightÚvb_xÚvb_yÚvb_widthÚ	vb_heightÚaspectÚaspect_sliceÚalignÚmeet_or_slicerŽ  r�  r”  r–  s                   rq   r    zViewbox.viewbox_transformí  sQ  € ð< ˆKØˆ{ØˆØÐØˆ|Øˆ|ØÐØÐ àØÐØ!Ÿ<™<¨Ó,ˆLð#Ø$ Q™�ð'Ø ,¨Q¡‘ð ˆEØ"ˆMà˜HÑ$ˆà˜YÑ&ˆð ”NÒ" }¸Ò'>Ü # G¨WÓ 5Ð5ˆG‘gà”nÒ$¨¸'Ò)AÜ # G¨WÓ 5Ð5ˆG�gà˜T G™^Ñ,ˆà˜T G™^Ñ,ˆà—‘“ˆØ�U‰?Ø˜G h°Ñ&8Ñ8¸CÑ?Ñ?ˆKà�U‰?Ø˜7 X°Ñ%7Ñ7Ñ7ˆKà�U‰?Ø˜H y°7Ñ':Ñ:¸cÑAÑAˆKà�U‰?Ø˜8 i°'Ñ&9Ñ9Ñ9ˆKô �gœvÔ&¬*°W¼fÔ*EÜÐØ˜!Ò ¨qÒ 0Ø˜!Š| ¨1¢Øøä*0¯*©*°WÕ*=¼v¿z¹zÈ'Õ?RÐSÐSà˜!Š| ¨1£ä—J‘J˜{Õ+Ü—J‘J˜{Õ+ðð øô —J‘J˜{Õ+Ü—J‘J˜{Õ+Ü—J‘J˜wÕ'Ü—J‘J˜wÕ'ð	ð øôk ò #Ø"“ð#ûô ò 'Ø &“ð'ús"   ¦G ¬G+ ÇG(Ç'G(Ç+G:Ç9G:N)rÓ   rÔ   rÕ   r…   r  r)  r&  r¬  r«  r­  r;   r\  r    rm   r†   rq   rJ  rJ  y  sB   „ ò2ò<Iò
ò&ò"?òNò 	ò
ð ñeó ñer†   rJ  c                   ó@   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zy
)Ú
SVGElementaJ  
    Any element within the SVG namespace.

    if args[0] is a dict or SVGElement class the value is used to seed the values.
    Else, the values consist of the kwargs used. The priority is such that kwargs
    will overwrite any previously set value.

    If additional args exist these will be passed to property_by_args

    c                 óÞ  — d | _         d | _        t        |«      dk\  r||d   }t        |t        «      r1|dd  }t	        |«      | _        | j                  j                  |«       n6t        |t        «      r&|dd  }| j                  |«        | j                  |Ž  y | j                  €t	        |«      | _        | j                  | j                  «       t        |«      dk7  r | j                  |Ž  y y ra  )
r5   r¼  r¿   rë   rª  ÚupdaterÞ  r¬  Úproperty_by_argsr«  ©r„   rà   rá   rº   s       rq   r…   zSVGElement.__init__b  sÓ   € ØˆŒØˆŒÜˆt‹9˜Š>Ø�Q‘ˆAÜ˜!œTÔ"Ø˜A˜B�x�Ü" 1›g�”Ø—‘×"Ñ" 6Õ*Ü˜AœzÔ*Ø˜A˜B�x�Ø×'Ñ'¨Ô*Ø%�×%Ñ% tÑ,ØØ�;‰;ÐÜ˜v›,ˆDŒKØ×Ñ §¡Ô,Üˆt‹9˜Š>Ø!ˆD×!Ñ! 4Ò(ð r†   c                  ó   — y r�   rm   ©r„   rà   s     rq   rá  zSVGElement.property_by_argsv  ó   € Ør†   c                 óZ   — |j                   | _         t        |j                  «      | _        y r�   )r5   rª  r¼  r¼  s     rq   r¬  zSVGElement.property_by_objecty  s   € Ø—&‘&ˆŒÜ˜3Ÿ:™:Ó&ˆ�r†   c                 ó8   — |j                  t        «      | _        y r�   )ÚgetÚSVG_ATTR_IDr5   rÀ  s     rq   r«  zSVGElement.property_by_values}  s   € Ø—*‘*œ[Ó)ˆ�r†   c                  ó   — y)zü
        Render changes any length/percent values or attributes into real usable limits if
        given the information required to change such parameters.

        :param kwargs: various other properties to be rendered with.
        :return:
        Nrm   ©r„   rá   s     rq   rÐ  zSVGElement.render€  s   € ð 	r†   c                 ó$   — || j                   |<   | S r�   )r¼  rP  s      rq   rš  zSVGElement.setŠ  s   € Ø ˆ�‰�CÑØˆr†   c                 ó   — t        | |fi |¤Ž y r�   )Úwrite)r„   rÏ  rá   s      rq   Ú	write_xmlzSVGElement.write_xmlŽ  s   € Üˆd�AÑ ˜Ó r†   c                 ó   — t        | «      S r�   ©Útostringrƒ   s    rq   Ú
string_xmlzSVGElement.string_xml‘  ó   € Ü˜‹~Ðr†   N)rÓ   rÔ   rÕ   rU  r…   rá  r¬  r«  rÐ  rš  rï  ró  rm   r†   rq   rÞ  rÞ  V  s/   „ ñ	ò)ò(ò'ò*òòò!ór†   rÞ  c                   ó\   — e Zd ZdZd„ Zd„ Zd„ Zd„ ZeZd„ Z	d„ Z
d„ Zd	„ Zdd
„Zed„ «       Zy)ÚTransformablez?Any element that is transformable and has a transform property.c                 ó<   — d | _         d | _        d | _        d | _        y r�   )Ú_lengthÚ_lengthsr;   Úapply©r„   rà   rá   s      rq   r…   zTransformable.__init__˜  s   € ØˆŒØˆŒØˆŒØˆ�
r†   c                 óZ   — t        |j                  «      | _        |j                  | _        y r�   )r\  r;   rú  r  s     rq   r¬  z Transformable.property_by_objectž  s   € Ü §¡Ó,ˆŒØ—W‘Wˆ�
r†   c                 óŒ   — t        |j                  t        d«      «      | _        t	        |j                  dd«      «      | _        y )NrÚ   rú  T)r\  rè  ÚSVG_ATTR_TRANSFORMr;   r™   rú  rÀ  s     rq   r«  z Transformable.property_by_values¢  s1   € Ü §
¡
Ô+=¸rÓ BÓCˆŒÜ˜&Ÿ*™* W¨dÓ3Ó4ˆ�
r†   c                 ó^   — t        |t        t        f«      rt        | «      }||z  }|S t        S r�   ©rë   r\  rÝ   r   rD  ©r„   rí   rÅ  s      rq   r  zTransformable.__mul__¦  ó-   € Ü�eœf¤c˜]Ô+Ü�T“
ˆAØ�‰JˆAØˆHÜÐr†   c                 ó†   — t        |t        «      rt        |«      }t        |t        «      r| xj                  |z  c_        | S r�   ©rë   rÝ   r\  r;   rì   s     rq   rî   zTransformable.__imul__¯  s2   € Ü�eœSÔ!Ü˜5“MˆEÜ�eœVÔ$Ø�NŠN˜eÑ#�NØˆr†   c                 ó<   — t        | «      }|j                  «        |S )zŠ
        The absolute value is taken to be the actual shape transformed.
        :return: transformed version of the given shape.
        )r   ÚreifyrØ  s     rq   rü   zTransformable.__abs__¶  s   € ô
 �‹JˆØ	�‰Œ	Øˆr†   c                 ó    — d| _         d| _        y)a'  
        Realizes the transform to the attributes. Such that the attributes become actualized and the transform
        simplifies towards the identity matrix. In many cases it will become the identity matrix. In other cases the
        transformed shape cannot be represented through the properties alone. And shall keep those parts of the
        transform required preserve equivalency.

        The default method will be called by submethods but will only scale properties like stroke_width which should
        scale with the transform.
        N)rù  rø  rƒ   s    rq   r  zTransformable.reify¿  s   € ð ˆŒØˆ�r†   c                 óV   — | j                   � | j                   j                  di |¤Ž | S )z£
        Renders the transformable by performing any required length conversion operations into pixels. The element
        will be the pixel-length form.
        rm   )r;   rÐ  rë  s     rq   rÐ  zTransformable.renderÌ  s*   € ð
 �>‰>Ð%Ø!ˆD�N‰N×!Ñ!Ñ+ FÒ+Øˆr†   c                 ó   — t         ‚)a  
        Returns the bounding box of the given object.

        :param transformed: whether this is the transformed bounds or default.
        :param with_stroke: should the stroke-width be included in the bounds.
        :return: bounding box of the given element
        ©ÚNotImplementedError©r„   ÚtransformedÚwith_strokes      rq   ÚbboxzTransformable.bboxÕ  s
   € ô "Ð!r†   c                 óÒ   — | j                   st        j                  d«      S t        dd«      }|| j                  z  }t        dd«      }|| j                  z  }|j                  |«      S r¡   )rú  rÀ  r   r1  r;   r‹  rî  s      rq   rÐ   zTransformable.rotationß  sY   € à�zŠzÜ—=‘= Ó#Ð#Ü�A�q‹kˆØˆt�~‰~ÑˆÜ�q˜!“ˆØ�$—.‘.Ñ ˆØ�‰˜sÓ#Ð#r†   N©TF)rÓ   rÔ   rÕ   rU  r…   r¬  r«  r  rY  rî   rü   r  rÐ  r  rZ  rÐ   rm   r†   rq   rö  rö  •  sM   „ ÙIòòò5òð €Hòòòòó"ð ñ$ó ñ$r†   rö  c                   óD   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Ze	d„ «       Z
d„ Zy	)
ÚGraphicObjectzAny drawn element.c                 ó.   — d | _         d | _        d | _        y r�   )r:   r9   Ústroke_widthrû  s      rq   r…   zGraphicObject.__init__í  s   € ØˆŒØˆŒ	Ø ˆÕr†   c                 ó  — |j                   �t        |j                   «      nd | _         |j                  �t        |j                  «      nd | _        |j                  �)t	        |j                  «      j                  «       | _        y d | _        y r�   )r9   r^  r:   r  r×   rÌ   r  s     rq   r¬  z GraphicObject.property_by_objectò  sg   € Ø%&§V¡VÐ%7”E˜!Ÿ&™&”M¸TˆŒ	Ø)*¯©Ð)=”e˜AŸH™H”oÀ4ˆŒà./¯n©nÐ.HŒF�1—>‘>Ó"×(Ñ(Ó*ð 	ÕØNRð 	Õr†   c                 óR  — |j                  t        «      }|�t        |«      nd | _        |j                  d«      }|j                  t        |«      }|�=| j                  �1| j                  j
                  �	 t        |«      | j                  _        |j                  t        «      }|�t        |«      nd | _
        |j                  d«      }|j                  t        |«      }|�=| j                  �1| j                  j
                  �	 t        |«      | j                  _        t        |j                  dd«      «      j                  «       | _        t        |j                  t        | j                  «      «      j                  «       | _        y # t        $ r Y �Œw xY w# t        $ r Y Œ†w xY w)NÚstroke_opacityÚfill_opacityr  r  )rè  ÚSVG_ATTR_STROKEr^  r:   ÚSVG_ATTR_STROKE_OPACITYrÌ   r•   rg  rž   ÚSVG_ATTR_FILLr9   ÚSVG_ATTR_FILL_OPACITYr×   r  ÚSVG_ATTR_STROKE_WIDTH)r„   r¼  r:   r  r9   r  s         rq   r«  z GraphicObject.property_by_valuesù  sc  € Ø—‘œOÓ,ˆØ'-Ð'9”e˜F”m¸tˆŒØŸ™Ð$4Ó5ˆØŸ™Ô$;¸^ÓLˆàÐ&Ø—‘Ð'Ø—‘×!Ñ!Ð-ðÜ&+¨NÓ&;�—‘Ô#ð �z‰zœ-Ó(ˆØ#'Ð#3”E˜$”K¸ˆŒ	Ø—z‘z .Ó1ˆØ—z‘zÔ"7¸ÓFˆàÐ$Ø—	‘	Ð%Ø—	‘	—‘Ð+ðÜ$)¨,Ó$7�—	‘	Ô!ô # 6§:¡:¨n¸cÓ#BÓC×IÑIÓKˆÔÜ"Ø�J‰JÔ,¨d×.?Ñ.?Ó@ó
ç
‰%‹'ð 	Õøô! ò Úðûô ò Ùðús$   Á6F
 ÄF Æ
	FÆFÆ	F&Æ%F&c           	      óN  — t        | j                  t        «      r||j                  d|j                  d«      «      }|j                  d|j                  d«      «      }	 |d=  | j                  j
                  ddt        ||z  ||z  z   «      i|¤Ž| _        y y # t        $ r Y ŒBw xY w©Nr   r8  r   rm   )rë   r  r×   rè  ÚKeyErrorrÌ   r   ©r„   rá   r   r   s       rq   rÐ  zGraphicObject.render  s¬   € Ü�d×'Ñ'¬Ô0Ø—J‘J˜w¨¯
©
Ð3DÓ(EÓFˆEØ—Z‘Z ¨&¯*©*Ð5FÓ*GÓHˆFðØÐ,Ð-ð !8 × 1Ñ 1× 7Ñ 7ñ !Ü $ U¨U¡]°V¸f±_Ñ%DÓ Eð!ØIOñ!ˆDÕð 1øô
 ò Ùðús   ÁB Â	B$Â#B$c                 ó(   — | j                   | _        | S )aŽ  
        Realizes the transform to the attributes. Such that the attributes become actualized and the transform
        simplifies towards the identity matrix. In many cases it will become the identity matrix. In other cases the
        transformed shape cannot be represented through the properties alone. And shall keep those parts of the
        transform required preserve equivalency.
        )Úimplicit_stroke_widthr  rƒ   s    rq   r  zGraphicObject.reify&  s   € ð !×6Ñ6ˆÔØˆr†   c                 ó²  — 	 | j                   s| j                  S | j                  �—| j                  }t        | d«      rPt        | j
                  v r>t        | j
                  t           v r%t        | j
                  j                  dd«      «      }| j                  }|j                  }|t        t        |«      «      z  S y # t        $ r | j                  cY S w xY w)Nr¼  Úviewport_transformrÚ   )rú  r  r;   ÚhasattrÚSVG_ATTR_VECTOR_EFFECTr¼  ÚSVG_VALUE_NON_SCALING_STROKEr\  rè  r  r   rû   r4  )r„   r;   r   Údets       rq   r$  z#GraphicObject.implicit_stroke_width0  sÁ   € ð	%Ø—:’:Ø×(Ñ(Ð(Ø× Ñ Ð,Ø ŸN™N�	ä˜D (Ô+Ü.°$·+±+Ñ=Ü4Ø—{‘{Ô#9Ñ:ñ;ô !' t§{¡{§¡Ð7KÈRÓ'PÓ Q�IØ×)Ñ)�Ø×+Ñ+�Øœt¤C¨£H›~Ñ-Ð-ð -øô ò 	%Ø×$Ñ$Ò$ð	%ús   ‚B> šB"B> Â>CÃCc                  ó   — yrB  rm   rƒ   s    rq   Úis_degeneratezGraphicObject.is_degenerateE  s   € Ør†   N)rÓ   rÔ   rÕ   rU  r…   r¬  r«  rÐ  r  rZ  r$  r,  rm   r†   rq   r  r  ê  s8   „ Ùò!ò

òò@
òð ñ%ó ð%ó(r†   r  c                   ó®   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
e
Zd	„ Zd
„ Zd„ Zeedfd„Zefd„Zefd„Zeefd„Zdd„Zdd„Zdd„Zd„ Zd„ Zd„ Zd„ Zy)ÚShapeaÑ  
    SVG Shapes are several SVG items defined in SVG 1.1 9.1
    https://www.w3.org/TR/SVG11/shapes.html

    These shapes are circle, ellipse, line, polyline, polygon, and path.

    All shapes have methods:
    d(relative, transform): provides path_d string for the shape.
    reify(): Applies transform of the shape to modify the shape attributes.
    render(): Ensure that the shape properties have real space values.
    bbox(transformed): Provides the bounding box for the given shape.

    All shapes must implement:
    __repr__(), with a call to _repr_shape()
    __copy__()

    All shapes have attributes:
    id: SVG ID attributes. (SVGElement)
    transform: SVG Matrix to apply to this shape. (Transformable)
    apply: Determine whether transform should be applied. (Transformable)
    fill: SVG color of the shape fill. (GraphicObject)
    stroke: SVG color of the shape stroke. (GraphicObject)
    stroke_width: Stroke width of the stroke. (GraphicObject)
    c                 ó¨   — d| _         t        j                  | g|¢­i |¤Ž t        j                  | g|¢­i |¤Ž t	        j                  | g|¢­i |¤Ž y )NT)Ú_strictrö  r…   r  rÞ  rû  s      rq   r…   zShape.__init__c  sZ   € ØˆŒÜ×Ñ˜tÐ5 dÒ5¨fÒ5Ü×Ñ˜tÐ5 dÒ5¨fÒ5Ü×ÑØð	
Øò	
Ø!ó	
r†   c                 óˆ   — t         j                  | |«       t        j                  | |«       t        j                  | |«       y r�   )rÞ  r¬  rö  r  r  s     rq   r¬  zShape.property_by_objectk  s2   € Ü×%Ñ% d¨AÔ.Ü×(Ñ(¨¨qÔ1Ü×(Ñ(¨¨qÕ1r†   c                 óˆ   — t         j                  | |«       t        j                  | |«       t        j                  | |«       y r�   )rÞ  r«  rö  r  rÀ  s     rq   r«  zShape.property_by_valuesp  s2   € Ü×%Ñ% d¨FÔ3Ü×(Ñ(¨¨vÔ6Ü×(Ñ(¨¨vÕ6r†   c                 óˆ   — t        j                  | fi |¤Ž t        j                  | fi |¤Ž t        j                  | fi |¤Ž y r�   )rÞ  rÐ  rö  r  rë  s     rq   rÐ  zShape.renderu  s;   € Ü×Ñ˜$Ñ) &Ò)Ü×Ñ˜TÑ, VÒ,Ü×Ñ˜TÑ, VÓ,r†   c                 ó  — t        |t        «      st        S | j                  |j                  k7  s| j                  |j                  k7  ry| }t        |t
        «      st        |«      }|}t        |t
        «      st        |«      }||k(  S rB  )rë   r.  rD  r9   r:   ÚPathry  s       rq   r  zShape.__eq__z  sn   € Ü˜%¤Ô'Ü!Ð!Ø�9‰9˜Ÿ
™
Ò" d§k¡k°U·\±\Ò&AØØˆÜ˜%¤Ô&Ü˜“KˆEØˆÜ˜&¤$Ô'Ü˜&“\ˆFØ˜‰Ðr†   c                 ó:   — t        |t        «      st        S | |k(   S r�   )rë   r.  rD  rì   s     rq   r  zShape.__ne__‡  ó   € Ü˜%¤Ô'Ü!Ð!Ø˜5‘=Ð Ð r†   c                 ó\   — t        |t        «      rt        | «      t        |«      z   S t        S r�   )rë   r.  r5  rD  rì   s     rq   rø   zShape.__iadd__Œ  s%   € Ü�eœUÔ#Ü˜“:¤ U£Ñ+Ð+ÜÐr†   c                 ó>   — t        | «      }|j                  |«       |S r�   rÛ  rÝ  s      rq   rÞ  zShape.__matmul__“  rß  r†   c                 ó>   — t        |«      }|j                  | «       |S r�   rÛ  rÝ  s      rq   rá  zShape.__rmatmul__˜  râ  r†   c                 ó¦   — t        |t        «      rt        |«      }t        |t        «      r| xj                  |z  c_        | j	                  «        | S )z~
        The % operation with a matrix works much like multiplication except that it automatically reifies the shape.
        )rë   rÝ   r\  r;   r  rì   s     rq   rÜ  zShape.__imatmul__�  s=   € ô �eœSÔ!Ü˜5“MˆEÜ�eœVÔ$Ø�NŠN˜eÑ#�NØ�
‰
ŒØˆr†   Nc                 ó*  — |€| j                  d«      }| j                  �y|D �cg c]  }|j                  ||¬«      ‘Œ }}t        |«      | _        | j                  dk(  r|| _        y|D �cg c]  }|| j                  z  ‘Œ c}| _        yc c}w c c}w )a  
        Calculate the length values for the segments of the Shape.

        :param error: error permitted for length calculations.
        :param min_depth: minimum depth for the length calculation.
        :param segments: optional segments to use.
        :return:
        NF©ÚerrorÚ	min_depthr   )Úsegmentsrø  rN  Úsumrù  )r„   r>  r?  r@  ÚeachÚlengthss         rq   Ú_calc_lengthszShape._calc_lengths¨  s�   € ð ÐØ—}‘} UÓ+ˆHØ�<‰<Ð#ØÙMUÓVÉXÀT�4—;‘; U°i�;Õ@ÈXˆÐVÜ˜7“|ˆŒØ�<‰<˜1ÒØ#ˆD�Má=DÓE¹W°T˜T D§L¡LÓ0¸WÑEˆD�Mùò Wùò
 Fs   ¥BÁ,Bc                 ó¨  — 	 ddl }| j                  d«      }t	        |«      dk(  ry| j
                  €| j                  ||¬«       |j                  t	        |«      dft        ¬«      }| j
                  dk(  r†|j                  t	        |«      dft        ¬«      }t        |«      D ]  \  }}	|	j                  d«      ||<   Œ |j                  |t	        |«      dz
  z  «      j                  t        «      }
||
   |dd |S d}t        |«      D ]e  \  }}|| j                  |   z   }||k  ||k  z  }||   }t	        |«      s|}Œ6||z
  }|dk(  rd}n||z
  |z  }|j                  |«      }|dd ||<   |}Œg |j                  t!        |d	   j"                  «      «      ||dk(  <   |S # t        $ r( |D �cg c]  }| j                  |«      ‘Œ nc c}w c}cY S w xY w)
z|
        Find a points between 0 and 1 within the shape. Numpy acceleration allows points to be an array of floats.
        r   NF©r>  r@  r   ©Údtyper¢   rÙ   r¶  )ÚnumpyÚImportErrorÚpointr@  r¿   rø  rD  Úemptyr•   Ú	enumerater„  Úastyperš   rù  ÚnpointÚarrayr(  r‹   )r„   Ú	positionsr>  Únpr€   r@  ÚxyÚ
seg_pointsrÊ  ÚsegÚindexesÚsegment_startrÍ  ÚsegmentÚsegment_endÚposition_subsetrk  r6   Úsegment_posr¶   s                       rq   rO  zShape.npoint¼  sâ  € ð	:Ûð —=‘= Ó'ˆÜˆx‹=˜AÒØà�<‰<ÐØ×Ñ U°XÐÔ>Ø�X‰X”s˜9“~ qÐ)´ˆXÓ7ˆØ�<‰<˜1ÒàŸ™¤3 x£=°!Ð"4¼E˜ÓBˆJÜ# HÖ-‘��3Ø #§	¡	¨!£�
˜1’ð .à—h‘h˜y¬C°«M¸AÑ,=Ñ>Ó?×FÑFÄsÓKˆGØ˜wÑ'ˆB‰qˆEØˆIð ˆÜ'¨Ö1‰NˆE�7Ø'¨$¯-©-¸Ñ*>Ñ>ˆKØ,°	Ñ9¸iÈ+Ñ>UÑVˆOØ˜?Ñ+ˆBÜ�r”7Ø +�ØØ˜mÑ+ˆAØ�AŠvØ!‘à! MÑ1°QÑ6�Ø—‘˜{Ó+ˆAØ"#¡A $ˆBˆÑØ'‰Mð 2ð"  ŸX™X¤d¨8°B©<×+;Ñ+;Ó&<Ó=ˆˆ9˜‰>ÑØˆ	øôO ò 	:Ù/8Ó9©y¨�D—J‘J˜s•O©yùÔ9Ò9ð	:ús   ‚F  Æ GÆ-GÇ	GÇGc                 óf  — | j                  d«      }t        |«      dk(  ry	 |dk  r|d   j                  |«      S |dk\  r|d   j                  |«      S 	 | j
                  €| j                  ||¬«       | j
                  dk(  r7t        t        |t        |«      d	z
  z  «      «      }||   j                  d«      S d}d}|d   }t        |«      D ]+  \  }}|| j                  |   z   }	|	|k\  r||z
  |	|z
  z  } n|	}Œ- |j                  |«      S # t        $ r | j	                  |g|¬«      d   cY S w xY w)
a  
        Find a point between 0 and 1 within the Shape, going through the shape with regard to position.

        :param position: value between 0 and 1 within the shape.
        :param error: Length error permitted.
        :return: Point at the given location.
        Fr   NrÙ   r  r¶  ©r>  rF  r¢   )r@  r¿   rK  rž   rO  rø  rD  rš   r„  rM  rù  )
r„   r¤   r>  r@  rÊ  rW  r[  rX  rÍ  rY  s
             rq   rK  zShape.pointë  sY  € ð —=‘= Ó'ˆÜˆx‹=˜AÒØð	;Ø˜3ŠØ ‘{×(Ñ(¨Ó2Ð2Ø˜3ŠØ ‘|×)Ñ)¨(Ó3Ð3ð ð
 �<‰<ÐØ×Ñ U°XÐÔ>à�<‰<˜1ÒÜ”E˜(¤c¨(£m°aÑ&7Ñ8Ó9Ó:ˆAØ˜A‘;×$Ñ$ SÓ)Ð)àˆØˆØ˜1‘+ˆÜ'¨Ö1‰NˆE�7Ø'¨$¯-©-¸Ñ*>Ñ>ˆKØ˜hÒ&à'¨-Ñ7¸KÈ-Ñ<WÑX�ÙØ'‰Mð 2ð �}‰}˜[Ó)Ð)øô) ò 	;Ø—;‘; ˜z°�;Ó7¸Ñ:Ò:ð	;ús   ¢D »D Ä D0Ä/D0c                 ó>   — | j                  ||«       | j                  S r�   )rD  rø  ©r„   r>  r?  s      rq   rN  zShape.length  s   € Ø×Ñ˜5 )Ô,Ø�|‰|Ðr†   c                 ó   — t         ‚)z}
        Returns PathSegments which correctly produce this shape.

        This should be implemented by subclasses.
        r
  )r„   r  s     rq   r@  zShape.segments  s
   € ô "Ð!r†   c                 óX   — t        | j                  |¬«      «      j                  |¬«      S )zÖ
        Returns the path_d string of the shape.

        :param relative: Returns path_d in relative form.
        :param transformed: Return path_d, with applied transform.
        :return: path_d string
        ©r  rª   )r5  r@  r6   )r„   r«   r  s      rq   r6   zShape.d  s(   € ô �D—M‘M¨k�MÓ:Ó;×=Ñ=ÀxÐ=ÓPÐPr†   c                 ó  — | j                  |¬«      D �cg c]&  }t        t        t        «      s|j	                  «       ‘Œ( }}	 t        t        |Ž «      \  }}}}|rb| j                  �V| j                  �J| j                  j                  �4|rt        | j                  «      dz  }	nt        | j                  «      dz  }	nd}	t        |«      |	z
  t        |«      |	z
  t        |«      |	z   t        |«      |	z   fS c c}w # t        $ r Y yw xY w)a  
        Get the bounding box for the given shape.

        :param transformed: whether this is the transformed bounds or default.
        :param with_stroke: should the stroke-width be included in the bounds.
        :return: bounding box of the given element
        rb  Nrˆ  rÙ   )r@  rë   ÚCloseÚMover  r(  Úziprž   r  r:   rÌ   r•   r$  rK  rL  )
r„   r  r  rU  ÚbbsÚxminsÚyminsÚxmaxsÚymaxsrÿ  s
             rq   r  z
Shape.bbox(  s  € ð —}‘}°�}Ô=ó
á=�Üœe¤TÔ*ð �H‰H�JØ=ð 	ð 
ð	Ü)-¬c°3¨i«Ñ&ˆE�5˜% ñ
 Ø×!Ñ!Ð-Ø—[‘[Ð(¨D¯K©K×,=Ñ,=Ð,EáÜ˜d×8Ñ8Ó9¸CÑ?‘ä˜d×/Ñ/Ó0°3Ñ6‘àˆEô �‹J˜ÑÜ�‹J˜ÑÜ�‹J˜ÑÜ�‹J˜Ñð	
ð 	
ùò/
øô ò 	Ùð	ús   •+C5ÁC: Ã:	DÄDc                 ó  — t        |«      }|dk\  r|d   �t        |d   «      | _        |dk\  r|d   �t        |d   «      | _        |dk\  r|d   �t        |d   «      | _        |dk\  r|d   �t        |d   «      | _        yyy)aB  
        Generic SVG parsing of args. In those cases where the shape accepts finite elements we can process the last
        four elements of the shape with this code. This will happen in simpleline, roundshape, and rect. It will not
        happen in polyshape or paths since these can accept infinite arguments.
        r¢   r   Nr   r`  ra  )r¿   r\  r;   r^  r:   r9   r™   rú  ©r„   rà   Ú
arg_lengths      rq   Ú_init_shapezShape._init_shapeN  s—   € ô ˜“Yˆ
à˜Š?Ø�A‰wÐ"Ü!'¨¨Q©£�”Ø˜Š?Ø�A‰wÐ"Ü# D¨¡G›n�”Ø˜Š?Ø�A‰wÐ"Ü! $ q¡'›N�”	Ø˜Š?Ø�A‰wÐ"Ü! $ q¡'›]�•
ð #ð r†   c                 óZ  — | j                   �‘| j                   j                  �{|j                  t        ›d| j                   j                  ›d�«       | j                   j
                  dk7  r3|j                  d›dt        | j                   j
                  «      ›�«       | j                  �‘| j                  j                  �{|j                  t        ›d| j                  j                  ›d�«       | j                  j
                  dk7  r3|j                  d›dt        | j                  j
                  «      ›�«       | j                  �6| j                  dk7  r'|j                  dt        | j                  «      z  «       | j                  j                  «       s-|j                  t        ›dt        | j                  «      ›�«       | j                  �*| j                  s|j                  d	| j                  z  «       | j                  �&|j                  t         ›d| j                  ›d�«       yy)
z/
        Generic pieces of repr shape.
        Nr²  rR  r  r  r±  r  ústroke_width=%súapply=%s)r:   ri  r³  r  rë  rg  rÝ   r9   r  r  r;   r/  rþ  Úreprrú  r5   ré  rÀ  s     rq   Ú_repr_shapezShape._repr_shaped  sw  € ð
 �;‰;Ð" t§{¡{§¡Ð'BØ�M‰M¦¸¿¹×8JÓ8JÐKÔLØ�{‰{×"Ñ" cÒ)Ø—‘Ò)9¼3¸t¿{¹{×?RÑ?RÔ;SÐTÔUØ�9‰9Ð  T§Y¡Y§]¡]Ð%>Ø�M‰M¦}°d·i±i×6FÓ6FÐGÔHØ�y‰y× Ñ  CÒ'Ø—‘ª¼¸T¿Y¹Y×=NÑ=NÔ9OÐPÔQØ×ÑÐ(¨T×->Ñ->À#Ò-EØ�M‰MÐ+¬c°$×2CÑ2CÓ.DÑDÔEØ�~‰~×)Ñ)Ô+Ø�M‰MÖ%7¼¸d¿n¹nÔ9MÐNÔOØ�:‰:Ð!¨$¯*ª*Ø�M‰M˜* t§z¡zÑ1Ô2Ø�7‰7ÐØ�M‰M¦{°D·G³GÐ<Õ=ð r†   c                 óv  — | j                   �•| j                   j                  �|j                  t        ›d| j                   j                  ›d�«       | j                   j
                  dk7  r7|j                  t        ›dt        | j                   j
                  «      ›�«       | j                  �•| j                  j                  �|j                  t        ›d| j                  j                  ›d�«       | j                  j
                  dk7  r7|j                  t        ›dt        | j                  j
                  «      ›�«       | j                  �<| j                  dk7  r-|j                  t        ›dt        | j                  «      ›�«       | j                  j                  «       s-|j                  t        ›dt!        | j                  «      ›�«       | j"                  �*| j"                  s|j                  d| j"                  z  «       | j$                  �&|j                  t&        ›d| j$                  ›d�«       yy)z.
        Generic pieces of str shape.
        Nr²  rR  r  r±  rr  )r:   ri  r³  r  rë  rg  r  rÝ   r9   r  r  r  r  r;   r/  rþ  rs  rú  r5   ré  rÀ  s     rq   Ú
_str_shapezShape._str_shapez  s|  € ð �;‰;Ð" t§{¡{§¡Ð'BØ�M‰M¦¸¿¹×8JÓ8JÐKÔLØ�{‰{×"Ñ" cÒ)Ø—‘Þ6¼¸D¿K¹K×<OÑ<OÔ8PÐQôð �9‰9Ð  T§Y¡Y§]¡]Ð%>Ø�M‰M¦}°d·i±i×6FÓ6FÐGÔHØ�y‰y× Ñ  CÒ'Ø—‘Ö)>ÄÀDÇIÁI×DUÑDUÔ@VÐWÔXØ×ÑÐ(¨T×->Ñ->À#Ò-EØ�M‰MÖ%:¼CÀ×@QÑ@QÔ<RÐSÔTØ�~‰~×)Ñ)Ô+Ø�M‰MÖ%7¼¸d¿n¹nÔ9MÐNÔOØ�:‰:Ð!¨$¯*ª*Ø�M‰M˜* t§z¡zÑ1Ô2Ø�7‰7ÐØ�M‰M¦{°D·G³GÐ<Õ=ð r†   c                 ó.   — | j                   j                  S r�   ©rs  rÓ   rƒ   s    rq   Ú_namezShape._name‘  ó   € Ø�~‰~×&Ñ&Ð&r†   ©T)FTr  )rÓ   rÔ   rÕ   rU  r…   r¬  r«  rÐ  r  r  rø   r  rÞ  rá  rÜ  r,  Ú	MIN_DEPTHrD  rO  rK  rN  r@  r6   r  ro  rt  rv  ry  rm   r†   rq   r.  r.  I  s–   „ ñò2
ò2ò
7ò
-ò
ò!ò
ð
 €Gòò
ò
	ð #(°9Àtó Fð( ',ó -ð^ %*ó %*ðN !¨Ió ó"óQó$
òL+ò,>ò,>ó.'r†   r.  c                   óÆ   — e Zd ZdZd„ Zd„ Zd„ ZeZd„ ZeZ	d„ Z
d„ Zd„ ZeZed	d
ddeedfd„«       Zd	d
eefd„Zd„ Zd„ Zd„ Zd„ Zeefd„Zdd„Zd„ Ze	 	 	 	 	 	 dd„«       Zy)ÚPathSegmentuL  
    Path Segments are the base class for all the segment within a Path.
    These are defined in SVG 1.1 8.3 and SVG 2.0 9.3
    https://www.w3.org/TR/SVG11/paths.html#PathData
    https://www.w3.org/TR/SVG2/paths.html#PathElement

    These segments define a 1:1 relationship with the path_d or path data attribute, denoted in
    SVG by the 'd' attribute. These are moveto, closepath, lineto, and the curves which are cubic
    BÃ©zier curves, quadratic BÃ©zier curves, and elliptical arc. These are classed as Move, Close,
    Line, CubicBezier, QuadraticBezier, and Arc. And in path_d are denoted as M, Z, L, C, Q, A.

    There are lowercase versions of these commands. And for C, and Q there are S and T which are
    smooth versions. For lines there are also V and H commands which denote vertical and horizontal
    versions of the line command.

    The major difference between paths in 1.1 and 2.0 is the use of Z to truncate a command to close.
    "M0,0C 0,100 100,0 z" is valid in 2.0 since the last z replaces the 0,0. These are read by
    svg.elements but they are not written.
    c                 óà   — 	 t        |d   «      | _        	 t        |d   «      | _        d | _        d | _        y # t        t        f$ r
 d| _        Y Œ;w xY w# t        t        f$ r
 d| _        Y ŒCw xY w)Nr«   FÚsmoothT)r™   r«   r!  rž   r€  r¾   r‹   rë  s     rq   r…   zPathSegment.__init__ª  sw   € ð	"Ü  ¨
Ñ!3Ó4ˆDŒMð	Ü˜v hÑ/Ó0ˆDŒKð ˆŒ
Øˆ�øô œ*Ð%ò 	"Ø!ˆDŽMð	"ûô œ*Ð%ò 	ØˆDŽKð	ús    ‚8 –A ¸AÁAÁA-Á,A-c                 ó  — g }| j                   }|�|j                  dt        |«      z  «       | j                  }|�|j                  dt        |«      z  «       | j                  j
                  ›ddj                  |«      ›d�S )Nzstart=%szend=%srg   rê  rh   )r¾   r³  rs  r‹   rs  rÓ   r¹  )r„   r¼  rº   rÎ  s       rq   r&  zPathSegment.__repr__¶  sk   € ØˆØ�J‰JˆØˆ=Ø�M‰M˜*¤t¨A£wÑ.Ô/Ø�H‰HˆØˆ=Ø�M‰M˜(¤T¨!£WÑ,Ô-ØŸ>™>×2Ó2°D·I±I¸fÕ4EÐFÐFr†   c                 ó^   — t        |t        t        f«      rt        | «      }||z  }|S t        S r�   r   r  s      rq   r  zPathSegment.__mul__À  r  r†   c                 óŠ   — t        |t        «      rt        | |«      }|S t        |t        «      rt        | «      |z   }|S t        S r�   )rë   r~  r5  rÝ   rD  ©r„   rí   r!   s      rq   rø   zPathSegment.__iadd__É  s@   € Ü�eœ[Ô)Ü˜˜eÓ$ˆDØˆKÜ˜œsÔ#Ü˜“: Ñ%ˆDØˆKÜÐr†   c                 óž   — | j                  «       }| j                  �0| j                  rd| j                  ›d|›�S d| j                  ›d|›�S |S )zì
        This defines an individual path segment string. Since this isn't part of a Path it appends a pseudo-Move
        command to correctly provide the starting position.
        :return: string representation of the object.
        zm r�  zM )r6   r¾   r«   )r„   r6   s     rq   r)  zPathSegment.__str__Ô  sJ   € ð �F‰F‹HˆØ�:‰:Ð!Ø�}‹}Ø$(§J£J±Ð2Ð2ð ð %)§J£J±Ð2Ð2Øˆr†   c                 ó   — d| _         | S )Nr¶  )rÅ  rƒ   s    rq   Ú__iter__zPathSegment.__iter__â  s   € ØˆŒØˆr†   c                 óÂ   — | xj                   dz  c_         	 | | j                      }|€$| xj                   dz  c_         | | j                      }|S # t        $ r t        ‚w xY wr<  )rÅ  r5  ÚStopIteration)r„   r”  s     rq   Ú__next__zPathSegment.__next__æ  sZ   € Ø�Š�!‰�ð	 Ø�t—v‘v‘,ˆCØˆ{Ø—’˜!‘•Ø˜4Ÿ6™6‘l�ØˆJøÜò 	 ÜÐð	 ús   —6A ÁArÙ   r  Nr   c                 óx  — |€| j                  |«      }|€| j                  |«      }||z   dz  }| j                  |«      }	t        ||z
  «      }
t        |	|z
  «      }t        ||	z
  «      }||z   }||
z
  |kD  s||k  r>|dz  }t        j                  | ||||	|||«      t        j                  | |||	||||«      z   S |S )z5Recursively approximates the length by straight linesrˆ  r¢   )rK  rû   r~  Úsegment_length)Úcurver¾   r‹   Ústart_pointÚ	end_pointr>  r?  ÚdepthÚmidÚ	mid_pointrN  Ú
first_halfÚsecond_halfÚlength2s                 rq   rŒ  zPathSegment.segment_lengthó  së   € ð ÐØŸ+™+ eÓ,ˆKØÐØŸ™ CÓ(ˆIØ�s‰{˜cÑ!ˆØ—K‘K Ó$ˆ	Ü�Y Ñ,Ó-ˆÜ˜ [Ñ0Ó1ˆ
Ü˜) iÑ/Ó0ˆà˜{Ñ*ˆØ�fÑ˜uÒ$¨%°)Ò*;à�Q‰JˆEÜ×-Ñ-Ø�u˜c ;°	¸5À)ÈUóä×*Ñ*Ø�s˜C ¨I°u¸iÈóñð ð ˆr†   c                 ó6   — t         j                  | ||||¬«      S )Nr=  )r~  rŒ  )r„   r¾   r‹   r>  r?  s        rq   Ú_line_lengthzPathSegment._line_length  s%   € Ü×)Ñ)Ø�%˜ E°Yð *ó 
ð 	
r†   c                 óê   — | D �cg c]  }|€Œ|j                   ‘Œ }}| D �cg c]  }|€Œ|j                  ‘Œ }}t        |«      }t        |«      }t        |«      }t        |«      }||||fS c c}w c c}w )zQreturns the bounding box for the segment.
        xmin, ymin, xmax, ymax
        )rE   rF   rK  rL  )r„   rÆ  ÚxsÚysÚxminrÌ  ÚyminrÎ  s           rq   r  zPathSegment.bbox  sw   € ñ  Ó1™4�a 1¡=ˆa�c‹c˜4ˆÐ1ÙÓ1™4�a 1¡=ˆa�c‹c˜4ˆÐ1Ü�2‹wˆÜ�2‹wˆÜ�2‹wˆÜ�2‹wˆØ�T˜4 Ð%Ð%ùò 2ùÚ1s   …A+�A+¡A0©A0c                 óL   — | j                   }| j                  | _         || _        y)z4
        Reverses the current path segment.
        N)r‹   r¾   )r„   r‹   s     rq   ÚreversezPathSegment.reverse&  s   € ð �h‰hˆØ—:‘:ˆŒØˆ�
r†   c                 ó>   — t        | j                  |g«      d   «      S )z¡
        Returns the point at a given amount through the path segment.
        :param position:  t value between 0 and 1
        :return: Point instance
        r   )r1  rO  )r„   r¤   s     rq   rK  zPathSegment.point.  s   € ô �T—[‘[ ( Ó,¨QÑ/Ó0Ð0r†   c                 ó4   — | j                   gt        |«      z  S )zÓ
        Returns the points at given positions along the path segment
        :param positions: N-sized sequence of t value between 0 and 1
        :return: N-sized sequence of 2-sized sequence of float
        )r‹   r¿   )r„   rQ  s     rq   rO  zPathSegment.npoint6  s   € ð —‘ˆzœC 	›NÑ*Ð*r†   c                  ó   — y)z|
        Returns the length of this path segment.

        :param error:
        :param min_depth:
        :return:
        r   rm   r_  s      rq   rN  zPathSegment.length>  s   € ð r†   c                 ó   — t         ‚)zËReturns the fragment path_d value for the current path segment.

        For a relative segment the current_point must be provided. If it is omitted then only an absolute segment
        can be returned.r
  ©r„   r£   r«   r€  s       rq   r6   zPathSegment.dH  s
   € ô
 "Ð!r†   c                 ó@   — t        t        j                  | |«      «      S r�   )r(  r~  Úfind_intersections)r„   rX  s     rq   Ú	intersectzPathSegment.intersectO  s   € Ü”K×2Ñ2°4¸ÓAÓBÐBr†   c              #   ó®  K  — |dk\  sJ ‚ddl }|j                  |d   |d   |¬«      }	|j                  |d   |d   |¬«      }
|	d   |	d   z
  }|
d   |
d   z
  }| j                  |	«      }|j                  |
«      }|dd…df   |dd…df   dz  z   }|dd…df   |dd…df   dz  z   }|j                  |j	                  |dd «      |j	                  |dd «      «      \  }}|j                  |j	                  |dd «      |j	                  |dd «      «      \  }}|j                  |j                  |dd «      |j                  |dd «      «      \  }}|j                  |j                  |dd «      |j                  |dd «      «      \  }}||z
  ||z
  z  ||z
  ||z
  z  z
  }||z
  ||z
  z  ||z
  ||z
  z  z
  }||z
  ||z
  z  ||z
  ||z
  z  z
  }|j                  |dk7  |j                  |«      |j                  |«      k(  |j                  |«      |j                  |«      k(  t        |«      t        |«      k\  t        |«      t        |«      k\  f«      j                  d¬«      }|j                  |«      }t        |«      dk7  r|d	k  r|d   �|d   �|d   |d   f–— y||   ||   z  }||   ||   z  }t        |«      D ]�  \  }}|d   t        |d   «      |z  z   } |d   t        |d   «      |z  z   }!||   |z  }"||   |z  }#||k(  r| |"z   |!|#z   f–— ŒVt        j                  | || | |z   | |"z   f|!|!|z   |!|#z   f||dz   ||¬
«      E d{  –—†  Œ‘ y7 Œ­w)ah  
        Calculate intersections by linearized polyline intersections with enhancements.
        We calculate probable intersections by linearizing our segment into `sample` polylines
        we then find those intersecting segments and the range of t where those intersections
        could have occurred and then subdivide those segments in a series of enhancements to
        find their intersections with increased precision.

        This code is fast, but it could fail by both finding a rare phantom intersection (if there
        is a low or no enhancements) or by failing to find a real intersection. Because the polylines
        approximation did not intersect in the base case.

        At a resolution of about 1e-15 the intersection calculations become unstable and intersection
        candidates can duplicate or become lost. We terminate at that point and give the last best
        guess.

        :param segment1:
        :param segment2:
        :param samples:
        :param ta:
        :param tb:
        :param depth:
        :param enhancements:
        :param enhance_samples:
        :return:
        r   r   Nr¢   )Únumrn  r¶  )Úaxisç»½×Ùß|Û=)ÚtaÚtbÚsamplesr�  ÚenhancementsÚenhance_samples)rI  ÚlinspacerO  Úmeshgridr7  r6  ÚdstackÚsignrû   ÚallÚargwherer¿   rM  r•   r~  r¥  )$Úsegment1Úsegment2r­  r«  r¬  r�  r®  r¯  rR  r¼   rh  Ústep_aÚstep_br  r€  Úax1Úbx1Úax2Úbx2Úay1Úby1Úay2Úby2ÚdenomÚqaÚqbÚhitsÚ	where_hitÚta_hitÚtb_hitrÊ  ÚhitÚatÚbtÚa_fractionalÚb_fractionals$                                       rq   r¥  zPathSegment.find_intersectionsR  sÅ  è ø€ ðH ˜!Š|Ðˆ|ãà�K‰K˜˜1™˜r !™u¨'ˆKÓ2ˆØ�K‰K˜˜1™˜r !™u¨'ˆKÓ2ˆØ�1‘˜˜!™‘ˆØ�1‘˜˜!™‘ˆØ�O‰O˜AÓˆØ�O‰O˜AÓˆØŠa�ˆd‰G�aš˜1˜‘g ‘lÑ"ˆØŠa�ˆd‰G�aš˜1˜‘g ‘lÑ"ˆà—;‘;˜rŸw™w q¨¨" v›°·±¸¸#¸2¸³Ó@‰ˆˆSØ—;‘;˜rŸw™w q¨¨ u›~¨r¯w©w°q¸¸°u«~Ó>‰ˆˆSØ—;‘;˜rŸw™w q¨¨" v›°·±¸¸#¸2¸³Ó@‰ˆˆSØ—;‘;˜rŸw™w q¨¨ u›~¨r¯w©w°q¸¸°u«~Ó>‰ˆˆSà�s‘˜s S™yÑ)¨S°3©Y¸3À¹9Ñ,EÑEˆØ�C‰i˜C #™IÑ&¨#°©)¸¸c¹	Ñ)BÑBˆØ�C‰i˜C #™IÑ&¨#°©)¸¸c¹	Ñ)BÑBˆØ�y‰yà˜‘
Ø—‘˜“ "§'¡'¨"£+Ñ-Ø—‘˜“ "§'¡'¨"£+Ñ-Ü�E“
œc "›gÑ%Ü�E“
œc "›gÑ%ðó
÷ ‰#�1ˆ#‹+ð 	ð —K‘K Ó%ˆ	Üˆy‹>˜QÒ 6¨E¢>à�!‰uÐ  R¨¡UÐ%6Ø˜‘e˜R ™U�lÒ"Øð �D‘˜E $™KÑ'ˆØ�D‘˜E $™KÑ'ˆä 	Ö*‰FˆAˆsà�A‘œ˜s 1™v›¨Ñ/Ñ/ˆBØ�A‘œ˜s 1™v›¨Ñ/Ñ/ˆBà�q‘	˜FÑ"ð ð " !™9 vÑ-ˆLØ˜Ò$à˜<Ñ'¨¨lÑ):Ð:Ó:ä&×9Ñ9ØØØ˜B ™K¨¨lÑ):Ð;Ø˜B ™K¨¨lÑ):Ð;Ø+Ø !™)Ø!-Ø$3ð :ó 	÷ 	ñ 	ñ +ð	ús   ‚M	MÍMÍM©NNN)rê  ©rÙ   r  NrÏ  r   r   rê  )rÓ   rÔ   rÕ   rU  r…   r&  r  rY  rø   r  r)  r‡  rŠ  Únextr\  r,  r|  rŒ  r—  r  rž  rK  rO  rN  r6   r¦  r¥  rm   r†   rq   r~  r~  •  sÏ   „ ñò(
òGòð €Hòð €Gòòò	 ð €Dàð ØØØØØØòó ððB "%¨#°UÀió 
ò

&òò1ò+ð !¨Ió ó"òCð ð ØØØØØòbó ñbr†   r~  c                   óH   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zdd„Zy
)re  zùRepresents move commands. Moves to a new location without any path distance.
    Paths that consist of only move commands, are valid.

    Move serve to make discontinuous paths into continuous linked paths segments
    with non-drawn sections.
    c                 ó2  — t        j                  | fi |¤Ž d| _        d| _        t	        |«      dk(  rd|v r
|d   | _        d|v r†|d   | _        n{t	        |«      dk(  rKt	        |«      dk(  r|d   | _        nTd|v r|d   | _        |d   | _        n;d|v r7|d   | _        |d   | _        n"t	        |«      dk(  r|d   | _        |d   | _        | j                  �t        | j                  «      | _        | j                  �t        | j                  «      | _        yy)aÍ  
        Move commands most importantly go to a place. So if one location is given, that's the end point.
        If two locations are given then first is the start location.

        For many Move commands it is not necessary to have an original start location. The start point provides a
        linked locations for some elements that may require it. If known it can be provided.

        Move(p) where p is the End point.
        Move(s,e) where s is the Start point, e is the End point.
        Move(p, start=s) where p is End point, s is the Start point.
        Move(p, end=e) where p is the Start point, e is the End point.
        Move(start=s, end=e) where s is the Start point, e is the End point.
        Nr   r‹   r¾   r¢   r   )r~  r…   r‹   r¾   r¿   r1  rû  s      rq   r…   zMove.__init__À  s  € ô 	×Ñ˜TÑ, VÒ,ØˆŒØˆŒ
Üˆt‹9˜Š>Ø˜‰Ø! %™=�”Ø˜&Ñ Ø# G™_�•
Ü�‹Y˜!Š^Ü�6‹{˜aÒØ ™7�•à˜F‘?Ø!% a¡�D”JØ% e™}�D•HØ Ñ&Ø!'¨¡�D”JØ# A™w�D•HÜ�‹Y˜!Š^Ø˜a™ˆDŒJØ˜A‘wˆDŒHØ�:‰:Ð!Ü˜tŸz™zÓ*ˆDŒJØ�8‰8ÐÜ˜TŸX™X“ˆD�Hð  r†   c                 óà   — t        |t        «      rt        |«      }t        |t        «      rB| j                  �| xj                  |z  c_        | j                  �| xj                  |z  c_        | S r�   ©rë   rÝ   r\  r¾   r‹   rì   s     rq   rî   zMove.__imul__è  óT   € Ü�eœSÔ!Ü˜5“MˆEÜ�eœVÔ$Ø�z‰zÐ%Ø—
’
˜eÑ#•
Ø�x‰xÐ#Ø—’˜EÑ!•Øˆr†   c                 óZ   — t        | j                  | j                  | j                  ¬«      S ©Nrª   )re  r¾   r‹   r«   rƒ   s    rq   rú   zMove.__copy__ò  s   € Ü�D—J‘J §¡°4·=±=ÔAÐAr†   c                 ó–   — t        |t        «      st        S | j                  |j                  k(  xr | j                  |j                  k(  S r�   )rë   re  rD  r¾   r‹   rì   s     rq   r  zMove.__eq__õ  s7   € Ü˜%¤Ô&Ü!Ð!Ø�z‰z˜UŸ[™[Ñ(ÒB¨T¯X©X¸¿¹Ñ-BÐBr†   c                 ó:   — t        |t        «      st        S | |k(   S r�   )rë   re  rD  rì   s     rq   r  zMove.__ne__ú  ó   € Ü˜%¤Ô&Ü!Ð!Ø˜5‘=Ð Ð r†   c                  ó   — yrG  rm   rƒ   s    rq   rH  zMove.__len__ÿ  rI  r†   c                 óR   — |dk(  r| j                   S |dk(  r| j                  S t        ‚r¡   ©r¾   r‹   r5  rL  s     rq   rN  zMove.__getitem__  ó)   € Ø�1Š9Ø—:‘:ÐØ�QŠYØ—8‘8ˆOäÐr†   c                 ó®   — | j                   j                  | j                   j                  | j                   j                  | j                   j                  fS )z:Return the bounding box for a Move which is the end point.)r‹   rE   rF   rƒ   s    rq   r  z	Move.bbox
  s1   € à�x‰x�z‰z˜4Ÿ8™8Ÿ:™: t§x¡x§z¡z°4·8±8·:±:Ð=Ð=r†   Nc                 ól   — |�|€| j                   s|�|sd| j                  z  S d| j                  |z
  z  S )NzM %szm %s©r«   r‹   r£  s       rq   r6   zMove.d  s?   € àÐ!ØÐ  T§]¢]ØÐ$©Xà˜DŸH™HÑ$Ð$Ø˜Ÿ™ MÑ1Ñ2Ð2r†   rÎ  )rÓ   rÔ   rÕ   rU  r…   rî   rú   r  r  rH  rN  r  r6   rm   r†   rq   re  re  ¸  s7   „ ñò&'òPòBòCò
!ò
òò>ô3r†   re  c                   ó&   — e Zd ZdZdd„Zeddfd„Zy)ÚCurvezRepresents curve commandsNc                 óŒ   — t        j                  | fi |¤Ž |�t        |«      nd | _        |�t        |«      | _        y d | _        y r�   ©r~  r…   r1  r¾   r‹   ©r„   r¾   r‹   rá   s       rq   r…   zCurve.__init__  ó<   € Ü×Ñ˜TÑ, VÒ,Ø%*Ð%6”U˜5”\¸DˆŒ
Ø!$ ”5˜“:ˆ�°dˆ�r†   rÙ   r  c              #   ó˜  K  — d||z
  z  |z   }| j                  |«      }| j                  |«      }| j                  |«      }| j                  d||z
  z  |z   «      }| j                  d||z
  z  |z   «      }	t        |||¬«      }
t        j                  ||
j                  «      }t        j                  ||
j                  «      }t        j                  |	|
j                  «      }t        ||z
  «      t        ||z
  «      z   |z  }||k  r|
–— y | j                  |||¬«      E d {  –—†  | j                  |||¬«      E d {  –—†  y 7 Œ!7 Œ­w)Nr�  g      Ð?g      è?)r¾   r‹   Úcontrol)r>  r¾   r‹   )rK  ÚArcr1  r!  Úcenterrû   Úas_circular_arcs)r„   r>  r¾   r‹   r‘  rŽ  r’  r�  Úsample_point0Úsample_point1rÉ   Úradiusr¦  r  Úcurrent_errors                  rq   rì  zCurve.as_circular_arcs   s1  è ø€ Ø�S˜5‘[Ñ! EÑ)ˆØ—j‘j Ó'ˆØ—J‘J˜s“Oˆ	Ø—J‘J˜s“Oˆ	ØŸ
™
 4¨3°©;Ñ#7¸%Ñ#?Ó@ˆØŸ
™
 4¨3°©;Ñ#7¸%Ñ#?Ó@ˆÜ˜¨¸IÔFˆÜ—‘ ¨S¯Z©ZÓ8ˆÜ�^‰^˜M¨3¯:©:Ó6ˆÜ�^‰^˜M¨3¯:©:Ó6ˆÜ˜R &™[Ó)¬C°°V±Ó,<Ñ<ÀÑFˆØ˜5Ò Ø‹Ià×,Ñ,°5ÀÈ3Ð,ÓO×OÐOØ×,Ñ,°5ÀÈÐ,ÓM×MÑMð PøØMús$   ‚D"E
Ä$EÄ%E
Å EÅE
ÅE
©NN)rÓ   rÔ   rÕ   rU  r…   r,  rì  rm   r†   rq   rã  rã    s   „ Ù#ó;ð
 &+°#¸3ô Nr†   rã  c                   óZ   — e Zd ZdZdd„Zd„ Zd„ Zd„ Zd„ Zd„ Z	d	„ Z
d
„ Zdd„Zdd„Zdd„Zy)ÚLinearúRepresents line commands.Nc                 óŒ   — t        j                  | fi |¤Ž |�t        |«      nd | _        |�t        |«      | _        y d | _        y r�   rå  ræ  s       rq   r…   zLinear.__init__6  rç  r†   c                 óf   — | j                  | j                  | j                  | j                  ¬«      S r×  )rs  r¾   r‹   r«   rƒ   s    rq   rú   zLinear.__copy__;  s#   € Ø�~‰~˜dŸj™j¨$¯(©(¸T¿]¹]ˆ~ÓKÐKr†   c                 ó¢   — t        || j                  «      st        S | j                  |j                  k(  xr | j                  |j                  k(  S r�   )rë   rs  rD  r¾   r‹   rì   s     rq   r  zLinear.__eq__>  s;   € Ü˜% §¡Ô0Ü!Ð!Ø�z‰z˜UŸ[™[Ñ(ÒB¨T¯X©X¸¿¹Ñ-BÐBr†   c                 óF   — t        || j                  «      st        S | |k(   S r�   )rë   rs  rD  rì   s     rq   r  zLinear.__ne__C  s#   € Ü˜% §¡Ô0Ü!Ð!Ø˜5‘=Ð Ð r†   c                 óà   — t        |t        «      rt        |«      }t        |t        «      rB| j                  �| xj                  |z  c_        | j                  �| xj                  |z  c_        | S r�   rÔ  rì   s     rq   rî   zLinear.__imul__H  rÕ  r†   c                  ó   — yrG  rm   rƒ   s    rq   rH  zLinear.__len__R  rI  r†   c                 óR   — |dk(  r| j                   S |dk(  r| j                  S t        ‚r¡   rÝ  rL  s     rq   rN  zLinear.__getitem__U  rÞ  r†   c           	      ó  — 	 dd l }|j                  t        |«      dft        ¬«      }|j	                  |ddg| j
                  j                  | j                  j                  g«      |d d …df<   |j	                  |ddg| j
                  j                  | j                  j                  g«      |d d …df<   |S # t        $ rB |D �cg c]-  }t        j                  | j
                  | j                  |«      ‘Œ/ nc c}w c}cY S w xY w)Nr   r   )ÚshaperH  r¢   )rI  rL  r¿   r•   Úinterpr¾   rE   r‹   rF   rJ  r1  r§  )r„   rQ  rR  rS  r€   s        rq   rO  zLinear.npoint]  sÌ   € ð	SÛà—‘¤ Y£°Ð 3¼5�ÓAˆBØ—y‘y ¨Q°¨F°T·Z±Z·\±\À4Ç8Á8Ç:Á:Ð4NÓOˆBŠq�!ˆt‰HØ—y‘y ¨Q°¨F°T·Z±Z·\±\À4Ç8Á8Ç:Á:Ð4NÓOˆBŠq�!ˆt‰HØˆIøÜò 	SÙHQÓRÉ	À”E—M‘M $§*¡*¨d¯h©h¸Õ<É	ùÔRÒRð	Sús   ‚B3B6 Â6DÃ2C6Ã5	DÄ Dc                 óˆ   — | j                   �6| j                  �*t        j                  | j                  | j                   «      S yr}   )r¾   r‹   r1  r!  r_  s      rq   rN  zLinear.lengthh  s1   € Ø�:‰:Ð! d§h¡hÐ&:Ü—>‘> $§(¡(¨D¯J©JÓ7Ð7àr†   c                 ót  — | j                   }| j                  }|d   |j                  z
  }|d   |j                  z
  }|j                  |j                  z
  }|j                  |j                  z
  }||z  ||z  z   }	||z  ||z  z   }
|	dk(  ry|
t	        |	«      z  }|r|dkD  rd}|dk  rd}| j                  |«      S )z7Gives the point on the line closest to the given point.r   r¢   )r¾   r‹   rE   rF   r•   rK  )r„   rÆ  Úrespect_boundsr¼   rh  Úv_ap_xÚv_ap_yÚv_ab_xÚv_ab_yÚsq_distance_abÚab_ap_productrÛ   s               rq   Úclosest_segment_pointzLinear.closest_segment_pointn  sÀ   € à�J‰JˆØ�H‰HˆØ�1‘˜Ÿ™‘ˆØ�1‘˜Ÿ™‘ˆØ—‘�q—s‘s‘ˆØ—‘�q—s‘s‘ˆØ &™¨6°F©?Ñ:ˆØ ™¨&°6©/Ñ9ˆØ˜QÒØØ¤ ~Ó!6Ñ6ˆÙØ˜ŠzØ�Ø˜ŠzØ�Ø�z‰z˜&Ó!Ð!r†   c                 ó   — t         ‚r�   r
  r£  s       rq   r6   zLinear.d‚  s   € Ü!Ð!r†   rñ  r{  rÎ  )rÓ   rÔ   rÕ   rU  r…   rú   r  r  rî   rH  rN  rO  rN  r  r6   rm   r†   rq   ró  ró  3  s?   „ Ù#ó;ò
LòCò
!ò
òòò	Sóó"ô("r†   ró  c                   ó   — e Zd ZdZdd„Zy)rd  zñRepresents close commands. If this exists at the end of the shape then the shape is closed.
    the methodology of a single flag close fails in a couple ways. You can have multipart shapes
    which can close or not close several times.
    Nc                 ó.   — |�|€| j                   s|�|syy)Nr©   r¨   rª   r£  s       rq   r6   zClose.dŒ  s"   € àÐ!ØÐ  T§]¢]ØÐ$©Xààr†   rÎ  ©rÓ   rÔ   rÕ   rU  r6   rm   r†   rq   rd  rd  †  s   „ ñô
r†   rd  c                   ó   — e Zd ZdZdd„Zy)ÚLinerô  Nc                 ól   — |�|€| j                   s|�|sd| j                  z  S d| j                  |z
  z  S )NzL %szl %srá  r£  s       rq   r6   zLine.dš  s?   € àÐ!ØÐ  T§]¢]ØÐ$©Xà˜DŸH™HÑ$Ð$à˜TŸX™X¨Ñ5Ñ6Ð6r†   rÎ  r  rm   r†   rq   r  r  —  s
   „ Ù#ô7r†   r  c                   ób   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zdd„Zd„ Zdd„Zy)ÚQuadraticBezieru&   Represents Quadratic BÃ©zier commands.c                 óh   — t        j                  | ||fi |¤Ž |�t        |«      | _        y d | _        y r�   )rã  r…   r1  ré  )r„   r¾   ré  r‹   rá   s        rq   r…   zQuadraticBezier.__init__¨  s-   € Ü�‰�t˜U CÑ2¨6Ò2Ø)0Ð)<”u˜W“~ˆ�À$ˆ�r†   c                 óŒ   — dt        | j                  «      ›dt        | j                  «      ›dt        | j                  «      ›d�S )NzQuadraticBezier(start=z
, control=ú, end=rh   )rs  r¾   ré  r‹   rƒ   s    rq   r&  zQuadraticBezier.__repr__¬  s/   � ä�—‘ÕÜ�—‘ÕÜ�—‘�Nð
ð 	
r†   c                 ó†   — t        | j                  | j                  | j                  | j                  | j
                  ¬«      S ©N©r«   r€  )r  r¾   ré  r‹   r«   r€  rƒ   s    rq   rú   zQuadraticBezier.__copy__³  s2   € ÜØ�J‰JØ�L‰LØ�H‰HØ—]‘]Ø—;‘;ô
ð 	
r†   c                 óÌ   — t        |t        «      st        S | j                  |j                  k(  xr4 | j                  |j                  k(  xr | j
                  |j
                  k(  S r�   )rë   r  rD  r¾   r‹   ré  rì   s     rq   r  zQuadraticBezier.__eq__¼  sQ   € Ü˜%¤Ô1Ü!Ð!à�J‰J˜%Ÿ+™+Ñ%ò .Ø—‘˜EŸI™IÑ%ò.à—‘ §¡Ñ-ð	
r†   c                 ó:   — t        |t        «      st        S | |k(   S r�   )rë   r  rD  rì   s     rq   r  zQuadraticBezier.__ne__Å  s   € Ü˜%¤Ô1Ü!Ð!Ø˜5‘=Ð Ð r†   c                 ó"  — t        |t        «      rt        |«      }t        |t        «      rc| j                  �| xj                  |z  c_        | j                  �| xj                  |z  c_        | j
                  �| xj
                  |z  c_        | S r�   )rë   rÝ   r\  r¾   ré  r‹   rì   s     rq   rî   zQuadraticBezier.__imul__Ê  sl   € Ü�eœSÔ!Ü˜5“MˆEÜ�eœVÔ$Ø�z‰zÐ%Ø—
’
˜eÑ#•
Ø�|‰|Ð'Ø—’ Ñ%•Ø�x‰xÐ#Ø—’˜EÑ!•Øˆr†   c                  ó   — y)Nr`  rm   rƒ   s    rq   rH  zQuadraticBezier.__len__Ö  rI  r†   c                 ót   — |dk(  r| j                   S |dk(  r| j                  S |dk(  r| j                  S t        ‚©Nr   r¢   r   )r¾   ré  r‹   r5  rL  s     rq   rN  zQuadraticBezier.__getitem__Ù  s:   € Ø�1Š9Ø—:‘:ÐØ�QŠYØ—<‘<ÐØ�QŠYØ—8‘8ˆOÜÐr†   c           	      óv  ‡‡‡‡	‡
‡— | j                   \  ŠŠ	| j                  \  ŠŠ
| j                  \  ŠŠˆˆˆˆ	ˆ
ˆfd„}	 ddl}|j	                  t        |«      df¬«      } ||j                  |«      «      \  |dd…df<   |dd…df<   |S # t        $ r% |D �cg c]  }t         ||«      Ž ‘Œ nc c}w c}cY S w xY w)úlCalculate the x,y position at a certain position of the path. `pos` may be a
        float or a NumPy array.c                 ó|   •— d| z
  }| | z  }||z  }|| z  }|‰z  d|z  ‰z  z   |‰z  z   |‰z  d|z  ‰	z  z   |‰
z  z   fS )Nr¢   r   rm   )r¤   Ún_posÚpos_2Ún_pos_2Ú	n_pos_posrG   rI   rK   rH   rJ   rL   s        €€€€€€rq   Ú_compute_pointz.QuadraticBezier.npoint.<locals>._compute_pointé  sq   ø€ à˜‘LˆEØ˜xÑ'ˆEØ˜e‘mˆGØ Ñ(ˆIð ˜"‘˜q 9™}¨rÑ1Ñ1°E¸B±JÑ>Ø˜"‘˜q 9™}¨rÑ1Ñ1°E¸B±JÑ>ðð r†   r   Nr   ©rý  r¢   )	r¾   ré  r‹   rI  rL  r¿   rP  rJ  r1  )r„   rQ  r%  rR  rS  r¤   rG   rI   rK   rH   rJ   rL   s         @@@@@@rq   rO  zQuadraticBezier.npointâ  sµ   ý€ ð —‘‰ˆˆBØ—‘‰ˆˆBØ—‘‰ˆˆB÷
	ñ 
	ð	PÛà—‘¤ Y£°Ð 3�Ó4ˆBÙ!/°·±¸Ó0CÓ!DÑˆBŠq�!ˆt‰H�bš˜A˜‘hØˆIøÜò 	PÙENÓOÁY¸”E™>¨(Ó3Ò4ÁYùÔOÒOð	Pús   ¿A
B
 Â
B8ÂB-Â,	B8Â7B8c                 ó‚  — | j                   j                  | j                  j                  z
  }| j                   j                  d| j                  j                  z  z
  | j                  j                  z   }|dk7  r|t	        |«      z  }nd}d|cxk  rdk  rJn nG| j                   j                  | j                  j                  | j                  |«      j                  g}n,| j                   j                  | j                  j                  g}| j                   j                  | j                  j                  z
  }| j                   j                  d| j                  j                  z  z
  | j                  j                  z   }|dk7  r|t	        |«      z  }nd}d|cxk  rdk  rJn nG| j                   j                  | j                  j                  | j                  |«      j                  g}n,| j                   j                  | j                  j                  g}t        |«      t        |«      t        |«      t        |«      fS )uK   
        Returns the bounding box for the quadratic BÃ©zier curve.
        r   r   r�  r¢   )	r¾   rE   ré  r‹   r•   rK  rF   rK  rL  )r„   rÅ  r6   r°   Úx_valuesÚy_valuess         rq   r  zQuadraticBezier.bboxþ  s{  € ð �J‰J�L‰L˜4Ÿ<™<Ÿ>™>Ñ)ˆØ�J‰J�L‰L˜1˜tŸ|™|Ÿ~™~Ñ-Ñ-°·±·
±
Ñ:ˆØ�Š6Ø”E˜!“H‘‰AàˆAØˆqŒ9�1�9ØŸ
™
Ÿ™ d§h¡h§j¡j°$·*±*¸Q³-·/±/ÐB‰HàŸ
™
Ÿ™ d§h¡h§j¡jÐ1ˆHØ�J‰J�L‰L˜4Ÿ<™<Ÿ>™>Ñ)ˆØ�J‰J�L‰L˜1˜tŸ|™|Ÿ~™~Ñ-Ñ-°·±·
±
Ñ:ˆØ�Š6Ø”E˜!“H‘‰AàˆAØˆqŒ9�1�9ØŸ
™
Ÿ™ d§h¡h§j¡j°$·*±*¸Q³-·/±/ÐB‰HàŸ
™
Ÿ™ d§h¡h§j¡jÐ1ˆHÜ�8‹}œc (›m¬S°«]¼CÀ»MÐIÐIr†   Nc                 óÊ  — | j                   d| j                  z  z
  | j                  z   }d| j                  | j                   z
  z  }	 d|j                  |j                  z  |j                  |j                  z  z   z  }d|j                  |j                  z  |j                  |j                  z  z   z  }|j                  |j                  z  |j                  |j                  z  z   }dt        ||z   |z   «      z  }t        |«      }	d|z  |	z  }
dt        |«      z  }||	z  }|
|z  |	|z  ||z
  z  z   d|z  |z  ||z  z
  t        d|	z  |z   |z   ||z   z  «      z  z   d|
z  z  }|S # t        t        f$ rp t        |«      dk  rt        |«      }Y |S t        |«      t        |«      z  }|dk\  rt        |«      t        |«      z
  }Y |S t        |«      ||z  dz  |z
  dz   z  }Y |S w xY w)ú9Calculate the length of the path up to a certain positionr   ra  rª  r¢   )
r¾   ré  r‹   r7  r6  r   r   r{  rž   rû   )r„   r>  r?  r¼   rh  r½   ÚBr·   ÚSabcÚA2ÚA32ÚC2ÚBArº   r€  s                  rq   rN  zQuadraticBezier.length  sê  € à�J‰J˜˜TŸ\™\Ñ)Ñ)¨D¯H©HÑ4ˆØ�—‘ §
¡
Ñ*Ñ+ˆð	5ð �Q—V‘V˜aŸf™f‘_ q§v¡v°·±¡Ñ6Ñ7ˆAØ�Q—V‘V˜aŸf™f‘_ q§v¡v°·±¡Ñ6Ñ7ˆAØ—‘˜Ÿ™‘ !§&¡&¨1¯6©6¡/Ñ1ˆAà”t˜A ™E A™I“Ñ&ˆDÜ�a“ˆBØ�a‘%˜"‘*ˆCØ”T˜!“W‘ˆBØ�R‘ˆBð �d‘
Ø�q‘&˜D 2™IÑ&ñ'à�q‘5˜1‘9˜q 1™uÑ$¬¨Q°©V°b©[¸4Ñ-?ÀBÈÁGÑ,LÓ(MÑMñNð �S‘ñ	ˆAð ˆøô "¤:Ð.ò 		5ä�1‹v˜Š~Ü˜“F‘ð ˆô ˜“FœS ›V‘O�Ø˜’6Ü˜A›¤ Q£™‘Að ˆô ˜A› ! a¡%¨!¡)¨a¡-°!Ñ"3Ñ4‘AØˆð		5ús   ÁDE# Å#(G"Æ3G"ÇG"Ç!G"c                 óð   — t        |t        «      rN| j                  |j                  k(  xr3 | j                  | j                  z
  |j                  |j                  z
  k(  S | j                  | j                  k(  S ©zGChecks if this segment would be a smooth segment following the previous)rë   r  r¾   r‹   ré  ©r„   Úpreviouss     rq   Úis_smooth_fromzQuadraticBezier.is_smooth_from:  sa   € ä�h¤Ô0Ø—:‘: §¡Ñ-ò °4·<±<À$Ç*Á*Ñ3LØ—‘˜x×/Ñ/Ñ/ñ3ð ð —<‘< 4§:¡:Ñ-Ð-r†   c                 ó4  — |€| j                   s|�7|r5|�|€| j                  s|�|sd| j                  z  S d| j                  |z
  z  S |�|€| j                  s|�|sd| j                  ›d| j                  ›�S d| j                  |z
  ›d| j                  |z
  ›�S )NzT %szt %szQ r�  zq )r€  r«   r‹   ré  r£  s       rq   r6   zQuadraticBezier.dC  s¦   € ØˆN˜tŸ{š{°Ð0BÁvàÐ%ØÐ$¨¯ªØÐ(±à §¡Ñ(Ð(à §¡¨MÑ!9Ñ:Ð:ð Ð%ØÐ$¨¯ªØÐ(±øà$(§L£L°$·(²(Ð;Ð;øð —L‘L =Ó0Ø—H‘H˜}Ò,ðð r†   rñ  rÎ  )rÓ   rÔ   rÕ   rU  r…   r&  rú   r  r  rî   rH  rN  rO  r  rN  r6  r6   rm   r†   rq   r  r  ¥  sJ   „ Ù0òGò
ò
ò
ò!ò

òòòPò8Jó4 òD.ôr†   r  c                   óˆ   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zefd„Zeefd„Zeefd„Zd„ Zdd„Zy)ÚCubicBezieru"   Represents Cubic BÃ©zier commands.c                 ó�   — t        j                  | ||fi |¤Ž |�t        |«      nd | _        |�t        |«      | _        y d | _        y r�   )rã  r…   r1  Úcontrol1Úcontrol2)r„   r¾   r;  r<  r‹   rá   s         rq   r…   zCubicBezier.__init__^  s?   € Ü�‰�t˜U CÑ2¨6Ò2Ø+3Ð+?œ˜hœÀTˆŒØ+3Ð+?œ˜h›ˆ�ÀTˆ�r†   c           
      ó¸   — dt        | j                  «      ›dt        | j                  «      ›dt        | j                  «      ›dt        | j                  «      ›d�	S )NzCubicBezier(start=z, control1=z, control2=r  rh   )rs  r¾   r;  r<  r‹   rƒ   s    rq   r&  zCubicBezier.__repr__c  s;   � ä�—‘ÕÜ�—‘ÕÜ�—‘ÕÜ�—‘�Nð	
ð 	
r†   c                 óœ   — t        | j                  | j                  | j                  | j                  | j
                  | j                  ¬«      S r  )r9  r¾   r;  r<  r‹   r«   r€  rƒ   s    rq   rú   zCubicBezier.__copy__k  s9   € ÜØ�J‰JØ�M‰MØ�M‰MØ�H‰HØ—]‘]Ø—;‘;ô
ð 	
r†   c                 ó  — t        |t        «      st        S | j                  |j                  k(  xrO | j                  |j                  k(  xr4 | j
                  |j
                  k(  xr | j                  |j                  k(  S r�   )rë   r9  rD  r¾   r‹   r;  r<  rì   s     rq   r  zCubicBezier.__eq__u  sh   € Ü˜%¤Ô-Ü!Ð!à�J‰J˜%Ÿ+™+Ñ%ò 0Ø—‘˜EŸI™IÑ%ò0à—‘ §¡Ñ/ò0ð —‘ §¡Ñ/ð		
r†   c                 ó:   — t        |t        «      st        S | |k(   S r�   )rë   r9  rD  rì   s     rq   r  zCubicBezier.__ne__  s   € Ü˜%¤Ô-Ü!Ð!Ø˜5‘=Ð Ð r†   c                 ód  — t        |t        «      rt        |«      }t        |t        «      r„| j                  �| xj                  |z  c_        | j                  �| xj                  |z  c_        | j
                  �| xj
                  |z  c_        | j                  �| xj                  |z  c_        | S r�   )rë   rÝ   r\  r¾   r;  r<  r‹   rì   s     rq   rî   zCubicBezier.__imul__„  s„   € Ü�eœSÔ!Ü˜5“MˆEÜ�eœVÔ$Ø�z‰zÐ%Ø—
’
˜eÑ#•
Ø�}‰}Ð(Ø—’ Ñ&•Ø�}‰}Ð(Ø—’ Ñ&•Ø�x‰xÐ#Ø—’˜EÑ!•Øˆr†   c                  ó   — y)Nra  rm   rƒ   s    rq   rH  zCubicBezier.__len__’  rI  r†   c                 ó–   — |dk(  r| j                   S |dk(  r| j                  S |dk(  r| j                  S |dk(  r| j                  S t        ‚rÂ  )r¾   r;  r<  r‹   r5  rL  s     rq   rN  zCubicBezier.__getitem__•  sK   € Ø�1Š9Ø—:‘:ÐØ�QŠYØ—=‘=Ð Ø�QŠYØ—=‘=Ð Ø�QŠYØ—8‘8ˆOäÐr†   c                 óv   — t         j                  | «       | j                  }| j                  | _        || _        y r�   )r~  rž  r<  r;  )r„   r  s     rq   rž  zCubicBezier.reverse¡  s+   € Ü×Ñ˜DÔ!Ø�]‰]ˆØŸ™ˆŒØˆ�r†   c           	      óœ  ‡‡‡‡	‡
‡‡‡— | j                   \  ŠŠ
| j                  \  ŠŠ| j                  \  ŠŠ| j                  \  Š	Šˆˆˆˆ	ˆ
ˆˆˆfd„}	 ddl}|j                  t        |«      df¬«      } ||j                  |«      «      \  |dd…df<   |dd…df<   |S # t        $ r% |D �cg c]  }t         ||«      Ž ‘Œ nc c}w c}cY S w xY w)r  c                 ó¶   •— | | z  | z  }d| z
  }||z  |z  }| | z  |z  }||z  | z  }|‰z  d|‰z  |‰z  z   z  z   |‰	z  z   |‰
z  d|‰z  |‰z  z   z  z   |‰z  z   fS )Nr¢   r`  rm   )r¤   Úpos_3r!  Ún_pos_3Úpos_2_n_posÚn_pos_2_posrG   rI   rK   r}  rH   rJ   rL   r~  s         €€€€€€€€rq   r%  z*CubicBezier.npoint.<locals>._compute_point¯  s¤   ø€ à˜xÑ'¨(Ñ2ˆEØ˜‘LˆEØ˜e‘m eÑ+ˆGØ" XÑ-°Ñ5ˆKØ %™-¨(Ñ2ˆKà˜"‘˜q K°"Ñ$4°{ÀRÑ7GÑ$GÑHÑHÈ5ÐSUÉ:ÑUØ˜"‘˜q K°"Ñ$4°{ÀRÑ7GÑ$GÑHÑHÈ5ÐSUÉ:ÑUðð r†   r   Nr   r&  r¢   )
r¾   r;  r<  r‹   rI  rL  r¿   rP  rJ  r1  )r„   rQ  r%  rR  rS  r¤   rG   rI   rK   r}  rH   rJ   rL   r~  s         @@@@@@@@rq   rO  zCubicBezier.npoint§  sÂ   ÿ€ ð —‘‰ˆˆBØ—‘‰ˆˆBØ—‘‰ˆˆBØ—‘‰ˆˆB÷
	ó 
	ð	PÛà—‘¤ Y£°Ð 3�Ó4ˆBÙ!/°·±¸Ó0CÓ!DÑˆBŠq�!ˆt‰H�bš˜A˜‘hØˆIøÜò 	PÙENÓOÁY¸”E™>¨(Ó3Ò4ÁYùÔOÒOð	Pús   ÁA
B ÂCÂ*C Â?	CÃ
Cc                 ó^   — | j                  d«      \  }}| j                  d«      \  }}||||fS )u‡   returns the tight-fitting bounding box of the BÃ©zier curve.
        Code by:
        https://github.com/mathandy/svgpathtools
        r   r¢   )Ú_real_minmax)r„   r›  rÌ  rœ  rÎ  s        rq   r  zCubicBezier.bboxÄ  s;   € ð
 ×&Ñ& qÓ)‰
ˆˆdØ×&Ñ& qÓ)‰
ˆˆdØ�T˜4 Ð%Ð%r†   c                 óú  — ddg}| D �cg c]  }||   ‘Œ	 }}|d   d|d   z  z
  d|d   z  z   |d   z
  }t        |«      dk\  r®|d   |d   z  |d   |d   z   |d   z  z
  |d   |d   z  z   |d   |d   z
  |d   z  z   }|dk\  rºt        |«      }|d   d|d   z  z
  |d   z   }||z   |z  }	||z
  |z  }
d|	cxk  rdk  rn n|j                  |	«       d|
cxk  rdk  ran n^|j                  |
«       nL|d   |d   z
  }d|d   d|d   z  z
  |d   z   z  }|dk7  r%| |z  }d|cxk  rdk  rn n|j                  |«       |D �cg c]  }| j                  |«      |   ‘Œ }}t	        |«      t        |«      fS c c}w c c}w )z™returns the minimum and maximum for a real cubic bezier, with a non-zero denom
        Code by:
        https://github.com/mathandy/svgpathtools
        r   r¢   r`  r   g:Œ0âŽyE>)rû   r   r³  rK  rK  rL  )r„   r´   Úlocal_extremizersr¶   r¼   rÂ  rÿ  Úsqdeltar   r  r  rh  r¦  r°   Úlocal_extremas                  rq   rL  zCubicBezier._real_minmaxÍ  sÙ  € ð
  ˜FÐÙÓ ™4�aˆQˆq‹T˜4ˆÐ Ø�!‘�q˜1˜Q™4‘x‘ ! a¨¡d¡(Ñ*¨Q¨q©TÑ1ˆÜˆu‹:˜Òà�!‘�q˜‘t‘˜q ™t a¨¡d™{¨a°©dÑ2Ñ2°Q°q±T¸A¸a¹D±[Ñ@ÀAÀaÁDÈ1ÈQÉ4ÁKÐSTÐUVÑSWÑCWÑWð ð ˜ŠzÜ˜u›+�Ø˜‘d˜Q  1¡™X‘o¨¨!©Ñ,�Ø˜G‘m uÑ,�Ø˜G‘m uÑ,�Ø�r”:˜A•:Ø%×,Ñ,¨RÔ0Ø�r”:˜A•:Ø%×,Ñ,¨RÕ0à�!‘�q˜‘t‘ˆAØ�Q�q‘T˜A  !¡™H‘_ q¨¡tÑ+Ñ,ˆAØ�AŠvØ�R˜!‘V�Ø�r”:˜A•:Ø%×,Ñ,¨RÔ0Ù3DÓEÑ3D¨a˜Ÿ™ A› qÓ)Ð3DˆÐEÜ�=Ó!¤3 }Ó#5Ð5Ð5ùò/ !ùò, Fs   ‰E3Å E8c                 óÖ   ‡‡‡‡— ddl m} t        | j                  Ž Št        | j                  Ž Št        | j
                  Ž Št        | j                  Ž Šˆˆˆˆfd„} ||dd|d¬«      d   S )Nr   )rÇ   c                 óz   •— t        d‰‰z
  z  d| z
  dz  z  d‰‰z
  z  d| z
  z  | z  z   d‰‰z
  z  | dz  z  z   «      S )Nr`  r¢   r   r¶  r‰  )r°   Úp0r¡  r†  r|  s    €€€€rq   Ú_abs_derivativez2CubicBezier._length_scipy.<locals>._abs_derivativeô  s_   ø€ ÜØ�R˜"‘W‘  Q¡¨1¡Ñ,Ø�r˜B‘w‘- 1 q¡5Ñ)¨AÑ-ñ.à�r˜B‘w‘- ! Q¡$Ñ&ñ'óð r†   rÙ   r  éè  )Úepsabsr�   )Úscipy.integraterÇ   r^  r¾   r;  r<  r‹   )r„   r>  rÇ   rT  rS  r¡  r†  r|  s       @@@@rq   Ú_length_scipyzCubicBezier._length_scipyì  s]   û€ Ý(ä�d—j‘jÐ!ˆÜ�d—m‘mÐ$ˆÜ�d—m‘mÐ$ˆÜ�d—h‘hÐˆ÷	ñ �O S¨#°eÀ4ÔHÈÑKÐKr†   c                 ó*   — | j                  dd||«      S r¡   )r—  r_  s      rq   Ú_length_defaultzCubicBezier._length_defaultý  s   € Ø× Ñ   A u¨iÓ8Ð8r†   c                 óX   — 	 | j                  |«      S #  | j                  ||«      cY S xY w)r+  )rX  rZ  r_  s      rq   rN  zCubicBezier.length   s2   € ð	:Ø×%Ñ% eÓ,Ð,øð	:Ø×'Ñ'¨¨yÓ9Ò9ús   ‚ “)c                 óð   — t        |t        «      rN| j                  |j                  k(  xr3 | j                  | j                  z
  |j                  |j
                  z
  k(  S | j                  | j                  k(  S r3  )rë   r9  r¾   r‹   r;  r<  r4  s     rq   r6  zCubicBezier.is_smooth_from  sa   € ä�h¤Ô,Ø—:‘: §¡Ñ-ò °4·=±=À4Ç:Á:Ñ3MØ—‘˜x×0Ñ0Ñ0ñ3ð ð —=‘= D§J¡JÑ.Ð.r†   Nc                 ó¨  — |€| j                   s|�T|rR|�|€| j                  s|�|sd| j                  ›d| j                  ›�S d| j                  |z
  ›d| j                  |z
  ›�S |�|€| j                  s|�+|s)d| j                  ›d| j                  ›d| j                  ›�S d| j                  |z
  ›d| j                  |z
  ›d| j                  |z
  ›�S )NzS r�  zs zC zc )r€  r«   r<  r‹   r;  r£  s       rq   r6   zCubicBezier.d  sÎ   € ØˆN˜tŸ{š{°Ð0BÁvàÐ%ØÐ$¨¯ªØÐ(±øà$(§M£M°4·8²8Ð<Ð<øð —M‘M MÓ1Ø—H‘H˜}Ò,ðð ð Ð%ØÐ$¨¯ªØÐ(±øà'+§}£}°d·m³mÀTÇXÂXÐNÐNøð —M‘M MÓ1Ø—M‘M MÓ1Ø—H‘H˜}Ò,ðð r†   rÎ  )rÓ   rÔ   rÕ   rU  r…   r&  rú   r  r  rî   rH  rN  rž  rO  r  rL  r,  rX  r|  rZ  rN  r6  r6   rm   r†   rq   r9  r9  [  sp   „ Ù,òJò

ò
ò
ò!ò
òò
òòPò:&ò6ð> #(ó Lð" %*°Yó 9ð !¨Ió :ò/ôr†   r9  c                   ó"  — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
ed	„ «       Zed
„ «       Zd„ Zd„ Zd„ Zd„ Zd„ Zeefd„Zd„ Zd„ Zd&d„Zd&d„Zd„ Zed„ «       Zed„ «       Zed„ «       Zd„ Zd„ Zd„ Z d„ Z!d„ Z"d„ Z#d „ Z$d!„ Z%d"„ Z&d#„ Z'd$„ Z(d'd%„Z)y)(rê  c           
      óV  — t        j                  | fi |¤Ž d| _        d| _        d| _        d| _        t        |«      dk(  r#t        |d   t        «      r | j                  |Ž  yt        |«      dk(  rd|v r | j                  d$i |¤Ž yt        |«      dk(  r-| j                  |d   |d   |d   |d   |d	   |d
   |d   «       yd|v rÅd|v rÁd|v r½d|v r¹|d   }|d   }|d   }|d   }t        ||z   dz  ||z   dz  «      | _        ||z
  dz  }||z
  dz  }t        | j                  j                  |z   | j                  j                  «      | _        t        | j                  j                  | j                  j                  |z   «      | _        t        |«      }	|	dkD  r|d   �t        |d   «      | _        |	dkD  r|d   �t        |d   «      | _        |	dkD  r|d   �t        |d   «      | _        |	dkD  r|d   �t        |d   «      | _        |	d	kD  r|d	   �t        |d	   «      | _        |	d
kD  r|d
   | _        yd|v rt        |d   «      | _        d|v rt        |d   «      | _        d|v rt        |d   «      | _        d|v rt        |d   «      | _        d|v rt        |d   «      | _        d|v r
|d   | _        d}
| j                  ��­| j                  �� | j                  �€“d}d}d|v r:t!        |d   «      }|| j                  j#                  | j                  «      z  dz  }nd|v rt!        |d   «      }|�lt        j%                  | j                  | j                  d«      }| j                  j'                  | j                  «      }|j)                  |t*        dz  z
  |«      }d|v rt        |d   «      }|��i|| j                  z
  }| j                  |z
  }t        j%                  | j                  |d«      }t        j%                  || j                  d«      }| j                  | j                  k(  r%|j                  }|j                  }t*        | _        �n�t-        |j                  «      dkD  r|j                  |j                  z  }nt!        d«      }t-        |j                  «      dkD  r|j                  |j                  z  }nt!        d«      }t-        |j                  «      dk  rn|j                  }t-        |j                  «      dk  r|j                  }�n½t-        |«      dkD  r!|j                  |j                  |z
  |z  z   }�nŽt!        d«      }�n�t-        |j                  «      dk  rS|j                  }t-        |j                  «      dk  r|j                  }�n7|j                  |j                  |z
  |z  z   }�nt-        |j                  «      dk  r,|j                  }||j                  |z
  z  |j                  z   }nÒt-        |j                  «      dk  r,|j                  }||j                  |z
  z  |j                  z   }nŽt-        ||z
  «      dk  r|j                  }|j                  }nd||z  |j                  |j                  z
  z  ||j                  z  z
  ||j                  z  z   ||z
  z  }|j                  ||j                  z
  |z  z
  }t        ||«      | _        t/        t        j1                  | j                  || j                  «      dk(  «      }
�nSd|v �rZ|d   }t        | j                  j                  | j                  j                  z   dz  | j                  j                  | j                  j                  z   dz  «      }t        j3                  | j                  | j                  «      }|dz  }||k  r|x|d<   }t        |j                  t5        ||z  ||z  z
  «      | j                  j                  | j                  j                  z
  z  |z  z   |j                  t5        ||z  ||z  z
  «      | j                  j                  | j                  j                  z
  z  |z  z   «      | _        t/        t        j1                  | j                  | j                  | j                  «      dk(  «      }
d|v r|d   r|
s|
�s¦t        |j                  t5        ||z  ||z  z
  «      | j                  j                  | j                  j                  z
  z  |z  z
  |j                  t5        ||z  ||z  z
  «      | j                  j                  | j                  j                  z
  z  |z  z
  «      | _        nôd |v rðd!|v rìt*        dz  | _        t        | j                  j                  | j                  j                  «      | _        t/        t        j1                  | j                  | j                  | j                  «      dk(  «      }
d"|v r|d"   r| j
                   | _        |
 }
d|v r|d   r|
s|
s9t        | j                  j                  | j                  j                  «      | _        | j                  €t7        d#«      ‚d|v r•|d   }| j                  €<t        | j                  j                  |z   | j                  j                  «      | _        | j                  €<t        | j                  j                  | j                  j                  |z   «      | _        d |v r}|d    }| j                  €ld|v r,|d   }t        j9                  | j                  ||«      | _        n<t        | j                  j                  |z   | j                  j                  «      | _        d!|v r‰|d!   }| j                  €xd|v r8|d   }|t*        dz  z  }t        j9                  | j                  ||«      | _        n<t        | j                  j                  | j                  j                  |z   «      | _        | j                  �º| j                  �| j                  €¢t        j3                  | j                  | j                  «      }t        | j                  j                  |z   | j                  j                  «      | _        t        | j                  j                  | j                  j                  |z   «      | _        | j                  �º| j                  �| j                  €¢t        j3                  | j                  | j                  «      }t        | j                  j                  |z   | j                  j                  «      | _        t        | j                  j                  | j                  j                  |z   «      | _        | j
                  €©| j                  ��| j                  �‘| j;                  «       }| j=                  «       }||z
  | _        d|v rt/        |d   «       }
|
r(| j
                  dk  r| xj
                  t*        z  c_        |
s(| j
                  dkD  r| xj
                  t*        z  c_        | j
                  �M| j                  �A| j                  €5| j;                  «       }|| j
                  z   }| j?                  |«      | _        | j
                  �P| j                  €C| j                  �6| j=                  «       }|| j
                  z
  }| j?                  |«      | _        yyyy)%a	  
        Represents Arc commands.

        Arc objects can take different parameters to create arcs.
        Since we expect taking in SVG parameters. We accept SVG parameterization which is:
        start, rx, ry, rotation, arc_flag, sweep_flag, end.

        To do matrix transitions, the native parameterization is start, end, center, prx, pry, sweep

        'start, end, center, prx, pry' are points and sweep amount is a t value in tau radians.
        If points are modified by an affine transformation, the arc is transformed.
        There is a special case for when the scale factor inverts, it inverts the sweep.

        Note: t-values are not angles from center in elliptical arcs. These are the same thing in
        circular arcs. But, here t is a parameterization around the ellipse, as if it were a circle.
        The position on the arc is (a * cos(t), b * sin(t)). If r-major was 0 for example. The
        positions would all fall on the x-axis. And the angle from center would all be either 0 or
        tau/2. However, since t is the parameterization we can conceptualize it as a position on a
        circle which is then scaled and rotated by a matrix.

        prx is the point at t 0 in the ellipse.
        pry is the point at t tau/4 in the ellipse.
        prx -> center -> pry should form a right triangle.

        The rotation can be defined as the angle from center to prx. Since prx is located at
        t(0) its deviation can only be the result of a rotation.

        Sweep is a value in t.
        The sweep angle can be a value greater than tau and less than -tau.
        However, if this is the case, conversion back to Path.d() is expected to fail.
        We can denote these arc events but not as a single command.

        start_t + sweep = end_t
        Nr¶  r¢   rÐ   é   r   r   r`  ra  r   ÚleftÚrightÚtopÚbottomrˆ  r¾   r‹   rë  rï  ÚpryrÑ   TÚbulgeÚsagittar�  rä   ré  r   ÚinfrB   Úccwr@   rA   Úscoopedz&Not enough values to solve for center.rm   ) rã  r…   rë  rï  re  rÑ   r¿   rë   r^  Ú_svg_complex_parameterizeÚ_svg_parameterizer1  rE   rF   r¾   r‹   r•   r*  r§  r‹  r�  r   rû   r™   r•  r!  r   rž   r�  Úget_start_tÚ	get_end_tÚ
point_at_t) r„   rà   rá   ra  rb  rc  rd  r@   rA   rÒ  Úcwré  rg  rf  rŽ  Údelta_aÚdelta_bÚab_midÚbc_midr>   r?   Úslope_aÚslope_brB   r‘  r¸   ÚhqÚthetaÚradius_sÚradius_eÚstart_tÚend_ts                                    rq   r…   zArc.__init__-  sq  € ôF 	�‰�tÑ&˜vÒ&ØˆŒØˆŒØˆŒØˆŒ
Üˆt‹9˜Š>œj¨¨a©´'Ô:Ø*ˆD×*Ñ*¨DÑ1ØÜ�‹[˜AÒ *°Ñ"6Ø*ˆD×*Ñ*Ñ4¨VÒ4ØÜ�‹Y˜!Š^ð ×"Ñ"Ø�Q‘˜˜a™ $ q¡'¨4°©7°D¸±G¸TÀ!¹WÀdÈ1Ágôð à�fÑØ˜6Ñ!Ø˜‘Ø˜FÑ"à˜&‘>ˆDØ˜7‘OˆEØ˜‘-ˆCØ˜HÑ%ˆFÜ ¨¡°Ñ 4°s¸V±|ÀsÑ6JÓKˆDŒKØ˜$‘, #Ñ%ˆBØ˜3‘, #Ñ%ˆBÜ˜TŸ[™[Ÿ]™]¨RÑ/°·±·±Ó?ˆDŒHÜ˜TŸ[™[Ÿ]™]¨D¯K©K¯M©M¸BÑ,>Ó?ˆDŒHÜ�t“9ˆØ�aŠ<Ø�A‰wÐ"Ü" 4¨¡7›^�”
Ø�aŠ<Ø�A‰wÐ"Ü   a¡›>�”Ø�aŠ<Ø�A‰wÐ"Ü# D¨¡G›n�”Ø�aŠ<Ø�A‰wÐ"Ü   a¡›>�”Ø�aŠ<Ø�A‰wÐ"Ü   a¡›>�”Ø�aŠ<Ø˜a™ˆDŒJØØ�fÑÜ˜v g™Ó/ˆDŒJØ�F‰?Ü˜V E™]Ó+ˆDŒHØ�vÑÜ  xÑ 0Ó1ˆDŒKØ�F‰?Ü˜V E™]Ó+ˆDŒHØ�F‰?Ü˜V E™]Ó+ˆDŒHØ�fÑØ ™ˆDŒJØˆØ�:‰:Ñ! d§h¡hÑ&:¸t¿{¹{Ñ?Rð ˆGØˆGØ˜&Ñ Ü˜f W™oÓ.�Ø $§*¡*×"8Ñ"8¸¿¹Ó"BÑBÀSÑH‘Ø˜fÑ$Ü  yÑ 1Ó2�ØÐ"ÜŸ-™-¨¯
©
°D·H±H¸cÓB�ØŸ
™
×+Ñ+¨D¯H©HÓ5�Ø!×*Ñ*¨5´3¸±9Ñ+<¸gÓF�Ø˜FÑ"Ü  yÑ 1Ó2�ØÑ"Ø! D§J¡JÑ.�ØŸ(™( WÑ,�ÜŸ™ t§z¡z°7¸CÓ@�ÜŸ™ w°·±¸#Ó>�Ø—:‘: §¡Ò)ØŸ™�BØŸ™�BÜ!$�D–Jä˜7Ÿ9™9“~¨Ò-Ø")§)¡)¨g¯i©iÑ"7™ä"'¨£,˜Ü˜7Ÿ9™9“~¨Ò-Ø")§)¡)¨g¯i©iÑ"7™ä"'¨£,˜Ü˜7Ÿ9™9“~¨Ò-Ø#ŸX™X˜Ü˜wŸy™y›>¨EÒ1Ø!'§¡šBä" 7›|¨eÒ3Ø%+§X¡X°·±¸B±À'Ñ0IÑ%I¢ä%*¨5£\¢Ü˜WŸY™Y›¨%Ò/Ø#ŸX™X˜Ü˜wŸy™y›>¨EÒ1Ø!'§¡šBà!'§¡¨V¯X©X¸©]¸gÑ,EÑ!EšBÜ˜WŸY™Y›¨%Ò/Ø#ŸX™X˜Ø$¨¯©°2©Ñ6¸¿¹ÑA™Ü˜WŸY™Y›¨%Ò/Ø#ŸX™X˜Ø$¨¯©°2©Ñ6¸¿¹ÑA™Ü˜W wÑ.Ó/°%Ò7Ø#ŸX™X˜Ø#ŸX™X™ð $ gÑ-°·±¸F¿H¹HÑ1DÑEØ%¨¯©Ñ0ñ1à%¨¯©Ñ0ñ1ð % wÑ.ñ	0˜ð
 $ŸX™X¨¨f¯h©h©¸'Ñ(AÑA˜Ü# B¨›m�”Üœ%×+Ñ+¨D¯J©J¸ÀÇÁÓJÈaÑOÓP’Ø˜’Ø˜3‘K�ÜØ—Z‘Z—\‘\ D§H¡H§J¡JÑ.°#Ñ5¸¿
¹
¿¹ÀtÇxÁxÇzÁzÑ8QÐUXÑ7Xó�ô —N‘N 4§:¡:¨t¯x©xÓ8�Ø˜‘W�Ø�r’6Ø&(Ð(�F˜3‘K !Ü#Ø—E‘EœD  Q¡¨¨b©¡Ó1°T·Z±Z·\±\ÀDÇHÁHÇJÁJÑ5NÑOÐRSÑSÑSØ—E‘EœD  Q¡¨¨b©¡Ó1°T·X±X·Z±ZÀ$Ç*Á*Ç,Á,Ñ5NÑOÐRSÑSÑSó�”ô œ%×+Ñ+¨D¯J©J¸¿¹ÀTÇXÁXÓNÐRSÑSÓT�Ø˜F‘? v¨e¢}¹Â2ä"'ØŸ™¤ Q¨¡U¨R°"©W¡_Ó 5¸¿¹¿¹ÈÏÉÏ
É
Ñ9RÑ SÐVWÑ WÑWØŸ™¤ Q¨¡U¨R°"©W¡_Ó 5¸¿¹¿¹ÀdÇjÁjÇlÁlÑ9RÑ SÐVWÑ WÑWó#�D•Kð ˜‘ D¨F¡Nô
 ! 3™Y�”
Ü# D§J¡J§L¡L°$·(±(·*±*Ó=�”Üœ%×+Ñ+¨D¯J©J¸¿¹ÀTÇXÁXÓNÐRSÑSÓT�Ø Ñ&¨6°)Ò+<Ø"&§*¡* �D”JØ˜�BØ˜V‘O¨¨uª¹"ÁRÜ"'¨¯©¯
©
°D·J±J·L±LÓ"A�D”Kà�;‰;ÐÜÐEÓFÐFØ�&‰=Ø�s‘ˆAØ�x‰xÐÜ  §¡§¡°Ñ!2°D·K±K·M±MÓB�”Ø�x‰xÐÜ  §¡§¡°·±·±ÀÑ0AÓB�”Ø�6‰>Ø˜‘ˆBØ�x‰xÐØ Ñ'Ø" :Ñ.�EÜ$Ÿ{™{¨4¯;©;¸¸rÓB�D•Hä$ T§[¡[§]¡]°RÑ%7¸¿¹¿¹ÓG�D”HØ�6‰>Ø˜‘ˆBØ�x‰xÐØ Ñ'Ø" :Ñ.�EØœS 3™YÑ&�EÜ$Ÿ{™{¨4¯;©;¸¸rÓB�D•Hä$ T§[¡[§]¡]°D·K±K·M±MÀBÑ4FÓG�D”HØ�:‰:Ð! t§x¡xÐ'7¸4¿8¹8Ð;KÜ—~‘~ d§k¡k°4·:±:Ó>ˆHÜ˜TŸ[™[Ÿ]™]¨XÑ5°t·{±{·}±}ÓEˆDŒHÜ˜TŸ[™[Ÿ]™]¨D¯K©K¯M©M¸HÑ,DÓEˆDŒHØ�8‰8Ð T§X¡XÐ%5¸¿¹Ð9IÜ—~‘~ d§k¡k°4·8±8Ó<ˆHÜ˜TŸ[™[Ÿ]™]¨XÑ5°t·{±{·}±}ÓEˆDŒHÜ˜TŸ[™[Ÿ]™]¨D¯K©K¯M©M¸HÑ,DÓEˆDŒHØ�:‰:Ð $§*¡*Ð"8¸T¿X¹XÐ=QØ×&Ñ&Ó(ˆGØ—N‘NÓ$ˆEØ ™ˆDŒJØ˜‰Ü˜f U™mÓ,Ð,�Ù�d—j‘j 1’nØ—
’
œcÑ!•
Ù˜$Ÿ*™* qš.Ø—
’
œcÑ!•
Ø�:‰:Ð! d§j¡jÐ&<ÀÇÁÐAQØ×&Ñ&Ó(ˆGØ˜dŸj™jÑ(ˆEØ—‘ uÓ-ˆDŒHØ�:‰:Ð! d§j¡jÐ&8¸T¿X¹XÐ=QØ—N‘NÓ$ˆEØ˜dŸj™jÑ(ˆGØ—‘ wÓ/ˆD�Hð >RÐ&8Ð!r†   c                 óþ   — dt        | j                  «      ›dt        | j                  «      ›dt        | j                  «      ›dt        | j                  «      ›dt        | j
                  «      ›d| j                  ›d�S )Nz
Arc(start=r  z	, center=z, prx=z, pry=z, sweep=rh   )rs  r¾   r‹   rë  rï  re  rÑ   rƒ   s    rq   r&  zArc.__repr__*  sL   � ä�—‘ÕÜ�—‘�NÜ�—‘ÕÜ�—‘�NÜ�—‘�NØ�J‹Jð
ð 	
r†   c           	      ó²   — t        | j                  | j                  | j                  | j                  | j
                  | j                  | j                  ¬«      S r×  )rê  r¾   r‹   rë  rï  re  rÑ   r«   rƒ   s    rq   rú   zArc.__copy__4  s@   € ÜØ�J‰JØ�H‰HØ�K‰KØ�H‰HØ�H‰HØ�J‰JØ—]‘]ô
ð 	
r†   c                 ón  — t        |t        «      st        S | j                  |j                  k(  xr… | j                  |j                  k(  xrj | j
                  |j
                  k(  xrO | j                  |j                  k(  xr4 | j                  |j                  k(  xr | j                  |j                  k(  S r�   )	rë   rê  rD  r¾   r‹   rï  re  rë  rÑ   rì   s     rq   r  z
Arc.__eq__?  s–   € Ü˜%¤Ô%Ü!Ð!à�J‰J˜%Ÿ+™+Ñ%ò *Ø—‘˜EŸI™IÑ%ò*à—‘˜EŸI™IÑ%ò*ð —‘˜EŸI™IÑ%ò*ð —‘˜uŸ|™|Ñ+ò	*ð
 —
‘
˜eŸk™kÑ)ð	
r†   c                 ó:   — t        |t        «      st        S | |k(   S r�   )rë   rê  rD  rì   s     rq   r  z
Arc.__ne__K  s   € Ü˜%¤Ô%Ü!Ð!Ø˜5‘=Ð Ð r†   c                 óè  — t        |t        «      rt        |«      }t        |t        «      rÆ| j                  �| xj                  |z  c_        | j                  �| xj                  |z  c_        | j
                  �| xj
                  |z  c_        | j                  �| xj                  |z  c_        | j                  �| xj                  |z  c_        |j                  dk  r| j                   | _	        | S r}   )
rë   rÝ   r\  r¾   rë  r‹   rï  re  r  rÑ   rì   s     rq   rî   zArc.__imul__P  s·   € Ü�eœSÔ!Ü˜5“MˆEÜ�eœVÔ$Ø�z‰zÐ%Ø—
’
˜eÑ#•
Ø�{‰{Ð&Ø—’˜uÑ$•Ø�x‰xÐ#Ø—’˜EÑ!•Ø�x‰xÐ#Ø—’˜EÑ!•Ø�x‰xÐ#Ø—’˜EÑ!•Ø× Ñ  1Ò$Ø"Ÿj™j˜[�”
Øˆr†   c                  ó   — y)Nr   rm   rƒ   s    rq   rH  zArc.__len__b  rI  r†   c                 ó¸   — |dk(  r| j                   S |dk(  r| j                  S |dk(  r| j                  S |dk(  r| j                  S |dk(  r| j                  S t
        ‚)Nr   r¢   r   r`  ra  )r¾   r‹   rë  rï  re  r5  rL  s     rq   rN  zArc.__getitem__e  sZ   € Ø�1Š9Ø—:‘:ÐØ�QŠYØ—8‘8ˆOØ�QŠYØ—;‘;ÐØ�QŠYØ—8‘8ˆOØ�QŠYØ—8‘8ˆOÜÐr†   c                 ó\   — t         j                  | j                  «       «      j                  S ©zlegacy property)rÀ  r   rm  rÆ  rƒ   s    rq   rx  z	Arc.thetar  s"   € ô �}‰}˜T×-Ñ-Ó/Ó0×DÑDÐDr†   c                 óT   — t         j                  | j                  «      j                  S r…  )rÀ  r   rÑ   rï  rƒ   s    rq   rÿ  z	Arc.deltaw  s   € ô �}‰}˜TŸZ™ZÓ(×3Ñ3Ð3r†   c                 óR   — t         j                  | «       | j                   | _        y r�   )r~  rž  rÑ   rƒ   s    rq   rž  zArc.reverse|  s   € Ü×Ñ˜DÔ!Ø—j‘j�[ˆ�
r†   c           	      ó¾  — 	 dd l }| j                  |j                  |«      «      S # t        $ r­ | j                  | j
                  k(  r*| j                  dk(  r| j                  gt        |«      z  cY S | j                  «       }|D �cg c]E  }|dk(  r| j                  n1|dk(  r| j
                  n | j                  || j                  |z  z   «      ‘ŒG nc c}w c}cY S w xY wr¡   )
rI  Ú_points_numpyrP  rJ  r¾   r‹   rÑ   r¿   rm  ro  )r„   rQ  rR  r{  r€   s        rq   rO  z
Arc.npoint€  sÕ   € ð	Ûà×%Ñ% b§h¡h¨yÓ&9Ó:Ð:øÜò 	Ø�z‰z˜TŸX™XÒ%¨$¯*©*¸ª/àŸ
™
�|¤c¨)£nÑ4Ò4à×&Ñ&Ó(ˆGñ %óñ %�Cð	 ˜!’8ð —
’
ð ˜!’8ð —X’Xà—_‘_ W¨t¯z©z¸CÑ/?Ñ%?Ó@ñ	Añ
 %ùôò ð	ús#   ‚#& ¦A
CÁ2CÂA
CÃ	CÃCc                 ó   — ddl }|j                  t        |«      dft        ¬«      }| j                  | j
                  k(  r.| j                  dk(  r| j                  \  |dd…df<   |dd…df<   |S | j                  «       | j                  |z  z   }| j                  «       }| j                  }| j                  }| j                  j                  }| j                  j                  }	t        |«      }
t        |«      }|j                  |«      }|j                  |«      }|||z  |
z  z   ||z  |z  z
  |dd…df<   |	||z  |z  z   ||z  |
z  z   |dd…df<   t!        | j                  «      ||dk(  dd…f<   t!        | j
                  «      ||dk(  dd…f<   |S )z‘Vectorized version of `point()`.

        :param positions: 1D numpy array of float in [0, 1]
        :return: 1D numpy array of complex
        r   Nr   rG  r¢   )rI  rL  r¿   r•   r¾   r‹   rÑ   rm  Úget_rotationr@   rA   rë  rE   rF   r
   r   r(  )r„   rQ  rR  rS  r°   rÐ   r¼   rh  r>   r?   Úcos_rotÚsin_rotÚcos_tÚsin_ts                 rq   r‰  zArc._points_numpy”  su  € ó 	à�X‰X”s˜9“~ qÐ)´ˆXÓ7ˆà�:‰:˜Ÿ™Ò! d§j¡j°A¢oØ!%§¡ÑˆBŠq�!ˆt‰H�bš˜A˜‘hð( ˆ	ð% × Ñ Ó" T§Z¡Z°)Ñ%;Ñ;ˆAà×(Ñ(Ó*ˆHØ—‘ˆAØ—‘ˆAØ—‘—‘ˆBØ—‘—‘ˆBÜ˜(“mˆGÜ˜(“mˆGØ—F‘F˜1“IˆEØ—F‘F˜1“IˆEØ˜A ™I¨Ñ/Ñ/°!°e±)¸gÑ2EÑEˆBŠq�!ˆt‰HØ˜A ™I¨Ñ/Ñ/°!°e±)¸gÑ2EÑEˆBŠq�!ˆt‰Hô %)¨¯©Ó$4ˆBˆy˜A‰~šqÐ Ñ!Ü$(¨¯©£NˆBˆy˜A‰~šqÐ Ñ!àˆ	r†   c                 ó†   — dd„}| j                  «       }|| j                  z   } |||| j                  | j                  «      S )Nc           	      óž   ‡‡‡‡‡— ˆˆfd„Št        | |«      Št        | |z
  «      |z  Š‰t        ˆˆˆfd„t        d|dz   «      D «       «      z  S )Nc                 óZ   •— t        | «      }t        dd‰‰z  ‰‰z  z  z
  |z  |z  z
  «      S r<  )r   r   )r°   Úsintr¼   rh  s     €€rq   rÏ  z>Arc._integral_length.<locals>.ellipse_part_integral.<locals>.f¸  s8   ø€ Ü˜1“v�Ü˜A  a¨!¡e°°A±Ñ%6Ñ!6¸$Ñ >ÀÑ EÑEÓFÐFr†   c              3   ó@   •K  — | ]  } ‰‰‰|z  z   «      ‰z  –— Œ y ­wr�   rm   )ro   rÊ  rÏ  Úseg_lenr¾   s     €€€rq   rr   zFArc._integral_length.<locals>.ellipse_part_integral.<locals>.<genexpr>¾  s%   øè ø€ ÐUÁ_À™1˜U W¨q¡[Ñ0Ó1°GÕ;Á_ùs   ƒr¢   )rK  rû   rA  rÉ  )Út1Út2r¼   rh  rÅ  rÏ  r•  r¾   s     `` @@@rq   Úellipse_part_integralz3Arc._integral_length.<locals>.ellipse_part_integral¶  sI   ü€ õGô ˜˜B“KˆEÜ˜"˜r™'“l QÑ&ˆGØ”sÕUÄUÈ1ÈaÐRSÉeÄ_ÓUÓUÑUÐUr†   )i † )rm  rÑ   r@   rA   )r„   r˜  Ústart_angleÚ	end_angles       rq   Ú_integral_lengthzArc._integral_lengthµ  s?   € ó	Vð ×&Ñ&Ó(ˆØ $§*¡*Ñ,ˆ	Ù$ [°)¸T¿W¹WÀdÇgÁgÓNÐNr†   c                 óÜ   — ddl m} | j                  }| j                  }||z  }d||z  z
  }| j	                  «       } |||«      }|| j
                  z   } |||«      }|t        ||z
  «      z  S )z¶scipy is not a dependency. However, if scipy exists this function will find the
        exact arc length. .length() delegates to here and on failure uses the
        fallback method.r   )Ú	ellipeincr¢   )Úscipy.specialr�  r@   rA   rm  rÑ   rû   )	r„   r�  r¼   rh  Úadbr¬   ÚphiÚd1Úd2s	            rq   Ú_exact_lengthzArc._exact_lengthÄ  sv   € õ 	,à�G‰GˆØ�G‰GˆØ�!‰eˆØ��c‘	‰MˆØ×ÑÓ ˆÙ�s˜AÓˆØ�D—J‘JÑˆÙ�s˜AÓˆØ”3�r˜B‘w“<ÑÐr†   c                 ól  — | j                   dk(  ry| j                  | j                  k(  r| j                   dk(  ry| j                  }| j                  }t        ||z
  «      }|t        k  r"t        | j                  | j                   z  «      S 	 | j                  «       S #  | j                  ||¬«      cY S xY w)uÁ   The length of an elliptical arc segment requires numerical
        integration, and in that case it's simpler to just do a geometric
        approximation, as for cubic BÃ©zier curves.
        r   r=  )	rÑ   r¾   r‹   r@   rA   rû   r,  r£  r—  )r„   r>  r?  r¼   rh  r6   s         rq   rN  z
Arc.lengthÔ  s    € ð
 �:‰:˜Š?ØØ�:‰:˜Ÿ™Ò! d§j¡j°A¢oàØ�G‰GˆØ�G‰GˆÜ��A‘‹JˆàŒuŠ9Ü�t—w‘w §¡Ñ+Ó,Ð,ð	GØ×%Ñ%Ó'Ð'øð	GØ×$Ñ$¨5¸IÐ$ÓFÒFús   ÂB ÂB3c                 ó~   — | j                  t        |«      |j                  |j                  |||t        |«      «       y)zAParameterization with complex radius and having rotation factors.N)rl  r1  r7  r6  )r„   r¾   rï  rÐ   Úarc_flagÚ
sweep_flagr‹   s          rq   rk  zArc._svg_complex_parameterizeé  s7   € ð 	×ÑÜ�%‹LØ�K‰KØ�K‰KØØØÜ�#‹Jõ	
r†   c                 ó  — t        |«      }t        |«      }t        |«      }|| _        t        |«      }|| _        ||k(  s
|dk(  s|dk(  r8d| _        t        |«      | _        t        |«      | _        t        |«      | _        yt        t        |«      «      }t        t        |«      «      }	|j                  |j                  z
  dz  }
|j                  |j                  z
  dz  }||
z  |	|z  z   }||z  }|	 |
z  ||z  z   }||z  }||z  }||z  }||z  ||z  z   }|dkD  r&|t        |«      z  }|t        |«      z  }||z  }||z  }||z  }||z  }t        t        ||z  |z
  |z
  ||z   z  «      «      }||k(  r| }||z  |z  |z  }| |z  |z  |z  }t        ||z  |	|z  z
  |j                  |j                  z   dz  z   |	|z  ||z  z   |j                  |j                  z   dz  z   «      }||z
  |z  }||z
  |z  }| |z
  |z  }| |z
  |z  }t        ||z  ||z  z   «      }|}t        ||z  ||z  z   ||z  ||z  z   z  «      }||z  ||z  z   }||z  }|dkD  rd}n|dk  rd}t        t!        |«      «      } ||z  ||z  z
  dk  r|  } | dz  } |s| dz  } t#        «       }!|!j%                  t&        j                  |«      j(                  |j*                  |j,                  «       || _        t        |j*                  |z   |j,                  «      | _        t        |j*                  |j,                  |z   «      | _        | j
                  j/                  |!«       | j                  j/                  |!«       t&        j                  | «      j(                  | _        y)zŠConversion from svg parameterization, our chosen native native form.
        http://www.w3.org/TR/SVG/implnote.html#ArcImplementationNotesr   Nr   r¢   r  g      ð¿éh  )r™   r1  r¾   r‹   rÑ   rï  re  rë  r
   r   r   r7  r6  r   rû   r   r   r\  rM  rÀ  rÂ  rE   rF   rƒ  )"r„   r¾   r@   rA   rÐ   Úlarge_arc_flagr§  r‹   ÚcosrÚsinrrM   rN   Úx1primÚ	x1prim_sqÚy1primÚ	y1prim_sqÚrx_sqÚry_sqÚradius_checkr–  r—  r¶   ÚcxprimÚcyprimrë  ÚuxÚuyÚvxÚvyrÅ  rÆ  r6   rÿ  Úrotate_matrixs"                                     rq   rl  zArc._svg_parameterize÷  sË  € ô ˜nÓ-ˆÜ˜*Ó%ˆ
Ü�e“ˆØˆŒ
Ü�C‹jˆØˆŒØ�CŠ<˜2 š7 b¨A¢gð ˆDŒJÜ˜U“|ˆDŒHÜ˜U“|ˆDŒHÜ ›,ˆDŒKØÜ”7˜8Ó$Ó%ˆÜ”7˜8Ó$Ó%ˆØ�j‰j˜3Ÿ8™8Ñ# qÑ(ˆØ�j‰j˜3Ÿ8™8Ñ# qÑ(ˆØ˜‘˜T B™YÑ&ˆØ˜V‘Oˆ	Ø�˜‘˜d R™iÑ'ˆØ˜V‘Oˆ	à�R‘ˆØ�R‘ˆð " EÑ)¨i¸%Ñ.?Ñ@ˆØ˜!ÒØ”$�|Ó$Ñ$ˆBØ”$�|Ó$Ñ$ˆBØ˜‘GˆEØ˜‘GˆEà�YÑˆØ�YÑˆÜ”�e˜e‘m bÑ(¨2Ñ-°"°r±'Ñ:Ó;Ó<ˆà˜ZÒ'Ø�ˆAØ�R‘˜&‘ 2Ñ%ˆØ��b‘˜6Ñ! BÑ&ˆäØ�F‰]˜T F™]Ñ*°·
±
¸S¿X¹XÑ0EÈÑ/JÑKØ�F‰]˜T F™]Ñ*°·
±
¸S¿X¹XÑ0EÈÑ/JÑKó
ˆð
 �v‰o Ñ#ˆØ�v‰o Ñ#ˆØˆg˜Ñ "Ñ$ˆØˆg˜Ñ "Ñ$ˆÜ��b‘˜2 ™7Ñ"Ó#ˆØˆô �"�r‘'˜B ™GÑ#¨¨R©°"°r±'Ñ(9Ñ:Ó;ˆØ�‰G�b˜2‘gÑˆØ�‰Eˆð ˆsŠ7Ø‰AØ�ŠXØˆAÜœ˜Q›Ó ˆØ�‰G�b˜2‘gÑ Ò"Ø�FˆEØ˜‘ˆÙØ�S‰LˆEô ›ˆØ×!Ñ!Ü�M‰M˜(Ó#×.Ñ.°·±¸&¿(¹(ô	
ð ˆŒÜ˜Ÿ™ B™¨¯©Ó1ˆŒÜ˜Ÿ™ 6§8¡8¨b¡=Ó1ˆŒà�‰×!Ñ! -Ô0Ø�‰×!Ñ! -Ô0Ü—]‘] 5Ó)×4Ñ4ˆ�
r†   Nc              #   ó  K  — |€3t         dz  }t        t        t        | j                  «      |z  «      «      }|dk(  ry | j                  t        |«      z  }| j                  «       }| j                  }| j                  «       }t        |«      }t        |«      }| j                  }	| j                  }
| j                  j                  }| j                  j                  }t!        d|«      D ]ž  }||z   }||z   dz  }| j#                  |«      }||dz
  k(  r| j$                  }t        |«      }t        |«      }dt        |«      z
  dz  }|||	|z  |z  |
|z  |z  z
  z  z   }|||	|z  |z  |
|z  |z  z   z  z   }t'        |||f|«      –— |}|}Œ  y ­w)Nrñ   r   r   r¢   rä   rå   )r   rš   r	   rû   rÑ   r•   rm  r¾   r‹  r
   r   r@   rA   rë  rE   rF   rÉ  ro  r‹   r  )r„   Úarc_requiredÚsweep_limitÚt_sliceÚ	current_tÚp_startrx  Ú	cos_thetaÚ	sin_thetar¼   rh  r>   r?   rÊ  Únext_tÚmid_tÚp_endÚ	cos_mid_tÚ	sin_mid_trf  rð   Úpys                         rq   Úas_quad_curveszArc.as_quad_curvesV  sŽ  è ø€ ØÐÜ ™*ˆKÜœt¤C¨¯
©
£O°kÑ$AÓBÓCˆLØ˜1ÒØØ—*‘*œu \Ó2Ñ2ˆà×$Ñ$Ó&ˆ	Ø—*‘*ˆà×!Ñ!Ó#ˆÜ˜“Jˆ	Ü˜“Jˆ	à�G‰GˆØ�G‰GˆØ�[‰[�]‰]ˆØ�[‰[�]‰]ˆä�q˜,Ö'ˆAØ Ñ(ˆFØ˜iÑ'¨1Ñ,ˆEØ—O‘O FÓ+ˆEØ�L 1Ñ$Ò$ØŸ™�Ü˜E›
ˆIÜ˜E›
ˆIØœ3˜w›<Ñ'¨3Ñ.ˆEØ�e˜q 9™}¨yÑ8¸1¸y¹=È9Ñ;TÑTÑUÑUˆBØ�e˜q 9™}¨yÑ8¸1¸y¹=È9Ñ;TÑTÑUÑUˆBÜ! '¨B°¨8°UÓ;Ò;ØˆGØ‰Iñ (ùs   ‚FF
c              #   óZ  K  — |€3t         dz  }t        t        t        | j                  «      |z  «      «      }|dk(  ry | j                  t        |«      z  }| j                  «       }| j                  }| j                  }| j                  }| j                  «       }| j                  j                  }	| j                  j                  }
t        |«      }t        |«      }t!        d|«      D �]>  }||z   }t        |«      t#        ddt%        t'        |dz  «      d«      z  z   «      dz
  z  dz  }t        |«      }t        |«      }| |z  |z  ||z  |z  z
  }| |z  |z  ||z  |z  z   }t        |«      }t        |«      }|	||z  |z  z   ||z  |z  z
  }|
||z  |z  z   ||z  |z  z   }||f}||dz
  k(  r| j(                  }| |z  |z  ||z  |z  z
  }| |z  |z  ||z  |z  z   }|d   ||z  z   |d   ||z  z   f}|d   ||z  z
  |d   ||z  z
  f}t+        ||||«      –— t-        |«      }|}�ŒA y ­w)	Nrñ   r   ra  r`  rˆ  r   r¢   rå   )r   rš   r	   rû   rÑ   r•   r‹  r@   rA   r¾   rm  rë  rE   rF   r
   r   rÉ  r   Úpowr   r‹   r9  r1  )r„   r¼  r½  r¾  rx  r@   rA   rÀ  r¿  rG   rH   rÁ  rÂ  rÊ  rÃ  rf  Úcos_start_tÚsin_start_tÚ	ePrimen1xÚ	ePrimen1yÚ	cos_end_tÚ	sin_end_tÚp2En2xÚp2En2yrÅ  Ú	ePrimen2xÚ	ePrimen2yÚp_c1Úp_c2s                                rq   Úas_cubic_curveszArc.as_cubic_curvesy  sn  è ø€ ØÐÜ ™*ˆKÜœt¤C¨¯
©
£O°kÑ$AÓBÓCˆLØ˜1ÒØØ—*‘*œu \Ó2Ñ2ˆà×!Ñ!Ó#ˆØ�W‰WˆØ�W‰WˆØ—*‘*ˆØ×$Ñ$Ó&ˆ	Ø�[‰[�]‰]ˆØ�[‰[�]‰]ˆÜ˜“Jˆ	Ü˜“Jˆ	ä�q˜,×'ˆAØ Ñ(ˆFä˜“L¤D¨¨Q´´S¸À3¹Ó5GÈÓ1KÑ-KÑ)KÓ$LÈqÑ$PÑQÐTWÑWˆEä˜i›.ˆKÜ˜i›.ˆKà˜˜i™¨+Ñ5¸¸Y¹ÈÑ8TÑTˆIØ˜˜i™¨+Ñ5¸¸Y¹ÈÑ8TÑTˆIä˜F›ˆIÜ˜F›ˆIà˜"˜y™.¨9Ñ4Ñ4°r¸I±~È	Ñ7QÑQˆFØ˜"˜y™.¨9Ñ4Ñ4°r¸I±~È	Ñ7QÑQˆFØ˜VÐ$ˆEØ�L 1Ñ$Ò$ØŸ™�à˜˜i™¨)Ñ3°b¸9±nÀyÑ6PÑPˆIØ˜˜i™¨)Ñ3°b¸9±nÀyÑ6PÑPˆIà˜A‘J ¨Ñ!2Ñ2°G¸A±JÀÈÑARÑ4RÐSˆDØ˜!‘H˜u yÑ0Ñ0°%¸±(¸UÀYÑ=NÑ2NÐOˆDä˜g t¨T°5Ó9Ò9Ü˜E“lˆGØŠIñ9 (ùs   ‚H)H+c                 ó<   — | j                   }| j                  }||k(  S r�   )r@   rA   )r„   r¼   rh  s      rq   Úis_circularzArc.is_circular©  s   € Ø�G‰GˆØ�G‰GˆØ�A‰vˆr†   c                 óB   — t        | j                  | j                  «      S )zcLegacy complex radius property

        Point will work like a complex for legacy reasons.
        )r1  r@   rA   rƒ   s    rq   rï  z
Arc.radius®  s   € ô �T—W‘W˜dŸg™gÓ&Ð&r†   c                 óV   — t         j                  | j                  | j                  «      S r�   )r1  r!  rë  rï  rƒ   s    rq   r@   zArc.rx¶  ó   € ä�~‰~˜dŸk™k¨4¯8©8Ó4Ð4r†   c                 óV   — t         j                  | j                  | j                  «      S r�   )r1  r!  rë  re  rƒ   s    rq   rA   zArc.ryº  rÝ  r†   c                 óV   — t         j                  | j                  | j                  «      S r�   )r1  rŽ  rë  rï  rƒ   s    rq   r‹  zArc.get_rotation¾  s   € Ü�{‰{˜4Ÿ;™;¨¯©Ó1Ð1r†   c                 ó8   — | j                  | j                  «      S )zF
        :return: Angle from the center point to start point.
        )Úangle_at_pointr¾   rƒ   s    rq   Úget_start_anglezArc.get_start_angleÁ  s   € ð ×"Ñ" 4§:¡:Ó.Ð.r†   c                 ó8   — | j                  | j                  «      S )zD
        :return: Angle from the center point to end point.
        )rá  r‹   rƒ   s    rq   Úget_end_anglezArc.get_end_angleÇ  s   € ð ×"Ñ" 4§8¡8Ó,Ð,r†   c                 ó^   — | j                  | j                  | j                  «       «      «      S )z]
        start t value in the ellipse.

        :return: t parameter of start point.
        )Ú
t_at_pointÚpoint_at_anglerâ  rƒ   s    rq   rm  zArc.get_start_tÍ  s'   € ð �‰˜t×2Ñ2°4×3GÑ3GÓ3IÓJÓKÐKr†   c                 ó^   — | j                  | j                  | j                  «       «      «      S )z[
        end t value in the ellipse.

        :return: t parameter of start point.
        )ræ  rç  rä  rƒ   s    rq   rn  zArc.get_end_tÕ  s'   € ð �‰˜t×2Ñ2°4×3EÑ3EÓ3GÓHÓIÐIr†   c                 óF  — || j                  «       z  }| j                  }| j                  }||k(  r| j                  |«      S t	        |t        |«      z  |«      }t        dz  }d|z  }|t        |«      t        z  cxk\  r|kD  rn n|t        dz  z  }| j                  |«      S ©zì
        find the point on the ellipse from the center at the given angle.
        Note: For non-circular arcs this is different from point(t).

        :param angle: angle from center to find point
        :return: point found
        rä   r`  rˆ  )r‹  r@   rA   ro  r   r   r   rû   ©r„   rŽ  r¼   rh  r°   Útau_1_4Útau_3_4s          rq   rç  zArc.point_at_angleÝ  s—   € ð 	�×"Ñ"Ó$Ñ$ˆØ�G‰GˆØ�G‰GˆØ�Š6Ø—?‘? 5Ó)Ð)Ü�!”c˜%“j‘. !Ó$ˆÜ˜‘)ˆØ�g‘+ˆØ”c˜%“j¤3Ñ&Ô0¨Õ0Ø”�s‘‰NˆAØ�‰˜qÓ!Ð!r†   c                 ó8   — | j                   j                  |«      S ©zn
        find the angle to the point.

        :param p: point
        :return: angle to given point.
        )rë  r‹  r‘  s     rq   rá  zArc.angle_at_pointñ  s   € ð �{‰{×#Ñ# AÓ&Ð&r†   c                 ó   — | j                  |«      }|| j                  «       z  }| j                  }| j                  }t	        |t        |«      z  |«      }t        dz  }d|z  }|t        |«      t        z  cxk\  r|kD  rn |S |t        dz  z  }|S ©z�
        find the t parameter to at the point.

        :param p: point
        :return: t parameter to the given point.
        rä   r`  rˆ  )rá  r‹  r@   rA   r   r   r   rû   ©r„   rÆ  rŽ  r¼   rh  r°   rì  rí  s           rq   ræ  zArc.t_at_pointú  sŽ   € ð ×#Ñ# AÓ&ˆØ�×"Ñ"Ó$Ñ$ˆØ�G‰GˆØ�G‰GˆÜ�!”c˜%“j‘. !Ó$ˆÜ˜‘)ˆØ�g‘+ˆØ”c˜%“j¤3Ñ&Ô0¨Ô0àˆð ”�s‘‰NˆAØˆr†   c                 ój  — | j                  «       }| j                  }| j                  }| j                  j                  }| j                  j
                  }t        |«      }t        |«      }t        |«      }	t        |«      }
|||	z  |z  z   ||
z  |z  z
  }|||	z  |z  z   ||
z  |z  z   }t        ||«      S ©z×
        find the point that corresponds to given value t.
        Where t=0 is the first point and t=tau is the final point.

        In the case of a circle: t = angle.

        :param t:
        :return:
        )	r‹  r@   rA   rë  rE   rF   r
   r   r1  )r„   r°   rÐ   r¼   rh  r>   r?   rŒ  r�  rŽ  r�  rð   rÈ  s                rq   ro  zArc.point_at_t  s°   € ð ×$Ñ$Ó&ˆØ�G‰GˆØ�G‰GˆØ�[‰[�]‰]ˆØ�[‰[�]‰]ˆÜ�h“-ˆÜ�h“-ˆÜ�A“ˆÜ�A“ˆØ�!�e‘)˜gÑ%Ñ%¨¨E©	°GÑ(;Ñ;ˆØ�!�e‘)˜gÑ%Ñ%¨¨E©	°GÑ(;Ñ;ˆÜ�R˜‹}Ðr†   c                 óv   — t        | j                  | j                  | j                  | j	                  «       «      S r�   )ÚEllipserë  r@   rA   r‹  rƒ   s    rq   Úget_ellipsezArc.get_ellipse#  s(   € Ü�t—{‘{ D§G¡G¨T¯W©W°d×6GÑ6GÓ6IÓJÐJr†   c                 ó:  ‡ — ‰ j                   dk(  rV‰ j                  j                  ‰ j                  j                  ‰ j                  j                  ‰ j                  j                  fS ‰ j                  «       j                  }t        |«      dk(  rt        dz  }d}ngt        |«      dk(  rd}t        dz  }nM‰ j                  ‰ j                  }}t        ||z   t        |«      z  «      }t        ||z  t        |«      z  «      }ˆ fd„}‰ j                  j                  ‰ j                  j                  g}‰ j                  j                  ‰ j                  j                  g}t        dd«      D ]…  }	 |||	«      }
 |||	«      }d|
cxk  rdk  r-n n*|j                  ‰ j!                  |
«      j                  «       d|cxk  rdk  sŒYn Œ\|j                  ‰ j!                  |«      j                  «       Œ‡ t#        |«      t#        |«      t%        |«      t%        |«      fS )zeFind the bounding box of an arc.
        Code from: https://github.com/mathandy/svgpathtools
        r   rä   c                 ój   •— | t         dz  |z  z   dt         z  z  ‰j                  z
  ‰j                  z  S )Nrˆ  r©  )r   rx  rÿ  )Úangr€  r„   s     €rq   Ú	angle_invzArc.bbox.<locals>.angle_inv8  s1   ø€ ØœC #™I¨™?Ñ*¨s´S©yÑ9¸D¿J¹JÑFÈ$Ï*É*ÑTÐTr†   r³  r   r¢   )rÑ   r¾   rE   rF   r‹   r‹  rÂ  r
   r   r   r@   rA   r   r   rÉ  r³  rK  rK  rL  )r„   r   Úatan_xÚatan_yr@   rA   rû  ÚxtremaÚytremar€  r¥  r¦  s   `           rq   r  zArc.bbox&  s•  ø€ ð �:‰:˜Š?Ø—:‘:—<‘< §¡§¡¨t¯x©x¯z©z¸4¿8¹8¿:¹:ÐEÐEØ×ÑÓ!×,Ñ,ˆÜˆs‹8�qŠ=Ü˜3‘YˆFØ‰FÜ�‹X˜Š]ØˆFÜ˜3‘Y‰Fà—W‘W˜dŸg™g�ˆBÜ˜B ™G˜*¤s¨3£xÑ/Ó0ˆFÜ˜2 ™7¤c¨#£hÑ.Ó/ˆFô	Uð —*‘*—,‘, §¡§
¡
Ð+ˆØ—*‘*—,‘, §¡§
¡
Ð+ˆä�r˜1–ˆAÙ˜6 1Ó%ˆBÙ˜6 1Ó%ˆBØ�BŒ|˜!�|Ø—‘˜dŸj™j¨›n×.Ñ.Ô/Ø�BŒ|˜!Ž|Ø—‘˜dŸj™j¨›n×.Ñ.Õ/ð ô �6‹{œC ›K¬¨V«´c¸&³kÐAÐAr†   c           	      ó$  — |�|€| j                   s|�|s}d| j                  | j                  | j                  «       j                  t        t        | j                  «      t        dz  kD  «      t        | j                  dk\  «      | j                  fz  S d| j                  | j                  | j                  «       j                  t        t        | j                  «      t        dz  kD  «      t        | j                  dk\  «      | j                  |z
  fz  S )NzA %G,%G %G %d,%d %srˆ  r   za %G,%G %G %d,%d %s)
r«   r@   rA   r‹  rï  rš   rû   rÑ   r   r‹   r£  s       rq   r6   zArc.dH  sç   € àÐ!ØÐ  T§]¢]ØÐ$©Xà(Ø—‘Ø—‘Ø×!Ñ!Ó#×.Ñ.Ü”C˜Ÿ
™
“O¤s¨S¡yÑ1Ó2Ü�D—J‘J !‘OÓ$Ø—‘ð,ñ ð ð )Ø—‘Ø—‘Ø×!Ñ!Ó#×.Ñ.Ü”C˜Ÿ
™
“O¤s¨S¡yÑ1Ó2Ü�D—J‘J !‘OÓ$Ø—‘˜=Ñ(ð,ñ ð r†   r�   rÎ  )*rÓ   rÔ   rÕ   r…   r&  rú   r  r  rî   rH  rN  rZ  rx  rÿ  rž  rO  r‰  r›  r£  r,  r|  rN  rk  rl  rÉ  rØ  rÚ  rï  r@   rA   r‹  râ  rä  rm  rn  rç  rá  ræ  ro  r÷  r  r6   rm   r†   rq   rê  rê  ,  s  „ ò{0òz
ò	
ò

ò!ò
ò$òð ñEó ðEð ñ4ó ð4ò!òò(òBOò ð  !¨Ió Gò*
ò]5ó~!óF.ò`ð
 ñ'ó ð'ð ñ5ó ð5ð ñ5ó ð5ò2ò/ò-òLòJò"ò('òò$ò.Kò BôDr†   rê  c                   óÀ  — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d9d	„Z
d
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zd„ Zd„ Zddœd„Zddœd„Z ddœd „Z!ddœd!„Z"ddœd"„Z#ddœd#„Z$ddœd$„Z%ddœd%„Z&ddœd&„Z'd9d'„Z(d(„ Z)d)„ Z*d*„ Z+d+„ Z,d,„ Z-d-„ Z.d.„ Z/d/„ Z0d0„ Z1d1„ Z2e3d:d3„«       Z4d;d4„Z5d<d5„Z6d=d6„Z7d=d7„Z8d>d8„Z9y2)?r5  a¡  
    A Path is a Mutable sequence of path segments

    It is a generalized shape which can map out all the other shapes.

    Each PathSegment object maps a particular command. Each one exists only once in each path and every point contained
    within the object is also unique. We attempt to internally maintain some validity. Each end point should link
    to the following segments start point. And each close point should connect from the preceding segments endpoint to
    the last Move command.

    These are soft checks made only at the time of addition and some manipulations. Modifying the points of the segments
    can and will cause path invalidity. Some SVG invalid operations are permitted such as arcs longer than tau radians
    or beginning sequences without a move. The expectation is that these will eventually be used as part of a valid path
    so these fragment paths are permitted. In some cases these invalid paths will still have consistent path_d values,
    in other cases, there will be no valid methods to reproduce these.

    Instantiation formats:

    Path("d-string", keywords)
    Path(pathsegment1,...)
    Path(d="d-string", other keywords)
    c                 óÞ  — t        j                  | g|¢­i |¤Ž d | _        d | _        t	        «       | _        t        |«      dk7  rV|D ]4  }t        |t        «      rŒt        d|j                  j                  z  «      ‚ | j
                  j                  |«       �nr|d   }t        |t        «      rM| j
                  j                  |j                  d¬«      «       t         j                  | |j                  «       �nt        |t         «      r,| j
                  j                  |j                  d¬«      «       nÔt        |t         «      r!t	        «       | _        | j#                  |«       n£t        |t$        «      r,| j
                  j                  |«       | j'                  «        ngt        |t        «      r,| j
                  j                  |«       | j'                  «        n+t        |t        «      r| j
                  j)                  |«       t*        | j,                  v rO| j,                  j/                  dd«      s2| j#                  | j,                  t*           «       d| j,                  d<   y y y )Nr¢   z4Object not PathSegment when instantiating a Path: %sr   Frb  Úpathd_loadedT)r.  r…   rø  rù  r(  Ú	_segmentsr¿   rë   r~  rž   rs  rÓ   ÚextendÚSubpathr@  Ú_pathrÝ   rÒ   r'  Úvalidate_connectionsr³  ÚSVG_ATTR_DATAr¼  rè  )r„   rà   rá   rX  rº   s        rq   r…   zPath.__init__y  sÆ  € Ü�‰�tÐ-˜dÒ- fÒ-ØˆŒØˆŒÜ›ˆŒÜˆt‹9˜Š>Û�Ü! '¬;Õ7Ü$ØNØ!×+Ñ+×4Ñ4ñ5óð ð  ð �N‰N×!Ñ! $Ö'à�Q‘ˆAÜ˜!œWÔ%Ø—‘×%Ñ% a§j¡j¸U jÓ&CÔDÜ—‘˜t Q§W¡WÖ-Ü˜AœuÔ%Ø—‘×%Ñ% a§j¡j¸U jÓ&CÕDÜ˜AœsÔ#Ü!%£�”Ø—
‘
˜1•Ü˜AœuÔ%à—‘×%Ñ% aÔ(Ø×)Ñ)Õ+Ü˜AœtÔ$à—‘×%Ñ% aÔ(Ø×)Ñ)Õ+Ü˜Aœ{Ô+Ø—‘×%Ñ% aÔ(Ü˜DŸK™KÑ'ð —;‘;—?‘? >°5Ô9Ø—
‘
˜4Ÿ;™;¤}Ñ5Ô6Ø.2�—‘˜NÒ+ð :ð (r†   c                 óŠ   — t        | «      }|j                  }t        dt        |«      «      D ]  }t	        ||   «      ||<   Œ |S r}   )r5  r  rÉ  r¿   r   )r„   r!   ÚsegsrÊ  s       rq   rú   zPath.__copy__¡  s?   € Ü�D‹zˆØ�~‰~ˆÜ�qœ#˜d›)Ö$ˆAÜ˜4 ™7“mˆD�ŠGð %àˆr†   c                 ó    — | j                   |   S r�   )r  ©r„   rÍ  s     rq   rN  zPath.__getitem__¨  s   € Ø�~‰~˜eÑ$Ð$r†   c                 ó  — |dk  s|dz   t        | j                  «      k\  ryt        |t        | j                  «      «      D ]Ä  }| j                  |   }t        |t        «      r yt        |t
        «      sŒ5t        |dd«      D ]K  }| j                  |   }t        |t        «      sŒ#t        |j                  «      | j                  |   _          y t        | j                  d   j                  «      | j                  |   _         y y)z2ensure the subpath containing this index is valid.r   r¢   Nr¶  )r¿   r  rÉ  rë   re  rd  r1  r‹   )r„   rÍ  r  Úclose_searchr€  Úmove_searchs         rq   Ú_validate_subpathzPath._validate_subpath«  sÑ   € à�1Š9˜ ™	¤S¨¯©Ó%8Ò8ØÜ�uœc $§.¡.Ó1Ö2ˆAØŸ>™>¨!Ñ,ˆLÜ˜,¬Ô-ÙÜ˜,¬Õ.Ü˜u b¨"Ö-�AØ"&§.¡.°Ñ"3�KÜ! +¬tÕ4Ü05°k·o±oÓ0F˜Ÿ™ qÑ)Ô-Úð	 .ô
 ).¨d¯n©n¸QÑ.?×.CÑ.CÓ(D�—‘˜qÑ!Ô%Ùñ 3r†   c                 ó  — t        |dz   t        | j                  «      «      D ]\  }| j                  |   }t        |t        «      r yt        |t
        «      sŒ5t        | j                  |   j                  «      |_         y y)zHensure the next closed point from this index points to a valid location.r¢   N)rÉ  r¿   r  rë   re  rd  r1  r‹   ©r„   rÍ  rÊ  rX  s       rq   Ú_validate_movezPath._validate_move¼  sc   € ä�u˜q‘y¤# d§n¡nÓ"5Ö6ˆAØ—n‘n QÑ'ˆGÜ˜'¤4Ô(ÙÜ˜'¤5Õ)Ü# D§N¡N°5Ñ$9×$=Ñ$=Ó>�”Ùñ 7r†   c                 óV  — t        |dd«      D ]J  }| j                  |   }t        |t        «      sŒ#t	        |j
                  «      | j                  |   _         y | j                  d   j
                  �"t	        | j                  d   j
                  «      nd| j                  |   _        y)zNensure the close element at this position correctly links to the previous mover¶  Nr   )rÉ  r  rë   re  r1  r‹   r  s       rq   Ú_validate_closezPath._validate_closeÆ  s‹   € ä�u˜b "Ö%ˆAØ—n‘n QÑ'ˆGÜ˜'¤4Õ(Ü,1°'·+±+Ó,>�—‘˜uÑ%Ô)Ùð	 &ð -1¯N©N¸1Ñ,=×,AÑ,AÐ,MŒE�$—.‘. Ñ#×'Ñ'Ô(ÐSWð 	�‰�uÑÕ!r†   Fc                 óö  — |dk  s|dz   t        | j                  «      k\  ry| j                  |   }| j                  |dz      }|j                  �'|j                  €t	        |j                  «      |_        y|j                  €'|j                  �t	        |j                  «      |_        y|j                  |j                  k7  r8|rt	        |j                  «      |_        yt	        |j                  «      |_        yy)a0  
        Validates the connection at the index.
        Connection 0 is the connection between getitem(0) and getitem(1)

        prefer_second is for those cases where failing the connection requires replacing
        an existing value. It will prefer the authority of right side, second value.
        r   r¢   N)r¿   r  r‹   r¾   r1  )r„   rÍ  Úprefer_secondrz  r{  s        rq   Ú_validate_connectionzPath._validate_connectionÒ  sÀ   € ð �1Š9˜ ™	¤S¨¯©Ó%8Ò8ØØ—‘˜uÑ%ˆØ—‘ ¨¡	Ñ*ˆØ�9‰9Ð  V§\¡\Ð%9Ü  §¡Ó+ˆF�LØ�Y‰YÐ 6§<¡<Ð#;Ü˜fŸl™lÓ+ˆE�IØ�Y‰Y˜&Ÿ,™,Ò&áÜ! &§,¡,Ó/�•	ä$ U§Y¡YÓ/�•ð 'r†   c                 ó  — t        |t        «      rSt        |«      }t        |«      dk(  ry |j	                  «       }t        |t
        «      rt        |«      dkD  rt        ‚|d   }|| j                  |<   d | _        d | _	        t        |t        «      r| j                  «        y | j                  |dz
  «       | j                  |«       t        |t        «      r| j                  |«       t        |t        «      r| j!                  |«       y y r¡   )rë   rÝ   r5  r¿   r@  rš   rž   r  rø  rù  rÊ  r  r  re  r  rd  r  )r„   rÍ  Únew_elements      rq   rR  zPath.__setitem__é  sá   € Ü�k¤3Ô'Ü˜{Ó+ˆKÜ�;Ó 1Ò$ØØ%×.Ñ.Ó0ˆKÜ˜%¤Ô%Ü�{Ó# aÒ'Ü$Ð$Ø)¨!™n�Ø +ˆ�‰�uÑØˆŒØˆŒÜ�eœUÔ#Ø×%Ñ%Õ'à×%Ñ% e¨a¡iÔ0Ø×%Ñ% eÔ,Ü˜+¤tÔ,Ø×#Ñ# EÔ*Ü˜+¤uÔ-Ø×$Ñ$ UÕ+ð .r†   c                 ó  — | j                   |   }| j                   |= d | _        t        |t        «      r| j	                  «        y | j                  |dz
  «       t        |t        t        f«      r| j                  |«       y y r<  )	r  rø  rë   rÊ  r  r  rd  re  r  )r„   rÍ  Úoriginal_elements      rq   Ú__delitem__zPath.__delitem__   sn   € ØŸ>™>¨%Ñ0ÐØ�N‰N˜5Ð!ØˆŒÜ�eœUÔ#Ø×%Ñ%Õ'à×%Ñ% e¨a¡iÔ0ÜÐ*¬U´D¨MÔ:Ø×&Ñ& uÕ-ð ;r†   c                 ó|  — t        |t        «      r| j                  |«       | S t        |t        t        f«      r*| j                  t        t        t        |«      «      «       | S t        |t        «      r!| j                  |j                  «       «       | S t        |t        «      r| j                  |«       | S t        S r�   )rë   rÝ   rÒ   r5  r  r  rõ  r   r(  r.  r6   r~  r³  rD  rì   s     rq   rø   zPath.__iadd__  s™   € Ü�eœSÔ!Ø�J‰J�uÔð ˆô ˜¤¤g˜Ô/Ø�K‰KœœD¤$ u£+Ó.Ô/ð ˆô ˜œuÔ%Ø�J‰J�u—w‘w“yÔ!ð
 ˆô	 ˜œ{Ô+Ø�K‰K˜Ôð ˆô "Ð!r†   c                 ó|   — t        |t        t        t        t        t
        f«      rt        | «      }||z  }|S t        S r�   )rë   rÝ   r5  r  r.  r~  r   rD  r  s      rq   r  zPath.__add__  s4   € Ü�eœc¤4¬´%¼ÐEÔFÜ�T“
ˆAØ�‰JˆAØˆHÜÐr†   c                 óø   — t        |t        «      r6t        |«      }|j                  t	        t
        | j                  «      «       |S t        |t        «      rt        | «      }|j                  d|«       |S t        S r}   )
rë   rÝ   r5  r  rõ  r   r  r~  ÚinsertrD  r„  s      rq   rX  zPath.__radd__  s]   € Ü�eœSÔ!Ü˜“;ˆDØ�K‰KœœD $§.¡.Ó1Ô2ØˆKÜ˜œ{Ô+Ü˜“:ˆDØ�K‰K˜˜5Ô!ØˆKä!Ð!r†   c                 ó,   — t        | j                  «      S r�   )r¿   r  rƒ   s    rq   rH  zPath.__len__+  s   € Ü�4—>‘>Ó"Ð"r†   c                 ó"   — | j                  «       S r�   ©r6   rƒ   s    rq   r)  zPath.__str__.  ó   € Ø�v‰v‹xˆr†   c                 ó   — g }t        | «      dkD  r1|j                  dj                  d„ | j                  D «       «      «       | j	                  |«       dj                  |«      }| j
                  j                  ›d|›d�S )Nr   rê  c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr�   ©rs  ©ro   rE   s     rq   rr   z Path.__repr__.<locals>.<genexpr>4  s   è ø€ Ð#D±^°¤D¨§G±^ùó   ‚rg   rh   )r¿   r³  r¹  r  rt  rs  rÓ   rº  s      rq   r&  zPath.__repr__1  sb   € ØˆÜˆt‹9�qŠ=Ø�M‰M˜$Ÿ)™)Ñ#D°T·^²^Ó#DÓDÔEØ×Ñ˜Ô Ø—‘˜6Ó"ˆØŸ>™>×2Ó2²FÐ;Ð;r†   c                 ór  — t        |t        «      r| j                  t        |«      «      S t        |t        «      st        S t        | «      t        |«      k7  ryt        | «      }t        |«      }t        |j                  |j                  «      D ]  \  }}||k(  rŒ y |j                  |j                  k7  ryy©NFT)
rë   rÝ   r  r5  rD  r¿   rû   rf  r  r  )r„   rí   rÆ  r¸   rº   r/  s         rq   r  zPath.__eq__9  s“   € Ü�eœSÔ!Ø—;‘;œt E›{Ó+Ð+Ü˜%¤Ô&Ü!Ð!Üˆt‹9œ˜E›
Ò"ØÜ�‹IˆÜ�‹JˆÜ˜Ÿ™ Q§[¡[Ö1‰DˆAˆqØ˜“6Ùð 2ð �>‰>˜QŸ^™^Ò+ØØr†   c                 óF   — t        |t        t        f«      st        S | |k(   S r�   )rë   r5  rÝ   rD  rì   s     rq   r  zPath.__ne__I  s#   € Ü˜%¤$¬ Ô-Ü!Ð!Ø˜5‘=Ð Ð r†   c                 ó<   — t        «       }|j                  | |«       y)zParses the SVG path.N)r{   rÒ   )r„   ÚpathdefÚtokenss      rq   rÒ   z
Path.parseN  s   € ä!Ó#ˆØ�‰�T˜7Õ#r†   c                 ó  — d}d}| j                   D ]î  }|�t        |t        «      r|j                  }|�™|j                  €'|j                  �t        |j                  «      |_        nf|j                  €'|j                  �t        |j                  «      |_        n3|j                  |j                  k7  rt        |j                  «      |_        t        |t        «      r!|�|j                  |k7  rt        |«      |_        |}Œð y)a  
        Force validate all connections.

        This will scan path connections and link any adjacent elements together by replacing any None points or causing
        the start position of the next element to equal the end position of the previous. This should only be needed
        when combining paths and elements together. Close elements are always connected to the last Move element or to
        the end position of the first element in the list. The start element of the first segment may or may not be
        None.
        N)r  rë   re  r‹   r¾   r1  rd  ©r„   ÚzpointÚlast_segmentrX  s       rq   r  zPath.validate_connectionsS  sÖ   € ð ˆØˆØ—~”~ˆGØˆ~¤¨G´TÔ!:Ø Ÿ™�ØÐ'Ø—=‘=Ð(¨\×-=Ñ-=Ð-IÜ$)¨,×*:Ñ*:Ó$;�G•MØ!×%Ñ%Ð-°'·-±-Ð2KÜ',¨W¯]©]Ó';�LÕ$Ø!×%Ñ%¨¯©Ò6Ü$)¨,×*:Ñ*:Ó$;�G”Mä˜7¤EÔ*ØÐ&Ø—K‘K 6Ò)ä# F›m�”Ø"‰Lñ! &r†   c                 ó&  — d}d}| j                   D ]~  }|�t        |t        «      r|j                  }|�7|j                  € y|j                  € y|j                  |j                  k7  r yt        |t
        «      r|�|j                  |k7  r y|}Œ€ y)aa  
        Checks validation of all connections.

        Paths are valid if all end points match the start of the next point and all close
        commands return to the last valid move command.

        This does not check for incongruent path validity. Path fragments without initial moves
        double closed paths, may all pass this check.
        NFT)r  rë   re  r‹   r¾   rd  r3  s       rq   Ú	_is_validzPath._is_validq  s“   € ð ˆØˆØ—~”~ˆGØˆ~¤¨G´TÔ!:Ø Ÿ™�ØÐ'Ø—=‘=Ð(Ù Ø!×%Ñ%Ð-Ù Ø!×%Ñ%¨¯©Ò6Ù ä˜7¤EÔ*ØÐ&Ø—K‘K 6Ò)áØ"‰Lð! &ð" r†   c                 ó$  — t        | j                  «      dk(  ry| j                  d   j                  �"t        | j                  d   j                  «      S | j                  d   j                  �"t        | j                  d   j                  «      S dS )z½First point along the Path. This is the start point of the first segment unless it starts
        with a Move command with a None start in which case first point is that Move's destination.r   N)r¿   r  r¾   r1  r‹   rƒ   s    rq   Úfirst_pointzPath.first_point�  s   € ô ˆt�~‰~Ó !Ò#ØØ�>‰>˜!Ñ×"Ñ"Ð.Ü˜Ÿ™¨Ñ*×0Ñ0Ó1Ð1à,0¯N©N¸1Ñ,=×,AÑ,AÐ,MŒE�$—.‘. Ñ#×'Ñ'Ó(ð	
ØSWð	
r†   c                 ó®   — t        | j                  «      dk(  ry | j                  d   j                  �"t        | j                  d   j                  «      S d S )Nr   r¶  )r¿   r  r‹   r1  rƒ   s    rq   r£   zPath.current_pointœ  sU   € äˆt�~‰~Ó !Ò#Øð �~‰~˜bÑ!×%Ñ%Ð1ô �$—.‘. Ñ$×(Ñ(Ó)ð	
ð ð	
r†   c                 óÖ   — d}t        | j                  «      D ]   }t        |t        «      sŒ|j                  } n |€	 | j                  d   j                  }|S |S # t
        $ r Y |S w xY w)z÷
        Z is the destination of the last Move. It can mean, but doesn't necessarily mean the first_point in the path.
        This behavior of Z is defined in svg spec:
        http://www.w3.org/TR/SVG/paths.html#PathDataClosePathCommand
        Nr   )Úreversedr  rë   re  r‹   r5  )r„   Úend_posrX  s      rq   Úz_pointzPath.z_point¦  sv   € ð ˆÜ §¡Ö/ˆGÜ˜'¤4Õ(Ø!Ÿ+™+�Ùð 0ð ˆ?ðØŸ.™.¨Ñ+×/Ñ/�ð ˆˆwˆøô ò ØØˆðús   ¾A Á	A(Á'A(c                 ó"  — t        | j                  «      dk(  ry| j                  }| j                  d   }t        |t        «      r|j
                  }|j                  |«      S t        |t        «      r|j                  }|j                  |«      S |S )a…  Returns the smoothing control point for the smooth commands.
        In regard to the SVG standard if the last command was a curve the smooth
        control point is the reflection of the previous control point.

        If the last command was not a curve, the smooth_point is coincident with the current.
        https://www.w3.org/TR/SVG/paths.html#PathDataCubicBezierCommands
        r   Nr¶  )	r¿   r  r£   rë   r  ré  r’  r9  r<  )r„   Ú	start_posr5  Úprevious_controls       rq   Úsmooth_pointzPath.smooth_point¹  s…   € ô ˆt�~‰~Ó !Ò#ØØ×&Ñ&ˆ	Ø—~‘~ bÑ)ˆÜ�l¤OÔ4Ø+×3Ñ3ÐØ#×4Ñ4°YÓ?Ð?Ü˜¤kÔ2Ø+×4Ñ4ÐØ#×4Ñ4°YÓ?Ð?ØÐr†   c                  ó   — y r�   rm   rƒ   s    rq   r¾   z
Path.startÏ  rå  r†   c                  ó   — y r�   rm   rƒ   s    rq   r‹   zPath.endÒ  rå  r†   rª   c                óÈ   — | j                   }|d   }|dv r| j                  }| j                  t        |||¬«      «       t	        |«      dkD  r | j
                  |dd  d|iŽ | S )Nr   ©r¨   r©   rª   r¢   r«   )r£   r>  r³  re  r¿   r&   )r„   r«   rC   rá   r@  r=  s         rq   rÂ   z	Path.moveÕ  se   € Ø×&Ñ&ˆ	Ø˜‘)ˆØ�jÑ Ø—l‘lˆGØ�‰”D˜ G°hÔ?Ô@Üˆv‹;˜Š?ØˆD�I‰I�v˜a˜b�zÐ5¨HÒ5Øˆr†   c                ó´   — t        t        |«      «      D ]@  }| j                  }||   }|dv r| j                  }| j	                  t        |||¬«      «       ŒB | S )NrF  rª   )rÉ  r¿   r£   r>  r³  r  )r„   r«   rC   rá   rÍ  r@  r=  s          rq   r&   z	Path.lineß  sV   € Üœ3˜v›;Ö'ˆEØ×*Ñ*ˆIØ˜U‘mˆGØ˜*Ñ$ØŸ,™,�Ø�K‰Kœ˜Y¨¸(ÔCÕDð (ð ˆr†   c                ó@  — t        t        |«      «      D ]†  }| j                  }|rB| j                  t	        |t        |j                  |j                  ||   z   «      |¬«      «       ŒS| j                  t	        |t        |j                  ||   «      |¬«      «       Œˆ | S r×  ©rÉ  r¿   r£   r³  r  r1  rE   rF   )r„   r«   Úy_pointsrá   rÍ  r@  s         rq   rÅ   zPath.verticalè  s�   € Üœ3˜x›=Ö)ˆEØ×*Ñ*ˆIÙØ—‘ÜØ!Ü˜iŸk™k¨9¯;©;¸À%¹Ñ+HÓIØ!)ôõð —‘ÜØ!Ü˜iŸk™k¨8°E©?Ó;Ø!)ôõð *ð$ ˆr†   c                ó@  — t        t        |«      «      D ]†  }| j                  }|rB| j                  t	        |t        |j                  ||   z   |j                  «      |¬«      «       ŒS| j                  t	        |t        ||   |j                  «      |¬«      «       Œˆ | S r×  rI  )r„   r«   Úx_pointsrá   rÍ  r@  s         rq   rÄ   zPath.horizontalý  s�   € Üœ3˜x›=Ö)ˆEØ×*Ñ*ˆIÙØ—‘ÜØ!Ü˜iŸk™k¨H°U©OÑ;¸Y¿[¹[ÓIØ!)ôõð —‘ÜØ!Ü˜h u™o¨y¯{©{Ó;Ø!)ôõð *ð$ ˆr†   c          
      óÐ   — t        t        |«      «      D ]N  }| j                  }| j                  }||   }|dv r| j                  }| j                  t        ||||d¬«      «       ŒP | S )úoSmooth curve. First control point is the "reflection" of
        the second control point in the previous path.rF  Tr  )rÉ  r¿   r£   rB  r>  r³  r  )r„   r«   rC   rá   rÍ  r@  r;  r=  s           rq   rÃ   zPath.smooth_quad  sm   € ô œ3˜v›;Ö'ˆEØ×*Ñ*ˆIØ×(Ñ(ˆHØ˜U‘mˆGØ˜*Ñ$ØŸ,™,�Ø�K‰KÜØ˜x¨¸8ÈDôõð (ð ˆr†   c          
      ó2  — t        dt        |«      d«      D ]}  }| j                  }||   }|dv r/| j                  }| j	                  t        ||||d¬«      «       | c S ||dz      }|dv r| j                  }| j	                  t        ||||d¬«      «       Œ | S )Nr   r   rF  Fr  r¢   )rÉ  r¿   r£   r>  r³  r  )r„   r«   rC   rá   rÍ  r@  ré  r=  s           rq   rÇ   z	Path.quad"  s©   € Ü˜1œc &›k¨1Ö-ˆEØ×*Ñ*ˆIØ˜U‘mˆGØ˜*Ñ$ØŸ,™,�Ø—‘Ü#Ø! 7¨G¸hÈuôôð
 ’Ø˜U Q™YÑ'ˆGØ˜*Ñ$ØŸ,™,�Ø�K‰KÜØ˜w¨¸(È5ôõð .ð& ˆr†   c                óN  — t        dt        |«      d«      D ]‹  }| j                  }| j                  }||   }|dv r0| j                  }| j                  t        |||||d¬«      «       | c S ||dz      }|dv r| j                  }| j                  t        |||||d¬«      «       Œ� | S )rN  r   r   rF  Tr  r¢   )rÉ  r¿   r£   rB  r>  r³  r9  ©	r„   r«   rC   rá   rÍ  r@  r;  r<  r=  s	            rq   rÈ   zPath.smooth_cubic8  sÄ   € ô ˜1œc &›k¨1Ö-ˆEØ×*Ñ*ˆIØ×(Ñ(ˆHØ˜e‘}ˆHà˜:Ñ%ØŸ<™<�Ø—‘ÜØ!Ø Ø Ø Ø!)Ø#ôô	ð ’Ø˜U Q™YÑ'ˆGØ˜*Ñ$ØŸ,™,�Ø�K‰KÜØØØØØ%Øôõ	ð+ .ð> ˆr†   c                ó®  — t        dt        |«      d«      D ]»  }| j                  }||   }|dv r0| j                  }| j	                  t        |||||d¬«      «       | c S ||dz      }|dv r0| j                  }| j	                  t        |||||d¬«      «       | c S ||dz      }|dv r| j                  }| j	                  t        |||||d¬«      «       Œ½ | S )	Nr   r`  rF  Tr  r¢   r   F)rÉ  r¿   r£   r>  r³  r9  rQ  s	            rq   rÆ   z
Path.cubic\  s  € Ü˜1œc &›k¨1Ö-ˆEØ×*Ñ*ˆIØ˜e‘}ˆHØ˜:Ñ%ØŸ<™<�Ø—‘ÜØ!Ø Ø Ø Ø!)Ø#ôô	ð ’Ø˜e a™iÑ(ˆHØ˜:Ñ%ØŸ<™<�Ø—‘ÜØ!Ø Ø Ø Ø!)Ø#ôô	ð ’Ø˜U Q™YÑ'ˆGØ˜*Ñ$ØŸ,™,�Ø�K‰KÜØØØØØ%Ø ôõ	ðC .ðV ˆr†   c                óR  — t        dt        |«      d«      D ]�  }| j                  }||   }||dz      }|dk  rt        |«      }|dk  rt        |«      }||dz      }||dz      }	||dz      }
||dz      }|dv r| j                  }| j                  t        |||||	|
||¬	«      «       Œ� | S )
Nr   r¶  r¢   r   r`  ra  r   rF  rª   )rÉ  r¿   r£   rû   r>  r³  rê  )r„   r«   Úarc_argsrá   rÍ  r@  r@   rA   rÐ   rÉ   rÑ   r=  s               rq   rÉ   zPath.arcŠ  sÍ   € Ü˜1œc (›m¨QÖ/ˆEØ×*Ñ*ˆIØ˜%‘ˆBØ˜% !™)Ñ$ˆBØ�AŠvÜ˜“W�Ø�AŠvÜ˜“W�Ø ¨¡	Ñ*ˆHØ˜5 1™9Ñ%ˆCØ˜U Q™YÑ'ˆEØ˜u q™yÑ)ˆGØ˜*Ñ$ØŸ,™,�Ø�K‰KÜ�I˜r 2 x°°e¸WÈxÔXõð 0ð" ˆr†   c                 ó~   — | j                   }| j                  }t        ||«      }||_        | j	                  |«       | S r�   )r£   r>  rd  r«   r³  )r„   r«   r@  r=  rX  s        rq   rÀ   zPath.closedž  s;   € Ø×&Ñ&ˆ	Ø—,‘,ˆÜ˜	 7Ó+ˆØ#ˆÔØ�‰�GÔØˆr†   c                 ó‚  — t        |t        «      r?t        |«      }t        |«      dk(  ry t        |«      dkD  r| j	                  |«       y |d   }d | _        t        | j                  «      dz
  }| j                  j                  |«       | j                  |«       t        |t        «      r| j                  |dz   «       y y r¡   )rë   rÝ   r5  r¿   r  rø  r  r³  r  rd  r  )r„   rÌ   rÍ  s      rq   r³  zPath.append¦  s¡   € Ü�eœSÔ!Ü˜“KˆEÜ�5‹z˜QŠØÜ�5‹z˜AŠ~Ø—‘˜EÔ"ØØ˜!‘HˆEØˆŒÜ�D—N‘NÓ# aÑ'ˆØ�‰×Ñ˜eÔ$Ø×!Ñ! %Ô(Ü�eœUÔ#Ø× Ñ  ¨¡Õ+ð $r†   c                 óx  — t        |t        «      rt        |«      }t        |«      dk(  ry |d   }d | _        | j
                  j                  ||«       | j                  |dz
  «       | j                  |«       t        |t        «      r| j                  |«       t        |t        «      r| j                  |«       y y r¡   )rë   rÝ   r5  r¿   rø  r  r"  r  re  r  rd  r  ©r„   rÍ  rÌ   s      rq   r"  zPath.insert¶  sœ   € Ü�eœSÔ!Ü˜“KˆEÜ�5‹z˜QŠØØ˜!‘HˆEØˆŒØ�‰×Ñ˜e UÔ+Ø×!Ñ! %¨!¡)Ô,Ø×!Ñ! %Ô(Ü�eœTÔ"Ø×Ñ Ô&Ü�eœUÔ#Ø× Ñ  Õ'ð $r†   c                 óò   — t        |t        «      rt        |«      }d | _        t	        | j
                  «      dz
  }| j
                  j                  |«       | j                  |«       | j                  |«       y r<  )	rë   rÝ   r5  rø  r¿   r  r  r  r  )r„   ÚiterablerÍ  s      rq   r  zPath.extendÅ  s]   € Ü�h¤Ô$Ü˜H“~ˆHØˆŒÜ�D—N‘NÓ# aÑ'ˆØ�‰×Ñ˜hÔ'Ø×!Ñ! %Ô(Ø×Ñ˜uÕ%r†   c                 óˆ  — t        | j                  «      dk(  ryt        t        | j                  «      dz
  dd«      D ]‚  }| j                  |   }t        |t        «      sŒ#|j                  «       dk7  sŒ7t        |j                  |j                  «      }t        |j                  «      |_        | j                  ||«       Œ„ | S )a§  Forces close operations to be zero length by introducing a direct
        line to operation just before any non-zero length close.

        This is helpful because for some operations like reverse() because the
        close must be located at the very end of the path sequence. But, if it's
        in effect a line-to and close, the line-to would need to start the sequence.

        But, for some operations this won't matter since it will still result in
        a closed shape with reversed ordering. But, if the final point in the
        sequence must exactly switch with the first point in the sequence. The
        close segments must be direct and zero length.
        r   Nr¢   r¶  )r¿   r  rÉ  rë   rd  rN  r  r¾   r‹   r1  r"  )r„   rÊ  rX  r&   s       rq   Údirect_closezPath.direct_closeÎ  s™   € ô ˆt�~‰~Ó !Ò#ØÜ”s˜4Ÿ>™>Ó*¨QÑ.°°BÖ7ˆAØ—n‘n QÑ'ˆGÜ˜'¤5Õ)Ø—>‘>Ó# qÓ(Ü §¡¨w¯{©{Ó;�DÜ$)¨'¯+©+Ó$6�G”MØ—K‘K  4Õ(ð 8ð ˆr†   c                 óz  — t        | j                  «      dk(  ry | j                  d   j                  }d | j                  d   _        t        «       }t	        | j                  «       «      }|D ]  }|j                  «        Œ t        |«      D ]  }||z  }Œ	 |j                  | _        || j                  d   _        | S r}   )r¿   r  r¾   r5  r(  Úas_subpathsrž  r<  )r„   ÚprepointrÆ  ÚsubpathsÚsubpaths        rq   rž  zPath.reverseæ  s¢   € Üˆt�~‰~Ó !Ò#ØØ—>‘> !Ñ$×*Ñ*ˆØ"&ˆ�‰�qÑÔÜ‹FˆÜ˜×(Ñ(Ó*Ó+ˆÛˆGØ�O‰OÕð  ä Ö)ˆGØ�‰L‰Að *àŸ™ˆŒØ"*ˆ�‰�qÑÔØˆr†   c                 ó>   — t        | j                  «       «      }||   S r�   )r(  r^  )r„   rÍ  r`  s      rq   ra  zPath.subpathõ  s   € Ü˜×(Ñ(Ó*Ó+ˆØ˜‰Ðr†   c                 óJ   — t        | j                  «       «      }t        |«      S r�   )r(  r^  r¿   )r„   r`  s     rq   Úcount_subpathszPath.count_subpathsù  s   € Ü˜×(Ñ(Ó*Ó+ˆÜ�8‹}Ðr†   c              #   ó&  K  — d}t        | «      D ]S  \  }}t        |t        «      r||k7  rt        | ||dz
  «      –— |}t        |t        «      sŒ@t        | ||«      –— |dz   }ŒU |t        | «      k7  rt        | |t        | «      dz
  «      –— y y ­wr¡   )rM  rë   re  r  rd  r¿   )r„   r¾   ÚcurrentrU  s       rq   r^  zPath.as_subpathsý  s“   è ø€ ØˆÜ% džO‰LˆG�SÜ˜#œtÔ$Ø˜eÒ#Ü! $¨¨w¸©{Ó;Ò;Ø#�EÜ˜#œuÕ%Ü˜d E¨7Ó3Ò3Ø !™‘ð ,ð ”C˜“IÒÜ˜$ ¤s¨4£y°1¡}Ó5Ó5ð ùs   ‚ABÁABc              #   ól   K  — | D ]+  }|D ]$  }t        |t        «      st        |«      –— Œ!|–— Œ& Œ- y­w)z/Returns the list of defining points within pathNr…  )r„   rU  rÆ  s      rq   Ú	as_pointszPath.as_points
  s2   è ø€ ãˆCÛ�Ü! !¤UÔ+Ü ›(“Nà“Gñ	 ñ ùs   ‚24c                 ó  — t         j                  | «       t        j                  | «       t        | j                  t
        «      r | j                  D ]  }|| j                  z  }Œ | j                  j                  «        | S )zh
        Realizes the transform to the shape properties.

        Path objects reify perfectly.
        )r  r  rö  rë   r;   r\  r  r"  )r„   rÎ  s     rq   r  z
Path.reify  s_   € ô 	×Ñ˜DÔ!Ü×Ñ˜DÔ!Ü�d—n‘n¤fÔ-Ø—^”^�Ø�T—^‘^Ñ#‘ð $à�‰×ÑÔØˆr†   Nc           
      ó"  — t        | «      dk(  ryg }d }t        d«      }|€d}d}nd}t        |«      }|�×| D ]Ñ  }t        |t        t
        t        t        f«      r#|j                  |j                  ||¬«      «       n~t        |t        t        f«      rh|r|s|s?|j                  r3|j                  |j                  |||j                  |«      ¬«      «       n#|j                  |j                  ||d¬«      «       |}|j                  }ŒÓ nô| D ]ï  }t        |t        t
        t        t        f«      r-|j                  |j                  ||j                  ¬«      «       n’t        |t        t        f«      r||r|s|sI|j                  r=|j                  |j                  ||j                  |j                  |«      ¬«      «       n-|j                  |j                  ||j                  d¬«      «       |}|j                  }Œñ dj!                  |«      S )Nr   rÚ   FTrª   r  r�  )r¿   r1  r™   rë   re  r  rê  rd  r³  r6   r9  r  r€  r6  r‹   r«   r¹  )	r@  r«   r€  ÚpartsÚprevious_segmentrÆ  Úoverride_smoothÚsmooth_set_valuerX  s	            rq   Úsvg_dz
Path.svg_d!  sÛ  € äˆx‹=˜AÒØØˆØÐÜ�!‹HˆØˆ>Ø#ˆOØ#Ñà"ˆOÜ# F›|ÐØÐÛ#�Ü˜g¬¬d´C¼Ð'?Ô@Ø—L‘L §¡¨1°x Ó!@ÕAÜ ¬+´Ð)GÔHÙ'Ñ,<Ù+°·²àŸ™Ø#ŸI™IØ !Ø)1Ø'.×'=Ñ'=Ð>NÓ'Oð &ó õð Ÿ™ W§Y¡Y¨q¸8ÈE YÓ%RÔSØ#*Ð Ø$×(Ñ(‘ñ# $ó& $�Ü˜g¬¬d´C¼Ð'?Ô@Ø—L‘L §¡¨1°w×7GÑ7G Ó!HÕIÜ ¬+´Ð)GÔHÙ'Ñ,<Ù+°·²àŸ™Ø#ŸI™IØ !Ø)0×)9Ñ)9Ø'.×'=Ñ'=Ð>NÓ'Oð &ó õð Ÿ™Ø#ŸI™I a°'×2BÑ2BÈ5˜IÓQôð $+Ð Ø$×(Ñ(‘ð' $ð( �x‰x˜‹Ðr†   c                 ód   — | }|rt        |«      }t        j                  |j                  ||¬«      S r  )rû   r5  ro  r  )r„   r«   r  r€  r!   s        rq   r6   zPath.dX  s,   € ØˆÙÜ�t“9ˆDÜ�z‰z˜$Ÿ.™.°8ÀFˆzÓKÐKr†   c                 óª   — |rA| j                   j                  «       s'| j                  D �cg c]  }|| j                   z  ‘Œ c}S | j                  S c c}w r�   )r;   r/  r  )r„   r  rº   s      rq   r@  zPath.segments^  sF   € Ù˜tŸ~™~×9Ñ9Ô;Ø04·²Ó?±¨1�A˜Ÿ™Ó&°Ñ?Ð?Ø�~‰~Ðùò @s   «Ac                 ó  — t         |z  }t        t        | «      dz
  dd«      D ]b  }| |   }t        |t        «      sŒt        t        t        |j                  «      |z  «      «      }t        |j                  |«      «      | ||dz    Œd y)u]   
        Iterates through this path and replaces any Arcs with cubic BÃ©zier curves.
        r¢   r¶  N)r   rÉ  r¿   rë   rê  rš   r	   rû   rÑ   r(  rØ  ©r„   r>  r½  rº   rX  r¼  s         rq   Úapproximate_arcs_with_cubicsz!Path.approximate_arcs_with_cubicsc  sw   € ô ˜E‘kˆÜ”s˜4“y 1‘} b¨"Ö-ˆAØ˜1‘gˆGÜ˜'¤3Õ'Ü"¤4¬¨G¯M©MÓ(:¸[Ñ(HÓ#IÓJ�Ü"& w×'>Ñ'>¸|Ó'LÓ"M��Q˜˜Q™‘ñ	 .r†   c                 ó  — t         |z  }t        t        | «      dz
  dd«      D ]b  }| |   }t        |t        «      sŒt        t        t        |j                  «      |z  «      «      }t        |j                  |«      «      | ||dz    Œd y)ua   
        Iterates through this path and replaces any Arcs with quadratic BÃ©zier curves.
        r¢   r¶  N)r   rÉ  r¿   rë   rê  rš   r	   rû   rÑ   r(  rÉ  rs  s         rq   Úapproximate_arcs_with_quadsz Path.approximate_arcs_with_quadsn  sw   € ô ˜E‘kˆÜ”s˜4“y 1‘} b¨"Ö-ˆAØ˜1‘gˆGÜ˜'¤3Õ'Ü"¤4¬¨G¯M©MÓ(:¸[Ñ(HÓ#IÓJ�Ü"& w×'=Ñ'=¸lÓ'KÓ"L��Q˜˜Q™‘ñ	 .r†   c                 óº   — t        t        | «      dz
  dd«      D ]?  }| |   }t        |t        t        f«      sŒt        |j                  |¬«      «      | ||dz    ŒA y)u`   
        Iterates through this path and replaces any BÃ©zier curves with circular arcs.
        r¢   r¶  r]  N)rÉ  r¿   rë   r  r9  r(  rì  )r„   r>  rº   rX  s       rq   Ú%approximate_bezier_with_circular_arcsz*Path.approximate_bezier_with_circular_arcsy  sY   € ô ”s˜4“y 1‘} b¨"Ö-ˆAØ˜1‘gˆGÜ˜'¤O´[Ð#AÕBÜ"& w×'?Ñ'?ÀeÐ'?Ó'LÓ"M��Q˜˜Q™‘ñ .r†   )Frñ  )NTNr{  )gš™™™™™¹?)g{®Gáz„?):rÓ   rÔ   rÕ   rU  r…   rú   rN  r  r  r  r  rR  r  rø   r  rX  rH  r)  r&  r  r  rÒ   r  r7  rZ  r9  r£   r>  rB  r¾   r‹   rÂ   r&   rÅ   rÄ   rÃ   rÇ   rÈ   rÆ   rÉ   rÀ   r³  r"  r  r\  rž  ra  rd  r^  rh  r  r\  ro  r6   r@  rt  rv  rx  rm   r†   rq   r5  r5  a  s‹  „ ñò.&3òPò%òò"ò	
ó0ò.,ò.	.òòò
"ò#òò<òò !ò
$ò
#ò<ð> ñ	
ó ð	
ð ñ
ó ð
ð ñó ðð$ ñó ðò*òð &+ô ð &+ô ð ,1ô ð* .3ô ð* -2ô ð  &+ô ð, .3ô "ðH ',ô ,ð\ ',ô ó(ò,ò (ò&òò0òòò6òòð ò4ó ð4ólLóó
	Nó	MôNr†   r5  c                   óÐ   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zdd„Zd„ Zd„ Zd„ Zy)ÚRecta»  
    SVG Rect shapes are defined in SVG2 10.2
    https://www.w3.org/TR/SVG2/shapes.html#RectElement

    These have geometric properties x, y, width, height, rx, ry
    Geometric properties can be Length values.

    Rect(x, y, width, height)
    Rect(x, y, width, height, rx, ry)
    Rect(x, y, width, height, rx, ry, matrix)
    Rect(x, y, width, height, rx, ry, matrix, stroke, fill)

    Rect(dict): dictionary values read from svg.

    c                 óª   — d | _         d | _        d | _        d | _        d | _        d | _        t        j                  | g|¢­i |¤Ž | j                  «        y r�   )	rE   rF   r   r   r@   rA   r.  r…   Ú_validate_rectrû  s      rq   r…   zRect.__init__”  sN   € ØˆŒØˆŒØˆŒ
ØˆŒØˆŒØˆŒÜ�‰�tÐ-˜dÒ- fÒ-Ø×ÑÕr†   c                 ó  — t         j                  | |«       |j                  | _        |j                  | _        |j                  | _        |j
                  | _        |j                  | _        |j                  | _        | j                  «        y r�   )	r.  r¬  rE   rF   r   r   r@   rA   r|  r  s     rq   r¬  zRect.property_by_objectž  s`   € Ü× Ñ   qÔ)Ø—‘ˆŒØ—‘ˆŒØ—W‘WˆŒ
Ø—h‘hˆŒØ—$‘$ˆŒØ—$‘$ˆŒØ×ÑÕr†   c                 óˆ  — t         j                  | |«       t        |j                  t        d«      «      j                  «       | _        t        |j                  t        d«      «      j                  «       | _        t        |j                  t        d«      «      j                  «       | _
        t        |j                  t        d«      «      j                  «       | _        t        |j                  t        d «      «      j                  «       | _        t        |j                  t        d «      «      j                  «       | _        y r¡   )r.  r«  r×   rè  r´  rÌ   rE   rµ  rF   r¶  r   r·  r   ÚSVG_ATTR_RADIUS_Xr@   ÚSVG_ATTR_RADIUS_YrA   rÀ  s     rq   r«  zRect.property_by_values¨  sÔ   € Ü× Ñ   vÔ.Ü˜Ÿ
™
¤:¨qÓ1Ó2×8Ñ8Ó:ˆŒÜ˜Ÿ
™
¤:¨qÓ1Ó2×8Ñ8Ó:ˆŒÜ˜FŸJ™J¤~°qÓ9Ó:×@Ñ@ÓBˆŒ
Ü˜VŸZ™Z¬¸Ó;Ó<×BÑBÓDˆŒÜ˜Ÿ™Ô$5°tÓ<Ó=×CÑCÓEˆŒÜ˜Ÿ™Ô$5°tÓ<Ó=×CÑCÓEˆ�r†   c                 ó  — t        |«      }|dk\  r!t        |d   «      j                  «       | _        |dk\  r!t        |d   «      j                  «       | _        |dk\  r!t        |d   «      j                  «       | _        |dk\  r!t        |d   «      j                  «       | _        |dk\  r!t        |d   «      j                  «       | _        |dk\  r!t        |d   «      j                  «       | _        |dk\  r | j                  |dd  Ž  y y )	Nr¢   r   r   r`  ra  r   r¶  r`  )
r¿   r×   rÌ   rE   rF   r   r   r@   rA   ro  rm  s      rq   rá  zRect.property_by_args±  sç   € Ü˜“Yˆ
Ø˜Š?Ü˜D ™G“_×*Ñ*Ó,ˆDŒFØ˜Š?Ü˜D ™G“_×*Ñ*Ó,ˆDŒFØ˜Š?Ü  Q¡›×.Ñ.Ó0ˆDŒJØ˜Š?Ü   a¡›/×/Ñ/Ó1ˆDŒKØ˜Š?Ü˜T !™W“o×+Ñ+Ó-ˆDŒGØ˜Š?Ü˜T !™W“o×+Ñ+Ó-ˆDŒGØ˜Š?ØˆD×Ñ˜d 1 2˜hÒ'ð r†   c                 óN  — | j                   }| j                  }|€|€dx}}|�*|€(t        |«      j                  | j                  ¬«      }|}nz|�*|€(t        |«      j                  | j
                  ¬«      }|}nN|�L|�Jt        |«      j                  | j                  ¬«      }t        |«      j                  | j
                  ¬«      }|dk(  s|dk(  rdx}}n3	 t        || j                  dz  «      }t        || j
                  dz  «      }|| _         || _        y# t        $ r Y Œw xY w)zNone is 'auto' for values.Nr   ©r8  rˆ  )r@   rA   r×   rÌ   r   r   rK  rž   ©r„   r@   rA   s      rq   r|  zRect._validate_rectÂ  s   € à�W‰WˆØ�W‰WˆØˆ:˜"˜*ØˆKˆB�Øˆ>˜b˜jÜ˜“×!Ñ!°$·*±*Ð!Ó=ˆBØ‰BØˆ^  
Ü˜“×!Ñ!°$·+±+Ð!Ó>ˆBØ‰BØˆ^  Ü˜“×!Ñ!°$·*±*Ð!Ó=ˆBÜ˜“×!Ñ!°$·+±+Ð!Ó>ˆBØ�Š7�b˜A’gØˆKˆB‘ðÜ˜˜TŸZ™Z¨#Ñ-Ó.�Ü˜˜TŸ[™[¨3Ñ.Ó/�ð ˆŒØˆ�øô ò Ùðús   Ã2D Ä	D$Ä#D$c                 óN  — | j                   dk7  r7|j                  t        ›dt        j	                  | j                   «      ›�«       | j
                  dk7  r7|j                  t        ›dt        j	                  | j
                  «      ›�«       | j                  dk7  r7|j                  t        ›dt        j	                  | j                  «      ›�«       | j                  dk7  r7|j                  t        ›dt        j	                  | j                  «      ›�«       | j                  dk7  r7|j                  t        ›dt        j	                  | j                  «      ›�«       | j                  dk7  r8|j                  t        ›dt        j	                  | j                  «      ›�«       y y )Nr   r±  )rE   r³  r´  r×   rÝ   rF   rµ  r   r¶  r   r·  r@   r  rA   r€  rÀ  s     rq   Ú_attrszRect._attrsÜ  s   € Ø�6‰6�QŠ;Ø�M‰M¦Z´·±¸D¿F¹FÔ1CÐDÔEØ�6‰6�QŠ;Ø�M‰M¦Z´·±¸D¿F¹FÔ1CÐDÔEØ�:‰:˜Š?Ø�M‰M¦^´V·Z±ZÀÇ
Á
Ô5KÐLÔMØ�;‰;˜!ÒØ�M‰M¦_´f·j±jÀÇÁÔ6MÐNÔOØ�7‰7�aŠ<Ø�M‰MÖ%6¼¿
¹
À4Ç7Á7Ô8KÐLÔMØ�7‰7�aŠ<Ø�M‰MÖ%6¼¿
¹
À4Ç7Á7Ô8KÐLÕMð r†   c                 óv   — g }| j                  |«       | j                  |«       dj                  |«      }d|z  S ©Nrê  zRect(%s)©r†  rt  r¹  rº  s      rq   r&  zRect.__repr__ê  s:   € ØˆØ�‰�FÔØ×Ñ˜Ô Ø—‘˜6Ó"ˆØ˜FÑ"Ð"r†   c                 óv   — g }| j                  |«       | j                  |«       dj                  |«      }d|z  S rˆ  ©r†  rv  r¹  rº  s      rq   r)  zRect.__str__ñ  s8   € ØˆØ�‰�FÔØ�‰˜ÔØ—‘˜6Ó"ˆØ˜FÑ"Ð"r†   c                 ó   — t        | «      S r�   )rz  rƒ   s    rq   rú   zRect.__copy__ø  ó   € Ü�D‹zÐr†   c                 ó¼   — | j                   s t        | j                  | j                  «      S t        | j                  | j                  «      }|| j                  z  }|S r�   ©rú  r1  rE   rF   r;   ©r„   rK  s     rq   Úimplicit_positionzRect.implicit_positionû  óE   € à�zŠzÜ˜Ÿ™ §¡Ó(Ð(Ü�d—f‘f˜dŸf™fÓ%ˆØ�—‘ÑˆØˆr†   c                 óP   — | j                   s| j                  S | j                  d   S r}   ©rú  rE   r‘  rƒ   s    rq   Ú
implicit_xzRect.implicit_x  ó#   € à�zŠzØ—6‘6ˆMØ×%Ñ% aÑ(Ð(r†   c                 óP   — | j                   s| j                  S | j                  d   S r<  ©rú  rF   r‘  rƒ   s    rq   Ú
implicit_yzRect.implicit_y	  r–  r†   c                 óÔ   — | j                   s| j                  S t        | j                  d«      }|| j                  z  }t        dd«      }|| j                  z  }|j	                  |«      S r}   ©rú  r   r1  r;   r*  ©r„   rÆ  rð  s      rq   Úimplicit_widthzRect.implicit_width  ó[   € à�zŠzØ—:‘:ÐÜ�$—*‘*˜aÓ ˆØ	ˆT�^‰^ÑˆÜ�q˜!“ˆØ�$—.‘.Ñ ˆØ×!Ñ! !Ó$Ð$r†   c                 óÔ   — | j                   s| j                  S t        d| j                  «      }|| j                  z  }t        dd«      }|| j                  z  }|j	                  |«      S r}   ©rú  r   r1  r;   r*  rœ  s      rq   Úimplicit_heightzRect.implicit_height  ó[   € à�zŠzØ—;‘;ÐÜ�!�T—[‘[Ó!ˆØ	ˆT�^‰^ÑˆÜ�q˜!“ˆØ�$—.‘.Ñ ˆØ×!Ñ! !Ó$Ð$r†   c                 óÔ   — | j                   s| j                  S t        | j                  d«      }|| j                  z  }t        dd«      }|| j                  z  }|j	                  |«      S r}   ©rú  r@   r1  r;   r*  rœ  s      rq   Úimplicit_rxzRect.implicit_rx#  sZ   € à�zŠzØ—7‘7ˆNÜ�$—'‘'˜1ÓˆØ	ˆT�^‰^ÑˆÜ�q˜!“ˆØ�$—.‘.Ñ ˆØ×!Ñ! !Ó$Ð$r†   c                 óÔ   — | j                   s| j                  S t        d| j                  «      }|| j                  z  }t        dd«      }|| j                  z  }|j	                  |«      S r}   ©rú  rA   r1  r;   r*  rœ  s      rq   Úimplicit_ryzRect.implicit_ry-  sZ   € à�zŠzØ—7‘7ˆNÜ�!�T—W‘WÓˆØ	ˆT�^‰^ÑˆÜ�q˜!“ˆØ�$—.‘.Ñ ˆØ×!Ñ! !Ó$Ð$r†   c                 óú  — d}| j                   }| j                  }| j                  }| j                  }| j	                  «       ry| j
                  }| j                  }| j                  s4|dcxk  r|k  r)n n&|dcxk  r|k  rn nd}t        |«      }t        |«      }|dcxk  r|k  sn |dcxk  r|k  rn nd}d}||cxk(  rdk(  rhn net        d||f«      t        ||f||z   |f«      t        ||z   |f||z   ||z   f«      t        ||z   ||z   f|||z   f«      t        |||z   f||f«      f}	�nt        d||z   |f«      t        ||z   |f||z   |z
  |f«      t        ||z   |z
  |f||z   ||z   f|||¬«      t        ||z   ||z   f||z   ||z   |z
  f«      t        ||z   ||z   |z
  f||z   |z
  ||z   f|||¬«      t        ||z   |z
  ||z   f||z   ||z   f«      t        ||z   ||z   f|||z   |z
  f|||¬«      t        |||z   |z
  f|||z   f«      t        |||z   f||z   |f|||¬«      t        ||z   |f||z   |f«      f
}	|r| j                  j                  «       r|	S |	D �
cg c]  }
|
| j                  z  ‘Œ c}
S c c}
w )aU  
        Rect decomposition is given in SVG 2.0 10.2

        Rect:
        * perform an absolute moveto operation to location (x,y);
        * perform an absolute horizontal lineto with parameter x+width;
        * perform an absolute vertical lineto parameter y+height;
        * perform an absolute horizontal lineto parameter x;
        * ( close the path)

        Rounded Rect:
        rx and ry are used as the equivalent parameters to the elliptical arc command,
        the x-axis-rotation and large-arc-flag are set to zero, the sweep-flag is set to one

        * perform an absolute moveto operation to location (x+rx,y);
        * perform an absolute horizontal lineto with parameter x+width-rx;
        * perform an absolute elliptical arc operation to coordinate (x+width,y+ry)
        * perform an absolute vertical lineto parameter y+height-ry;
        * perform an absolute elliptical arc operation to coordinate (x+width-rx,y+height)
        * perform an absolute horizontal lineto parameter x+rx;
        * perform an absolute elliptical arc operation to coordinate (x,y+height-ry)
        * perform an absolute vertical lineto parameter y+ry
        * perform an absolute elliptical arc operation with a segment-completing close path operation

        :param transformed: provide the reified version.
        :return: path_d of shape.
        Frm   r   TN)r@   rA   rj  )rE   rF   r   r   r,  r@   rA   r0  rû   re  r  rd  rê  r;   r/  )r„   r  rj  rE   rF   r   r   r@   rA   r@  rº   s              rq   r@  zRect.segments7  sè  € ð8 ˆØ�F‰FˆØ�F‰FˆØ—
‘
ˆØ—‘ˆØ×ÑÔØØ�W‰WˆØ�W‰WˆØ�|Š|Ø�AŒ~˜�~ " q¤/¨6¥/Ø�Ü˜“W�Ü˜“W�Ø�Œ>�EŒ>˜R !œ_ f�_ØˆBØˆBØ�Œ=�q�=ä�T˜A˜q˜6Ó"Ü�a˜�V˜a %™i¨˜^Ó,Ü�a˜%‘i �^ a¨%¡i°°V±Ð%<Ó=Ü�a˜%‘i  V¡Ð,¨q°!°f±*¨oÓ>Ü�q˜!˜f™*�o¨¨1 vÓ.ðŠHô �T˜A ™F A˜;Ó'Ü�a˜"‘f˜a�[ 1 u¡9¨r¡>°1Ð"5Ó6ÜØ˜‘Y ‘^ QÐ'Ø˜‘Y  B¡Ð'ØØØ#ôô �a˜%‘i  R¡Ð(¨1¨u©9°a¸&±jÀ2±oÐ*FÓGÜØ˜‘Y  F¡
¨R¡Ð0Ø˜‘Y ‘^ Q¨¡ZÐ0ØØØ#ôô �a˜%‘i "‘n a¨&¡jÐ1°A¸±F¸AÀ¹JÐ3GÓHÜØ˜‘V˜Q ™ZÐ(Ø˜˜F™
 R™Ð(ØØØ#ôô �a˜˜V™ b™Ð)¨A¨q°2©v¨;Ó7Ü�Q˜˜B™�K ! b¡&¨! °¸ÀGÔLÜ�q˜2‘v˜q�k A¨¡F¨A ;Ó/ð9ˆHñ< ˜dŸn™n×8Ñ8Ô:ØˆOá08Ó9±¨1�A˜Ÿ™Ó&°Ñ9Ð9ùÒ9s   ÉI8c                 óÊ  — | j                   j                  «       }| j                   j                  «       }||z  dk  r| S | j                   j                  «       }| j                   j	                  «       }| j                   j                  «       dk(  �rR| j                   j                  «       dk(  �r4|dk7  �r.|dk7  �r(t        j                  | «       t        j                  | «       | xj                  |z  c_
        | xj                  |z  c_        | xj                  |z  c_
        | xj                  |z  c_        | xj                   t        j                  | | «      z  c_         || j                  z  | _        || j                  z  | _        || j                   z  | _        || j"                  z  | _        | xj                   t        j%                  d|z  d|z  «      z  c_         | S )a/  
        Realizes the transform to the shape properties.

        If the realized shape can be properly represented as a rectangle with an identity matrix
        it will be, otherwise the properties will approximate the implied values.

        Skewed and Rotated rectangles cannot be reified.
        r   r  )r;   r  r  r  r  r  r   r  r  rö  rE   rF   r\  rY   r@   rA   r   r   rZ   ©r„   rŽ  r�  r”  r–  s        rq   r  z
Rect.reify�  so  € ð —.‘.×.Ñ.Ó0ˆØ—.‘.×.Ñ.Ó0ˆØ�WÑ˜qÒ ØˆKØ—n‘n×2Ñ2Ó4ˆØ—n‘n×2Ñ2Ó4ˆà�N‰N×'Ñ'Ó)¨QÓ.Ø—‘×+Ñ+Ó-°Ó2Ø˜1“Ø˜1“ä×Ñ Ô%Ü×Ñ Ô%Ø�FŠF�gÑ�FØ�FŠF�gÑ�FØ�FŠF�kÑ!�FØ�FŠF�kÑ!�FØ�NŠNœf×.Ñ.°¨|¸k¸\ÓJÑJ�NØ §¡Ñ'ˆDŒGØ §¡Ñ'ˆDŒGØ  4§:¡:Ñ-ˆDŒJØ! D§K¡KÑ/ˆDŒKØ�NŠNœfŸl™l¨3°©=¸#À¹-ÓHÑH�NØˆr†   c                 óº  — t        j                  | fi |¤Ž |j                  d|j                  d«      «      }|j                  d|j                  d«      «      }	 |d= t	        | j
                  t        «      r# | j
                  j                  dd|i|¤Ž| _        t	        | j                  t        «      r# | j                  j                  dd|i|¤Ž| _        t	        | j                  t        «      r# | j                  j                  dd|i|¤Ž| _	        t	        | j                  t        «      r# | j                  j                  dd|i|¤Ž| _
        t	        | j                  t        «      r# | j                  j                  dd|i|¤Ž| _        t	        | j                  t        «      r# | j                  j                  dd|i|¤Ž| _        | S # t        $ r Y �Œ|w xY wr   )r.  rÐ  rè  r!  rë   rE   r×   rÌ   rF   r   r   r@   rA   r"  s       rq   rÐ  zRect.render³  s|  € Ü�‰�TÑ$˜VÒ$Ø—
‘
˜7 F§J¡JÐ/@Ó$AÓBˆØ—‘˜H f§j¡jÐ1BÓ&CÓDˆð	ØÐ(Ð)ô �d—f‘fœfÔ%Ø!�T—V‘V—\‘\ÑB°%ÐB¸6ÑBˆDŒFÜ�d—f‘fœfÔ%Ø!�T—V‘V—\‘\ÑC°&ÐC¸FÑCˆDŒFÜ�d—j‘j¤&Ô)Ø)˜Ÿ™×)Ñ)ÑJ¸%ÐJÀ6ÑJˆDŒJÜ�d—k‘k¤6Ô*Ø+˜$Ÿ+™+×+Ñ+ÑM¸FÐMÀfÑMˆDŒKÜ�d—g‘gœvÔ&Ø#�d—g‘g—m‘mÑD°EÐD¸VÑDˆDŒGÜ�d—g‘gœvÔ&Ø#�d—g‘g—m‘mÑE°FÐE¸fÑEˆDŒGØˆøô ò 	Úð	ús   ÁG Ç	GÇGc                 ó‚   — | j                   dk(  xs/ | j                  dk(  xs | j                   d u xs | j                  d u S r}   ©r   r   rƒ   s    rq   r,  zRect.is_degenerateÉ  sG   € à�J‰J˜!‰Oò #Ø�{‰{˜aÑò#à�z‰z˜TÐ!ò#ð �{‰{˜dÐ"ð		
r†   Nr{  )rÓ   rÔ   rÕ   rU  r…   r¬  r«  rá  r|  r†  r&  r)  rú   rZ  r‘  r•  r™  r�  r¡  r¥  r¨  r@  r  rÐ  r,  rm   r†   rq   rz  rz  ƒ  sÙ   „ ñò òòFò(ò"ò4Nò#ò#òð ñó ðð ñ)ó ð)ð
 ñ)ó ð)ð
 ñ%ó ð%ð ñ%ó ð%ð ñ%ó ð%ð ñ%ó ð%óW:òr!òFó,
r†   rz  c                   óÀ   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	e
d„ «       Ze
d	„ «       ZeZe
d
„ «       Zdd„Zd„ Zd„ Zd„ Zd„ Zd„ Zdd„Zd„ Zd„ Zd„ Zd„ Zefd„Zd„ Zy)Ú_RoundShapec                 ón   — d | _         d | _        d | _        d | _        t	        j
                  | g|¢­i |¤Ž y r�   )r>   r?   r@   rA   r.  r…   rû  s      rq   r…   z_RoundShape.__init__Ó  ó4   € ØˆŒØˆŒØˆŒØˆŒÜ�‰�tÐ-˜dÒ- fÓ-r†   c                 ó¸   — t         j                  | |«       |j                  | _        |j                  | _        |j                  | _        |j
                  | _        y r�   )r.  r¬  r>   r?   r@   rA   r  s     rq   r¬  z_RoundShape.property_by_objectÚ  ó>   € Ü× Ñ   qÔ)Ø—$‘$ˆŒØ—$‘$ˆŒØ—$‘$ˆŒØ—$‘$ˆ�r†   c                 ó&  — t         j                  | |«       t        |j                  t        «      «      j                  «       | _        t        |j                  t        «      «      j                  «       | _        t        |j                  t        «      «      j                  «       | _
        t        |j                  t        «      «      j                  «       | _        t        |j                  t        d «      «      j                  «       }|�|| _
        || _        n&| j                  €d| _
        | j                  €d| _        |j                  dd «      }|�t        |«      \  | _        | _        | j                  €d| _        | j                  €d| _        y y )Nr¢   rë  r   )r.  r«  r×   rè  ÚSVG_ATTR_CENTER_XrÌ   r>   ÚSVG_ATTR_CENTER_Yr?   r  r@   r€  rA   ÚSVG_ATTR_RADIUSr1  )r„   r¼  rB   rë  s       rq   r«  z_RoundShape.property_by_valuesá  s,  € Ü× Ñ   vÔ.Ü˜Ÿ™Ô$5Ó6Ó7×=Ñ=Ó?ˆŒÜ˜Ÿ™Ô$5Ó6Ó7×=Ñ=Ó?ˆŒÜ˜Ÿ™Ô$5Ó6Ó7×=Ñ=Ó?ˆŒÜ˜Ÿ™Ô$5Ó6Ó7×=Ñ=Ó?ˆŒÜ�6—:‘:œo¨tÓ4Ó5×;Ñ;Ó=ˆØˆ=ØˆDŒGØˆD�Gà�w‰wˆØ�”Ø�w‰wˆØ�”Ø—‘˜H dÓ+ˆØÐÜ$ V›}ÑˆDŒG�T”Wà�7‰7ˆ?ØˆDŒGØ�7‰7ˆ?ØˆD�Gð r†   c                 óž  — t        |«      }|dk\  r!t        |d   «      j                  «       | _        |dk\  r!t        |d   «      j                  «       | _        |dk\  rYt        |d   «      j                  «       | _        |dk\  r"t        |d   «      j                  «       | _        n| j
                  | _        |dk\  r | j                  |dd  Ž  y y )Nr¢   r   r   r`  ra  r   )r¿   r×   rÌ   r>   r?   r@   rA   ro  rm  s      rq   rá  z_RoundShape.property_by_argsù  s´   € Ü˜“Yˆ
Ø˜Š?Ü˜T !™W“o×+Ñ+Ó-ˆDŒGØ˜Š?Ü˜T !™W“o×+Ñ+Ó-ˆDŒGØ˜Š?Ü˜T !™W“o×+Ñ+Ó-ˆDŒGØ˜QŠÜ   a¡›/×/Ñ/Ó1�•àŸ'™'�”Ø˜Š?ØˆD×Ñ˜d 1 2˜hÒ'ð r†   c                 ó¦  — | j                   �7|j                  t        ›dt        j	                  | j                   «      ›�«       | j
                  �7|j                  t        ›dt        j	                  | j
                  «      ›�«       | j                  | j                  k(  s| j                  €8|j                  t        ›dt        j	                  | j                  «      ›�«       y |j                  t        ›dt        j	                  | j                  «      ›�«       |j                  t        ›dt        j	                  | j                  «      ›�«       y ©Nr±  )r>   r³  r¶  r×   rÝ   r?   r·  r@   rA   r¸  r  r€  rÀ  s     rq   r†  z_RoundShape._attrs  sÈ   € Ø�7‰7ÐØ�M‰MÖ%6¼¿
¹
À4Ç7Á7Ô8KÐLÔMØ�7‰7ÐØ�M‰MÖ%6¼¿
¹
À4Ç7Á7Ô8KÐLÔMØ�7‰7�d—g‘gÒ §¡ Ø�M‰M¦_´f·j±jÀÇÁÔ6IÐJÕKà�M‰MÖ%6¼¿
¹
À4Ç7Á7Ô8KÐLÔMØ�M‰MÖ%6¼¿
¹
À4Ç7Á7Ô8KÐLÕMr†   c                 ó¤   — g }| j                  |«       | j                  |«       dj                  |«      }| j                  j                  ›d|›d�S ©Nrê  rg   rh   )r†  rt  r¹  rs  rÓ   rº  s      rq   r&  z_RoundShape.__repr__  sD   € ØˆØ�‰�FÔØ×Ñ˜Ô Ø—‘˜6Ó"ˆØŸ>™>×2Ó2²FÐ;Ð;r†   c                 ó¤   — g }| j                  |«       | j                  |«       dj                  |«      }| j                  j                  ›d|›d�S r½  )r†  rv  r¹  rs  rÓ   rº  s      rq   r)  z_RoundShape.__str__  sB   € ØˆØ�‰�FÔØ�‰˜ÔØ—‘˜6Ó"ˆØŸ>™>×2Ó2²FÐ;Ð;r†   c                 óÔ   — | j                   s| j                  S t        | j                  d«      }|| j                  z  }t        dd«      }|| j                  z  }|j	                  |«      S r}   r¤  rî  s      rq   r¥  z_RoundShape.implicit_rx!  sZ   € à�zŠzØ—7‘7ˆNÜ�D—G‘G˜QÓˆØˆt�~‰~ÑˆÜ�q˜!“ˆØ�$—.‘.Ñ ˆØ×!Ñ! #Ó&Ð&r†   c                 óÔ   — | j                   s| j                  S t        d| j                  «      }|| j                  z  }t        dd«      }|| j                  z  }|j	                  |«      S r}   r§  )r„   re  rð  s      rq   r¨  z_RoundShape.implicit_ry+  sZ   € à�zŠzØ—7‘7ˆNÜ�A�t—w‘wÓˆØˆt�~‰~ÑˆÜ�q˜!“ˆØ�$—.‘.Ñ ˆØ×!Ñ! #Ó&Ð&r†   c                 ó€   — t        | j                  | j                  «      }| j                  s|S || j                  z  }|S r�   )r1  r>   r?   rú  r;   )r„   rë  s     rq   Úimplicit_centerz_RoundShape.implicit_center7  s5   € ä�t—w‘w §¡Ó(ˆØ�zŠzØˆMØ�$—.‘.Ñ ˆØˆr†   c                 óv  — | j                   }|| _         t        «       }d}t        |z  }|r;| j                  j	                  «       | j                  j                  «       z  dk  r| }d}|}| j                  }| j                  }	| j                  «       ry| j                  }
|j                  | j                  d«      «       t        |«      D ]F  }|t        | j                  |«      | j                  |«      |
||	| j                  |¬«      z  }|}||z  }ŒH |j                  «        || _         |j!                  |«      S )ag  
        SVG path decomposition is given in SVG 2.0 10.3, 10.4.

        A move-to command to the point cx+rx,cy;
        arc to cx,cy+ry;
        arc to cx-rx,cy;
        arc to cx,cy-ry;
        arc with a segment-completing close path operation.

        Converts the parameters from an ellipse or a circle to a string for a
        Path object d-attributera  r   rm   ©r@   rA   rÐ   rÑ   )rú  r5  r   r;   r  r  r¥  r¨  r,  rÂ  rÂ   ro  rÉ  rê  rÐ   rÀ   r@  )r„   r  Úoriginalr!   ÚstepsÚ	step_sizeÚt_startÚt_endr@   rA   rë  rÊ  s               rq   r@  z_RoundShape.segments?  s&  € ð —:‘:ˆØ ˆŒ
Ü‹vˆØˆÜ˜%‘Kˆ	áØ—‘×,Ñ,Ó.°·±×1MÑ1MÓ1OÑOÐRSÒSà"˜
ˆIØˆØˆà×ÑˆØ×ÑˆØ×ÑÔØØ×%Ñ%ˆØ�	‰	�4—?‘? 1Ó%Ô'Ü�u–ˆAØ”CØ—‘ Ó(Ø—‘ Ó&ØØØØŸ™Øôñ ˆDð ˆGØ�YÑ‰Eð ð 	�‰ŒØˆŒ
Ø�}‰}˜[Ó)Ð)r†   c                 óz  — | j                   j                  «       }| j                   j                  «       }||z  dk  r| S | j                   j                  «       }| j                   j	                  «       }| j                   j                  «       dk(  �r*| j                   j                  «       dk(  �r|dk7  �r|dk7  �r t        j                  | «       t        j                  | «       | xj                  |z  c_
        | xj                  |z  c_        | xj                  |z  c_
        | xj                  |z  c_        | xj                   t        j                  | | «      z  c_         || j                  z  | _        || j                  z  | _        | xj                   t        j!                  d|z  d|z  «      z  c_         | S )z|
        Realizes the transform to the shape properties.

        Skewed and Rotated roundshapes cannot be reified.
        r   r  )r;   r  r  r  r  r  r   r  r  rö  r>   r?   r\  rY   r@   rA   rZ   r«  s        rq   r  z_RoundShape.reifyn  sO  € ð —.‘.×.Ñ.Ó0ˆØ—.‘.×.Ñ.Ó0ˆØ�WÑ˜qÒ ØˆKØ—n‘n×2Ñ2Ó4ˆØ—n‘n×2Ñ2Ó4ˆà�N‰N×'Ñ'Ó)¨QÓ.Ø—‘×+Ñ+Ó-°Ó2Ø˜1“Ø˜1“ä×Ñ Ô%Ü×Ñ Ô%Ø�GŠG�wÑ�GØ�GŠG�wÑ�GØ�GŠG�{Ñ"�GØ�GŠG�{Ñ"�GØ�NŠNœf×.Ñ.°¨|¸k¸\ÓJÑJ�NØ §¡Ñ'ˆDŒGØ §¡Ñ'ˆDŒGØ�NŠNœfŸl™l¨3°©=¸#À¹-ÓHÑH�NØˆr†   c                 óÆ  — t        j                  | fi |¤Ž |j                  d|j                  d«      «      }|j                  d|j                  d«      «      }	 |d= t	        | j
                  t        «      r# | j
                  j                  dd|i|¤Ž| _        t	        | j                  t        «      r# | j                  j                  dd|i|¤Ž| _        t	        | j                  t        «      r# | j                  j                  dd|i|¤Ž| _	        t	        | j                  t        «      r# | j                  j                  dd|i|¤Ž| _
        | S # t        $ r Y �Œw xY wr   )r.  rÐ  rè  r!  rë   r>   r×   rÌ   r?   r@   rA   r"  s       rq   rÐ  z_RoundShape.renderŒ  ó   € Ü�‰�TÑ$˜VÒ$Ø—
‘
˜7 F§J¡JÐ/@Ó$AÓBˆØ—‘˜H f§j¡jÐ1BÓ&CÓDˆð	ØÐ(Ð)ô �d—g‘gœvÔ&Ø#�d—g‘g—m‘mÑD°EÐD¸VÑDˆDŒGÜ�d—g‘gœvÔ&Ø#�d—g‘g—m‘mÑE°FÐE¸fÑEˆDŒGÜ�d—g‘gœvÔ&Ø#�d—g‘g—m‘mÑD°EÐD¸VÑDˆDŒGÜ�d—g‘gœvÔ&Ø#�d—g‘g—m‘mÑE°FÐE¸fÑEˆDŒGØˆøô ò 	Úð	úó   ÁE Å	E ÅE c                 óJ   — | j                   }| j                  }|dk(  xs |dk(  S r}   )r¥  r¨  r„  s      rq   r,  z_RoundShape.is_degeneratež  s+   € Ø×ÑˆØ×ÑˆØ�Q‰wÒ!˜" ™'Ð!r†   c                 ó   — t        «       }|j                  | j                  | j                  «       |j	                  | j
                  «       | j                  }|j                  |j                  |j                  «       |S )a  
        return the unit matrix which would transform the unit circle into this ellipse.

        One of the valid parameterizations for ellipses is that they are all affine transforms of the unit circle.
        This provides exactly such a matrix.

        :return: matrix
        )
r\  r7  r¥  r¨  rM  rÐ   rÂ  r6  rE   rF   )r„   r¬   rë  s      rq   Úunit_matrixz_RoundShape.unit_matrix£  s]   € ô ‹HˆØ	�‰�T×%Ñ% t×'7Ñ'7Ô8Ø	�‰�d—m‘mÔ$Ø×%Ñ%ˆØ	×Ñ˜Ÿ™ 6§8¡8Ô,Øˆr†   c           
      ó¸   — t        | j                  |«      | j                  |«      | j                  | j                  | j                  | j
                  ||z
  ¬«      S )zž
        return the arc found between the given values of t on the ellipse.

        :param t0: t start
        :param t1: t end
        :return: arc
        rÄ  )rê  ro  rÂ  r¥  r¨  rÐ   )r„   Út0r–  s      rq   Úarc_tz_RoundShape.arc_t³  sR   € ô Ø�O‰O˜BÓØ�O‰O˜BÓØ× Ñ Ø×ÑØ×ÑØ—]‘]Ø�r‘'ô
ð 	
r†   Nc           	      óÀ   — |€||kD  }t        | j                  |«      | j                  |«      | j                  | j                  | j                  | j
                  |¬«      S )a  
        return the arc found between the given angles on the ellipse.

        :param a0: start angle
        :param a1: end angle
        :param ccw: optional flag to force clockwise or counter-clockwise arc-angles, default is smaller angle
        :return: arc
        )r@   rA   rÐ   ri  )rê  rç  rÂ  r¥  r¨  rÐ   )r„   Úa0r  ri  s       rq   Ú	arc_anglez_RoundShape.arc_angleÅ  s`   € ð ˆ;Ø�r‘'ˆCÜØ×Ñ Ó#Ø×Ñ Ó#Ø× Ñ Ø×ÑØ×ÑØ—]‘]Øô
ð 	
r†   c                 ó>  — | j                   }| j                  }||k(  r| j                  |«      S || j                  z  }t	        |t        |«      z  |«      }t        dz  }d|z  }|t        |«      t        z  cxk\  r|kD  rn n|t        dz  z  }| j                  |«      S rê  )r¥  r¨  ro  rÐ   r   r   r   rû   rë  s          rq   rç  z_RoundShape.point_at_angleÚ  s–   € ð ×ÑˆØ×ÑˆØ�Š6Ø—?‘? 5Ó)Ð)Ø�—‘ÑˆÜ�!”c˜%“j‘. !Ó$ˆÜ˜‘)ˆØ�g‘+ˆØ”c˜%“j¤3Ñ&Ô0¨Õ0Ø”�s‘‰NˆAØ�‰˜qÓ!Ð!r†   c                 óæ   — | j                   r5| j                  j                  «       s| j                  j	                  |«      S t        | j                  | j                  «      }|j	                  |«      S rï  )rú  r;   r/  rÂ  r‹  r1  r>   r?   )r„   rÆ  rë  s      rq   rá  z_RoundShape.angle_at_pointî  sT   € ð �:Š:˜dŸn™n×8Ñ8Ô:Ø×'Ñ'×0Ñ0°Ó3Ð3ä˜4Ÿ7™7 D§G¡GÓ,ˆFØ—?‘? 1Ó%Ð%r†   c                 ó  — | j                  |«      }|| j                  z  }| j                  }| j                  }t	        |t        |«      z  |«      }t        dz  }d|z  }|t        |«      t        z  cxk\  r|kD  rn |S |t        dz  z  }|S rñ  )rá  rÐ   r¥  r¨  r   r   r   rû   rò  s           rq   ræ  z_RoundShape.t_at_pointû  s�   € ð ×#Ñ# AÓ&ˆØ�—‘ÑˆØ×ÑˆØ×ÑˆÜ�!”c˜%“j‘. !Ó$ˆÜ˜‘)ˆØ�g‘+ˆØ”c˜%“j¤3Ñ&Ô0¨Ô0àˆð ”�s‘‰NˆAØˆr†   c                 óR  — | j                   }| j                  }| j                  }| j                  }|j                  }|j
                  }t        |«      }t        |«      }	t        |«      }
t        |«      }|||
z  |z  z   ||z  |	z  z
  }|||
z  |	z  z   ||z  |z  z   }t        ||«      S rô  )	rÐ   r¥  r¨  rÂ  rE   rF   r
   r   r1  )r„   r°   rÐ   r¼   rh  rë  r>   r?   rÁ  rÂ  rŽ  r�  rð   rÈ  s                 rq   ro  z_RoundShape.point_at_t  s²   € ð —=‘=ˆØ×ÑˆØ×ÑˆØ×%Ñ%ˆØ�X‰XˆØ�X‰XˆÜ˜“Mˆ	Ü˜“Mˆ	Ü�A“ˆÜ�A“ˆØ�!�e‘)˜iÑ'Ñ'¨!¨e©)°iÑ*?Ñ?ˆØ�!�e‘)˜iÑ'Ñ'¨!¨e©)°iÑ*?Ñ?ˆÜ�R˜‹}Ðr†   c                 ó2   — | j                  t        |z  «      S )ab  
        find the point that corresponds to given value [0,1].
        Where t=0 is the first point and t=1 is the final point.

        :param position: position value between 0,1 where value equals the amount through the shape
        :param error: error permitted in determining point value (unused for this shape)
        :return: point at t
        )ro  r   )r„   r¤   r>  s      rq   rK  z_RoundShape.point%  s   € ð �‰œs X™~Ó.Ð.r†   c           	      óÌ   — | j                   }| j                  }||kD  r||}}||z
  ||z
  z  ||z   ||z   z  z  }t        dz  ||z   z  dd|z  dt        dd|z  z
  «      z   z  z   z  S )Nr   r¢   r`  é
   ra  )r¥  r¨  r   r   )r„   r¼   rh  r²   s       rq   Ú_ramanujan_lengthz_RoundShape._ramanujan_length0  sƒ   € Ø×ÑˆØ×ÑˆØˆqŠ5Ø�aˆqˆAØ�!‰e˜˜A™Ñ A¨¡E¨a°!©eÑ#4Ñ5ˆÜ�Q‰w˜!˜a™%Ñ  A¨¨Q©°"´t¸AÀÀAÁ¹I³Ñ2FÑ)GÑ$HÑIÐIr†   r{  r�   )rÓ   rÔ   rÕ   r…   r¬  r«  rá  r†  r&  r)  rZ  r¥  r¨  Ú
implicit_rrÂ  r@  r  rÐ  r,  rÐ  rÓ  rÖ  rç  rá  ræ  ro  r,  rK  rÞ  rm   r†   rq   r°  r°  Ò  s¯   „ ò.òòò0(ò	Nò<ò<ð ñ'ó ð'ð ñ'ó ð'ð €Jàñó ðó-*ò^ò<ò$"ò
ò 
ó$
ò*"ò(&òò$ð0 %*ó 	/óJr†   r°  c                   ó"   — e Zd ZdZd„ Zd„ Zd„ Zy)rö  z£
    SVG Ellipse shapes are defined in SVG2 10.4
    https://www.w3.org/TR/SVG2/shapes.html#EllipseElement

    These have geometric properties cx, cy, rx, ry
    c                 ó6   — t        j                  | g|¢­i |¤Ž y r�   ©r°  r…   rû  s      rq   r…   zEllipse.__init__A  ó   € Ü×Ñ˜TÐ3 DÒ3¨FÓ3r†   c                 ó   — t        | «      S r�   )rö  rƒ   s    rq   rú   zEllipse.__copy__D  ó   € Ü�t‹}Ðr†   c                 ó.   — | j                   j                  S r�   rx  rƒ   s    rq   ry  zEllipse._nameG  rz  r†   N©rÓ   rÔ   rÕ   rU  r…   rú   ry  rm   r†   rq   rö  rö  9  s   „ ñò4òó'r†   rö  c                   ó"   — e Zd ZdZd„ Zd„ Zd„ Zy)ÚCirclezœ
    SVG Circle shapes are defined in SVG2 10.3
    https://www.w3.org/TR/SVG2/shapes.html#CircleElement

    These have geometric properties cx, cy, r
    c                 ó6   — t        j                  | g|¢­i |¤Ž y r�   râ  rû  s      rq   r…   zCircle.__init__S  rã  r†   c                 ó   — t        | «      S r�   )ré  rƒ   s    rq   rú   zCircle.__copy__V  s   € Ü�d‹|Ðr†   c                 ó.   — | j                   j                  S r�   rx  rƒ   s    rq   ry  zCircle._nameY  rz  r†   Nrç  rm   r†   rq   ré  ré  K  s   „ ñò4òó'r†   ré  c                   ó”   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zed
„ «       Zed„ «       Zed„ «       Zed„ «       Zdd„Zd„ Zd„ Zy)Ú
SimpleLinezó
    SVG Line shapes are defined in SVG2 10.5
    https://www.w3.org/TR/SVG2/shapes.html#LineElement

    These have geometric properties x1, y1, x2, y2

    These are called Line in SVG but that name is already used for Line(PathSegment)
    c                 ón   — d | _         d | _        d | _        d | _        t	        j
                  | g|¢­i |¤Ž y r�   )rI   rJ   rK   rL   r.  r…   rû  s      rq   r…   zSimpleLine.__init__g  r²  r†   c                 ó¸   — t         j                  | |«       |j                  | _        |j                  | _        |j                  | _        |j
                  | _        y r�   )r.  r¬  rI   rJ   rK   rL   r  s     rq   r¬  zSimpleLine.property_by_objectn  r´  r†   c                 óÀ  — t         j                  | |«       t        |j                  t        d«      «      j                  «       | _        t        |j                  t        d«      «      j                  «       | _        t        |j                  t        d«      «      j                  «       | _
        t        |j                  t        d«      «      j                  «       | _        y r}   )r.  r«  r×   rè  ÚSVG_ATTR_X1rÌ   rI   ÚSVG_ATTR_Y1rJ   ÚSVG_ATTR_X2rK   ÚSVG_ATTR_Y2rL   rÀ  s     rq   r«  zSimpleLine.property_by_valuesu  s’   € Ü× Ñ   vÔ.Ü˜Ÿ™¤K°Ó3Ó4×:Ñ:Ó<ˆŒÜ˜Ÿ™¤K°Ó3Ó4×:Ñ:Ó<ˆŒÜ˜Ÿ™¤K°Ó3Ó4×:Ñ:Ó<ˆŒÜ˜Ÿ™¤K°Ó3Ó4×:Ñ:Ó<ˆ�r†   c                 ón  — t        |«      }|dk\  r!t        |d   «      j                  «       | _        |dk\  r!t        |d   «      j                  «       | _        |dk\  r!t        |d   «      j                  «       | _        |dk\  r!t        |d   «      j                  «       | _         | j                  |dd  Ž  y )Nr¢   r   r   r`  ra  )r¿   r×   rÌ   rI   rJ   rK   rL   ro  rm  s      rq   rá  zSimpleLine.property_by_args|  s�   € Ü˜“Yˆ
Ø˜Š?Ü˜T !™W“o×+Ñ+Ó-ˆDŒGØ˜Š?Ü˜T !™W“o×+Ñ+Ó-ˆDŒGØ˜Š?Ü˜T !™W“o×+Ñ+Ó-ˆDŒGØ˜Š?Ü˜T !™W“o×+Ñ+Ó-ˆDŒGØˆ×Ñ˜$˜q˜r˜(Ò#r†   c                 óÎ  — | j                   �-|j                  t        ›dt        | j                   «      ›�«       | j                  �-|j                  t
        ›dt        | j                  «      ›�«       | j                  �-|j                  t        ›dt        | j                  «      ›�«       | j                  �.|j                  t        ›dt        | j                  «      ›�«       y y r»  )
rI   r³  rò  rÝ   rJ   ró  rK   rô  rL   rõ  rÀ  s     rq   r†  zSimpleLine._attrsˆ  s“   € Ø�7‰7ÐØ�M‰M¦[´#°d·g±g´,Ð?Ô@Ø�7‰7ÐØ�M‰M¦[´#°d·g±g´,Ð?Ô@Ø�7‰7ÐØ�M‰M¦[´#°d·g±g´,Ð?Ô@Ø�7‰7ÐØ�M‰M¦[´#°d·g±g´,Ð?Õ@ð r†   c                 óv   — g }| j                  |«       | j                  |«       dj                  |«      }d|z  S ©Nrê  zSimpleLine(%s)r‰  rº  s      rq   r&  zSimpleLine.__repr__’  s:   € ØˆØ�‰�FÔØ×Ñ˜Ô Ø—‘˜6Ó"ˆØ &Ñ(Ð(r†   c                 óv   — g }| j                  |«       | j                  |«       dj                  |«      }d|z  S rù  r‹  rº  s      rq   r)  zSimpleLine.__str__™  s8   € ØˆØ�‰�FÔØ�‰˜ÔØ—‘˜6Ó"ˆØ &Ñ(Ð(r†   c                 ó   — t        | «      S r�   )rî  rƒ   s    rq   rú   zSimpleLine.__copy__   s   € Ü˜$ÓÐr†   c                 óx   — t        | j                  | j                  «      }|| j                  z  }|j                  S r�   )r1  rI   rJ   r;   rE   r�  s     rq   Úimplicit_x1zSimpleLine.implicit_x1£  ó-   € ä�d—g‘g˜tŸw™wÓ'ˆØ�—‘ÑˆØ�w‰wˆr†   c                 óx   — t        | j                  | j                  «      }|| j                  z  }|j                  S r�   )r1  rI   rJ   r;   rF   r�  s     rq   Úimplicit_y1zSimpleLine.implicit_y1©  rþ  r†   c                 óx   — t        | j                  | j                  «      }|| j                  z  }|j                  S r�   )r1  rK   rL   r;   rE   r�  s     rq   Úimplicit_x2zSimpleLine.implicit_x2¯  rþ  r†   c                 óx   — t        | j                  | j                  «      }|| j                  z  }|j                  S r�   )r1  rK   rL   r;   rF   r�  s     rq   Úimplicit_y2zSimpleLine.implicit_y2µ  rþ  r†   c                 óò   — t        | j                  | j                  «      }t        | j                  | j                  «      }|r|| j
                  z  }|| j
                  z  }t        d|«      t        ||«      fS )zÿ
        SVG path decomposition is given in SVG 2.0 10.5.

        perform an absolute moveto operation to absolute location (x1,y1)
        perform an absolute lineto operation to absolute location (x2,y2)

        :returns Path_d path for line.
        N)r1  rI   rJ   rK   rL   r;   re  r  )r„   r  r¾   r‹   s       rq   r@  zSimpleLine.segments»  sd   € ô �d—g‘g˜tŸw™wÓ'ˆÜ�D—G‘G˜TŸW™WÓ%ˆÙØ�T—^‘^Ñ#ˆEØ�4—>‘>Ñ!ˆCÜ�D˜%Ó ¤$ u¨cÓ"2Ð2Ð2r†   c                 ó®  — t         j                  | «       t        j                  | «       | j                  }t	        | j
                  | j                  «      }||z  }|j                  | _        |j                  | _        t	        | j                  | j                  «      }||z  }|j                  | _	        |j                  | _
        |j                  «        | S )zm
        Realizes the transform to the shape properties.

        SimpleLines are perfectly reified.
        )r  r  rö  r;   r1  rI   rJ   rE   rF   rK   rL   r"  ©r„   rX   rÆ  s      rq   r  zSimpleLine.reifyÌ  s�   € ô 	×Ñ˜DÔ!Ü×Ñ˜DÔ!Ø—‘ˆÜ�$—'‘'˜4Ÿ7™7Ó#ˆØ	ˆV‰ˆØ—#‘#ˆŒØ—#‘#ˆŒä�$—'‘'˜4Ÿ7™7Ó#ˆØ	ˆV‰ˆØ—#‘#ˆŒØ—#‘#ˆŒà�‰ŒØˆr†   c                 óÆ  — t        j                  | fi |¤Ž |j                  d|j                  d«      «      }|j                  d|j                  d«      «      }	 |d= t	        | j
                  t        «      r# | j
                  j                  dd|i|¤Ž| _        t	        | j                  t        «      r# | j                  j                  dd|i|¤Ž| _        t	        | j                  t        «      r# | j                  j                  dd|i|¤Ž| _	        t	        | j                  t        «      r# | j                  j                  dd|i|¤Ž| _
        | S # t        $ r Y �Œw xY wr   )r.  rÐ  rè  r!  rë   rI   r×   rÌ   rJ   rK   rL   r"  s       rq   rÐ  zSimpleLine.renderâ  rÌ  rÍ  Nr{  )rÓ   rÔ   rÕ   rU  r…   r¬  r«  rá  r†  r&  r)  rú   rZ  rý  r   r  r  r@  r  rÐ  rm   r†   rq   rî  rî  ]  s�   „ ñò.òò=ò
$òAò)ò)ò ð ñó ðð
 ñó ðð
 ñó ðð
 ñó ðó
3ò"ó,r†   rî  c                   óZ   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zdd„Zd„ Zd„ Zy)Ú
_PolyshapezHBase form of Polygon and Polyline since the objects are nearly the same.c                 óT   — t        «       | _        t        j                  | g|¢­i |¤Ž y r�   )r(  rC   r.  r…   rû  s      rq   r…   z_Polyshape.__init__ø  s!   € Ü“fˆŒÜ�‰�tÐ-˜dÒ- fÓ-r†   c                 óf   — t         j                  | |«       | j                  |j                  «       y r�   )r.  r¬  Ú_init_pointsrC   r  s     rq   r¬  z_Polyshape.property_by_objectü  s$   € Ü× Ñ   qÔ)Ø×Ñ˜!Ÿ(™(Õ#r†   c                 óR   — t         j                  | |«       | j                  |«       y r�   )r.  r«  r  rÀ  s     rq   r«  z_Polyshape.property_by_values   s    € Ü× Ñ   vÔ.Ø×Ñ˜&Õ!r†   c                 ó&   — | j                  |«       y r�   )r  rä  s     rq   rá  z_Polyshape.property_by_args  s   € Ø×Ñ˜$Õr†   c           
      ó°  — t        | j                  «      dk7  ry |€t        «       | _        y t        |t        «      r"t
        |v r
|t
           }nt        «       | _        y 	 t        |«      dk(  r#t        |d   t        t        t        f«      r|d   }t        |t        «      rLt        j                  |«      }|D ��cg c]#  \  }}t        t        |«      t        |«      «      ‘Œ% c}}| _        y t        |t        t        f«      r°t        |«      dk(  rt        «       | _        y |d   }t        |t        t        f«      r2t        t        t        t        t!        |«      gdz  Ž «      «      | _        y t        |t        t        t"        t        t        f«      rt        t        t        |«      «      | _        y y t        «       | _        y # t        $ r Y �Œ>w xY wc c}}w r  )r¿   rC   r(  rë   rª  ÚSVG_ATTR_POINTSr'  rÝ   rT  r3  rß   r1  r•   rš   rõ  rf  Úiterr^  )r„   rC   rß   r  r€  r9  s         rq   r  z_Polyshape._init_points  sq  € Üˆt�{‰{Ó˜qÒ ØØˆ>Ü›&ˆDŒKØÜ�fœdÔ#Ü &Ñ(Ø¤Ñ0‘ä"›f�”Øð	Ü�6‹{˜aÒ¤J¨v°a©y¼4ÄÌÐ:LÔ$MØ ™�ô �fœcÔ"Ü&×.Ñ.¨vÓ6ˆGÙAHÔIÁ¹¸¸Aœ5¤ q£¬5°«8Õ4ÀÒIˆD�KÜ˜¤¤u Ô.Ü�6‹{˜aÒÜ"›f�•à$ Q™i�Ü˜k¬E´3¨<Ô8Ü"&¤s¬5´#¼¸V»°~ÈÑ7IÐ2JÓ'KÓ"L�D•KÜ ¬d´E¼7ÄCÌÐ-OÔPÜ"&¤s¬5°&Ó'9Ó":�D•Kð Qô ›&ˆD�Køô ò 	Úð	üó Js   Á1G Â:(GÇ	GÇGc                 ó"  — g }| j                   �Ddj                  t        t        | j                   «      «      }|j	                  t
        ›d|›d�«       | j                  |«       dj                  |«      }| j                  j                  ›d|›d�S ©Nr�  r²  rR  rê  rg   rh   )	rC   r¹  rõ  rÝ   r³  r  rt  rs  rÓ   ©r„   r¼  rº   r
  s       rq   r&  z_Polyshape.__repr__'  sl   € ØˆØ�;‰;Ð"Ø—‘œœS $§+¡+Ó.Ó/ˆAØ�M‰M¦ºÐ:Ô;Ø×Ñ˜Ô Ø—‘˜6Ó"ˆØŸ>™>×2Ó2²FÐ;Ð;r†   c                 ó"  — g }| j                   �Ddj                  t        t        | j                   «      «      }|j	                  t
        ›d|›d�«       | j                  |«       dj                  |«      }| j                  j                  ›d|›d�S r  )	rC   r¹  rõ  rÝ   r³  r  rv  rs  rÓ   r  s       rq   r)  z_Polyshape.__str__0  sj   € ØˆØ�;‰;Ð"Ø—‘œœS $§+¡+Ó.Ó/ˆAØ�M‰M¦ºÐ:Ô;Ø�‰˜ÔØ—‘˜6Ó"ˆØŸ>™>×2Ó2²FÐ;Ð;r†   c                 ó,   — t        | j                  «      S r�   ©r¿   rC   rƒ   s    rq   rH  z_Polyshape.__len__9  s   € Ü�4—;‘;ÓÐr†   c                 ó    — | j                   |   S r�   )rC   rL  s     rq   rN  z_Polyshape.__getitem__<  s   € Ø�{‰{˜4Ñ Ð r†   c                 óà  — | j                   j                  «       s|s| j                  }n3t        t	        | j                   j
                  | j                  «      «      }| j                  «       rg S t        d|d   «      g}|d   }t        dt        |«      «      D ]$  }||   }|j                  t        ||«      «       |}Œ& t        | t        «      r|j                  t        ||d   «      «       |S )aû  
        Polyline and Polygon decomposition is given in SVG2. 10.6 and 10.7

        * perform an absolute moveto operation to the first coordinate pair in the list of points
        * for each subsequent coordinate pair, perform an absolute lineto operation to that coordinate pair.
        * (Polygon-only) perform a closepath command

        Note:  For a polygon/polyline made from n points, the resulting path will
        be composed of n lines (even if some of these lines have length zero).
        Nr   r¢   )r;   r/  rC   r(  rõ  r]  r,  re  rÉ  r¿   r³  r  rë   ÚPolygonrd  )r„   r  rC   r@  ÚlastrÊ  rf  s          rq   r@  z_Polyshape.segments?  sÉ   € ð �>‰>×%Ñ%Ô'©{Ø—[‘[‰Fäœ#˜dŸn™n×BÑBÀDÇKÁKÓPÓQˆFØ×ÑÔØˆIÜ˜˜v a™yÓ)Ð*ˆØ�a‰yˆÜ�qœ#˜f›+Ö&ˆAØ˜Q‘iˆGØ�O‰OœD  wÓ/Ô0Ø‰Dð 'ô �dœGÔ$Ø�O‰OœE $¨¨q©	Ó2Ô3Øˆr†   c                 óª   — t         j                  | «       t        j                  | «       | j                  }| D ]  }||z  }Œ	 |j	                  «        | S )zl
        Realizes the transform to the shape properties.

        Polyshapes are perfectly reified.
        )r  r  rö  r;   r"  r  s      rq   r  z_Polyshape.reifyZ  sJ   € ô 	×Ñ˜DÔ!Ü×Ñ˜DÔ!Ø—‘ˆÛˆAØ�‰K‰Að à�‰ŒØˆr†   c                 ó2   — t        | j                  «      dk(  S r}   r  rƒ   s    rq   r,  z_Polyshape.is_degenerateh  s   € Ü�4—;‘;Ó 1Ñ$Ð$r†   Nr{  )rÓ   rÔ   rÕ   rU  r…   r¬  r«  rá  r  r&  r)  rH  rN  r@  r  r,  rm   r†   rq   r
  r
  õ  sB   „ ÙRò.ò$ò"ò ò!ò@<ò<ò ò!óò6ó%r†   r
  c                   ó"   — e Zd ZdZd„ Zd„ Zd„ Zy)ÚPolylinez�
    SVG Polyline shapes are defined in SVG2 10.6
    https://www.w3.org/TR/SVG2/shapes.html#PolylineElement

    These have geometric properties points
    c                 ó6   — t        j                  | g|¢­i |¤Ž y r�   ©r
  r…   rû  s      rq   r…   zPolyline.__init__t  ó   € Ü×Ñ˜DÐ2 4Ò2¨6Ó2r†   c                 ó   — t        | «      S r�   )r   rƒ   s    rq   rú   zPolyline.__copy__w  rô  r†   c                 ó.   — | j                   j                  S r�   rx  rƒ   s    rq   ry  zPolyline._namez  rz  r†   Nrç  rm   r†   rq   r   r   l  s   „ ñò3òó'r†   r   c                   ó"   — e Zd ZdZd„ Zd„ Zd„ Zy)r  z›
    SVG Polygon shapes are defined in SVG2 10.7
    https://www.w3.org/TR/SVG2/shapes.html#PolygonElement

    These have geometric properties points
    c                 ó6   — t        j                  | g|¢­i |¤Ž y r�   r"  rû  s      rq   r…   zPolygon.__init__†  r#  r†   c                 ó   — t        | «      S r�   )r  rƒ   s    rq   rú   zPolygon.__copy__‰  rå  r†   c                 ó.   — | j                   j                  S r�   rx  rƒ   s    rq   ry  zPolygon._nameŒ  rz  r†   Nrç  rm   r†   rq   r  r  ~  s   „ ñò3òó'r†   r  c                   ó¤   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ ZeZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zdd„Zd„ Zd„ Zdd„Zdd„Zd„ Zd„ Zy)r  a?  
    Subpath is a Path-backed window implementation. It does not store a list of segments but rather
    stores a Path, start position, end position. When a function is called on a subpath, the result of
    those events is performed on the backing Path. When the backing Path is modified the behavior is
    undefined.c                 ó.   — || _         || _        || _        y r�   )r  Ú_startÚ_end)r„   r!   r¾   r‹   s       rq   r…   zSubpath.__init__—  s   € ØˆŒ
ØˆŒØˆ�	r†   c                 ój   — t        t        | j                  «      | j                  | j                  «      S r�   )r  r5  r  r,  r-  rƒ   s    rq   rú   zSubpath.__copy__œ  s"   € Ü”t˜DŸJ™JÓ'¨¯©°d·i±iÓ@Ð@r†   c                 ó>   — | j                   | j                  |«         S r�   ©r  Úindex_to_path_indexr  s     rq   rN  zSubpath.__getitem__Ÿ  s   € Ø�z‰z˜$×2Ñ2°5Ó9Ñ:Ð:r†   c                 ó@   — || j                   | j                  |«      <   y r�   r0  rX  s      rq   rR  zSubpath.__setitem__¢  s   € Ø6;ˆ�
‰
�4×+Ñ+¨EÓ2Ò3r†   c                 óf   — | j                   | j                  |«      = | xj                  dz  c_        y r<  )r  r1  r-  r  s     rq   r  zSubpath.__delitem__¥  s&   € Ø�J‰J�t×/Ñ/°Ó6Ð7Ø�	Š	�Q‰Ž	r†   c                 ó~  — t        |t        «      r0t        |«      }|| j                  | j                  | j                   | S t        |t        «      r0t        |«      }|| j                  | j                  | j                   | S t        |t        «      r(| j                  j                  | j                  |«       | S t        S r�   )	rë   rÝ   r5  r  r-  r   r~  r"  rD  )r„   rí   rÆ  s      rq   rø   zSubpath.__iadd__©  s›   € Ü�eœSÔ!Ü�U“ˆAØ01ˆD�J‰J�t—y‘y 4§9¡9Ð-ð ˆô ˜œtÔ$Ü�U“ˆAØ01ˆD�J‰J�t—y‘y 4§9¡9Ð-ð
 ˆô	 ˜œ{Ô+Ø�J‰J×Ñ˜dŸi™i¨Ô/ð ˆô "Ð!r†   c                 óh   — t        |t        t        t        f«      rt	        | «      }||z  }|S t
        S r�   )rë   rÝ   r5  r~  r   rD  r  s      rq   r  zSubpath.__add__¶  s0   € Ü�eœc¤4¬Ð5Ô6Ü�T“
ˆAØ�‰JˆAØˆHÜÐr†   c                 óø   — t        |t        «      r6t        |«      }|j                  t	        t
        | j                  «      «       |S t        |t        «      rt        | «      }|j                  d|«       |S t        S r}   )
rë   rÝ   r5  r  rõ  r   r  r~  r"  rD  r„  s      rq   rX  zSubpath.__radd__½  s]   € Ü�eœSÔ!Ü˜“;ˆDØ�K‰KœœD $§*¡*Ó-Ô.ØˆKÜ˜œ{Ô+Ü˜“:ˆDØ�K‰K˜˜5Ô!ØˆKä!Ð!r†   c                 ót   — t        |t        «      rt        |«      }t        |t        «      r| D ]  }||z  }Œ	 | S r�   )rë   rÝ   r\  ©r„   rí   rÎ  s      rq   rî   zSubpath.__imul__É  s7   € Ü�eœSÔ!Ü˜5“MˆEÜ�eœVÔ$Û�Ø�U‘
‘ð àˆr†   c                 ó^   — t        |t        t        f«      rt        | «      }||z  }|S t        S r�   r   r  s      rq   r  zSubpath.__mul__Ñ  r  r†   c                 ó&   —  G d„ d«      } || «      S )Nc                   ó   — e Zd Zd„ Zd„ ZeZy)ú"Subpath.__iter__.<locals>.Iteratorc                 ó:   — |j                   dz
  | _        || _        y r<  )r,  rÅ  ra  )r„   ra  s     rq   r…   z+Subpath.__iter__.<locals>.Iterator.__init__Ü  s   € Ø Ÿ™¨!Ñ+�”Ø&�•r†   c                 óì   — | xj                   dz  c_         	 | j                   | j                  j                  kD  rt        ‚| j                  j                  | j                      S # t
        $ r t        ‚w xY wr<  )rÅ  ra  r-  r‰  r  r5  rƒ   s    rq   rŠ  z+Subpath.__iter__.<locals>.Iterator.__next__à  s^   € Ø—’˜!‘•ð(Ø—v‘v §¡× 1Ñ 1Ò1Ü+Ð+ØŸ<™<×-Ñ-¨d¯f©fÑ5Ð5øÜ!ò (Ü'Ð'ð(ús   —AA# Á#A3N)rÓ   rÔ   rÕ   r…   rŠ  rÐ  rm   r†   rq   ÚIteratorr<  Û  s   „ ò'ò(ð ‰Dr†   r?  rm   )r„   r?  s     rq   r‡  zSubpath.__iter__Ú  s   € ÷	ñ 	ñ  ˜‹~Ðr†   c                 ó:   — | j                   | j                  z
  dz   S r<  ©r-  r,  rƒ   s    rq   rH  zSubpath.__len__í  s   € Ø�y‰y˜4Ÿ;™;Ñ&¨Ñ*Ð*r†   c                 ó"   — | j                  «       S r�   r%  rƒ   s    rq   r)  zSubpath.__str__ð  r&  r†   c                 ó8   — ddj                  d„ | D «       «      z  S )NzPath(%s)rê  c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr�   r)  r*  s     rq   rr   z#Subpath.__repr__.<locals>.<genexpr>ô  s   è ø€ Ð&=¹°1¤t¨A§w¹ùr+  ©r¹  rƒ   s    rq   r&  zSubpath.__repr__ó  s   € Ø˜TŸY™YÑ&=¹Ó&=Ó=Ñ>Ð>r†   c                 óö   — t        |t        «      r| j                  t        |«      «      S t        |t        t        f«      st
        S t        | «      t        |«      k7  ryt        | |«      D ]  \  }}||k(  rŒ y yr-  )rë   rÝ   r  r5  r  rD  r¿   rf  r.  s       rq   r  zSubpath.__eq__ö  sj   € Ü�eœSÔ!Ø—;‘;œt E›{Ó+Ð+Ü˜%¤$¬ Ô1Ü!Ð!Üˆt‹9œ˜E›
Ò"ØÜ˜˜eÖ$‰DˆAˆqØ˜“6Ùð %ð r†   c                 óP   — t        |t        t        t        f«      st        S | |k(   S r�   )rë   r5  r  rÝ   rD  rì   s     rq   r  zSubpath.__ne__  s&   € Ü˜%¤$¬´Ð!5Ô6Ü!Ð!Ø˜5‘=Ð Ð r†   c                 óö   — | j                   }|rA|j                  | j                  | j                  dz    D �cg c]  }||j                  z  ‘Œ c}S |j                  | j                  | j                  dz    S c c}w r<  )r  r  r,  r-  r;   )r„   r  r!   rº   s       rq   r@  zSubpath.segments  sp   € Ø�z‰zˆÙà,0¯N©N¸4¿;¹;ÈÏÉÐUVÉÑ,WóÙ,W q��D—N‘NÓ"Ð,Wñð ð �~‰~˜dŸk™k¨D¯I©I¸©MÐ:Ð:ùòs   ·A6c                 óN   — |dk  r| j                   |z   dz   S | j                  |z   S r¡   rA  r  s     rq   Ú_numeric_indexzSubpath._numeric_index  s,   € Ø�1Š9Ø—9‘9˜uÑ$ qÑ(Ð(à—;‘; Ñ&Ð&r†   c                 ó  — t        |t        «      rd|j                  }|j                  }|j                  }|€d}| j                  |«      }|€t        | «      }| j                  |«      }t        |||«      S | j                  |«      S r}   )rë   rÊ  r¾   ÚstopÚsteprJ  r¿   )r„   rÍ  r¾   rL  rM  s        rq   r1  zSubpath.index_to_path_index  s   € Ü�eœUÔ#Ø—K‘KˆEØ—:‘:ˆDØ—:‘:ˆDØˆ}Ø�Ø×'Ñ'¨Ó.ˆEØˆ|Ü˜4“y�Ø×&Ñ& tÓ,ˆDÜ˜  dÓ+Ð+Ø×"Ñ" 5Ó)Ð)r†   c                 óª  — |rt        | «      j                  ||¬«      S | j                  j                  | j                  | j
                  dz    }|D �cg c]'  }t        t        t        «      rŒ|j                  «       ‘Œ) }}	 t        t        |Ž «      \  }}}}	|ro| j                  j                  �Y| j                  j                  �C| j                  j                  j                  �#t        | j                  j                  «      dz  }
nd}
t!        |«      |
z
  t!        |«      |
z
  t#        |«      |
z   t#        |	«      |
z   fS c c}w # t        $ r Y yw xY w)z&returns a bounding box for the subpath©r  r  r¢   Nrˆ  rÙ   )r5  r  r  r  r,  r-  rë   rd  re  r(  rf  rž   r  r:   rÌ   r•   rK  rL  )r„   r  r  r@  rU  rg  rh  ri  rj  rk  rÿ  s              rq   r  zSubpath.bbox#  s*  € áÜ˜“:—?‘?¨{È�?ÓTÐTà—:‘:×'Ñ'¨¯©°d·i±iÀ!±mÐDˆÙ%-ÓM¡X˜c´ZÄÄtÕ5Lˆs�x‰x�z XˆÐMð	Ü)-¬c°3¨i«Ñ&ˆE�5˜% ñ
 Ø—
‘
×'Ñ'Ð3Ø—Z‘Z×&Ñ&Ð.°$·*±*×2CÑ2C×2IÑ2IÐ2Qä˜$Ÿ*™*×1Ñ1Ó2°SÑ8‰EàˆEô �‹J˜ÑÜ�‹J˜ÑÜ�‹J˜ÑÜ�‹J˜Ñð	
ð 	
ùò Nøô ò 	Ùð	ús   ÁEÁ-EÂE Å	EÅENc                 ó’   — | j                   j                  | j                  | j                  dz    }t        j                  |||¬«      S )Nr¢   r  )r  r  r,  r-  r5  ro  )r„   r«   r€  r@  s       rq   r6   z	Subpath.d?  s9   € Ø—:‘:×'Ñ'¨¯©°d·i±iÀ!±mÐDˆÜ�z‰z˜(¨X¸fˆzÓEÐEr†   c                 óÈ  — | j                   j                  }| j                  |«      }| j                  |«      }||k  rH||   }||   }|j                  «        ||ur|j                  «        |||<   |||<   |dz  }|dz  }||k  rŒH| j                  |«      }| j                  |«      }| j                   j	                  |dz
  d¬«       | j                   j	                  |«       y)zAReverses segments between the given indexes in the subpath space.r¢   T)r  N)r  r  r1  rž  r  )r„   r¾   r‹   r@  rº   rÎ  Ústart_segmentÚend_segments           rq   Ú_reverse_segmentszSubpath._reverse_segmentsC  sæ   € à—:‘:×'Ñ'ˆØ×$Ñ$ UÓ+ˆØ×$Ñ$ SÓ)ˆØ�1ŠfØ$ Q™KˆMØ" 1™+ˆKØ×!Ñ!Ô#Ø KÑ/Ø×#Ñ#Ô%Ø)�˜‘Ø+�˜‘Ø�‰FˆAØ�‰FˆAð �1‹fð ×(Ñ(¨Ó/ˆØ×&Ñ& sÓ+ˆØ�
‰
×'Ñ'¨°©	ÀÐ'ÔFØ�
‰
×'Ñ'¨Õ,r†   c                 óX  — t        | «      }|dk(  ry d}|dz
  }t        | d   t        «      r|dz  }t        | d   t        «      r|dz  }| j	                  ||«       |dkD  r3t        | d   t        «      r t        | d   j                  «      | d   _        | d   }t        |t        «      r‚|j                  «        |j                  | d   j                  k7  rt        | d   j                  «      |_        |j                  | d   j                  k7  rt        | d   j                  «      |_        | S )Nr   r¢   r¶  éþÿÿÿ)	r¿   rë   rd  re  rT  r1  r¾   r‹   rž  )r„   rº  r¾   r‹   r  s        rq   rž  zSubpath.reverseW  s  € Ü�4‹yˆØ�1Š9ØØˆØ�Q‰hˆÜ�d˜2‘h¤Ô&Ø�1‰HˆCÜØ�‰G”Tô
ð �Q‰JˆEØ×Ñ˜u cÔ*Ø�!Š8Ü˜$˜q™'¤4Ô(Ü# D¨¡G§M¡MÓ2��Q‘”Ø�B‰xˆÜ�dœEÔ"Ø�L‰LŒNØ�z‰z˜T "™XŸ\™\Ò)Ü" 4¨¡8§<¡<Ó0�”
Ø�x‰x˜4 ™7Ÿ;™;Ò&Ü   a¡§¡Ó-�”Øˆr†   r{  r  rñ  )rÓ   rÔ   rÕ   rU  r…   rú   rN  rR  r  rø   r  rX  rî   r  rY  r‡  rH  r)  r&  r  r  r@  rJ  r1  r  r6   rT  rž  rm   r†   rq   r  r  �  sƒ   „ ñòò
Aò;ò<òòòò
"òòð €Hòò&+òò?ò
ò!ó
;ò'ò*ó
ó8Fò-ó(r†   r  c                   ó\   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	dd	„Z
d
„ Zedd„«       Zdd„Zy)ÚGroupzu
    Group Container element can have children.
    SVG 2.0 <g> are defined in:
    5.2. Grouping: the g element
    c                 ó(  — t        j                  | g|¢­i |¤Ž t        j                  | «       t        |«      dk\  r=|d   }t	        |t
        «      r(| j                  t        t        t        |«      «      «       t        j                  | g|¢­i |¤Ž y ra  )
rö  r…   r(  r¿   rë   rX  r  rõ  r   rÞ  râ  s       rq   r…   zGroup.__init__x  ss   € Ü×Ñ˜tÐ5 dÒ5¨fÒ5Ü�‰�dÔÜˆt‹9˜Š>Ø�Q‘ˆAÜ˜!œUÔ#Ø—‘œD¤¤T¨1£Ó.Ô/Ü×Ñ˜DÐ2 4Ò2¨6Ó2r†   c                 óž   — t        |t        «      rt        |«      }t        |t        «      r!| xj                  |z  c_        | D ]  }||z  }Œ	 | S r�   r  r8  s      rq   rî   zGroup.__imul__�  sE   € Ü�eœSÔ!Ü˜5“MˆEÜ�eœVÔ$Ø�NŠN˜eÑ#�NÛ�Ø�U‘
‘ð àˆr†   c                 ó0   — t        j                  | fi |¤Ž y r�   )rö  rÐ  rë  s     rq   rÐ  zGroup.renderŠ  s   € Ü×Ñ˜TÑ, VÓ,r†   c                 ó   — t        | «      S r�   )rX  rƒ   s    rq   rú   zGroup.__copy__�  r«  r†   c                 ó\   — t         j                  | |«       t        j                  | |«       y r�   )rö  r¬  rÞ  r  s     rq   r¬  zGroup.property_by_object�  s"   € Ü×(Ñ(¨¨qÔ1Ü×%Ñ% d¨AÕ.r†   c                 ó\   — t         j                  | |«       t        j                  | |«       y r�   )rö  r«  rÞ  rÀ  s     rq   r«  zGroup.property_by_values”  s"   € Ü×(Ñ(¨¨vÔ6Ü×%Ñ% d¨FÕ3r†   Nc              #   ó  K  — |€=| D ]7  }|–— t        |t        t        f«      sŒ|j                  |«      D ]  }|–— Œ Œ9 y| D ]?  } ||«      r|–— t        |t        t        f«      sŒ&|j                  |«      D ]  }|–— Œ ŒA y­w©zÓ
        Finds all flattened subobjects of this group for which the conditional returns
        true.

        :param conditional: function taking element and returns True to include or False if exclude
        N©rë   rX  ÚUseÚselect©r„   ÚconditionalÚsubitemrº   s       rq   rc  zGroup.select˜  ó‚   è ø€ ð ÐÛ�Ø’Ü˜g¬¬s |Õ4Ø$Ÿ^™^¨KÖ8˜Ø›ñ 9ñ  ó  �Ù˜wÔ'Ø!’MÜ˜g¬¬s |Õ4Ø$Ÿ^™^¨KÖ8˜Ø›ñ 9ñ	  ùó   ‚"B¥ABÁ*Bc                 ó.   — t         j                  | «       y r�   )rö  r  rƒ   s    rq   r  zGroup.reify­  s   € Ü×Ñ˜DÕ!r†   c                 ó4  — g }| D ]L  }t        |d«      rt        |t        t        f«      rŒ&|j	                  ||¬«      }|€Œ<|j                  |«       ŒN t        |«      dk(  ryt        |Ž \  }}}}	t        |«      t        |«      t        |«      t        |	«      fS ©ad  
        Returns the union of the bounding boxes for the elements within the iterator.

        :param transformed: Should the children of this object be properly transformed.
        :param with_stroke: should the stroke-width be included in the bounds of the elements
        :return: union of all bounding boxes of elements within the iterable.
        r  rO  Nr   ©
r'  rë   rX  rb  r  r³  r¿   rf  rK  rL  ©
Úelementsr  r  ÚboxesrÎ  Úboxrh  ri  rj  rk  s
             rq   Ú
union_bboxzGroup.union_bbox°  ó”   € ð ˆÛˆAÜ˜1˜fÔ%¬°A¼¼s°|Ô)DØØ—&‘& [¸k�&ÓJˆCØˆ{ØØ�L‰L˜Õð ô ˆu‹:˜Š?ØÜ'*¨E {Ñ$ˆ��u˜eÜ�5‹zœ3˜u›:¤s¨5£z´3°u³:Ð=Ð=r†   c                 óN   — t         j                  | j                  «       ||¬«      S ©að  
        Returns the bounding box of the given object.

        In the case of groups this is the union of all the bounding boxes of all bound children.

        Setting transformed to false, may yield unexpected results if subitems are transformed in non-uniform
        ways.

        :param transformed: bounding box of the properly transformed children.
        :param with_stroke: should the stroke-width be included in the bounds.
        :return: bounding box of the given element
        rO  )rX  rq  rc  r  s      rq   r  z
Group.bboxÆ  s+   € ô ×ÑØ�K‰K‹MØ#Ø#ð  ó 
ð 	
r†   r�   r  )rÓ   rÔ   rÕ   rU  r…   rî   rÐ  rú   r¬  r«  rc  r  r\  rq  r  rm   r†   rq   rX  rX  q  sH   „ ñò3òò-òò/ò4ó ò*"ð ò>ó ð>ô*
r†   rX  c                   óJ   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd
d„Ze	dd„«       Z
dd	„Zy)rb  z²
    Use elements are defined in svg 5.6
    https://www.w3.org/TR/SVG11/struct.html#UseElement

    Use is a generic container object group-like that use reference objects,
    c                 óÊ   — t         j                  | «       d | _        d | _        d | _        d | _        t        j                  | g|¢­i |¤Ž t        j                  | g|¢­i |¤Ž y r�   )r(  r…   rE   rF   r   r   rö  rÞ  rû  s      rq   r…   zUse.__init__â  sc   € Ü�‰�dÔØˆŒØˆŒØˆŒ
ØˆŒÜ×Ñ˜tÐ5 dÒ5¨fÒ5Ü×ÑØð	
Øò	
Ø!ó	
r†   c                 óä   — t         j                  | |«       t        j                  | |«       |j                  | _        |j                  | _        |j
                  | _        |j                  | _        y r�   )rÞ  r¬  rö  rE   rF   r   r   r  s     rq   r¬  zUse.property_by_objectí  sN   € Ü×%Ñ% d¨AÔ.Ü×(Ñ(¨¨qÔ1Ø—‘ˆŒØ—‘ˆŒØ—W‘WˆŒ
Ø—h‘hˆ�r†   c                 óê  — t        |j                  t        d«      «      j                  «       | _        t        |j                  t
        d«      «      j                  «       | _        t        |j                  t        d«      «      j                  «       | _        t        |j                  t        d«      «      j                  «       | _
        | j                  dk7  s| j                  dk7  r.	 |t           ›d| j                  ›d| j                  ›d�|t        <   t        j                  | |«       t        j                  | |«       y # t        $ r' d| j                  ›d| j                  ›d�|t        <   Y Œ\w xY w)Nr   r¢   z translate(rê  rh   rÏ  )r×   rè  r´  rÌ   rE   rµ  rF   r¶  r   r·  r   rþ  r!  rÞ  r«  rö  rÀ  s     rq   r«  zUse.property_by_valuesõ  s  € Ü˜Ÿ
™
¤:¨qÓ1Ó2×8Ñ8Ó:ˆŒÜ˜Ÿ
™
¤:¨qÓ1Ó2×8Ñ8Ó:ˆŒÜ˜FŸJ™J¤~°qÓ9Ó:×@Ñ@ÓBˆŒ
Ü˜VŸZ™Z¬¸Ó;Ó<×BÑBÓDˆŒØ�6‰6�QŠ;˜$Ÿ&™& Aš+ð
àÔ-Ó.Ø—F“FØ—F“Fð.�Ô)Ñ*ô 	×%Ñ% d¨FÔ3Ü×(Ñ(¨¨vÕ6øô ó à—F“FØ—F“Fð.�Ô)Ó*ðús   Ã(-E Å-E2Å1E2c                 ó\   — t        j                  | fi |¤Ž t        j                  | fi |¤Ž y r�   )rÞ  rÐ  rö  rë  s     rq   rÐ  z
Use.render
  s(   € Ü×Ñ˜$Ñ) &Ò)Ü×Ñ˜TÑ, VÓ,r†   Nc              #   ó  K  — |€=| D ]7  }|–— t        |t        t        f«      sŒ|j                  |«      D ]  }|–— Œ Œ9 y| D ]?  } ||«      r|–— t        |t        t        f«      sŒ&|j                  |«      D ]  }|–— Œ ŒA y­wr`  ra  rd  s       rq   rc  z
Use.select  rg  rh  c                 ó4  — g }| D ]L  }t        |d«      rt        |t        t        f«      rŒ&|j	                  ||¬«      }|€Œ<|j                  |«       ŒN t        |«      dk(  ryt        |Ž \  }}}}	t        |«      t        |«      t        |«      t        |	«      fS rk  rl  rm  s
             rq   rq  zUse.union_bbox#  rr  r†   c                 óN   — t         j                  | j                  «       ||¬«      S rt  )rb  rq  rc  r  s      rq   r  zUse.bbox9  s)   € ô �~‰~Ø�K‰K‹MØ#Ø#ð ó 
ð 	
r†   r�   r  )rÓ   rÔ   rÕ   rU  r…   r¬  r«  rÐ  rc  r\  rq  r  rm   r†   rq   rb  rb  Ú  s9   „ ñò	
òò7ò*-ó ð* ò>ó ð>ô*
r†   rb  c                   ó"   — e Zd ZdZd„ Zd„ Zd„ Zy)ÚClipPatha,  
    clipPath elements are defined in svg 14.3.5
    https://www.w3.org/TR/SVG11/masking.html#ClipPathElement

    Clip paths conceptually define a 1 bit mask for images these are usually defined within
    def blocks and do not render themselves but rather are attached by IRI references to the
    c                 óv   — t         j                  | «       t        | _        t	        j                  | g|¢­i |¤Ž y r�   )r(  r…   ÚSVG_UNIT_TYPE_USERSPACEONUSEÚ	unit_typerÞ  rû  s      rq   r…   zClipPath.__init__V  s-   € Ü�‰�dÔÜ5ˆŒÜ×Ñ˜DÐ2 4Ò2¨6Ó2r†   c                 óR   — t         j                  | |«       |j                  | _        y r�   )rÞ  r¬  r�  r  s     rq   r¬  zClipPath.property_by_object[  s   € Ü×%Ñ% d¨AÔ.ØŸ™ˆ�r†   c                 ó‚   — t         j                  | |«       | j                  j                  t        t
        «      | _        y r�   )rÞ  r«  r¼  rè  ÚSVG_ATTR_CLIP_UNIT_TYPEr€  r�  rÀ  s     rq   r«  zClipPath.property_by_values_  s,   € Ü×%Ñ% d¨FÔ3ØŸ™Ÿ™Ü#Ô%Aó
ˆ�r†   N)rÓ   rÔ   rÕ   rU  r…   r¬  r«  rm   r†   rq   r~  r~  M  s   „ ñò3ò
%ó
r†   r~  c                   ó:   — e Zd Zd„ Zd„ Zed„ «       Zd„ Zd„ Zd„ Z	y)ÚPatternc                 óÂ   — d | _         d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _	        t        j                  | g|¢­i |¤Ž y r�   )r;  r©  rE   rF   r   r   r   Úpattern_content_unitsÚpattern_transformÚpattern_unitsrÞ  r…   rû  s      rq   r…   zPattern.__init__g  sd   € ØˆŒØ%)ˆÔ"ØˆŒØˆŒØˆŒ
ØˆŒØˆŒ	Ø%)ˆÔ"Ø!%ˆÔØ!ˆÔÜ×Ñ˜DÐ2 4Ò2¨6Ó2r†   c                  ó   — yr}   rm   rƒ   s    rq   rt  zPattern.__int__t  rI  r†   c                 óR   — | j                   €y| j                   j                  | «      S ©NrÚ   ©r;  r;   rƒ   s    rq   r    zPattern.viewbox_transformw  ó$   € à�<‰<ÐØØ�|‰|×%Ñ% dÓ+Ð+r†   c                 ó²  — t         j                  | |«       |j                  | _        |j                  | _        |j                  | _        |j
                  | _        |j                  | _        |j                  | _        |j                  | _        |j                  | _
        |j                  �t        |j                  «      nd | _        |j                  | _        y r�   )rÞ  r¬  r;  r©  rE   rF   r   r   r   Úpattern_contents_unitsrˆ  r‰  r\  rŠ  r  s     rq   r¬  zPattern.property_by_object}  s¢   € Ü×%Ñ% d¨AÔ.Ø—y‘yˆŒØ%&×%<Ñ%<ˆÔ"à—‘ˆŒØ—‘ˆŒØ—W‘WˆŒ
Ø—h‘hˆŒØ—F‘FˆŒ	Ø%&×%=Ñ%=ˆÔ"à+,×+>Ñ+>Ð+JŒF�1×&Ñ&Ô'ÐPTð 	Ôð Ÿ_™_ˆÕr†   c                 ó,  — t         j                  | |«       t        |v r|t           | _        nt        |v r|t           | _        |j                  t        «      }|�t        |«      | _        t        |v r|t           | _
        t        |j                  t        d«      «      j                  «       | _        t        |j                  t        d«      «      j                  «       | _        t        |j                  t"        d«      «      j                  «       | _        t        |j                  t&        d«      «      j                  «       | _        t*        |v r|t*           | _        t.        |v rt1        |t.           «      | _        t4        |v r|t4           | _        y y ©Nr   ú100%)rÞ  r«  Ú
XLINK_HREFr   ÚSVG_HREFrè  r¿  rJ  r;  r¸  r©  r×   r´  rÌ   rE   rµ  rF   r¶  r   r·  r   ÚSVG_ATTR_PATTERN_CONTENT_UNITSrˆ  ÚSVG_ATTR_PATTERN_TRANSFORMr\  r‰  ÚSVG_ATTR_PATTERN_UNITSrŠ  ©r„   r¼  r;  s      rq   r«  zPattern.property_by_values�  s=  € Ü×%Ñ% d¨FÔ3Ü˜ÑØœzÑ*ˆD�IÜ˜ÑØœxÑ(ˆDŒIØ—*‘*Ô-Ó.ˆØÐÜ" 7Ó+ˆDŒLÜ'¨6Ñ1Ø)/Ô0LÑ)MˆDÔ&Ü˜Ÿ
™
¤:¨qÓ1Ó2×8Ñ8Ó:ˆŒÜ˜Ÿ
™
¤:¨qÓ1Ó2×8Ñ8Ó:ˆŒÜ˜FŸJ™J¤~°vÓ>Ó?×EÑEÓGˆŒ
Ü˜VŸZ™Z¬¸Ó@ÓA×GÑGÓIˆŒÜ)¨VÑ3Ø)/Ô0NÑ)OˆDÔ&Ü%¨Ñ/Ü%+¨FÔ3MÑ,NÓ%OˆDÔ"Ü! VÑ+Ø!'Ô(>Ñ!?ˆDÕð ,r†   c                 óê  — | j                   � | j                   j                  di |¤Ž |j                  d|j                  d«      «      }|j                  d|j                  d«      «      }	 |d= t	        | j
                  t        «      r# | j
                  j                  dd|i|¤Ž| _        t	        | j                  t        «      r# | j                  j                  dd|i|¤Ž| _        t	        | j                  t        «      r# | j                  j                  dd|i|¤Ž| _	        t	        | j                  t        «      r# | j                  j                  dd|i|¤Ž| _
        | S # t        $ r Y �Œw xY wr   )r‰  rÐ  rè  r!  rë   rE   r×   rÌ   rF   r   r   r"  s       rq   rÐ  zPattern.render£  s8  € Ø×!Ñ!Ð-Ø)ˆD×"Ñ"×)Ñ)Ñ3¨FÒ3Ø—
‘
˜7 F§J¡JÐ/@Ó$AÓBˆØ—‘˜H f§j¡jÐ1BÓ&CÓDˆð	ØÐ(Ð)ô �d—f‘fœfÔ%Ø!�T—V‘V—\‘\ÑB°%ÐB¸6ÑBˆDŒFÜ�d—f‘fœfÔ%Ø!�T—V‘V—\‘\ÑC°&ÐC¸FÑCˆDŒFÜ�d—j‘j¤&Ô)Ø)˜Ÿ™×)Ñ)ÑJ¸%ÐJÀ6ÑJˆDŒJÜ�d—k‘k¤6Ô*Ø+˜$Ÿ+™+×+Ñ+ÑM¸FÐMÀfÑMˆDŒKØˆøô ò 	Úð	ús   Á,E% Å%	E2Å1E2N)
rÓ   rÔ   rÕ   r…   rt  rZ  r    r¬  r«  rÐ  rm   r†   rq   r†  r†  f  s0   „ ò3òð ñ,ó ð,ò
-ò @ó,r†   r†  c                   óŠ   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
ed	„ «       Zed
„ «       Zed„ «       Zd„ Zd„ Zd„ Zd„ Zdd„Zy)ÚTexta/  
    SVG Text are defined in SVG 2.0 Chapter 11

    No methods are implemented to perform a text to path conversion.

    However, if such a method exists the assumption is that the results will be
    placed in the .path attribute, and functions like bbox() will check if such
    a value exists.
    c                 ó¬  — t        |«      dk\  r|d   | _        nd| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _	        d| _
        d| _        d| _        d| _        d| _        d| _        d | _        t#        j$                  | g|¢­i |¤Ž t'        j$                  | g|¢­i |¤Ž t)        j$                  | g|¢­i |¤Ž y )	Nr¢   r   rÚ   r¾   Únormalé�  rç   z
sans-serif)r¿   r)   r   r   rE   rF   rM   rN   ÚanchorÚ
font_styleÚfont_variantÚfont_weightÚfont_stretchr9  Úline_heightÚfont_familyr!   rö  r…   r  rÞ  rû  s      rq   r…   zText.__init__Â  sÕ   € Üˆt‹9˜Š>Ø˜Q™ˆD�IàˆDŒIØˆŒ
ØˆŒØˆŒØˆŒØˆŒØˆŒØˆŒØ"ˆŒØ$ˆÔØˆÔØ$ˆÔØˆŒØˆÔØ'ˆÔØˆŒ	ä×Ñ˜tÐ5 dÒ5¨fÒ5Ü×Ñ˜tÐ5 dÒ5¨fÒ5Ü×Ñ˜DÐ2 4Ò2¨6Ó2r†   c                 ól  — t        «       }|j                  d| j                  z  «       |j                  t        ›d| j                  ›d�«       |j                  t
        ›d| j                  ›d�«       |j                  t        ›d| j                  ›d�«       |j                  t        ›dt        | j                  «      ›d�«       |j                  t        ›d| j                  ›d�«       |j                  dt        | j                  fz  «       |j                  t         ›d| j"                  ›d�«       | j$                  dk7  s| j&                  dk7  rH|j                  t(        ›d| j$                  ›�«       |j                  t*        ›d| j&                  ›�«       | j,                  dk7  s| j.                  dk7  rH|j                  t0        ›d| j,                  ›�«       |j                  t2        ›d| j.                  ›�«       | j4                  �%|j                  t6        ›d| j4                  ›d�«       | j8                  �%|j                  t:        ›d| j8                  ›d�«       | j<                  �<| j<                  dk7  r-|j                  t>        ›dt        | j<                  «      ›�«       | j@                  jC                  «       s-|j                  tD        ›dtG        | j@                  «      ›�«       | jH                  �%|j                  tJ        ›d| jH                  ›d�«       dd	jM                  |«      z  S )
Nú'%s'r²  rR  z%s=%dr   r±  r  úText(%s)rê  )'r(  r³  r)   ÚSVG_ATTR_FONT_FAMILYr§  ÚSVG_ATTR_FONT_STYLEr¢  ÚSVG_ATTR_FONT_VARIANTr£  ÚSVG_ATTR_FONT_WEIGHTrÝ   r¤  ÚSVG_ATTR_FONT_STRETCHr¥  ÚSVG_ATTR_FONT_SIZEr9  ÚSVG_ATTR_TEXT_ANCHORr¡  rE   rF   r´  rµ  rM   rN   ÚSVG_ATTR_DXÚSVG_ATTR_DYr:   r  r9   r  r  r  r;   r/  rþ  rs  r5   ré  r¹  rÀ  s     rq   r)  zText.__str__Û  s  € Ü“ˆØ�‰�f˜tŸy™yÑ(Ô)Ø�‰Ö#7¸×9IÓ9IÐJÔKØ�‰Ö#6¸¿»ÐHÔIØ�‰Ö#8¸$×:KÓ:KÐLÔMØ�‰Ö#7¼¸T×=MÑ=MÕ9NÐOÔPØ�‰Ö#8¸$×:KÓ:KÐLÔMØ�‰�gÔ!3°T·^±^Ð DÑDÔEØ�‰Ö#7¸¿»ÐEÔFØ�6‰6�QŠ;˜$Ÿ&™& Aš+Ø�M‰M¦Z°·²Ð8Ô9Ø�M‰M¦Z°·²Ð8Ô9Ø�7‰7�aŠ<˜4Ÿ7™7 aš<Ø�M‰M¦[°$·'²'Ð:Ô;Ø�M‰M¦[°$·'²'Ð:Ô;Ø�;‰;Ð"Ø�M‰M¦¸¿»ÐDÔEØ�9‰9Ð Ø�M‰M¦}°d·i³iÐ@ÔAØ×ÑÐ(¨T×->Ñ->À#Ò-EØ�M‰MÖ%:¼CÀ×@QÑ@QÔ<RÐSÔTØ�~‰~×)Ñ)Ô+Ø�M‰MÖ%7¼¸d¿n¹nÔ9MÐNÔOØ�7‰7ÐØ�M‰M¦{°D·G³GÐ<Ô=Ø˜TŸY™Y vÓ.Ñ/Ð/r†   c                 óZ  — t        «       }|j                  d| j                  z  «       |j                  d| j                  z  «       | j                  dk7  r|j                  d| j                  z  «       | j
                  dk7  r|j                  d| j
                  z  «       |j                  dt        | j                  «      z  «       | j                  dk7  r|j                  d| j                  z  «       |j                  d| j                  z  «       |j                  d	| j                  z  «       | j                  d
k7  s| j                  d
k7  rH|j                  t        ›d| j                  ›�«       |j                  t        ›d| j                  ›�«       | j                  d
k7  s| j                   d
k7  rH|j                  t"        ›d| j                  ›�«       |j                  t$        ›d| j                   ›�«       | j&                  �%|j                  t(        ›d| j&                  ›d�«       | j*                  �%|j                  t,        ›d| j*                  ›d�«       | j.                  �6| j.                  dk7  r'|j                  dt        | j.                  «      z  «       | j0                  j3                  «       s-|j                  t4        ›dt7        | j0                  «      ›�«       | j8                  �%|j                  t:        ›d| j8                  ›d�«       ddj=                  |«      z  S )Nr©  zfont_family='%s'rŸ  zfont_style='%s'zfont_variant='%s'zfont_weight='%s'zfont_stretch='%s'zfont_size=%dztext_anchor='%s'r   r±  r²  rR  r  rq  rª  rê  )r(  r³  r)   r§  r¢  r£  rÝ   r¤  r¥  r9  r¡  rE   rF   r´  rµ  rM   rN   r²  r³  r:   r  r9   r  r  r;   r/  rþ  rs  r5   ré  r¹  rÀ  s     rq   r&  zText.__repr__÷  s@  € ä“ˆØ�‰�f˜tŸy™yÑ(Ô)Ø�‰Ð(¨4×+;Ñ+;Ñ;Ô<Ø�?‰?˜hÒ&Ø�M‰MÐ+¨d¯o©oÑ=Ô>Ø×Ñ Ò(Ø�M‰MÐ-°×0AÑ0AÑAÔBØ�‰Ð(¬3¨t×/?Ñ/?Ó+@Ñ@ÔAØ×Ñ Ò(Ø�M‰MÐ-°×0AÑ0AÑAÔBØ�‰�n t§~¡~Ñ5Ô6Ø�‰Ð(¨4¯;©;Ñ6Ô7Ø�6‰6�QŠ;˜$Ÿ&™& Aš+Ø�M‰M¦Z°·²Ð8Ô9Ø�M‰M¦Z°·²Ð8Ô9Ø�7‰7�aŠ<˜4Ÿ7™7 aš<Ø�M‰M¦[°$·'²'Ð:Ô;Ø�M‰M¦[°$·'²'Ð:Ô;Ø�;‰;Ð"Ø�M‰M¦¸¿»ÐDÔEØ�9‰9Ð Ø�M‰M¦}°d·i³iÐ@ÔAØ×ÑÐ(¨T×->Ñ->À#Ò-EØ�M‰MØ!¤C¨×(9Ñ(9Ó$:Ñ:ôð �~‰~×)Ñ)Ô+Ø�M‰MÖ%7¼¸d¿n¹nÔ9MÐNÔOØ�7‰7ÐØ�M‰M¦{°D·G³GÐ<Ô=Ø˜TŸY™Y vÓ.Ñ/Ð/r†   c                 óp  — t        |t        «      st        S | j                  |j                  k7  ry| j                  |j                  k7  ry| j
                  |j
                  k7  ry| j                  |j                  k7  ry| j                  |j                  k7  ry| j                  |j                  k7  ry| j                  |j                  k7  ry| j                  |j                  k7  ry| j                  |j                  k7  ry| j                  |j                  k7  ry| j                  |j                  k7  ry| j                  |j                  k7  ry| j                  |j                  k7  ry| j                   |j                   k7  ry| j"                  |j"                  k7  ry| j                  |j                  k7  ryyr-  )rë   r�  rD  r)   r   r   rE   rF   rM   rN   r¡  r¢  r£  r¤  r¥  r9  r¦  r§  rì   s     rq   r  zText.__eq__   s[  € Ü˜%¤Ô&Ü!Ð!Ø�9‰9˜Ÿ
™
Ò"ØØ�:‰:˜Ÿ™Ò$ØØ�;‰;˜%Ÿ,™,Ò&ØØ�6‰6�U—W‘WÒØØ�6‰6�U—W‘WÒØØ�7‰7�e—h‘hÒØØ�7‰7�e—h‘hÒØØ�;‰;˜%Ÿ,™,Ò&ØØ�?‰?˜e×.Ñ.Ò.ØØ×Ñ × 2Ñ 2Ò2ØØ×Ñ˜u×0Ñ0Ò0ØØ×Ñ × 2Ñ 2Ò2ØØ�>‰>˜UŸ_™_Ò,ØØ×Ñ˜u×0Ñ0Ò0ØØ×Ñ˜u×0Ñ0Ò0ØØ�>‰>˜UŸ_™_Ò,ØØr†   c                 ó:   — t        |t        «      st        S | |k(   S r�   )rë   r�  rD  rì   s     rq   r  zText.__ne__>   rÚ  r†   c                 ó†  — t         j                  | |«       t        j                  | |«       t        j                  | |«       |j                  | _        |j
                  | _        |j                  | _        |j                  | _        |j                  | _        |j                  | _	        |j                  | _
        |j                  | _        |j                  | _        |j                  | _        |j                  | _        |j                  | _        |j                   | _        |j"                  | _        |j$                  | _        y r�   )rö  r¬  r  rÞ  r)   rE   rF   r   r   rM   rN   r¡  r§  r¢  r£  r¤  r¥  r9  r¦  r  s     rq   r¬  zText.property_by_objectC   sÜ   € Ü×(Ñ(¨¨qÔ1Ü×(Ñ(¨¨qÔ1Ü×%Ñ% d¨AÔ.Ø—F‘FˆŒ	Ø—‘ˆŒØ—‘ˆŒØ—W‘WˆŒ
Ø—h‘hˆŒØ—$‘$ˆŒØ—$‘$ˆŒØ—h‘hˆŒØŸ=™=ˆÔØŸ,™,ˆŒØŸN™NˆÔØŸ=™=ˆÔØŸN™NˆÔØŸ™ˆŒØŸ=™=ˆÕr†   c                 ó€  — t         j                  |«      }|sy|j                  d«      | _        | j                  €d| _        |j                  d«      | _        | j                  €d| _        |j                  d«      | _        | j
                  €d| _        |j                  d«      | _        | j                  €d| _        |j                  d«      | _        | j                  €d| _        | j                  re| j                  }t        | j                  «      | _        	 t        | j                  «      j                  «       | _        | j                  d	k(  r|| _        |j                  d
«      | _        | j                  €d| _        | j                  rq| j                  }t        | j                  «      | _        	 t        | j                  | j                  ¬«      j                  «       | _        | j                  d	k(  r|| _        |j                  d«      | _        y# t        $ r
 || _        Y ŒÏw xY w# t        $ r
 || _        Y Œ?w xY w)aI  
        CSS Fonts 3 has a shorthand font property which serves to provide a single location to define:
        `font-style`, `font-variant`, `font-weight`, `font-stretch`, `font-size`, `line-height`, and `font-family`

        font-style: normal | italic | oblique
        font-variant: normal | small-caps
        font-weight: normal | bold | bolder | lighter | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900
        font-stretch: normal | ultra-condensed | extra-condensed | condensed | semi-condensed | semi-expanded | expanded | extra-expanded | ultra-expanded
        font-size: <absolute-size> | <relative-size> | <length-percentage>
        line-height: '/' <`line-height`>
        font-family: [ <family-name> | <generic-family> ] #
        generic-family:  `serif`, `sans-serif`, `cursive`, `fantasy`, and `monospace`
        Nr¢   rŸ  r   r`  ra  r   Ú12ptr   r¶  rƒ  r`  )ÚREGEX_CSS_FONTrŠ   r�   r¢  r£  r¤  r¥  r9  r×   rÌ   rž   r¦  r§  )r„   rP   rŠ   rº  r   s        rq   Ú
parse_fontzText.parse_fontW   sé  € ô ×$Ñ$ TÓ*ˆÙàØŸ+™+ a›.ˆŒØ�?‰?Ð"Ø&ˆDŒOà!ŸK™K¨›NˆÔØ×ÑÐ$Ø (ˆDÔà Ÿ;™; q›>ˆÔØ×ÑÐ#Ø'ˆDÔà!ŸK™K¨›NˆÔØ×ÑÐ$Ø (ˆDÔàŸ™ Q›ˆŒØ�>‰>Ð!Ø#ˆDŒNØ�>Š>Ø—>‘>ˆDÜ# D§N¡NÓ3ˆDŒNð&Ü!'¨¯©Ó!7×!=Ñ!=Ó!?�”Ø—>‘> QÒ&Ø%)�D”Nð !Ÿ;™; q›>ˆÔØ×ÑÐ#Ø%ˆDÔØ×ÒØ×%Ñ%ˆFÜ% d×&6Ñ&6Ó7ˆDÔð*Ü#)Ø×$Ñ$°d·n±nô$ç‘%“'ð Ô ð ×#Ñ# qÒ(Ø'-�DÔ$ð !Ÿ;™; q›>ˆÕøô% ò &Ø!%�–ð&ûô ò *Ø#)�Ö ð*ús%   Ä>H Æ3A
H* ÈH'È&H'È*H=È<H=c                 ó´   — t         j                  | j                  «      D �cg c]+  }|j                  d«      s|j                  d«      r|dd n|‘Œ- c}S c c}w )NÚ"rR  r¢   r¶  )ÚREGEX_CSS_FONT_FAMILYrß   r§  Ú
startswith)r„   Úfamilys     rq   Ú	font_listzText.font_list˜   s`   € ô 0×7Ñ7¸×8HÑ8HÔIó
áI�ð #×-Ñ-¨cÔ2°f×6GÑ6GÈÔ6LˆF�1�R‰LÐRXÑXØIñ
ð 	
ùò 
s   ¢0Ac                 óŒ   — | j                   dk(  ry| j                   dk(  ry	 t        | j                   «      S # t        $ r Y yw xY w)z¸
        This does not correctly parse weights for bolder or lighter. Those are relative to the previous set
        font-weight and that is generally unknown in this context.
        Úboldi¼  rŸ  r   )r¤  rš   rž   rƒ   s    rq   ÚweightzText.weightŸ   sN   € ð ×Ñ˜vÒ%ØØ×Ñ˜xÒ'Øð	Ü�t×'Ñ'Ó(Ð(øÜò 	Ùð	ús   ¢7 ·	AÁAc                  ó   — y)z&
        Deprecated Fontface.
        rÚ   rm   rƒ   s    rq   Ú	font_facezText.font_face®   s   € ð
 r†   c                 óŠ  — t         j                  | |«       t        j                  | |«       t        j                  | |«       |j	                  d| j
                  «      | _        |j	                  t        | j
                  «      | _        |j	                  d| j                  «      | _        |j	                  t        | j
                  «      | _        |j	                  d| j                  «      | _	        |j	                  t        | j                  «      | _	        |j	                  d| j                  «      | _        |j	                  t        | j                  «      | _        	 t        | j                  «      | _        |j	                  d| j                  «      | _        |j	                  t         | j                  «      | _        t#        |j	                  d| j$                  «      «      j'                  «       | _        t#        |j	                  t(        | j$                  «      «      j'                  «       | _        |j	                  d| j*                  «      | _        |j	                  t,        | j*                  «      | _        |j	                  t.        d «      }|�| j1                  |«       |j	                  t2        | j4                  «      | _        t#        |j	                  t6        | j8                  «      «      j'                  «       | _        t#        |j	                  t:        | j<                  «      «      j'                  «       | _        t#        |j	                  t>        | j@                  «      «      j'                  «       | _         t#        |j	                  tB        | jD                  «      «      j'                  «       | _"        y # t        $ r Y �ŒKw xY w)Nr§  r¢  r£  r¤  r¥  r9  Útext_anchor)#rö  r«  r  rÞ  rè  r§  r«  r¢  r¬  r£  r­  r¤  r®  rš   rž   r¥  r¯  r×   r9  rÌ   r°  r¡  r±  ÚSVG_ATTR_FONTr»  ÚSVG_TAG_TEXTr)   r´  rE   rµ  rF   r²  rM   r³  rN   )r„   r¼  rP   s      rq   r«  zText.property_by_valuesµ   s™  € Ü×(Ñ(¨¨vÔ6Ü×(Ñ(¨¨vÔ6Ü×%Ñ% d¨FÔ3à!Ÿ:™: m°T×5EÑ5EÓFˆÔØ!Ÿ:™:Ô&:¸D×<LÑ<LÓMˆÔà Ÿ*™* \°4·?±?ÓCˆŒØ Ÿ*™*Ô%8¸$×:JÑ:JÓKˆŒà"ŸJ™J ~°t×7HÑ7HÓIˆÔØ"ŸJ™JÔ'<¸d×>OÑ>OÓPˆÔà!Ÿ:™: m°T×5EÑ5EÓFˆÔØ!Ÿ:™:Ô&:¸D×<LÑ<LÓMˆÔð	Ü" 4×#3Ñ#3Ó4ˆDÔð #ŸJ™J ~°t×7HÑ7HÓIˆÔØ"ŸJ™JÔ'<¸d×>OÑ>OÓPˆÔä §
¡
¨;¸¿¹Ó GÓH×NÑNÓPˆŒÜ §
¡
Ô+=¸t¿~¹~Ó NÓO×UÑUÓWˆŒà—j‘j °·±Ó<ˆŒØ—j‘jÔ!5°t·{±{ÓCˆŒà�z‰zœ-¨Ó.ˆØÐØ�O‰O˜DÔ!à—J‘Jœ|¨T¯Y©YÓ7ˆŒ	Ü˜Ÿ
™
¤:¨t¯v©vÓ6Ó7×=Ñ=Ó?ˆŒÜ˜Ÿ
™
¤:¨t¯v©vÓ6Ó7×=Ñ=Ó?ˆŒÜ˜Ÿ™¤K°·±Ó9Ó:×@Ñ@ÓBˆŒÜ˜Ÿ™¤K°·±Ó9Ó:×@Ñ@ÓBˆ�øô) ò 	Úð	ús   ÅN5 Î5	OÏOc                 óX   — t         j                  | «       t        j                  | «       y r�   )r  r  rö  rƒ   s    rq   r  z
Text.reifyÝ   s   € Ü×Ñ˜DÔ!Ü×Ñ˜DÕ!r†   c                 óò  — t        j                  | fi |¤Ž t        j                  | fi |¤Ž |j                  d|j                  d«      «      }|j                  d|j                  d«      «      }	 |d= t        | j                  t        «      r# | j                  j                  dd|i|¤Ž| _        t        | j                  t        «      r# | j                  j                  dd|i|¤Ž| _	        t        | j                  t        «      r# | j                  j                  dd|i|¤Ž| _
        t        | j                  t        «      r# | j                  j                  dd|i|¤Ž| _        | S # t        $ r Y �Œw xY wr   )r  rÐ  rö  rè  r!  rë   rE   r×   rÌ   rF   rM   rN   r"  s       rq   rÐ  zText.renderá   s5  € Ü×Ñ˜TÑ, VÒ,Ü×Ñ˜TÑ, VÒ,Ø—
‘
˜7 F§J¡JÐ/@Ó$AÓBˆØ—‘˜H f§j¡jÐ1BÓ&CÓDˆð	ØÐ(Ð)ô �d—f‘fœfÔ%Ø!�T—V‘V—\‘\ÑB°%ÐB¸6ÑBˆDŒFÜ�d—f‘fœfÔ%Ø!�T—V‘V—\‘\ÑC°&ÐC¸FÑCˆDŒFÜ�d—g‘gœvÔ&Ø#�d—g‘g—m‘mÑD°EÐD¸VÑDˆDŒGÜ�d—g‘gœvÔ&Ø#�d—g‘g—m‘mÑE°FÐE¸fÑEˆDŒGØˆøô ò 	Úð	ús   Á0E) Å)	E6Å5E6c                 ó   — t        | «      S r�   )r�  rƒ   s    rq   rú   zText.__copy__ô   r�  r†   c                 ó`  — | j                   �*| j                   | j                  z  j                  d|¬«      S | j                  }| j                  }| j
                  }| j                  |z
  }| j
                  |z   }| j                  }t        | d«      r| j                  dk(  rn9| j                  dk(  r||dz  z  }||dz  z  }n| j                  dk(  r
||z  }||z  }|rÜ| j                  j                  ||g«      }	| j                  j                  ||g«      }
| j                  j                  ||g«      }| j                  j                  ||g«      }t        |	d   |
d   |d   |d   «      }t        |	d	   |
d	   |d	   |d	   «      }t        |	d   |
d   |d   |d   «      }t        |	d	   |
d	   |d	   |d	   «      }|rb| j                  �V| j                  �J| j                  j                  �4|rt        | j                   «      d
z  }nt        | j                  «      d
z  }nd}||z
  ||z
  ||z   ||z   fS )a  
        Get the bounding box for the given text object.

        :param transformed: whether this is the transformed bounds or default.
        :param with_stroke: should the stroke-width be included in the bounds.
        :return: bounding box of the given element
        TrO  r¡  r¾   Úmiddler   r‹   r   r¢   rˆ  rÙ   )r!   r;   r  r   r   rE   rF   r'  r¡  rr  rK  rL  r  r:   rÌ   r•   r$  )r„   r  r  r   r   r›  rœ  rÌ  rÎ  rS  r¡  r†  r|  rÿ  s                 rq   r  z	Text.bbox÷   s>  € ð �9‰9Ð Ø—I‘I §¡Ñ.×4Ñ4Ø Ø'ð 5ó ð ð
 —
‘
ˆØ—‘ˆØ�v‰vˆØ�v‰v˜‰ˆØ�v‰v˜‰~ˆØ�v‰vˆä�t˜XÔ&¨$¯+©+¸Ò*@ØØ�[‰[˜HÒ$Ø�E˜A‘IÑˆDØ�E˜A‘IÑ‰DØ�[‰[˜EÒ!Ø�E‰MˆDØ�E‰MˆDÙØ—‘×/Ñ/°°t°Ó=ˆBØ—‘×/Ñ/°°t°Ó=ˆBØ—‘×/Ñ/°°t°Ó=ˆBØ—‘×/Ñ/°°t°Ó=ˆBÜ�r˜!‘u˜b ™e R¨¡U¨B¨q©EÓ2ˆDÜ�r˜!‘u˜b ™e R¨¡U¨B¨q©EÓ2ˆDÜ�r˜!‘u˜b ™e R¨¡U¨B¨q©EÓ2ˆDÜ�r˜!‘u˜b ™e R¨¡U¨B¨q©EÓ2ˆDñ Ø×!Ñ!Ð-Ø—[‘[Ð(¨D¯K©K×,=Ñ,=Ð,EáÜ˜d×8Ñ8Ó9¸CÑ?‘ä˜d×/Ñ/Ó0°3Ñ6‘àˆEð �5‰LØ�5‰LØ�5‰LØ�5‰Lð	
ð 	
r†   Nr  )rÓ   rÔ   rÕ   rU  r…   r)  r&  r  r  r¬  r»  rZ  rÁ  rÄ  rÆ  r«  r  rÐ  rú   r  rm   r†   rq   r�  r�  ·  s„   „ ñò3ò20ò8 0òD#òJ!ò
)ò(?*ðB ñ
ó ð
ð ñó ðð ñó ðò&CòP"òò&ô8
r†   r�  c                   ór   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zed
„ «       Zdd„Zd„ Zd„ Zd„ Zdd„Zy)ÚImagezä
    SVG Images are defined in SVG 2.0 12.3

    This class is called SVG Image rather than image as a guard against many Image objects
    which are quite useful and would be ideal for reading the linked or contained data.
    c                 óÈ  — d | _         d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _	        d | _
        d | _        t        j                  | g|¢­i |¤Ž t        j                  | g|¢­i |¤Ž t        j                  | g|¢­i |¤Ž | j                   �·t         j#                  | j                   «      }|r•|j%                  d«      j'                  d«      | _        | j                   |j)                  d«      dz   d  | _        d| j                  v rddlm}  || j                  «      | _        y ddlm}  || j                  «      | _        y y y )Nr¢   Ú;Úbase64r   )Ú	b64decode)Úunquote_to_bytes)ÚurlÚdataÚ
media_typer;  r©  rE   rF   r   r   r+   Úimage_widthÚimage_heightrö  r…   r  rÞ  ÚREGEX_DATA_URLrŠ   r�   rÐ  r‹   rÔ  rÕ  Úurllib.parserÖ  )r„   rà   rá   rŠ   rÕ  rÖ  s         rq   r…   zImage.__init__=!  sC  € ØˆŒØˆŒ	ØˆŒØˆŒØ%)ˆÔ"ØˆŒØˆŒØˆŒ
ØˆŒàˆŒ
ØˆÔØ ˆÔÜ×Ñ˜tÐ5 dÒ5¨fÒ5Ü×Ñ˜tÐ5 dÒ5¨fÒ5Ü×ÑØð	
Øò	
Ø!ò	
ð �8‰8ÐÜ"×(Ñ(¨¯©Ó2ˆEÙà"'§+¡+¨a£.×"6Ñ"6°sÓ";�”Ø ŸH™H U§Y¡Y¨q£\°AÑ%5Ð%7Ð8�”	Ø˜tŸ™Ñ.Ý0á )¨$¯)©)Ó 4�D•Iå=á 0°·±Ó ;�D•Ið ð  r†   c                 ó  — g }| j                   dk7  r7|j                  t        ›dt        j	                  | j                   «      ›�«       | j
                  dk7  r7|j                  t        ›dt        j	                  | j
                  «      ›�«       | j                  dk7  r7|j                  t        ›dt        j	                  | j                  «      ›�«       | j                  dk7  r7|j                  t        ›dt        j	                  | j                  «      ›�«       | j                  �$|j                  t        ›d| j                  ›�«       | j                  �.|j                  t        ›dt	        | j                  «      ›d�«       | j                  �%|j                  t         ›d| j                  ›d�«       | j"                  j%                  «       s'|j                  dt'        | j"                  «      z  «       dj)                  |«      }d|z  S )	Nr   r±  r”  r²  rR  ztransform=%srê  z	Image(%s))rE   r³  r´  r×   rÝ   rF   rµ  r   r¶  r   r·  r©  r¸  r;  r¿  r×  r–  r;   r/  rs  r¹  rº  s      rq   r&  zImage.__repr__`!  s\  € ØˆØ�6‰6�QŠ;Ø�M‰M¦Z´·±¸D¿F¹FÔ1CÐDÔEØ�6‰6�QŠ;Ø�M‰M¦Z´·±¸D¿F¹FÔ1CÐDÔEØ�:‰:˜ÒØ�M‰M¦^´V·Z±ZÀÇ
Á
Ô5KÐLÔMØ�;‰;˜&Ò Ø�M‰M¦_´f·j±jÀÇÁÔ6MÐNÔOØ×%Ñ%Ð1Ø�M‰MÞ7¸×9SÒ9SÐTôð �<‰<Ð#Ø�M‰MÖ'7¼¸T¿\¹\Õ9JÐKÔLØ�8‰8ÐØ�M‰M¦x°·³Ð:Ô;Ø�~‰~×)Ñ)Ô+Ø�M‰M˜.¬4°·±Ó+?Ñ?Ô@Ø—‘˜6Ó"ˆØ˜VÑ#Ð#r†   c                 ó   — t        |t        «      st        S | j                  |j                  k7  ry| j                  |j                  k7  ry| j
                  |j
                  k7  ry| j                  |j                  k7  ry| j                  |j                  k7  ry| j                  |j                  k7  ry| j                  |j                  k7  ry| j                  |j                  k7  ry| j                  |j                  k(  S rB  )rë   rÑ  rD  r×  rØ  r   r   rE   rF   r+   r;  r©  rì   s     rq   r  zImage.__eq__w!  sÁ   € Ü˜%¤Ô'Ü!Ð!Ø�8‰8�u—y‘yÒ ØØ�9‰9˜Ÿ
™
Ò"ØØ�:‰:˜Ÿ™Ò$ØØ�;‰;˜%Ÿ,™,Ò&ØØ�6‰6�U—W‘WÒØØ�6‰6�U—W‘WÒØØ�:‰:˜Ÿ™Ò$ØØ�<‰<˜5Ÿ=™=Ò(ØØ×)Ñ)¨U×-HÑ-HÑHÐHr†   c                 ó:   — t        |t        «      st        S | |k(   S r�   )rë   rÑ  rD  rì   s     rq   r  zImage.__ne__Œ!  r7  r†   c                 óþ  — t         j                  | |«       t        j                  | |«       t        j                  | |«       |j                  | _        |j
                  | _        |j                  | _        |j                  | _        |j                  | _        |j                  | _	        |j                  | _
        |j                  | _        |j                  | _        |j                  | _        |j                  | _        y r�   )rÞ  r¬  rö  r  r×  rØ  r;  r©  rE   rF   r   r   r+   rÚ  rÛ  r  s     rq   r¬  zImage.property_by_object‘!  s°   € Ü×%Ñ% d¨AÔ.Ü×(Ñ(¨¨qÔ1Ü×(Ñ(¨¨qÔ1Ø—5‘5ˆŒØ—F‘FˆŒ	Ø—y‘yˆŒØ%&×%<Ñ%<ˆÔ"à—‘ˆŒØ—‘ˆŒØ—W‘WˆŒ
Ø—h‘hˆŒà—W‘WˆŒ
ØŸ=™=ˆÔØŸN™NˆÕr†   c                 óP  — t         j                  | |«       t        j                  | |«       t        j                  | |«       t        |v r|t           | _        nt        |v r|t           | _        |j                  t        «      }|�t        |«      | _
        t        |v r|t           | _        t        |j                  t        d«      «      j                  «       | _        t        |j                  t"        d«      «      j                  «       | _        t        |j                  t&        d«      «      j                  «       | _        t        |j                  t*        d«      «      j                  «       | _        d|v r.|d   | _        | j.                  j0                  \  | _        | _        y y )Nr   r”  r+   )rÞ  r«  rö  r  r•  r×  r–  rè  r¿  rJ  r;  r¸  r©  r×   r´  rÌ   rE   rµ  rF   r¶  r   r·  r   r+   rº  rÚ  rÛ  rš  s      rq   r«  zImage.property_by_values£!  sA  € Ü×%Ñ% d¨FÔ3Ü×(Ñ(¨¨vÔ6Ü×(Ñ(¨¨vÔ6Ü˜ÑØœjÑ)ˆD�HÜ˜ÑØœhÑ'ˆDŒHØ—*‘*Ô-Ó.ˆØÐÜ" 7Ó+ˆDŒLÜ'¨6Ñ1Ø)/Ô0LÑ)MˆDÔ&Ü˜Ÿ
™
¤:¨qÓ1Ó2×8Ñ8Ó:ˆŒÜ˜Ÿ
™
¤:¨qÓ1Ó2×8Ñ8Ó:ˆŒÜ˜FŸJ™J¤~°vÓ>Ó?×EÑEÓGˆŒ
Ü˜VŸZ™Z¬¸Ó@ÓA×GÑGÓIˆŒØ�fÑØ ™ˆDŒJØ26·*±*·/±/Ñ/ˆDÔ˜dÕ/ð r†   c                 ó  — t        j                  | fi |¤Ž t        j                  | fi |¤Ž t        j                  | fi |¤Ž |j	                  d|j	                  d«      «      }|j	                  d|j	                  d«      «      }	 |d= t        | j                  t        «      r# | j                  j                  dd|i|¤Ž| _        t        | j                  t        «      r# | j                  j                  dd|i|¤Ž| _
        t        | j                  t        «      r# | j                  j                  dd|i|¤Ž| _        t        | j                  t        «      r# | j                  j                  dd|i|¤Ž| _        | S # t
        $ r Y �Œw xY wr   )r  rÐ  rö  rÞ  rè  r!  rë   rE   r×   rÌ   rF   r   r   r"  s       rq   rÐ  zImage.render¸!  sL  € Ü×Ñ˜TÑ, VÒ,Ü×Ñ˜TÑ, VÒ,Ü×Ñ˜$Ñ) &Ò)Ø—
‘
˜7 F§J¡JÐ/@Ó$AÓBˆØ—‘˜H f§j¡jÐ1BÓ&CÓDˆð	ØÐ(Ð)ô �d—f‘fœfÔ%Ø!�T—V‘V—\‘\ÑB°%ÐB¸6ÑBˆDŒFÜ�d—f‘fœfÔ%Ø!�T—V‘V—\‘\ÑC°&ÐC¸FÑCˆDŒFÜ�d—j‘j¤&Ô)Ø)˜Ÿ™×)Ñ)ÑJ¸%ÐJÀ6ÑJˆDŒJÜ�d—k‘k¤6Ô*Ø+˜$Ÿ+™+×+Ñ+ÑM¸FÐMÀfÑMˆDŒKØˆøô ò 	Úð	ús   ÂE? Å?	FÆFc                 ó   — t        | «      S )a  
        Copy of Image. This will not copy the .image subobject in a deep manner
        since it's optional that that object will exist or not. As such if using PIL it would
        be required to either say self.image = self.image.copy() or call .load() again.
        ©rÑ  rƒ   s    rq   rú   zImage.__copy__Ì!  s   € ô �T‹{Ðr†   c                 óR   — | j                   €y| j                   j                  | «      S r�  rŽ  rƒ   s    rq   r    zImage.viewbox_transformÔ!  r�  r†   Nc                 óÄ   — 	 ddl m} | j                  �| j                  «        n| j                  �| j                  |«       | j                  «        y # t        $ r Y y w xY w)Nr   rå  )ÚPILrÑ  rØ  Ú	load_datar×  Ú	load_fileÚset_values_by_imagerJ  )r„   Ú	directoryÚPILImages      rq   Úloadz
Image.loadÚ!  sR   € ð		Ý-à�y‰yÐ$Ø—‘Õ Ø—‘Ð%Ø—‘˜yÔ)Ø×$Ñ$Õ&øÜò 	Ùð	ús   ‚AA Á	AÁAc                 ó¢   — 	 ddl m} | j                  �-ddlm} |j                   || j                  «      «      | _        y y # t        $ r Y y w xY w)Nr   rå  ©ÚBytesIO)rè  rÑ  rØ  Úiorñ  Úopenr+   rJ  )r„   rí  rñ  s      rq   ré  zImage.load_dataæ!  sE   € ð	å-à�y‰yÐ$Ý&à%Ÿ]™]©7°4·9±9Ó+=Ó>�•
àøÜò 	áð	ús   ‚>A Á	AÁAc                 ó0  — 	 ddl m} | j                  �"	 |j                  | j                  «      | _        y y # t
        $ rF 	 |�/ddlm}  ||| j                  «      }|j                  |«      | _        n# t
        $ r Y Y y w xY wY y w xY w# t        $ r Y y w xY w)Nr   rå  rE  )	rè  rÑ  r×  ró  r+   ÚIOErrorÚos.pathr¹  rJ  )r„   rì  rí  r¹  Úrelpaths        rq   rê  zImage.load_fileõ!  s–   € ð	å-à�x‰xÐ#ð
Ø!)§¡¨t¯x©xÓ!8�D•Jð $øô ò ðØ$Ð0Ý4á&*¨9°d·h±hÓ&?˜GØ)1¯©°wÓ)?˜DœJùÜ"ò Úðüðûô ò 	áð	úsV   ‚B	 • 7 ·	BÁ1A3Á2BÁ3	B Á<BÁ=B	 Á?B Â BÂB	 ÂBÂB	 Â		BÂBc                 óŽ  — | j                   €y | j                   j                  | _        | j                   j                  | _        t        d| j                  | j                  fz  | j                  «      | _        | j                  | j                  | j                  ¬«       t        | j                  «      | j                  z  | _        y )Nz	0 0 %d %dr®  )r+   r   rÚ  r   rÛ  rJ  r©  r;  rÐ  r\  r    r;   rƒ   s    rq   rë  zImage.set_values_by_image
"  sš   € Ø�:‰:ÐØØŸ:™:×+Ñ+ˆÔØ ŸJ™J×-Ñ-ˆÔÜØ˜4×+Ñ+¨T×->Ñ->Ð?Ñ?Ø×&Ñ&ó
ˆŒð 	�‰˜$×*Ñ*°4×3DÑ3DˆÔEÜ × 6Ñ 6Ó7¸$¿.¹.ÑHˆ�r†   c                 óÆ  — | j                   �| j                  €It        dd«      }|| j                  z  }|j                  |j
                  |j                  |j
                  fS | j                   }| j                  }|rct        dd«      | j                  z  t        |d«      | j                  z  t        ||«      | j                  z  t        d|«      | j                  z  f}n.t        dd«      t        |d«      t        ||«      t        d|«      f}t        d„ |D «       «      }t        d„ |D «       «      }t        |«      }t        |«      }	t        |«      }
t        |«      }||	|
|fS )a  
        Get the bounding box for the given image object

        :param transformed: whether this is the transformed bounds or default.
        :param with_stroke: There is no stroke for an image so with_stroke is ignored
        :return: bounding box of the given element
        r   c              3   ó4   K  — | ]  }|j                   –— Œ y ­wr�   r~  ©ro   rº   s     rq   rr   zImage.bbox.<locals>.<genexpr>."  ó   è ø€ Ð%¡1˜a�a—c•c¡1ùó   ‚c              3   ó4   K  — | ]  }|j                   –— Œ y ­wr�   r�  rû  s     rq   rr   zImage.bbox.<locals>.<genexpr>/"  rü  rý  )	rÚ  rÛ  r1  r;   rE   rF   r(  rK  rL  )r„   r  r  rÆ  r   r   Úx_valsÚy_valsÚmin_xÚmin_yÚmax_xÚmax_ys               rq   r  z
Image.bbox"  s:  € ð ×ÑÐ# t×'8Ñ'8Ð'@Ü�a˜“ˆAØ�—‘ÑˆAØ—3‘3˜Ÿ™˜QŸS™S !§#¡#Ð%Ð%Ø× Ñ ˆØ×"Ñ"ˆáä�a˜“˜dŸn™nÑ,Ü�e˜Q“ $§.¡.Ñ0Ü�e˜VÓ$ t§~¡~Ñ5Ü�a˜Ó  4§>¡>Ñ1ð	‰Aô �q˜!“œe E¨1›o¬u°U¸FÓ/CÄUÈ1ÈfÓEUÐVˆAÜÑ%¡1Ó%Ó%ˆÜÑ%¡1Ó%Ó%ˆÜ�F“ˆÜ�F“ˆÜ�F“ˆÜ�F“ˆØ�e˜U EÐ)Ð)r†   r�   r  )rÓ   rÔ   rÕ   rU  r…   r&  r  r  r¬  r«  rÐ  rú   rZ  r    rî  ré  rê  rë  r  rm   r†   rq   rÑ  rÑ  5!  s`   „ ñò!<òF$ò.Iò*!ò
+ò$Bò*ò(ð ñ,ó ð,ó

òòò*
Iô*r†   rÑ  c                   ó0   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚDescc                 ó\   — d | _         |€
t        «       }t        j                  | g|¢­i |¤Ž y r�   )r,   rª  rÞ  r…   ©r„   rà   r¼  s      rq   r…   zDesc.__init__;"  s-   € ØˆŒ	Øˆ>Ü“VˆFÜ×Ñ˜DÐ2 4Ò2¨6Ó2r†   c                 óV   — t        |t        «      sy| j                  |j                  k(  S rB  )rë   r	  r,   rì   s     rq   r  zDesc.__eq__A"  s"   € Ü˜%¤Ô&ØØ�y‰y˜EŸJ™JÑ&Ð&r†   c                 óN   — | j                   j                  ›d| j                  ›d�S ©Nz('z'))rs  rÓ   r,   rƒ   s    rq   r&  zDesc.__repr__F"  s   € Ø!Ÿ^™^×4Ó4°d·i³iÐ@Ð@r†   c                 ó6   — t        |«      dk(  r|d   | _        y y ra  )r¿   r,   rä  s     rq   rá  zDesc.property_by_argsI"  s   € Üˆt‹9˜Š>Ø˜Q™ˆD�Ið r†   c                 óR   — t         j                  | |«       |j                  | _        y r�   )rÞ  r¬  r,   r¼  s     rq   r¬  zDesc.property_by_objectM"  s   € Ü×%Ñ% d¨CÔ0Ø—H‘Hˆ�	r†   c                 ó^   — t         j                  | |«       t        |v r|t           | _        y y r�   )rÞ  r«  ÚSVG_TAG_DESCr,   rÀ  s     rq   r«  zDesc.property_by_valuesQ"  s+   € Ü×%Ñ% d¨FÔ3Ü˜6Ñ!Øœ|Ñ,ˆD�Ið "r†   N©	rÓ   rÔ   rÕ   r…   r  r&  rá  r¬  r«  rm   r†   rq   r	  r	  :"  s!   „ ò3ò'ò
Aò òó-r†   r	  c                   ó0   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚTitlec                 ó\   — d | _         |€
t        «       }t        j                  | g|¢­i |¤Ž y r�   )r-   rª  rÞ  r…   r	  s      rq   r…   zTitle.__init__["  s-   € ØˆŒ
Øˆ>Ü“VˆFÜ×Ñ˜DÐ2 4Ò2¨6Ó2r†   c                 óV   — t        |t        «      sy| j                  |j                  k(  S rB  )rë   r	  r-   rì   s     rq   r  zTitle.__eq__a"  s"   € Ü˜%¤Ô'ØØ�z‰z˜UŸ[™[Ñ(Ð(r†   c                 óN   — | j                   j                  ›d| j                  ›d�S r	  )rs  rÓ   r-   rƒ   s    rq   r&  zTitle.__repr__f"  s   € Ø!Ÿ^™^×4Ó4°d·j³jÐAÐAr†   c                 ó6   — t        |«      dk(  r|d   | _        y y ra  )r¿   r-   rä  s     rq   rá  zTitle.property_by_argsi"  s   € Üˆt‹9˜Š>Ø˜a™ˆD�Jð r†   c                 óR   — t         j                  | |«       |j                  | _        y r�   )rÞ  r¬  r-   r¼  s     rq   r¬  zTitle.property_by_objectm"  s   € Ü×%Ñ% d¨CÔ0Ø—Y‘Yˆ�
r†   c                 ó^   — t         j                  | |«       t        |v r|t           | _        y y r�   )rÞ  r«  ÚSVG_TAG_TITLEr-   rÀ  s     rq   r«  zTitle.property_by_valuesq"  s+   € Ü×%Ñ% d¨FÔ3Ü˜FÑ"Ø¤Ñ.ˆD�Jð #r†   Nr	  rm   r†   rq   r	  r	  Z"  s!   „ ò3ò)ò
Bò!òó/r†   r	  c            
       óÐ   — e Zd ZdZd„ Zed„ «       Zed„ «       Zed„ «       Zed„ «       Z	ed„ «       Z
d„ Zd	„ Zd
„ Zd„ Zd„ Zdd„Zed„ «       Zed„ «       Zededddddddf	d„«       Zy)ÚSVGzë
    SVG Document and Parsing.

    SVG is the SVG main object and also the embedded SVGs within it. It's a subtype of Group. The SVG has a viewbox,
    and parsing methods which can be used if given a stream, path, or svg string.
    c                 óŠ   — i | _         d | _        d | _        d | _        d | _        d | _        t        j                  | g|¢­i |¤Ž y r�   )ÚobjectsrE   rF   r   r   r;  rX  r…   rû  s      rq   r…   zSVG.__init__"  sB   € ØˆŒØˆŒØˆŒØˆŒ
ØˆŒØˆŒÜ�‰�tÐ-˜dÒ- fÓ-r†   c                 ó¼   — | j                   s t        | j                  | j                  «      S t        | j                  | j                  «      }|| j                  z  }|S r�   r�  r�  s     rq   r‘  zSVG.implicit_positionˆ"  r’  r†   c                 óP   — | j                   s| j                  S | j                  d   S r}   r”  rƒ   s    rq   r•  zSVG.implicit_x�"  r–  r†   c                 óP   — | j                   s| j                  S | j                  d   S r<  r˜  rƒ   s    rq   r™  zSVG.implicit_y–"  r–  r†   c                 óÔ   — | j                   s| j                  S t        | j                  d«      }|| j                  z  }t        dd«      }|| j                  z  }|j	                  |«      S r}   r›  rœ  s      rq   r�  zSVG.implicit_widthœ"  rž  r†   c                 óÔ   — | j                   s| j                  S t        d| j                  «      }|| j                  z  }t        dd«      }|| j                  z  }|j	                  |«      S r}   r   rœ  s      rq   r¡  zSVG.implicit_height¦"  r¢  r†   c                 ó  — t         j                  | |«       |j                  | _        |j                  | _        |j                  | _        |j
                  | _        |j                  �t        |j                  «      | _        y d | _        y r�   )rX  r¬  rE   rF   r   r   r;  rJ  r  s     rq   r¬  zSVG.property_by_object°"  s]   € Ü× Ñ   qÔ)Ø—‘ˆŒØ—‘ˆŒØ—W‘WˆŒ
Ø—h‘hˆŒØ-.¯Y©YÐ-B”w˜qŸy™yÓ)ˆ�Èˆ�r†   c                 óJ  — t         j                  | |«       t        |j                  t        d«      «      j                  «       | _        t        |j                  t        d«      «      j                  «       | _        t        |j                  t        d«      «      j                  «       | _
        t        |j                  t        d«      «      j                  «       | _        |j                  t        «      }|j                  t        «      }|�t        ||«      | _        y d | _        y r“  )rX  r«  r×   rè  r´  rÌ   rE   rµ  rF   r¶  r   r·  r   r¿  r¸  rJ  r;  )r„   r¼  r;  Úpars       rq   r«  zSVG.property_by_values¸"  sÉ   € Ü× Ñ   vÔ.Ü˜Ÿ
™
¤:¨qÓ1Ó2×8Ñ8Ó:ˆŒÜ˜Ÿ
™
¤:¨qÓ1Ó2×8Ñ8Ó:ˆŒÜ˜FŸJ™J¤~°vÓ>Ó?×EÑEÓGˆŒ
Ü˜VŸZ™Z¬¸Ó@ÓA×GÑGÓIˆŒØ—*‘*Ô-Ó.ˆØ�j‰jÔ5Ó6ˆØ07Ð0C”w˜w¨Ó,ˆ�Èˆ�r†   c                 ó8   — | j                   j                  |«      S r�   )r	  rè  )r„   r5   s     rq   Úget_element_by_idzSVG.get_element_by_idÂ"  s   € Ø�|‰|×Ñ Ó#Ð#r†   c                 ó\   — t         j                  |«      D ]  }| j                  |«      c S  y r�   )Ú	REGEX_IRIrß   r'	  )r„   r×  Ú_ids      rq   Úget_element_by_urlzSVG.get_element_by_urlÅ"  s(   € Ü×$Ñ$ SÖ)ˆCØ×)Ñ)¨#Ó.Ò.ñ *r†   c                 ó:  — t        j                  | fi |¤Ž |j                  d|j                  d«      «      }|j                  d|j                  d«      «      }	 |d=  t	        | j
                  «      j                  dd|i|¤Ž| _         t	        | j                  «      j                  dd|i|¤Ž| _         t	        | j                  «      j                  dd|i|¤Ž| _         t	        | j                  «      j                  dd|i|¤Ž| _	        y # t        $ r Y Œ¼w xY wr   )
rX  rÐ  rè  r!  r×   r   rÌ   r   rE   rF   r"  s       rq   rÐ  z
SVG.renderÉ"  sý   € Ü�‰�TÑ$˜VÒ$Ø—
‘
˜7 F§J¡JÐ/@Ó$AÓBˆØ—‘˜H f§j¡jÐ1BÓ&CÓDˆð	ØÐ(Ð)ð .”V˜DŸJ™JÓ'×-Ñ-ÑN¸eÐNÀvÑNˆŒ
Ø/”f˜TŸ[™[Ó)×/Ñ/ÑQÀÐQÈ&ÑQˆŒØ%”˜Ÿ™“×%Ñ%ÑF°eÐF¸vÑFˆŒØ%”˜Ÿ™“×%Ñ%ÑG°fÐGÀÑGˆ�øô ò 	Ùð	ús   ÁD Ä	DÄDNc              #   ó\   K  — |� || «      r| –— | j                  |«      D ]  }|–— Œ y ­wr�   )rc  )r„   re  r¸   s      rq   rn  zSVG.elementsÖ"  s0   è ø€ ØÐ¡+¨dÔ"3ØŠJØ—‘˜[Ö)ˆAØ‹Gñ *ùs   ‚*,c                 óR   — | j                   €y| j                   j                  | «      S r�  rŽ  rƒ   s    rq   r    zSVG.viewbox_transformÜ"  r�  r†   c              #   ó^  ‡	‡
K  — i Š	d}t        «       }t        | d¬«      D ]o  \  }}|dk(  rG|}||f}t        «       }||f}|j                  |«       |j                  }t        |v sŒE|‰	|t           <   ŒR|dk(  r|\  }}Œ]|j                  |df«       Œq |}ˆ	ˆ
fd„Š
 ‰
|«      E d{  –—†  y7 Œ­w)a  
        SVG structure pass: parses the svg file such that it creates the structure implied by reused objects in a
        generalized context. Objects ids are read and put into an unparsed shadow tree. <use> objects seamlessly contain
        their definitions.
        N)r¾   r‹   ústart-ns)Úeventsr¾   r‹   c              3   ó‚  •K  — | D ]¢  \  }}|€d d|f–— Œ|j                   }|j                  d«      r|dd  }|d|f–—  ‰|«      E d {  –—†  t        |k(  rJd }|j                  }t        |v r	|t           }t
        |v r	|t
           }|�	  ‰‰|dd     g«      E d {  –—†  |d|f–— Œ¤ y 7 Œa7 Œ# t        $ r Y Œw xY w­w)Nr0	  z{http://www.w3.org/2000/svgé   r¾   r¢   r‹   )rO   r¿  ÚSVG_TAG_USEÚattribr•  r–  r!  )ÚnodesÚelemÚchildrenrO   r×  ÚsemiattrÚ
event_defsÚ	semiparses         €€rq   r;	  z+SVG._use_structure_parse.<locals>.semiparse#  só   øè ø€ Û"'‘��hØÐ#Ø 
¨DÐ0Ò0ØØ—h‘h�Ø—>‘>Ð"?Ô@Ø˜b˜c˜(�CØ˜7 DÐ(Ò(Ù$ XÓ.×.Ð.Ü #Ò%Ø�CØ#Ÿ{™{�HÜ! XÑ-Ø&¤zÑ2˜Ü 8Ñ+Ø&¤xÑ0˜Ø�ð!Ù'0°*¸SÀÀ¸WÑ2EÐ1FÓ'G×GÐGð ˜5 $Ð&Ó&ñ+ #(ð /øð HùÜ'ò !Ù ð!üsH   ƒAB?Á
B,Á?B?ÂB0ÂB.ÂB0Â"B?Â.B0Â0	B<Â9B?Â;B<Â<B?)r(  r   r³  r5	  ré  )ÚsourceÚparentr8	  Úeventr7	  ÚsiblingsÚnoder4   r6	  r:	  r;	  s            @@rq   Ú_use_structure_parsezSVG._use_structure_parseâ"  sÎ   ùè ø€ ð ˆ
ØˆÜ“6ˆô % VÐ4P×Q‰KˆE�4Ø˜ÒØ#�Ø  (Ð+�Ü›6�Ø˜hÐ'�Ø—‘ Ô%Ø!Ÿ[™[�
Ü *Ò,ð ð Ø"¤;Ñ/òð ˜%’Ø#)Ñ �™à—‘  t Õ-ð Rð  ˆõ	'ñ0 ˜UÓ#×#Ò#ús   „A B-Á%A B-Â%B+Â&B-Tr²  FÚignorec
           
      ó  — d}
d}|}i }g }t         |t        dt        di}|�	||t        <   t        j                  | «      D �]O  \  }}}	 |dk(  �r/|j                  ||f«       |s't        |v r|t           j                  «       t        k(  rŒK|}i }|j                  |«       t        |v r|t        = t        |v r|t        = t        |v r|t        = t        |v r|t        = t        |v r|t        = t!        |j"                  «      }||t$        <   d}d|v r||d   z  }||v r|||   z  }t        |v r-|t           }d|z  }||v rt'        |«      dk7  r|d	z  }|||   z  }t        |v rh|t           j)                  d
«      D ]M  }d|z  }||v rt'        |«      dk7  r|d	z  }|||   z  }|›d|›�}||v sŒ3t'        |«      dk7  r|d	z  }|||   z  }ŒO t*        |v rt'        |«      dk7  r|d	z  }||t*           z  }|j)                  d	«      D ]_  }|j)                  d«      }t'        |«      dk(  sŒ#t-        |d   «      j/                  «       }t-        |d   «      j/                  «       }|||<   Œa t        |v r9|t           t0        k(  r)t         |v r|t            |t        <   n|t            |t        <   t        |v r9|t           t0        k(  r)t         |v r|t            |t        <   n|t            |t        <   t        |v r6t        |v r|t           d
z   |t           z   |t        <   n|t           |t        <   |j                  |«       ||t2        <   |s(t        |v r |t           j                  «       t        k(  r�Œ&t4        |k(  �rGt	        |«      }|€$|j6                  �|j6                  j8                  nd}|€$|j6                  �|j6                  j:                  nd}|j=                  ||||j6                  ¬«       |j8                  |j:                  }}|j6                  ��	 |j:                  dk(  s|j8                  dk(  r|c S |j>                  }t        |v r|t        xx   d
|z   z  cc<   n	||t        <   |t           |d<   |j6                  j8                  |j6                  j:                  }}|€||f|d<   |�|j                  |«       |}�ntB        |k(  r6tE        |«      }|�|j                  |«       |}|j=                  |||¬«       �nÛtF        |k(  r#tE        |«      }|}|j=                  |||¬«       �n¯tH        |k(  r(tK        |«      }|}|j=                  |||¬«       |dz  }�n~tL        |k(  r·tO        |«      }t        |jP                  v r|jP                  t           |t        <   tR        |v r|tR        = tT        |v r|tT        = tV        |v r|tV        = tX        |v r|tX        = |�|j                  |«       |}|
dz  }
t        |v �rß|��Ü|
dk(  �rÖ||jZ                  |t           <   �n¾t\        |k(  r#t_        |«      }|}|j=                  |||¬«       �n’|t`        tb        td        tf        th        tj        tl        tn        fv �r(d}d}	 t`        |k(  r2tq        |d¬«      }|js                  |ju                  tv        «      «       n‰tb        |k(  rty        |«      }nttd        |k(  rt{        |«      }n_tf        |k(  rt}        |«      }nJth        |k(  rt        |«      }n5tj        |k(  rt�        |«      }n tl        |k(  rtƒ        |«      }nt…        |«      }|j=                  |||¬«       |r|j‰                  «        |j‹                  «       r�Œ-|�|j                  |«       |rO|	dk(  r�ŒI|	dk(  r|‚|c S |tŒ        tŽ        t�        t’        t”        fv r�Œst—        |«      }|�|j                  |«       |€|}t™        |t        «      s�Œ§	 |jP                  ju                  t        d«      }!|!�|j›                  |!«      }"|"|_N        |dk7  r.	 |jP                  ju                  t         t¢        «      }#|#�|#|_R        t        |v s�Œ|
dk(  s�Œ&||jZ                  |t           <   �Œ>|dk(  �rìt        |v r3|t           j                  «       t        k(  r|j§                  «       \  }}�Œd}|tŽ        t”        t�        t’        tŒ        fv r1|j"                  }t        |v r|�|
dk(  r||jZ                  |t           <   |tŽ        t”        fv rSt©        ||jª                  ¬«      }|j=                  |||¬«       |r|j‰                  «        |��Š|j                  |«       �nwt�        |k(  r-t­        ||jª                  ¬«      }|��T|j                  |«       �nAt’        |k(  r-t¯        ||jª                  ¬«      }|��|j                  |«       �ntŒ        |k(  rå|jª                  }$|$€d}$t±        j²                  t´        d|$«      }$t·        t±        j¸                  tº        |$j/                  «       «      «      }%|%D ]ƒ  \  }}|j/                  «       }|j/                  «       }|j)                  d«      D ]J  }&|&j/                  «       }'|'|vr|||'<   Œ||'   j½                  d	«      s||'xx   d	z  cc<   ||'xx   |z  cc<   ŒL Œ… ntH        |k(  r|dz  }ntL        |k(  r|
dz  }
|�r|€|}	 |jP                  ju                  t        d«      }!|!�|j›                  |!«      }"|"|_N        |dk7  r.	 |jP                  ju                  t         t¢        «      }#|#�|#|_R        |j§                  «       \  }}�Œ0|dk(  s�Œ7|d   tv        k7  s�ŒE|d   ||d   <   �ŒR |S # t@        $ r |cY c S w xY w# t†        $ r} | }|€Y d} ~ �Œ{Y d} ~ �ŒŒd} ~ ww xY w# tž        $ r Y �Œ³w xY w# tž        $ r Y �Œ�w xY w# tž        $ r Y ŒÌw xY w# tž        $ r Y Œ¨w xY w)aˆ  
        Parses the SVG file. All attributes are things which the SVG document itself could not be aware of, such as
        the real size of pixels and the size of the viewport (as opposed to the viewbox).

        :param source: Source svg file or stream.
        :param reify: Should the Geometry sized or have lazy matrices.
        :param ppi: How many physical pixels per inch are there in this view.
        :param width: The physical width of the viewport
        :param height: The physical height of the viewport
        :param color: the `currentColor` value from outside the current scope.
        :param transform: Any required transformations to be pre-applied to this document
        :param context: Any existing document context.
        :param parse_display_none: Parse display_none values anyway.
        :param on_error: Error mode, "ignore", "raise", "stop"
        :return:
        r   r²  rc   Nr¾   rÚ   Ú*z#%srÓ  r�  z.%srP  Ú:r   r¢   rU  )r7  r   r   r;  r&  r¶  )r7  r   r   T)r  rB	  Úraiser‹   )r)   )r,   )r-   rT  r0	  )_ÚSVG_ATTR_COLORr  r  rþ  r	  rA	  r³  ÚSVG_ATTR_DISPLAYr²  r(  rà  r¸  r¿  ré  ÚSVG_ATTR_CLASSÚSVG_ATTR_CLIP_PATHrª  r5	  ÚSVG_ATTR_TAGr¿   rÐ  ÚSVG_ATTR_STYLErÝ   ÚstripÚSVG_VALUE_CURRENT_COLORÚSVG_STRUCT_ATTRIBÚSVG_NAME_TAGr;  r   r   rÐ  r    r{  ÚSVG_TAG_GROUPrX  ÚSVG_TAG_DEFSÚSVG_TAG_CLIPPATHr~  r4	  rb  r¼  r´  rµ  r¶  r·  r	  ÚSVG_TAG_PATTERNr†  ÚSVG_TAG_PATHÚSVG_TAG_CIRCLEÚSVG_TAG_ELLIPSEÚSVG_TAG_LINEÚSVG_TAG_POLYLINEÚSVG_TAG_POLYGONÚSVG_TAG_RECTÚSVG_TAG_IMAGEr5  rÒ   rè  r	  ré  rö  rî  r   r  rz  rÑ  rž   r  r,  ÚSVG_TAG_STYLErÊ  r	  r	  ÚSVG_TAG_TSPANrÞ  rë   r+	  Ú	clip_pathr4  ÚSVG_ATTR_CLIP_RULEÚSVG_RULE_NONZEROÚ	clip_ruleÚpopr�  r)   r	  r	  ÚreÚsubÚREGEX_CSS_COMMENTr(  rß   ÚREGEX_CSS_STYLEr·  )(r<	  r  r7  r   r   r8   r;   ÚcontextÚparse_display_noneÚon_errorr1   ÚclipÚrootÚstylesÚstackr¼  rO   r>	  r7	  Úcurrent_valuesr4   r/   Úsvg_idÚcss_tagÚ	svg_classÚequateÚ
equal_itemrQ  rÌ   rº   r&  Úparse_errorrÎ  Úclip_path_urlr_	  rb	  Ú	textstyleÚassignmentsÚselectorÚsels(                                           rq   rÒ   z	SVG.parse#  sï  € ð: ˆØˆØˆØˆØˆô ˜EÜ˜7Ü˜Vð
ˆð Ð Ø)2ˆFÔ%Ñ&ä #× 8Ñ 8¸× @ÑˆC�˜ðð ˜ÓØ—‘˜g vÐ.Ô/á*Ü(¨FÑ2ØÔ/Ñ0×6Ñ6Ó8¼NÒJàØ!'�Ø�Ø—‘˜nÔ-ô 0°6Ñ9ØÔ;Ð<Ü# vÑ-ØÔ/Ð0Ü &Ñ(Øœ{Ð+Ü! VÑ+Øœ~Ð.Ü%¨Ñ/ØÔ1Ð2ä! $§+¡+Ó.�
Ø+.�
œ<Ñ(ð �Ø˜&‘=Ø˜V C™[Ñ(�EØ˜&‘=Ø˜V C™[Ñ(�EÜ *Ñ,Ø'¬Ñ4�FØ# f™n�GØ &Ñ(Ü˜u›:¨š?Ø! S™L˜EØ ¨¡Ñ0˜Ü! ZÑ/Ø%/´Ñ%?×%EÑ%EÀcÖ%J˜	Ø"'¨)Ñ"3˜Ø" fÑ,Ü" 5›z¨QšØ %¨¡ Ø! V¨G¡_Ñ4˜EâÙ%ð#˜ð # fÒ,Ü" 5›z¨QšØ %¨¡ Ø! V¨G¡_Ñ4™Eð &Kô " ZÑ/Ü˜5“z Q’Ø ™˜Ø˜Z¬Ñ7Ñ7�Eð $Ÿk™k¨#Ö.�FØ!'§¡¨cÓ!2�JÜ˜:“¨!Ó+Ü! *¨Q¡-Ó0×6Ñ6Ó8˜Ü # J¨q¡MÓ 2× 8Ñ 8Ó :˜Ø*/˜
 3šð /ô " ZÑ/Ø"¤=Ñ1Ô5LÒLä%¨Ñ3Ø4>¼~Ñ4N˜
¤=Ò1à4:¼>Ñ4J˜
¤=Ñ1ô $ zÑ1Ø"¤?Ñ3Ô7NÒNä%¨Ñ3Ø6@ÄÑ6P˜
¤?Ò3à6<¼^Ñ6L˜
¤?Ñ3ä%¨Ñ3ä)¨VÑ3à"Ô#5Ñ6Ø!ñ"à(Ô);Ñ<ñ=ð #Ô#5Ò6ð :DÔDVÑ9W˜
Ô#5Ñ6ð —‘˜jÔ)Ø,6�Ô(Ñ)á*Ü(¨FÑ2ØÔ/Ñ0×6Ñ6Ó8¼NÒJáÜ 3Ó&ô ˜F›�Aà�}ð 01¯y©yÐ/D˜AŸI™IŸOšOÈ$ð ð �~Ø56·Y±YÐ5J §¡×!1Ò!1ÐPT˜à—H‘H ¨E¸&È!Ï)É)�HÔTØ$%§G¡G¨Q¯X©X˜E�FØ—y‘yÐ,ð%Ø Ÿx™x¨1š}°·±¸1²Ø'(¢Ø12×1DÑ1DÐ.ô .°Ñ7à"Ô#5Ó6¸#Ð@RÑ:RÑRÔ6à9K˜FÔ#5Ñ6Ø7=Ô>PÑ7Q˜Ð3Ñ4Ø()¯	©	¯©¸¿¹×9IÑ9I˜v˜Ø�Ø%,¨fÐ$5˜˜b™	ØÐ*ØŸ™ qÔ)Ø’GÜ" cÒ)Ü˜f›�AØÐ*ØŸ™ qÔ)Ø�GØ—H‘H ¨E¸&�HÖAÜ! SÒ(Ü˜f›�AØ�GØ—H‘H ¨E¸&�HÖAÜ%¨Ò,Ü  Ó(�AØ�GØ—H‘H ¨E¸&�HÔAØ˜A‘I’DÜ  CÒ'Ü˜F›�AÜ)¨Q¯X©XÑ5à56·X±XÔ>PÑ5Q˜Ô1Ñ2Ü! VÑ+Ø"¤:Ð.Ü! VÑ+Ø"¤:Ð.Ü%¨Ñ/Ø"¤>Ð2Ü&¨&Ñ0Ø"¤?Ð3ØÐ*ØŸ™ qÔ)Ø�GØ˜1‘H�CÜ" jÒ0°TÑ5EÈ#ÐQRË(Ø@A˜Ÿ™ Z´Ñ%<Ó=Ü$¨Ò+Ü ›�AØ�GØ—H‘H ¨E¸&�HÖAØÜ Ü"Ü#Ü Ü$Ü#Ü Ü!ð	ò 	ð #'�KØ�Að%Ü'¨3Ò.ä $ V¸$Ô ?˜AØŸG™G F§J¡J¬}Ó$=Õ>Ü+¨sÒ2Ü & v£™AÜ,°Ò3Ü '¨£™AÜ)¨SÒ0Ü *¨6Ó 2™AÜ-°Ò4Ü (¨Ó 0™AÜ,°Ò3Ü '¨£™AÜ)¨SÒ0Ü $ V£™Aä % f£˜Að —H‘H ¨E¸&�HÔAÙØŸ™œ	Ø—‘Ô(Ù ØÐ*ØŸ™ qÔ)Ù"à# xÒ/Ù$Ø%¨Ò0Ø"-Ð-à#'šKØÜ!Ü Ü Ü!Ü!ðñ ñ ä" 6Ó*�AØÐ*ØŸ™ qÔ)à�<Ø�DÜ˜d¤CÖ(ðØ()¯©¯©Ô5GÈÓ(N˜Ø(Ð4Ø(,×(?Ñ(?ÀÓ(N˜IØ*3˜AœKð ˜q’yð!Ø()¯©¯©Ü 2Ô4Dó)˜Ið  )Ð4Ø.7 ¤ô # jÓ0°S¸A´XØ@A˜Ÿ™ Z´Ñ%<Ó=Ø˜%“ô %¨Ñ.ØÔ/Ñ0×6Ñ6Ó8¼NÒJð ',§i¡i£k‘O�G˜VÙØ�ØÜ Ü!Ü Ü!Ü!ðñ ð "&§¡�JÜ" jÑ0°TÐ5EÈ#ÐQRÊ(Ø@A˜Ÿ™ Z´Ñ%<Ñ=Øœ<¬Ð7Ñ7Ü˜V¨$¯)©)Ô4�AØ—H‘H ¨E¸&�HÔAÙØŸ™œ	ØÑ*ØŸ™ qÖ)Ü! SÒ(Ü˜V¨$¯)©)Ô4�AØÑ*ØŸ™ qÖ)Ü" cÒ)Ü˜f¨D¯I©IÔ6�AØÑ*ØŸ™ qÖ)Ü" cÒ)Ø $§	¡	�IØ Ð(Ø$&˜	Ü "§¡Ô'8¸"¸iÓ H�IÜ"&¤r§z¡z´/À9Ç?Á?ÓCTÓ'UÓ"V�KÛ&1™
˜˜UØ!Ÿi™i›k˜Ø %§¡£˜Ø(+¯	©	°#®˜HØ"*§.¡.Ó"2˜CØ"¨&Ñ0Ø.3  s¢à'-¨c¡{×';Ñ';¸CÔ'@Ø$*¨3£K°3Ñ$6£KØ & s£¨uÑ 4¤ñ )7ñ '2ô &¨Ò,Ø˜A‘I‘DÜ  CÒ'Ø˜1‘H�CØ�=Ø�|Ø ˜ðØ()¯©¯©Ô5GÈÓ(N˜Ø(Ð4Ø(,×(?Ñ(?ÀÓ(N˜IØ*3˜AœKð ˜q’yð!Ø()¯©¯©Ü 2Ô4Dó)˜Ið  )Ð4Ø.7 ¤ð #(§)¡)£+‘�šØ˜*Ô$Ø˜‘7œmÔ+à&*¨1¡g�F˜4 ™7“OðE !AðF ˆøôC  1ò %ð $%œHð	%ûôn &ò %Ø&'˜Ø˜9å$õ %ûð%ûôV *ò Úðûô  .ò !Ú ð!ûôJ *ò Ùðûô  .ò !Ù ð!úsy   Ð
nÐ,nÙ0Cn'ß':oà'-oë-:o(ì--o7în$î#n$î'	oî0o ï oï	oïoï	o%ï$o%ï(	o4ï3o4ï7	pðpr�   )rÓ   rÔ   rÕ   rU  r…   rZ  r‘  r•  r™  r�  r¡  r¬  r«  r'	  r+	  rÐ  rn  r    r\  rA	  r[  rÒ   rm   r†   rq   r	  r	  w"  sí   „ ñò.ð ñó ðð ñ)ó ð)ð
 ñ)ó ð)ð
 ñ%ó ð%ð ñ%ó ð%òMòNò$ò/òHóð ñ,ó ð,ð
 ñ9$ó ð9$ðv ð ØØØØØØØ ØòNó ñNr†   r	  c                 ó4   — ddl m}  |t        | «      d¬«      S )Nr   rñ  Úunicode)Úencoding)Úxml.etree.ElementTreerò  Ú_write_node)r@	  rò  s     rq   rò  rò  °$  s   € Ý.á”K Ó%°	Ô:Ð:r†   c                 ó   — ddl m} t        | «      }|rt        |«        ||«      }	 |j	                  «       j                  d«      rddl}|j                  |d«      } |j                  |fi |¤Ž y# t        $ r Y Œw xY w)zÈ
    Gets the write node and writes to the ElementTree.write() function, all options in Element.write() are passed
    along via this method. encoding, xml_declaration, short_empty_elements, etc.
    r   )ÚElementTreeÚsvgzNÚwb)
r~	  r�	  r	  Ú_pretty_printr²  r·  Úgzipró  r4  rî  )r@	  rÏ  Úprettyrá   r�	  rl	  Útreer…	  s           rq   rî  rî  ¶$  s{   € õ
 2ä�tÓ€DÙÜ�dÔÙ�tÓ€DðØ�7‰7‹9×Ñ˜fÔ%Ûà—	‘	˜!˜TÓ"ˆAð €D‡J�JˆqÑ�FÓøô ò áðús   ¨5A1 Á1	A=Á<A=c                 ó²  ‡— t        | d«      r-| j                  Š| j                  j                  t        ‰«      Šnd Šˆfd„}t	        | t
        «      �rÒ|€v ||t        «      }|j                  t        t        «       |j                  t        t        «       |j                  t        t        «       |j                  t        t        «       n ||t        «      }| j                   r)|j                  t"        t%        | j                   «      «       | j&                  r)|j                  t(        t%        | j&                  «      «       | j*                  r)|j                  t,        t%        | j*                  «      «       | j.                  r)|j                  t0        t%        | j.                  «      «       | j2                  r)|j                  t4        t%        | j2                  «      «       d }	 | j6                  }|rt9        |«      }|j;                  «        |}| D ]  }t?        |||«       Œ �
nGt	        | t@        «      rä ||tB        «      }| jD                  r)|j                  tF        t%        | jD                  «      «       | jH                  r)|j                  tJ        t%        | jH                  «      «       | jL                  r)|j                  tN        t%        | jL                  «      «       | jP                  �	r~|j                  tR        t%        | jP                  «      «       �	nSt	        | tT        «      r¯ ||tV        «      }| jD                  r)|j                  tF        t%        | jD                  «      «       | jH                  r)|j                  tJ        t%        | jH                  «      «       | jL                  �r¿|j                  tX        t%        | jL                  «      «       �n”t	        | tZ        «      �rX ||t\        «      }ddl/m0} ddl1m2} | jf                  �\ |«       }	| jf                  ji                  |	d¬«       |j                  dd	 ||	jk                  «       «      jm                  d
«      › �«       | j                   r)|j                  t"        t%        | j                   «      «       | j&                  r)|j                  t(        t%        | j&                  «      «       | j*                  r)|j                  t,        t%        | j*                  «      «       | j.                  �rV|j                  t0        t%        | j.                  «      «       �n+t	        | tn        «      rä ||tp        «      }| jr                  r)|j                  tt        t%        | jr                  «      «       | jv                  r)|j                  tx        t%        | jv                  «      «       | jz                  r)|j                  t|        t%        | jz                  «      «       | j~                  �rb|j                  t€        t%        | j~                  «      «       �n7t	        | t‚        «      r5 ||t„        «      }|j                  t†        | j‰                  d¬«      «       �nòt	        | tŠ        «      rW ||tŒ        «      }|j                  tŽ        dj‘                  | j’                  D �
cg c]  }
|
d   › d|
d   › �‘Œ c}
«      «       �n‹t	        | t”        «      rW ||t–        «      }|j                  tŽ        dj‘                  | j’                  D �
cg c]  }
|
d   › d|
d   › �‘Œ c}
«      «       �n$t	        | t˜        «      �rN ||tš        «      }| j                   r)|j                  t"        t%        | j                   «      «       | j&                  r)|j                  t(        t%        | j&                  «      «       | jL                  r)|j                  tN        t%        | jL                  «      «       | jP                  r)|j                  tR        t%        | jP                  «      «       | j*                  r)|j                  t,        t%        | j*                  «      «       | j.                  �rð|j                  t0        t%        | j.                  «      «       �nÅt	        | tœ        «      �r~ ||tž        «      }| j                   |_P        | j¢                  r)|j                  t¤        t%        | j¢                  «      «       | j¦                  r)|j                  t¨        t%        | j¦                  «      «       | jª                  r)|j                  t¬        t%        | jª                  «      «       | j®                  r |j                  t°        | j®                  «       | j²                  r)|j                  t´        t%        | j²                  «      «       | j¶                  r%|j                  dt%        | j¶                  «      «       | j¸                  �rX|j                  tº        | j¸                  «       �n6t	        | t¼        «      rE ||t¾        «      }| jÀ                  �r|j                  t¾        t%        | jÀ                  «      «       �nát	        | tÂ        «      rE ||tÄ        «      }| jÆ                  �r·|j                  tÄ        t%        | jÆ                  «      «       �nŒt	        | tÈ        «      râ ||tÊ        «      }| jÌ                  r)|j                  tÎ        t%        | jÌ                  «      «       | jÐ                  r)|j                  tÒ        t%        | jÐ                  «      «       | jÔ                  r)|j                  tÖ        t%        | jÔ                  «      «       | jØ                  rÄ|j                  tÚ        t%        | jØ                  «      «       nšt	        | tÜ        «      r" ||tÞ        «      }| D ]  }t?        |||«       Œ nht	        | tà        «      r" ||tÞ        «      }| D ]  }t?        |||«       Œ n6t	        | tâ        «      r&tä        ‰v r ||‰j                  tä        «      «      }ny t        | d«      rŽt	        | tà        «      s~| jæ                  }|r||z  }|jé                  «       s[|j                  tê        d|jì                  |jî                  |jð                  |jˆ                  |jò                  |jô                  fz  «       t        | d«      rÀ| jö                  }|�²|jø                  }|� |jú                  �t%        tý        |«      «      ntþ        }|j                  �t         t%        |«      «       |dk7  r"|� |j                  �t        t%        |«      «       	 t%        | �j                  «      }|j                  �t        t%        |«      «       t        | d«      rŠ| �j
                  }|�{|jø                  }|� |jú                  �t%        tý        |«      «      ntþ        }|j                  �t        t%        |«      «       |dk7  r"|� |j                  �t        t%        |«      «       t        | d«      r8| �j                  �+|j                  �t        t%        | �j                  «      «       |S # t<        $ r Y �Œ«w xY wc c}
w c c}
w # �t        $ r Y �Œw xY w)Nr¼  c                 óä   •— ddl m}m} | €	 ||«      } n	 || |«      } ‰j                  «       D ]?  \  }}|dt        t
        t        t        t        fv rŒ%| j                  |t        |«      «       ŒA | S )Nr   )ÚElementÚ
SubElementrO   )r~	  rŠ	  r‹	  ÚitemsrO	  rþ  r  r  r]	  rš  rÝ   )Úxml_treerO   rŠ	  r‹	  rQ  rÌ   r¼  s         €rq   Úsubxmlz_write_node.<locals>.subxmlÓ$  sr   ø€ ß=àÐÙ˜s“|‰Há! (¨CÓ0ˆHØ Ÿ,™,ž.‰JˆC�ØØÜ!Ü"ÜÜÜðñ ð Ø�L‰L˜œc %›jÕ)ð )ð ˆr†   r   )Ú	b64encoderð  ÚPNG)r¸  z
xlink:hrefzdata:image/png;base64,Úutf8Frb  r�  r¢   r¦  r;   zmatrix(%f, %f, %f, %f, %f, %f)r:   r  r9   r5   )Šr'  r¼  rè  rO	  rë   r	  rP	  rš  ÚSVG_ATTR_VERSIONÚSVG_VALUE_VERSIONÚSVG_ATTR_XMLNSÚSVG_VALUE_XMLNSÚSVG_ATTR_XMLNS_LINKÚSVG_VALUE_XLINKÚSVG_ATTR_XMLNS_EVÚSVG_VALUE_XMLNS_EVrE   r´  rÝ   rF   rµ  r   r¶  r   r·  r;  r¿  r    r\  r×  rž   r	  rö  rW	  r>   r¶  r?   r·  r@   r  rA   r€  ré  rV	  r¸  rÑ  r\	  rÔ  r�	  rò  rñ  r+   ÚsaveÚgetvalueÚdecoderî  rX	  rI   rò  rJ   ró  rK   rô  rL   rõ  r5  rU	  r	  r6   r   rY	  r  r¹  rC   r  rZ	  rz  r[	  r�  rÊ  r)   r§  r«  r¢  r¬  r£  r­  r¥  r¯  r9  r°  r¦  r¡  r±  r	  r	  r,   r	  r	  r-   r†  rT	  r‰  r˜  rˆ  r—  rŠ  r™  r©  r¸  rb  rQ	  rX  rÞ  rK	  r;   r/  rþ  r¼   rh  r¶   rÎ  rÏ  r:   rg  rÌ   rû   r(  r  r  r  r  r4  r9   r  r  r5   ré  )r@	  r�	  r&  rŽ	  Úvtr¬   Úchildr�	  rñ  ÚstreamrÎ  r°   r:   r  r  r9   r  r¼  s                    @rq   r	  r	  Ì$  s
  ø€ Üˆt�XÔØ—‘ˆØ—‘—‘Ô!2°FÓ;‰àˆôô( �$œÕØÐÙ˜h¬Ó5ˆHØ�L‰LÔ)Ô+<Ô=Ø�L‰Lœ¬Ô9Ø�L‰LÔ,¬oÔ>Ø�L‰LÔ*Ô,>Õ?á˜h¬Ó5ˆHØ�6Š6Ø�L‰Lœ¤S¨¯©£[Ô1Ø�6Š6Ø�L‰Lœ¤S¨¯©£[Ô1Ø�:Š:Ø�L‰Lœ¬¨T¯Z©Z«Ô9Ø�;Š;Ø�L‰Lœ¬#¨d¯k©kÓ*:Ô;Ø�<Š<Ø�L‰LÔ)¬3¨t¯|©|Ó+<Ô=Øˆð	Ø×'Ñ'ˆBÙÜ˜2“J�Ø—	‘	”Ø�ó ˆEÜ˜˜x¨Õ,ò ä	�Dœ'Ô	"Ù˜(¤OÓ4ˆØ�7Š7Ø�L‰LÔ*¬C°·±«LÔ9Ø�7Š7Ø�L‰LÔ*¬C°·±«LÔ9Ø�7Š7Ø�L‰LÔ*¬C°·±«LÔ9Ø�7‹7Ø�L‰LÔ*¬C°·±«LÖ9Ü	�Dœ&Ô	!Ù˜(¤NÓ3ˆØ�7Š7Ø�L‰LÔ*¬C°·±«LÔ9Ø�7Š7Ø�L‰LÔ*¬C°·±«LÔ9Ø�7‹7Ø�L‰Lœ¬#¨d¯g©g«,Ö7Ü	�Dœ%Õ	 Ù˜(¤MÓ2ˆÝ$Ýà�:‰:Ð!Ù“YˆFØ�J‰J�O‰O˜F¨5ˆOÔ1Ø�L‰LØØ(©°6·?±?Ó3DÓ)E×)LÑ)LÈVÓ)TÐ(UÐVôð �6Š6Ø�L‰Lœ¤S¨¯©£[Ô1Ø�6Š6Ø�L‰Lœ¤S¨¯©£[Ô1Ø�:Š:Ø�L‰Lœ¬¨T¯Z©Z«Ô9Ø�;‹;Ø�L‰Lœ¬#¨d¯k©kÓ*:Ö;Ü	�Dœ*Ô	%Ù˜(¤LÓ1ˆØ�7Š7Ø�L‰Lœ¤c¨$¯'©'£lÔ3Ø�7Š7Ø�L‰Lœ¤c¨$¯'©'£lÔ3Ø�7Š7Ø�L‰Lœ¤c¨$¯'©'£lÔ3Ø�7‹7Ø�L‰Lœ¤c¨$¯'©'£lÖ3Ü	�Dœ$Ô	Ù˜(¤LÓ1ˆØ�‰”] D§F¡F°u FÓ$=Ö>Ü	�Dœ(Ô	#Ù˜(Ô$4Ó5ˆØ�‰ÜØ�H‰H°·²Ó<±¨1˜˜1™˜˜a  !¡˜vÒ&°Ñ<Ó=ö	
ô 
�Dœ'Ô	"Ù˜(¤OÓ4ˆØ�‰ÜØ�H‰H°·²Ó<±¨1˜˜1™˜˜a  !¡˜vÒ&°Ñ<Ó=ö	
ô 
�Dœ$Õ	Ù˜(¤LÓ1ˆØ�6Š6Ø�L‰Lœ¤S¨¯©£[Ô1Ø�6Š6Ø�L‰Lœ¤S¨¯©£[Ô1Ø�7Š7Ø�L‰LÔ*¬C°·±«LÔ9Ø�7Š7Ø�L‰LÔ*¬C°·±«LÔ9Ø�:Š:Ø�L‰Lœ¬¨T¯Z©Z«Ô9Ø�;‹;Ø�L‰Lœ¬#¨d¯k©kÓ*:Ö;Ü	�Dœ$Õ	Ù˜(¤LÓ1ˆØŸ	™	ˆŒØ×ÒØ�L‰LÔ-¬s°4×3CÑ3CÓ/DÔEØ�?Š?Ø�L‰LÔ,¬c°$·/±/Ó.BÔCØ×ÒØ�L‰LÔ.´°D×4EÑ4EÓ0FÔGØ×ÒØ�L‰LÔ.°×0AÑ0AÔBØ�>Š>Ø�L‰LÔ+¬S°·±Ó-@ÔAØ×ÒØ�L‰L˜¬¨D×,<Ñ,<Ó(=Ô>Ø�;‹;Ø�L‰LÔ-¨t¯{©{Ö;Ü	�Dœ$Ô	Ù˜(¤LÓ1ˆØ�9‹9Ø�L‰Lœ¤s¨4¯9©9£~Ö6Ü	�Dœ%Ô	 Ù˜(¤MÓ2ˆØ�:‹:Ø�L‰Lœ¬¨D¯J©J«Ö8Ü	�Dœ'Ô	"Ù˜(¤OÓ4ˆØ×!Ò!Ø�L‰LÔ3´S¸×9OÑ9OÓ5PÔQØ×%Ò%Ø�L‰LÜ.´°D×4NÑ4NÓ0Oôð ×ÒØ�L‰LÔ/´°T×5GÑ5GÓ1HÔIØ×%Ò%Ø�L‰LÔ5´s¸4×;UÑ;UÓ7VÕWÜ	�Dœ#Ô	á˜(¤MÓ2ˆÛˆEÜ˜˜xÐ);Õ<ñ ä	�Dœ%Ô	 á˜(¤MÓ2ˆÛˆEÜ˜˜xÐ);Õ<ñ ä	�Dœ*Ô	%Ü˜6Ñ!Ù˜h¨¯
©
´<Ó(@ÓA‰Hð äˆt�[Ô!¬*°T¼5Ô*AØ�N‰NˆÙØÐ&Ñ&ˆAØ�}‰}ŒØ�L‰LÜ"Ø0°A·C±C¸¿¹¸a¿c¹cÀ1Ç3Á3ÈÏÉÈQÏSÉSÐ3QÑQôô ˆt�XÔØ—‘ˆØÐØ#Ÿ^™^ˆNð Ð%¨&¯,©,Ð*Bô ”C˜“KÔ ä#ð ð
 �L‰L�¬#¨f«+Ô6Ø Ò$¨Ð)CØ—‘Õ4´c¸.Ó6IÔJðÜ" 4×#4Ò#4Ó5�Ø—‘Õ2´C¸Ó4EÔFô
 ˆt�VÔØ�yŠyˆØÐØŸ<™<ˆLð Ð#¨¯
©
Ð(>ô ”C˜“I”ä#ð ð
 �L‰L�¬¨D«	Ô2Ø˜sÒ" |Ð'?Ø—‘Õ2´C¸Ó4EÔFô ˆt�TÔØ�7Š7ÐØ�L‰L�¤c¨$¯'ª'£lÔ3à€Oøôq ò 	Úð	üòv =ùò =øõB "ò Úðús0   Ç$+z. Û z>Ü'{ö6{ ú.	z;ú:z;û
{û{c                 óâ   — t        | «      D ]  \  }}t        || ||dz   «       Œ |�I|dk(  rdd|z  z   |_        ndd|z  z   ||dz
     _        |t	        |«      dz
  k(  rdd|dz
  z  z   | _        y y y )Nr¢   r   Ú
Ú	)rM  r„	  r)   Útailr¿   )rf  r=	  rÍ  r�  rÊ  r@	  s         rq   r„	  r„	  ¼%  s�   € Ü˜WÖ%‰ˆˆ4Ü�d˜G Q¨°©	Õ2ð &àÐØ�AŠ:Ø $¨¡,Ñ/ˆF�Kà%)¨T°E©\Ñ%:ˆF�5˜1‘9ÑÔ"Ø”C˜“K !‘OÒ#Ø 4¨5°1©9Ñ#5Ñ6ˆG�Lð $ð r†   r{  rñ  )Nr¶  r   )Õrd	  Úcollections.abcr   rJ  Úcollectionsr   Úmathr   r   r   r	   r
   r   r   r   r   r   r   r   r~	  r   r   r   ÚSVGELEMENTS_VERSIONr|  r,  Ú	max_depthr[  rP	  r’	  r“	  r”	  r•	  r–	  r—	  r˜	  r™	  r•  r–  r¶  r·  r¿  ÚSVG_VIEWBOX_TRANSFORMrU	  rQ	  r[	  rV	  rW	  rX	  rY	  rZ	  rÊ  r^	  r\	  r	  r	  ÚSVG_TAG_METADATAr]	  rR	  r4	  rS	  rT	  rO	  ré  r	  rH	  rG	  r  r  r  r  r  rþ  rL	  rI	  rJ	  r`	  r„  r¶  r·  r  r€  r¸  r  r¸  r´  rµ  ÚSVG_ATTR_X0ÚSVG_ATTR_Y0rò  ró  rô  rõ  r²  r³  rK	  rÉ  r«  r¬  r­  r®  r¯  r°  r±  Ú SVG_ATTR_TEXT_ALIGNMENT_BASELINEÚSVG_ATTR_TEXT_DOMINANT_BASELINEr—  r˜  r™  r(  r€  ÚSVG_UNIT_TYPE_OBJECTBOUNDINGBOXra	  ÚSVG_RULE_EVENODDrô  r÷  rû  rÿ  r  r  r  rù  rú  rý  rþ  r(  rN	  r)  Ú
PATTERN_WSÚPATTERN_COMMAÚPATTERN_COMMAWSPÚPATTERN_FLOATÚPATTERN_LENGTH_UNITSÚPATTERN_ANGLE_UNITSÚPATTERN_TIME_UNITSÚPATTERN_FREQUENCY_UNITSÚPATTERN_RESOLUTION_UNITSÚPATTERN_PERCENTÚPATTERN_TRANSFORMÚPATTERN_TRANSFORM_UNITSÚcompiler)	  rÜ  rÃ  r3  rò  ró  r‘  r“  r–  r˜  rÞ   Ú	MULTILINErf	  rg	  rº  r¾  Ú	svg_parser¹  r‰   Ú	num_parser’   Ú
flag_parser˜   r{   Úobjectr×   r^  r1  r•   rÀ  r\  rJ  rÞ  rö  r  r.  r~  re  rã  ró  rd  r  r  r9  rê  r5  rz  r°  rö  ré  rî  r
  r   r  r  r(  rX  rb  r~  r†  r�  ÚSVGTextrÑ  ÚSVGImager	  ÚSVGDescr	  r	  rò  rî  r	  r„	  rm   r†   rq   Ú<module>rÆ	     sC  ðó 
ð,Ý/õ ÷÷ ÷ ó õ ,ðÝð
ð Ð à€	Ø€à€	ð €Ø€ØÐ ØÐ Ø€Ø.€Ø#Ð Ø0€ØÐ Ø8Ð à1€
Ø€Ø€Ø€ØÐ Ø+Ð Ø€Ø€Ø€Ø€Ø€Ø€ØÐ Ø€Ø€Ø€Ø€Ø€Ø€ØÐ Ø€Ø€Ø€ØÐ Ø€à Ð Ø€Ø€ØÐ Ø€Ø€Ø&Ð Ø€Ø*Ð Ø&Ð Ø Ð Ø€Ø€Ø Ð Ø Ð Ø)Ð ØÐ ØÐ ØÐ ØÐ Ø€Ø€Ø4Ð Ø€
Ø€
Ø€Ø€Ø€Ø€Ø€Ø€Ø€Ø€Ø€Ø€Ø$Ð Ø"Ð Ø&Ð Ø$Ð Ø&Ð Ø Ð Ø$Ð Ø#7Ð  Ø"5Ð Ø!6Ð Ø/Ð Ø'Ð à(Ð à/Ð Ø"5Ð àÐ ØÐ àÐ Ø%Ð ØÐ ØÐ ØÐ ØÐ ØÐ Ø(Ð Ø(Ð Ø Ð Ø Ð à€Ø(Ð à3Ð à€
Ø(€Ø/Ð Ø;€ØIÐ Ø)Ð ØÐ Ø"Ð Ø*Ð Ø€àØ	ñ
àñð 
ñ
ð  ñ	 ð
 
ñ
ð  ñ ð 
ñ
ð ñð 
ñ	
ð ñ
ð 
ñ
ð ñð 
ñ
ð ñð 
ñ
ð  ñ!ð" 
ñ#
ð$ ñ%ð& 
ñ'
ð( ñ)ð ð0 ˜3ÑÐ!4Ñ4°sÑ:¸_ÑLð ð ˆB�JŠJÐ'Ó(€	Ø�—’Ð-Ó.€Øˆb�jŠj˜Ó'€Ø�2—:“:Ú!¢=²-Ð@óÐ ð &˜2Ÿ:›:Ú 1²:Ð>óÐ ð '˜BŸJ›JÚ"¢JÒ0GÐHóÐ ð �"—*’*Ð6Ó7€Ø�"—*“*â’m¢]²MðCó€ð %˜"Ÿ*›*â’m¢]²MðCóÐ ð �"—*“*â’m¢]²MðCó€ð ˆr�zŠzÐ.°Ñ>Ó?€Ø�B—J’JÐ:¸B¿LºLÓIÐ Ø�"—*’*Ð;Ó<€Ø�—’ð	ó€ð& #˜Ÿ
š
ØaóÐ ð 4°fÐ>NÐ5OÐP€	Ø	ˆ�Š�C—H’HÑG¹YÓGÓGÓ	H€Ø�}Ð%Ð'9¸FÐDTÐ;UÐV€	Ø	ˆ�Š�C—H’HÑG¹YÓGÓGÓ	H€Ø &Ð*:Ð!;Ð<€
Ø
ˆ"�*Š*�S—X’XÑI¹jÓIÓIÓ
J€÷pñ pôf	UˆVô Uôpy1ˆFô y1÷xNñ NôbL)ˆEô L)÷^KTñ KT÷\Zñ Zôz<�ô <÷~R$ñ R$÷j\ñ \ô~I'ˆJ˜ }ô I'÷X
`ñ `ôF	]3ˆ;ô ]3ô@NˆKô Nô6P"ˆ[ô P"ôfˆFô ô"7ˆ6ô 7ôs�eô sôlN�%ô Nôbrˆ%ô rôj_Nˆ5�/ô _NôDL
ˆ5ô L
ô^
dJ�%ô dJôN'ˆkô 'ô$'ˆ[ô 'ô$U�ô Uôpt%�ô t%ôn'ˆzô 'ô$'ˆjô '÷$^ñ ^ôBf
ˆJ˜ tô f
ôRp
ˆ*�m Tô p
ôf
ˆz˜4ô 
ô2Nˆj˜$ô Nôbx
ˆ:�} mô x
ðv €ô*ˆJ˜ }ô *ðD €ô-ˆ:ô -ð: €ô/ˆJô /ô:vˆ%ô vòr;óó,mô`	7øðkm ò ,ß+Ð+ð,ûð, ò Ýà
ˆq‰&ƒCðús"   †T7 µU	 Ô7UÕUÕ	UÕU