
    h                         S r SSKJr  S rS rS;S jrS rS rS	 r " S
 S\	5      r
S rS<S jrS;S jrS rS rS rS rS rS r    S=S jrS;S jr\S:X  Ga  SSKr\" \R2                  5      S:X  a/  SSKr\R6                  " \R8                  " 5       R:                  5        SSKr\R>                  " SSS9r \ RC                  SSSS S!9  \ RC                  S"S#SSS$S%9  \ RC                  S&S'SS(S)9  \ RC                  S*S+\"S,S-9  \ RG                  \R2                  SS 5      r$\$RJ                  (       a  \$RL                  c  SOS. r'\" \$RJ                  5      r%\(" S/5        \(" \" \%5      5        \" \%\'5      r)\(" S05        \(" \)5        \" \)5      r*\(" S15        \(" \" \*5      5        \%\*:X  d   e\(" S25        \(" \" \" \%\'5      5      5        \(" S35        \(" \" \" \%\'5      5      5        \$RV                  (       a  SS4K,J-r-  \-" \$RV                  5      r+\+S5   R\                  R^                  S   r0\0Rb                  r2\2Rg                  5        HE  r4\2\4   r5\5Rm                  5         \5Rn                  RN                  r'\" \5RJ                  \'\S69\5l%        MG     \$Rp                  c  SS7K9J:r:  \:" \$RV                  SS8S99r;O\$Rp                  r;\;(       a  \(" S:\;5        \+Ry                  \;5        gggg)>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                     [        U [        5      (       a  U R                  5       n / nU  H   n [        U5      nUR                  U5        M"     U$ ! [         a      [        U5      n N/! [         a      N<f = ff = fN)
isinstancestrsplitint
ValueErrorfloatappend)stringprogramtokens      N/var/www/html/env/lib/python3.13/site-packages/fontTools/cffLib/specializer.pystringToProgramr      s}    &#G	JE 	u  N  	e 	s)   A
A:A((
A62A:5A66A:c                 2    SR                  S U  5       5      $ )N c              3   8   #    U  H  n[        U5      v   M     g 7fr   )r   ).0xs     r   	<genexpr>"programToString.<locals>.<genexpr>$   s     ,GqCFFGs   )join)r   s    r   programToStringr   #   s    88,G,,,    Nc                 @   SnSnSnSn/ n/ n[        U 5      nU GHe  n	[        U	[        5      (       d  UR                  U	5        M,  U	S:X  a>  Uc   eSU" U5      -   n
US   nX-  S-   nX|* S /X|* S& [	        U5      nXKU-   S-
  -  nUnMp  U	S:X  a  US   n[        U5      [        L d   eOpU(       di  U	S;   ac  S	nU	S
;   nU(       a  U[	        XuS 5      -   nO[	        U5      nU(       a2  US-  U-  (       a%  UR                  S5      nUR                  SU/45        U	S;   aK  U(       a  UR                  SU45        UR                  U	/ 45        UR                  S[        U5      /45        OUR                  X45        / nGMh     U(       a  UR                  SU45        U$ )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   programToCommandsrA   '   s   , KGMNHE	gB%%%LLG ,,,w!77N b	I$59L%*=>%:$;E-.!5zH1A55M%NiBiG=C'''5 -
 $
 K44F (#eO.D*EEe*GaK61		!eW.,,U,OOUBK(OOR$r(,-OOUN+q r U$Or   c                     / nU  HM  n[        U[        5      (       a$  UR                  U5        UR                  S5        M<  UR                  U5        MO     U$ )Nr   )r   listextendr   )args
token_listargs      r   _flattenBlendArgsrH      sP    Jc4  c"g&c"  r   c                     / nU  HR  u  p#[        S U 5       5      (       a  [        U5      nUR                  U5        U(       d  MA  UR                  U5        MT     U$ )zmTakes a commands list as returned by programToCommands() and converts
it back to a T2CharString program list.c              3   B   #    U  H  n[        U[        5      v   M     g 7fr   r   rC   r   rG   s     r   r   $commandsToProgram.<locals>.<genexpr>        5z#t$$   )anyrH   rD   r   )r7   r   oprE   s       r   commandsToProgramrR      sT     G5555$T*Dt2NN2  Nr   c              #   ~   #    [        U 5      nX!-  S:w  a  [        U 5      e[        SX!5       H  nXX1-    v   M     g7f)z'Group the list el into groups of size nr   N)r.   r
   range)elnlis       r   _everyNrY      s=     BAuzn1a^QUm s   ;=c                       \ rS rSr\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r	\S 5       r
\S 5       r\S	 5       r\S
 5       r\S 5       r\S 5       r\S 5       r\S 5       rSrg)!_GeneralizerDecombinerCommandsMap   c              #   L   #    [        U 5      S:w  a  [        U 5      eSU 4v   g 7f)Nr+   r&   r.   r
   rE   s    r   r&   )_GeneralizerDecombinerCommandsMap.rmoveto   s&     t9>T""$s   "$c              #   V   #    [        U 5      S:w  a  [        U 5      eSU S   S/4v   g 7fNr   r&   r   r^   r_   s    r   r$   )_GeneralizerDecombinerCommandsMap.hmoveto   s.     t9>T""47A,''   ')c              #   V   #    [        U 5      S:w  a  [        U 5      eSSU S   /4v   g 7frb   r^   r_   s    r   r'   )_GeneralizerDecombinerCommandsMap.vmoveto   s.     t9>T""1d1g,''rd   c              #   b   #    U (       d  [        U 5      e[        U S5       H	  n SU 4v   M     g 7f)Nr+   rlinetor
   rY   r_   s    r   rh   )_GeneralizerDecombinerCommandsMap.rlineto   s/     T""D!$Dd## %   -/c              #      #    U (       d  [        U 5      e[        U 5      n  S[        U5      S/4v   SS[        U5      /4v   M$  ! [         a     g f = f7fNrh   r   r
   r-   r1   StopIterationrE   r9   s     r   hlineto)_GeneralizerDecombinerCommandsMap.hlineto   sb     T""$Z	 48Q-00 1d2h-00   		"   A%A 
AAAAc              #      #    U (       d  [        U 5      e[        U 5      n  SS[        U5      /4v   S[        U5      S/4v   M$  ! [         a     g f = f7frm   rn   rp   s     r   vlineto)_GeneralizerDecombinerCommandsMap.vlineto   sb     T""$Z	 1d2h-00 48Q-00   		rs   c              #   b   #    U (       d  [        U 5      e[        U S5       H	  n SU 4v   M     g 7f)N   	rrcurvetori   r_   s    r   ry   +_GeneralizerDecombinerCommandsMap.rrcurveto   s/     T""D!$D%% %rk   c              #      #    [        U 5      nUS:  d	  US-  S:  a  [        U 5      eUS-  S:X  a   SU S   U S   U S   U S   U S   S/4v   U SS  n [        U S5       H  n SU S   SU S   U S   U S   S/4v   M     g 7fN   r   r+   ry   r         r.   r
   rY   rE   rW   s     r   	hhcurveto+_GeneralizerDecombinerCommandsMap.hhcurveto   s     Iq5AEAIT""q5A:a$q'47DGT!Wa PQQ8DD!$Da!T!Wd1gtAw JKK %   A;A=c           	   #      #    [        U 5      nUS:  d	  US-  S:  a  [        U 5      eUS-  S:X  a   SU S   U S   U S   U S   SU S   /4v   U SS  n [        U S5       H  n SSU S   U S   U S   SU S   /4v   M     g 7fr|   r   r   s     r   	vvcurveto+_GeneralizerDecombinerCommandsMap.vvcurveto   s     Iq5AEAIT""q5A:a$q'47DGQQ PQQ8DD!$DDGT!Wd1gq$q' JKK %r   c              #     #    [        U 5      nUS:  d	  US-  S;  a  [        U 5      eS nUS-  S:X  a  US-  S:H  nU S S U SS  p [        U S5      n  [        U5      n SU S	   S	U S   U S   S	U S
   /4v   [        U5      n SS	U S	   U S   U S   U S
   S	/4v   MH  ! [         a     Of = fU(       aA  Un W(       a  SU S	   S	U S   U S   U S   U S
   /4v   g SS	U S	   U S   U S   U S
   U S   /4v   g g 7fNr}      >   r   r   r}   r   r+   r   r   ry   r   r~   r.   r
   rY   r1   ro   rE   rW   	last_argslastStraightr9   s        r   	hvcurveto+_GeneralizerDecombinerCommandsMap.hvcurveto   sT    Iq5AE-T""	q5A:q5A:L"3Bibc)T1	Bx"T!Waa$q'1d1g$NOOBx"QQa$q'47A$NOO	 
  		D"T!Waa$q'47DQRG$TUU"QQa$q'47DQRG$TUU &   AC3A	B 
B'$C3&B''AC3c              #     #    [        U 5      nUS:  d	  US-  S;  a  [        U 5      eS nUS-  S:X  a  US-  S:H  nU S S U SS  p [        U S5      n  [        U5      n SS	U S	   U S   U S   U S
   S	/4v   [        U5      n SU S	   S	U S   U S   S	U S
   /4v   MH  ! [         a     Of = fU(       aA  Un W(       a  SS	U S	   U S   U S   U S
   U S   /4v   g SU S	   S	U S   U S   U S   U S
   /4v   g g 7fr   r   r   s        r   	vhcurveto+_GeneralizerDecombinerCommandsMap.vhcurveto  sT    Iq5AE-T""	q5A:q5A:L"3Bibc)T1	Bx"QQa$q'47A$NOOBx"T!Waa$q'1d1g$NOO	 
  		D"QQa$q'47DQRG$TUU"T!Waa$q'47DQRG$TUU r   c              #      #    [        U 5      nUS:  d	  US-  S:w  a  [        U 5      eU S S U SS  p [        U S5       H	  n SU 4v   M     SU4v   g 7f)Nr   rx   r+   ry   rh   r   rE   rW   r   s      r   
rcurveline,_GeneralizerDecombinerCommandsMap.rcurveline%  sd     Iq5AEQJT""s)T"#YiD!$D%% %)$$   AAc              #      #    [        U 5      nUS:  d	  US-  S:w  a  [        U 5      eU S S U SS  p [        U S5       H	  n SU 4v   M     SU4v   g 7f)Nr   r+   r   irh   ry   r   r   s      r   
rlinecurve,_GeneralizerDecombinerCommandsMap.rlinecurve/  sd     Iq5AEQJT""s)T"#YiD!$Dd## %I&&r    N)__name__
__module____qualname____firstlineno__staticmethodr&   r$   r'   rh   rq   ru   ry   r   r   r   r   r   r   __static_attributes__r   r   r   r[   r[      s      
 ( (
 ( (
 $ $ 	 	 	 	 & & L L L L V V0 V V0 % % ' 'r   r[   c           	      T   [        U  Vs/ s H  n[        U[        5      PM     sn5      (       a@  U  VVs/ s H0  n[        U[        5      (       a  [        U5      OU/  H  nUPM     M2     nnnOU nUS   nUS S n[	        U5      nXe-  S-
  nXWS-   -  U:X  d  [        U 5      eUS U  Vs/ s H  o/PM     nnXES  n	[	        U	5      n
[        SX5       Vs/ s H	  o9X3U-    PM     nn[        X5       VVs/ s H  u  pX-   S/-   PM     nnnU$ s  snf s  snnf s  snf s  snf s  snnf Nr   r   r   )rP   r   rC   _convertBlendOpToArgsr.   r
   rT   zip)	blendListrG   erX   rE   r;   rW   
numRegionsdefaultArgs	deltaArgsnumDeltaValues	deltaListab
blend_argss                  r   r   r   :  s`   
 Y7YcJsD!Y788 
2<Q2E2E+A.A3N N  	 
  RI 9DD	A!#Ja(A-##$()$45$4S5$4K5Z I^N/4Q/S/S!!*n%/S   +.k*EF*E$!!%1#+*EJFE 8
4 6 Gs   D7D+DD6D$c           
         / n[         nU  H  u  pE[        U Vs/ s H  n[        U[        5      PM     sn5      (       a@   U VVs/ s H0  n[        U[        5      (       a  [	        U5      OU/  H  nUPM     M2     nnn[        X4S 5      nUc  UR                  XE45        M   U" U5       H  n	UR                  U	5        M     M     U$ s  snf s  snnf ! [
         a2    U(       a)  UR                  SU45        UR                  SU/45         Ne f = f! [
         a4    U(       a+  UR                  SU45        UR                  SU/45         GMD  e f = f)Nr,   )r[   rP   r   rC   r   r
   r   getattr)
r7   ignoreErrorsresultmappingrQ   rE   rG   rV   funccommands
             r   generalizeCommandsr   d  s\   F/G6#
3%677  $#6@d6K6K-c2RUQVV   W #    wD)<MM2*%
	:g& &3 F MC 7   MM2t*-MM2t*-   	 r4j)rB4j))	s;   C	
 C7C<C# DC8DD8EEc                 >    [        [        [        X5      40 UD65      $ r   )rR   r   rA   r   r2   kwargss      r   generalizeProgramr     "    ,WDOO r   c                 p    U S   (       d  U S   (       d  SU SS 4$ SU SS 4$ U S   (       d  SU SS 4$ SU 4$ )aV  
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     Q4t"1:!":t"1:6Mr   c                 2    U S:X  a  U$ US:X  a  U $ X:X  a  U $ g )Nr   r   )r   r   s     r   _mergeCategoriesr     s'    CxCxvr   c                 2    U S:X  a  gU S:X  a  gU S;   d   eU $ )Nr   r   0rr   )r   s    r   _negateCategoryr     s'    CxCx99Hr   c                    [        U 5      nSn/ nSnXA:  Ga?  X   nUS-  n[        U[        5      (       d  UR                  U5        US-  nGOUn[        U5      S-
  nU/nUSU-   -  nXA:  ai  [        X   [        5      (       aR  X'-   [        :  aF  UR                  X   5        US-  nX'-  nXA:  a%  [        X   [        5      (       a  X'-   [        :  a  MF  [        U5      n	/ n
U H  nU
R                  US   5        M     U H"  nUS   S:X  d   eU
R                  USS 5        M$     U
R                  U	5        UR                  U
5        Xi-   nXA:  a  GM?  U$ )Nr   r   r   )r.   r   rC   r   r   rD   )rE   num_args	stack_usenew_argsrX   rG   prev_stack_usenum_sources	blendlist
num_blendsr   s              r   _convertToBlendCmdsr     sm    4yHIH	A
,g	Q#t$$OOC NI&N
 c(Q,KI[(I tw--+m;  )Q(	 tw--+m; YJJ !!#a&) ! 2w!|#|!!#a), ! j)OOJ'&3I] ,` Or   c                    [        U[        5      (       a|  [        U [        5      (       ae  [        U 5      [        U5      :w  d  U S   US   :w  a
  [        5       e[	        U S S US S 5       VVs/ s H  u  p#[        X#5      PM     snnU S   /-   $ Xp[        U [        5      (       a!  U S   S:X  d   e[        U S   U5      /U SS  -   $ X-   $ s  snnf r   )r   rC   r.   r
   r   _addArgs)r   r   vavbs       r   r   r     s    !Ta1vQ1R5AbE> l"36q"vq"v3FG3FHR$3FG1R5'QQq!Tuzz1q!"QqrU**5L Hs   .Cc                     SnSnU  H:  n[        U5      [        L a   [        X![        U5      -   5      nXS   -  nM5  US-  nM<     [        X5      $ )Nr   r   r   )r/   rC   max_argsStackUse)rE   stackLenmaxLenrG   s       r   r   r   	  sX    HF9M#,>!>?FBHMH  x  r   Tc                    U(       a
  [        XS9n O[        U 5      n [        [        U 5      S-
  SS5       HR  nSX   S   s=:X  a  XS-
     S   :X  d  M  O  M#  XS-
     S   X   S   pvSUS   US   -   US   US   -   /4XS-
  '   X	 MT     [        [        U 5      5       Hd  nX   u  pUS;   a  [	        U	5      u  pXSS  -   U	4X'   M)  US:X  d  M1  [	        U	S S 5      u  p[	        U	S	S  5      u  pX-   S
-   XSS -   U-   4X'   Mf     U(       d  [        [        U 5      S-
  SS5       H  nX   u  pUS:X  a+  [        U	5      S:X  d   e[	        U	SS 5      u  pU
S-   nX4X'   US:X  a  X	 MD  U(       d  MM  US;   d  MU  XUS-
     S   :X  d  Me  XS-
     u  nn[        U	5      S:X  a  [        U5      S:X  d   e [        U	S   US   5      /nUU4XS-
  '   X	 M     [        S[        U 5      S-
  5       H  nX   u  pXS-
     S   XS-      S   nnUS;   a@  UUs=:X  a  S:X  a3  O  O0[        U	5      S:X  d   eUS   S:X  a  SU	S   /OU	S   S/n	SU	4X'   Mc  USS  S
:X  d  Mn  [        U	5      S:X  d  M  UUs=:X  a  S:X  d  M  O  M  US   S:H  US   S:H  -  (       d   eUS   S:X  a  SnOUS   S:w  a  SnOUS   S:X  a  SnOSnU	S U [        U	5      " S5      -   U	US  -   n	SU	4X'   M     U (       a  [        U S   S   5      OSn[        [        U 5      S-
  SS5       GHa  nXS-
     u  nnX   u  nnS nUU1SS1::  a,  UU:X  a  UnO[        U5      nUS:X  a	  US:X  a  SnOUS:X  a  SnOUU4S;   a  UnOUU1SS1:X  a  UnOS
USS  s=:X  a	  USS  :X  a  O  OUS S u  nnUS S u  nnUS:X  d  US:X  d  UUs=:X  a  S:X  a  O  OM  [        UU5      nUc  M  US:X  a  [        UU5      nUc  M  SU-   S
-   nOCUS:X  a#  [        U[        U5      5      nUc  M  US-   S
-   nO[        UU5      nUc  GM  UU-   S
-   n[        U5      n[        U[        U5      U-   5      n U(       a  U U:  a  UX-   4XS-
  '   X	 U nGM_  UnGMd     [        [        U 5      5       H  nX   u  pUS;   a  SUSS  -   U	4X'   M  USS  S
:X  d  M(  US S S;  d  M3  [        U	5      nUS S u  n!nU!S:H  US:H  -  (       a  US-  S:X  d   eU!S :X  a  Sn!US :X  a  SnU!S:X  a  Un!US:X  a  [        U!5      nU!U1SS1::  d	   U!U45       eUS-  (       aB  U!U:w  a%  U!S:H  US!-  S:H  -  (       a  U	S S	 U	SS  -   U	S	S -   n	OU!S:X  a  U	SS U	S S -   U	SS  -   n	U!U-   S
-   U	4X'   M     [        [        U 5      5       H1  nX   u  p[        S" U	 5       5      (       d  M"  U[        U	5      4X'   M3     U $ ! [         a     GM  f = f)#N)r   r   r   r   r&   >   rh   r&   ry   r+   r   curvetor}   	00curvetor~   lineto0lineto>   rq   ru   >   r   rq   ru   rh   r   r   r   )r   rx   r   r   >   rh   r   ry   r   ru   rq   >   r   0movetor   >   hhhvrrvhvvr   r   c              3   B   #    U  H  n[        U[        5      v   M     g 7fr   rK   rL   s     r   r   %specializeCommands.<locals>.<genexpr>;  rN   rO   )r   rC   rT   r.   r   r   r
   r/   r   r   r   r   rP   r   )"r7   r   generalizeFirstpreserveTopologymaxstackrX   v1v2rQ   rE   cc1args1c2args2_
other_argsr   prvnxtposstackUseop1op2new_oprW   d0d1d2d3dargs1StackUsecombinedStackUseop0s"                                     r   specializeCommandsr    s=   P %hJ> 3x=1$a,A<(q5/!*<<<!e_Q'Q(2a52a5="Q%"Q%-*HIHUO	 -h 3x=!;'''-GAf*d*HK)$r(3IB)$rs)4IB'I-uAay/@5/HHHK "F s8}q("b1A{HB [ 4yA~%~+D1I6\ h YK qR11ra!e_Q=O7O (Q:4yA~#j/Q*>>> (a*Q- @AH $&x.QK; 2B 1c(ma'(;E?1%xAq'9S22sc7NY7Nt9>!>#%a5C<AtAw<d1gq\D$d+HKab6Y3t9>cS6OK6O6OqESLRUc\222!u|A#A#:T
4 004:=D&-HK/ )4 2:}Xb\!_-qH3x=1$a,!e_
U[
U :)[11czJ+%!q&)F!V)F3ZSSF3ZIy11F#ab',SW,!WFB!WFBSyB#IrS R(AySy$Q+9q9,s%b/!*<=:cI-%b"-:a)+ &e,}c%j8.CD&1%u}5HUO'H$Hs -x 3x=!;''12,,HKab6Y2bq61O#OD	A"1vHCs
scz*1uz!zczczczcz%c*:#s+7c3Z7+1u#:s
q1uz2#CRy494tBr{Bcz#Aay483d12h>)i/5HKE "J 3x=!;55551$77HK "
 OS " s   8W
W)(W)c                 >    [        [        [        X5      40 UD65      $ r   )rR   r  rA   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                 P    [        [        R                  U c  S   5      $ U    5      $ )Nr   )r	   optionsnum_regions)r4   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)FTF0   )=__doc__fontTools.cffLibr   r   r   rA   rH   rR   rY   objectr[   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  r2   printr7   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?     s.   + -Yx
S' S'l'T&R67t
! hV	 z
388}"))*$$&<F 	9CkR
D   '	   %	   -G ""*  	 "'//2jog&'$Wm<kh$X.&'oh'(("""$%o/GHI$%o/GHI||*gll#F|,,Q/&&$))+I$Y/J  "&..<<M!2""MM"J	 , &B(^G ))G(G$IIg - { r   