Ë
    £eh¥°  ã                   óÖ  — d Z ddl­ ddlmZ ddlmZ ddlmZmZm	Z	 ddl
mZ ddlmZmZ dd	lm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dlmZ ddlmZ ddl m!Z!m"Z"m#Z# ddl$Z$ddl%Z% e$jL                  d«      Z'dZ(dZ)dZ*dZ+ G d„ d«      Z,	 	 	 d"de(e)e+dg dœd„Z- ee-«      d„ «       Z.d„ Z/d„ Z0d#d „Z1e2d!k(  r*ddl3Z3 e1«       Z4 e3jj                   e6 e7e4«      «      «       yy)$z¯
Tool to find wrong contour order between different masters, and
other interpolatability (or lack thereof) issues.

Call as:
$ fonttools varLib.interpolatable font1 font2 ...
é   )Ú*)Útest_contour_order)Útest_starting_pointé    )ÚRecordingPenÚDecomposingRecordingPenÚlerpRecordings)ÚTransformPen)ÚStatisticsPenÚStatisticsControlPen)ÚOpenContourError)ÚpiecewiseLinearMapÚnormalizeLocation)ÚfloatToFixedToStr)Ú	Transform)Údefaultdict)ÚSimpleNamespace)Úwraps)Úpformat)ÚsqrtÚatan2ÚpiNzfontTools.varLib.interpolatablegffffffî?g      à?gü©ñÒMb`?iè  c                   ó*   — e Zd ZdZd„ Zd„ Zd„ Zdd„Zy)ÚGlyph)	Ú
recordingsÚ
greenStatsÚcontrolStatsÚgreenVectorsÚcontrolVectorsÚ	nodeTypesÚisomorphismsÚpointsÚopenContoursc                 óp   — || _         | j                  D ]  }t        | |g «       Œ | j                  |«       y ©N)ÚnameÚITEMSÚsetattrÚ	_populate)ÚselfÚ	glyphnameÚglyphsetÚitems       ú]/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/fontTools/varLib/interpolatable.pyÚ__init__zGlyph.__init__4   s4   € ØˆŒ	Ø—J‘Jò 	$ˆDÜ�D˜$ Õ#ð	$à�‰�xÕ ó    c                 óŽ   — | j                   D ]6  }t        t        | |«      «      |k(  sŒt        | |«      j                  d «       Œ8 y r%   )r'   ÚlenÚgetattrÚappend)r*   Úixr-   s      r.   Ú_fill_inzGlyph._fill_in:   s>   € Ø—J‘Jò 	1ˆDÜ”7˜4 Ó&Ó'¨2Ó-Ü˜˜dÓ#×*Ñ*¨4Õ0ñ	1r0   c                 ór  — || j                      }|d u | _        | j                  ry t        t        |¬«      }	 |j	                  |d¬«       |j                  | _        ~t        | j                  «      D �]Ø  \  }}|j                  D ��cg c]  \  }}|‘Œ	 }}}| j                  j                  |«       t        |¬«      }	t        |¬«      }
	 |j                  |	«       |j                  |
«       | j                  j                  d«       | j"                  j                  |	«       | j$                  j                  |
«       | j&                  j                  t)        |	«      «       | j*                  j                  t)        |
«      «       |d   dk(  r| j!                  |«       �Œ/|d   dk(  sJ ‚|d   d	v sJ ‚t-        «       }t/        |d«      }|j                  |«       | j0                  j                  |j                  «       g }| j2                  j                  |«       t5        |j                  |d«       t5        |j                  |d«       �ŒÛ y # t
        $ r |j	                  |«       Y �Œ!w xY wc c}}w # t        $ r7}| j                  j                  d«       | j!                  |«       Y d }~�Œ?d }~ww xY w)
N©r,   T)ÚoutputImpliedClosingLineFr   ÚaddComponentÚmoveToéÿÿÿÿ)Ú	closePathÚendPath)r&   Údoesnt_existÚPerContourOrComponentPenr   ÚdrawÚ	TypeErrorÚvaluer   Ú	enumerater    r4   r   r   Úreplayr#   r   r6   r   r   r   Úcontour_vector_from_statsr   ÚSimpleRecordingPointPenÚSegmentToPointPenr"   r!   Úadd_isomorphisms)r*   r,   ÚglyphÚperContourPenr5   ÚcontourÚopÚargr    r   r   Úer"   Ú	converterr!   s                  r.   r)   zGlyph._populate?   sQ  € Ø˜Ÿ™Ñ#ˆØ! T˜MˆÔØ×ÒØä0´ÈÔQˆð	&Ø�J‰J�}¸tˆJÔDð (×-Ñ-ˆŒØä$ T§_¡_Ó5ó (	?‰KˆB�Ø+2¯=©=×9¡  CšÐ9ˆIÑ9Ø�N‰N×!Ñ! )Ô,ä&°Ô9ˆJÜ/¸ÔBˆLðØ—‘˜zÔ*Ø—‘˜|Ô,Ø×!Ñ!×(Ñ(¨Ô/ð
 �O‰O×"Ñ" :Ô.Ø×Ñ×$Ñ$ \Ô2Ø×Ñ×$Ñ$Ô%>¸zÓ%JÔKØ×Ñ×&Ñ&Ô'@ÀÓ'NÔOð ˜‰|˜~Ò-Ø—‘˜bÔ!Ùà˜Q‘< 8Ò+Ð+Ð+Ø˜R‘=Ð$<Ñ<Ð<Ð<Ü,Ó.ˆFÜ)¨&°%Ó8ˆIØ�N‰N˜9Ô%ð �K‰K×Ñ˜vŸ|™|Ô,àˆLØ×Ñ×$Ñ$ \Ô2ô ˜VŸ\™\¨<¸Ô?ä˜VŸ\™\¨<¸Ö>ñQ(	?øô ò 	&Ø�J‰J�}×%ð	&üó :øô $ò Ø×!Ñ!×(Ñ(¨Ô.Ø—‘˜bÔ!Ýûðús/   ¸I ÂI0Ã=I6ÉI-É,I-É6	J6É?,J1Ê1J6Nc                 óŠ   — |€#| j                   D ]  }|j                  |«       Œ y | j                   |   j                  |«       y r%   )r   rA   )r*   ÚpenÚcountor_idxrL   s       r.   rA   z
Glyph.draww   s@   € ØÐØŸ?™?ò "�Ø—‘˜SÕ!ñ"ð �O‰O˜KÑ(×-Ñ-¨cÕ2r0   r%   )Ú__name__Ú
__module__Ú__qualname__r'   r/   r6   r)   rA   © r0   r.   r   r   '   s   „ ð
€Eò!ò1ò
6?ôp3r0   r   F)Ú	locationsÚ	toleranceÚ	kinkinessÚupemÚshow_allÚdiscrete_axesc             #   óD  ‡ ‡\K  — |dk\  r|dz  }d|cxk  rdk  sJ ‚ J ‚|dk\  r|dz  }d|k  sJ ‚|xs ‰ D �
cg c]  }
t        |
«      ‘Œ c}
}|€&‰ D ��
ch c]  }|j                  «       D ]  }
|
’Œ Œ }}}
t        ‰ ||	¬«      \  Š\}ˆ ˆ\fd„}|D �	]‘  }t        j	                  d|«       ‰ D �cg c]  }t        ||«      ‘Œ }}t        |D �cg c]  }|€Œd‘Œ	 c}«      dk  rŒSt        t        |‰ |«      «      D ]p  \  }\  }}}|j                  r|s|t        j                  ||dœf–— Œ1d	}t        |j                  «      D ]#  \  }}|sŒ	d
}|t        j                  |||dœf–— Œ% |sŒqŒr d gt        ‰ «      z  }|D �]¡  }||   }|�|j                  sŒ |||«      }|€Œ$||   }|�|j                  sŒ8|j                  }|j                  }t        |«      t        |«      k7  r5|t        j                  ||   ||   ||t        |«      t        |«      dœf–— Œœ||k7  r½t        t        ||«      «      D ]¥  \  }\  }}||k(  rŒt        |«      t        |«      k7  r6|t        j                   |||   ||   ||t        |«      t        |«      dœf–— Œ\t        t        ||«      «      D ]2  \  } \  }!}"|!|"k7  sŒ|t        j"                  || ||   ||   |||!|"dœ	f–— Œ4 Œ§ t%        ||«      \  }#}$|#|k  rC|t        j&                  ||   ||   ||t)        t+        t        |$«      «      «      |$|#dœf–— |$||<   |j,                  }%|j,                  }&|j.                  }'|j.                  }(|j0                  })|j0                  }*||   }$|$�8|&r6|$D �+cg c]  }+|&|+   ‘Œ	 }&}+|$D �+cg c]  }+|(|+   ‘Œ	 }(}+|$D �+cg c]  }+|*|+   ‘Œ	 }*}+g },t        |)|*«      D ]O  \  }-}.	 t3        «       }/t)        t5        |-j6                  |.j6                  «      «      |/_        |,j9                  |/«       ŒQ t        t        |%|&«      «      D �]Ÿ  \  }\  }0}1|0�'|1�%t        |0«      dk(  st        |0«      t        |1«      k7  rŒ4t=        |||||$«      \  }#}2}3|#|k  r%|t        j>                  |||   ||   ||d|2|3|#dœ
f–— |,|   }4|4sŒy|'|   d   dk  |(|   d   dk  k(  sŒ‘tA        d ¬«      }5|4jC                  |5«       tE        |5«      }6|'|   }7|(|   }8|7d   |7d   z  }9|8d   |8d   z  }:|6d   |6d   z  };t        t        jF                  t        jH                  f«      D ]�  \  }<}=|<rtK        |9|:«      }>ŒtM        |9|:z  «      }>t        jO                  d|=|;|>|9|:«       |<s|>|z  |;dz   kD  s|<sŒMd|>|z  z   |;k  sŒY	 |<r|>|;z  }#n|;|>z  }#t        jO                  d|#«       ||=|||   ||   |||#dœf–— Œ’ �Œ¢ |jR                  }|jR                  }||   �|r||   D �+cg c]  }+||+   ‘Œ	 }}+d}?|tT        z  tV        z  |z  }@t        t        ||«      «      D �]È  \  }\  }0}1|0�'|1�%t        |0«      dk(  st        |0«      t        |1«      k7  rŒ4t+        t        |0«      «      D �]}  }+|0|+   }A|1|+   }B|Ad   rBd   sŒ|0|+dz
     }C|1|+dz
     }D|0|+dz   t        |0«      z     }E|1|+dz   t        |1«      z     }F|Cd   rDd   rŒ\Cd   rDd   rŒgtY        Ad   Ž }AtY        Bd   Ž }BtY        Cd   Ž }CtY        Dd   Ž }DtY        Ed   Ž }EtY        Fd   Ž }F|A|Cz
  }G|E|Az
  }H|B|Dz
  }I|F|Bz
  }J|GjZ                  |Hj\                  z  |Gj\                  |HjZ                  z  z
  }K|IjZ                  |Jj\                  z  |Ij\                  |JjZ                  z  z
  }L	 Kt_        G«      t_        H«      z  z  }KLt_        I«      t_        J«      z  z  }Lt_        K«      |?kD  st_        L«      |?kD  r�ŒvGjZ                  HjZ                  z  |Gj\                  |Hj\                  z  z   }MIjZ                  JjZ                  z  |Ij\                  |Jj\                  z  z   }N|Mdk  sNdk  r�Œèt_        G«      t_        |G«      t_        H«      z   z  }Ot_        I«      t_        |I«      t_        J«      z   z  }Pt_        |O|Pz
  «      }Qt_        |Q«      |?k  r�ŒLABz   dz  }RCDz   dz  }SEFz   dz  }T|R|Sz
  }U|T|Rz
  }V|UjZ                  |Vj\                  z  |Uj\                  |VjZ                  z  z
  }W	 Wt_        U«      t_        V«      z  z  }Wt_        W«      ||z  z  |?k  r�ŒÒWt_        U«      z  t_        V«      z  }Xt_        |U|Vz   «      }Yt_        |X|Yz  «      }Z|Z@k  r�ŒZYz  }[|[|?kD  r�Œ|?t_        W«      |z  z  }#t        jO                  dZ[|WQ«       t        jO                  d|#«       |t        j`                  |||   ||   |||+|#dœf–— �Œ€ �ŒË |s�Œ‚|t        jb                  ||   ||   ||dœf–— �Œ¤ �	Œ” y c c}
w c c}
}w c c}w c c}w c c}+w c c}+w c c}+w # t:        $ r |,j9                  d «       Y �Œ w xY w# tP        $ r d}#Y �Œ×w xY wc c}+w # tP        $ r Y �Œw xY w# tP        $ r Y �Œ'w xY w­w)Né
   g{®Gáz„?r   r   )r]   c                 ó^   •— | €y ‰|    } | €y ‰|    �‰|    |   €‰|    } ‰|    �	‰|    |   €Œ| S r%   rW   )Úir+   Ú	glyphsetsÚparentss     €€r.   Úgrand_parentztest_gen.<locals>.grand_parentž   s\   ø€ Øˆ9ØØ�A‰JˆØˆ9ØØ�a‰jÐ$¨°1©°iÑ)@Ð)HØ˜‘
ˆAð �a‰jÐ$¨°1©°iÑ)@Ñ)Hàˆr0   zTesting glyph %s)ÚtypeÚmasterÚ
master_idxFT)re   rf   rg   rL   )re   Úmaster_1Úmaster_2Úmaster_1_idxÚmaster_2_idxÚvalue_1Úvalue_2)re   Úpathrh   ri   rj   rk   rl   rm   )	re   rn   Únoderh   ri   rj   rk   rl   rm   )re   rh   ri   rj   rk   rl   rm   rY   )
re   rL   rh   ri   rj   rk   rl   rm   ÚreversedrY   r8   z;%s: actual size %g; threshold size %g, master sizes: %g, %ggñhãˆµøä>ztolerance %g)re   rL   rh   ri   rj   rk   rY   gš™™™™™¹?é   z=kink: deviation %g; deviation_ratio %g; sin_mid %g; r_diff %g)re   rL   rh   ri   rj   rk   rC   rY   )re   rh   ri   rj   rk   )2ÚreprÚkeysÚfind_parents_and_orderÚlogÚinfor   r2   rD   Úzipr?   ÚInterpolatableProblemÚMISSINGr#   Ú	OPEN_PATHr    Ú
PATH_COUNTÚ
NODE_COUNTÚNODE_INCOMPATIBILITYr   ÚCONTOUR_ORDERÚlistÚranger!   r   r   r   r	   rC   r4   Ú
ValueErrorr   ÚWRONG_START_POINTr   rE   rF   ÚUNDERWEIGHTÚ
OVERWEIGHTÚmaxr   ÚdebugÚZeroDivisionErrorr"   ÚDEFAULT_KINKINESS_LENGTHÚDEFAULT_KINKINESSÚcomplexÚrealÚimagÚabsÚKINKÚNOTHING)]rb   ÚglyphsÚnamesÚignore_missingrX   rY   rZ   r[   r\   r]   Úgr,   Úorderrd   Ú
glyph_nameÚ	allGlyphsrJ   rg   r&   Úhas_openr5   ÚopenÚ	matchingsÚm1idxÚglyph1Úm0idxÚglyph0Úm1Úm0ÚpathIxÚnodes1Únodes2ÚnodeIxÚn1Ún2Úthis_toleranceÚmatchingÚm0IsomorphismsÚm1IsomorphismsÚ	m0VectorsÚ	m1VectorsÚ
recording0Ú
recording1ra   ÚmidRecordingÚc0Úc1ÚrÚcontour0Úcontour1Úproposed_pointÚreverserL   ÚmidStatsÚ	midVectorÚm0VecÚm1VecÚsize0Úsize1ÚmidSizeÚ
overweightÚproblem_typeÚexpectedSizeÚtÚdeviation_thresholdÚpt0Úpt1Úpt0_prevÚpt1_prevÚpt0_nextÚpt1_nextÚd0_prevÚd0_nextÚd1_prevÚd1_nextÚsin0Úsin1Údot0Údot1Úr0Úr1Úr_diffÚmidÚmid_prevÚmid_nextÚmid_d0Úmid_d1Úsin_midÚcrossÚarc_lenÚ	deviationÚdeviation_ratiorc   s]   `                                                                                           @r.   Útest_genrÝ      st  ùè ø€ ð �B‚Ø�TÑˆ	Ø�	Ô˜QÒÐÑÐÐØ�B‚Ø�TÑˆ	Ø�	Š>Ðˆ>àÒ1 yÖ1 !”d˜1•gÒ1€Eà€~ð %.×G˜°x·}±}³ÒG°!’!ÐG�!ÐGˆÑGä+Ø�9¨Mô�N€GˆUõð ó ^ˆ
Ü�‰Ð# ZÔ0ØAJÖK°X”U˜: xÕ0ÐKˆ	ÐKÜ˜yÖ>�e¨EÑ,=’Ò>Ó?À1ÒDØÜ3<Ü�	˜9 eÓ,ó4
ò 	Ñ/ˆJÑ/˜ ¨$ð ×!Ò!Ù%à"ä$9×$AÑ$AØ&*Ø*4ñðò ð àˆHÜ% e×&8Ñ&8Ó9ò ‘��DÙØØ�àä 5× ?Ñ ?Ø"&Ø&0Ø#%ñ	ðó ð	ò Øð=	ð@ �FœS ›^Ñ+ˆ	àó w	ˆEØ˜uÑ%ˆFØˆ~ V×%5Ò%5ØÙ  ¨
Ó3ˆEØˆ}ØØ˜uÑ%ˆFØˆ~ V×%5Ò%5Øð ×!Ñ!ˆBØ×!Ñ!ˆBÜ�2‹wœ#˜b›'Ò!àä 5× @Ñ @Ø$)¨%¡LØ$)¨%¡LØ(-Ø(-Ü#& r£7Ü#& r£7ñðò ð à�RŠxÜ09¼#¸bÀ"»+Ó0Fò "%Ñ,�FÑ,˜V VØ Ò'Ø Ü˜6“{¤c¨&£kÒ1à&ä(=×(HÑ(HØ(.Ø,1°%©LØ,1°%©LØ05Ø05Ü+.¨v«;Ü+.¨v«;ñ	ðò ð !Ü,5´c¸&À&Ó6IÓ,Jò %Ñ(˜¡  RØ ›8à *ä,A×,VÑ,VØ,2Ø,2Ø05°e±Ø05°e±Ø49Ø49Ø/1Ø/1ñ
!"ð#ò ð %ñ!%ð%"%ôP (:¸&À&Ó'IÑ$ˆN˜HØ 	Ò)àä 5× CÑ CØ$)¨%¡LØ$)¨%¡LØ(-Ø(-Ü#'¬¬c°(«mÓ(<Ó#=Ø#+Ø%3ñ	ðò ð $,�	˜%Ñ ð $×0Ñ0ˆNØ#×0Ñ0ˆNØ×+Ñ+ˆIØ×+Ñ+ˆIØ×*Ñ*ˆJØ×*Ñ*ˆJð ! Ñ'ˆHàÐ$©à=EÖ!F¸ .°Ó"3Ð!F�Ð!FØ3;Ö<¨a˜Y q›\Ð<�	Ð<Ø5=Ö>°˜j¨›mÐ>�
Ð>àˆLÜ˜j¨*Ó5ò .‘��Bð.Ü$›�AÜ"¤>°"·(±(¸B¿H¹HÓ#EÓF�A”GØ ×'Ñ'¨Õ*ð	.ô -6Ü�N NÓ3ó-ó bÑ(�Ñ(�X˜xð Ð$ØÐ'Ü˜8“}¨Ò)Ü˜8“}¬¨H«Ò5ð ä:MØ˜F B¨	°8ó;Ñ7� °ð " IÒ-à"ä$9×$KÑ$KØ')Ø(-¨e©Ø(-¨e©Ø,1Ø,1Ø'(Ø'5Ø(/Ø)7ñðò ð. ' rÑ*�â 	¨"¡¨aÑ 0°1Ñ 4¸)ÀB¹-ÈÑ:JÈQÑ:NÓOÜ,°dÔ;�HØ—N‘N 8Ô,ä 9¸(Ó C�Ià% b™M�EØ% b™M�EØ! !™H u¨Q¡xÑ/�EØ! !™H u¨Q¡xÑ/�EØ'¨™l¨Y°q©\Ñ9�Gä4=ä1×=Ñ=Ü1×<Ñ<ðó5ò +Ñ0˜
 Lñ &Ü+.¨u°eÓ+<˜LØ$ä+/°¸±Ó+>˜LäŸ	™	ØYØ(Ø#Ø(Ø!Ø!ôñ !+¨|¸iÑ/GÈ'ÐTXÉ.Ò/XÚ(¨T°LÀ9Ñ4LÑ-LÈwÓ-Vð3Ù#-Ø5AÀGÑ5K¡Nà5<¸|Ñ5K Nô  ŸI™I n°nÔEà *à,8Ø/1Ø05°e±Ø05°e±Ø49Ø49Ø1?ñ!"ð#ó òA+ðobðN —‘ˆBØ—‘ˆBð ˜ÑÐ+±Ø%.¨uÑ%5Ö6 �b˜“eÐ6�Ð6àˆAàÔ/Ñ/Ô2CÑCÀiÑOð  ô -6´c¸"¸b³kÓ,Bó |Ñ(�Ñ(�X˜xàÐ$ØÐ'Ü˜8“}¨Ò)Ü˜8“}¬¨H«Ò5ð ô
 œs 8›}Ó-ó n�AØ" 1™+�CØ" 1™+�CØ˜qš6¨¨Qªà Ø'¨¨A©™�HØ'¨¨A©™�HØ'¨¨Q©´#°h³-Ñ(?Ñ@�HØ'¨¨Q©´#°h³-Ñ(?Ñ@�Hà ’{ x°¢{à Ø ’{ x°¢{à ä! 3 q¡6Ð*�CÜ! 3 q¡6Ð*�CÜ&¨°©Ð4�HÜ&¨°©Ð4�HÜ&¨°©Ð4�HÜ&¨°©Ð4�Hð " H™n�GØ&¨™n�GØ! H™n�GØ&¨™n�Gà"Ÿ<™<¨'¯,©,Ñ6¸¿¹ÈÏÉÑ9TÑT�DØ"Ÿ<™<¨'¯,©,Ñ6¸¿¹ÈÏÉÑ9TÑT�Dð!Ø¤ G£¬s°7«|Ñ ;Ñ;˜Ø¤ G£¬s°7«|Ñ ;Ñ;˜ô ˜4“y 1’}¬¨D«	°Aªá ð #Ÿ<™<¨'¯,©,Ñ6¸¿¹ÈÏÉÑ9TÑT�DØ"Ÿ<™<¨'¯,©,Ñ6¸¿¹ÈÏÉÑ9TÑT�DØ˜a’x 4¨!¢8á ô ˜W›¬¨W«¼¸G»Ñ)DÑE�BÜ˜W›¬¨W«¼¸G»Ñ)DÑE�BÜ   b¡›\�FÜ˜6“{ Q’á à ™9¨™/�CØ (¨8Ñ 3°qÑ8�HØ (¨8Ñ 3°qÑ8�Hà  8™^�FØ%¨™^�Fà$Ÿk™k¨F¯K©KÑ7¸&¿+¹+ÈÏÉÑ:SÑS�Gð!Ø¤3 v£;´°V³Ñ#<Ñ<˜ô
 ˜7“| y°9Ñ'<Ñ=ÀÒBá ð $¤c¨&£kÑ1´C¸³KÑ?�EÜ! &¨6¡/Ó2�GÜ # E¨G¡OÓ 4�IØ Ð#6Ò6Ù Ø&/°'Ñ&9�OØ&¨Ò*Ù à%&¬#¨g«,¸Ñ*BÑ%C�Nä—I‘IØWØ!Ø'ØØôô —I‘I˜n¨nÔ=à"ä$9×$>Ñ$>Ø')Ø(-¨e©Ø(-¨e©Ø,1Ø,1Ø%&Ø)7ñ	ðô òEnð|óD àä 5× =Ñ =Ø$)¨%¡LØ$)¨%¡LØ(-Ø(-ñð	ô 	ò]w	ñO^ùò+ 2ùó
 Hùò$ LùÚ>ùò\ "GùÚ<ùÚ>øô "ò .à ×'Ñ'¨×-ð.ûôp $5ò 3Ø12£ð3üò0 7øôt -ò !Ú ð!ûô@ -ò !Ú ð!üs)  „4j ¸h$Á

j Áh)Á2:j Â,h/Â?j Ã
h4
Ãh4
ÃBj Å(Ej Ê1Cj Îh9Îj Îh>Î#j Î)iÎ5j ÏA	iÐBj Ò%j Ò=Cj Öj Öi)Ö Aj ×5i;ØFj Þ4j ßE	j äjä1C
j ç=Aj éi&	é"j é%i&	é&j é)i8é4j é7i8é8j ê 	jê	j êjêj ê	jêj êjêj c                  ór   — t        t        «      }t        | i |¤ŽD ]  \  }}||   j                  |«       Œ |S r%   )r   r   rÝ   r4   )ÚargsÚkwargsÚproblemsr+   Úproblems        r.   Útestrã   I  sB   € äœ4Ó €HÜ&¨Ð7°Ñ7ò ,Ñˆ	�7Ø�Ñ×"Ñ" 7Õ+ð,à€Or0   c                 óx   — | |v ry ||    || <   t        ||    dg «      D ]  }t        |j                  |||«       Œ y )NÚ
components)r3   ÚrecursivelyAddGlyphÚ	glyphName)r+   r,   Ú
ttGlyphSetÚglyfÚ	components        r.   ræ   ræ   Q  sN   € Ø�HÑØØ$ YÑ/€HˆYÑä˜T )™_¨l¸BÓ?ò Mˆ	Ü˜I×/Ñ/°¸:ÀtÕLñMr0   c                 óv   — t         j                  j                  | «      }|rt        j                  |d¬«       | S )NT)Úexist_ok)Úosrn   ÚdirnameÚmakedirs)rn   rî   s     r.   Úensure_parent_dirrð   Z  s*   € Ü�g‰g�o‰o˜dÓ#€GÙÜ
�‰�G dÕ+Ø€Kr0   c                 óÚ(  ‡‡b‡c— ddl }ddl}|j                  dt        j                  ¬«      }|j                  ddd¬«       |j                  d	d
d¬«       |j                  ddt        dt        z  ¬«       |j                  ddt        dt        z  ¬«       |j                  dd
d¬«       |j                  ddd¬«       |j                  ddd¬«       |j                  ddd¬«       |j                  dd
d¬«       |j                  ddd¬«       |j                  dd
d¬«       |j                  dd t        d!d"¬#«       |j                  d$d%t        d&d'¬(«       |j                  d)d*d
d+¬«       |j                  d,d
d-¬«       |j                  | «      } dd.lm}  || j                  rd/nd0¬1«       | j                  r	 |d2¬1«       | j                  r| j                  j!                  «       nd}dd3lm} g }g }g }	t'        «       }
t(        }t+        | j,                  «      }t/        | j,                  «      d4k(  �rÍd}| j,                  d   j1                  d5«      �r[dd6lm} |j7                  | j,                  d   «      }|j8                  D �cg c]  }|j:                  ‘Œ c}| _        |j8                  D �cg c]  }|j<                  ‘Œ }	}|j>                  D �ch c]  }tA        |d7«      rŒ|jB                  ’Œ }
}|j>                  D �ci c]>  }|jB                  |
vr.|jB                  |jD                  |jF                  |jH                  f“Œ@ }}|j>                  D �ci c]  }|jB                  |jJ                  “Œ c}Šc|jM                  «       D �‡�ci c]  \  Š}‰t+        ˆcˆfd8„|D «       «      “Œ }}}�nQ| j,                  d   j1                  d9«      �rgdd:l'm(}m)}  || j,                  d   «      }|jT                  } ||«      }|j8                  D �cg c]  }|jV                  ‘Œ }}|D �cg c]1  }|jX                  jZ                  ›d;|jX                  j\                  ›�‘Œ3 }}g | _        |j8                  D �cg c]  }|j<                  ‘Œ }	}|j>                  D �ci c]0  }|jB                  |jD                  |jF                  |jH                  f“Œ2 }}|j>                  D �ci c]  }|jB                  |jJ                  “Œ c}Šc|jM                  «       D �‡�ci c]  \  Š}‰t+        ˆcˆfd<„|D «       «      “Œ }}}�nË| j,                  d   j1                  d=«      s| j,                  d   j1                  d>«      �rŽdd?l/m0}  || j,                  d   «      }|d@   jb                  }|dA   }i Šb|j>                  D ]3  }|jd                  |jf                  |jh                  dBœ‰b|jj                  <   Œ5 dC}dD|v r“|dD   }tm        |jn                  dEd«      r‰bD �ci c]	  }|dFdd4dBœ“Œ c}ŠbdG}n_|jp                  jM                  «       D ]B  \  } }!‰b|    js                  «       }"|!jM                  «       D ]  \  }#}$tu        |#|"«      ‰b|    |$<   Œ ŒD i }%tw        tx        «      }&dH|v rÓ|dH   }'|dI   }(|€#t{        |'j|                  j                  «       «      }|D ]�  })|'j|                  |)   D ]‰  }*i }+g },t{        |*j>                  jM                  «       «      D ]#  \  }}-|-d4   |+|<   |,j�                  ||-d4   f«       Œ% t+        |,«      }.|.|%vr|jƒ                  |+dGdC¬J«      |%|.<   t…        |)|&|.   |%|.   |(«       Œ‹ ŒŸ �nÇdK|v �rÂ|dA   j>                  }/|dK   j†                  jˆ                  d   }0|0jŠ                  }1|€t{        |1j                  «       «      }|D �]j  })|1|)   }2|2jŒ                  }3tm        |3dLd«      h}4tm        |3dLd«      }5d}6t�        |2j�                  «      D ]4  }7|7dMk(  r|4j“                  |5«       n|7dLk(  rt•        |6t–        «      sJ ‚|6}5|7}6Œ6 tA        |3dN«      sŒ‹|3j˜                  jš                  }8|4D ]Å  }5|8jœ                  |5   }9|9jž                  D ]¥  }:|8j                   j¢                  |:   };i }+g },t�        |;j¤                  «      D ]8  \  }<}|/|<   jj                  }|j¦                  }-|-|+|<   |,j�                  ||-f«       Œ: t+        |,«      }.|.|%vr|jƒ                  |+dGdC¬J«      |%|.<   |&|.   }=|%|.   |)   |=|)<   Œ§ ŒÇ �Œm dOg}|jƒ                  «       g}i g}	t{        ‰bj                  «       «      D �ci c]  }|dB“Œ }}t{        |&j                  «       dP„ ¬Q«      D ]h  }.dRdSj©                  ˆbfdT„|.D «       «      z   dRz   }>|r|>dUz  }>|j�                  |>«       |j�                  |&|.   «       |	j�                  ty        |.«      «       Œj dG| _U        g | _        |	s|D �?cg c]  }?i ‘Œ }	}?| j,                  D ]²  }@|@j1                  dV«      rGddWlVmW}A  |A@«      }t±        «       }B|j³                  |B«       |Bjb                  }|j�                  |«       n.dd?l/m0}  |@«      }|d@   jb                  }|j�                  |«       |j�                   |@«      jµ                  dXd4«      d   «       Œ´ t/        |«      dYk  rt¶        j¹                  dZ«       yg }&|D ]R  }tA        |d[«      r|jƒ                  «       }=n|}=|&j�                  |=j                  «       D �ci c]  }||=|   “Œ
 c}«       ŒT | jB                  rmt'        | jB                  «      }Ct»        ||&«      D �>�=cg c]  \  }>}=|>Cv r|=‘Œ }&}>}=t»        ||	«      D �>�#cg c]  \  }>}#|>Cv r|#‘Œ }	}>}#|D �>cg c]	  }>|>Cv sŒ|>‘Œ }}>|s9t{        t'        |&D �=�Dcg c]  }=|=j                  «       D ]  }D|D‘Œ Œ c}D}=«      «      }t'        |«      }E|&D ]/  }=t'        |=j                  «       «      }FE|Fz
  }G|GsŒ$GD ]  }Dd|=|D<   Œ	 Œ1 |	D �,��Hcg c]9  },i t½        |,«      ¥|,jM                  «       D ��Hci c]  \  }}H||
v sŒ|H“Œ c}H}¥‘Œ; }	}},}H| j¾                  xs t        }I| jÀ                  �| jÀ                  nt        }J	 t¶        jY                  d\t/        |&«      «       t¶        jY                  d]tÃ        |	«      «       tÅ        |&|||	|| jª                  IJ| jÆ                  |
¬^«
      }Ktw        tÈ        «      }L| jÊ                  €|jÌ                  ntÏ        tÑ        | jÊ                  «      d_«      }| jÒ                  �s-| jÔ                  r@ddlj}MKD ]  \  })}NL|)   j�                  |N«       Œ t×        MjÙ                  L«      |¬`«       �nÿd}OKD �]Ø  \  })}PL|)   j�                  |P«       |)Ok7  rt×        da|)› db�|¬`«       |)}Od}QdcPv rPdc   fn	Pdd   |Pde   f}R|RQk7  r5dfPv rPdf   fn	Pdg   |Pdh   f}St×        didjj©                  |S«      z  |¬`«       R}QPdk   tÚ        jÜ                  k(  rt×        dlPdf   z  |¬`«       Œ­Pdk   tÚ        jÞ                  k(  rt×        dmPdf   z  |¬`«       Œ×Pdk   tÚ        jà                  k(  r"t×        dnPdo   |Pdg   |Pdp   |Pdh   fz  |¬`«       �ŒPdk   tÚ        jâ                  k(  r&t×        dqPdr   |Pdo   |Pdg   |Pdp   |Pdh   fz  |¬`«       �ŒKPdk   tÚ        jä                  k(  r*t×        dsPdt   |Pdr   |Pdo   |Pdg   |Pdp   |Pdh   fz  |¬`«       �Œ‹Pdk   tÚ        jæ                  k(  r't×        duPdo   ›dv|Pdg   ›dj|Pdp   ›dv|Pdh   ›�|¬`«       �ŒÈPdk   tÚ        jè                  k(  r*t×        dwPdx   |Pdo   |Pdg   |Pdp   |Pdh   |Pdy   fz  |¬`«       �ŒPdk   tÚ        jê                  k(  rt×        dzPdx   |Pdg   |Pdh   fz  |¬`«       �Œ<Pdk   tÚ        jì                  k(  rt×        d{Pdx   |Pdg   |Pdh   fz  |¬`«       �ŒpPdk   tÚ        jî                  k(  r"t×        d|Pdx   |Pd}   |Pdg   |Pdh   fz  |¬`«       �Œ¨Pdk   tÚ        jð                  k(  s�ŒÀt×        d~Pdg   ›d|Pdh   ›�|¬`«       �ŒÛ nKD ]  \  })}NL|)   j�                  |N«       Œ tó        L«      }Ld€D ]à  }Ptm        | |P«      }T|T€Œt¶        jY                  d�Pjõ                  «       T«       d4d‚l{m|}Um}}V |Pdƒk(  rUnV}W |WtÑ        T«      |&|¬„«      5 }X|Xjý                  |IJ¬…«       LrXjÿ                  L«       X�j                  L«       |Ls| jÒ                  sX�j                  «        Lr"X�j                  «        |X�j                  «        ddd«       Œâ | �j                  �rÍt¶        jY                  d†| �j                  «       d4d‡l{m…}Y g }Zi }[ |Y|Z|&|¬„«      5 }\|\jý                  |dCIJ¬ˆ«       LjM                  «       D ]*  \  }]}^|][t/        Z«      <   \�j                  |]|^idCdC¬‰«       Œ, Ls| jÒ                  s\�j                  «        ddd«       ddl†}_tÏ        tÑ        | �j                  «      dŠ«      5 }|�j                  d‹«       |�j                  dŒ«       |�j                  d�«       t�        Z«      D ]š  \  }`}\|`[v r)|�j                  dŽ[`   › d���j                  d�«      «       |�j                  d‘�j                  d�«      «       |�j                  _�j                  \«      «       |�j                  d’«       |�j                  d“«       Œœ |�j                  d”«       ddd«       LrLS yc c}w c c}w c c}w c c}w c c}w c c}}w c c}w c c}w c c}w c c}w c c}w c c}}w c c}w c c}w c c}?w c c}w c c}=}>w c c}#}>w c c}>w c c}D}=w c c}H}w c c}H}},w # 1 sw Y   �ŒCxY w# 1 sw Y   �Œ¯xY w# 1 sw Y   ŒžxY w# �t        $ r2}aax�j                  |z  c_‹        t¶        �j                  |a«       ‚ d}a~aww xY w)•z/Test for interpolatability issues between fontsr   Nzfonttools varLib.interpolatable)Údescriptionz--glyphsÚstorez&Space-separate name of glyphs to check)ÚactionÚhelpz
--show-allÚ
store_truez3Show all glyph pairs, even if no problems are foundz--tolerancez,Error tolerance. Between 0 and 1. Default %s)rô   re   rõ   z--kinkinessz)How aggressively report kinks. Default %sz--jsonzOutput report in JSON formatz--pdfzOutput report in PDF formatz--psz"Output report in PostScript formatz--htmlzOutput report in HTML formatz--quietz%Only exit with code 1 or 0, no outputz--outputz3Output file for the problem report; Default: stdoutz--ignore-missingz<Will not report glyphs missing from sparse masters as errorsÚinputsÚFILEú+zSInput a single variable font / DesignSpace / Glyphs file, or multiple TTF/UFO files)Úmetavarre   Únargsrõ   z--nameÚNAMEr4   zGName of the master to use in the report. If not provided, all are used.)rú   re   rô   rõ   z-vz	--verbosezRun verbosely.z--debugzRun with debug output.)ÚconfigLoggerÚINFOÚWARNING)ÚlevelÚDEBUG)Úbasenamer   z.designspace)ÚDesignSpaceDocumentÚminimumc              3   óN   •K  — | ]  }t        |t        ‰‰   «      «      –— Œ y ­wr%   ©r   Údict©Ú.0ÚvÚaxis_mappingsÚks     €€r.   ú	<genexpr>zmain.<locals>.<genexpr>Ú  ó#   øè ø€ ÒSÈ1Ô+¨A¬t°MÀ!Ñ4DÓ/E×FÑSùó   ƒ"%)z.glyphsz.glyphspackage)ÚGSFontÚto_designspaceú-c              3   óN   •K  — | ]  }t        |t        ‰‰   «      «      –— Œ y ­wr%   r  r  s     €€r.   r  zmain.<locals>.<genexpr>í  r  r  z.ttfz.otf)ÚTTFontÚheadÚfvar)r<   r   r   FÚavarÚVarStorer<   TÚgvarré   )ÚlocationÚ
normalizedÚrecalcBoundsÚCFF2ÚvsindexÚblendÚvstorez''c                 ó   — t        | «      | fS r%   )r2   )r
  s    r.   ú<lambda>zmain.<locals>.<lambda>e  s   € ÄCÈÃFÈAÀ;€ r0   )Úkeyú'ú c           
   3   ó`   •K  — | ]%  \  }}|›d t        t        |‰|   «      d«      ›�–— Œ' y­w)ú=é   N)r   r   )r	  r  r
  ÚaxisMappings      €r.   r  zmain.<locals>.<genexpr>h  s<   øè ø€ ò 	ñ !˜A˜qò Ü-Ü 2°1°kÀ!±nÓ EÀrôôñ	ùs   ƒ+.z (normalized)z.ufo)Ú	UFOReaderú.rq   z9Font file does not seem to be variable. Nothing to check.ÚgetGlyphSetzRunning on %d glyphsetszLocations: %s)	r�   r‘   rX   r[   r’   rY   rZ   r\   r]   Úw)ÚfilezGlyph z was not compatible:rg   rj   rk   rf   rh   ri   z  Masters: %s:z, re   z"    Glyph was missing in master %sz'    Glyph has an open path in master %sz*    Path count differs: %i in %s, %i in %srl   rm   z5    Node count differs in path %i: %i in %s, %i in %srn   z7    Node %o incompatible in path %i: %s in %s, %s in %sro   z    Contour order differs: z in zD    Contour %d start point differs: %s in %s, %s in %s; reversed: %srL   rp   z3    Contour %d interpolation is underweight: %s, %sz2    Contour %d interpolation is overweight: %s, %sz'    Contour %d has a kink at %s: %s, %srC   z    Showing z and )ÚpsÚpdfzWriting %s to %s)ÚInterpolatablePSÚInterpolatablePDFr/  )rb   r‘   )rY   rZ   zWriting HTML to %s)ÚInterpolatableSVG)Úshow_tolerancerY   rZ   )r4  Úshow_page_numberÚwbs   <!DOCTYPE html>
sN   <html><body align="center" style="font-family: sans-serif; text-color: #222">
s6   <title>fonttools varLib.interpolatable report</title>
z
<h1>Glyph z</h1>
zutf-8z$<img src='data:image/svg+xml;base64,s   ' />
s   <hr>
s   </body></html>
)�ÚargparseÚsysÚArgumentParserÚmainÚ__doc__Úadd_argumentÚfloatÚDEFAULT_TOLERANCEr‰   ÚstrÚ
parse_argsÚ	fontToolsrý   Úverboser†   r�   ÚsplitÚos.pathr  ÚsetÚDEFAULT_UPEMÚtupler÷   r2   ÚendswithÚfontTools.designspaceLibr  ÚfromfileÚsourcesrn   r  ÚaxesÚhasattrr&   r  ÚdefaultÚmaximumÚmapÚitemsÚ	glyphsLibr  r  ÚupmÚfontrv   Ú
familyNameÚ	styleNameÚfontTools.ttLibr  Ú
unitsPerEmÚminValueÚdefaultValueÚmaxValueÚaxisTagr3   ÚtableÚsegmentsÚcopyr   r   r  ÚsortedÚ
variationsrs   r4   r,  ræ   ÚcffÚtopDictIndexÚCharStringsÚprivaterD   ÚprogramÚaddÚ
isinstanceÚintr   Ú
otVarStoreÚVarDataÚVarRegionIndexÚVarRegionListÚRegionÚVarRegionAxisÚ	PeakCoordÚjoinr’   ÚfontTools.ufoLibr*  r   ÚreadInfoÚrsplitru   Úwarningrw   r   rY   rZ   r   rÝ   r\   r   ÚoutputÚstdoutr˜   rð   ÚquietÚjsonÚprintÚdumpsrx   ry   rz   r{   r|   r}   r~   r‚   rƒ   r„   rŽ   r�   Úsort_problemsÚupperÚinterpolatablePlotr1  r2  Úadd_title_pageÚadd_summaryÚadd_problemsÚdraw_cupcakeÚ	add_indexÚadd_table_of_contentsÚhtmlr3  Úbase64ÚwriteÚencodeÚ	b64encodeÚ	Exceptionrß   Úerror)drß   r7  r8  Úparserrý   r�   r  Úfontsr‘   rX   r]   r[   Úoriginal_args_inputsÚdesignspacer  rf   ÚaÚaxis_triplesr  Úvvr  r  ÚgsfontÚsourceÚfr  rT  r  Úaxisr  r  Útagr\  r^  ÚfvarMappingr  rC   ÚttGlyphSetsrb   r  ré   r+   ÚvarÚlocDictÚlocÚvalÚlocTupleÚfvarAxesÚcff2ÚcharstringsÚcsre  Ú	vsindicesr  Úlast_oprM   ÚvarStoreÚvarDataÚregionIndexÚregionÚ	axisIndexr,   r&   Ú_Úfilenamer*  rv   Úaccepted_namesÚgnÚ	glyphsSetÚglyphSetGlyphNamesÚdiffr
  rY   rZ   Úproblems_genrá   ry  râ   Úlast_glyphnameÚpÚlast_master_idxsÚmaster_idxsÚmaster_namesrN   r1  r2  ÚPlotterClassÚdocr3  ÚsvgsÚglyph_startsÚsvgrJ   Úglyph_problemsr†  ra   rO   r)  r  sd                     `                                                                               @@r.   r:  r:  a  sv  ú€ ãÛà×$Ñ$Ø)Ü—L‘Lð %ó €Fð ×ÑØØØ5ð ô ð
 ×ÑØØØBð ô ð
 ×ÑØØÜØ;Ô>OÑOð	 ô ð ×ÑØØÜØ8Ô;LÑLð	 ô ð ×ÑØØØ+ð ô ð
 ×ÑØØØ*ð ô ð
 ×ÑØØØ1ð ô ð
 ×ÑØØØ+ð ô ð
 ×ÑØØØ4ð ô ð
 ×ÑØØØBð ô ð
 ×ÑØØØKð ô ð
 ×ÑØØÜØØbð ô ð ×ÑØØÜØØVð ô ð ×Ñ˜˜k°,ÐEUÐÔVØ
×Ñ˜	¨,Ð=UÐÔVà×Ñ˜TÓ"€Då&á $§,¢,™°IÕ?Ø‡z‚zÙ˜7Õ#à$(§K¢KˆT�[‰[×ÑÔ °T€Få à€EØ€EØ€IÜ“E€MÜ€Dä  §¡Ó-Ðä
ˆ4�;‰;Ó˜1ÓØˆØ�;‰;�q‰>×"Ñ" >Õ2ÝDà-×6Ñ6°t·{±{À1±~ÓFˆKØ5@×5HÑ5HÖI¨6˜6Ÿ;›;ÒIˆDŒKØ7B×7JÑ7JÖK¨V˜Ÿ›ÐKˆIÐKà +× 0Ñ 0öØ¼ÀÀ9Õ8M�—“ðˆMð ð
 %×)Ñ)öàØ—6‘6 Ñ.ð —‘˜Ÿ™ A§I¡I¨q¯y©yÐ9Ñ9ðˆLð ð
 5@×4DÑ4DÖE¨q˜QŸV™V Q§U¡U™]ÒEˆMð *×/Ñ/Ó1÷ð á�A�rð ”5ÔSÐPRÔSÓSÑSðˆLó ð
 �[‰[˜‰^×$Ñ$Ð%BÕCß8á˜DŸK™K¨™NÓ+ˆFØ—:‘:ˆDÙ(¨Ó0ˆKØ/:×/BÑ/BÖC V�V—[“[ÐCˆEÐCØNSÖTÈ §¡× 1Ó 1°1·6±6×3CÒ3CÒDÐTˆEÐTØˆDŒKØ7B×7JÑ7JÖK¨V˜Ÿ›ÐKˆIÐKàCN×CSÑCSöØ>?�—‘˜Ÿ™ A§I¡I¨q¯y©yÐ9Ñ9ðˆLð ð 5@×4DÑ4DÖE¨q˜QŸV™V Q§U¡U™]ÒEˆMð *×/Ñ/Ó1÷ð á�A�rð ”5ÔSÐPRÔSÓSÑSðˆLó ð
 �[‰[˜‰^×$Ñ$ VÔ,°·±¸A±×0GÑ0GÈÕ0OÝ.ñ ˜$Ÿ+™+ a™.Ó)ˆDØ˜‘<×*Ñ*ˆDà˜‘<ˆDØˆKØŸ	™	ò �àŸ™Ø×(Ñ(Ø—}‘}ñ-�˜DŸL™LÒ)ðð ˆJØ˜‰~Ø˜F‘|�Ü˜4Ÿ:™: z°4Ô8ØHSÖ"TÀ 3¨R°A¸!Ñ(<Ñ#<Ò"T�KØ!%‘Jà-1¯]©]×-@Ñ-@Ó-Bò Ñ)˜ Ø&1°'Ñ&:×&?Ñ&?Ó&A˜Ø/7¯~©~Ó/?ò ™O˜H eÜ:LØ (¨+ó;˜K¨Ñ0°Ò7ñðð ˆKÜ#¤DÓ)ˆIà˜‰~Ø˜F‘|�Ø˜F‘|�à�>Ü# D§O¡O×$8Ñ$8Ó$:Ó;�FØ!'ò �IØ#Ÿ™¨yÑ9ò ˜Ø"$˜Ø ˜Ü(.¨s¯x©x¯~©~Ó/?Ó(@ò 6™H˜C Ø+.¨q©6˜G C™LØŸJ™J¨¨S°©V }Õ5ð6ô $)¨£:˜Ø#¨;Ñ6Ø48×4DÑ4DØ)0¸TÐPUð 5Eó 5˜K¨Ñ1ô ,Ø% y°Ñ':¸KÈÑ<QÐSWõñòð$ ˜4’Ø ™<×,Ñ,�Ø˜F‘|×'Ñ'×4Ñ4°QÑ7�Ø"×.Ñ.�à�>Ü# K×$4Ñ$4Ó$6Ó7�FØ!'ó -S�IØ$ YÑ/�BØ Ÿj™j�Gô ")¨°)¸QÓ!?Ð @�IÜ% g¨y¸!Ó<�GØ�Gô (¨¯
©
Ó3ò %˜Ø š=Ø%ŸM™M¨'Õ2Ø 9š_Ü#-¨g´sÔ#;Ð;Ð#;Ø&-˜GØ"$™ð%ô # 7¨HÔ5Ø à&Ÿ~™~×8Ñ8�HØ#,ò S˜Ø"*×"2Ñ"2°7Ñ";˜Ø+2×+AÑ+Aò S˜KØ%-×%;Ñ%;×%BÑ%BÀ;Ñ%O˜Fà&(˜GØ"$˜CÜ3<¸V×=QÑ=QÓ3Rò 7¡ 	¨4Ø&.¨yÑ&9×&AÑ&A Ø&*§n¡n Ø/2 ¨¡Ø #§
¡
¨C°¨:Õ 6ð	7ô (-¨S£z˜HØ'¨{Ñ:Ø8<×8HÑ8HØ-4Ø/3Ø16ð 9Ió 9" ¨HÑ 5ð (1°Ñ':˜HØ2=¸hÑ2GÈ	Ñ2R˜H YÒ/ñ)SòSð/-Sð^ �FˆEØ×%Ñ%Ó'Ð(ˆEØ˜ˆIÜ4:¸;×;KÑ;KÓ;MÓ4NÖO¨q˜A˜{™NÐOˆLÐOÜ" 9§>¡>Ó#3Ñ9NÔOò 1�àØ—h‘hó 	ð %-ô	ó 	ñ
ð ñð ñ Ø˜OÑ+�DØ—‘˜TÔ"Ø—‘˜Y xÑ0Ô1Ø× Ñ ¤ h£Õ0ð'1ð* #'ˆDÔØˆDŒKáØ!&Ö'˜A’RÐ'ˆ	Ð'à—K‘Kò ;ˆØ×Ñ˜VÔ$Ý2á˜XÓ&ˆDÜ"Ó$ˆDØ�M‰M˜$ÔØ—?‘?ˆDØ�L‰L˜Õå.á˜(Ó#ˆDØ˜‘<×*Ñ*ˆDØ�L‰L˜Ôà�‰‘X˜hÓ'×.Ñ.¨s°AÓ6°qÑ9Õ:ð!;ô$ ˆ5ƒz�A‚~Ü�‰ÐOÔPØà€IØò DˆÜ�4˜Ô'Ø×'Ñ'Ó)‰HàˆHØ×Ñ°(·-±-³/ÖB¨Q˜!˜X a™[™.ÒBÕCðDð ‡y‚yÜ˜TŸY™Y›ˆô #& e¨YÓ"7÷
á��hØ�~Ñ%ò ð
ˆ	ñ 
ô #& e¨YÓ"7÷
á��hØ�~Ñ%ò ð
ˆ	ñ 
ð
 #(ÖB˜$¨4°>Ò+A’ÐBˆÐBáÜœ°	×T HÀHÇMÁMÃOÒT¸bšRÐT˜RÓTÓUÓVˆä�F“€IØò $ˆÜ  §¡£Ó1ÐØÐ-Ñ-ˆÚØò $�Ø#�˜’ñ$ð	$ð ÷ð ð
 ð		
Ü  \Ó2ð	
à #§	¡	£×B™˜˜1¨q°MÒ/Aˆq�!‰tÓBò	
ð€Iò ð —‘Ò3Ô"3€IØ"&§.¡.Ð"<�—’ÔBS€IðmÜ�‰Ð*¬C°	«NÔ;Ü�‰�¤'¨)Ó"4Ô5ÜØØØØØØ×.Ñ.ØØØ—]‘]Ø'ô
ˆô œtÓ$ˆð �{‰{Ð"ð �JŠJäÔ'¨¯©Ó4°cÓ:ð 	
ð �z‹zØ�yŠyÛà*6ò 8Ñ&�I˜wØ˜YÑ'×.Ñ.¨wÕ7ð8ô �d—j‘j Ó*°×3à!%�Ø$0ó B‘L�I˜qØ˜YÑ'×.Ñ.¨qÔ1à  NÒ2Ü  y kÐ1EÐFÈQÕOØ)2˜Ø+/Ð(ð (¨1Ñ,ð ˜<™Ñ*à Ñ/°°>Ñ1BÐCð  ð
 #Ð&6Ò6ð  (¨1™}ð ˜x™[™Nà"# J¡-°°:±Ð!?ð %ô
  °$·)±)¸LÓ2IÑIÐPQÕRØ+6Ð(à˜‘yÔ$9×$AÑ$AÒAÜØ@À1ÀXÁ;ÑNÐUVöð ˜6™Ô&;×&EÑ&EÒEÜØEÈÈ(ÉÑSØ!"öð ˜6™Ô&;×&FÑ&FÒFÜØHà ! )¡Ø ! *¡Ø ! )¡Ø ! *¡ð	ñð "#÷	ð ˜6™Ô&;×&FÑ&FÒFÜØSà ! &¡	Ø ! )¡Ø ! *¡Ø ! )¡Ø ! *¡ðñð "#÷
ð ˜6™Ô&;×&PÑ&PÒPÜØUà ! &¡	Ø ! &¡	Ø ! )¡Ø ! *¡Ø ! )¡Ø ! *¡ðñð "#÷ð ˜6™Ô&;×&IÑ&IÒIÝð !" )£Ø ! *£Ø ! )£Ø ! *¢ðð "#÷	ð ˜6™Ô&;×&MÑ&MÒMÜØbà ! )¡Ø ! )¡Ø ! *¡Ø ! )¡Ø ! *¡Ø ! *¡ðñð "#÷ð ˜6™Ô&;×&GÑ&GÒGÜØQà ! )¡Ø ! *¡Ø ! *¡ðñð "#÷ð ˜6™Ô&;×&FÑ&FÒFÜØPà ! )¡Ø ! *¡Ø ! *¡ðñð "#÷ð ˜6™Ô&;×&@Ñ&@Ò@ÜØEà ! )¡Ø ! '¡
Ø ! *¡Ø ! *¡ð	ñð "#÷	ð ˜6™Ô&;×&CÑ&CÔCÝð !" *£Ø ! *¢ðð
 "#÷ñwBðH '3ò 4Ñ"�	˜7Ø˜Ñ#×*Ñ*¨7Õ3ð4ô ! Ó*ˆàò 	0ˆAÜ˜$ Ó"ˆCØˆ{ØÜ�H‰HÐ'¨¯©«°CÔ8ßOà/0°DªyÑ+Ð>OˆLáÜ! #Ó&°)À5ôð 0àØ×"Ñ"Ø(°IÈð #ô ñ Ø—O‘O HÔ-Ø× Ò  Ô*Ù¨¯
ª
Ø×$Ò$Ô&ÙØ—M’M”OØ×-Ò-Ô/÷0ð 0ð	0ð0 �9Œ9Ü�H‰HÐ)¨4¯9ª9Ô5Ý=àˆDØˆLÙ" 4°9ÀEÔJð 'ÈcØ×"Ñ"Ø(Ø#(Ø'Ø'ð	 #ô ð .6¯^©^Ó-=ò Ñ)�E˜>Ø.3�L¤ T£Ñ+Ø×$Ò$Ø Ð/Ø',Ø).ð %õ ðñ  ¨¯
ª
Ø×$Ò$Ô&÷'ó" äÔ'¨¯	ª	Ó2°DÓ9ð -¸QØ—’Ð,Ô-Ø—’Øfôð —’ÐRÔSÜ'¨›oò '‘F�A�sØ˜LÑ(ØŸš *¨\¸!©_Ð,=¸WÐ E× LÒ LÈWÓ UÔVØ—G’GÐB×IÒIÈ'ÓRÔSØ—G’G˜F×,Ò,¨SÓ1Ô2Ø—G’G˜IÔ&Ø—G’G˜IÕ&ð'ð —’Ð+Ô,÷-ñ( Øˆð ùòG JùÚKùòùòùò
 Fùóùò DùÚTùâKùòùò Fùóùò2 #Uùò~ Pùò4 (ùò< Cùó
ùó

ùò
 Cùó Uùó Cùô÷z0ñ 0ú÷*'ñ 'ú÷&-ð -ûõ ò Ø	�‹Ð&Ñ&�Ü�	Š	�!ŒØûðúsL  ÊANÊ/ANËANË$ANÌAAN!ÍAN&Î
 AN+ÐAN1Ð&6AN6Ñ3AN;Ò5AO ÓAOÔ AO
ØAOå
AOè	AOì9AO
í?AO$î!AO*î8	AO0ïAO0ïAO5ñ%APñ-AO;ñ:AO;ñ?APò=OAP. ÁBB$AP. ÁD+A=APÁF(AAP. ÁG6A2APÁI(,AP. ÁJC1AP"ÁNAP. ÁO;APÁPAP	ÁPAP. ÁPAPÁPAP. ÁP"AP+ÁP'AP. ÁP.
AQ*ÁP8-AQ%ÁQ%AQ*Ú__main__)NNFr%   )8r;  ÚinterpolatableHelpersÚinterpolatableTestContourOrderr   ÚinterpolatableTestStartingPointr   ÚfontTools.pens.recordingPenr   r   r	   ÚfontTools.pens.transformPenr
   ÚfontTools.pens.statisticsPenr   r   ÚfontTools.pens.momentsPenr   ÚfontTools.varLib.modelsr   r   ÚfontTools.misc.fixedToolsr   ÚfontTools.misc.transformr   Úcollectionsr   Útypesr   Ú	functoolsr   Úpprintr   Úmathr   r   r   Úloggingrí   Ú	getLoggerru   r>  r‰   rˆ   rF  r   rÝ   rã   ræ   rð   r:  rT   r8  rá   Úexitri  ÚboolrW   r0   r.   ú<module>rÑ     s  ðñô %Ý >Ý @÷ñ õ
 5ß LÝ 6ß IÝ 7Ý .Ý #Ý !Ý Ý ß  Ñ  Û Û 	à€g×ÑÐ9Ó:€àÐ ØÐ Ø Ð Ø€÷U3ñ U3ðt Ø
Øð	Gð ØØØ	ØØôGñT €xƒñó ðòMòóQ	ðh ˆzÒÛá‹v€HØ€C‡H�H‰S‘�h“Ó Õ!ð	 r0   