Ë
    £eh   ã                   óÀ  — d Z ddlmZ d„ Zd„ Zd;d„Zd„ Zd„ Zd	„ Z G d
„ de	«      Z
d„ Zd<d„Zd;d„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	 	 	 	 d=d„Zd;d„Zedk(  �r‰ddlZ eej2                  «      dk(  r/ddlZ ej6                   ej8                  «       j:                  «       ddlZ ej>                  dd¬«      Z e jC                  dddd ¬!«       e jC                  d"d#ddd$¬%«       e jC                  d&d'dd(¬)«       e jC                  d*d+e"d,¬-«       e jG                  ej2                  dd «      Z$e$jJ                  r±e$jL                  €dnd.„ Z' ee$jJ                  «      Z% e(d/«        e( ee%«      «        ee%e'«      Z) e(d0«        e(e)«        ee)«      Z* e(d1«        e( ee*«      «       e%e*k(  sJ ‚ e(d2«        e( e ee%e'«      «      «        e(d3«        e( e ee%e'«      «      «       e$jV                  rìdd4l,m-Z-  e-e$jV                  «      Z+e+d5   j\                  j^                  d   Z0e0jb                  Z2e2jg                  «       D ]G  Z4e2e4   Z5e5jm                  «        e5jn                  jN                  Z' ee5jJ                  e'e¬6«      e5_%        ŒI e$jp                  €dd7l9m:Z:  e:e$jV                  dd8¬9«      Z;ne$jp                  Z;e;r e(d:e;«       e+jy                  e;«       yyyy)>aZ  T2CharString operator specializer and generalizer.

PostScript glyph drawing operations can be expressed in multiple different
ways. For example, as well as the ``lineto`` operator, there is also a
``hlineto`` operator which draws a horizontal line, removing the need to
specify a ``dx`` coordinate, and a ``vlineto`` operator which draws a
vertical line, removing the need to specify a ``dy`` coordinate. As well
as decompiling :class:`fontTools.misc.psCharStrings.T2CharString` objects
into lists of operations, this module allows for conversion between general
and specific forms of the operation.

é    )ÚmaxStackLimitc                 óè   — t        | t        «      r| j                  «       } g }| D ]  }	 t        |«      }|j                  |«       Œ! |S # t        $ r 	 t        |«      }n# t        $ r Y nw xY wY Œ<w xY w©N)Ú
isinstanceÚstrÚsplitÚintÚ
ValueErrorÚfloatÚappend)ÚstringÚprogramÚtokens      úZ/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/fontTools/cffLib/specializer.pyÚstringToProgramr      s   € Ü�&œ#ÔØ—‘“ˆØ€GØò ˆð	Ü˜“JˆEð 	�‰�uÕðð €Nøô ò 	ðÜ˜e›‘øÜò Ùðüð	ús5   ©A	Á		A1ÁAÁA1Á	A+Á(A1Á*A+Á+A1Á0A1c                 ó2   — dj                  d„ | D «       «      S )Nú c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr   )r   )Ú.0Úxs     r   ú	<genexpr>z"programToString.<locals>.<genexpr>$   s   è ø€ Ò,˜q”C˜—FÑ,ùs   ‚)Újoin)r   s    r   ÚprogramToStringr   #   s   € Ø�8‰8Ñ, GÔ,Ó,Ð,ó    Nc                 óê  — d}d}d}d}g }g }t        | «      }|D �]@  }	t        |	t        «      s|j                  |	«       Œ&|	dk(  r@|€J ‚d ||«      z   }
|d   }||
z  dz   }|| d g|| d t	        |«      }|||z   dz
  z  }|}Œk|	dk(  r|d   }t        |«      t        u s\J ‚|sX|	dv rTd	}|	d
v }|r|t	        ||d «      z   }nt	        |«      }|r-|dz  |z  r%|j                  d«      }|j                  d|gf«       |	dv rF|r|j                  d|f«       |j                  |	g f«       |j                  dt        |«      gf«       n|j                  |	|f«       g }�ŒC |r|j                  d|f«       |S )u\  Takes a T2CharString program list and returns list of commands.
    Each command is a two-tuple of commandname,arg-list.  The commandname might
    be empty string if no commandname shall be emitted (used for glyph width,
    hintmask/cntrmask argument, as well as stray arguments at the end of the
    program (ðŸ¤·).
    'getNumRegions' may be None, or a callable object. It must return the
    number of regions. 'getNumRegions' takes a single argument, vsindex. It
    returns the numRegions for the vsindex.
    The Charstring may or may not start with a width value. If the first
    non-blend operator has an odd number of arguments, then the first argument is
    a width, and is popped off. This is complicated with blend operators, as
    there may be more than one before the first hint or moveto operator, and each
    one reduces several arguments to just one list argument. We have to sum the
    number of arguments that are not part of the blend arguments, and all the
    'numBlends' values. We could instead have said that by definition, if there
    is a blend operator, there is no width value, since CFF2 Charstrings don't
    have width values. I discussed this with Behdad, and we are allowing for an
    initial width value in this case because developers may assemble a CFF2
    charstring from CFF Charstrings, which could have width values.
    Fr   ÚblendNé   éÿÿÿÿÚvsindex>
   ÚhstemÚvstemÚendcharÚhmovetoÚhstemhmÚrmovetoÚvmovetoÚvstemhmÚcntrmaskÚhintmaskT>   r#   r&   é   Ú >   r(   r)   )	Úiterr   r   r   ÚlenÚtyper	   ÚpopÚnext)r   ÚgetNumRegionsÚseenWidthOpÚvsIndexÚlenBlendStackÚlastBlendIndexÚcommandsÚstackÚitr   ÚnumSourceFontsÚ	numBlendsÚnumBlendArgsÚlenStackÚparityÚnumArgsÚwidths                    r   ÚprogramToCommandsr@   '   sØ  € ð, €KØ€GØ€MØ€NØ€HØ€EÜ	ˆg‹€Bàó 8ˆÜ˜%¤Ô%Ø�L‰L˜ÔØà�GÒØ Ð,Ð,Ð,Ø¡¨wÓ!7Ñ7ˆNð ˜b™	ˆIØ$ ~Ñ5¸Ñ9ˆLà%*¨L¨=¨>Ð%:Ð$;ˆE�<�-�.Ð!Ü˜5“zˆHØ˜Y¨Ñ1°AÑ5Ñ5ˆMØ%ˆNàà�iÒØ˜B‘iˆGÜ˜“=¤CÑ'Ð'Ð'á 5ð -
ñ $
ð ˆKØÐ4Ð4ˆFÙð (¬#¨e°N°OÐ.DÓ*EÑE‘ä˜e›*�Ù˜G a™K¨6Ò1ØŸ	™	 !›�Ø—‘  e W Ô.àÐ,Ñ,ÙØ—‘  U Ô,Ø�O‰O˜U B˜KÔ(Ø�O‰O˜R¤$ r£( Ð,Õ-à�O‰O˜U E˜NÔ+ØŠðq8ñr Ø�‰˜˜U˜Ô$Ø€Or   c                 ó    — g }| D ]F  }t        |t        «      r#|j                  |«       |j                  d«       Œ6|j                  |«       ŒH |S )Nr   )r   ÚlistÚextendr   )ÚargsÚ
token_listÚargs      r   Ú_flattenBlendArgsrG   ƒ   sR   € Ø€JØò #ˆÜ�cœ4Ô Ø×Ñ˜cÔ"Ø×Ñ˜gÕ&à×Ñ˜cÕ"ð#ð Ðr   c                 ó¢   — g }| D ]G  \  }}t        d„ |D «       «      rt        |«      }|j                  |«       |sŒ7|j                  |«       ŒI |S )zqTakes a commands list as returned by programToCommands() and converts
    it back to a T2CharString program list.c              3   ó<   K  — | ]  }t        |t        «      –— Œ y ­wr   ©r   rB   ©r   rF   s     r   r   z$commandsToProgram.<locals>.<genexpr>“   ó   è ø€ Ò5¨Œz˜#œt×$Ñ5ùó   ‚)ÚanyrG   rC   r   )r6   r   ÚoprD   s       r   ÚcommandsToProgramrP   Ž   sV   € ð €GØò ‰ˆˆDÜÑ5°Ô5Ô5Ü$ TÓ*ˆDØ�‰�tÔÚØ�N‰N˜2Õðð €Nr   c              #   ó€   K  — t        | «      }||z  dk7  rt        | «      ‚t        d||«      D ]  }| |||z    –— Œ y­w)z'Group the list el into groups of size nr   N)r-   r
   Úrange)ÚelÚnÚlÚis       r   Ú_everyNrW   ›   sK   è ø€ äˆB‹€AØˆ1�u�‚zÜ˜‹nÐÜ�1�a˜‹^ò ˆØ��Q˜‘UˆmÓñùs   ‚<>c                   óÜ   — e Zd Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Z	ed„ «       Z
ed„ «       Zed	„ «       Zed
„ «       Zed„ «       Zed„ «       Zed„ «       Zy)Ú!_GeneralizerDecombinerCommandsMapc              #   óJ   K  — t        | «      dk7  rt        | «      ‚d| f–— y ­w)Nr*   r%   ©r-   r
   ©rD   s    r   r%   z)_GeneralizerDecombinerCommandsMap.rmoveto¥   s'   è ø€ äˆt‹9˜Š>Ü˜TÓ"Ð"Ø˜$ÐÓùs   ‚!#c              #   óT   K  — t        | «      dk7  rt        | «      ‚d| d   dgf–— y ­w©Nr   r%   r   r[   r\   s    r   r#   z)_GeneralizerDecombinerCommandsMap.hmoveto«   s/   è ø€ äˆt‹9˜Š>Ü˜TÓ"Ð"Ø˜4 ™7 A˜,Ð'Ó'ùó   ‚&(c              #   óT   K  — t        | «      dk7  rt        | «      ‚dd| d   gf–— y ­wr^   r[   r\   s    r   r&   z)_GeneralizerDecombinerCommandsMap.vmoveto±   s/   è ø€ äˆt‹9˜Š>Ü˜TÓ"Ð"Ø˜1˜d 1™g˜,Ð'Ó'ùr_   c              #   óT   K  — | st        | «      ‚t        | d«      D ]  } d| f–— Œ
 y ­w)Nr*   Úrlineto©r
   rW   r\   s    r   rb   z)_GeneralizerDecombinerCommandsMap.rlineto·   s5   è ø€ áÜ˜TÓ"Ð"Ü˜D !Ó$ò 	$ˆDØ˜dÐ#Ó#ñ	$ùr_   c              #   ó¢   K  — | st        | «      ‚t        | «      }	 	 dt        |«      dgf–— ddt        |«      gf–— Œ## t        $ r Y y w xY w­w©Nrb   r   ©r
   r,   r0   ÚStopIteration©rD   r8   s     r   Úhlinetoz)_GeneralizerDecombinerCommandsMap.hlineto¾   sc   è ø€ áÜ˜TÓ"Ð"Ü�$‹Zˆð	ØØ ¤4¨£8¨Q -Ð0Ò0Ø  1¤d¨2£h -Ð0Ò0ð øô ò 	Ùð	üó"   ‚Aœ$A  Á 	AÁ	AÁAÁAc              #   ó¢   K  — | st        | «      ‚t        | «      }	 	 ddt        |«      gf–— dt        |«      dgf–— Œ## t        $ r Y y w xY w­wre   rf   rh   s     r   Úvlinetoz)_GeneralizerDecombinerCommandsMap.vlinetoÊ   sc   è ø€ áÜ˜TÓ"Ð"Ü�$‹Zˆð	ØØ  1¤d¨2£h -Ð0Ò0Ø ¤4¨£8¨Q -Ð0Ò0ð øô ò 	Ùð	ürj   c              #   óT   K  — | st        | «      ‚t        | d«      D ]  } d| f–— Œ
 y ­w)Né   Ú	rrcurvetorc   r\   s    r   ro   z+_GeneralizerDecombinerCommandsMap.rrcurvetoÖ   s5   è ø€ áÜ˜TÓ"Ð"Ü˜D !Ó$ò 	&ˆDØ Ð%Ó%ñ	&ùr_   c              #   óô   K  — t        | «      }|dk  s|dz  dkD  rt        | «      ‚|dz  dk(  r d| d   | d   | d   | d   | d   dgf–— | dd  } t        | d«      D ]  } d| d   d| d   | d   | d   dgf–— Œ y ­w©Né   r   r*   ro   r   é   é   ©r-   r
   rW   ©rD   rU   s     r   Ú	hhcurvetoz+_GeneralizerDecombinerCommandsMap.hhcurvetoÝ   s­   è ø€ ä�‹IˆØˆqŠ5�A˜‘E˜A’IÜ˜TÓ"Ð"Øˆq‰5�AŠ:Ø  a¡¨$¨q©'°4¸±7¸DÀ¹GÀTÈ!ÁWÈaÐ PÐQÒQØ˜˜�8ˆDÜ˜D !Ó$ò 	LˆDØ  a¡¨!¨T°!©W°d¸1±g¸tÀA¹wÈÐ JÐKÓKñ	Lùó   ‚A6A8c           	   #   óô   K  — t        | «      }|dk  s|dz  dkD  rt        | «      ‚|dz  dk(  r d| d   | d   | d   | d   d| d   gf–— | dd  } t        | d«      D ]  } dd| d   | d   | d   d| d   gf–— Œ y ­wrq   ru   rv   s     r   Ú	vvcurvetoz+_GeneralizerDecombinerCommandsMap.vvcurvetoè   s­   è ø€ ä�‹IˆØˆqŠ5�A˜‘E˜A’IÜ˜TÓ"Ð"Øˆq‰5�AŠ:Ø  a¡¨$¨q©'°4¸±7¸DÀ¹GÀQÈÈQÉÐ PÐQÒQØ˜˜�8ˆDÜ˜D !Ó$ò 	LˆDØ  D¨¡G¨T°!©W°d¸1±g¸qÀ$ÀqÁ'Ð JÐKÓKñ	Lùrx   c              #   óÌ  K  — t        | «      }|dk  s|dz  dvrt        | «      ‚d }|dz  dk(  r|dz  dk(  }| d d | dd  }} t        | d«      }	 	 t        |«      } d| d	   d	| d   | d   d	| d
   gf–— t        |«      } dd	| d	   | d   | d   | d
   d	gf–— ŒG# t        $ r Y nw xY w|r<|} rd| d	   d	| d   | d   | d   | d
   gf–— y dd	| d	   | d   | d   | d
   | d   gf–— y y ­w©Nrr   é   >   r   r   rr   rt   r*   r   rt   éûÿÿÿro   r   rs   ©r-   r
   rW   r0   rg   ©rD   rU   Ú	last_argsÚlastStraightr8   s        r   Ú	hvcurvetoz+_GeneralizerDecombinerCommandsMap.hvcurvetoó   sW  è ø€ ä�‹IˆØˆqŠ5�A˜‘E Ñ-Ü˜TÓ"Ð"Øˆ	Øˆq‰5�AŠ:Ø˜q™5 A™:ˆLØ" 3 B˜i¨¨b¨c¨�)ˆDÜ�T˜1Óˆð	ØÜ˜B“x�Ø" T¨!¡W¨a°°a±¸$¸q¹'À1ÀdÈ1ÁgÐ$NÐOÒOÜ˜B“x�Ø" Q¨¨Q©°°a±¸$¸q¹'À4ÈÁ7ÈAÐ$NÐOÒOð	 øô
 ò 	Ùð	úáØˆDÙØ" T¨!¡W¨a°°a±¸$¸q¹'À4ÈÁ7ÈDÐQRÉGÐ$TÐUÓUà" Q¨¨Q©°°a±¸$¸q¹'À4ÈÁ7ÈDÐQRÉGÐ$TÐUÓUð ùó&   ‚AC$ÁAB Â	B"ÂC$Â!B"Â"AC$c              #   óÌ  K  — t        | «      }|dk  s|dz  dvrt        | «      ‚d }|dz  dk(  r|dz  dk(  }| d d | dd  }} t        | d«      }	 	 t        |«      } dd	| d	   | d   | d   | d
   d	gf–— t        |«      } d| d	   d	| d   | d   d	| d
   gf–— ŒG# t        $ r Y nw xY w|r<|} rdd	| d	   | d   | d   | d
   | d   gf–— y d| d	   d	| d   | d   | d   | d
   gf–— y y ­wr|   r   r€   s        r   Ú	vhcurvetoz+_GeneralizerDecombinerCommandsMap.vhcurveto  sW  è ø€ ä�‹IˆØˆqŠ5�A˜‘E Ñ-Ü˜TÓ"Ð"Øˆ	Øˆq‰5�AŠ:Ø˜q™5 A™:ˆLØ" 3 B˜i¨¨b¨c¨�)ˆDÜ�T˜1Óˆð	ØÜ˜B“x�Ø" Q¨¨Q©°°a±¸$¸q¹'À4ÈÁ7ÈAÐ$NÐOÒOÜ˜B“x�Ø" T¨!¡W¨a°°a±¸$¸q¹'À1ÀdÈ1ÁgÐ$NÐOÒOð	 øô
 ò 	Ùð	úáØˆDÙØ" Q¨¨Q©°°a±¸$¸q¹'À4ÈÁ7ÈDÐQRÉGÐ$TÐUÓUà" T¨!¡W¨a°°a±¸$¸q¹'À4ÈÁ7ÈDÐQRÉGÐ$TÐUÓUð ùr„   c              #   ó    K  — t        | «      }|dk  s|dz  dk7  rt        | «      ‚| d d | dd  }} t        | d«      D ]  } d| f–— Œ
 d|f–— y ­w)Nr}   rn   r*   éþÿÿÿro   rb   ru   ©rD   rU   r�   s      r   Ú
rcurvelinez,_GeneralizerDecombinerCommandsMap.rcurveline%  sl   è ø€ ä�‹IˆØˆqŠ5�A˜‘E˜Q’JÜ˜TÓ"Ð"Ø˜s ˜) T¨"¨# YˆiˆÜ˜D !Ó$ò 	&ˆDØ Ð%Ó%ð	&à˜)Ð$Ó$ùó   ‚AAc              #   ó    K  — t        | «      }|dk  s|dz  dk7  rt        | «      ‚| d d | dd  }} t        | d«      D ]  } d| f–— Œ
 d|f–— y ­w)Nr}   r*   r   iúÿÿÿrb   ro   ru   r‰   s      r   Ú
rlinecurvez,_GeneralizerDecombinerCommandsMap.rlinecurve/  sl   è ø€ ä�‹IˆØˆqŠ5�A˜‘E˜Q’JÜ˜TÓ"Ð"Ø˜s ˜) T¨"¨# YˆiˆÜ˜D !Ó$ò 	$ˆDØ˜dÐ#Ó#ð	$à˜IÐ&Ó&ùr‹   N)Ú__name__Ú
__module__Ú__qualname__Ústaticmethodr%   r#   r&   rb   ri   rl   ro   rw   rz   rƒ   r†   rŠ   r�   © r   r   rY   rY   ¤   s  „ Øñ ó ð ð
 ñ(ó ð(ð
 ñ(ó ð(ð
 ñ$ó ð$ð ñ	ó ð	ð ñ	ó ð	ð ñ&ó ð&ð ñLó ðLð ñLó ðLð ñVó ðVð0 ñVó ðVð0 ñ%ó ð%ð ñ'ó ñ'r   rY   c           	      ó.  — t        | D �cg c]  }t        |t        «      ‘Œ c}«      r5| D ��cg c]'  }t        |t        «      rt        |«      n|gD ]  }|‘Œ Œ) }}}n| }|d   }|d d }t	        |«      }||z  dz
  }||dz   z  |k(  st        | «      ‚|d | D �cg c]  }|g‘Œ }}||d  }	t	        |	«      }
t        d|
|«      D �cg c]
  }|	|||z    ‘Œ }}t        ||«      D ��cg c]  \  }}||z   dgz   ‘Œ }}}|S c c}w c c}}w c c}w c c}w c c}}w ©Nr   r   r   )rN   r   rB   Ú_convertBlendOpToArgsr-   r
   rR   Úzip)Ú	blendListrF   ÚerV   rD   r:   rU   Ú
numRegionsÚdefaultArgsÚ	deltaArgsÚnumDeltaValuesÚ	deltaListÚaÚbÚ
blend_argss                  r   r•   r•   :  sa  € ô
 ¨YÖ7 cŒJ�sœDÕ!Ò7Ô8ð ÷
àÜ2<¸QÄÔ2EÔ+¨AÔ.ÈAÈ3ò
ð ò ð
Øð
ˆò 
ð ˆð �R‘€Ið ��ˆ9€DäˆD‹	€AØ�i‘ !Ñ#€JØ˜ a™Ñ(¨AÒ-Ü˜Ó#Ð#à$(¨¨)Ð$4Ö5˜S�C’5Ð5€KÐ5Ø�Y�ZÐ €IÜ˜“^€Nä/4°Q¸È
Ó/SöØ*+ˆ	�!�a˜*‘nÒ%ð€Ið ô +.¨k¸9Ó*E×F¡$ ! Q�!�a‘%˜1˜#“+ÐF€JÑFØÐùòE 8ùó
ùò4 6ùòùó Gs   ŠC<­,DÂ
DÃDÃ$Dc           
      óf  — g }t         }| D ]£  \  }}t        |D �cg c]  }t        |t        «      ‘Œ c}«      r5	 |D ��cg c]'  }t        |t        «      rt	        |«      n|gD ]  }|‘Œ Œ) }}}t        ||d «      }|€|j                  ||f«       Œ…	  ||«      D ]  }	|j                  |	«       Œ Œ¥ |S c c}w c c}}w # t
        $ r. |r(|j                  d|f«       |j                  d|gf«       n‚ Y Œ‡w xY w# t
        $ r/ |r(|j                  d|f«       |j                  d|gf«       n‚ Y �Œ$w xY w)Nr+   )rY   rN   r   rB   r•   r
   r   Úgetattr)
r6   ÚignoreErrorsÚresultÚmappingrO   rD   rF   rT   ÚfuncÚcommands
             r   ÚgeneralizeCommandsr¨   d  se  € Ø€FÜ/€GØò "‰ˆˆDä°Ö6¨#”
˜3¤Õ%Ò6Ô7ðð  $÷àä6@ÀÄdÔ6KÔ-¨cÔ2ÐRUÐQVò	ð ò ðØð�ñ ô  �w  DÓ)ˆØˆ<Ø�M‰M˜2˜t˜*Ô%Øð
	Ù ›:ò '�Ø—‘˜gÕ&ñ'ð3"ðF €MùòC 7ùóøô ò Ùð —M‘M 2 t *Ô-Ø—M‘M 2¨ t *Õ-àñ .ðûô  ò 	Ùð —‘˜r 4˜jÔ)Ø—‘˜r B 4˜jÕ)àò *ð	ús9   šB3
¹B>¾,B8Á*B>ÂC8Â8B>Â>4C5Ã4C5Ã84D0Ä/D0c                 ó@   — t        t        t        | |«      fi |¤Ž«      S r   )rP   r¨   r@   ©r   r1   Úkwargss      r   ÚgeneralizeProgramr¬   �  ó$   € ÜÜÔ,¨W°mÓDÑOÈÑOóð r   c                 óR   — | d   s| d   sd| dd fS d| dd fS | d   sd| dd fS d| fS )a†  
    Takes X,Y vector v and returns one of r, h, v, or 0 depending on which
    of X and/or Y are zero, plus tuple of nonzero ones.  If both are zero,
    it returns a single zero still.

    >>> _categorizeVector((0,0))
    ('0', (0,))
    >>> _categorizeVector((1,0))
    ('h', (1,))
    >>> _categorizeVector((0,2))
    ('v', (2,))
    >>> _categorizeVector((1,2))
    ('r', (1, 2))
    r   r   Ú0NÚvÚhÚrr’   )r°   s    r   Ú_categorizeVectorr³   “  sR   € ð ˆQŠ4Ø�ŠtØ˜˜"˜1˜�:Ðà˜˜!˜"˜�:Ðà�ŠtØ˜˜"˜1˜�:Ðà˜�6ˆMr   c                 ó.   — | dk(  r|S |dk(  r| S | |k(  r| S y )Nr¯   r’   )rž   rŸ   s     r   Ú_mergeCategoriesrµ   ®  s)   € ØˆC‚xØˆØˆC‚xØˆØˆA‚vØˆØr   c                 ó*   — | dk(  ry| dk(  ry| dv sJ ‚| S )Nr±   r°   Ú0rr’   )rž   s    r   Ú_negateCategoryr¸   ¸  s'   € ØˆC‚xØØˆC‚xØØ�‰9Ðˆ9Ø€Hr   c                 ó�  — t        | «      }d}g }d}||k  �r.| |   }|dz  }t        |t        «      s|j                  |«       |dz  }nö|}t        |«      dz
  }|g}|d|z   z  }||k  rbt        | |   t        «      rO||z   t        k  rC|j                  | |   «       |dz  }||z  }||k  r t        | |   t        «      r||z   t        k  rŒCt        |«      }	g }
|D ]  }|
j                  |d   «       Œ |D ]   }|d   dk(  sJ ‚|
j                  |dd «       Œ" |
j                  |	«       |j                  |
«       ||	z   }||k  r�Œ.|S )Nr   r   r   )r-   r   rB   r   r   rC   )rD   Únum_argsÚ	stack_useÚnew_argsrV   rF   Úprev_stack_useÚnum_sourcesÚ	blendlistÚ
num_blendsr    s              r   Ú_convertToBlendCmdsrÁ   Á  s†  € ô �4‹y€HØ€IØ€HØ	€AØ
ˆh‹,Ø�1‰gˆØ	ˆQ‰ˆÜ˜#œtÔ$Ø�O‰O˜CÔ Ø˜‰N‰Ià&ˆNô
 ˜c›( Q™,ˆKØ˜ˆIØ˜˜[™Ñ(ˆIð �X’Ü˜t A™w¬Ô-Ø Ñ+¬mÒ;à× Ñ   a¡Ô)Ø�Q‘�Ø˜[Ñ(�	ð �X’Ü˜t A™w¬Ô-Ø Ñ+¬mÓ;ô ˜Y›ˆJàˆJØ ò *�Ø×!Ñ! # a¡&Õ)ð*à ò -�Ø˜2‘w !’|Ð#�|Ø×!Ñ! # a¨ )Õ,ð-ð ×Ñ˜jÔ)Ø�O‰O˜JÔ'Ø&¨Ñ3ˆIð] ˆhŒ,ð` €Or   c                 ó„  — t        |t        «      rvt        | t        «      rbt        | «      t        |«      k7  s| d   |d   k7  r
t        «       ‚t	        | d d |d d «      D ��cg c]  \  }}t        ||«      ‘Œ c}}| d   gz   S || }} t        | t        «      r | d   dk(  sJ ‚t        | d   |«      g| dd  z   S | |z   S c c}}w r”   )r   rB   r-   r
   r–   Ú_addArgs)rž   rŸ   ÚvaÚvbs       r   rÃ   rÃ   û  sÇ   € Ü�!”TÔÜ�aœÔÜ�1‹vœ˜Q›Ò 1 R¡5¨A¨b©E¢>Ü “lÐ"Ü36°q¸¸"°v¸qÀÀ"¸vÓ3F×G©¨¨R”H˜R Õ$ÓGÈ1ÈRÉ5È'ÑQÐQà�aˆqˆAÜ�!”TÔØ�‰u˜ŠzÐˆzÜ˜˜1™˜qÓ!Ð" Q q r UÑ*Ð*Øˆq‰5€Lùó Hs   Á"B<c                 óž   — d}d}| D ]9  }t        |«      t        u r!t        ||t        |«      z   «      }||d   z  }Œ5|dz  }Œ; t        ||«      S )Nr   r   r   )r.   rB   ÚmaxÚ_argsStackUse)rD   ÚstackLenÚmaxLenrF   s       r   rÈ   rÈ   	  sc   € Ø€HØ€FØò ˆÜ�‹9œÑä˜ ¬M¸#Ó,>Ñ!>Ó?ˆFØ˜˜B™Ñ‰Hà˜‰M‰Hðô ˆx˜Ó Ð r   Tc                 ó  — |rt        | |¬«      } nt        | «      } t        t        | «      dz
  dd«      D ]T  }d| |   d   cxk(  r| |dz
     d   k(  sŒn Œ!| |dz
     d   | |   d   }}d|d   |d   z   |d   |d   z   gf| |dz
  <   | |= ŒV t        t        | «      «      D ]h  }| |   \  }}	|dv rt	        |	«      \  }
}	|
|dd  z   |	f| |<   Œ+|dk(  sŒ1t	        |	d d «      \  }}t	        |	d	d  «      \  }}||z   d
z   ||	dd z   |z   f| |<   Œj |sÂt        t        | «      dz
  dd«      D ]¦  }| |   \  }}	|dk(  r-t        |	«      dk(  sJ ‚t	        |	dd «      \  }
}	|
dz   }||	f| |<   |dk(  r| |= ŒF|sŒI|dv sŒN|| |dz
     d   k(  sŒ]| |dz
     \  }}t        |	«      dk(  rt        |«      dk(  sJ ‚	 t        |	d   |d   «      g}||f| |dz
  <   | |= Œ¨ t        dt        | «      dz
  «      D ]á  }| |   \  }}	| |dz
     d   | |dz      d   }}|dv r<||cxk(  rdk(  r1n n.t        |	«      dk(  sJ ‚|d   dk(  rd|	d   gn|	d   dg}	d|	f| |<   Œa|dd  d
k(  sŒjt        |	«      dk(  sŒy||cxk(  rdk(  sŒ…n Œˆ|d   dk(  |d   dk(  z  sJ ‚|d   dk(  rd}n|d   dk7  rd}n|d   dk(  rd}nd}|	d |  t        |	«      d«      z   |	|d  z   }	d|	f| |<   Œã | rt        | d   d   «      nd}t        t        | «      dz
  dd«      D �]D  }| |dz
     \  }}| |   \  }}d }||hddhk  r(||k(  r|}nÛt        |«      }|dk(  r|dk(  rd}nÃ|dk(  r¾d}n»||fdv r|}n²||hddhk(  r|}n¦d
|dd  cxk(  r|dd  k(  r•n n’|d d \  }}|d d \  }}|dk(  s|dk(  s||cxk(  rdk(  rn nŒœt        ||«      }|€Œ«|dk(  rt        ||«      }|€Œ¿d|z   d
z   }n=|dk(  r!t        |t        |«      «      }|€Œå|dz   d
z   }nt        ||«      }|€Œý||z   d
z   }t        |«      }t        |t        |«      |z   «      } |r| |k  r|||z   f| |dz
  <   | |= | }�ŒC|}�ŒG t        t        | «      «      D ]Ù  }| |   \  }}	|dv rd|dd  z   |	f| |<   Œ|dd  d
k(  sŒ&|d d dvsŒ.t        |	«      }|d d \  }!}|!dk(  |dk(  z  r
|dz  dk(  sJ ‚|!d k(  rd}!|d k(  rd}|!dk(  r|}!|dk(  rt        |!«      }|!|hddhk  s	J |!|f«       ‚|dz  r;|!|k7  r |!dk(  |d!z  dk(  z  r(|	d d	 |	dd  z   |	d	d z   }	n|!dk(  r|	dd |	d d z   |	dd  z   }	|!|z   d
z   |	f| |<   ŒÛ t        t        | «      «      D ]-  }| |   \  }}	t        d"„ |	D «       «      sŒ|t        |	«      f| |<   Œ/ | S # t        $ r Y �Œ]w xY w)#N)r£   r   r   r   r%   >   rb   r%   ro   r*   rˆ   Úcurvetorr   Ú	00curvetors   ÚlinetoÚ0lineto>   ri   rl   >   rÏ   ri   rl   rb   r°   rt   r²   )r   rn   r�   rŠ   >   ©rb   r�   ©ro   rŠ   rl   ri   >   rÏ   Ú0movetor±   >   ÚhhÚhvÚrrÚvhÚvvr¯   r}   c              3   ó<   K  — | ]  }t        |t        «      –— Œ y ­wr   rJ   rK   s     r   r   z%specializeCommands.<locals>.<genexpr>;  rL   rM   )r¨   rB   rR   r-   r³   rÃ   r
   r.   rÈ   rµ   r¸   rÇ   rN   rÁ   )"r6   r£   ÚgeneralizeFirstÚpreserveTopologyÚmaxstackrV   Úv1Úv2rO   rD   ÚcÚc1Úargs1Úc2Úargs2Ú_Ú
other_argsr¼   ÚprvÚnxtÚposÚstackUseÚop1Úop2Únew_oprU   Úd0Úd1Úd2Úd3ÚdÚargs1StackUseÚcombinedStackUseÚop0s"                                     r   ÚspecializeCommandsrô     s±  € ñP Ü% h¸\ÔJ‰ä˜“>ˆô ”3�x“= 1Ñ$ a¨Ó,ò ˆØ˜ ™ A™Ô<¨(°1°q±5©/¸!Ñ*<Ö<Ø˜a !™e‘_ QÑ'¨°!©°Q©�ˆBØ(¨2¨a©5°2°a±5©=¸"¸Q¹%À"ÀQÁ%¹-Ð*HÐIˆH�Q˜‘U‰OØ˜‘ð	ôh ”3�x“=Ó!ò ˆØ˜A‘;‰ˆˆDàÐ'Ñ'Ü'¨Ó-‰GˆAˆtØ˜b  ˜f™* dÐ*ˆH�Q‰KØà�ÓÜ)¨$¨r°¨(Ó3‰IˆB�Ü)¨$¨r¨s¨)Ó4‰IˆB�Ø˜r™' IÑ-¨u°t¸A¸a°yÑ/@À5Ñ/HÐHˆH�Q‰KØðñF Ü”s˜8“} qÑ(¨"¨bÓ1ò 	ˆAØ ‘{‰HˆB�ð �[Ò Ü˜4“y A’~Ð%�~Ü+¨D°°1¨IÓ6‘��4Ø˜‘\�Ø  $˜h�˜‘ð �YŠØ˜Q�KØò �RÐ1Ò1°r¸XÀaÈ!Áe¹_ÈQÑ=OÓ7OØ (¨¨Q©¡‘��:Ü˜4“y A’~¬#¨j«/¸QÒ*>Ð>Ð>ðÜ (¨¨a©°*¸Q±-Ó @ÐA�Hð $& x .�˜˜Q™‘Ø˜Q�KØð;	ôB �1”c˜(“m aÑ'Ó(ò ˆØ˜A‘;‰ˆˆDØ˜A ™E‘? 1Ñ% x°°A±¡°qÑ'9ˆSˆàÐ2Ñ2°s¸cÔ7NÀYÕ7NÜ�t“9 ’>Ð!�>Ø#% a¡5¨C¢<�A�t˜A‘w‘<°d¸1±g¸q°\ˆDØ$ dÐ+ˆH�Q‰KØàˆaˆbˆ6�YÓ¤3 t£9°£>°c¸SÔ6OÀKÖ6OØ�q‘E˜S‘L R¨¡U¨c¡\Ò2Ð2Ð2Ø�!‰u˜Š|Ø‘Ø�A‘˜#’Ø‘Ø�A‘˜#’Ø‘à�à˜˜�: 
¤ T£
¨4Ó 0Ñ0°4¸¸°:Ñ=ˆDØ&¨Ð-ˆH�Q‰KØð/ñ4 2:Œ}˜X b™\¨!™_Ô-¸q€HÜ”3�x“= 1Ñ$ a¨Ó,ó 9%ˆØ˜a !™e‘_‰
ˆˆUØ˜a‘[‰
ˆˆUØˆð �ˆ:˜) [Ð1Ò1Ø�cŠzØ‘ä˜“J�Ø˜+Ò%¨!¨qª&Ø)‘FØ˜!’VØ)‘Fà�3ˆZÐSÑSØ‰Fà�3ˆZ˜I yÐ1Ò1Ø‰Fà˜#˜a˜b˜'Ô, S¨¨ WÕ,Ø˜˜!�W‰FˆB�Ø˜˜!�W‰FˆB�à�SŠy˜B #šI¨¨r¬°S­Øä   RÓ(ˆAØˆyØØ�SŠyÜ$ Q¨Ó+�Ø�9ØØ˜q™ 9Ñ,‘Ø�s’Ü% b¬/¸!Ó*<Ó=�Ø�:ØØ˜c™ IÑ-‘ä% b¨"Ó-�Ø�:ØØ˜a™ )Ñ+�ô & eÓ,ˆÜ˜}¬c°%«j¸8Ñ.CÓDÐÙÐ&¨Ò1Ø% u¨u¡}Ð5ˆH�Q˜‘U‰OØ˜�Ø'ŠHà$ŠHðs9%ôx ”3�x“=Ó!ò "ˆØ˜A‘;‰ˆˆDàÐ'Ñ'Ø  1 2 ™,¨Ð,ˆH�Q‰KØàˆaˆbˆ6�YÓ 2 b q 6Ð1OÒ#OÜ�D“	ˆAà˜"˜1�v‰HˆC�Ø�s‘
˜s c™zÒ*Ø˜1‘u ’zÐ!�zØ�cŠzØ�Ø�cŠzØ�Ø�cŠzØ�Ø�cŠzÜ% cÓ*�Ø˜�: # s Ò+Ð7¨c°3¨ZÓ7Ð+à�1ŠuØ˜#’:Ø˜s™
 q¨1¡u°¡zÒ2à# C R˜y¨4°°¨9Ñ4°t¸B¸r°{ÑB™à˜c’zà# A a˜y¨4°°¨8Ñ3°d¸1¸2°hÑ>˜à ™) iÑ/°Ð5ˆH�Q‰KØðE"ôJ ”3�x“=Ó!ò 8ˆØ˜A‘;‰ˆˆDÜÑ5°Ô5Õ5ØÔ1°$Ó7Ð7ˆH�QŠKð8ð
 €OøôS "ò Úðús   Æ-U7Õ7	VÖVc                 ó@   — t        t        t        | |«      fi |¤Ž«      S r   )rP   rô   r@   rª   s      r   ÚspecializeProgramrö   A  r­   r   Ú__main__r   zfonttools cffLib.specializerz&CFF CharString generalizer/specializer)Údescriptionr   r§   Ú*z	Commands.)ÚmetavarÚnargsÚhelpz--num-regionsÚ
NumRegionsz5Number of variable-font regions for blend opertaions.)rú   rû   Údefaultrü   z--fontÚFONTFILEzCFF2 font to specialize.)rú   rþ   rü   z-oz--output-filezOutput font file name.)r.   rü   c                 óN   — t        t        j                  | €d   «      S |    «      S )Nr   )r	   ÚoptionsÚnum_regions)r3   s    r   ú<lambda>r  p  s*   € ¤Ü×#Ñ#¨¨ AÑFó"€ Ø>EÑFó"€ r   zProgram:z	Commands:zProgram from commands:zGeneralized program:zSpecialized program:)ÚTTFontÚCFF2)rÛ   )ÚmakeOutputFileNamez.specialized)Ú	overWriteÚsuffixÚSavingr   )F)FTFé0   )=Ú__doc__ÚfontTools.cffLibr   r   r   r@   rG   rP   rW   ÚobjectrY   r•   r¨   r¬   r³   rµ   r¸   rÁ   rÃ   rÈ   rô   rö   rŽ   Úsysr-   ÚargvÚdoctestÚexitÚtestmodÚfailedÚargparseÚArgumentParserÚparserÚadd_argumentr   Ú
parse_argsr  r   r  r1   Úprintr6   Úprogram2ÚfontÚfontTools.ttLibr  ÚcffÚtopDictIndexÚcff2ÚCharStringsÚcharstringsÚkeysÚ	glyphNameÚ
charstringÚ	decompileÚprivateÚoutput_fileÚfontTools.misc.cliToolsr  ÚoutfileÚsaver’   r   r   ú<module>r+     s9  ðñõ +òò -óYòxò
òôS'¨ô S'òl'óT&óRòò6òò7òtò
!ð ØØØóhóV	ð ˆzÓÛá
ˆ3�8‰8ƒ}˜ÒÛàˆ�‰��—‘Ó"×)Ñ)Ô*ãà$ˆX×$Ñ$Ø&Ø<ô€Fð ×Ñ˜	¨9¸CÀkÐÔRØ
×ÑØØØØØDð ô ð ×ÑØØØØ'ð	 ô ð ×ÑØØØØ%ð	 ô ð ×Ñ §¡¨¨ Ó-€Gà‡‚ð ×"Ñ"Ð*ñ ñð 	ñ " '§/¡/Ó2ˆÙˆjÔÙ‰o˜gÓ&Ô'Ù$ W¨mÓ<ˆÙˆkÔÙˆhŒÙ$ XÓ.ˆÙÐ&Ô'Ù‰o˜hÓ'Ô(Ø˜(Ò"Ð"Ð"ÙÐ$Ô%Ù‰oÑ/°¸ÓGÓHÔIÙÐ$Ô%Ù‰oÑ/°¸ÓGÓHÔIà‡|‚|Ý*á�g—l‘lÓ#ˆØ�F‰|×Ñ×,Ñ,¨QÑ/ˆØ×&Ñ&ˆØ$×)Ñ)Ó+ò 	ˆIØ$ YÑ/ˆJØ× Ñ Ô"Ø&×.Ñ.×<Ñ<ˆMÙ!2Ø×"Ñ" M¸Mô"ˆJÕð		ð ×ÑÐ&ÝBá(Ø—‘¨°^ô‰Gð ×)Ñ)ˆGÙÙ�(˜GÔ$Ø�I‰I�gÕð ð- ð{ r   