Ë
    |D™j™¹ ã                   ód$  — d dl mZ d dl mZ d dl mZ d dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Zd dlmZmZ d dlmZmZ d dlmZmZmZmZ d dlZd dlmZmZ d d	lmZ d d
lmZ d dlm Z  d dl!m"Z" dZ#e"Z$dZ%ddddœZ&e&jO                  «       Z(de(d<   e&jO                  «       Z)de)d<    ejT                  d«      Z+ddddddddd d!d"d#d$d%d&d'œZ,e,d(   e,d)   e,d*   e,d+   e,d,   e,d-   e,d.   e,d/   e,d0   e,d1   e,d2   e,d3   e,d4   gZ-g d5¢Z.i d6d7“d8d9“d:d;“d<d=“d>d?“d@dA“dBdC“dDdE“dFdG“dHdI“dJdK“dLdM“dNdO“dPdQ“dRdS“dTdU“dVdW“i dXdY“dZd[“d\d]“d^d;“d_d`“dadb“dcdd“dedf“dgdh“didf“djdk“dldm“dndo“dpdq“drds“dtdu“dvdw“¥i dxdy“dzd{“d|d}“d~d}“dd€“d�d‚“dƒd„“d…d†“d‡dˆ“d‰dˆ“dŠd‹“dŒd�“dŽd�“d�d‘“d’d““d”d•“d–d—“¥i d˜d™“dšd›“dœd�“džd�“dŸd “d¡d¢“d£d¤“d¥d¦“d§d¨“d©dª“d«d¬“d­d®“d¯d°“d±d²“d³d´“dµd¶“d·d¸“¥i d¹dº“d»d¼“d½d¾“d¿dÀ“dÁdÂ“dÃdÀ“dÄdÅ“dÆdÇ“dÈdÉ“dÊdË“dÌdÍ“dÎdÍ“dÏdÐ“dÑdÒ“dÓdÔ“dÕdÖ“d×dØ“¥i dÙd““dÚdÛ“dÜdÝ“dÞdß“dàdá“dâdã“dädå“dædç“dèdé“dêdë“dìdí“dîdï“dðdñ“dòdó“dôdõ“död÷“dødù“¥i dúdû“düdý“dþdÿ“�d �d“�d�d“�d�d“�d�d“�d�d	“�d
�d“�d�d“�d�d“�d�d“�d�d“�d�d“�d�d“�d�d“�d�d“¥i �d�d“�d�d“�d �d!“�d"�d#“�d$�d%“�d&�d'“�d(�d)“�d*�d+“�d,�d-“�d.�d/“�d0�d1“�d2�d3“�d4�d5“�d6�d5“�d7�d8“�d9�d:“�d;�d<“¥�d=�d>�d?�d@�dA�dB�dC�dD�dE�dF�dG�dHœ¥Z/i �dI�dJ“�dK�dL“�dM�dN“�dO�dP“�dQ�dR“�dS�dT“�dU�dV“�dW�dX“�dY�dZ“�d[�dP“�d\�d]“�d^�dN“�d_�dL“�d`�dP“�da�d]“�db�dL“�dc�dd“i �de�df“�dg�df“�dh�df“�di�df“�dj�dk“�dl�df“�dm�dn“�do�dL“�dp�dL“�dq�dL“�dr�dL“�ds�dL“�dt�d]“�du�dv“�dw�dP“�dx�d]“�dy�dL“¥i �dz�dL“�d{�d|“�d}�d~“�d�d€“�d��d‚“�dƒ�d]“�d„�d]“�d…�d†“�d‡�dL“�dˆ�df“�d‰�dŠ“�d‹�df“�dŒ�d�“�dŽ�d]“�d��dP“�d��d]“�d‘�d†“¥�dL�dL�d]�d’œ¥Z0�d“„ Z1�d”„ Z2 ejT                  �d•«      Z3 ejT                  �d–«      Z4 ejT                  �d—«      Z5 ejT                  �d˜«      Z6 G �d™„ �dše7«      Z8 G �d›„ �dœe7«      Z9�dÁ�d�„Z:g �dž¢a;�dÁ�dŸ„Z<�d „ Z=�dû�d¡„Z>�d¢„ Z?�d£„ Z@�d¤„ ZA�d¥„ ZB�d¦„ ZC�d§„ ZD�d¨„ ZE�d©„ ZF�dª„ ZG�d«„ ZH�d¬„ ZI�d­„ ZJ�d®„ ZK�d¯„ ZL�d°„ ZM�d±„ ZN�d²„ ZO�d³„ ZP�d´„ ZQ�dµ„ ZR�d¶„ ZS�d·„ ZT�d¸„ ZU�d¹„ ZV�dº„ ZW�d»„ ZX�dü�d½„ZY�d¾„ ZZ e�d¿g �dÀ¢«      Z[�dÁ e\e[jº                  «      z  e[j¼                  __        g  e[�dÂ�dÃ�dÄg�¬Å«      ‘ e[�dÆ�dÇ�d_g�¬Å«      ‘ e[�dÈ�dÇ�dÉ�dÊg�¬Å«      ‘ e[�dË�dÇ�dsg�¬Å«      ‘ e[�dÌ�dÃ�dsg�¬Å«      ‘ e[�dÍ�dÇ�dÎg�¬Å«      ‘ e[�dÏ�dÃ�dÎg�¬Å«      ‘ e[�dÐ�dÃ�d_g�¬Å«      ‘ e[�dÑ�dÒg �dÓ¢�¬Å«      ‘ e[�dÔ�dÕe8jÀ                  �dÖg�¬Å«      ‘ e[�d×�dÕe8jÀ                  �dÖg�¬Å«      ‘ e[�dØ�dL�dÖg�¬Å«      ‘ e[�dÙ�dÚg �dÛ¢�¬Å«      ‘ e[�dÜd g �dÝ¢�¬Å«      ‘ e[�dÞd g �dÝ¢�¬Å«      ‘ e[�dßd �dà�dág�¬Å«      ‘ e[�dâd �dãg�¬Å«      ‘ e[�däd �dãg�¬Å«      ‘ e[�dåd �dãg�¬Å«      ‘ e[�dæd �dãg�¬Å«      ‘ e[�dçd �dè�dég�¬Å«      ‘ e[�dêd �dè�dég�¬Å«      ‘ e[�dë�dì�dog�¬Å«      ‘ e[�díd �dog�¬Å«      ‘ e[�dîd �dog�¬Å«      ‘ e[�dï�dð�dog�¬Å«      ‘ e[�dñ�dð�dog�¬Å«      ‘ e[�dòd �dog�¬Å«      ‘ e[�dó�dôg �dõ¢�¬Å«      ‘ e[�död �d÷g�¬Å«      ‘ e[�dø�dù�d÷g�¬Å«      ‘ e[�dô�dú�d÷g�¬Å«      ‘ e[�dÜ�dûe8jÀ                  �d_�dsg«      ‘ e[�dÜ�düe8jÂ                  �d_�dsg�dý„ �¬þ«      ‘ e[�dÞ�dûe8jÀ                  �d_�dsg«      ‘ e[�dÞ�düe8jÂ                  �d_�dsg�dÿ„ �¬þ«      ‘ e[�dÔ�d e8jÀ                  �d_�dsg«      ‘ e[�dÔ�de8jÂ                  �d_�dsg�d„ �¬þ«      ‘ e[�d×�d e8jÀ                  �d_�dsg«      ‘ e[�d×�de8jÂ                  �d_�dsg�d„ �¬þ«      ‘ e[�dâd �dÉg�¬Å«      ‘ e[�däd �dÉg�¬Å«      ‘ e[�dæd �dÉg�¬Å«      ‘ e[�då�dÕe8jÀ                  �dÉg�¬Å«      ‘ e[�då�de8jÂ                  �dÉg�d„ �¬«      ‘ e[�d�dÊg�d„ �¬«      ‘ e[�d	�dÊg�d
„ �¬«      ‘ e[�d�de8jÀ                  �dÊg�¬Å«      ‘ e[�d�de8jÂ                  �dÊg�d„ �¬«      ‘ e[�dç�de8jÀ                  �dÊg�¬Å«      ‘ e[�dç�de8jÂ                  �dÊg�d„ �¬«      ‘ e[�dê�de8jÀ                  �dÊg�¬Å«      ‘ e[�dê�de8jÂ                  �dÊg�d„ �¬«      ‘ e[�d�d�dÉ�dÊg�¬Å«      ‘ e[�d�dg �d¢�¬Å«      ‘ e[�dd �dg�¬Å«      ‘ e[�d�d|g �d¢�¬Å«      ‘ e[�d�d�dg�¬Å«      ‘ e[�d�d�dg�¬Å«      ‘ e[�d�d�dg�¬Å«      ‘ e[�dd �dg�¬Å«      ‘ e[�d�dg �d¢�¬Å«      ‘ e[�d d g �d¢�¬Å«      ‘ e[�d!d �d"g�¬Å«      ‘ e[�d#d �d"g�¬Å«      ‘ e[�d$d �d"g�¬Å«      ‘ e[�d%d �d"g�¬Å«      ‘ e[�d&�df�d'g�¬Å«      ‘ e[�d(�d�d)g�¬Å«      ‘ e[�d*d g �d¢�¬Å«      ‘ e[�d+�d,�d"g�¬Å«      ‘ e[�d+�d-�d.g�¬Å«      ‘ e[�d/�d0�dg�¬Å«      ‘ e[�d1d �dág�¬Å«      ‘ e[�d2d �dág�¬Å«      ‘ e[�d3d �dág�¬Å«      ‘ e[�d4�dÒ�dg�¬Å«      ‘ e[�d5�d|�d.g�¬Å«      ‘ e[�d6d �d7g�¬Å«      ‘ e[�d8d �d)g�¬Å«      ‘ e[�d9�d�d:g�¬Å«      ‘ e[�d;�d�d:�dág�¬Å«      ‘ e[�d<�d|�d=g�¬Å«      ‘ e[�d>�d?�d)g�¬Å«      ‘ e[�d@�d�d�d:g�¬Å«      ‘ e[�dA�dB�dCg�¬Å«      ‘ e[�dA�dD�d)g�¬Å«      ‘ e[�dE�dF�d7g�¬Å«      ‘ e[�dG�dF�d7g�¬Å«      ‘Zbg Zc eed«      ZeebD ]E  ZfefjÎ                  €ecjÑ                  ef«       Œ!efjÎ                  D ]  Zieeei   jÑ                  ef«       Œ ŒG �dH„ Zj�dI„ Zk el«       f�dJ„Zm ejT                  �dK«      Zn ejT                  �dL«      Zo�dM„ Zp�dN„ Zq�dO„ Zr�dP„ Zs�dQ„ Zt�dR„ Zu�dS„ Zv�dT„ Zw�dU„ Zx�dV„ Zy�d¼g g f�dW„Zz�dX„ Z{�dý�dY„Z|�dZ„ Z}�d[„ Z~�d\„ Z�d]„ Z€�d^„ Z��d_„ Z‚�d`„ Zƒ�da„ Z„�dÁ�db„Z…�dc„ Z†g �dd¢Z‡g �de¢ eˆe.«      z   �dfgz   Z‰ e�dg„  eŠe‰«      D � �ci c]  \  } }|| “Œ
 c}} «      Z‹�dh„ ZŒ�di„ Z��dþ�dj„ZŽ�dÁ�dk„Z��dÁ�dl„Z� G �dm„ �dne�j"                  «      Z’ e�j&                  �do�dp e’�dq�¬r«      e$�¬s«      Z”e”�j+                  �dt�due–�dve�j.                  �¬w«       e”�j+                  �dx�dy�dz�d{�d¼�d|�¬}«       e”�j+                  �d~�d�dz�d€�d¼�d��¬}«       e”�j+                  �d‚�du�dƒ�d„�d…�¬†«       e”�j+                  �d‡�du�dˆ�d‰�dŠ�¬†«        e�j0                  e”�d‹«      Z™e™�j+                  �dŒ�due–�dv�d��dŽ�d��¬�«       e™�j+                  �d‘�due–�d’�d“�dŽ�d”�¬�«       e™�j+                  �d•�d–�d—�d˜�d™�¬}«       e™�j+                  �dš�d–�d›�d˜�dœ�¬}«       e™�j+                  �d��d–�dž�d˜�dŸ�¬}«       e™�j+                  �d �dz�d¡�d¼�d¢�¬}«       e™�j+                  �d£�dz�d¤�d¼�d¥�¬}«       e™�j+                  �d¦�dz�d§�d¼�d¨�¬}«       e™�j+                  �d©�dz�dª�d˜�d«�¬}«       e™�j+                  �d¬�d–�dª�d˜�d­�¬}«       e”�j5                  e™«        e�j0                  e”�d®«      Z›e›�j+                  �d¯�dz�d°�d¼�d±�¬}«       e›�j+                  �d²�dz�d³�d¼�d´�¬}«       e›�j+                  �dµ�dz�d¶�d¼�d·�¬}«       e›�j+                  �d¸�dz�d¹�d¼�dº�¬}«       e›�j+                  �d»�dz�d¼�d¼�d½�¬}«       e›�j+                  �d¾�dz�d¿�d¼�dÀ�¬}«       e›�j+                  �dÁ�d–�dÂ�d˜�dÃ�¬}«       e›�j+                  �dÄ�dz�dÅ�d¼�dÆ�¬}«       e”�j5                  e›«        e�j0                  e”�dÇ«      Zœeœ�j+                  �dÈ�du�dÉ�dÊ�dË�dÌ�dÍ�¬�«       eœ�j+                  �dÎ�due–�dÏ�d�dŽ�dÐ�¬�«       eœ�j+                  �dÑ�d–�dÒ�d˜�dÓ�¬}«       eœ�j+                  �dÔ�dz�dÕ�d¼�dÖ�¬}«       e”�j5                  eœ«        e�j0                  e”�d×«      Z�e��j+                  �dØ�dz�dÙ�d¼�dÚ�¬}«       e��j+                  �dÛ�dz�dÜ�d¼�dÝ�¬}«       e��j+                  �dÞ�du�dÉ�dß�dà�dá�dâ�¬�«       e��j+                  �dã�dz�dä�d¼�då�¬}«       e��j+                  �dæ�du�dÉ�dç�dè�dé�¬ê«       e��j+                  �dë�du�dÉ�dì�dá�dí�¬ê«       e”�j5                  e�«        e�j0                  e”�dî«      Zžež�j+                  �dï�dz�dð�d¼�dñ�¬}«       e”�j5                  ež«       �dÿ�dò„ZŸ�dó„ Z �dÁ�dô„Z¡�d �dõ„Z¢�dö„ Z£�d÷„ Z¤�dø„ Z¥�dù„ Z¦e§�dúk(  r e¦«        yyc c}} w (  é    )Údivision)Úprint_function)Úabsolute_importN)ÚNodeÚNotFoundErr)Ú
namedtupleÚdefaultdict)ÚContextÚDecimalÚInvalidOperationÚ
getcontext)ÚrangeÚurllib)Ú
svg_parser)Úsvg_transform_parser)ÚparseCssString)Ú__version__Úscourz+Copyright Jeff Schiller, Louis Simard, 2010z&lt;z&gt;z&amp;)ú<ú>ú&z&apos;ú'z&quot;ú"z\s*[\s,]\s*úhttp://www.w3.org/2000/svgúhttp://www.w3.org/1999/xlinkz2http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtdz+http://www.inkscape.org/namespaces/inkscapez*http://ns.adobe.com/AdobeIllustrator/10.0/zhttp://ns.adobe.com/Graphs/1.0/z1http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/z"http://ns.adobe.com/Variables/1.0/z#http://ns.adobe.com/SaveForWeb/1.0/z&http://ns.adobe.com/Extensibility/1.0/zhttp://ns.adobe.com/Flows/1.0/z)http://ns.adobe.com/ImageReplacement/1.0/z/http://ns.adobe.com/GenericCustomNamespace/1.0/zhttp://ns.adobe.com/XPath/1.0/z'http://www.bohemiancoding.com/sketch/ns)ÚSVGÚXLINKÚSODIPODIÚINKSCAPEÚADOBE_ILLUSTRATORÚADOBE_GRAPHSÚADOBE_SVG_VIEWERÚADOBE_VARIABLESÚ	ADOBE_SFWÚADOBE_EXTENSIBILITYÚADOBE_FLOWSÚADOBE_IMAGE_REPLACEMENTÚADOBE_CUSTOMÚADOBE_XPATHÚSKETCHr   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   )Gzalignment-baselineúbaseline-shiftÚclipú	clip-pathú	clip-ruleÚcolorúcolor-interpolationúcolor-interpolation-filtersúcolor-profilezcolor-renderingÚcursorÚ	directionÚdisplayzdominant-baselineúenable-backgroundÚfillúfill-opacityú	fill-ruleÚfilterúflood-colorúflood-opacityÚfontúfont-familyú	font-sizeúfont-size-adjustúfont-stretchú
font-styleúfont-variantúfont-weightúglyph-orientation-horizontalzglyph-orientation-verticalzimage-renderingÚkerningúletter-spacingúlighting-colorÚmarkerú
marker-endú
marker-midúmarker-startÚmaskÚopacityÚoverflowúpointer-eventsúshape-renderingú
stop-colorústop-opacityÚstrokeústroke-dasharrayústroke-dashoffsetústroke-linecapústroke-linejoinústroke-miterlimitústroke-opacityústroke-widthútext-anchorútext-decorationútext-renderingúunicode-bidiÚ
visibilityúword-spacingúwriting-modeúaudio-levelzbuffered-renderingúdisplay-alignzline-incrementúsolid-colorúsolid-opacityú
text-alignúvector-effectúviewport-fillúviewport-fill-opacityÚ	alicebluezrgb(240, 248, 255)Úantiquewhitezrgb(250, 235, 215)Úaquazrgb( 0, 255, 255)Ú
aquamarinezrgb(127, 255, 212)Úazurezrgb(240, 255, 255)Úbeigezrgb(245, 245, 220)Úbisquezrgb(255, 228, 196)Úblackzrgb( 0, 0, 0)Úblanchedalmondzrgb(255, 235, 205)Úbluezrgb( 0, 0, 255)Ú
bluevioletzrgb(138, 43, 226)Úbrownzrgb(165, 42, 42)Ú	burlywoodzrgb(222, 184, 135)Ú	cadetbluezrgb( 95, 158, 160)Ú
chartreusezrgb(127, 255, 0)Ú	chocolatezrgb(210, 105, 30)Úcoralzrgb(255, 127, 80)Úcornflowerbluezrgb(100, 149, 237)Úcornsilkzrgb(255, 248, 220)Úcrimsonzrgb(220, 20, 60)ÚcyanÚdarkbluezrgb( 0, 0, 139)Údarkcyanzrgb( 0, 139, 139)Údarkgoldenrodzrgb(184, 134, 11)Údarkgrayzrgb(169, 169, 169)Ú	darkgreenzrgb( 0, 100, 0)ÚdarkgreyÚ	darkkhakizrgb(189, 183, 107)Údarkmagentazrgb(139, 0, 139)Údarkolivegreenzrgb( 85, 107, 47)Ú
darkorangezrgb(255, 140, 0)Ú
darkorchidzrgb(153, 50, 204)Údarkredzrgb(139, 0, 0)Ú
darksalmonzrgb(233, 150, 122)Údarkseagreenzrgb(143, 188, 143)Údarkslatebluezrgb( 72, 61, 139)Údarkslategrayzrgb( 47, 79, 79)ÚdarkslategreyÚdarkturquoisezrgb( 0, 206, 209)Ú
darkvioletzrgb(148, 0, 211)Údeeppinkzrgb(255, 20, 147)Údeepskybluezrgb( 0, 191, 255)Údimgrayzrgb(105, 105, 105)ÚdimgreyÚ
dodgerbluezrgb( 30, 144, 255)Ú	firebrickzrgb(178, 34, 34)Úfloralwhitezrgb(255, 250, 240)Úforestgreenzrgb( 34, 139, 34)Úfuchsiazrgb(255, 0, 255)Ú	gainsborozrgb(220, 220, 220)Ú
ghostwhitezrgb(248, 248, 255)Úgoldzrgb(255, 215, 0)Ú	goldenrodzrgb(218, 165, 32)Úgrayzrgb(128, 128, 128)ÚgreyÚgreenzrgb( 0, 128, 0)Úgreenyellowzrgb(173, 255, 47)Úhoneydewzrgb(240, 255, 240)Úhotpinkzrgb(255, 105, 180)Ú	indianredzrgb(205, 92, 92)Úindigozrgb( 75, 0, 130)Úivoryzrgb(255, 255, 240)Úkhakizrgb(240, 230, 140)Úlavenderzrgb(230, 230, 250)Úlavenderblushzrgb(255, 240, 245)Ú	lawngreenzrgb(124, 252, 0)Úlemonchiffonzrgb(255, 250, 205)Ú	lightbluezrgb(173, 216, 230)Ú
lightcoralzrgb(240, 128, 128)Ú	lightcyanzrgb(224, 255, 255)Úlightgoldenrodyellowzrgb(250, 250, 210)Ú	lightgrayzrgb(211, 211, 211)Ú
lightgreenzrgb(144, 238, 144)Ú	lightgreyÚ	lightpinkzrgb(255, 182, 193)Úlightsalmonzrgb(255, 160, 122)Úlightseagreenzrgb( 32, 178, 170)Úlightskybluezrgb(135, 206, 250)Úlightslategrayzrgb(119, 136, 153)ÚlightslategreyÚlightsteelbluezrgb(176, 196, 222)Úlightyellowzrgb(255, 255, 224)Úlimezrgb( 0, 255, 0)Ú	limegreenzrgb( 50, 205, 50)Úlinenzrgb(250, 240, 230)ÚmagentaÚmaroonzrgb(128, 0, 0)Úmediumaquamarinezrgb(102, 205, 170)Ú
mediumbluezrgb( 0, 0, 205)Úmediumorchidzrgb(186, 85, 211)Úmediumpurplezrgb(147, 112, 219)Úmediumseagreenzrgb( 60, 179, 113)Úmediumslatebluezrgb(123, 104, 238)Úmediumspringgreenzrgb( 0, 250, 154)Úmediumturquoisezrgb( 72, 209, 204)Úmediumvioletredzrgb(199, 21, 133)Úmidnightbluezrgb( 25, 25, 112)Ú	mintcreamzrgb(245, 255, 250)Ú	mistyrosezrgb(255, 228, 225)Úmoccasinzrgb(255, 228, 181)Únavajowhitezrgb(255, 222, 173)Únavyzrgb( 0, 0, 128)Úoldlacezrgb(253, 245, 230)Úolivezrgb(128, 128, 0)Ú	olivedrabzrgb(107, 142, 35)Úorangezrgb(255, 165, 0)Ú	orangeredzrgb(255, 69, 0)Úorchidzrgb(218, 112, 214)Úpalegoldenrodzrgb(238, 232, 170)Ú	palegreenzrgb(152, 251, 152)Úpaleturquoisezrgb(175, 238, 238)Úpalevioletredzrgb(219, 112, 147)Ú
papayawhipzrgb(255, 239, 213)Ú	peachpuffzrgb(255, 218, 185)Úperuzrgb(205, 133, 63)Úpinkzrgb(255, 192, 203)Úplumzrgb(221, 160, 221)Ú
powderbluezrgb(176, 224, 230)Úpurplezrgb(128, 0, 128)Úredzrgb(255, 0, 0)Ú	rosybrownzrgb(188, 143, 143)Ú	royalbluezrgb( 65, 105, 225)Úsaddlebrownzrgb(139, 69, 19)Úsalmonzrgb(250, 128, 114)Ú
sandybrownzrgb(244, 164, 96)Úseagreenzrgb( 46, 139, 87)Úseashellzrgb(255, 245, 238)Úsiennazrgb(160, 82, 45)Úsilverzrgb(192, 192, 192)Úskybluezrgb(135, 206, 235)Ú	slatebluezrgb(106, 90, 205)Ú	slategrayzrgb(112, 128, 144)Ú	slategreyÚsnowzrgb(255, 250, 250)Úspringgreenzrgb( 0, 255, 127)Ú	steelbluezrgb( 70, 130, 180)zrgb(210, 180, 140)zrgb( 0, 128, 128)zrgb(216, 191, 216)zrgb(255, 99, 71)zrgb( 64, 224, 208)zrgb(238, 130, 238)zrgb(245, 222, 179)zrgb(255, 255, 255)zrgb(245, 245, 245)zrgb(255, 255, 0)zrgb(154, 205, 50))ÚtanÚtealÚthistleÚtomatoÚ	turquoiseÚvioletÚwheatÚwhiteÚ
whitesmokeÚyellowÚyellowgreenr+   Úbaseliner-   Únoner.   Únonzeror/   z#000r1   Ú	linearRGBr0   ÚsRGBr4   Últrr5   Úinliner6   Ú
accumulater7   r8   Ú1r9   r:   r;   r<   r@   r?   ÚmediumrA   ÚnormalrB   rC   rD   rE   Ú0degrG   rH   z#fffrI   rL   rK   rJ   rM   rN   rP   ÚvisiblePaintedrR   rS   rT   rU   rV   Ú0rW   ÚbuttrX   ÚmiterrY   Ú4rZ   r[   r\   Ústartr]   r_   r`   Úvisiblera   rb   zlr-tbrc   re   rf   rg   )rh   ri   rj   c                 ó6   — | dk  xr |dk  xs | dk\  xr |dk\  S ©Nr   © )ÚaÚbs     úW/var/www/html/Astrologybackend/backend/venv/lib/python3.12/site-packages/scour/scour.pyÚis_same_signr  ™  s'   € Ø�‰FÒ�q˜A‘vÒ5 1¨¡6Ò#4¨a°1©fÐ5ó    c                 ó€   — t        | |«      r2t        ||«      r&|| z  ||z  z
  }t        j                  d|z   «      dk(  S y)Né   F)r  ÚscouringContextÚplus)Úx1Úy1Úx2Úy2Údiffs        r  Úis_same_directionr"  �  sC   € Ü�B˜Ô¤¨R°Ô 4Ø�"‰u�r˜"‘u‰}ˆÜ×#Ñ# A¨¡HÓ-°Ñ2Ð2àr  z[-+]?(\d*\.?)?\d+[eE][-+]?\d+z[-+]?(\d*\.?)?\d+z[eE]([-+]?\d+)z!(em|ex|px|pt|pc|cm|mm|in|%){1,1}$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eeeee	e
eeedœ
Zededededede	de
dedededi
Zd„ Zd„ Z ee«      Z ee«      Zy)ÚUnitéÿÿÿÿr   r  é   é   é   é   é   é   é   é	   )
Ú ú%ÚpxÚptÚpcÚemÚexÚcmÚmmÚinr.  r/  r0  r1  r2  r3  r4  r5  r6  r7  c                 óŒ   — | €t         j                  S 	 t         j                  |    S # t        $ r t         j                  cY S w xY w©N)r$  ÚNONEÚs2uÚKeyErrorÚINVALID)Úunitstrs    r  ÚgetzUnit.getÖ  s>   € Øˆ?Ü—9‘9Ðð	 Ü—8‘8˜GÑ$Ð$øÜò 	 Ü—<‘<Òð	 ús   ”' §AÁAc                 óH   — 	 t         j                  |    S # t        $ r Y yw xY w)Nr=  )r$  Úu2sr<  )Úunitints    r  ÚstrzUnit.strß  s(   € ð	Ü—8‘8˜GÑ$Ð$øÜò 	Ùð	ús   ‚ •	! !N)Ú__name__Ú
__module__Ú__qualname__r=  r:  ÚPCTÚPXÚPTÚPCÚEMÚEXÚCMÚMMÚINr;  rA  r?  rC  Ústaticmethodr  r  r  r$  r$  «  s»   „ à€GØ€DØ
€CØ	
€BØ	
€BØ	
€BØ	
€BØ	
€BØ	
€BØ	
€BØ	
€Bð ØØØØØØØØØñ€Cð 	ˆbØˆSØ
ˆDØ
ˆDØ
ˆDØ
ˆDØ
ˆDØ
ˆDØ
ˆDØ
ˆDð€Cò òñ �sÓ
€CÙ
�sÓ
�Cr  r$  c                   ó   — e Zd Zd„ Zy)Ú	SVGLengthc                 ó  — 	 t        |«      | _        t        | j                  «      | j                  k(  rt        | j                  «      | _        t        j                  | _        y # t        $ �r• d| _        d}t        j                  |«      }|�‰t        j                  |«      }t        j                  ||j                  d«      «      }t        |j                  d«      «      dt        |j                  d«      «      z  z  | _        |j                  d«      }nGt        j                  |«      }|�0t        |j                  d«      «      | _        |j                  d«      }t        | j                  «      | j                  k(  rt        | j                  «      | _        |dk7  rCt        j                  ||«      }|�It        j!                  |j                  d«      «      | _        Y y d| _        t        j"                  | _        Y y Y y w xY w)Nr   é
   r  )ÚfloatÚvalueÚintr$  r:  ÚunitsÚ
ValueErrorÚ	scinumberÚmatchÚnumberÚsciExponentÚsearchr  ÚgroupÚendÚunitr?  r=  )ÚselfrC  Ú	unitBeginÚscinumÚnumMatchÚexpMatchÚ	unitMatchs          r  Ú__init__zSVGLength.__init__ë  s�  € ð&	*Ü˜s›ˆDŒJÜ�4—:‘:‹ $§*¡*Ò,Ü  §¡›_�”
ÜŸ™ˆD�JøÜó !	*ð ˆDŒJØˆIÜ—_‘_ SÓ)ˆFØÐ!ä!Ÿ<™<¨Ó,�Ü&×-Ñ-¨c°8·>±>À!Ó3DÓE�Ü# H§N¡N°1Ó$5Ó6Ø ¤E¨(¯.©.¸Ó*;Ó$<Ñ<ñ=�”
à$ŸL™L¨›O‘	ô "Ÿ<™<¨Ó,�ØÐ'Ü!& x§~¡~°aÓ'8Ó!9�D”JØ (§¡¨Q£�Iä�4—:‘:‹ $§*¡*Ò,Ü  §¡›_�”
à˜AŠ~Ü ŸK™K¨¨YÓ7�	ØÐ(Ü!%§¡¨)¯/©/¸!Ó*<Ó!=�D–Jð
 �”
Ü!Ÿ\™\�–
ñ )ð5!	*ús   ‚A!A$ Á$E<HÇ"HÈHN)rD  rE  rF  rh  r  r  r  rR  rR  é  s   „ ó'*r  rR  c                 óÚ   — |€i }| j                  d«      }|dk7  r| ||<   | j                  «       r;| j                  D ],  }|j                  t        j
                  k(  sŒ!t        ||«       Œ. |S )z1
    Returns all elements with id attributes
    Úidr.  )ÚgetAttributeÚhasChildNodesÚ
childNodesÚnodeTyper   ÚELEMENT_NODEÚfindElementsWithId)ÚnodeÚelemsrj  Úchilds       r  rp  rp    sr   € ð €}ØˆØ	×	Ñ	˜4Ó	 €BØ	ˆR‚xØˆˆb‰	Ø×ÑÔØ—_‘_ò 	1ˆEð �~‰~¤×!2Ñ!2Ó2Ü" 5¨%Õ0ð		1ð
 €Lr  )r7   rT   r:   r-   rM   rL   rJ   rK   c                 óÀ  — |€i }| j                   dk(  rq| j                  t        d   k(  r[dj                  d„ | j                  D «       «      }|dk7  r2t        |«      }|D ]"  }|d   D ]  }|d   |   }t        | |||«       Œ Œ$ |S | j                  t        d   d«      }|dk7  r:t        |«      d	kD  r,|d
   dk(  r$|d	d }||v r||   j                  | «       n| h||<   | j                  d«      j                  d«      }	|	D ]V  }
|
j                  d«      }t        |«      dk(  sŒ#|d
   j                  «       }|d	   j                  «       }t        | |||«       ŒX t        D ]2  }| j                  |«      j                  «       }|sŒ%t        | |||«       Œ4 | j                  «       r;| j                  D ],  }|j                  t         j"                  k(  sŒ!t%        ||«       Œ. |S )a	  
    Returns IDs of all referenced elements
    - node is the node at which to start the search.
    - returns a map which has the id as key and
      each value is is a set of nodes

    Currently looks at 'xlink:href' and all attributes in 'referencingProps'
    NÚstyler   r.  c              3   ó4   K  — | ]  }|j                   –— Œ y ­wr9  ©Ú	nodeValue©Ú.0rs  s     r  ú	<genexpr>z)findReferencedElements.<locals>.<genexpr>>  s   è ø€ ÒJ°˜UŸ_�_ÑJùó   ‚Ú
propertiesr   Úhrefr  r   ú#ú;ú:r&  )ÚnodeNameÚnamespaceURIÚNSÚjoinrm  r   ÚfindReferencingPropertyÚgetAttributeNSÚlenÚaddrk  ÚsplitÚstripÚreferencingPropsrl  rn  r   ro  ÚfindReferencedElements)rq  ÚidsÚ
stylesheetÚcssRulesÚruleÚpropnameÚpropvalr~  rj  Ústylesru  ÚpropÚvalÚattrrs  s                  r  r�  r�  *  sþ  € ð €{Øˆð
 ‡}�}˜Ò D×$5Ñ$5¼¸E¹Ò$Bð —W‘WÑJ¸$¿/¹/ÔJÓJˆ
Ø˜ÒÜ% jÓ1ˆHØ ò J�Ø $ \Ñ 2ò J�HØ" <Ñ0°Ñ:�GÜ+¨D°(¸GÀSÕIñJðJð ˆ
ð ×Ñœr '™{¨FÓ3€DØˆr‚z”c˜$“i !’m¨¨Q©°3ªà�!�"ˆXˆØ�‰9Ø�‰G�K‰K˜Õà�fˆC�‰Gð ×Ñ˜wÓ'×-Ñ-¨cÓ2€Fàò :ˆØ—+‘+˜cÓ"ˆÜˆw‹<˜1ÓØ˜1‘:×#Ñ#Ó%ˆDØ˜!‘*×"Ñ"Ó$ˆCÜ# D¨$°°SÕ9ð:ô !ò 6ˆØ×Ñ Ó%×+Ñ+Ó-ˆÙØÜ  d¨C°Õ5ð	6ð ×ÑÔØ—_‘_ò 	3ˆEØ�~‰~¤×!2Ñ!2Ó2Ü& u¨cÕ2ð	3ð €Jr  c                 óŽ  — |t         v r½|dk7  r·t        |«      dk\  r<|dd dk(  r4|d|j                  d«       }||v r||   j                  | «       y | h||<   y t        |«      dk\  r^d }|dd d	k(  r|d|j                  d
«       }n|dd dk(  r|d|j                  d«       }|� ||v r||   j                  | «       y | h||<   y y y y y )Nr.  r+  r   r)  úurl(#ú)r,  r*  úurl("#ú")úurl('#ú'))rŒ  rˆ  Úfindr‰  )rq  r•  r–  rŽ  rj  s        r  r†  r†  h  sì   € àÔÑ C¨2¢IÜˆs‹8�qŠ=˜S  1˜X¨Ò0Ø�Q�s—x‘x “}Ð%ˆBØ�S‰yØ�B‘—‘˜DÕ!à˜&��B’ä�‹X˜Š]ØˆBà�1�Qˆx˜8Ò#Ø˜˜3Ÿ8™8 D›>Ð*‘à�Q�q�˜XÒ%Ø˜˜3Ÿ8™8 D›>Ð*�Øˆ~Ø˜‘9Ø˜‘G—K‘K Õ%à#˜f�C˜’Gð	 ð ð %.Ðr  c                 ó‚  — |€g }|€t        | j                  «      }g d¢}|j                  D ]�  }|j                  t        j
                  k7  rŒ!|j                  d«      }|dk(  s||vsŒ<|j                  dk(  r&|j                  t        d   k(  rt        | |||¬«      }Œq|j                  |vsŒ€|j                  |«       Œ’ |S )N)r=   ru  ÚmetadataÚscriptÚtitleÚdescrj  r.  Úgr   ©ÚreferencedIDs)r�  ÚdocumentElementrm  rn  r   ro  rk  r‚  rƒ  r„  ÚremoveUnusedDefsÚappend)ÚdocÚdefElemÚelemsToRemover§  ÚkeepTagsÚelemÚelem_ids          r  r©  r©  �  sÄ   € ØÐØˆð ÐÜ.¨s×/BÑ/BÓCˆâG€HØ×"Ñ"ò +ˆà�=‰=œD×-Ñ-Ò-Øà×#Ñ# DÓ)ˆà�bŠ=˜G¨=Ò8ð �}‰} Ò#¨×(9Ñ(9¼RÀ¹YÒ(FÜ 0°°d¸MÐYfÔ g‘à—‘ hÒ.Ø×$Ñ$ TÕ*ð+ð Ðr  c                 ó  — d}g d¢}t        | j                  «      }t        | j                  «      }|s`| j                  j                  d«      }|D ]@  }t	        | ||¬«      }|D ]+  }	|	j
                  j                  |	«       t        dz  a|dz  }Œ- ŒB |D ]n  }
|
|vsŒ||
   }|€Œ|j                  |v sŒ|j
                  €Œ,|j
                  j                  dk7  sŒF|j
                  j                  |«       |dz  }t        dz  aŒp |S )z÷
    Removes all unreferenced elements except for <svg>, <font>, <metadata>, <title>, and <desc>.
    Also vacuums the defs of any non-referenced renderable elements.

    Returns the number of unreferenced elements removed from the document.
    r   )ÚlinearGradientÚradialGradientÚpatternÚdefsr¦  r  )
rp  r¨  r�  ÚgetElementsByTagNamer©  Ú
parentNodeÚremoveChildÚ_num_elements_removedr‚  ÚtagName)r«  ÚkeepDefsÚnumÚ
removeTagsÚidentifiedElementsr§  rµ  ÚaDefr­  r¯  rj  Úgoners               r  ÚremoveUnreferencedElementsrÁ  �  s   € ð €Cò A€JÜ+¨C×,?Ñ,?Ó@ÐÜ*¨3×+>Ñ+>Ó?€Máà×"Ñ"×7Ñ7¸Ó?ˆØò 	ˆDÜ,¨S°$ÀmÔTˆMØ%ò �Ø—‘×+Ñ+¨DÔ1Ü%¨Ñ*Ð%Ø�q‘‘ñð	ð !ò +ˆØ�]Ò"Ø& rÑ*ˆEØÑ! e§n¡n¸
Ò&BØ×$Ñ$Ñ0Ø×(Ñ(×0Ñ0°FÓ:Ø× Ñ ×,Ñ,¨UÔ3Ø�q‘�Ü%¨Ñ*Ñ%ð+ð €Jr  c           
      óR  — d}t        | j                  «      }t        | j                  «      }|D �cg c]  }||v rt        ||   «      |f‘Œ }}|j	                  d¬«       |D ��cg c]  \  }}|‘Œ	 }}}|j                  |D �cg c]	  }||vsŒ|‘Œ c}«       t        ||«      }	t        «       }
g }t        t        t        |«      dz   «      «      }|j                  «        d\  }}|D ]P  }|dk  r|j                  «       \  }}|dz  }t        |«      |k(  r|
j                  |«       Œ@|j                  |«       ŒR d}|D ]V  }t        ||«      }||	v s||
v r|dz  }t        ||«      }||	v rŒ||
v rŒ|t        ||||j!                  |«      «      z  }|dz  }ŒX |S c c}w c c}}w c c}w )zË
    Shortens ID names used in the document. ID names referenced the most often are assigned the
    shortest ID names.

    Returns the number of bytes saved by shortening ID names in the document.
    r   T)Úreverser  ©r   r   )rp  r¨  r�  rˆ  ÚsortÚextendÚprotected_idsÚsetÚlistÚcompute_id_lengthsrÃ  Úpopr‰  rª  ÚintToIDÚrenameIDr?  )r«  ÚprefixÚoptionsr¼  r¾  r§  ÚridÚidListÚcountÚprotectedIDsÚconsumedIDsÚneed_new_idÚid_allocationsÚoptimal_id_lengthÚid_use_limitÚ
current_idÚcurIdNumÚold_idÚnew_ids                      r  Ú
shortenIDsrÝ  Ã  sö  € ð €Cä+¨C×,?Ñ,?Ó@Ðô
 +¨3×+>Ñ+>Ó?€Mð 9Fö ,°ØÐ*Ñ*ô �= Ñ%Ó&¨Ò,ð ,€Fð ,à
‡K�K˜€KÔØ$*×+‘j�e˜SŠcÐ+€FÑ+ð ‡M�MÐ"4ÖJ˜3¸À6Ò8I’3ÒJÔKä Ð!3°WÓ=€Lä“%€Kð €KäÔ,¬S°«[¸1©_Ó=Ó>€Nð ×ÑÔð '+Ñ#Ð�|Øò +ˆ
ð ˜!ÒØ.<×.@Ñ.@Ó.BÑ+Ð˜|à˜Ñˆô ˆz‹?Ð/Ò/à�O‰O˜JÕ'ð ×Ñ˜zÕ*ð+ð" €Hàò 
ˆÜ˜ 6Ó*ˆð ˜Ñ$¨°+Ñ(=Ø˜‰MˆHÜ˜X vÓ.ˆFð ˜Ò$¨°+Ò(=ð
 	Œx˜ Ð(:¸M×<MÑ<MÈfÓ<UÓVÑVˆØ�A‰‰ð
ð €Jùòw,ùó ,ùò Ks   ±FÁ%FÂ	F$ÂF$c              #   óf   K  — d}d}d}| r%|dz  }||z  }||f–— t        | dz
  |z  «      } | rŒ$yy­w)aþ  Compute how many IDs are available of a given size

    Example:
        >>> lengths = list(compute_id_lengths(512))
        >>> lengths
        [(1, 26), (2, 676)]
        >>> total_limit = sum(x[1] for x in lengths)
        >>> total_limit
        702
        >>> intToID(total_limit, '')
        'zz'

    Which tells us that we got 26 IDs of length 1 and up to 676 IDs of length two
    if we need to allocate 512 IDs.

    :param highest: Highest ID that need to be allocated
    :return: An iterator that returns tuples of (id-length, use-limit).  The
     use-limit applies only to the given id-length (i.e. it is excluding IDs
     of shorter length).  Note that the sum of the use-limit values is always
     equal to or greater than the highest param.
    é   r   r  N)rW  )ÚhighestÚstepÚ	id_lengthÚ	use_limits       r  rÊ  rÊ    sP   è ø€ ð, €DØ€IØ€IÙ
Ø�Q‰ˆ	Ø�TÑˆ	Ø˜)Ð$Ò$Ü�w ‘{ dÑ*Ó+ˆô	 ùs   ‚,1¯1c                 ó†   — d}| dkD  r6| dz  } t        | dz  t        d«      z   «      |z   }t        | dz  «      } | dkD  rŒ6||z   S )z�
    Returns the ID name for the given ID number, spreadsheet-style, i.e. from a to z,
    then from aa to az, ba to bz, etc., until zz.
    r.  r   r  rß  r  )ÚchrÚordrW  )ÚidnumrÎ  rÐ  s      r  rÌ  rÌ  5  sW   € ð
 €Cà
�!Š)Ø�‰
ˆÜ�5˜2‘:¤ S£Ñ)Ó*¨SÑ0ˆÜ�E˜B‘J“ˆð �!‹)ð
 �C‰<Ðr  c                 óœ  — d}||    }|j                  d|«       |t        | «      t        |«      z
  z  }|��•|D �]�  }|j                  dk(  rá|j                  t        d   k(  rË|j
                  �¿dj                  d„ |j                  D «       «      }|j                  d| z   d	z   d|z   d	z   «      }|j                  d
| z   dz   d|z   d	z   «      }|j                  d| z   dz   d|z   d	z   «      }|j                  j                  |«      g|j                  dd |t        |«      t        |«      z
  z  }|j                  t        d   d«      }	|	d| z   k(  r7|j                  t        d   dd|z   «       |t        | «      t        |«      z
  z  }|j                  d«      }
|
dk7  r†|
j                  d| z   d	z   d|z   d	z   «      }|j                  d| z   dz   d|z   d	z   «      }|j                  d| z   dz   d|z   d	z   «      }|j                  d|«       |t        |
«      t        |«      z
  z  }t        D ]Ÿ  }|j                  |«      }|dk7  sŒ|j                  d| z   d	z   d|z   d	z   «      }|j                  d| z   dz   d|z   d	z   «      }|j                  d| z   dz   d|z   d	z   «      }|j                  ||«       |t        |«      t        |«      z
  z  }Œ¡ �Œ’ |S )zÔ
    Changes the ID name from idFrom to idTo, on the declaring element
    as well as all nodes in referringNodes.

    Updates identifiedElements.

    Returns the number of bytes saved by this replacement.
    r   rj  Nru  r   r.  c              3   ó4   K  — | ]  }|j                   –— Œ y ­wr9  rw  ry  s     r  r{  zrenameID.<locals>.<genexpr>d  s   è ø€ Ò&T¸5 u§¥Ñ&Tùr|  r™  rš  zurl(#'rž  zurl(#"rœ  r   r~  r  r�  r›  )ÚsetAttributerˆ  r‚  rƒ  r„  Ú
firstChildr…  rm  ÚreplaceÚownerDocumentÚcreateTextNoder‡  ÚsetAttributeNSrk  rŒ  )ÚidFromÚidTor¾  ÚreferringNodesr¼  ÚdefiningNoderq  ÚoldValueÚnewValuer~  r”  r—  s               r  rÍ  rÍ  D  s  € ð €Cà% fÑ-€LØ×Ñ˜d DÔ)ØŒ3ˆv‹;œ˜T›Ñ"Ñ"€Cð Ñ!ð #ó *	9ˆDà�}‰} Ò'¨D×,=Ñ,=ÄÀEÁÒ,Jà—?‘?Ð.ð
  "Ÿw™wÑ&TÀDÇOÁOÔ&TÓT�Hà'×/Ñ/°¸&Ñ0@À3Ñ0FÈÐRVÉÐY\ÑH\Ó]�HØ'×/Ñ/°¸6Ñ0AÀDÑ0HÈ'ÐTXÉ.Ð[^ÑJ^Ó_�HØ'×/Ñ/°¸6Ñ0AÀDÑ0HÈ'ÐTXÉ.Ð[^ÑJ^Ó_�Hð +/×*<Ñ*<×*KÑ*KÈHÓ*UÐ)V�D—O‘O¡AÐ&Øœ3˜x›=¬3¨x«=Ñ8Ñ8�Cð ×&Ñ&¤r¨'¡{°FÓ;ˆDØ�s˜V‘|Ò#Ø×#Ñ#¤B w¡K°¸¸t¹ÔDØ”s˜6“{¤S¨£YÑ.Ñ.�ð ×&Ñ& wÓ/ˆFØ˜Š|Ø!Ÿ>™>¨'°FÑ*:¸SÑ*@À'ÈDÁ.ÐSVÑBVÓW�Ø#×+Ñ+¨H°vÑ,=ÀÑ,DÀgÐPTÁnÐWZÑFZÓ[�Ø#×+Ñ+¨H°vÑ,=ÀÑ,DÀgÐPTÁnÐWZÑFZÓ[�Ø×!Ñ! '¨8Ô4Ø”s˜6“{¤S¨£]Ñ2Ñ2�ô )ò 9�Ø×,Ñ,¨TÓ2�Ø˜r“>Ø'×/Ñ/°¸&Ñ0@À3Ñ0FÈÐRVÉÐY\ÑH\Ó]�HØ'×/Ñ/°¸6Ñ0AÀDÑ0HÈ'ÐTXÉ.Ð[^ÑJ^Ó_�HØ'×/Ñ/°¸6Ñ0AÀDÑ0HÈ'ÐTXÉ.Ð[^ÑJ^Ó_�HØ×%Ñ% d¨HÔ5Øœ3˜x›=¬3¨x«=Ñ8Ñ8‘Cò9ðG*	9ðX €Jr  c                 ó¸  ‡— g }|j                   s|j                  s|j                  r²g }g }|j                  r|j                  j                  d«      }|j                   r|j                   j                  d«      }| D ][  Šd}|j                  r‰d   j	                  «       sd}n!|r‰|v rd}n|rt        ˆfd„|D «       «      rd}|sŒK|j                  ‰«       Œ] |S )z1Return a list of protected IDs out of the seenIDsú,Fr%  Tc              3   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wr9  )Ú
startswith)rz  rÎ  rj  s     €r  r{  z protected_ids.<locals>.<genexpr>›  s   øè ø€ ÒP°�r—}‘} V×,ÑPùó   ƒ)Úprotect_ids_prefixÚprotect_ids_noninkscapeÚprotect_ids_listrŠ  ÚisdigitÚanyrª  )ÚseenIDsrÏ  rÓ  Úprotect_ids_prefixesrý  Ú	protectedrj  s         @r  rÇ  rÇ  Š  sÜ   ø€ à€LØ×!Ò! W×%DÒ%DÈ×H`ÒH`Ø!ÐØÐØ×#Ò#Ø&×7Ñ7×=Ñ=¸cÓBÐØ×%Ò%Ø#*×#=Ñ#=×#CÑ#CÀCÓ#HÐ Øò 
	(ˆBØˆIØ×.Ò.°r¸"±v·~±~Ô7GØ ‘	Ù! bÐ,<Ñ&<Ø ‘	Ù%ÜÓPÐ;OÔPÔPØ $�IÚØ×#Ñ# BÕ'ð
	(ð Ðr  c                 ó`   — t        | j                  «      }t        ||«      }|r
|D ]  }||= Œ |S )z:Returns a list of unprotected IDs within the document doc.)rp  r¨  rÇ  )r«  rÏ  r¾  rÓ  rj  s        r  Úunprotected_idsr  ¢  s@   € ä+¨C×,?Ñ,?Ó@ÐÜ Ð!3°WÓ=€LÙØò 	'ˆBØ" 2Ñ&ð	'àÐr  c                 óŽ   — dg}d}|D ]:  }||   }|| vsŒ|j                   |vsŒ|j                  d«       t        dz  a|dz  }Œ< |S )zb
    Removes the unreferenced ID attributes.

    Returns the number of ID attributes removed
    r=   r   rj  r  )r‚  ÚremoveAttributeÚ_num_ids_removed)r§  r¾  r®  r¼  rj  rq  s         r  ÚremoveUnreferencedIDsr  ¬  se   € ð ˆx€HØ
€CØ ò ˆØ! "Ñ%ˆØ�]Ò" t§}¡}¸HÒ'DØ× Ñ  Ô&Ü Ñ!ÐØ�1‰H‰Cðð €Jr  c                 óœ  — d}| j                   t        j                  k(  r¬| j                  }g }t	        |j
                  «      D ]@  }|j                  |«      }|€Œ|j                  |v sŒ&|j                  |j                  «       ŒB |D ]  }| j                  |«       Œ |t        |«      z  }| j                  D ]  }|t        ||«      z  }Œ |S r  )rn  r   ro  Ú
attributesr   ÚlengthÚitemrƒ  rª  r‚  r  rˆ  rm  ÚremoveNamespacedAttributes)	rq  Ú
namespacesr¼  ÚattrListÚattrsToRemoveÚattrNumr—  ÚattrNamers  s	            r  r  r  ¾  sÎ   € Ø
€CØ‡}�}œ×)Ñ)Ò)à—?‘?ˆØˆÜ˜XŸ_™_Ó-ò 	4ˆGØ—=‘= Ó)ˆDØÑ D×$5Ñ$5¸Ò$CØ×$Ñ$ T§]¡]Õ3ð	4ð &ò 	+ˆHØ× Ñ  Õ*ð	+àŒs�=Ó!Ñ!ˆð —_‘_ò 	AˆEØÔ-¨e°ZÓ@Ñ@‰Cð	Aà€Jr  c                 ó@  — d}| j                   t        j                  k(  r~| j                  }g }|D ]%  }|€Œ|j                  |v sŒ|j                  |«       Œ' |D ]  }| j                  |«       Œ |t        |«      z  }| j                  D ]  }|t        ||«      z  }Œ |S r  )	rn  r   ro  rm  rƒ  rª  r¸  rˆ  ÚremoveNamespacedElements)rq  r  r¼  Ú	childListÚchildrenToRemovers  s         r  r  r  Ò  s³   € Ø
€CØ‡}�}œ×)Ñ)Ò)à—O‘Oˆ	ØÐØò 	/ˆEØÑ  U×%7Ñ%7¸:Ò%EØ ×'Ñ'¨Õ.ð	/ð &ò 	$ˆEØ×Ñ˜UÕ#ð	$àŒsÐ#Ó$Ñ$ˆð —_‘_ò 	?ˆEØÔ+¨E°:Ó>Ñ>‰Cð	?à€Jr  c                 óÄ  — g }|j                   r|j                  d«       nW|j                  r|j                  d«       |j                  r|j                  d«       |j
                  r|j                  d«       |sy d}g }|D ],  }|j                  | j                  j                  |«      «       Œ. |D ]+  }|j                  j                  |«       |dz  }t        dz  a
Œ- |S )N)r£  r¤  r¡  r£  r¤  r¡  r   r  )Úremove_descriptive_elementsrÆ  Úremove_titlesrª  Úremove_descriptionsÚremove_metadatar¨  r¶  r·  r¸  r¹  )r«  rÏ  ÚelementTypesr¼  ÚelementsToRemoveÚelementTypeÚelements          r  ÚremoveDescriptiveElementsr   å  sç   € Ø€LØ×*Ò*Ø×ÑÐ9Õ:à× Ò Ø×Ñ Ô(Ø×&Ò&Ø×Ñ Ô'Ø×"Ò"Ø×Ñ 
Ô+ÙØð €CØÐØ#ò WˆØ×Ñ × 3Ñ 3× HÑ HÈÓ UÕVðWð $ò #ˆØ×Ñ×&Ñ& wÔ/Øˆq‰ˆÜ Ñ"Ñð#ð
 €Jr  c                 ób  — d}g }| j                   t        j                  k(  r| j                  dk(  s¸| j                  D ]©  }|j                  dk(  sŒ|j
                  t        d   k(  sŒ*t        |j                  «      dk(  sŒC|j                  D ]G  }|j                   t        j                  k(  sŒ!|j
                  t        d   k(  sŒ8|j                  dv sŒG Œ˜ |j                  |«       Œ« |D ]„  }|j                  j                  dkD  r@|j                  j                  |j                  |«       |j                  j                  dkD  rŒ@|j                  j                  |«       t        dz  a|dz  }Œ† | j                  D ].  }|j                   t        j                  k(  sŒ!|t!        |«      z  }Œ0 |S )z°
    This walks further and further down the tree, removing groups
    which do not have any attributes or a title/desc child and
    promoting their children up one level
    r   Úswitchr¥  r   ©r£  r¤  r  )rn  r   ro  r‚  rm  rƒ  r„  rˆ  r
  rª  r  r·  ÚinsertBeforerë  r¸  r¹  ÚremoveNestedGroups)rq  r¼  ÚgroupsToRemovers  Ú
grandchildr¥  s         r  r%  r%    sƒ  € ð €Cà€Nð �M‰MœT×.Ñ.Ò.°4·=±=ÀHÒ3LØ—_‘_ò 	1ˆEØ�~‰~ Ó$¨×);Ñ);¼rÀ%¹yÓ)HÌSÐQV×QaÑQaÓMbÐfgÓMgà"'×"2Ñ"2ò 1�JØ!×*Ñ*¬d×.?Ñ.?Ó?ÀJ×D[ÑD[Ô_aÐbgÑ_hÓDhØ&×/Ñ/Ð3DÒDÙð1ð
 #×)Ñ)¨%Õ0ð	1ð ò ˆØ�l‰l×!Ñ! AÒ%Ø�L‰L×%Ñ% a§l¡l°AÔ6ð �l‰l×!Ñ! AÓ%à	�‰× Ñ  Ô#Ü Ñ"ÐØˆq‰‰ðð —‘ò -ˆØ�>‰>œT×.Ñ.Ó.ØÔ% eÓ,Ñ,‰Cð-ð €Jr  c                 ó´  — d}g }| j                   D ]�  }|j                  t        j                  k(  r5|j	                  d«      |vsŒ4|j                  |«       |t        ||«      z  }ŒU|j                  t        j                  k(  sŒs|j                  j                  «       sŒŽ|c S  t        |«      dk  r|S i }|d   j                  }t        |j                  «      D ];  }|j                  |«      }|j                  dv sŒ#|j                  ||j                  <   Œ= t        t        |«      «      D ]X  }	|	dk(  rŒ	||	   }|j                   dv rŒg }
|D ]+  }|j	                  |«      ||   k7  sŒ|
j                  |«       Œ- |
D ]  }||= Œ ŒZ |D ]/  }|D ]  }|j#                  |«       Œ | j%                  |||   «       Œ1 |t        |«      dz
  t        |«      z  z  }|S )a¹  
    This recursively calls this function on all children of the passed in element
    and then iterates over all child elements and removes common inheritable attributes
    from the children and places them in the parent group.  But only if the parent contains
    nothing but element children and whitespace.  The attributes are only removed from the
    children if the children are not referenced by other elements in the document.
    r   rj  r  ©r.   rd   r7   r8   r9   r=   r>   r?   r@   rA   rB   rC   rD   rG   rP   rQ   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r`   ra   rb   )rÈ  ÚanimateÚanimateColorÚanimateTransformÚanimateMotion)rm  rn  r   ro  rk  rª  Ú!moveCommonAttributesToParentGroupÚ	TEXT_NODErx  r‹  rˆ  r
  r   r  r  r‚  Ú	localNamer  rê  )r¯  ÚreferencedElementsr¼  ÚchildElementsrs  ÚcommonAttrsr  Úindexr—  ÚchildNumÚdistinctAttrsÚnames               r  r.  r.  &  s   € ð €Cà€Mà—‘ò 	ˆØ�>‰>œT×.Ñ.Ò.à×%Ñ% dÓ+Ð/AÒAØ×$Ñ$ UÔ+ØÔ8¸Ð@RÓSÑS‘ð �^‰^œtŸ~™~Ó-°%·/±/×2GÑ2GÕ2IØŠJð	ô ˆ=Ó˜QÒØˆ
à€Kð
 ˜QÑ×*Ñ*€HÜ�x—‘Ó'ò 8ˆØ�}‰}˜UÓ#ˆð �=‰=ð 
=ò 
=ð *.¯©ˆK˜Ÿ™Ò&ð!8ô& œ#˜mÓ,Ó-ò "ˆà�qŠ=Øà˜hÑ'ˆà�?‰?ÐeÑeØàˆàò 	+ˆDà×!Ñ! $Ó'¨;°tÑ+<Ó<Ø×$Ñ$ TÕ*ð	+ð
 "ò 	"ˆDØ˜DÑ!ñ	"ð#"ð* ò 3ˆØ"ò 	(ˆEØ×!Ñ! $Õ'ð	(à×Ñ˜$ ¨DÑ 1Õ2ð3ð ŒC�Ó Ñ"¤c¨+Ó&6Ñ6Ñ6€CØ€Jr  c                 óz  — d}| j                   j                  dz
  }|dk\  �rÒ| j                   j                  |«      }|j                  t        j
                  k7  s%|j                  dk7  s|j                  t        d   k7  r|dz  }Œi|j                  j                  «       D �ci c]  }|j                  |j                  “Œ }}|s|dz  }Œ­||}}d}|dkD  r×| j                   j                  |dz
  «      }	|	j                  t        j
                  k(  r‘|	j                  dk7  s|	j                  t        d   k7  rnv|	j                  j                  «       D �ci c]  }|j                  |j                  “Œ }
}d„ |	j                   D «       }||
k7  st        |«      rn|dz  }|dz  }n|dz  }|dkD  rŒ×|dz
  }|dk  r�Œ›	 | j                   j                  |«      }|j                  t        j
                  k(  r&|j                  dk(  r|j                  t        d   k(  rn|dz  }Œd| j                   j                  |«      }|dz  }| j                   ||dz    }|D ]š  }|j                  t        j
                  k(  rj|j                  dk(  r[|j                  t        d   k(  rE|j                   dd D ]  }|j                  |«       Œ | j                  |«      j                  «        ŒŠ|j                  |«       Œœ |dk\  r�ŒÒ| j                   D ].  }|j                  t        j
                  k(  sŒ!|t!        |«      z  }Œ0 |S c c}w c c}w )z‰
    Merge two or more sibling <g> elements with the identical attributes.

    This function acts recursively on the given element.
    r   r  r¥  r   c              3   ó¢   K  — | ]G  }|j                   t        j                  k(  r(|j                  d v r|j                  t
        d   k(  rd–— ŒI y­w)r#  r   TN)rn  r   ro  r‚  rƒ  r„  )rz  Úns     r  r{  z9mergeSiblingGroupsWithCommonAttributes.<locals>.<genexpr>”  sH   è ø€ ò "C¨1Ø%&§Z¡Z´4×3DÑ3DÒ%DØ&'§j¡jÐ4EÑ&EØ&'§n¡n¼¸5¹	Ò&Aô #'ñ "Cùs   ‚AAr&  N)rm  r  r  rn  r   ro  r‚  rƒ  r„  r
  Úvaluesrx  rÿ  ÚappendChildr¸  ÚunlinkÚ&mergeSiblingGroupsWithCommonAttributes)r¯  r¼  ÚiÚcurrentNoder  r
  ÚrunStartÚrunEndÚrunElementsÚnextNodeÚnextAttributesÚhasNoMergeTagsrq  ÚprimaryGroupÚnodesrs  Ú	childNodes                    r  r>  r>  y  s  € ð €CØ�‰×Ñ Ñ"€AØ
ˆq‹&Ø—o‘o×*Ñ*¨1Ó-ˆØ×Ñ¤4×#4Ñ#4Ò4¸×8LÑ8LÐPSÒ8SØ×#Ñ#¤r¨%¡yÒ0Ø�‰FˆAØØ7B×7MÑ7M×7TÑ7TÓ7VÖW°!�a—j‘j !§+¡+Ñ-ÐWˆ
ÐWÙØ�‰FˆAØØ˜a�&ˆØˆØ˜ŠlØ—‘×+Ñ+¨H°q©LÓ9ˆHØ× Ñ ¤D×$5Ñ$5Ò5Ø×$Ñ$¨Ò+¨x×/DÑ/DÌÈ5É	Ò/QØØCK×CVÑCV×C]ÑC]ÓC_Ö!`¸a !§*¡*¨a¯k©kÑ"9Ð!`�Ð!`ñ"C°×0CÑ0Cô "C�ð  Ò/´3°~Ô3FØà 1Ñ$�KØ ‘M‘Hà˜A‘�ð! ˜‹lð& �q‰Lˆà˜Š?Ùð Ø—?‘?×'Ñ'¨Ó1ˆDØ�}‰}¤× 1Ñ 1Ò1°d·m±mÀsÒ6JÈt×O`ÑO`ÔdfÐglÑdmÒOmØØ˜‰MˆHð	 ð
 —‘×+Ñ+¨HÓ5ˆØ�A‰ˆØ—‘ ¨°©Ð2ˆØò 	/ˆDØ�}‰}¤× 1Ñ 1Ò1°d·m±mÀsÒ6JÈt×O`ÑO`ÔdfÐglÑdmÒOmà!Ÿ_™_©QÐ/ò 4�EØ ×,Ñ,¨UÕ3ð4à× Ñ  Ó&×-Ñ-Õ/à×(Ñ(¨Õ.ð	/ð] ˆqŒ&ðp —_‘_ò Eˆ	Ø×Ñ¤×!2Ñ!2Ó2ØÔ9¸)ÓDÑD‰CðEð €Jùòm Xùò "as   Â!L3ÅL8c                 ó�  — d}dD �]€  }| j                   j                  dz
  }|dk\  sŒ#| j                   j                  |«      }|j                  t        j
                  k(  �r|j                  |«      dk7  �r|j                  dv �rõ|j                  |«      }||}}d}|dkD  rf| j                   j                  |dz
  «      }	|	j                  t        j
                  k(  r |	j                  |«      |k7  rn|dz  }|dz  }n|dz  }|dkD  rŒf|dk\  �rg|| j                   j                  dz
  k  r\| j                   j                  |dz   «      j                  t        j
                  k(  rn"|dz  }|| j                   j                  dz
  k  rŒ\||z
  dz   }
|
| j                   j                  k(  r)| j                  dk(  r| j                  t        d   k(  rd	}�Œ­| j                  }|j                  t        d   d«      }| j                   ||dz    |j                   d
d
 |j                   D ]	  }||_        Œ g | j                   ||dz    | j                   j                  ||«       | |_        |dz  }|dz
  }t        dz  an|dz  }n|dz  }|dk\  r�Œ^�Œƒ | j                   D ].  }|j                  t        j
                  k(  sŒ!|t        |«      z  }Œ0 |S )a„  
    Creates <g> elements to contain runs of 3 or more
    consecutive child elements having at least one common attribute.

    Common attributes are not promoted to the <g> by this function.
    This is handled by moveCommonAttributesToParentGroup.

    If all children have a common attribute, an extra <g> is not created.

    This function acts recursively on the given element.
    r   r)  r  r.  )1r*  r+  r-  r,  rÈ  r¤  r¡  r£  ÚcircleÚellipseÚlineÚpathÚpolygonÚpolylineÚrectrµ  r¥  ÚsvgÚsymbolÚuser²  r³  r  ÚaltGlyphDefÚclipPathr2   r3   r:   r=   z	font-faceÚforeignObjectÚimagerI   rM   r´  r¢  ru  r"  ÚtextÚviewÚ	animationÚaudioÚdiscardÚhandlerÚlistenerÚprefetchÚ
solidColorÚtextAreaÚvideor'  r¥  r   r%  N)rm  r  r  rn  r   ro  rk  r‚  rƒ  r„  rí  ÚcreateElementNSr·  Úinsertr¹  ÚcreateGroupsForCommonAttributes)r¯  r¼  ÚcurAttrÚcurChildrI  rV  rA  rB  rC  rD  Ú	runLengthÚdocumentr_  rs  s                 r  rf  rf  Á  sß  € ð €Cð
4ó eˆð —?‘?×)Ñ)¨AÑ-ˆØ˜!‹mØŸ™×,Ñ,¨XÓ6ˆIð ×"Ñ"¤d×&7Ñ&7Ó7Ø×&Ñ& wÓ/°2Ó5Ø×"Ñ"ð 'ò ð& "×.Ñ.¨wÓ7�Ø#+¨X˜&�ð  �ð  ’lØ#Ÿ™×3Ñ3°H¸q±LÓA�HØ×(Ñ(¬D×,=Ñ,=Ò=Ø#×0Ñ0°Ó9¸UÒBØ!à'¨1Ñ,˜KØ$¨™M™Hà  A™˜ð  “lð  !Ó#à  4§?¡?×#9Ñ#9¸AÑ#=Ò=ØŸ?™?×/Ñ/°¸±
Ó;×DÑDÌ×HYÑHYÒYØ!à" a™K˜Fð	 ! 4§?¡?×#9Ñ#9¸AÑ#=Ó=ð !'¨Ñ 1°AÑ 5�IØ  D§O¡O×$:Ñ$:Ò:àŸ=™=¨CÒ/°D×4EÑ4EÌÈEÉÒ4Rð (*˜HÙ$ð  $×1Ñ1�HØ$×4Ñ4´R¸±YÀÓD�Eð +/¯/©/¸(À6ÈAÁ:Ð*N�E×$Ñ$¡QÐ'Ø!&×!1Ñ!1ò 1˜Ø+0˜Õ(ð1ð <>�D—O‘O H¨V°a©ZÐ8à—O‘O×*Ñ*¨8°UÔ;Ø'+�EÔ$Ø˜1‘H�CØ'¨!™|�HÜ)¨QÑ.Ñ)à ‘M‘Hà˜A‘�ðo ˜!ŽmðeðP —_‘_ò >ˆ	Ø×Ñ¤×!2Ñ!2Ó2ØÔ2°9Ó=Ñ=‰Cð>ð €Jr  c                 ó†  — d}g }| j                   D ]?  }|j                  t        j                  k(  sŒ!|j	                  |«       |t        |«      z  }ŒA t        |«      dk  r|S | j                  }i }t        |j                  «      D ];  }|j                  |«      }|j                  dv sŒ#|j                  ||j                  <   Œ= t        t        |«      «      D ]I  }||   }g }	|D ]1  }
|j                  |
«      }|dk(  s|�|dk(  sŒ!|	j	                  |
«       Œ3 |	D ]  }||= Œ ŒK |D ]  }
| j                  |
«       |dz  }Œ |S )z¯
    This recursively calls this function on all children of the element passed in,
    then removes any unused attributes on this elem if none of the children inherit it
    r   r  r)  r.  Úinherit)rm  rn  r   ro  rª  ÚremoveUnusedAttributesOnParentrˆ  r
  r   r  r  r‚  rx  rk  r  )r¯  r¼  r2  rs  r  ÚunusedAttrsr4  r—  r5  ÚinheritedAttrsr7  r–  r  s                r  rm  rm  B  sp  € ð
 €Cà€Mà—‘ò 9ˆØ�>‰>œT×.Ñ.Ó.Ø× Ñ  Ô'ØÔ1°%Ó8Ñ8‰Cð9ô ˆ=Ó˜QÒØˆ
ð �‰€HØ€KÜ�x—‘Ó'ò 8ˆØ�}‰}˜UÓ#ˆØ�=‰=ð 
=ò 
=ð *.¯©ˆK˜Ÿ™Ò&ð8ô  œ#˜mÓ,Ó-ò ˆØ˜hÑ'ˆØˆØò 	,ˆDØ×$Ñ$ TÓ*ˆCØ�bŠy˜C˜K¨3°)Ó+;Ø×%Ñ% dÕ+ð	,ð  ò 	ˆAØ˜A‘ñ	ðð ò ˆØ×Ñ˜TÔ"Øˆq‰‰ðð €Jr  c                 ó@  — d}dD �]•  }| j                  |«      D �]}  }i }g }|j                  d«      D �]1  }t        |j                  d«      «      }|j                  t        j
                  k(  r|j                  dz  }n,|j                  t        j                  k(  r|j                  }nd}t        |«      |k(  r%|j                  dt        t        |«      «      «       n|j                  dt        |«      «       |j                  d«      }	|j                  d«      }
|j                  d«      }||v r.||   }|d   |	k(  r!|d	   |
k(  r|d
   |k(  r|j                  |«       |	|
|g||<   �Œ4 |D ]+  }|j                  j                  |«       |d	z  }t        d	z  aŒ- �Œ€ �Œ˜ |S )Nr   ©r²  r³  ÚstopÚoffsetç      Y@rR   rS   ru  r  r&  )r¶  rR  rk  rX  r$  rG  rV  r:  rW  rê  rC  rª  r·  r¸  r¹  )r«  r¼  ÚgradTypeÚgradÚstopsÚstopsToRemoverr  ÚoffsetUrs  r/   rN   ru  ÚoldStops                r  ÚremoveDuplicateGradientStopsr{  y  sŸ  € à
€Cà8ó +ˆØ×,Ñ,¨XÓ6ó 	+ˆDØˆEØˆMØ×1Ñ1°&Ó9ó 8�ä# D×$5Ñ$5°hÓ$?Ó@�Ø—=‘=¤D§H¡HÒ,Ø$Ÿ]™]¨UÑ2‘FØ—]‘]¤d§i¡iÒ/Ø$Ÿ]™]‘Fà�Fä�v“; &Ò(Ø×%Ñ% h´´C¸³KÓ0@ÕAà×%Ñ% h´°F³Ô<à×)Ñ)¨,Ó7�Ø×+Ñ+¨NÓ;�Ø×)Ñ)¨'Ó2�Ø˜U‘?Ø# F™m�GØ˜q‘z UÒ*¨w°q©z¸WÒ/DÈÐQRÉÐW\ÒI\Ø%×,Ñ,¨TÔ2Ø!&¨°Ð 7��f“ð-8ð0 &ò +�Ø—‘×+Ñ+¨DÔ1Ø�q‘�Ü%¨Ñ*Ñ%ò+ò7	+ð+ðD €Jr  c           	      óæ  — d}t        | j                  «      }t        j                  t	        | j                  «      «      D �]­  \  }}t        |«      dk(  sŒ||v sŒ||   }|€Œ#|j                  t        j                  k(  sŒA|j                  dv sŒP|j                  t        d   k(  sŒg|j                  «       }|j                  t        j                  k(  sŒ•|j                  dv sŒ¤|j                  t        d   k(  sŒ»t        |j                  d«      «      dk(  r)|j                  d«      }|D ]  }|j                  |«       Œ dD ]N  }	|j                  |	«      dk(  sŒ|j                  |	«      dk(  rŒ-|j!                  d |	|j                  |	«      «       ŒP |j                  dk(  rb|j                  dk(  rSd	D ]N  }	|j                  |	«      dk(  sŒ|j                  |	«      dk(  rŒ-|j!                  d |	|j                  |	«      «       ŒP |j                  d
k(  rb|j                  d
k(  rSdD ]N  }	|j                  |	«      dk(  sŒ|j                  |	«      dk(  rŒ-|j!                  d |	|j                  |	«      «       ŒP |j#                  t        d   d«      }
|
r|j!                  t        d   d|
«       n|j%                  t        d   d«       |j&                  j)                  |«       t*        dz  a|dz  }�Œ° |S )Nr   r  rq  r   rr  )ÚgradientUnitsÚspreadMethodÚgradientTransformr.  r³  )ÚfxÚfyÚcxÚcyÚrr²  )r  r  r  r   r   r~  )rp  r¨  ÚsixÚ	iteritemsr�  rˆ  rn  r   ro  r‚  rƒ  r„  rË  r¶  r<  rk  rï  r‡  ÚremoveAttributeNSr·  r¸  r¹  )r«  r¼  r¾  rÐ  rH  r¯  ÚrefElemÚ
stopsToAddrr  r—  Útarget_hrefs              r  Ú!collapseSinglyReferencedGradientsr‹  ¢  sÙ  € à
€Cä+¨C×,?Ñ,?Ó@Ðô —m‘mÔ$:¸3×;NÑ;NÓ$OÓPó 9‰
ˆˆUô ˆu‹:˜‹?˜sÐ&8Ò8Ø% cÑ*ˆDàÑ Ø—‘¤×!2Ñ!2Ó2Ø—‘Ð!EÒEØ×!Ñ!¤R¨¡YÓ.ð  Ÿ)™)›+�Ø×#Ñ#¤t×'8Ñ'8Ó8¸W×=MÑ=MÐQuÒ=uØ#×0Ñ0´B°u±IÓ=ô ˜7×7Ñ7¸Ó?Ó@ÀAÒEØ%)×%>Ñ%>¸vÓ%F˜
Ø$.ò 6˜DØ#×/Ñ/°Õ5ð6ð
 !Wò X˜Ø"×/Ñ/°Ó5¸Ó;ÀD×DUÑDUÐVZÓD[Ð_aÓDaØ#×2Ñ2°4¸¸t×?PÑ?PÐQUÓ?VÕWðXð —}‘}Ð(8Ò8¸W×=MÑ=MÐQaÒ=aØ$Aò \˜DØ&×3Ñ3°DÓ9¸RÓ?È×HYÑHYÐZ^ÓH_ÐceÓHeØ '× 6Ñ 6°t¸TÀ4×CTÑCTÐUYÓCZÕ [ð\ð —}‘}Ð(8Ò8¸W×=MÑ=MÐQaÒ=aØ$<ò \˜DØ&×3Ñ3°DÓ9¸RÓ?È×HYÑHYÐZ^ÓH_ÐceÓHeØ '× 6Ñ 6°t¸TÀ4×CTÑCTÐUYÓCZÕ [ð\ð #'×"5Ñ"5´b¸±kÀ6Ó"J�KÙ"ð  ×.Ñ.¬r°'©{¸FÀKÕPð  ×1Ñ1´"°W±+¸vÔFð —O‘O×/Ñ/°Ô5Ü)¨QÑ.Ð)Ø˜1‘H’Cðs9ðt €Jr  c                 ó¬  — g d¢}g d¢}|D �cg c]  }| j                  |«      ‘Œ }}|j                  | j                  t        d   d«      «       | j	                  d«      }|j
                  rTt        |j
                  «      D ]<  }|j                  |«      }|D ]$  }|j                  |«      }	|j                  |	«       Œ& Œ> dj                  |«      S c c}w )N)r}  r~  r  r  r  r  r   r‚  rƒ  r€  r�  r„  )rs  rR   rS   ru  r   r~  rr  ú)	rk  rª  r‡  r„  r¶  r  r   r  r…  )
rv  ÚgradBucketAttrÚgradStopBucketsAttrr  ÚsubKeysrw  r?  rr  r—  ÚstopKeys
             r  ÚcomputeGradientBucketKeyr’  æ  sÊ   € òK€NâKÐð .<Ö<¨ˆt× Ñ  Õ#Ð<€GÐ<Ø‡N�N�4×&Ñ&¤r¨'¡{°FÓ;Ô<Ø×%Ñ% fÓ-€EØ‡|‚|Ü�u—|‘|Ó$ò 	(ˆAØ—:‘:˜a“=ˆDØ+ò (�Ø×+Ñ+¨DÓ1�Ø—‘˜wÕ'ñ(ð	(ð �;‰;�wÓÐùò =s   �Cc               '   óÆ  K  — | D ]Ó  }t        t        «      }|D ]!  }t        |«      }||   j                  |«       Œ# t	        j
                  |«      D ]„  }t        |«      dk  rŒ|d   }|dd }|D �cg c]  }|j                  d«      ‘Œ }	}|j                  d«      }
|
s1t        t        |	«      «      D ]  }|	|   }|sŒ|	|   }
|||<   d|	|<    n |
|	|f–— Œ† ŒÕ yc c}w ­w)a¿  Detects duplicate gradients from each iterable/generator given as argument

    Yields (master, master_id, duplicates_id, duplicates) tuples where:
      * master_id: The ID attribute of the master element.  This will always be non-empty
        and not None as long at least one of the gradients have a valid ID.
      * duplicates_id: List of ID attributes of the duplicate gradients elements (can be
        empty where the gradient had no ID attribute)
      * duplicates: List of elements that are duplicates of the `master` element.  Will
        never include the `master` element.  Has the same order as `duplicates_id` - i.e.
        `duplicates[X].getAttribute("id") == duplicates_id[X]`.
    r&  r   r  Nrj  r.  )	r	   rÉ  r’  rª  r…  Ú
itervaluesrˆ  rk  r   )Ú
grad_listsÚgradsÚgrad_bucketsrv  ÚkeyÚbucketÚmasterÚ
duplicatesÚdÚduplicates_idsÚ	master_idr?  Údup_ids                r  Údetect_duplicate_gradientsr      s  è ø€ ð ò  8ˆÜ"¤4Ó(ˆàò 	+ˆDÜ*¨4Ó0ˆCØ˜Ñ×$Ñ$ TÕ*ð	+ô —n‘n \Ó2ò 	8ˆFÜ�6‹{˜QŠð Ø˜A‘YˆFØ  ˜ˆJØ<FÖG°q˜aŸn™n¨TÕ2ÐGˆNÐGØ×+Ñ+¨DÓ1ˆIÙô
 œs >Ó2Ó3ò 	�AØ+¨AÑ.�FÚð %3°1Ñ$5˜	Ø(.˜
 1™à,.˜ qÑ)Ùð	ð ˜^¨ZÐ7Ó7ñ3	8ñ 8ùò Hùs   ‚A0C!Á2CÂ
3C!Â>#C!c                 óF  — d }t        ||«      D �];  \  }}|j                  sŒ||v �r|€,dj                  |«      }t        j                  d|z   dz   «      }||   D ]Ò  }dD ]F  }	|j                  |	«      }
|j                  d| z   dz   |
«      \  }}|dkD  sŒ5|j                  |	|«       ŒH |j                  t        d   d	«      d
|z   k(  r|j                  t        d   d	d
| z   «       t        |«      }|D ]-  }||   }
|j                  d| z   dz   |
«      \  }}|dkD  sŒ)|||<   Œ/ t        ||«       ŒÔ |j                  j                  |«       �Œ> | r9	 ||    }|D ](  }|j!                  |d «      }|€Œ|j#                  |«       Œ* ||| <   y y # t        $ r t        «       }Y ŒIw xY w)Nú|zurl\(['"]?#(?:z)['"]?\)©r7   rT   r™  rš  r   r   r~  r  )Úzipr·  r…  ÚreÚcompilerk  Úsubnrê  r‡  r„  rï  Ú	_getStyleÚ	_setStyler¸  r<  rÈ  rË  Úupdate)rž  r�  r›  Úreferenced_idsÚfunc_irirŸ  Údup_gradÚdup_id_regexr¯  r—  ÚvÚv_newr:  r”  ru  Úmaster_referencesÚ
referencess                    r  Údedup_gradientr³  /  sô  € Ø€HÜ °
Ó;ó  2Ñˆ�ð ×"Ò"Øð �^Ò#ØÐà"Ÿx™x¨Ó7�ÜŸ:™:Ð&8¸<Ñ&GÈ,Ñ&VÓW�Ø& vÑ.ò (�à.ò 7�DØ×)Ñ)¨$Ó/�AØ!)§¡¨w¸Ñ/BÀSÑ/HÈ!Ó!L‘J�U˜AØ˜1“uØ×)Ñ)¨$°Õ6ð	7ð
 ×&Ñ&¤r¨'¡{°FÓ;¸sÀV¹|ÒKØ×'Ñ'¬¨7©°V¸SÀ9¹_ÔMÜ" 4›�Ø#ò .�EØ˜u™�AØ!)§¡¨w¸Ñ/BÀSÑ/HÈ!Ó!L‘J�U˜AØ˜1“uØ(-˜˜ušð	.ô
 ˜$ Õ'ð(ð& 	×Ñ×'Ñ'¨Ö1ðA 2ñJ ð	&Ø .¨yÑ 9Ðð %ò 	1ˆFØ'×+Ñ+¨F°DÓ9ˆJØÐ!ØØ×$Ñ$ ZÕ0ð		1ð %6ˆ�yÒ!ð øô ò 	&Ü #£Òð	&ús   ÅF
 Æ
F ÆF c                 óø   — d}d}t        | j                  «      }||k7  r[|}| j                  d«      }| j                  d«      }t        ||«      D ]"  \  }}}t	        ||||«       |t        |«      z  }Œ$ ||k7  rŒ[|S )Nr%  r   r²  r³  )r�  r¨  r¶  r   r³  rˆ  )	r«  Úprev_numr¼  r«  Úlinear_gradientsÚradial_gradientsrž  r�  r›  s	            r  ÚremoveDuplicateGradientsr¸  g  s™   € Ø€HØ
€Cô ,¨C×,?Ñ,?Ó@€Nà
�cŠ/Øˆà×3Ñ3Ð4DÓEÐØ×3Ñ3Ð4DÓEÐä5OÐP`ÐbrÓ5sò 	#Ñ1ˆI�~ zÜ˜9 n°jÀ.ÔQØ”3�z“?Ñ"‰Cð	#ð �c‹/ð €Jr  c                 ó0  — | j                   t        j                  k7  ri S | j                  d«      }|rci }|j	                  d«      }|D ]I  }|j	                  d«      }t        |«      dk(  sŒ#|d   j                  «       ||d   j                  «       <   ŒK |S i S )z6Returns the style attribute of a node as a dictionary.ru  r€  r�  r&  r  r   )rn  r   ro  rk  rŠ  rˆ  r‹  )rq  Ústyle_attributeÚstyleMapÚ	rawStylesru  r“  s         r  r¨  r¨  {  sœ   € à‡}�}œ×)Ñ)Ò)Øˆ	Ø×'Ñ'¨Ó0€OÙØˆØ#×)Ñ)¨#Ó.ˆ	Øò 	BˆEØ—k‘k #Ó&ˆGÜ�7‹|˜qÓ Ø/6°q©z×/?Ñ/?Ó/A�˜ ™×)Ñ)Ó+Ò,ð	Bð ˆàˆ	r  c                 ó²   ‡— dj                  ˆfd„‰D «       «      }|dk7  r| j                  d|«       | S | j                  d«      r| j                  d«       | S )zBSets the style attribute of a node to the dictionary ``styleMap``.r€  c              3   ó4   •K  — | ]  }|d z   ‰|   z   –— Œ y­w)r�  Nr  )rz  r•  r»  s     €r  r{  z_setStyle.<locals>.<genexpr>Ž  s   øè ø€ ÒK¸$˜$ ™* x°¡~Õ5ÑKùó   ƒr.  ru  )r…  rê  rk  r  )rq  r»  Ú
fixedStyles    ` r  r©  r©  Œ  sY   ø€ à—‘ÓKÀ(ÔKÓK€JØ�RÒØ×Ñ˜' :Ô.ð €Kð 
×	Ñ	˜7Ô	#Ø×Ñ˜WÔ%Ø€Kr  c                 ó¨  — d}t        | «      }|�r¡dD ]e  }||v sŒ||   j                  d«      }t        |«      dk(  sŒ+|d   d d dk(  s|d   d d dk(  s|d   d d d	k(  sŒM|d
   dk(  sŒV|d   dz   ||<   |d
z  }Œg d|v r4t        |d   «      }|dk(  r!dD ]  }||v sŒt	        | |«      rŒ||= |d
z  }Œ d|v rK|d   dk(  rCdD ]  }||v sŒt	        | |«      rŒ||= |d
z  }Œ t	        | d«      st        | d«      dv r|d= |d
z  }d|v r)|d   dk(  r!dD ]  }	|	|v sŒt	        | |	«      rŒ||	= |d
z  }Œ d|v r4t        |d   «      }
|
dk(  r!dD ]  }||v sŒt	        | |«      rŒ||= |d
z  }Œ d|v r4t        |d   «      }|dk(  r!dD ]  }||v sŒt	        | |«      rŒ||= |d
z  }Œ d|v r>t        |d   «      }|j                  dk(  r!dD ]  }||v sŒt	        | |«      rŒ||= |d
z  }Œ t        | «      sdD ]  }||v sŒ||= |d
z  }Œ dD ]  }||v sŒ||= |d
z  }Œ d|v rQ| j                  dvr	|d= |d
z  }n:| | j                  j                  k7  r|d   d k(  r|d= |d
z  }n|d   d!k(  r|d= |d
z  }|j                  r1t        |«      D ]#  }|t        v sŒ| j                  |||   «       ||= Œ% t!        | |«       | j"                  D ]  }|t%        ||«      z  }Œ |S )"Nr   r£  z) r&  r)  r™  r*  r›  r�  r  zrgb(0, 0, 0)rš  rN   g        )r7   r8   r9   rT   rX   rZ   rY   rW   rU   rV   rZ   rT   rÿ   )r[   rX   rY   rW   rU   rV   rZ   )Nrÿ   r7   )r9   r8   r8   )r7   r9   rZ   )rT   r[   rX   rW   rU   rV   r[   )rT   rX   rW   rU   rV   rZ   )r>   r?   rA   r@   rB   rC   rD   rG   zline-heightrF   rg   r\   r]   r^   r_   ra   rb   )z-inkscape-font-specificationrO   )rR  rS  rX  rW  rI   r´  Úhiddenr  )r¨  rŠ  rˆ  rU  ÚstyleInheritedByChildÚstyleInheritedFromParentrR  rV  ÚmayContainTextNodesr‚  rí  r¨  Ústyle_to_xmlrÉ  ÚsvgAttributesrê  r©  rm  ÚrepairStyle)rq  rÏ  r¼  r»  r•  ÚchunkrN   ÚuselessStyleÚstrokestyleÚ	fillstyleÚfillOpacityÚuselessFillStyleÚstrokeOpacityÚuselessStrokeStyleÚstrokeWidthÚ	fontstyleÚinkscapeStyleÚpropNamers  s                      r  rÈ  rÈ  –  s-  € Ø
€CÜ˜‹€HÚð 'ò 	ˆDØ�xÒØ  ™×,Ñ,¨TÓ2�Ü˜“J !“OØ" 1™X b q˜\¨WÒ4¸¸a¹ÀÀ!¸ÈÒ8PÐTYÐZ[ÑT\Ð]_Ð^_ÐT`ÐdlÓTlØ! !™H¨Ó6Ø%*¨1¡X°¡^�H˜T‘NØ˜1‘H‘Cð	ð ˜Ñ Ü˜H YÑ/Ó0ˆGà˜#Š~ð%Lò !�Lð $ xÒ/Ô8MÈdÐT`Õ8aØ$ \Ð2Ø˜q™™ð!ð �xÑ H¨XÑ$6¸&Ò$@ð mò �à (Ò*Ô3HÈÈ{Õ3[Ø  Ð-Ø˜1‘H‘Cð	ô )¨¨xÔ8Ü+¨D°(Ó;¸~ÑMØ  Ð*Ø˜1‘H�Cð �XÑ (¨6Ñ"2°fÒ"<Ø:ò �	Ø Ò(Ô1FÀtÈYÕ1WØ  Ð+Ø˜1‘H‘Cðð ˜XÑ%Ü ¨Ñ 8Ó9ˆKØ˜cÒ!Ø(=ò !Ð$Ø'¨8Ò3Ô<QÐRVÐXhÕ<iØ$Ð%5Ð6Ø˜q™™ð!ð ˜xÑ'Ü! (Ð+;Ñ"<Ó=ˆMØ Ò#ð+Tò !Ð&à)¨XÒ5Ô>SÐTXÐZlÕ>mØ$Ð%7Ð8Ø˜q™™ð	!ð ˜XÑ%Ü# H¨^Ñ$<Ó=ˆKØ× Ñ  CÒ'ð+fò !Ð&à)¨XÒ5Ô>SÐTXÐZlÕ>mØ$Ð%7Ð8Ø˜q™™ð	!ô # 4Ô(ð>ò �	ð  Ò(Ø  Ð+Ø˜1‘H‘Cðð >ò 	ˆMØ Ò(Ø˜]Ð+Ø�q‘‘ð	ð
 ˜Ñ!ð �}‰}Ð$dÑdØ˜ZÐ(Ø�q‘‘ð ˜×+Ñ+×;Ñ;Ò;Ø˜JÑ'¨8Ò3Ø  Ð,Ø˜1‘H‘Cà˜*Ñ%¨Ò2Ø˜ZÐ(Ø�q‘�ð ×ÒÜ  ›Nò +�Øœ}Ò,Ø×%Ñ% h°¸Ñ0BÔCØ  Ñ*ð+ô
 	�$˜Ô!ð —‘ò +ˆØŒ{˜5 'Ó*Ñ*‰ð+ð €Jr  c                 óð   — | j                   }|j                  t        j                  k(  ryt	        |«      }||v r||   }|dk(  s|S |j                  |«      }|dvr|j                  |«      S t        ||«      S )zÞ
    Returns the value of 'style' that is inherited from the parents of the passed-in node

    Warning: This method only considers presentation attributes and inline styles,
             any style sheets are ignored!
    Nrl  ©r.  rl  )r·  rn  r   ÚDOCUMENT_NODEr¨  rk  rÄ  )rq  ru  r·  r”  rV  s        r  rÄ  rÄ    s‰   € ð —‘€Jð ×Ñœd×0Ñ0Ò0Øô �zÓ"€FØ��Ø�u‘ˆØ˜	Ò!ØˆLð ×#Ñ# EÓ*€EØ�OÑ#Ø×&Ñ& uÓ-Ð-ô $ J°Ó6Ð6r  Fc                 ó,  — | j                   t        j                  k7  ry|r,| j                  |«      dvryt	        | «      }||v r||   dk(  sy| j
                  sy| j
                  r | j
                  D ]  }t        ||d«      sŒ y | j                  dv ryy)aÕ  
    Returns whether 'style' is inherited by any children of the passed-in node

    If False is returned, it is guaranteed that 'style' can safely be removed
    from the passed-in node without influencing visual output of it's children

    If True is returned, the passed-in node should not have its text-based
    attributes removed.

    Warning: This method only considers presentation attributes and inline styles,
             any style sheets are ignored!
    FrÖ  rl  T)r  rµ  Úglyphr¥  rI   rM   zmissing-glyphr´  rR  r"  rS  )rn  r   ro  rk  r¨  rm  rÃ  r‚  )rq  ru  ÚnodeIsChildr”  rs  s        r  rÃ  rÃ  9  s¦   € ð ‡}�}œ×)Ñ)Ò)Øáð
 ×Ñ˜UÓ#¨?Ñ:Øä˜4“ˆØ�V‰O f¨U¡m°yÒ&@Øð �ŠØð ‡‚Ø—_‘_ò 	ˆEÜ$ U¨E°4Õ8Ùð	ð ‡}�}ð Pñ Pàð r  c                 óB  — 	 | j                   S # t        $ r Y nw xY wd}| j                  t        j                  k7  rd}nY| j
                  t        d   k7  rd}n@| j                  dv rd}n/| j                  dv r!d}| j                  D ]  }t        |«      sŒd}Œ || _         |S )ae  
    Returns True if the passed-in node is probably a text element, or at least
    one of its descendants is probably a text element.

    If False is returned, it is guaranteed that the passed-in node has no
    business having text-based attributes.

    If True is returned, the passed-in node should not have its text-based
    attributes removed.
    TFr   )	rQ  rK  rL  rM  rO  rP  rN  rX  rr  )r¥  rV  rI   rM   r´  r²  r³  rS  )	rÅ  ÚAttributeErrorrn  r   ro  rƒ  r„  r‚  rm  )rq  Úresultrs  s      r  rÅ  rÅ  k  s¹   € ðØ×'Ñ'Ð'øÜò Ùðúð €Fà‡}�}œ×)Ñ)Ò)Ø‰à	×	Ñ	œb ™iÒ	'Ø‰à	�‰ð @ñ 
@à‰à	�‰ð Iñ 
IàˆØ—_‘_ò 	ˆEÜ" 5Õ)Ø‘ð	ð  &€DÔØ€Ms   ‚ Ž	™ÚDefaultAttribute)r7  rV  rX  ÚelementsÚ
conditionsr9  ÚclipPathUnitsÚuserSpaceOnUserV  )rß  ÚfilterUnitsÚobjectBoundingBoxr}  r²  r³  Ú	maskUnitsÚmaskContentUnitsÚpatternUnitsr´  ÚpatternContentUnitsÚprimitiveUnitsÚexternalResourcesRequiredÚfalse)'r  ÚaltGlyphr*  r+  r-  r,  rK  rV  r3   rµ  rL  ÚfeImager:   r=   rW  r¥  rX  rM  r²  rI   rM   ÚmpathrN  r´  rO  rP  r³  rQ  r¢  rÈ  rR  r"  rS  rY  ÚtextPathÚtrefÚtspanrT  rZ  Úwidthéd   rR  ÚheightÚbaseProfileÚpreserveAspectRatiozxMidYMid meet)rí  rX  rI   r´  rR  rS  rZ  Úx)
r3   ÚfePointLightÚfeSpotLightrW  rX  r´  rQ  rR  rY  rT  ÚyÚzrø  rù  r  rM  r  r  r   r‚  rK  rL  rƒ  ÚmarkerUnitsrÑ  ÚrefXÚrefYÚmarkerHeightr'  ÚmarkerWidthÚorientÚlengthAdjustÚspacing)rY  rï  rð  rñ  ÚstartOffsetrï  ÚmethodÚalignÚexactiöÿÿÿgš™™™™™¹¿c                 ó*   — | j                  d«      dk7  S ©Nr}  râ  ©rk  ©rq  s    r  ú<lambda>r  á  ó   € ¨T×->Ñ->¸Ó-OÐScÑ-c€ r  )rà  c                 ó*   — | j                  d«      dk7  S r	  r
  r  s    r  r  r  ä  r  r  éx   g333333ó?c                 ó*   — | j                  d«      dk7  S r	  r
  r  s    r  r  r  ç  r  r  c                 ó*   — | j                  d«      dk7  S r	  r
  r  s    r  r  r  ê  r  r  r  c                 ó*   — | j                  d«      dk7  S r	  r
  r  s    r  r  r  ò  r  r  )rß  rà  r€  c                 óH   — | j                  d«      | j                  d«      k(  S )Nr€  r‚  r
  r  s    r  r  r  õ  ó"   € ¨T×->Ñ->¸tÓ-DÈ×HYÑHYÐZ^ÓH_Ñ-_€ r  r�  c                 óH   — | j                  d«      | j                  d«      k(  S )Nr�  rƒ  r
  r  s    r  r  r  ÷  r  r  r„  é2   g      à?c                 ó*   — | j                  d«      dk7  S r	  r
  r  s    r  r  r  ú  r  r  c                 ó*   — | j                  d«      dk7  S r	  r
  r  s    r  r  r  ý  r  r  c                 ó*   — | j                  d«      dk7  S r	  r
  r  s    r  r  r     r  r  r~  ÚpadÚ	amplitude)ÚfeFuncAÚfeFuncBÚfeFuncGÚfeFuncRÚazimuthÚfeDistantLightÚbaseFrequencyÚbiasÚfeConvolveMatrixÚdiffuseConstantÚfeDiffuseLightingÚedgeModeÚ	duplicateÚ	elevationÚexponentÚ	interceptÚk1ÚfeCompositeÚk2Úk3Úk4ÚmodeÚfeBlendÚ
numOctavesÚfeTurbulencers  ÚoperatorÚoverÚerodeÚfeMorphologyÚorderÚ3Ú	pointsAtXÚ	pointsAtYÚ	pointsAtZÚpreserveAlphaÚradiusÚscaleÚfeDisplacementMapÚseedÚspecularConstantÚfeSpecularLightingÚspecularExponentÚstdDeviationÚfeGaussianBlurÚstitchTilesÚnoStitchÚsurfaceScaleÚtypeÚmatrixÚfeColorMatrixÚ
turbulenceÚxChannelSelectorÚAÚyChannelSelectorc                 ó|   — | j                  |«       |dk(  r| t        g d¢«      z  } |dv r| j                  d«       | S )zTAdds an attribute to a set of attributes.

    Related attributes are also included.rI   )rL   rK   rJ   )r‰  rÈ  )Ú
taintedSetÚtaintedAttributes     r  ÚtaintrU  8  sD   € ð ‡N�NÐ#Ô$Ø˜8Ò#Ø”cÒFÓGÑGˆ
ØÐGÑGØ�‰�xÔ ØÐr  c                 ó   — | j                  |j                  «      syt        |j                  t        «      rb| j                  |j                  «      |j                  k(  r9|j                  �|j                  | «      r| j                  |j                  «       yyt        | j                  |j                  «      «      }|j                  �6|j                  |j                  k(  r­|j                  t        j                  k(  s�|j                  �K|j                  |j                  k(  s2t        |j                  t        «      rQ|j                  |j                  v r9|j                  �|j                  | «      r| j                  |j                  «       yy)zÛ
    Removes the DefaultAttribute 'attribute' from 'node' if specified conditions are fulfilled

    Warning: Does NOT check if the attribute is actually valid for the passed element type for increased preformance!
    r   r  )ÚhasAttributer7  Ú
isinstancerV  rC  rk  rà  r  rR  rX  r$  r=  rÉ  )rq  Ú	attributerx  s      r  ÚremoveDefaultAttributeValuerZ  D  s)  € ð ×Ñ˜YŸ^™^Ô,Øô �)—/‘/¤3Ô'Ø×Ñ˜YŸ^™^Ó,°	·±Ò?Ø×$Ñ$Ð,°×1EÑ1EÀdÔ1KØ×$Ñ$ Y§^¡^Ô4Øð ô ˜d×/Ñ/°	·±Ó?Ó@ˆ	Ø�_‰_Ð$Ø—_‘_¨	¯©Ò7À)Ç/Á/ÔUY×UaÑUaÒBaØ—‘Ð(Ø!Ÿ™¨9¯?©?Ò:Ü" 9§?¡?´DÔ9¸i¿o¹oÐQZ×Q`ÑQ`Ñ>`Ø×(Ñ(Ð0°Y×5IÑ5IÈ$Ô5OØ×(Ñ(¨¯©Ô8Øàr  c                 óJ  — d}| j                   t        j                  k7  ryt        D ]  }|t	        | |«      z  }Œ | j
                  t        v r't        | j
                     D ]  }|t	        | |«      z  }Œ t        | j                  j                  «      D �cg c]'  }| j                  j                  |«      j
                  ‘Œ) }}|D ]N  }||vsŒ|t        v sŒ| j                  |«      t        |   k(  r| j                  |«       |dz  }ŒCt        ||«      }ŒP t        | «      }t!        |«      D ]4  }||vsŒ|t        v sŒ||   t        |   k(  r	||= |dz  }Œ)t        ||«      }Œ6 t#        | |«       | j$                  D ]   }|t'        |||j)                  «       «      z  }Œ" |S c c}w )z†'tainted' keeps a set of attributes defined in parent nodes.

    For such attributes, we don't delete attributes with default values.r   r  )rn  r   ro  Údefault_attributes_universalrZ  r‚  Údefault_attributes_per_elementr   r
  r  r  Údefault_propertiesrk  r  rU  r¨  rÉ  r©  rm  ÚremoveDefaultAttributeValuesÚcopy)	rq  rÏ  Útaintedr¼  rY  r?  r
  r”  rs  s	            r  r_  r_  a  s¹  € ð €CØ‡}�}œ×)Ñ)Ò)Øô 2ò <ˆ	ØÔ*¨4°Ó;Ñ;‰ð<à‡}�}Ô6Ñ6Ü7¸¿¹ÑFò 	@ˆIØÔ.¨t°YÓ?Ñ?‰Cð	@ô =BÀ$Ç/Á/×BXÑBXÓ<YÖZ°q�$—/‘/×&Ñ& qÓ)×2Ó2ÐZ€JÐZØò 8ˆ	Ø˜GÒ#ØÔ.Ò.Ø×$Ñ$ YÓ/Ô3EÀiÑ3PÒPØ×(Ñ(¨Ô3Ø˜1‘H‘Cä# G¨YÓ7‘Gð8ô �t‹_€FÜ˜&“\ò 8ˆ	Ø˜GÒ#ØÔ.Ò.Ø˜)Ñ$Ô(:¸9Ñ(EÒEØ˜yÐ)Ø˜1‘H‘Cä# G¨YÓ7‘Gð8ô ˆd�FÔð —‘ò LˆØÔ+¨E°7¸G¿L¹L»NÓKÑK‰ðLð €Jùò3 [s   Â,F z0\s*rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)\s*zE\s*rgb\(\s*(\d*\.?\d+)%\s*,\s*(\d*\.?\d+)%\s*,\s*(\d*\.?\d+)%\s*\)\s*c                 óò  — | }|t         v r	t         |   }t        j                  |«      }|�„t        t	        |j                  d«      «      dz  dz  «      }t        t	        |j                  d«      «      dz  dz  «      }t        t	        |j                  d«      «      dz  dz  «      }d|||fz  }nmt        j                  |«      }|�Vt        |j                  d«      «      }t        |j                  d«      «      }t        |j                  d«      «      }d|||fz  }|d   dk(  rS|j                  «       }t        |«      d	k(  r5|d   |d   k(  r*|d   |d
   k(  r|d   |d   k(  rd|d   z   |d   z   |d   z   }|S )z_
       Converts the input color string and returns a #RRGGBB (or #RGB if possible) string
    r  g     ào@rt  r&  r'  z#%02x%02x%02xr   r  r+  r(  r)  r*  )	ÚcolorsÚrgbpr[  rW  rU  r_  ÚrgbÚlowerrˆ  )rV  ÚsÚ	rgbpMatchr„  r¥  r  ÚrgbMatchs          r  ÚconvertColorrj  •  sm  € ð 	€AàŒF�{Ü�1‰Iˆä—
‘
˜1“€IØÐÜ”�i—o‘o aÓ(Ó)¨EÑ1°EÑ9Ó:ˆÜ”�i—o‘o aÓ(Ó)¨EÑ1°EÑ9Ó:ˆÜ”�i—o‘o aÓ(Ó)¨EÑ1°EÑ9Ó:ˆØ˜q ! Q˜iÑ'‰ä—9‘9˜Q“<ˆØÐÜ�H—N‘N 1Ó%Ó&ˆAÜ�H—N‘N 1Ó%Ó&ˆAÜ�H—N‘N 1Ó%Ó&ˆAØ 1 a¨ )Ñ+ˆAàˆ�tˆs‚{Ø�G‰G‹IˆÜˆq‹6�QŠ;˜1˜Q™4 1 Q¡4š<¨A¨a©D°A°a±DªL¸Q¸q¹TÀQÀqÁTº\Ø�a˜‘d‘
˜Q˜q™TÑ! A a¡DÑ(ˆAà€Hr  c                 óˆ  — d}| j                   t        j                  k7  ryg }| j                  dv rddg}n#| j                  dv rdg}n| j                  dv rdg}t	        | «      }|D ]®  }| j                  |«      }|d	k7  rXt        |«      }t        |«      }t        |«      }||kD  r2| j                  ||«       ||t        | j                  |«      «      z
  z  }||v sŒv||   }t        |«      }t        |«      }t        |«      }||kD  sŒ¢|||<   |||z
  z  }Œ° t        | |«       | j                  D ]  }	|t        |	«      z  }Œ |S )
zU
       Recursively converts all color properties into #RRGGBB format if shorter
    r   )	rQ  rK  rL  rO  rM  rP  rN  r¥  r  r7   rT   )rr  rR   )ra  re   r.  )rn  r   ro  r‚  r¨  rk  rj  rˆ  rê  r©  rm  ÚconvertColors)
r  ÚnumBytesÚattrsToConvertr”  r—  ÚoldColorValueÚnewColorValueÚoldBytesÚnewBytesrs  s
             r  rl  rl  ´  s  € ð €Hà×Ñœ4×,Ñ,Ò,Øð €NØ×Ñð Bñ Bà  (Ð+‰Ø	×	Ñ	˜XÑ	%Ø&˜‰Ø	×	Ñ	˜^Ñ	+Ø'˜ˆô �wÓ€FØò 2ˆØ×,Ñ,¨TÓ2ˆØ˜BÒÜ(¨Ó7ˆMÜ˜=Ó)ˆHÜ˜=Ó)ˆHØ˜(Ò"Ø×$Ñ$ T¨=Ô9Ø˜X¬¨G×,@Ñ,@ÀÓ,FÓ(GÑGÑH�à�6Š>Ø" 4™LˆMÜ(¨Ó7ˆMÜ˜=Ó)ˆHÜ˜=Ó)ˆHØ˜(Ó"Ø,��t‘Ø˜X¨Ñ0Ñ1‘ð#2ô$ ˆg�vÔð ×#Ñ#ò )ˆØ”M %Ó(Ñ(‰ð)ð €Or  c           
      ó’  — | j                  d«      }t        j                  |«      }t        | «      }| j                  d«      dv xs d|v xr |d   dv }| j	                  d«      xs | j	                  d«      xs
 d|v xs d|v }dx}}t        t        |«      «      D �]D  }	||	   \  }
}d}|
dk(  rYt        |t        |«      d«      D ]8  }||d	z   xx   |z  cc<   ||d
z   xx   |z  cc<   |||d	z      z  }|||d
z      z  }Œ: d|f||	<   Œl|
dk(  r)|t        |d	dd…   «      z  }|t        |d
dd…   «      z  }Œš|
dk(  r7t        |t        |«      «      D ]  }||xx   |z  cc<   |||   z  }Œ d|f||	<   ŒÖ|
dk(  r|t        |«      z  }Œê|
dk(  r8t        |t        |«      «      D ]  }||xx   |z  cc<   |||   z  }Œ d|f||	<   �Œ'|
dk(  r|t        |«      z  }�Œ<|
dk(  rƒ|d   |d   }}|	dk7  r|dxx   |z  cc<   |dxx   |z  cc<   ||}}d}t        |t        |«      d«      D ]2  }||xx   |z  cc<   ||dz   xx   |z  cc<   |||   z  }|||dz      z  }Œ4 d|f||	<   �ŒÄ|
dv rbt        |t        |«      d«      D ]2  }||xx   |z  cc<   ||dz   xx   |z  cc<   |||   z  }|||dz      z  }Œ4 |
j                  «       |f||	<   �Œ*|
dv rV|	dk(  r|d   |d   }}||}}d}n||d   z   }||d   z   }t        |t        |«      d«      D ]  }|||   z  }|||dz      z  }Œ �Œ„|
dv r*|t        |ddd…   «      z  }|t        |ddd…   «      z  }�Œ²|
dv r…t        |t        |«      d«      D ]U  }||xx   |z  cc<   ||dz   xx   |z  cc<   ||dz   xx   |z  cc<   ||dz   xx   |z  cc<   |||dz      z  }|||dz      z  }ŒW |
j                  «       |f||	<   �Œ;|
dv r*|t        |ddd…   «      z  }|t        |ddd…   «      z  }�Œi|
dk(  r—t        |t        |«      d
«      D ]u  }||xx   |z  cc<   ||dz   xx   |z  cc<   ||dz   xx   |z  cc<   ||dz   xx   |z  cc<   ||dz   xx   |z  cc<   ||d	z   xx   |z  cc<   |||dz      z  }|||d	z      z  }Œw d|f||	<   �Œ|
dk(  r*|t        |ddd
…   «      z  }|t        |d	dd
…   «      z  }�Œ4|
dv s�Œ:}}d|f||	<   �ŒG |�s½t        t        |«      «      D �]ð  }	||	   \  }
}d}|
d v rT|
dk(  rd}|t        |«      k  sŒ(||   ||dz      cxk(  rdk(  rn n|||dz   …= t        dz  a	n|dz  }|t        |«      k  rŒ=Œf|
dk(  r}|t        |«      k  sŒz||   ||dz      cxk(  r5||dz      cxk(  r)||dz      cxk(  r||dz      cxk(  r||d	z      cxk(  rdk(  rn n|||d
z   …= t        dz  a	n|d
z  }|t        |«      k  rŒmŒè|
dk(  rQ|t        |«      k  sŒü||d	z      ||d
z      cxk(  rdk(  rn n|||dz   …= t        dz  a	n|dz  }|t        |«      k  rŒ@�Œ>|
d!k(  rg|t        |«      k  s�ŒS||   ||dz      cxk(  r||dz      cxk(  r||dz      cxk(  rdk(  rn n|||dz   …= t        dz  a	n|dz  }|t        |«      k  rŒU�Œª|
d"v s�Œ°t        |«      }|
|D �cg c]
  }|dk7  sŒ	|‘Œ c}f||	<   t        t        ||	   d   «      |z
  z  a	�Œó t        |«      }	d#}|	dkD  r£|	dz  }	||	   \  }
}|
dk(  r.||	dz
     \  }}|dk(  rt        |«      dk(  r||	= t        dz  a	n`d$}n]|
dk(  rXt        |«      dz
  |	k(  rt        |«      dk(  r||	= t        dz  a	Œv|rd#}n'|d   |d   cxk(  rdk(  rn nd%|dd f||	<   t        dz  a	|	dkD  rŒ£|D �cg c]  }t        |d   «      dkD  s	|d   dk(  sŒ|‘Œ  }}|d   g}|dd D ]ð  \  }
}d}|}|
dk(  rÂg }|t        |«      k  r²||   ||dz      }}||dz      ||dz      }}||dz      }||d	z      }d#}|dk(  r|dk(  r|dk(  rd$}n||z  }|||z  k(  r
|||z  k(  rd$}|r-|r|j                  |
|f«       g }|j                  d%||gf«       n|j                  |||d
z    «       |d
z  }|t        |«      k  rŒ²|s|
dk(  s|
d&k(  sŒÞ|j                  |
|f«       Œò |}d'}g } g }|D ]L  \  }
}|d'k(  r|
}|} Œ|
dk7  r!|
|k(  s
|
d%k(  r|dk(  r| j                  |«       Œ6|j                  || f«       |
}|} ŒN |j                  || f«       |}g }|D �]÷  \  }
}|
d%k(  rÚd}g }!|t        |«      k  r±||   dk(  r;|!r|j                  d%|!f«       g }!|j                  d||dz      gf«       t        dz  a	nZ||dz      dk(  r8|!r|j                  d%|!f«       g }!|j                  d||   gf«       t        dz  a	n|!j                  |||dz    «       |dz  }|t        |«      k  rŒ±|!sŒÒ|j                  d%|!f«       Œæ|
dk(  rèd}|d   |d   g}!|t        |«      k  rµ||   dk(  r=|!r|j                  |
|!f«       g }!d%}
|j                  d||dz      gf«       t        dz  a	n\||dz      dk(  r:|!r|j                  |
|!f«       g }!d%}
|j                  d||   gf«       t        dz  a	n|!j                  |||dz    «       |dz  }|t        |«      k  rŒµ|!s�Œ¾|j                  |
|!f«       �ŒÓ|
dk(  �r#d(}"t        |«      r#|d)   \  }} |d*k(  r| d+   | d,   z
  | d)   | d-   z
  f}"d}g }#|t        |«      k  rÈ|"d   ||   k(  r^|"d   ||dz      k(  rP|#r|j                  d|#f«       g }#|j                  d*||dz      ||dz      ||dz      ||d	z      gf«       t        dz  a	n)d}$|$d	k  r"|#j                  |||$z      «       |$dz  }$|$d	k  rŒ"||dz      ||dz      z
  ||d	z      ||dz      z
  f}"|d
z  }|t        |«      k  rŒÈ|#s�Œç|j                  d|#f«       �Œü|
d!k(  räd(}%d}g }#|t        |«      k  r·|%d   ||   k(  rP|%d   ||dz      k(  rB|#r|j                  d!|#f«       g }#|j                  d.||dz      ||dz      gf«       t        dz  a	n)d}$|$dk  r"|#j                  |||$z      «       |$dz  }$|$dk  rŒ"||dz      ||   z
  ||dz      ||dz      z
  f}%|dz  }|t        |«      k  rŒ·|#s�ŒÐ|j                  d!|#f«       �Œå|j                  |
|f«       �Œú |}|�s¶t        t        |«      «      D �]ž  }	||	   \  }
}|
d"v rrt        |«      dk\  rdd}&|&dz   t        |«      k  sŒ2t        ||&   ||&dz      «      r#||&xx   ||&dz      z  cc<   ||&dz   = t        dz  a	n|&dz  }&|&dz   t        |«      k  rŒOŒ‚|
d%k(  rˆt        |«      dk\  rzd}&|&dz   t        |«      k  sŒ©t        ||&|&dz    Ž r?||&xx   ||&dz      z  cc<   ||&dz   xx   ||&dz      z  cc<   ||&dz   = ||&dz   = t        dz  a	n|&dz  }&|&dz   t        |«      k  rŒd�Œ|
dk(  s�Œt        |«      d
k\  s�Œ&d}&|&dz   t        |«      k  s�Œ;t        ||&|&dz    Ž r?||&xx   ||&dz      z  cc<   ||&dz   xx   ||&dz      z  cc<   ||&dz   = ||&dz   = t        dz  a	n|&dz  }&|&dz   t        |«      k  rŒd�Œ¡ d'}g } |d   g}|dd D ]K  \  }
}|d'k7  r!|
|k7  s|
dk(  r|j                  || f«       d'}g } |
|k(  r|
dk7  r| j                  |«       ŒH|
}|} ŒM |d'k7  r|j                  || f«       |}t        ||«      }'t        |'«      t        |«      k  r1t        t        |«      t        |'«      z
  z  a| j!                  d|'«       yyc c}w c c}w )/z@
       Cleans the path string (d attribute) of the element
    rœ  rW   )ÚroundÚsquarerI   rK   r   rP  r+  r)  r*  r  NÚHÚhÚVr¯  ÚMr  r&  Úm)ÚLÚT)rz  )ÚlÚt)ÚSÚQr(  r'  ©rg  ÚqÚCÚc)rû  ÚZrû  )rz  r}  r~  r‚  )rw  r¯  FTr}  r…  r.  rÄ  r%  rg  éþÿÿÿéüÿÿÿéýÿÿÿr~  )rk  r   Úparser¨  rW  r   rˆ  Úsumrf  Ú_num_path_segments_removedrª  rÆ  r  r"  ÚserializePathÚ_num_bytes_saved_in_path_datarê  )(r  rÏ  Ú
oldPathStrrN  ru  Úhas_round_or_square_linecapsÚhas_intermediate_markersr÷  rú  Ú	pathIndexÚcmdÚdatar?  ÚstartxÚstartyÚoldLenÚcoordÚsubpath_needs_anchorÚnext_cmdÚ	next_datar¯  ÚnewPathÚnewDataÚp1xÚp1yÚp2xÚp2yÚdxÚdyÚfoundStraightCurverz  ÚprevCmdÚprevDataÚ
lineTuplesÚ
bez_ctl_ptÚcurveTuplesÚjÚquad_ctl_ptÚ
coordIndexÚ
newPathStrs(                                           r  Ú	cleanPathr­  è  s‡  € ð ×%Ñ% cÓ*€JÜ×Ñ˜JÓ'€DÜ�gÓ€Eð
 	×ÑÐ-Ó.Ð2EÐEò 	XØ˜uÐ$ÒW¨Ð/?Ñ)@ÐDWÐ)Wð !ð 	×Ñ˜XÓ&ò 	!Ø×Ñ Ó-ò	!à�uÐò	!ð ˜5Ð ð	 ð €I€AˆÜœ3˜t›9Ó%ó `*ˆ	Ø˜‘O‰	ˆˆTØˆð �#Š:Ü˜1œc $›i¨Ó+ò !�Ø�Q˜‘U“˜qÑ “Ø�Q˜‘U“˜qÑ “Ø�T˜!˜a™%‘[Ñ �Ø�T˜!˜a™%‘[Ñ ‘ð	!ð
  # D˜kˆD�ŠOØ�CŠZØ”�T˜!˜$˜Q˜$‘Z“Ñ ˆAØ”�T˜!˜$˜Q˜$‘Z“Ñ ‰AØ�CŠZÜ˜1œc $›iÓ(ò �Ø�Q“˜1‘“Ø�T˜!‘W‘‘ðð  # D˜kˆD�ŠOØ�CŠZØ”�T“‰N‰AØ�CŠZÜ˜1œc $›iÓ(ò �Ø�Q“˜1‘“Ø�T˜!‘W‘‘ðð  # D˜kˆD�‹OØ�CŠZØ”�T“‰NŠAØ�CŠZØ! !™W d¨1¡g�FˆFð ˜AŠ~Ø�Q“˜1‘“Ø�Q“˜1‘“à˜6ˆqˆAØˆAÜ˜1œc $›i¨Ó+ò !�Ø�Q“˜1‘“Ø�Q˜‘U“˜qÑ “Ø�T˜!‘W‘�Ø�T˜!˜a™%‘[Ñ ‘ð	!ð
  # D˜kˆD�‹OØ�JÑÜ˜1œc $›i¨Ó+ò !�Ø�Q“˜1‘“Ø�Q˜‘U“˜qÑ “Ø�T˜!‘W‘�Ø�T˜!˜a™%‘[Ñ ‘ð	!ð
  #Ÿy™y›{¨DÐ1ˆD�‹OØ�E‰\Ø˜AŠ~ð "& a¡¨$¨q©'˜�Ø˜v�1�Ø‘à˜T !™W™�Ø˜T !™W™�Ü˜1œc $›i¨Ó+ò !�Ø�T˜!‘W‘�Ø�T˜!˜a™%‘[Ñ ‘ò!ð �JÑØ”�T˜!˜$˜Q˜$‘Z“Ñ ˆAØ”�T˜!˜$˜Q˜$‘Z“Ñ ŠAØ�JÑÜ˜1œc $›i¨Ó+ò !�Ø�Q“˜1‘“Ø�Q˜‘U“˜qÑ “Ø�Q˜‘U“˜qÑ “Ø�Q˜‘U“˜qÑ “Ø�T˜!˜a™%‘[Ñ �Ø�T˜!˜a™%‘[Ñ ‘ð!ð  #Ÿy™y›{¨DÐ1ˆD�‹OØ�JÑØ”�T˜!˜$˜Q˜$‘Z“Ñ ˆAØ”�T˜!˜$˜Q˜$‘Z“Ñ ŠAØ�CŠZÜ˜1œc $›i¨Ó+ò !�Ø�Q“˜1‘“Ø�Q˜‘U“˜qÑ “Ø�Q˜‘U“˜qÑ “Ø�Q˜‘U“˜qÑ “Ø�Q˜‘U“˜qÑ “Ø�Q˜‘U“˜qÑ “Ø�T˜!˜a™%‘[Ñ �Ø�T˜!˜a™%‘[Ñ ‘ð!ð  # D˜kˆD�‹OØ�CŠZØ”�T˜!˜$˜Q˜$‘Z“Ñ ˆAØ”�T˜!˜$˜Q˜$‘Z“Ñ ŠAØ�JÓØ˜6ˆqˆAØ" D˜kˆD�‹OðA`*òJ (äœs 4›yÓ)ó ,	OˆIØ˜Y™‰IˆC�ØˆAØ�oÑ%Ø˜#’:ð �AØœ#˜d›)“mØ˜A‘w $ q¨1¡u¡+Ô2°Õ2Ø   1 q¡5 ˜MÜ2°aÑ7Ñ2à˜Q™˜ð œ#˜d›)”mð ˜’Øœ#˜d›)“mØ˜A‘w $ q¨1¡u¡+Ôn°°a¸!±e±ÔnÀÀQÈÁUÁÔnÈtÐTUÐXYÑTYÉ{ÔnÐ^bÐcdÐghÑchÑ^iÔnÐmnÕnØ   1 q¡5 ˜MÜ2°aÑ7Ñ2à˜Q™˜ð œ#˜d›)”mð ˜’Øœ#˜d›)“mØ˜A ™E‘{ d¨1¨q©5¡kÔ6°QÕ6Ø   1 q¡5 ˜MÜ2°aÑ7Ñ2à˜Q™˜ð œ#˜d›)•mð ˜’Øœ#˜d›)”mØ˜A‘w $ q¨1¡u¡+ÔP°°a¸!±e±ÔPÀÀQÈÁUÁÔPÈqÕPØ   1 q¡5 ˜MÜ2°aÑ7Ñ2à˜Q™˜ð œ#˜d›)•mð ˜
Ó"Ü˜T›�Ø#&¸DÖ(O°5ÀEÈQÃJªÒ(OÐ"P��Y‘Ü*¬c°$°y±/À!Ñ2DÓ.EÈÑ.NÑNÒ*ðY,	Oô^ ˜“Iˆ	Ø$Ðð ˜!ŠmØ˜‰NˆIØ˜Y™‰IˆC�Ø�cŠzØ&*¨9°q©=Ñ&9Ñ#�˜)Ø˜s’?¤s¨9£~¸Ò':ð ˜Y˜Ü.°!Ñ3Ñ.ð ,0Ñ(Ø˜’Ü�t“9˜q‘= IÒ-´#°d³)¸q².ð ˜Y˜Ü.°!Ñ3Ð.ØÙ'Ø+0Ñ(Ø˜!‘W  Q¡Ô,¨1Õ,ð (+¨D°°¨H o�D˜‘OÜ.°!Ñ3Ð.ðA ˜!‹mðF "ÖH�T¤S¨¨a©£\°AÒ%5¸¸a¹ÀC»ŠDÐH€DÐHð �A‰wˆi€GØ˜A˜B�xò $+‰ˆˆdØˆØˆØ�#Š:ØˆGØ”c˜$“i’-ð # 1™g t¨A°©E¡{�c�Ø" 1 q¡5™k¨4°°A±©;�c�Ø˜!˜a™%‘[�Ø˜!˜a™%‘[�à%*Ð"à˜’7Ø˜a’x C¨1¢HØ-1Ñ*à˜R™�AØ˜a #™g’~¨#°°S±ª.Ø-1Ð*á%áØŸ™¨¨W ~Ô6Ø"$˜à—N‘N C¨"¨b¨ ?Õ3à—N‘N 4¨¨!¨a©% =Ô1à�Q‘�ð; ”c˜$“i“-ñ< �c˜S’j C¨3£JØ�N‰N˜C ˜>Õ*ðI$+ðJ €Dð €GØ€HØ€GØò  ‰ˆˆdØ�bŠ=àˆGØ‰Hð �cŠz˜s gš~°#¸²*ÀÈCÂØ—‘ Õ%ð —‘ ¨Ð2Ô3Ø�Ø‘ð# ð& ‡N�N�G˜XÐ&Ô'Ø€Dð €GØó t(‰ˆˆdà�#Š:ØˆAØˆJØ”c˜$“i’-Ø˜‘7˜a’<á!àŸ™¨¨ZÐ'8Ô9Ø%'˜
à—N‘N C¨$¨q°1©u©+¨Ð#7Ô8Ü.°!Ñ3Ñ.Ø˜!˜a™%‘[ AÒ%Ù!àŸ™¨¨ZÐ'8Ô9Ø%'˜
Ø—N‘N C¨$¨q©'¨Ð#3Ô4Ü.°!Ñ3Ñ.à×%Ñ% d¨1¨Q°©U mÔ4Ø�Q‘�ð' ”c˜$“i“-ò( Ø—‘  ZÐ0Õ1à�CŠZØˆAØ˜q™' 4¨¡7Ð+ˆJØ”c˜$“i’-Ø˜‘7˜a’<á!àŸ™¨¨ZÐ'8Ô9Ø%'˜
Ø!˜à—N‘N C¨$¨q°1©u©+¨Ð#7Ô8Ü.°!Ñ3Ñ.Ø˜!˜a™%‘[ AÒ%Ù!àŸ™¨¨ZÐ'8Ô9Ø%'˜
Ø!˜Ø—N‘N C¨$¨q©'¨Ð#3Ô4Ü.°!Ñ3Ñ.à×%Ñ% d¨1¨Q°©U mÔ4Ø�Q‘�ð+ ”c˜$“i“-ó, Ø—‘  ZÐ0Ö1à�C‹Zð  ˆJô �7Œ|Ø&-¨b¡kÑ#�˜(Ø˜c’>Ø"*¨2¡,°¸"±Ñ"=¸xÈ¹|ÈhÐWYÉlÑ?ZÐ![�JØˆAØˆKØ”c˜$“i’-ð ˜a‘= D¨¡GÒ+°
¸1±ÀÀaÈ!ÁeÁÒ0LÙ"ØŸ™¨¨[Ð'9Ô:Ø&(˜à—N‘N C¨$¨q°1©u©+°t¸AÀ¹E±{ÀDÈÈQÉÁKÐQUÐVWÐZ[ÑV[ÑQ\Ð)]Ð#^Ô_Ü.°!Ñ3Ñ.à�AØ˜qš&Ø#×*Ñ*¨4°°A±©;Ô7Ø˜Q™˜ð ˜q›&ð
 # 1 q¡5™k¨D°°Q±©KÑ7¸¸aÀ!¹e¹ÀtÈAÐPQÉEÁ{Ñ9RÐS�
Ø�Q‘�ð' ”c˜$“i“-ó* Ø—‘  [Ð1Ö2à�CŠZØ ˆKØˆAØˆKØ”c˜$“i’-Ø˜q‘> T¨!¡WÒ,°¸Q±À4ÈÈAÉÁ;Ò1NÙ"ØŸ™¨¨[Ð'9Ô:Ø&(˜à—N‘N C¨$¨q°1©u©+°t¸AÀ¹E±{Ð)CÐ#DÔEÜ.°!Ñ3Ñ.à�AØ˜qš&Ø#×*Ñ*¨4°°A±©;Ô7Ø˜Q™˜ð ˜q›&ð  $ A¨¡E™{¨T°!©WÑ4°d¸1¸q¹5±kÀDÈÈQÉÁKÑ6OÐP�Ø�Q‘�ð ”c˜$“i“-ó" Ø—‘  [Ð1Ö2à�N‰N˜C ˜;Ö'ðit(ðj €Dò $Üœs 4›yÓ)ó &	(ˆIØ˜Y™‰IˆC�ð �jÑ ¤S¨£Y°!¢^Ø�
Ø  ‘l¤S¨£YÓ.Ü# D¨Ñ$4°d¸:Àa¹<Ñ6HÔIØ˜ZÓ(¨D°¸A±Ñ,>Ñ>Ó(Ø  ¨A¡Ð.Ü2°aÑ7Ñ2à" a™˜
ð ! ‘l¤S¨£YÔ.ð ˜’¤ D£	¨Q¢Ø�
Ø  ‘l¤S¨£YÓ.Ü(¨$¨z¸*ÀQ¹,Ð*GÑHØ˜ZÓ(¨D°¸A±Ñ,>Ñ>Ó(Ø˜Z¨™\Ó*¨d°:¸a±<Ñ.@Ñ@Ó*Ø  ¨A¡Ð.Ø  ¨A¡Ð.Ü2°aÑ7Ñ2à" a™˜
ð ! ‘l¤S¨£YÕ.ð ˜”¤ D£	¨Q¤Ø�
Ø  ‘l¤S¨£YÔ.Ü(¨$¨z¸*ÀQ¹,Ð*GÑHØ˜ZÓ(¨D°¸A±Ñ,>Ñ>Ó(Ø˜Z¨™\Ó*¨d°:¸a±<Ñ.@Ñ@Ó*Ø  ¨A¡Ð.Ø  ¨A¡Ð.Ü2°aÑ7Ñ2à" a™˜
ð ! ‘l¤S¨£YÕ.ð=&	(ðT €GØ€HØ�A‰wˆi€GØ˜A˜B�xò ‰ˆˆdà�bŠ=Ø�gŠ~ ¨¢Ø—‘ ¨Ð2Ô3Ø�Ø�ð �'Š>˜c SšjØ�O‰O˜DÕ!ð ˆGØ‰Hðð" �"‚}Ø�‰˜ Ð*Ô+Ø€Dä˜t WÓ-€Jô ˆ:ƒœ#˜j›/Ò)Ü%¬#¨j«/¼CÀ
»OÑ*KÑLÐ%Ø×Ñ˜S *Õ-ð *ùòm	 )PùòV Is   Ú;
~?Û~?Þ(ßc                 óP  — d}t         j                  | j                  «       «      }g }t        t	        |«      «      D ]Ú  }||   j                  d«      }t	        |«      dk(  r|j                  |d   «       Œ:t        t	        |«      «      D ]Š  }|dk(  r|d   dk7  sŒ|j                  |d   «       Œ&d}t	        |«      r|t	        |«      dz
     }|r.|t	        |«      dz
     dv r|dz   ||   z   |t	        |«      dz
  <   Œt|j                  d||   z   «       ŒŒ ŒÜ t	        |«      dz  dk7  rg S d}|t	        |«      k  rY	 t        «       j                  ||   «      ||<   t        «       j                  ||dz      «      ||dz   <   |dz  }|t	        |«      k  rŒY|S # t        $ r g cY S w xY w)zw
       Parse string into a list of points.

       Returns a list containing an even number of coordinate strings
    r   ú-r  r.  )ÚeÚEr&  )	ÚRE_COMMA_WSPrŠ  r‹  r   rˆ  rª  r   Úcreate_decimalr   )rg  r?  Úws_numsÚnumsÚ	negcoordsr©  Úprevs          r  ÚparseListOfPointsr¸  Ù
  s¹  € ð 	
€Aô × Ñ  §¡£Ó+€GØ€Dô ”3�w“<Ó ò 8ˆØ˜A‘J×$Ñ$ SÓ)ˆ	ô ˆy‹>˜QÒØ�K‰K˜	 !™Õ%ô œ3˜y›>Ó*ò 8�à˜’6Ø  ‘| rÓ)ØŸ™ I¨a¡LÕ1ð
 �DÜ˜4”yØ#¤C¨£I°¡MÑ2˜Ù ¤S¨£Y°¡]Ñ 3°zÑ AØ.2°S©j¸9ÀQ¹<Ñ.G˜œS ›Y¨™]Ò+àŸ™ C¨)°A©,Ñ$6Õ7ñ8ð8ô4 ˆ4ƒy�1�}˜ÒØˆ	ð 	
€AØ
Œc�$‹iŠ-ð	Ü “l×1Ñ1°$°q±'Ó:ˆD�‰GÜ$›,×5Ñ5°d¸1¸q¹5±kÓBˆD��Q‘‰Kð 	
ˆQ‰ˆð Œc�$‹i‹-ð €Køô  ò 	ØŠIð	ús   Ä=AF ÆF%Æ$F%c                 óè   — t        | j                  d«      «      }t        |«      dz  }|dk\  r(|dd \  }}|dd \  }}||k(  r||k(  r|dd…= t        dz  a| j	                  dt        ||d«      «       y)zI
       Remove unnecessary closing point of polygon points attribute
    Úpointsr&  Nr†  r  T)r¸  rk  rˆ  Ú _num_points_removed_from_polygonrê  ÚscourCoordinates)r¯  rÏ  ÚptsÚNr”  r•  ÚendxÚendys           r  ÚcleanPolygonrÁ    s‡   € ô ˜D×-Ñ-¨hÓ7Ó
8€CÜˆC‹�1‰€AØˆA‚vØ˜r ˜7Ñˆ�Ø˜2˜3�x‰ˆˆtØ�TŠ>˜f¨šnØ�B‘C�Ü,°Ñ1Ð,Ø×Ñ�hÔ 0°°g¸tÓ DÕEr  c                 ór   — t        | j                  d«      «      }| j                  dt        ||d«      «       y)z0
       Scour the polyline points attribute
    rº  TN)r¸  rk  rê  r¼  )r¯  rÏ  r½  s      r  ÚcleanPolylinerÃ  &  s3   € ô ˜D×-Ñ-¨hÓ7Ó
8€CØ×Ñ�hÔ 0°°g¸tÓ DÕEr  c                 óà   — | j                  «       } | dv rOt        t        |«      «      }| dk(  r|D �cg c]  }|dz  dk  sŒ|‘Œ c}S | dv r|D �cg c]  }|dz  dk  sŒ|‘Œ c}S g S c c}w c c}w )z”
       Checks if there are control points in the path data

       Returns the indices of all values in the path data which are control points
    )r„  rg  r‚  r„  r*  r(  r�  r&  ©rf  r   rˆ  ©r’  r“  Úindicesr4  s       r  ÚcontrolPointsrÈ  .  sx   € ð �)‰)‹+€CØ
ˆoÑÜœ˜D›	Ó"ˆØ�#Š:Ø'.ÖB˜e°5¸1±9À³/’EÒBÐBØ�JÑØ'.ÖB˜e°5¸1±9À³/’EÒBÐBà€Iùò	 CùâBs   ²A&Á A&ÁA+ÁA+c                 óŽ   — | j                  «       dk(  r,t        t        |«      «      }|D �cg c]  }|dz  dv sŒ|‘Œ c}S g S c c}w )z‚
       Checks if there are flags in the path data

       Returns the indices of all values in the path data which are flags
    r  r+  )r'  r(  rÅ  rÆ  s       r  ÚflagsrÊ  ?  sG   € ð ‡y�yƒ{�cÒÜœ˜D›	Ó"ˆØ#*ÖD˜%¨u°q©y¸VÒ.C’ÒDÐDà€Iùò Es
   ¬A¹Ac                 ó8   ‡— dj                  ˆfd„| D «       «      S )z;
       Reserializes the path data with some cleanups.
    r.  c              3   óp   •K  — | ]-  \  }}|t        |‰t        ||«      t        ||«      ¬ «      z   –— Œ/ y­w))Úcontrol_pointsrÊ  N)r¼  rÈ  rÊ  )rz  r’  r“  rÏ  s      €r  r{  z serializePath.<locals>.<genexpr>R  sF   øè ø€ ò -ñ !�s˜Dð Ô)¨$°Ü9FÀsÈDÓ9QÜ05°c¸4Ó0@ôBõ Bñ -ùs   ƒ36©r…  )ÚpathObjrÏ  s    `r  rŒ  rŒ  L  s%   ø€ ð �7‰7ó -ð %,ô-ó -ð -r  c                 ó2   — dj                  d„ | D «       «      S )z@
       Reserializes the transform data with some cleanups.
    ú c              3   ód   K  — | ](  \  }}|d z   dj                  d„ |D «       «      z   dz   –— Œ* y­w)ú(rÑ  c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr9  )ÚscourUnitlessLength)rz  r\  s     r  r{  z/serializeTransform.<locals>.<genexpr>.<genexpr>\  s   è ø€ Ò,_ÈVÔ-@À×-HÑ,_ùs   ‚rš  NrÎ  )rz  ÚcommandÚnumberss      r  r{  z%serializeTransform.<locals>.<genexpr>\  s;   è ø€ ò :Ù(˜ ð ˜c‘M C§H¡HÑ,_ÐW^Ô,_Ó$_Ñ_ÐbeÕeñ :ùs   ‚.0rÎ  )ÚtransformObjs    r  ÚserializeTransformrÙ  X  s"   € ð �8‰8ñ :Ø,8ô:ó :ð :r  c                 ó$  — | ��g }d}d}| D ]„  }||v }	t        ||j                  |	¬«      }
|dkD  rI|s#|
d   j                  «       s|
d   dk(  r,d|v s(d|v s$|dz
  |vs|j                  r|j                  d«       |j                  |
«       |
}|dz  }Œ† |j                  rat	        |«      dkD  rRt        dt	        |«      «      D ])  }||   d   dk(  sŒd||dz
     v sŒ||dz
  xx   dz  cc<   Œ+ dj                  |«      S ydj                  |«      S y)	a1  
       Serializes coordinate data with some cleanups:
          - removes all trailing zeros after the decimal
          - integerize coordinates if possible
          - removes extraneous whitespace
          - adds spaces between values in a subcommand if required (or if force_whitespace is True)
    r   r.  )Úrenderer_workaroundÚis_control_pointú.r°  r  rÑ  r¯  )rÕ  rÛ  rþ  rª  rˆ  r   r…  )r“  rÏ  Úforce_whitespacerÍ  rÊ  rœ  r„  ÚpreviousCoordr—  rÜ  ÚscouredCoordr?  s               r  r¼  r¼  `  sL  € ð ÑØˆØˆØˆØò 	ˆEØ  NÐ2ÐÜ.¨uØCJ×C^ÑC^Ø@PôRˆLð �A’Ù)Ø(¨™O×3Ñ3Ô5Ø)¨!™_°Ò3¸SÀMÑ=QÐUXÐ\iÑUiØ˜A™# UÑ*¨w×/JÒ/JØ—‘˜sÔ#ð �N‰N˜<Ô(Ø(ˆMØ�‰F‰Að+	ð8 ×&Ò&Ü�7‹|˜aÒÜ˜q¤# g£,Ó/ò .�AØ˜q‘z !‘}¨Ó+°°w¸qÀ1¹u±~Ò0EØ  A¡›¨#Ñ-œð.ð —w‘w˜wÓ'Ð'ð ð —7‘7˜7Ó#Ð#àr  c                 ó‚   — t        | «      } t        | j                  «      t        j	                  | j
                  «      z   S )z)
    Scours a length. Accepts units.
    )rR  rÕ  rV  r$  rC  rX  )r  s    r  ÚscourLengthrâ  ”  s/   € ô �vÓ€Fä˜vŸ|™|Ó,¬t¯x©x¸¿¹Ó/EÑEÐEr  c                 ó$  — t        | t        «      s"t        «       j                  t	        | «      «      } | }|rt
        j                  | «      } nt        j                  | «      } | j                  «       }| |k(  rt        |«      } n| j                  «       } dj                  | «      }dj                  |j                  t        |«      «      «      }|s:t        |«      dkD  r|dd dk(  r|dd }nt        |«      dkD  r|dd dk(  rd|dd z   }|}t        |«      dkD  rw| j                  «       }| j                  | «      j                  «       } t        j                   | «      d	z   t        j                   |«      z   }t        |«      t        |«      k  r|}|S )
z 
    Scours the numeric part of a length only. Does not accept units.

    This is faster than scourLength on elements guaranteed not to
    contain units.
    z{0:f}r&  Nz0.r  r'  z-0.r¯  r°  )rX  r   r   r³  rC  ÚscouringContextCr  r  Úto_integral_valueÚ	normalizeÚformatÚquantizerˆ  ÚadjustedÚscalebr…  Ú	text_type)	r  rÛ  rÜ  Úinitial_lengthÚ	intLengthÚnonsciÚreturn_valuer*  Úscis	            r  rÕ  rÕ  �  sn  € ô �fœgÔ&Ü“×,Ñ,¬S°«[Ó9ˆØ€Nñ Ü!×&Ñ& vÓ.‰ä ×%Ñ% fÓ-ˆð ×(Ñ(Ó*€IØ�ÒÜ˜Ó#‰à×!Ñ!Ó#ˆð
 �^‰^˜FÓ#€FØ�^‰^˜N×3Ñ3´G¸F³OÓDÓE€FÙÜˆv‹;˜Š?˜v b q˜z¨TÒ1Ø˜A˜B�Z‰FÜ�‹[˜1Š_ ¨¨ ¨uÒ!4Ø˜6 ! "˜:Ñ%ˆFØ€Lô ˆ6ƒ{�Q‚ð —?‘?Ó$ˆØ—‘ ˜yÓ)×3Ñ3Ó5ˆä�m‰m˜FÓ# cÑ)¬C¯M©M¸(Ó,CÑCˆäˆs‹8”c˜&“kÒ!ØˆLàÐr  c                 óÆ  — d}t        | «      }dD �]  }| j                  |«      }|dk7  rvt        |«      }|j                  t        j
                  k7  rNt        |«      }t        |«      t        |«      k  r,|t        |«      t        |«      z
  z  }| j                  ||«       ||v sŒ•||   }t        |«      }|j                  t        j
                  k7  sŒÃt        |«      }t        |«      t        |«      k  sŒæ|t        |«      t        |«      z
  z  }|||<   �Œ t        | |«       | j                  D ].  }|j                  t        j                  k(  sŒ!|t        |«      z  }Œ0 |S )að  
    Because opacities, letter spacings, stroke widths and all that don't need
    to be preserved in SVG files with 9 digits of precision.

    Takes all of these attributes, in the given element node and its children,
    and reduces their precision to the current Decimal context's precision.
    Also checks for the attributes actually being lengths, not 'inherit', 'none'
    or anything that isn't an SVGLength.

    Returns the number of bytes saved after performing these reductions.
    r   )rN   r<   r8   rZ   rS   rY   rV   rG   ra   rF   r@   r?   r[   r.  )r¨  rk  rR  rX  r$  r=  râ  rˆ  rê  r©  rm  rn  r   ro  ÚreducePrecision)r  r¼  r”  Ú
lengthAttrr–  ÚvalLenÚnewValrs  s           r  rò  rò  Ò  sF  € ð €Cä�wÓ€Fð'ó 0ˆ
ð
 ×"Ñ" :Ó.ˆØ�"Š9Ü˜s“^ˆFØ�|‰|œtŸ|™|Ò+Ü$ SÓ)�Ü�v“;¤ S£Ò)Øœ3˜s›8¤c¨&£kÑ1Ñ1�CØ×(Ñ(¨°VÔ<à˜ÒØ˜Ñ$ˆCÜ˜s“^ˆFØ�|‰|œtŸ|™|Ó+Ü$ SÓ)�Ü�v“;¤ S£Ó)Øœ3˜s›8¤c¨&£kÑ1Ñ1�CØ)/�F˜:Ó&ð+0ô, ˆg�vÔà×#Ñ#ò *ˆØ�>‰>œT×.Ñ.Ó.Ø”? 5Ó)Ñ)‰Cð*ð €Jr  c                 óR   — | dk  r| dz  } n| dz  } | dk\  r| dz  } | S | dk  r| dz  } | S )zü
    Because any rotation can be expressed within 360 degrees
    of any given number, and since negative angles sometimes
    are one character longer than corresponding positive angle,
    we shorten the number to one in the range to [-90, 270[.
    r   i˜þÿÿih  i  i¦ÿÿÿr  )Úangles    r  ÚoptimizeAnglerø     sM   € ð ˆq‚yØ�‰‰à�‰ˆð
 �‚|Ø�‰ˆð €Lð 
�ŠØ�‰ˆØ€Lr  c                 ó,  — t        | «      dk(  �r| d   d   dk(  �r| d   d   x}\  }}}}}}|g d¢k(  r| d= nô|dk(  r|dk(  r|dk(  r|dk(  r
d||gf| d<   nÖ|dk(  r|dk(  r|dk(  r|dk(  r
d||gf| d<   n¸||k(  r³d|cxk  rdk  r¨n n¥|dk(  r | |k(  ršd|cxk  rdk  r�n nŒ|dk(  r‡t        |dz  |dz  z   dz
  «      t        d	«      k  rd||}	}t        t        t	        j
                  t	        j                  t        |«      «      «      «      «      }
|	dk  r|dk  rd
|
z
  }
nd|
z
  }
d|
gf| d<   | D ]Š  \  }}|dk(  rt        |«      dk(  sŒ|d   dk(  sŒ#|d= Œ'|dk(  r;t        |d   «      |d<   t        |«      dk(  sŒL|d   |d   cxk(  rdk(  sŒ^n Œa|dd…= Œg|dk(  sŒmt        |«      dk(  sŒ||d   |d   k(  sŒˆ|d= ŒŒ d}|t        | «      k  �rÙ| |   \  }}| |dz
     \  }}||cxk(  rdk(  r…n n‚|dxx   |d   z  cc<   t        |«      dk(  rAt        |«      dk(  r|dxx   |d   z  cc<   n"t        |«      dk(  r|j                  |d   «       | |= |d   |d   cxk(  rdk(  �r4n �n0|dz  }| |= �n&||cxk(  rdk(  r>n n;t        |«      t        |«      cxk(  rdk(  rn nt        |d   |d   z   «      |d<   | |= nÝ||cxk(  rdk(  rÍn nÊ|dxx   |d   z  cc<   t        |«      dk(  rt        |«      dk(  r|dxx   |d   z  cc<   nct        |«      dk(  r)t        |«      dk(  r|j                  |d   |d   z  «       n,t        |«      dk(  rt        |«      dk(  r|dxx   |d   z  cc<   | |= |d   dk(  r$t        |«      dk(  s|d   dk(  r|dz  }| |= n|dz  }|t        | «      k  r�ŒÙd}|t        | «      k  r`| |   \  }}|dk(  s|dk(  rt        |«      dk(  r|d   dk(  r| |= n$|dk(  rt        |«      dk(  r|d   dk(  r| |= n|dz  }|t        | «      k  rŒ_yy)z“
    Optimises a series of transformations parsed from a single
    transform="" attribute.

    The transformation list is modified in-place.
    r  r   rL  )r  r   r   r  r   r   Ú	translater@  r%  r&  z1e-15iLÿÿÿé´   Úrotater'  NÚskewXÚskewY)
rˆ  Úabsr   rC  ÚmathÚdegreesÚasinrU  rø  rª  )Ú	transformrL  ÚA1ÚB1ÚA2ÚB2ÚA3ÚB3Úsin_AÚcos_ArP  rK  Úargsr?  ÚcurrTypeÚcurrArgsÚprevTypeÚprevArgss                     r  ÚoptimizeTransformr    s–  € ô* ˆ9ƒ~˜Ó˜y¨™|¨A™°(Ó:Ø*3°A©,°q©/Ð9ˆÑ'��R˜˜R  Rð Ò'Ò'Ø˜!‘ð �AŠg˜" š'Ø˜’'˜b AšgØ'¨"¨b¨Ð2ˆI�aŠLð �AŠg˜" š'Ø˜’'˜b AšgØ# b¨" XÐ.ˆI�aŠLð �BŠh˜2 œ= q�=¨R°1ªWØ�#˜’)  b¤¨A¥°"¸²'ô �r˜Q‘w 2¨¡7Ñ+¨aÑ/Ó0´7¸7Ó3CÒCØ˜r�5ˆEô œœDŸL™L¬¯©´5¸³<Ó)@ÓAÓBÓCˆAØ�qŠyØ˜1’9Ø˜q™‘Aà˜a™�AØ$ q c˜?ˆI�a‰Lð  ò ‰
ˆˆdØ�;Òô �4‹y˜A‹~ $ q¡'¨Q£,Ø˜‘GØ�XÒÜ# D¨¡GÓ,ˆD�‰Gô �4‹y˜A‹~ $ q¡'¨T°!©WÔ"9¸Ö"9Ø˜™‘HØ�W‹_ô �4‹y˜A‹~ $ q¡'¨T°!©WÓ"4Ø˜‘Gð!ðD 	
€AØ
Œc�)‹nÓ
Ø& q™\Ñˆ�(Ø& q¨1¡uÑ-Ñˆ�(Ø�xÔ. ;Õ.Ø�Q‹K˜8 A™;Ñ&‹Kä�8‹} Ò!Ü�x“= AÒ%Ø˜Q“K 8¨A¡;Ñ.”KÜ˜“] aÒ'Ø—O‘O H¨Q¡KÔ0Ø˜!�Ø˜‰{˜h q™kÔ.¨Q×.à�Q‘�Ø˜a’LØ˜(Ô. hÕ.Ü�h“-¤3 x£=Ô5°AÕ5ä'¨°©°h¸q±kÑ(AÓBˆH�Q‰KØ˜!‘Ø˜Ô, WÕ,Ø�Q‹K˜8 A™;Ñ&‹Kä�8‹} Ò!¤c¨(£m°qÒ&8à˜“˜x¨™{Ñ*”Ü�X“ !Ò#¬¨H«¸Ò(:à—‘ ¨¡¨h°q©kÑ 9Õ:Ü�X“ !Ò#¬¨H«¸Ò(:à˜“˜x¨™{Ñ*“Ø˜!�ð ˜‰{˜aÒ¤S¨£]°aÒ%7¸8ÀA¹;È!Ò;Kà�Q‘�Ø˜a‘Là�‰FˆAðS Œc�)‹nÔ
ð\ 	
€AØ
Œc�)‹nÒ
Ø& q™\Ñˆ�(Ø˜Ò  H°Ò$7Ü˜“M QÒ&¨8°A©;¸!Ò+;à˜!‘Ø˜8Ò#Ü�h“- 1Ò$¨°!©¸Ò)9à˜!‘à�‰FˆAð Œc�)‹nÕ
r  c                 óÚ  — d}dD ]¥  }| j                  |«      }|dk7  sŒt        j                  |«      }t        |«       t	        |«      }t        |«      t        |«      k  sŒ]t        |«      r| j                  ||«       n| j                  |«       |t        |«      t        |«      z
  z  }Œ§ | j                  D ]/  }|j                  t        j                  k(  sŒ!|t        ||«      z  }Œ1 |S )z¥
    Attempts to optimise transform specifications on the given node and its children.

    Returns the number of bytes saved after performing these reductions.
    r   )r  ÚpatternTransformr  r.  )rk  r   r‰  r  rÙ  rˆ  rê  r  rm  rn  r   ro  ÚoptimizeTransforms)r  rÏ  r¼  ÚtransformAttrr–  r  rõ  rs  s           r  r  r  ¼  sß   € ð €CàOò .ˆØ×"Ñ" =Ó1ˆØ�"‹9Ü,×2Ñ2°3Ó7ˆIä˜iÔ(ä'¨	Ó2ˆFä�6‹{œS ›XÓ%Ü�v”;Ø×(Ñ(¨¸Õ?à×+Ñ+¨MÔ:Ø”s˜3“x¤# f£+Ñ-Ñ-‘ð.ð  ×#Ñ#ò 6ˆØ�>‰>œT×.Ñ.Ó.ØÔ% e¨WÓ5Ñ5‰Cð6ð €Jr  c                 ó&  — d}t        | t        j                  j                  j                  «      r>t
        t        | j                  «      z  a| j                  j                  | «       |dz  }|S | j                  dd D ]  }|t        |«      z  }Œ |S )z@
       Removes comments from the element and its children.
    r   r  N)rX  ÚxmlÚdomÚminidomÚCommentÚ_num_bytes_saved_in_commentsrˆ  r“  r·  r¸  rm  ÚremoveComments)r  r¼  Ú
subelements      r  r  r  Û  s‹   € ð
 €Cä�'œ3Ÿ7™7Ÿ?™?×2Ñ2Ô3Ü$¬¨G¯L©LÓ(9Ñ9Ð$Ø×Ñ×&Ñ& wÔ/Øˆq‰ˆð
 €Jð "×,Ñ,©QÐ/ò 	.ˆJØ”> *Ó-Ñ-‰Cð	.ð €Jr  c                 ó¦  — dd l }	 | j                  t        d   d«      }|dk7  �r8t        |«      dkD  �r(t        j
                  j                  t        j
                  j                  |«      «      d   j                  «       dd  }|dv �rÒ|j                  dd«      }t        j                  d	d
|«      }t        j                  j                  |«      }|j                  dk(  r%|j!                  d¬«      }|d   dk(  rd|z   }nd|z   }d }|j                  dk(  r�|j
                  d   dk7  r{|j"                  rot	        j$                  «       }t        j
                  j'                  t        j
                  j)                  |j"                  «      «      }t	        j*                  |«       	 t        j,                  j/                  |«      }	|	j1                  «       }
|	j3                  «        |�t	        j*                  |«       	 |
dk7  rZ|jA                  |
«      }|dk7  rC|dk(  rd}| jC                  t        d   dd|z   dz   |jE                  «       z   «       tF        dz  a#~y y y y y y # t4        $ rL}t7        d|z   dz   t9        |«      z   dz   |j;                  dt<        j>                  «      ¬«       d}
Y d }~ŒËd }~ww xY w# |�t	        j*                  |«       w w xY w)Nr   r   r~  r.  r  )ÚpngÚjpgÚgifú\ú/zfile:/+zfile:///Úfile)Úschemezfile://zfile:zWARNING: Could not open file 'zh' for embedding. The raster image will be kept as a reference but might be invalid. (Exception details: rš  Ústdout©r$  r   Újpegzdata:image/z;base64,)$Úbase64r‡  r„  rˆ  ÚosrN  ÚsplitextÚbasenamerf  rì  r¥  Úsubr   r‰  Úurlparser%  Ú_replaceÚ
infilenameÚgetcwdÚabspathÚdirnameÚchdirÚrequestÚurlopenÚreadÚcloseÚ	ExceptionÚprintrC  Úensure_valueÚsysr&  Ú	b64encoderï  ÚdecodeÚ_num_rasters_embedded)r  rÏ  r)  r~  ÚextÚ
href_fixedÚparsed_hrefÚworking_dir_oldÚworking_dir_newr$  Ú
rasterdatar°  Ú
b64eRasters                r  ÚembedRastersrG  í  s§  € Ûðð ×!Ñ!¤" W¡+¨vÓ6€Dð ˆrƒz”c˜$“i !“mÜ�g‰g×ÑœrŸw™w×/Ñ/°Ó5Ó6°qÑ9×?Ñ?ÓAÀ!À"ÐEˆð Ð'Ò'ð Ÿ™ d¨CÓ0ˆJäŸ™ 	¨:°zÓBˆJô
 !Ÿ,™,×/Ñ/°
Ó;ˆKð ×!Ñ! RÒ'Ø)×2Ñ2¸&Ð2ÓA�Ø˜a‘= CÒ'Ø!*¨ZÑ!7‘Jà!(¨:Ñ!5�Jð #ˆOØ×!Ñ! VÒ+°×0@Ñ0@ÀÑ0CÀsÒ0JØ×%Ò%Ü&(§i¡i£k�OÜ&(§g¡g§o¡o´b·g±g·o±oÀg×FXÑFXÓ6YÓ&Z�OÜ—H‘H˜_Ô-ð.Ü—~‘~×-Ñ-¨jÓ9�Ø!ŸY™Y›[�
Ø—
‘
”ð #Ð.Ü—H‘H˜_Õ-ð ˜RÒà#×-Ñ-¨jÓ9�
ð  Ò#ð ˜e’|Ø$˜à×*Ñ*¬2¨g©;¸Ø+8¸3Ñ+>ÀÑ+KÈj×N_ÑN_ÓNaÑ+aôcä)¨QÑ.Ð)Ù"ð $ð  ð] (ð	 $€zøôL ò  ÜÐ6¸Ñ=ð A-ñ -ä/2°1«vñ6à8;ñ<àBI×BVÑBVÐW_Ôad×akÑakÓBlõnð  •
ûð	 ûð #Ð.Ü—H‘H˜_Õ-ð /ús+   Æ$?I É	J3É'AJ.Ê)J6 Ê.J3Ê3J6 Ê6Kc                 ó^  — t        | j                  d«      «      }t        | j                  d«      «      }|j                  ru|j                  t        j
                  k7  r|j                  t        j                  k7  s:|j                  t        j
                  k7  r|j                  t        j                  k7  ry t        j                  | j                  d«      «      }d\  }}t        |«      dk(  rd	 t        |d   «      }t        |d   «      }|dk7  s|dk7  ry t        |d   «      }t        |d	   «      }||j                  k7  s||j                  k7  ry 	 | j                  dd
|j                  ›d|j                  ›�«       | j                  d«       | j                  d«       y # t        $ r Y ŒZw xY w)Nrò  rô  ÚviewBoxrÄ  r(  r   r  r&  r'  z0 0 rÑ  )rR  rk  rÛ  rX  r$  r:  rH  r²  rŠ  rˆ  rU  rV  rY  rê  r  )	Ú
docElementrÏ  Úwrw  ÚvbSepÚvbWidthÚvbHeightÚvbXÚvbYs	            r  ÚproperlySizeDocrQ  ;  sc  € ä�*×)Ñ)¨'Ó2Ó3€AÜ�*×)Ñ)¨(Ó3Ó4€Að ×"Ò"Ø�W‰WœŸ	™	Ò! a§g¡g´·±Ò&8Ø—‘œDŸI™IÒ%¨!¯'©'´T·W±WÒ*<Øô
 ×Ñ˜z×6Ñ6°yÓAÓB€EàÑ€GˆXÜ
ˆ5ƒz�Q‚ð	ä˜˜a™“/ˆCÜ˜˜a™“/ˆCØ�aŠx˜3 !š8Øô ˜E !™H“oˆGÜ˜U 1™X“ˆHØ˜!Ÿ'™'Ò! X°·±Ò%8Øð &9ð ×Ñ™I°a·g³g¸q¿wºwÐ'GÔHØ×Ñ˜wÔ'Ø×Ñ˜xÕ(øô ò 	Ùð	ús   Ã.&F  Ä:F  Æ 	F,Æ+F,c                 ó¼  — | �| j                   t        j                  k7  ry | j                  |k(  �r| j                  }| j
                  }| j                  }| j                  }d }|dk7  r|j                  ||dz   |z   «      }n|j                  |«      }| j                  }t        |j                  «      D ]D  }	|j                  |	«      }
|j                  |
j
                  |
j                  |
j                   «       ŒF | j"                  D ]"  }|j%                  |j'                  d«      «       Œ$ |j)                  || «       |} | j"                  D ]  }t+        |||«       Œ y )Nr.  r�  T)rn  r   ro  rÎ  r0  rƒ  rí  r·  rd  ÚcreateElementr
  r   r  r  rï  r7  rx  rm  r<  Ú	cloneNodeÚreplaceChildÚremapNamespacePrefix)rq  Ú	oldprefixÚ	newprefixr0  Ú	namespacer«  ÚparentÚnewNoder  r?  r—  rs  s               r  rV  rV  d  s?  € Ø€|�t—}‘}¬×(9Ñ(9Ò9Øà‡{�{�iÓØ—N‘Nˆ	Ø×%Ñ%ˆ	Ø× Ñ ˆØ—‘ˆð ˆØ˜Š?Ø×)Ñ)¨)°YÀ±_ÀyÑ5PÓQ‰Gà×'Ñ'¨	Ó2ˆGð —?‘?ˆÜ�x—‘Ó'ò 	QˆAØ—=‘= Ó#ˆDØ×"Ñ" 4×#4Ñ#4°d·i±iÀÇÁÕPð	Qð
 —_‘_ò 	7ˆEØ×Ñ §¡°Ó 5Õ6ð	7ð 	×Ñ˜G TÔ*àˆð —‘ò :ˆÜ˜U I¨yÕ9ñ:r  c                 óv   ‡ ‡— ‰€t         Št        ˆ fd„‰D «       «      s‰ S dj                  ˆfd„‰ D «       «      S )Nc              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­wr9  r  )rz  r„  rY  s     €r  r{  z#make_well_formed.<locals>.<genexpr>Œ  s   øè ø€ Ò-˜Qˆq�DŒyÑ-ùs   ƒr.  c              3   ó4   •K  — | ]  }|‰v r‰|   n|–— Œ y ­wr9  r  )rz  r„  Ú
quote_dicts     €r  r{  z#make_well_formed.<locals>.<genexpr>‘  s    øè ø€ ÒI¸q A¨¡O�:˜a’=¸Ó:ÑIùr¿  )ÚXML_ENTS_NO_QUOTESrÿ  r…  )rY  r_  s   ``r  Úmake_well_formedra  ‰  s8   ù€ ØÐÜ'ˆ
ÜÓ- *Ô-Ô-ð ˆØ�7‰7ÓIÀDÔIÓIÐIr  c                 ó†   — | j                  d«      }|dk(  s|| j                  d«      k  rd}t        }||fS d}t        }||fS )Nr   r   r   )rÒ  ÚXML_ENTS_ESCAPE_QUOTÚXML_ENTS_ESCAPE_APOS)rV  Ú
quot_countÚquoteÚxml_ents       r  Úchoose_quote_characterrh  ”  sU   € Ø—‘˜SÓ!€JØ�Q‚˜*¨¯©°CÓ(8Ò8ð ˆÜ&ˆð �'ˆ>Ðð ˆÜ&ˆØ�'ˆ>Ðr  )
rY  rñ  rð  rï  rì  ÚflowDivÚflowParaÚflowSpanÚflowTrefÚflowLine)rj  zxml:idÚclassr  r÷  rú  rû  rò  rô  r  r  r  r   r¡  r¢  rü  r  r  r  r‚  rƒ  r„  ÚrxÚryr€  r�  rœ  rº  ru  c                  ó    — t        t        «      S r9  )rˆ  ÚKNOWN_ATTRSr  r  r  r  r  ²  s   € ´´KÓ0@€ r  c                 ó4   — | j                   }t        |   }||fS r9  )r7  ÚKNOWN_ATTRS_ORDER_BY_NAME)rY  r7  Úorder_values      r  Ú_attribute_sort_key_functionrv  ·  s    € Ø�>‰>€DÜ+¨DÑ1€KØ˜ÐÐr  c                 óš   ‡— | j                  «       sg S | j                  Št        ˆfd„t        ‰j                  «      D «       t
        ¬«      S )Nc              3   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wr9  )r  )rz  r?  rY  s     €r  r{  z0attributes_ordered_for_output.<locals>.<genexpr>Å  s   øè ø€ ÒF¨�9—>‘> !×$ÑFùrú  )r˜  )ÚhasAttributesr
  Úsortedr   r  rv  )r  rY  s    @r  Úattributes_ordered_for_outputr{  ½  sD   ø€ Ø× Ñ Ô"Øˆ	Ø×"Ñ"€Iô
 ÓF¬e°I×4DÑ4DÓ.EÔFÜ2ô4ð 4r  c           
      ó–  — g }d}d}|j                   r4|j                  dk(  rd}n|j                  dk(  rd}||j                  z  }d}|j                  ||z  d| j                  g«       t        | «      }|D �]J  }|j                  }	t        |	«      \  }
}t        |	|«      }	|j                  dk(  r)d	j                  t        |	j                  d	«      «      «      }	|j                  d«       |j                  �|j                  |j                  d
g«       nk|j                  �_|j                  dk(  r0|j                  j                  d«      dk(  r|j                  d«       n |j                  dk(  r|j                  d«       |j                  |j                   d|
|	|
g«       |j                  dk(  s�Œ9|	dk(  rd}�ŒB|	dk(  s�ŒId}�ŒM | j"                  }|j$                  dk(  r|j                  d«       �nI|j                  d«       d}| j"                  D �]á  }|j&                  t(        j*                  k(  rW|s| j                  t,        v r|j                  t/        ||d|«      «       ŒS|j                  |t/        |||dz   |«      g«       d}Œx|j&                  t(        j0                  k(  rË|j                  }|s¡| j                  t,        v r|j3                  dd«      }|j3                  dd«      }|| j4                  k(  r|j7                  «       }n|| j8                  k(  r|j;                  «       }d|v r(|j3                  dd«      }d|v rŒn|j=                  «       }|j                  t        |«      «       �Œ`|j&                  t(        j>                  k(  r |j                  d|j                  dg«       �Œ�|j&                  t(        j@                  k(  r(|j                  |||dz   z  d|j                  dg«       �Œâ�Œä |r%|j                  |«       |j                  ||z  «       |j                  d | j                  dg«       dj                  |«      S )!Nr.  Útabú	ÚspacerÑ  ú
r   ru  r€  r�  zhttp://www.w3.org/2000/xmlns/Úxmlnsr%  úxmlns:r   zxlink:ú=ú	xml:spaceÚpreserveTÚdefaultFr   z/>r   r  z  z	<![CDATA[z]]>z<!--z-->z</)!ÚnewlinesÚindent_typeÚindent_depthrÆ  r‚  r{  rx  rh  ra  r…  rz  rŠ  rª  rÎ  rƒ  rŸ  r0  rm  r  rn  r   ro  ÚTEXT_CONTENT_ELEMENTSÚserializeXMLr/  rì  rë  ÚlstripÚ	lastChildÚrstripr‹  ÚCDATA_SECTION_NODEÚCOMMENT_NODE)r  rÏ  r‰  ÚpreserveWhitespaceÚoutPartsrˆ  ÚnewlineÚattrsr—  Ú	attrValuerf  rg  ÚchildrenÚ	onNewLiners  Útext_contents                   r  r‹  r‹  Í  sÔ  € Ø€Hà€KØ€GØ×ÒØ×Ñ %Ò'Ø‰KØ× Ñ  GÒ+ØˆKØ�w×+Ñ+Ñ+ˆØˆà‡O�O�k LÑ0°3¸×8HÑ8HÐIÔJô *¨'Ó2€EØó +ˆØ—N‘Nˆ	Ü/°	Ó:‰ˆˆwÜ$ Y°Ó8ˆ	à�=‰=˜GÒ#àŸ™¤¨	¯©¸Ó(<Ó!=Ó>ˆIà�‰˜Ôà�;‰;Ð"Ø�O‰O˜TŸ[™[¨#Ð.Õ/Ø×ÑÐ*Ø× Ñ Ð$CÒCÈÏÉ×HZÑHZÐ[bÓHcÐgiÒHiØ—‘ Õ)Ø×"Ñ"Ð&DÒDØ—‘ Ô)Ø�‰˜Ÿ™¨¨e°YÀÐFÔGà�=‰=˜KÔ'Ø˜JÒ&Ø%)Ò"Ø˜iÔ'Ø%*Ò"ð1+ð4 ×!Ñ!€HØ‡�˜!ÒØ�‰˜Öà�‰˜Ôàˆ	Ø×'Ñ'ó &	ˆEà�~‰~¤×!2Ñ!2Ò2ñ
 &¨×)9Ñ)9Ô=RÑ)RØ—O‘O¤L°¸ÀÐDVÓ$WÕXà—O‘O W¬l¸5À'È<ÐZ[ÑK[Ð]oÓ.pÐ$qÔrØ $‘Ià—‘¤4§>¡>Ò1Ø$Ÿ™�Ù)ð ×'Ñ'Ô+@Ñ@Ø'3×';Ñ';¸DÀ"Ó'E˜Ø'3×';Ñ';¸DÀ#Ó'F˜Ø  G×$6Ñ$6Ò6Ø+7×+>Ñ+>Ó+@™LØ" g×&7Ñ&7Ò7Ø+7×+>Ñ+>Ó+@˜LØ" lÑ2Ø+7×+?Ñ+?ÀÀcÓ+J˜Lð # lÓ2ð (4×'9Ñ'9Ó';˜Ø—‘Ô 0°Ó >Ö?à—‘¤4×#:Ñ#:Ò:Ø—‘ ¨e¯o©o¸uÐ EÖFà—‘¤4×#4Ñ#4Ò4Ø—‘ ¨+¸Àa¹Ñ*HÈ&ÐRW×RaÑRaÐchÐ iÖjñ ðM&	ñP Ø�O‰O˜GÔ$Ø�O‰O˜K¨,Ñ6Ô7Ø�‰˜˜w×/Ñ/°Ð5Ô6à�7‰7�8ÓÐr  c                 ó´  ‡— t        |«      }|j                  dk  r|j                  |_        t        |j                  ¬«      at        |j                  ¬«      adadadada	da
dadadadadadadadadat(        j*                  j,                  j/                  | «      Št1        ‰j3                  d«      «      }|rRdj5                  |«      }|j6                  rt9        |«      ‚t;        dj5                  |«      t<        j>                  ¬«       tA        ‰|«       |jB                  du rët        tE        ‰jF                  tH        «      z  at        tK        ‰jF                  tH        «      z  ag }‰jF                  jL                  }tO        |jP                  «      D ]N  }|jS                  |«      jT                  tH        v sŒ%|jW                  |jS                  |«      jX                  «       ŒP |D ]&  }‰jF                  j[                  |«       t        dz  aŒ( ‰jF                  j]                  d	«      d
k7  r‰jF                  j_                  d	d
«       ˆfd„}‰jF                  jL                  }g }g }	tO        |jP                  «      D ]}  }
|jS                  |
«      }|jX                  }|jT                  }|dd dk(  sŒ5|d
k(  r&|	jW                  |dd  «       |jW                  |«       Œ` ||dd  |«      sŒm|jW                  |«       Œ |D ]&  }‰jF                  j[                  |«       t        dz  aŒ( |	D ]  }ta        ‰jF                  |d«       Œ |jb                  rte        ‰«      a	|jf                  r?‰jF                  ji                  d«      r$‰jF                  j[                  d«       t        dz  atk        ‰jF                  |«      a
|jl                  rto        ‰jF                  «      atq        ‰|jr                  «      dkD  r	 tq        ‰|jr                  «      dkD  rŒdD ]è  }‰jF                  j3                  |«      D ]È  }|ju                  «        }|du rŠ|jv                  D ]y  }|jx                  tz        j|                  tz        j~                  tz        j€                  fv r n>|jx                  tz        j‚                  k(  sŒ^|jT                  j…                  «       rŒy n d}|sŒ¥|j†                  j‰                  |«       t        dz  aŒÊ Œê |jŠ                  r-t�        ‰jF                  «      }t�        ‰|«      }t‘        ||«       t“        ‰«      dkD  r	 t“        ‰«      dkD  rŒt•        ‰«      dkD  r	 t•        ‰«      dkD  rŒt        t—        ‰«      z  a|j˜                  rt        t›        ‰jF                  «      z  a|jœ                  rtŸ        ‰jF                  «       t�        ‰jF                  «      }‰jF                  jv                  D ]  }t        t¡        ||«      z  aŒ t        t£        ‰jF                  «      z  a|j˜                  r2t¥        ‰jF                  «      dkD  r	 t¥        ‰jF                  «      dkD  rŒ‰jF                  j3                  d«      D ]  }t§        ||«       Œ ‰jF                  j3                  d«      D ]  }t©        ||«       Œ ‰jF                  j3                  d«      D ]>  }|j]                  d«      dk(  r|j†                  j‰                  |«       Œ3t«        ||«       Œ@ |j¬                  rt"        t¯        ‰|j°                  |«      z  adD ]^  }‰j3                  |«      D ]H  }dD ]A  }|j]                  |«      dk7  sŒ|j_                  |t³        |j]                  |«      «      «       ŒC ŒJ Œ` ‰jF                  j]                  d«      }|rXt´        j·                  |«      }|D �cg c]  }t¹        |«      ‘Œ }}‰jF                  j_                  ddj»                  |«      «       t½        ‰jF                  «      at        t¿        ‰jF                  |«      z  atÁ        ‰jF                  |«      a|jÂ                  r,‰jF                  j3                  d«      D ]  }tÅ        ||«       Œ |jÆ                  rtÉ        ‰jF                  |«       tË        ‰jF                  |«      dz   }|jÌ                  du rd}‰jÎ                  r|dz  }|dz  }nd}‰jv                  D ];  }|jx                  tz        j|                  k(  r||z  }Œ&||jÑ                  «       dz   z  }Œ= |S c c}w )Nr   )ÚprecÚflowRootzNSVG input document uses {} flow text elements, which won't render on browsers!zWARNING: {}r'  Fr  r�  r   c                 óÒ   •— ‰j                  |d«      ry‰j                  d«      D ]?  }|j                  j                  «       D ]   }|j                  j                  | «      sŒ  y ŒA y)NÚ*FT)ÚgetElementsByTagNameNSr¶  r
  r;  r7  rù  )rÎ  rY  r  rY  r«  s       €r  ÚxmlnsUnusedz scourString.<locals>.xmlnsUnusedŠ  sh   ø€ Ø×%Ñ% i°Ô5Øà×3Ñ3°CÓ8ò %�Ø!(×!3Ñ!3×!:Ñ!:Ó!<ò %�IØ —~‘~×0Ñ0°Õ8Ú$ñ%ð%ð r  r*  r‚  r.  r„  )rµ  r£  r¤  r¡  r¥  TrO  rP  rN  rœ  )
rR  rX  rQ  rK  rL  rM  r²  r³  rr  r:   )r÷  rú  rò  rô  r‚  rƒ  r„  ro  rp  r  r  r  r   r€  r�  rs  rI  rÑ  rX  r€  z$<?xml version="1.0" encoding="UTF-8"z standalone="yes"z?>
)iÚsanitizeOptionsÚcdigitsÚdigitsr
   r  rä  r¹  Ú_num_attributes_removedr  Ú_num_comments_removedÚ_num_style_properties_fixedr?  r‹  r»  r�  Ú_num_bytes_saved_in_colorsr  Ú_num_bytes_saved_in_idsÚ_num_bytes_saved_in_lengthsÚ_num_bytes_saved_in_transformsr  r  r  ÚparseStringrˆ  r¶  rç  Úerror_on_flowtextr9  r:  r<  Ústderrr   Úkeep_editor_datar  r¨  Úunwanted_nsr  r
  r   r  r  rx  rª  r‚  r  rk  rê  rV  Ústrip_commentsr  Ústrip_xml_space_attributerW  rÈ  Úsimple_colorsrl  rÁ  Ú	keep_defsrl  rm  rn  r   ro  r�  r�  r/  Úisspacer·  r¸  Ú	strip_idsr�  r  r  r{  r‹  r¸  Úgroup_collapser>  Úgroup_createrf  r.  rm  r%  rÁ  rÃ  r­  Úshorten_idsrÝ  Úshorten_ids_prefixrâ  r²  rŠ  rÕ  r…  rò  r_  r  Úembed_rastersrG  Úenable_viewboxingrQ  r‹  Ústrip_xml_prologÚ
standaloneÚtoxml)Ú	in_stringrÏ  Úcnt_flowText_elÚerrmsgÚxmlnsDeclsToRemover  r4  r—  rŸ  ÚredundantPrefixesr?  r7  r–  r  rÎ  Útagr¯  Ú
removeElemrs  r§  r¾  ÚreferencedIdsrO  rP  rK  rI  Úlengthsr  Ú
out_stringÚtotal_outputr«  s                                 @r  ÚscourStringrÉ  2  sê  ø€ ä˜gÓ&€Gð ‡�˜ÒØ!Ÿ.™.ˆŒô  7§>¡>Ô2€OÜ G§O¡OÔ4Ðð$ ÐØÐØÐØÐØ"#ÐØÐØ!"ÐØ'(Ð$Ø$%Ð!Ø!"ÐØ#$Ð ØÐØ"#ÐØ%&Ð"ä
�'‰'�/‰/×
%Ñ
% iÓ
0€Cô ˜#×2Ñ2°:Ó>Ó?€OÙð3ß39±6¸/Ó3Jð 	à×$Ò$Ü˜FÓ#Ð#ä�-×&Ñ& vÓ.´S·Z±ZÕ@ô ˜c 7Ô+ð ×Ñ 5Ñ(ÜÔ!9¸#×:MÑ:MÜ:Eó"Gñ 	GÐäÔ#=¸c×>QÑ>QÜ>Ió$Kñ 	KÐð  ÐØ×&Ñ&×1Ñ1ˆÜ˜8Ÿ?™?Ó+ò 	IˆEØ�}‰}˜UÓ#×-Ñ-´Ò<Ø"×)Ñ)¨(¯-©-¸Ó*>×*GÑ*GÕHð	Ið 'ò 	)ˆDØ×Ñ×/Ñ/°Ô5Ü# qÑ(Ñ#ð	)ð ×Ñ×'Ñ'¨Ó0Ð4PÒPØ×Ñ×(Ñ(¨Ð2NÔOôð ×"Ñ"×-Ñ-€HØÐØÐÜ�8—?‘?Ó#ò 	0ˆØ�}‰}˜QÓˆØ�}‰}ˆØ�n‰nˆØ��!ˆ9˜Ó ØÐ2Ò2Ø!×(Ñ(¨¨a¨b¨Ô2Ø"×)Ñ)¨$Õ/Ù˜T ! "˜X sÕ+Ø"×)Ñ)¨$Õ/ð	0ð 'ò %ˆØ×Ñ×+Ñ+¨HÔ5Ü 1Ñ$Ñð%ð $ò >ˆÜ˜S×0Ñ0°&¸"Õ=ð>ð ×ÒÜ .¨sÓ 3Ðà×(Ò(¨S×-@Ñ-@×-MÑ-MÈkÔ-ZØ×Ñ×+Ñ+¨KÔ8Ü 1Ñ$Ðô #.¨c×.AÑ.AÀ7Ó"KÐð ×ÒÜ%2°3×3FÑ3FÓ%GÐ"ô % S¨'×*;Ñ*;Ó
<¸qÒ
@Øô % S¨'×*;Ñ*;Ó
<¸qÓ
@ð
 :ò +ˆØ×'Ñ'×<Ñ<¸SÓAò 	+ˆDØ!×/Ñ/Ó1Ð1ˆJØ˜UÑ"Ø!Ÿ_™_ò &�EØ—~‘~¬$×*;Ñ*;¼T×=TÑ=TÔVZ×VgÑVgÐ)hÑhÙØŸ™¬4¯>©>Ó9À%Ç/Á/×BYÑBYÕB[Ùð	&ð "&�JÚØ—‘×+Ñ+¨DÔ1Ü%¨Ñ*Ñ%ñ	+ð+ð ×ÒÜ.¨s×/BÑ/BÓCˆÜ,¨S°'Ó:ÐÜ˜mÐ-?Ô@ä
& sÓ
+¨aÒ
/Øô ' sÓ
+¨aÓ
/ô ,¨CÓ
0°1Ò
4Øô ,¨CÓ
0°1Ó
4ô Ô5°cÓ:Ñ:Ðà×ÒÜÔ!GÈ×H[ÑH[Ó!\Ñ\Ðð ×ÒÜ'¨×(;Ñ(;Ô<ô +¨3×+>Ñ+>Ó?€MØ×$Ñ$×/Ñ/ò [ˆÜÔ#DÀUÈMÓ#ZÑZÑð[ô Ô=¸c×>QÑ>QÓRÑRÐð ×ÒÜ  ×!4Ñ!4Ó5¸Ò9Øô ! ×!4Ñ!4Ó5¸Ó9ð ×&Ñ&×;Ñ;¸IÓFò 'ˆÜ�W˜gÕ&ð'ð ×'Ñ'×<Ñ<¸ZÓHò )ˆÜ�h Õ(ð)ð ×#Ñ#×8Ñ8¸Ó@ò %ˆØ×Ñ˜SÓ! RÒ'Ø�O‰O×'Ñ'¨Õ-ä�d˜GÕ$ð	%ð ×ÒÜ¤:¨c°7×3MÑ3MÈwÓ#WÑWÐðGò Rˆà×,Ñ,¨TÓ2ò 	RˆDðGò R�à×$Ñ$ TÓ*¨bÓ0Ø×%Ñ% d¬K¸×8IÑ8IÈ$Ó8OÓ,PÕQñRñ	RðRð ×!Ñ!×.Ñ.¨yÓ9€GÙÜ×$Ñ$ WÓ-ˆØ=DÖE°6Ô& vÕ.ÐEˆÐEØ×Ñ×(Ñ(¨°C·H±H¸WÓ4EÔFô #2°#×2EÑ2EÓ"FÐô Ô;¸C×<OÑ<OÐQXÓYÑYÐô &8¸×8KÑ8KÈWÓ%UÐ"ð ×ÒØ×'Ñ'×<Ñ<¸WÓEò 	(ˆDÜ˜˜wÕ'ð	(ð × Ò Ü˜×+Ñ+¨WÔ5ô ˜c×1Ñ1°7Ó;¸dÑB€Jð ×Ñ 5Ñ(Ø=ˆØ�>Š>ØÐ/Ñ/ˆLØ˜Ñ‰àˆà—‘ò 1ˆØ�>‰>œT×.Ñ.Ò.Ø˜JÑ&‰Là˜EŸK™K›M¨DÑ0Ñ0‰Lð	1ð ÐùòW Fs   ß&ec                 óœ  — t        |«      }|j                  d| «       t        | d«      5 }|j                  «       }d d d «       t	        |«      }t
        j                  j                  j                  |j                  d«      «      }|j                  d«      }|D ]  }	 |j                  d«       Œ |S # 1 sw Y   ŒyxY w# t        $ r Y Œ0w xY w)Nr0  Úrbzutf-8r�  rj  )r   r;  Úopenr7  rÉ  r  r  r  rª  Úencoder¶  ÚsetIdAttributer   )ÚfilenamerÏ  Úfr¾  rÇ  r«  Ú	all_nodesrq  s           r  ÚscourXmlFilerÒ  D  sÉ   € ä˜gÓ&€Gà×Ñ˜ xÔ0ô 
ˆh˜Ó	ð  Ø—F‘F“Hˆ	÷ä˜Y¨Ó0€Jô �'‰'�/‰/×
%Ñ
% j×&7Ñ&7¸Ó&@Ó
A€Cð
 ×(Ñ(¨Ó-€IØò ˆð	Ø×Ñ Õ%ðð €J÷#ð ûô ò 	Ùð	ús   ªB3ÂB?Â3B<Â?	CÃ
Cc                   ó   — e Zd ZdZd„ Zy)ÚHeaderedFormatterzk
       Show application name, version number, and copyright statement
       above usage information.
    c           
      óp   — t         ›dt        ›dt        ›dt        j                  j                  | |«      ›�S )NrÑ  r€  )ÚAPPÚVERÚ	COPYRIGHTÚoptparseÚIndentedHelpFormatterÚformat_usage)rb  Úusages     r  rÛ  zHeaderedFormatter.format_usagef  s,   € Þ"%¦s®IÜ"*×"@Ñ"@×"MÑ"MÈdÐTYÔ"Zð\ð 	\r  N)rD  rE  rF  Ú__doc__rÛ  r  r  r  rÔ  rÔ  `  s   „ ñó
\r  rÔ  z(%prog [INPUT.SVG [OUTPUT.SVG]] [OPTIONS]z¢If the input/output files are not specified, stdin/stdout are used. If the input/output files are specified with a svgz extension, then compressed SVG is assumed.é!   )Úmax_help_position)rÜ  ÚdescriptionÚ	formatterÚversionz-pÚstorer¢  )ÚactionrK  ÚdestÚhelpz-qz--quietÚ
store_trueÚquietzsuppress non-error output)rä  rå  r†  ræ  z-vz	--verboseÚverbosez!verbose output (statistics, etc.)z-ir0  z	INPUT.SVGz)alternative way to specify input filename)rä  rå  Úmetavarræ  z-oÚoutfilenamez
OUTPUT.SVGz*alternative way to specify output filenameÚOptimizationz--set-precisionr)  ÚNUMz4set number of significant digits (default: %default))rä  rK  rå  r†  rê  ræ  z--set-c-precisionr¡  r%  zXset number of significant digits for control points (default: same as '--set-precision')z--disable-simplify-colorsÚstore_falser±  Tz&won't convert colors to #RRGGBB formatz--disable-style-to-xmlrÆ  z(won't convert styles into XML attributesz--disable-group-collapsingrµ  zwon't collapse <g> elementsz--create-groupsr¶  zBcreate <g> elements for runs of elements with identical attributesz--keep-editor-datar­  zTwon't remove Inkscape, Sodipodi, Adobe Illustrator or Sketch elements and attributesz--keep-unreferenced-defsr²  zEwon't remove elements within the defs container that are unreferencedz--renderer-workaroundrÛ  zDwork around various renderer bugs (currently only librsvg) (default)z--no-renderer-workaroundzAdo not work around various renderer bugs (currently only librsvg)zSVG documentz--strip-xml-prologr»  z&won't output the XML prolog (<?xml ?>)z--remove-titlesr  zremove <title> elementsz--remove-descriptionsr  zremove <desc> elementsz--remove-metadatar  zNremove <metadata> elements (which may contain license/author information etc.)z--remove-descriptive-elementsr  z.remove <title>, <desc> and <metadata> elementsz--enable-comment-strippingr¯  zremove all comments (<!-- -->)z--disable-embed-rastersr¹  z*won't embed rasters as base64-encoded dataz--enable-viewboxingrº  zJchanges document width/height to 100%/100% and creates viewbox coordinateszOutput formattingz--indentÚstringrˆ  r  ÚTYPEz?indentation of the output: none, space, tab (default: %default)z	--nindentr‰  zIdepth of the indentation, i.e. number of spaces/tabs: (default: %default)z--no-line-breaksr‡  zkdo not create line breaks in output(also disables indentation; might be overridden by xml:space="preserve")z--strip-xml-spacer°  zBstrip the xml:space="preserve" attribute from the root SVG elementzID attributesz--enable-id-strippingr´  zremove all unreferenced IDsz--shorten-idsr·  z7shorten all IDs to the least number of letters possiblez--shorten-ids-prefixr¸  r.  ÚPREFIXz"add custom prefix to shortened IDsz--protect-ids-noninkscaperü  z(don't remove IDs not ending with a digitz--protect-ids-listrý  ÚLISTz3don't remove IDs given in this comma-separated list)rä  rK  rå  rê  ræ  z--protect-ids-prefixrû  z/don't remove IDs starting with the given prefixzSVG compatibility checksz--error-on-flowtextr«  zVexit with error if the input SVG uses non-standard flowing text (only warn by default)c                 óÖ  — t         j                  | «      \  }}|rb|j                  s|j                  d«      |_        |j                  s|r|j                  d«      |_        |s|rt         j                  d|z  «       |j                  dk  rt         j                  d«       |j                  |j                  kD  r"d|_        t        dt        j                  ¬«       |j                  dvrt         j                  d	«       |j                  dk  rt         j                  d
«       |j                  r:|j                  r.|j                  |j                  k(  rt         j                  d«       |S )Nr   z0Additional arguments not handled: %r, see --helpr  zCNumber of significant digits has to be larger than zero, see --helpr%  z³WARNING: The value for '--set-c-precision' should be lower than the value for '--set-precision'. Number of significant digits for control points reset to default value, see --helpr'  )r}  r  rÿ   z&Invalid value for --indent, see --helpz<Value for --nindent should be positive (or zero), see --helpz-Input filename is the same as output filename)Ú_options_parserÚ
parse_argsr0  rË  rë  Úerrorr¢  r¡  r:  r<  r¬  rˆ  r‰  )r  Úignore_additional_argsrÏ  Úrargss       r  rõ  rõ  ò  s$  € Ü$×/Ñ/°Ó5�N€GˆUáØ×!Ò!Ø!&§¡¨1£ˆGÔØ×"Ò"¡uØ"'§)¡)¨A£,ˆGÔÙ%©%Ü×!Ñ!Ð"TÐW\Ñ"\Ô]Ø‡~�~˜ÒÜ×ÑÐcÔdØ‡�˜Ÿ™Ò'ØˆŒÜð cÜil×isÑisõ	uà×ÑÐ":Ñ:Ü×ÑÐFÔGØ×Ñ˜aÒÜ×ÑÐ\Ô]Ø×Ò˜g×1Ò1°g×6HÑ6HÈG×L_ÑL_Ò6_Ü×ÑÐMÔNà€Nr  c                  ó   — t        «       S r9  )r   r  r  r  ÚgenerateDefaultOptionsrú    s   € ÜÓÐr  c                 óŒ   ‡ — t        ˆ fd„t        ‰ «      D «       «      }t        j                  «       }|j	                  |«       |S )Nc              3   ó^   •K  — | ]$  }|j                  d «      rŒ|t        ‰|«      f–— Œ& y­w)Ú__N)rù  Úgetattr)rz  r˜  rÏ  s     €r  r{  z"sanitizeOptions.<locals>.<genexpr>  s,   øè ø€ Òh¸ÐSV×SaÑSaÐbfÕSg˜œW W¨cÓ2Ô3Ñhùs   ƒ-š-)ÚdictÚdirrô  Úget_default_valuesÚ_update_careful)rÏ  ÚoptionsDictÚsanitizedOptionss   `  r  r   r     s:   ø€ ÜÓh¼sÀ7»|ÔhÓh€Kä&×9Ñ9Ó;ÐØ×$Ñ$ [Ô1àÐr  c                 óª   — t         j                  j                  | «      d   j                  «       dv rdd l}|j                  | |«      S t        | |«      S )Nr  )z.svgzz.gzr   )r*  rN  r+  rf  ÚgzipÚGzipFilerÌ  )rÏ  r1  r  s      r  Úmaybe_gziped_filer    sI   € Ü	‡w�w×Ñ˜Ó! !Ñ$×*Ñ*Ó,Ð0@Ñ@ÛØ�}‰}˜X tÓ,Ð,Ü�˜$ÓÐr  c                 ó  — | j                   rt        | j                   d«      }nN	 t        j                  j                  }t        j                  j                  «       rt        j                  d«       | j                  rt        | j                  d«      }||gS 	 t        j                  j                  }t        j                  | _
        ||gS # t
        $ r t        j                  }Y Œ¨w xY w# t
        $ r t        j                  }Y ŒSw xY w)NrË  zBNo input file specified, see --help for detailed usage informationÚwb)r0  r  r<  ÚstdinÚbufferrÜ  Úisattyrô  rö  rë  r&  r¬  )rÏ  ÚinfileÚoutfiles      r  ÚgetInOutr  #  sÙ   € Ø×ÒÜ" 7×#5Ñ#5°tÓ<‰ð	Ü—Y‘Y×%Ñ%ˆFô �9‰9×ÑÔÜ×!Ñ!Ð"fÔgà×ÒÜ# G×$7Ñ$7¸Ó>ˆð �GÐÐð	!Ü—j‘j×'Ñ'ˆGô Ÿ™ˆŒà�GÐÐøô# ò 	Ü—Y‘YŠFð	ûô ò 	!Ü—j‘jŠGð	!ús#   ¥C ÂC+ ÃC(Ã'C(Ã+DÄDc                  óÎ  — dt        t        «      z   t        j                  z   dz   t        t        «      z   t        j                  z   dz   t        t
        «      z   t        j                  z   dz   t        t        «      z   t        j                  z   dz   t        t        «      z   t        j                  z   dz   t        t        «      z   t        j                  z   dz   t        t        «      z   t        j                  z   dz   t        t        «      z   t        j                  z   d	z   t        t        «      z   t        j                  z   d
z   t        t        «      z   t        j                  z   dz   t        t        «      z   t        j                  z   dz   t        t        «      z   t        j                  z   dz   t        t        «      z   t        j                  z   dz   t        t         «      z   S )Nz  Number of elements removed: z   Number of attributes removed: z&  Number of unreferenced IDs removed: z  Number of comments removed: z$  Number of style properties fixed: z$  Number of raster images embedded: z+  Number of path segments reduced/removed: z*  Number of points removed from polygons: z&  Number of bytes saved in path data: z#  Number of bytes saved in colors: z%  Number of bytes saved in comments: z   Number of bytes saved in IDs: z$  Number of bytes saved in lengths: z,  Number of bytes saved in transformations: )rC  r¹  r*  Úlinesepr£  r  r¤  r¥  r?  r‹  r»  r�  r¦  r  r§  r¨  r©  r  r  r  Ú	getReportr  A  sG  € à(¬3Ô/DÓ+EÑEÌÏ
É
ÑRØ*ñ	+Ü-0Ô1HÓ-Iñ	JÜLNÏJÉJñ	Wà0ñ	1ä36Ô7GÓ3Hñ	IäKMÏ:É:ñ	Vð 	)ñ	)ô ,/Ô/DÓ+Eñ	Fô IKÏ
É
ñ	Sð 	/ñ		/ô 25Ô5PÓ1Qñ		Rô UW×T^ÑT^ñ		_ð
 	/ñ	/ô
 25Ô5JÓ1Kñ	Lô
 OQÏjÉjñ	Yð 	6ñ	6ô 9<Ô<VÓ8Wñ	Xô []×ZdÑZdñ	eð 	5ñ	5ô 8;Ô;[Ó7\ñ	]ô `b×_iÑ_iñ	jð 	1ñ	1ô 47Ô7TÓ3Uñ	Vô Y[×XbÑXbñ	cð 	.ñ		.ô 14Ô4NÓ0Oñ		Pô SU×R\ÑR\ñ		]ð 	0ñ
	0ô 36Ô6RÓ2Sñ
	Tô WY×V`ÑV`ñ
	að 	+ñ	+ô .1Ô1HÓ-Iñ	Jô MOÏJÉJñ	Wð 	/ñ	/ô 25Ô5PÓ1Qñ	Rô UW×T^ÑT^ñ	_ð 	7ñ	7ô :=Ô=[Ó9\ñ	]ðr  c           	      óÜ  — t        | «      } t        j                  «       }|j                  «       }t        || «      j	                  d«      }|j                  |«       |t        j                  u sFt        t        j                  d«      r|t        j                  j                  u s|j                  «        |t        j                  u sFt        t        j                  d«      r|t        j                  j                  u s|j                  «        t        j                  «       }t        t        ||z
  dz  «      «      }t        |«      }t        |«      }	|	|z  dz  }
| j                  s‰t!        dj#                  |j$                  ||	||
«      | j'                  dt        j                  «      ¬«       | j(                  r4t!        t+        «       | j'                  dt        j                  «      ¬«       y y y )NzUTF-8r  g     @�@rt  zCScour processed file "{}" in {} ms: {}/{} bytes new/orig -> {:.1f}%r&  r'  )r   Útimer7  rÉ  rÍ  Úwriter<  r  Úhasattrr  r8  r&  rW  rt  rˆ  rè  r:  rç  r7  r;  ré  r  )rÏ  ÚinputÚoutputr  r¾  rÇ  r`  ÚdurationÚoldsizeÚnewsizeÚsizediffs              r  r  r  T  so  € ä˜gÓ&€Gä�I‰I‹K€Eð —
‘
“€IÜ˜Y¨Ó0×7Ñ7¸Ó@€JØ
‡L�L�Ôð ”c—i‘iÑ¤W¬S¯Y©Y¸Ô%AÀeÌsÏyÉy×O_ÑO_ÑF_Ø�‰ŒØ”s—z‘zÑ!¤w¬s¯z©z¸8Ô'DÈÔSV×S]ÑS]×SdÑSdÑIdØ�‰Œä
�)‰)‹+€Cô ”5˜# ™+¨Ñ.Ó/Ó0€Hä�)‹n€GÜ�*‹o€GØ˜'Ñ! TÑ)€Hà�=Š=ÜÐS×ZÑZØ�J‰JØØØØóð
 $×0Ñ0°¼3¿:¹:ÓFõ	Hð �?Š?Ü”)“+ G×$8Ñ$8¸Ä3Ç:Á:Ó$NÖOð ð r  c                  óN   — t        «       } t        | «      \  }}t        | ||«       y r9  )rõ  r  r  )rÏ  r  r  s      r  Úrunr  y  s#   € Ü‹l€GÜ˜wÓ'�O€UˆFÜ	ˆ'�5˜&Õ!r  Ú__main__)NN)F)FF)r   F)NF)r„  )¨Ú
__future__r   r   r   r   rÙ  r*  r¥  r<  r  Úxml.dom.minidomr  Úxml.domr   r   Úcollectionsr   r	   Údecimalr
   r   r   r   r…  Ú	six.movesr   r   Úscour.svg_regexr   Úscour.svg_transformr   Úscour.yocto_cssr   r   r   rÖ  r×  rØ  r`  r`  rd  rc  r¦  r²  r„  r®  rÇ  rc  r^  r  r"  rZ  r\  r]  ra  Úobjectr$  rR  rp  rŒ  r�  r†  r©  rÁ  rÝ  rÊ  rÌ  rÍ  rÇ  r  r  r  r  r   r%  r.  r>  rf  rm  r{  r‹  r’  r   r³  r¸  r¨  r©  rÈ  rÄ  rÃ  rÅ  rÞ  rˆ  Ú_fieldsÚ__new__Ú__defaults__rG  r:  Údefault_attributesr\  rÉ  r]  Údefault_attributerß  rª  r  rU  rZ  rÈ  r_  re  rd  rj  rl  r­  r¸  rÁ  rÃ  rÈ  rÊ  rŒ  rÙ  r¼  râ  rÕ  rò  rø  r  r  r  rG  rQ  rV  ra  rh  rŠ  rz  rr  Ú	enumeratert  rv  r{  r‹  rÉ  rÒ  rÚ  rÔ  ÚOptionParserrô  Ú
add_optionrW  ÚSUPPRESS_HELPÚOptionGroupÚ_option_group_optimizationÚadd_option_groupÚ_option_group_documentÚ_option_group_formattingÚ_option_group_idsÚ_option_group_compatibilityrõ  rú  r   r  r  r  r  r  rD  )r9  r7  s   00r  ú<module>r;     s  ðõ`  Ý %Ý &ã Û Û 	Û 	Û 
Û Û ß %ß /ß BÓ Bã 
ß #å &Ý 4Ý *Ý ð €Ø€Ø:€	ð "¨°WÑ=Ð Ø)×.Ñ.Ó0Ð Ø$Ð �SÑ Ø)×.Ñ.Ó0Ð Ø$Ð �SÑ ð ˆr�z‰z˜.Ó)€à.Ø0ØFØ?ØGØ7ØMØ=Ø8ØEØ5Ø!LØGØ5Ø9ñ€ð" �*‰~˜r *™~¨rÐ2EÑ/FØ�.Ñ! 2Ð&8Ñ#9¸2Ð>OÑ;PØ�+‰ Ð#8Ñ 9¸2¸mÑ;LØÐ+Ñ,¨b°Ñ.@Ø�-Ñ  " X¡,ð	0€òJ€ðXT
ØÐ%ðT
àÐ(ðT
ð ÐðT
ð Ð&ð	T
ð
 Ð!ðT
ð Ð!ðT
ð Ð"ðT
ð ˆ_ðT
ð Ð*ðT
ð ÐðT
ð Ð%ðT
ð ÐðT
ð Ð%ðT
ð Ð%ðT
ð Ð$ðT
ð  Ð$ð!T
ð" Ð ñ#T
ð$ Ð*ð%T
ð& Ð$ð'T
ð( Ð!ð)T
ð* Ðð+T
ð, Ð!ð-T
ð. Ð#ð/T
ð0 Ð(ð1T
ð2 Ð$ð3T
ð4 Ð"ð5T
ð6 Ð$ð7T
ð8 Ð%ð9T
ð: Ð%ð;T
ð< Ð)ð=T
ð> Ð$ð?T
ð@ Ð%ðAT
ðB ÐðCT
ðD Ð&òET
ðF Ð(ðGT
ðH Ð(ðIT
ðJ Ð'ðKT
ðL Ð'ðMT
ðN Ð(ðOT
ðP Ð$ðQT
ðR Ð#ðST
ðT Ð&ðUT
ðV Ð#ðWT
ðX Ð#ðYT
ðZ Ð&ð[T
ð\ Ð#ð]T
ð^ Ð'ð_T
ð` Ð&ðaT
ðb Ð!ðcT
ðd Ð%ðeT
ðf Ð&ògT
ðh ÐðiT
ðj Ð$ðkT
ðl Ð ðmT
ðn Ð ðoT
ðp ÐðqT
ðr Ð&ðsT
ðt Ð$ðuT
ðv Ð#ðwT
ðx Ð#ðyT
ðz Ð ð{T
ð| Ð!ð}T
ð~ Ð!ðT
ð@ Ð$ðAT
ðB Ð)ðCT
ðD Ð#ðET
ðF Ð(ðGT
ðH Ð%òIT
ðJ Ð&ðKT
ðL Ð%ðMT
ðN Ð0ðOT
ðP Ð%ðQT
ðR Ð&ðST
ðT Ð%ðUT
ðV Ð%ðWT
ðX Ð'ðYT
ðZ Ð)ð[T
ð\ Ð(ð]T
ð^ Ð*ð_T
ð` Ð*ðaT
ðb Ð*ðcT
ðd Ð'ðeT
ðf ÐðgT
ðh Ð$ðiT
ðj Ð!òkT
ðl Ð!ðmT
ðn ÐðoT
ðp Ð,ðqT
ðr Ð#ðsT
ðt Ð'ðuT
ðv Ð(ðwT
ðx Ð*ðyT
ðz Ð+ð{T
ð| Ð,ð}T
ð~ Ð+ðT
ð@ Ð*ðAT
ðB Ð'ðCT
ðD Ð%ðET
ðF Ð%ðGT
ðH Ð$ðIT
ðJ Ð'ðKT
ðL ÐòMT
ðN Ð#ðOT
ðP ÐðQT
ðR Ð$ðST
ñT Ñ ðUT
ñV Ñ"ðWT
ñX Ñ"ðYT
ñZ Ñ)ð[T
ñ\ Ñ%ð]T
ñ^ Ñ)ð_T
ñ` Ñ)ðaT
ñb Ñ&ðcT
ñd Ñ%ðeT
ñf ÑðgT
ñh Ñ ðiT
ñj Ñ ðkT
ñl Ñ&ðmT
ñn Ñ òoT
ñp 
ÑðqT
ñr Ñ%ðsT
ñt Ñ%ðuT
ñv Ñ%ðwT
ñx Ñ"ðyT
ñz Ñ%ð{T
ñ| Ñ#ð}T
ñ~ Ñ$ðT
ñ@ Ñ ðAT
ñB Ñ"ðCT
ñD Ñ#ðET
ñF Ñ$ðGT
ñH Ñ%ðIT
ñJ Ñ%ðKT
ñL Ñ ðMT
ñN Ñ&ðOT
ñP Ñ%ñQT
ñR  ÙÙ#Ù Ù%Ù"Ù!Ù!Ù&Ù Ù&ógT
€ðz9á‘jð9ñ ‘ð9ñ ‘ð	9ñ
 ‰Vð9ñ "¡;ð9ñ ™6ð9ñ ‘ð9ñ ‰xð9ñ ™ð9ñ ‰Fð9ñ ‘Cð9ñ ‘ð9ñ ‰fð9ñ ‘6ð9ñ  ‘Sð!9ñ" ™ð#9ñ$ ‘ñ%9ñ& ‘Hð'9ñ( ‘(ð)9ñ* ‘Hð+9ñ, ‘8ð-9ñ. #¡Fð/9ñ0 ‘hð19ñ2 ‘fð39ñ4 ‰fð59ñ6 ‘Fð79ñ8 ‘&ð99ñ: ‘&ð;9ñ< ‰Fð=9ñ> ‰sð?9ñ@ Ñ&ðA9ñB ‘&ðC9ñD ‘CðE9ñF ‰fòG9ñH ™ðI9ñJ ™ðK9ñL ‘fðM9ñN ‘wðO9ñP ™ðQ9ñR ‘cðS9ñT ‘CðU9ñV ‘7ðW9ñX ‘vðY9ñZ ‘Hð[9ñ\ ‘)ð]9ñ^ ‘Hð_9ñ` ‘Gða9ñd ‘3ðe9ñf ‘6ðg9ñh ‘Sði9ñj ‘'ñk9ñl ÙÙ óq9Ð óx6óð ˆB�J‰JÑ7Ó8€	Ø	ˆ�‰Ñ(Ó	)€Øˆb�j‰jÑ*Ó+€Ø€r‡z�zÑ5Ó6€ö;ˆ6ô ;ö|)*�ô )*õXó$ rÐ õ;ó|%õ2ó8#óLOód,ó@óCóLó0óó$ó(ó&ó8"óJPófEóP~óB4ón&óRAóH ó4,8ó^56ópó(ó"óCóL7õ:/ód(ñx Ñ0Ó2fÓgÐ Ù(/±#Ð6F×6NÑ6NÓ2OÑ(OÐ × Ñ Ô %ðAá‘_Ñ&6Á*ÀÕNðAñ ‘]Ñ$7Á8À*ÕMðAñ ‘_Ñ&9ÑEUÑWgÐDhÕið	Añ
 ‘[Ñ"5ÁÀÕIðAñ Ñ'Ñ)9ÁVÀHÕMðAñ ‘^Ñ%8ÁIÀ;ÕOðAñ Ñ*Ñ,<É	À{ÕSðAñ Ñ%Ñ'7Á8À*ÕMðAñ Ñ0±'ó.õ/ðAñ( ‘W™c 4§8¡8±u°gÕ>ð)Añ* ‘X™s D§H¡H¹°wÕ?ð+Añ, ‘]¡F±e°WÕ=ð-Añ. Ñ*©OÛ`õbð/Añ6 ‘S˜1ó (Zõ [ð7Añ: ‘S˜1ó (Zõ [ð;Añ> ‘S˜1©¹Ð'FÕGð?Añ@ ‘T˜1© xÕ0ðAAñB ‘T˜1© xÕ0ðCAñD ‘T˜1© xÕ0ðEAñF ‘T˜1© xÕ0ðGAñH ‘T˜1©±)Ð'<Õ=ðIAñJ ‘T˜1©±)Ð'<Õ=ðKAñP ‘]¡M¹X¸JÕGðQAñR ‘V˜Q©(¨Õ4ðSAñT ‘V˜Q©(¨Õ4ðUAñV ‘^¡Q±(°Õ<ðWAñX ‘]¡A±°
Õ;ðYAñZ ‘X˜q©H¨:Õ6ð[Añ` ‘^¡YÓ9^Õ_ðaAñb ‘] A±°Õ=ðcAñd ‘X™w±*°Õ>ðeAñf ‘Y¡±:°,Õ?ðgAñl ‘S™#˜tŸx™x©(±FÐ);Ó<ðmAñn ‘S™$ §	¡	©H±fÐ+=Ú cõeðoAñr ‘S™#˜tŸx™x©(±FÐ);Ó<ðsAñt ‘S™$ §	¡	©H±fÐ+=Ú cõeðuAñx ‘W™c 4§8¡8©h¹Ð-?Ó@ðyAñz ‘W™c 4§9¡9©x¹Ð.@Ú cõeð{Añ~ ‘X™s D§H¡H©x¹Ð.@ÓAðAñ@ ‘X™s D§I¡I±¹&Ð/AÚ cõeðAAñH ‘T˜1Ñ(8Ð'9Õ:ðIAñJ ‘T˜1Ñ(8Ð'9Õ:ðKAñL ‘T˜1Ñ(8Ð'9Õ:ðMAñN ‘T™3 §¡Ñ4DÐ3EÕFðOAñP ‘T™1˜dŸi™iÑ3CÐ2DÚ cõeðQAñV ‘TÑ%5Ð$6Ú _õaðWAñZ ‘TÑ%5Ð$6Ú _õað[Añ^ ‘S™2˜tŸx™xÑ3CÐ2DÕEð_Añ` ‘S™3 §	¡	Ñ5EÐ4FÚ cõeðaAñd ‘T™2˜tŸx™xÑ3CÐ2DÕEðeAñf ‘T™3 §	¡	Ñ5EÐ4FÚ cõeðgAñj ‘T™2˜tŸx™xÑ3CÐ2DÕEðkAñl ‘T™3 §	¡	Ñ5EÐ4FÚ cõeðmAñp ‘^¡UÑ6FÑHXÐ5YÕZðqAñ| ‘[¡!Ó.ZÕ[ð}Añ~ ‘Y Ñ-=Ð,>Õ?ðAñ@ ‘_¡cÓ4`ÕaðAAñB ‘V™QÑ*<Ð)=Õ>ðCAñD Ñ&©Ñ5HÐ4IÕJðEAñF ‘Z¡Ñ8JÐ7KÕLðGAñH ‘[ !Ñ/?Ð.@ÕAðIAñJ ‘Z¡Ó-YÕZðKAñL ‘[ !Ó.ZÕ[ðMAñN ‘T˜1© Õ7ðOAñP ‘T˜1© Õ7ðQAñR ‘T˜1© Õ7ðSAñT ‘T˜1© Õ7ðUAñV ‘V™X±°Õ<ðWAñX ‘\¡1±Ð/?Õ@ðYAñZ ‘X˜qÓ+WÕXð[Añ\ ‘Z¡±=°/ÕBð]Añ^ ‘Z¡±NÐ3CÕDð_Añ` ‘W™cÑ-?Ð,@ÕAðaAñb ‘[ !©}¨oÕ>ðcAñd ‘[ !©}¨oÕ>ðeAñf ‘[ !©}¨oÕ>ðgAñh ‘_¡gÑ9KÐ8LÕMðiAñj ‘X™s©nÐ-=Õ>ðkAñl ‘W˜aÑ+>Ð*?Õ@ðmAñn ‘V˜Q©.Ð)9Õ:ðoAñp Ñ'©Ñ6JÐ5KÕLðqAñr Ñ'©Ñ6JÉMÐ5ZÕ[ðsAñt ‘^¡SÑ4DÐ3EÕFðuAñv ‘]¡J¹.Ð9IÕJðwAñx ‘^¡QÑ2EÑG[Ð1\Õ]ðyAñz ‘V™X±Ð0AÕBð{Añ| ‘V™\±^Ð4DÕEð}Añ~ Ñ'©Ñ8KÐ7LÕMðAñ@ Ñ'©Ñ8KÐ7LÕMðAAÐ ðJ  "Ð Ù!,¨TÓ!2Ð Ø+ò NÐØ×!Ñ!Ð)Ø$×+Ñ+Ð,=Õ>à(×1Ñ1ò 	NˆGØ*¨7Ñ3×:Ñ:Ð;LÕMñ	Nð	Nó	óñ: 9<»ô -ð` €b‡j�jÑDÓE€Ø€r‡z�zÑZÓ[€óó>-óhn.ób9óxFó"Fóó"
ó	-ó:ñ 6;È2ÐUWô 1óhFõ2ój+ó\ó4_óDó>ó$K#ó\&)óR":õJJó
óTÐ ó	ñ 	ˆ}Óñ	ñ 	ð!ñ€ñ (Ò(@ÙHQÐR]ÓH^×(_¹¸À¨¨u©Ó(_óaÐ ó
ó	4õ _õJLõdö8\˜×6Ò6ô \ð (�(×'Ò'Ù
4ñ3ñ  ±"Õ5Øõ€ð × Ò ™4©°cÁÈx×OeÒOeÑ Ô fð × Ò ™4¡Ù".±WÁeÙ ;ñ ô =ð × Ò ™4¡Ù".±YÉÙ Cñ ô Eð × Ò ™4Ù")±ÁkÙ Kñ ô Mð × Ò ™4Ù")±Á|Ù Lñ ô Nð 2˜X×1Ò1°/Á>ÓRÐ Ø × %Ò %Ñ&7Ù-4¸3ÁXÑWXÑbgÙ+añ &ô cð × %Ò %Ñ&9Ù-4¸3ÁYÑXZÑdiñ,Rñ &ô Sð × %Ò %Ñ&AÙ-:ÁÑZ^Ù+Sñ &ô Uð × %Ò %Ñ&>Ù-:ÁÑY]Ù+Uñ &ô Wð × %Ò %Ñ&BÙ-:ÑAQÑ[_Ù+Hñ &ô Jð × %Ò %Ñ&7Ù-9ÁÑX]Ù+oñ &ô qð × %Ò %Ñ&:Ù-9Ñ@RÑ\añ,Oñ &ô Pð × %Ò %Ñ&@Ù-9ÁÑUZÙ+rñ &ô tð × %Ò %Ñ&=Ù-9Ñ@UÑ_cÙ+qñ &ô sð × %Ò %Ñ&@Ù-:ÑAVÑ`dÙ+nñ &ô pð ×  Ò  Ð!;Ô <à-˜×-Ò-¨o¹~ÓNÐ Ø × !Ò !Ñ"6Ù)5Ñ<NÑX]Ù'Oñ "ô Qð × !Ò !Ñ"3Ù)5¹OÑUZÙ'@ñ "ô Bð × !Ò !Ñ"9Ù)5Ñ<QÑ[`Ù'?ñ "ô Að × !Ò !Ñ"5Ù)5Ñ<MÑW\ñ(]ñ "ô ^ð × !Ò !Ñ"AÙ)5Ñ<YÑchÙ'Wñ "ô Yð × !Ò !Ñ">Ù)5Ñ<LÑV[Ù'Gñ "ô Ið × !Ò !Ñ";Ù)6¹_ÑVZÙ'Sñ "ô Uð × !Ò !Ñ"7Ù)5Ñ<OÑY^Ù'sñ "ô uð ×  Ò  Ð!7Ô 8à/˜8×/Ò/°ÑATÓUÐ Ø × #Ò #¡JÙ+2¹ÉÑ_fÑpvÙ)jñ $ô lð × #Ò #¡KÙ+2¸Á>Ñ[\ÑfkÙ)tñ $ô vð × #Ò #Ñ$6Ù+8¹zÑSWñ*qñ $ô rð × #Ò #Ñ$7Ù+7Ñ>YÑchÙ)oñ $ô qð ×  Ò  Ð!9Ô :à(�H×(Ò(¨¹/ÓJÐ Ø × Ò Ñ4Ù$0±{ÉEÙ"?ñ ô Að × Ò ™_Ù$0±}ÉeÙ"[ñ ô ]ð × Ò Ñ3Ù$+±(ÑAUÑ_aÑksÙ"Fñ ô Hð × Ò Ñ8Ù$0Ñ7PÑZ_Ù"Lñ ô Nð × Ò Ñ1Ù$+±(ÑASÑ]cÙ"Wñ ô Yð × Ò Ñ3Ù$+±(ÑAUÑ_gÙ"Sñ ô Uð ×  Ò  Ð!2Ô 3à2˜h×2Ò2°?ÑD^Ó_Ð Ø × &Ò &Ñ'<Ù.:ÑATÑ^cñ-Eñ 'ô Fð ×  Ò  Ð!<Ô =õó8õ
õ óó<ó&"PóJ"ð ‰zÒÙ…Eð ùóY )`s   óAH,