Ë
    £ehN¢ ã                   ó†	  — d Z ddlmZ ddlmZ ddlmZmZ ddlmZm	Z	m
Z
mZ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ZddlZddlZej6                  dz
  Z ej8                  e«      ZdZdZ  G d„ de!«      Z" G d„ de!«      Z#d„ Z$ G d„ de!«      Z% G d„ de%«      Z& G d„ de%«      Z' G d„ de%«      Z( G d„ de%«      Z) G d„ de)«      Z* G d „ d!e)«      Z+ G d"„ d#e!«      Z, G d$„ d%e,«      Z- G d&„ d'e-«      Z. G d(„ d)e,«      Z/ G d*„ d+e,«      Z0 G d,„ d-e!«      Z1 G d.„ d/e!«      Z2 G d0„ d1e!«      Z3d2„ Z4d3„ Z5d4„ Z6d5„ Z7d6„ Z8d7„ Z9d8„ Z:d9„ Z;d:„ Z<d;„ Z=d<„ Z>d=„ Z?d>„ Z@d?„ ZA G d@„ dAe!«      ZB G dB„ dCeB«      ZC G dD„ dEeB«      ZDdF„ ZEdG„ ZF G dH„ dIeB«      ZG G dJ„ dKeB«      ZH G dL„ dMeB«      ZI G dN„ dOeI«      ZJ G dP„ dQeI«      ZK G dR„ dSeI«      ZL G dT„ dUeB«      ZM G dV„ dWe!«      ZNdX„ ZOdY„ ZPdZ„ ZQd[„ ZRd\„ ZSd]„ ZTd^„ ZU G d_„ d`e!«      ZV G da„ dbeB«      ZWdc„ ZXdd„ ZYde„ ZZdf„ Z[ G dg„ dheI«      Z\ G di„ djeB«      Z] G dk„ dleB«      Z^dm„ Z_dn„ Z`do„ Za G dp„ dqe!«      Zb G dr„ dse!«      Zc G dt„ dueB«      Zdg dv‘dwdxdyd ed«       f‘dz‘d{‘dd|d}d eD«       f‘d~dd}d eD«       f‘d€d�d}d eD«       f‘d‚dƒd}d eD«       f‘d„d…d}d eD«       f‘d†‘d‡‘dˆ‘d‰‘dŠ‘d‹‘dŒ‘d�dŽd�g d�¢df‘d‘‘d’d“d�g d”¢df‘d•‘d–‘d—‘d˜‘d™‘dš‘d›‘dœ‘d�‘dždŸd d eM«       f‘d¡‘d¢d£d d eW«       f‘d¤d¥d¦d eJ«       f‘d§d/d d e]«       f‘d¨d©d d e\«       f‘dªd1d d eL«       f‘d«d¬d d e^«       f‘Zedvd�dŽd�g d�¢dfd§d/d d e]«       fd¨d©d d e\«       fdªd1d d eL«       fd«d¬d d e^«       fgZfd­Zgd®Zhd¯ehegd°ddfd±d²d³d´dµd¶d·d¸d¹dºd»d¼d½d¾d¿dÀdÁdÂdÃdÄdÅd d eK«       fgZid¯ehegd°ddfd±d²d³d´dµd¶d·d¸d¹dºd»d¿dÀdÄdÅd d eK«       fgZjdÆ„ Zk ekei«        ekee«        G dÇ„ dÈejØ                  «      Zm G dÉ„ dÊejØ                  «      Zn G dË„ dÌe!«      ZodÍ„ Zp G dÎ„ dÏeo«      Zq G dÐ„ dÑeo«      Zr G dÒ„ dÓeo«      Zs G dÔ„ dÕe!«      Zt G dÖ„ d×et«      Zu G dØ„ dÙet«      Zv G dÚ„ dÛet«      Zw G dÜ„ dÝe!«      Zxg dÞ¢ZydßZz e{ey«      ezk(  sJ ‚i Z| e}ez«      D ]
  Z~e~e|eye~   <   Œ g dà¢ZdáZ€ e{e«      e€k(  sJ ‚g dâ¢Z�dãZ‚ e{e�«      e‚k(  sJ ‚g dä¢ZƒdåZ„ e{eƒ«      e„k(  sJ ‚y)æa+  cffLib: read/write Adobe CFF fonts

OpenType fonts with PostScript outlines embed a completely independent
font file in Adobe's *Compact Font Format*. So dealing with OpenType fonts
requires also dealing with CFF. This module allows you to read and write
fonts written in the CFF format.

In 2016, OpenType 1.8 introduced the `CFF2 <https://docs.microsoft.com/en-us/typography/opentype/spec/cff2>`_
format which, along with other changes, extended the CFF format to deal with
the demands of variable fonts. This module parses both original CFF and CFF2.

é    )Ússtruct)ÚpsCharStrings)Ú	unionRectÚintRect)ÚbytechrÚbyteordÚ	bytesjoinÚtobytesÚtostrÚsafeEval)ÚTTFont)ÚOTTableWriter)ÚOTTableReader)ÚotTables)ÚBytesIONé   z%
	major:   B
	minor:   B
	hdrSize: B
i  c                   ód   — e Zd ZdZdd„Zd„ Zd„ Zd„ Zd„ Zdd„Z	d	„ Z
dd
„Zd„ Zd„ Zd„ Zd„ Zd„ Zy)Ú
CFFFontSetan  A CFF font "file" can contain more than one font, although this is
    extremely rare (and not allowed within OpenType fonts).

    This class is the entry point for parsing a CFF table. To actually
    manipulate the data inside the CFF font, you will want to access the
    ``CFFFontSet``'s :class:`TopDict` object. To do this, a ``CFFFontSet``
    object can either be treated as a dictionary (with appropriate
    ``keys()`` and ``values()`` methods) mapping font names to :class:`TopDict`
    objects, or as a list.

    .. code:: python

            from fontTools import ttLib
            tt = ttLib.TTFont("Tests/cffLib/data/LinLibertine_RBI.otf")
            tt["CFF "].cff
            # <fontTools.cffLib.CFFFontSet object at 0x101e24c90>
            tt["CFF "].cff[0] # Here's your actual font data
            # <fontTools.cffLib.TopDict object at 0x1020f1fd0>

    Nc                 óÀ  — || _         t        j                  t        |j	                  d«      | «       |�/|rdnd}| j
                  |k7  r>t        d|| j
                  fz  «      ‚| j
                  dv sJ d«       ‚| j
                  dk(  }|s�t        j                  d|j	                  d«      «      d	   | _        |j                  | j                  «       t        d
„ t        ||¬«      D «       «      | _        t        ||¬«      | _        t!        |«      | _        n�t        j                  d|j	                  d«      «      d	   | _        |j                  | j                  «       dg| _        |j&                  }t        ||| j$                  |¬«      | _        d| _        t)        ||¬«      | _        | j"                  | j                  _        | j*                  | j                  _        y)a‹  Parse a binary CFF file into an internal representation. ``file``
        should be a file handle object. ``otFont`` is the top-level
        :py:class:`fontTools.ttLib.ttFont.TTFont` object containing this CFF file.

        If ``isCFF2`` is passed and set to ``True`` or ``False``, then the
        library makes an assertion that the CFF header is of the appropriate
        version.
        é   Né   r   ú2Invalid CFF 'major' version: expected %d, found %d©r   r   úUnknown CFF formatÚBr   c              3   ó2   K  — | ]  }t        |«      –— Œ y ­w©N©r   )Ú.0Úss     úW/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/fontTools/cffLib/__init__.pyú	<genexpr>z'CFFFontSet.decompile.<locals>.<genexpr>b   s   è ø€ Ò!O¨q¤%¨§(Ñ!Oùs   ‚©ÚisCFF2ú>HÚCFF2Font)ÚotFontr   ÚunpackÚcffHeaderFormatÚreadÚmajorÚ
ValueErrorÚstructÚoffSizeÚseekÚhdrSizeÚlistÚIndexÚ	fontNamesÚTopDictIndexÚtopDictIndexÚIndexedStringsÚstringsÚtopDictSizeÚgetGlyphOrderÚGlobalSubrsIndexÚGlobalSubrs)ÚselfÚfiler'   r$   Úexpected_majorÚcff2GetGlyphOrders         r!   Ú	decompilezCFFFontSet.decompileF   sŽ  € ð ˆŒÜ�‰”¨¯	©	°!«°dÔ;ØÐñ #)™Q¨aˆNØ�z‰z˜^Ò+Ü ØHØ% t§z¡zÐ2ñ3óð ð —:‘: Ñ'Ð=Ð)=Ó=Ð'Ø—Z‘Z 1‘_ˆFÙÜ!Ÿ=™=¨¨d¯i©i¸«lÓ;¸AÑ>ˆDŒLØ�I‰I�d—l‘lÔ#Ü!Ñ!O´E¸$ÀvÔ4NÔ!OÓOˆDŒNÜ ,¨T¸&Ô AˆDÔÜ)¨$Ó/ˆD�Lä%Ÿ}™}¨T°4·9±9¸Q³<Ó@ÀÑCˆDÔØ�I‰I�d—l‘lÔ#Ø(˜\ˆDŒNØ &× 4Ñ 4Ðä ,ØÐ'¨×)9Ñ)9À&ô!ˆDÔð  ˆDŒLÜ+¨D¸Ô@ˆÔØ$(§L¡Lˆ×ÑÔ!Ø(,×(8Ñ(8ˆ×ÑÕ%ó    c                 ó,   — t        | j                  «      S r   )Úlenr3   ©r<   s    r!   Ú__len__zCFFFontSet.__len__s   s   € Ü�4—>‘>Ó"Ð"rA   c                 ó,   — t        | j                  «      S r   )r1   r3   rD   s    r!   ÚkeyszCFFFontSet.keysv   s   € Ü�D—N‘NÓ#Ð#rA   c                 ó   — | j                   S r   )r5   rD   s    r!   ÚvalueszCFFFontSet.valuesy   s   € Ø× Ñ Ð rA   c                 óþ   — t        |d«      r|j                  «       }n:t        |t        «      r|}	 | j                  j                  |«      }nt        |«      ‚| j                  |   S # t        $ r t        |«      ‚w xY w)z{Return TopDict instance identified by name (str) or index (int
        or any object that implements `__index__`).
        Ú	__index__)
ÚhasattrrK   Ú
isinstanceÚstrr3   Úindexr,   ÚKeyErrorÚ	TypeErrorr5   )r<   ÚnameOrIndexrO   Únames       r!   Ú__getitem__zCFFFontSet.__getitem__|   s~   € ô �; Ô,Ø×)Ñ)Ó+‰EÜ˜¤SÔ)ØˆDð,ØŸ™×,Ñ,¨TÓ2‘ô ˜KÓ(Ð(Ø× Ñ  Ñ'Ð'øô	 ò ,Ü˜{Ó+Ð+ð,ús   ±A' Á'A<c                 óš  — || _         |�/|rdnd}| j                  |k7  r>t        d|| j                  fz  «      ‚| j                  dv sJ d«       ‚| j                  dk(  }|j                  r#|s!| j                  D ]  }|j                  «        Œ |st        «       }nd}t        |«      }| j                  j                  || |¬«      }|rud| _	        |j                  t        j                  t        | «      «       |j                  «       | _        |j                  t!        j                  d	| j                  «      «       nfd
| _	        d
| _        |j                  t        j                  t        | «      «       |j                  t!        j                  d| j"                  «      «       |sOt%        «       }	| j&                  D ]  }
|	j)                  |
«       Œ |j                  |	j                  || |¬«      «       |j                  |«       |s|j                  |j                  «       «       |j                  | j*                  j                  || |¬«      «       | j                  D ]2  }t-        |d«      r|j.                  �Œ|j1                  «       }||_        Œ4 |j3                  |«      }|D ]  }|j                  |«       Œ |j5                  |«       y)a˜  Write the object back into binary representation onto the given file.
        ``file`` should be a file handle object. ``otFont`` is the top-level
        :py:class:`fontTools.ttLib.ttFont.TTFont` object containing this CFF file.

        If ``isCFF2`` is passed and set to ``True`` or ``False``, then the
        library makes an assertion that the CFF header is of the appropriate
        version.
        Nr   r   r   r   r   r#   é   r%   é   r   Úcharset)r'   r+   r,   ÚrecalcBBoxesr5   ÚrecalcFontBBoxr6   Ú	CFFWriterÚgetCompilerr0   Úaddr   Úpackr)   ÚgetDataLengthr8   r-   r.   r2   r3   Úappendr;   rL   rX   r9   ÚgetChildrenÚtoFile)r<   r=   r'   r$   r>   ÚtopDictr7   ÚwriterÚtopCompilerr3   rS   rX   ÚchildrenÚchilds                 r!   ÚcompilezCFFFontSet.compileŒ   sk  € ð ˆŒØÐá"(™Q¨aˆNØ�z‰z˜^Ò+Ü ØHØ% t§z¡zÐ2ñ3óð ð —:‘: Ñ'Ð=Ð)=Ó=Ð'Ø—Z‘Z 1‘_ˆFà×Ò¡vØ×,Ñ,ò )�Ø×&Ñ&Õ(ð)ñ Ü$Ó&‰GàˆGÜ˜6Ó"ˆØ×'Ñ'×3Ñ3°G¸TÈ&Ð3ÓQˆÙØˆDŒLØ�J‰J”w—|‘|¤O°TÓ:Ô;à*×8Ñ8Ó:ˆDÔØ�J‰J”v—{‘{ 4¨×)9Ñ)9Ó:Õ;àˆDŒLØˆDŒLØ�J‰J”w—|‘|¤O°TÓ:Ô;Ø�J‰J”v—{‘{ 3¨¯©Ó5Ô6ÙÜ›ˆIØŸ™ò '�Ø× Ñ  Õ&ð'à�J‰J�y×,Ñ,¨W°dÀ6Ð,ÓJÔKØ�
‰
�;ÔÙØ�J‰J�w×*Ñ*Ó,Ô-Ø�
‰
�4×#Ñ#×/Ñ/°¸ÀfÐ/ÓMÔNà×(Ñ(ò 	*ˆGÜ˜7 IÔ.°'·/±/Ñ2IØ ×.Ñ.Ó0�Ø")�•ð	*ð ×*Ñ*¨7Ó3ˆØò 	ˆEØ�J‰J�uÕð	ð 	�‰�dÕrA   c                 óz  — |j                  d| j                  ¬«       |j                  «        |j                  d| j                  ¬«       |j                  «        | j                  D ]e  }|j                  dt        |«      ¬«       |j                  «        | |   }|j                  |«       |j                  d«       |j                  «        Œg |j                  «        |j                  d«       |j                  «        | j                  j                  |«       |j                  d«       |j                  «        y)z÷Write the object into XML representation onto the given
        :class:`fontTools.misc.xmlWriter.XMLWriter`.

        .. code:: python

                writer = xmlWriter.XMLWriter(sys.stdout)
                tt["CFF "].cff.toXML(writer)

        r+   ©ÚvalueÚminorÚCFFFont©rS   r;   N)
Ú	simpletagr+   Únewlinerl   r3   Úbegintagr   ÚtoXMLÚendtagr;   )r<   Ú	xmlWriterÚfontNameÚfonts       r!   rr   zCFFFontSet.toXMLÌ   s  € ð 	×Ñ˜G¨4¯:©:ÐÔ6Ø×ÑÔØ×Ñ˜G¨4¯:©:ÐÔ6Ø×ÑÔØŸ™ò 	 ˆHØ×Ñ˜y¬u°X«ÐÔ?Ø×ÑÔØ˜‘>ˆDØ�J‰J�yÔ!Ø×Ñ˜YÔ'Ø×ÑÕð	 ð 	×ÑÔØ×Ñ˜=Ô)Ø×ÑÔØ×Ñ×Ñ˜yÔ)Ø×Ñ˜Ô'Ø×ÑÕrA   c                 ó²  — || _         t        | d«      sd| _        t        | d«      sd| _        |dk(  �rî| j                  dk(  r¡t        | d«      sd| _        t        | d«      sd| _        t        | d	«      st        «       | _        t        | d
«      sg | _        t        «       | _
        |d   }| j                  j                  |«       t        | j                  ¬«      }d|_        n�| j                  dk(  r€t        | d«      sd| _        t        | d	«      st        «       | _        t        | d
«      sdg| _        | j                   j                  }t        | j                  |¬«      }t        d|«      | _
        | j                  j                  «       |D ],  }t        |t         «      rŒ|\  }}}|j#                  |||«       Œ. t        |d«      rV|j$                  d   j&                  €<|j$                  }	|	D ]*  }
t        |
d«      sŒ|j(                  |
j*                  _        Œ, yyy|d	k(  rt,        j.                  }t        | d	«      st        «       | _        |D ]N  }t        |t         «      rŒ|\  }}} |«       }|j#                  |||«       | j                  j                  |«       ŒP y|dk(  rt1        |d   «      | _        y|dk(  rt1        |d   «      | _        yy)z?Reads data from the XML element into the ``CFFFontSet`` object.r+   r   rl   r   rm   r.   rW   r0   r;   r3   rS   )r;   Nr   rV   r&   )r;   r?   ÚVarStoreÚPrivaterk   )r'   rL   r+   rl   r.   r0   r:   r;   r3   r4   r5   r`   ÚTopDictrX   r9   rM   rN   ÚfromXMLÚFDArrayÚvstorerx   ry   r   ÚT2CharStringÚint)r<   rS   ÚattrsÚcontentr'   ru   rc   r?   ÚelementÚfdArrayÚfontDictÚsubrCharStringClassÚsubrs                r!   r{   zCFFFontSet.fromXMLé   s¡  € àˆŒô �t˜WÔ%ØˆDŒJÜ�t˜WÔ%ØˆDŒJà�9ÓØ�z‰z˜QŠÜ˜t YÔ/à#$�D”LÜ˜t YÔ/Ø#$�D”LÜ˜t ]Ô3Ü'7Ó'9�DÔ$Ü˜t [Ô1Ø%'�D”NÜ(4«�DÔ%Ø  ™=�Ø—‘×%Ñ% hÔ/Ü!¨d×.>Ñ.>Ô?�Ø"&�•Ø—‘˜q’Ü˜t YÔ/Ø#$�D”LÜ˜t ]Ô3Ü'7Ó'9�DÔ$Ü˜t [Ô1Ø&0 \�D”NØ$(§K¡K×$=Ñ$=Ð!Ü!Ø $× 0Ñ 0ÐDUô�ô %1°Ð7HÓ$I�Ô!Ø×Ñ×$Ñ$ WÔ-Ø"ò 6�Ü˜g¤sÔ+ØØ'.Ñ$��e˜WØ—‘  e¨WÕ5ð	6ô �w 
Ô+°·±ÀÑ0B×0IÑ0IÐ0QØ!Ÿ/™/�Ø 'ò C�HÜ˜x¨Õ3Ø29×2BÑ2B˜×(Ñ(Õ/ñCð 1RÐ+ð �]Ò"Ü"/×"<Ñ"<ÐÜ˜4 Ô/Ü#3Ó#5�Ô Ø"ò .�Ü˜g¤sÔ+ØØ'.Ñ$��e˜WÙ*Ó,�Ø—‘˜T 5¨'Ô2Ø× Ñ ×'Ñ'¨Õ-ñ.ð �WŠ_Ü˜U 7™^Ó,ˆD�JØ�WŠ_Ü˜U 7™^Ó,ˆD�Jð rA   c                 ó"   — ddl m}  || |«       y )Nr   )Ú_convertCFFToCFF2)Ú	CFFToCFF2rˆ   )r<   r'   rˆ   s      r!   ÚconvertCFFToCFF2zCFFFontSet.convertCFFToCFF2-  ó   € Ý0á˜$ Õ'rA   c                 ó"   — ddl m}  || |«       y )Nr   )Ú_convertCFF2ToCFF)Ú	CFF2ToCFFr�   )r<   r'   r�   s      r!   ÚconvertCFF2ToCFFzCFFFontSet.convertCFF2ToCFF2  r‹   rA   c                 ó    — ddl m}  || «       y )Nr   )Údesubroutinize)Ú
transformsr‘   )r<   r‘   s     r!   r‘   zCFFFontSet.desubroutinize7  s   € Ý.á�tÕrA   c                 ó    — ddl m}  || «       y )Nr   )Úremove_hints)r’   r”   )r<   r”   s     r!   r”   zCFFFontSet.remove_hints<  s   € Ý,á�TÕrA   c                 ó    — ddl m}  || «       y )Nr   )Úremove_unused_subroutines)r’   r–   )r<   r–   s     r!   r–   z$CFFFontSet.remove_unused_subroutinesA  s   € Ý9á! $Õ'rA   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r@   rE   rG   rI   rT   rh   rr   r{   rŠ   r�   r‘   r”   r–   © rA   r!   r   r   0   sL   „ ñó*+9òZ#ò$ò!ò(ó >ò@ó:B-òH(ò
(ò
ò
ó
(rA   r   c                   ó"   — e Zd ZdZd„ Zd„ Zd„ Zy)r[   zXHelper class for serializing CFF data to binary. Used by
    :meth:`CFFFontSet.compile`.c                 ó    — g | _         || _        y r   )Údatar$   ©r<   r$   s     r!   Ú__init__zCFFWriter.__init__K  s   € ØˆŒ	Øˆ�rA   c                 ó:   — | j                   j                  |«       y r   )rž   r`   )r<   Útables     r!   r]   zCFFWriter.addO  s   € Ø�	‰	×Ñ˜ÕrA   c                 óÌ  — d }d}	 t         j                  t        d|«       |dz   }d}|g}| j                  D ]’  }t        |d«      rE||j	                  «       z   }t        |t        «      r0|j                  r$|j	                  «       | _        n|t        |«      z   }t        |d«      r|j                  ||«       |}|j                  |«       Œ” ||k(  rn|}ŒÏt         j                  t        d«       |j                  «       }| j                  r.t        j                  d| j                  «      | j                  d<   n@t        |d   «      | _        t        j                  d	| j                   «      | j                  d<   dg}| j                  D ]S  }t        |d
«      r|j#                  |«       n|j%                  |«       |j                  |j                  «       |z
  «       ŒU ||k(  sJ ‚y )Nr   z CFFWriter.toFile() iteration: %dr   r_   ÚsetPosz#CFFWriter.toFile() writing to file.r%   éÿÿÿÿr   rb   )ÚlogÚDEBUGrž   rL   r_   rM   ÚTopDictIndexCompilerr$   r8   rC   r¤   r`   Útellr-   r^   ÚcalcOffSizer.   rb   Úwrite)	r<   r=   ÚlastPosListÚcountÚposÚposListÚitemÚendPosÚbegins	            r!   rb   zCFFWriter.toFileR  s¤  € ØˆØˆØÜ�G‰G”EÐ=¸uÔEØ˜A‘IˆEØˆCØ�eˆGØŸ	™	ò 
$�Ü˜4 Ô1Ø  4×#5Ñ#5Ó#7Ñ7�FÜ! $Ô(<Ô=À$Ç+Â+Ø+/×+=Ñ+=Ó+?˜Õ(à ¤3 t£9™_�FÜ˜4 Ô*Ø—K‘K  VÔ,Ø�Ø—‘˜sÕ#ð
$ð ˜+Ò%ØØ!ˆKð% ô& 	�‰”Ð<Ô=Ø—	‘	“ˆØ�;Š;Ü!Ÿ;™; t¨T×-=Ñ-=Ó>ˆD�I‰I�aŠLä& {°2¡Ó7ˆDŒLÜ!Ÿ;™; s¨D¯L©LÓ9ˆD�I‰I�a‰LØ�#ˆØ—I‘Iò 	0ˆDÜ�t˜XÔ&Ø—‘˜DÕ!à—
‘
˜4Ô Ø�N‰N˜4Ÿ9™9›;¨Ñ.Õ/ð	0ð ˜+Ò%Ð%Ñ%rA   N)r—   r˜   r™   rš   r    r]   rb   r›   rA   r!   r[   r[   G  s   „ ñ#òò ó$&rA   r[   c                 ó@   — | dk  rd}|S | dk  rd}|S | dk  rd}|S d}|S )Né   r   i   r   i   r   rW   r›   )ÚlargestOffsetr.   s     r!   rª   rª   y  sN   € Ø�uÒØˆð €Nð 
˜Ò	 Øˆð
 €Nð	 
˜Ò	"Øˆð €Nð ˆØ€NrA   c                   ó0   — e Zd ZdZdd„Zd„ Zd„ Zd„ Zd„ Zy)	ÚIndexCompilerz…Base class for writing CFF `INDEX data <https://docs.microsoft.com/en-us/typography/opentype/spec/cff2#5-index-data>`_
    to binary.Nc                 óŠ   — |€t        |d«      r|j                  }|€J ‚|| _        | j                  ||«      | _        || _        y ©Nr$   )rL   r$   ÚgetItemsÚitemsÚparent)r<   r»   r7   r¼   r$   s        r!   r    zIndexCompiler.__init__‰  sE   € Øˆ>œg f¨hÔ7Ø—]‘]ˆFØÐ%Ð%Ð%ØˆŒØ—]‘] 5¨'Ó2ˆŒ
Øˆ�rA   c                 ó   — |S r   r›   ©r<   r»   r7   s      r!   rº   zIndexCompiler.getItems‘  ó   € ØˆrA   c                 óÐ   — | j                   rWd}|g}| j                   D ]A  }t        |d«      r||j                  «       z   }n|t        |«      z   }|j	                  |«       ŒC |S g }|S )Nr   r_   )r»   rL   r_   rC   r`   )r<   r®   Úoffsetsr°   s       r!   Ú
getOffsetszIndexCompiler.getOffsets”  sq   € à�:Š:ØˆCØ�eˆGØŸ
™
ò $�Ü˜4 Ô1Ø × 2Ñ 2Ó 4Ñ4‘Cà¤ D£	™/�CØ—‘˜sÕ#ð$ð ˆð ˆGØˆrA   c                 óÒ   — | j                   rd}nd}| j                  rG| j                  «       d   }t        |«      }|dz   t	        | j                  «      dz   |z  z   |z   dz
  }|S |}|S )NrW   r   r¥   r   )r$   r»   rÂ   rª   rC   )r<   Ú	countSizeÚ
lastOffsetr.   Ú
dataLengths        r!   r_   zIndexCompiler.getDataLength£  sˆ   € Ø�;Š;Ø‰IàˆIà�:Š:ØŸ™Ó*¨2Ñ.ˆJÜ! *Ó-ˆGàØñä�t—z‘z“? QÑ&¨'Ñ1ñ2ð ñð ñ	ð ð Ðð #ˆJàÐrA   c                 ó2  — | j                  «       }| j                  r t        |t        | j                  «      «       nt        |t        | j                  «      «       | j                  r°t        |d   «      }t        ||«       | }t        j                  }|D ]0  } |d|«      |d  }t        |«      | k(  sJ ‚|j                  |«       Œ2 | j                  D ]>  }t        |d«      r|j                  |«       Œ!t        |d¬«      }|j                  |«       Œ@ y y )Nr¥   ú>lrb   Úlatin1©Úencoding)rÂ   r$   ÚwriteCard32rC   r»   ÚwriteCard16rª   Ú
writeCard8r-   r^   r«   rL   rb   r
   )	r<   r=   rÁ   r.   r^   ÚoffsetÚ	binOffsetr°   rž   s	            r!   rb   zIndexCompiler.toFile¹  sò   € Ø—/‘/Ó#ˆØ�;Š;Ü˜œc $§*¡*›oÕ.ä˜œc $§*¡*›oÔ.à�:Š:Ü! '¨"¡+Ó.ˆGÜ�t˜WÔ%Ø�hˆGÜ—;‘;ˆDØ!ò &�Ù   vÓ.¨w¨xÐ8�	Ü˜9“~¨'¨Ò1Ð1Ð1Ø—
‘
˜9Õ%ð&ð Ÿ
™
ò %�Ü˜4 Ô*Ø—K‘K Õ%ä" 4°(Ô;�DØ—J‘J˜tÕ$ñ%ð rA   r   )	r—   r˜   r™   rš   r    rº   rÂ   r_   rb   r›   rA   r!   r·   r·   …  s    „ ñóòòòó,%rA   r·   c                   ó   — e Zd Zd„ Zy)ÚIndexedStringsCompilerc                 ó   — |j                   S r   ©r7   r¾   s      r!   rº   zIndexedStringsCompiler.getItemsÒ  s   € Ø�}‰}ÐrA   N)r—   r˜   r™   rº   r›   rA   r!   rÒ   rÒ   Ñ  s   „ órA   rÒ   c                   óB   ‡ — e Zd ZdZd„ Zd„ Zˆ fd„Zˆ fd„Zˆ fd„Zˆ xZ	S )r¨   z/Helper class for writing the TopDict to binary.c                 óZ   — g }|D ]#  }|j                  |j                  || «      «       Œ% |S r   ©r`   r\   ©r<   r»   r7   Úoutr°   s        r!   rº   zTopDictIndexCompiler.getItemsÙ  ó4   € ØˆØò 	8ˆDØ�J‰J�t×'Ñ'¨°Ó6Õ7ð	8àˆ
rA   c                 ól   — g }| j                   D ]"  }|j                  |j                  |«      «       Œ$ |S r   ©r»   Úextendra   )r<   r7   rf   rc   s       r!   ra   z TopDictIndexCompiler.getChildrenß  s6   € ØˆØ—z‘zò 	:ˆGØ�O‰O˜G×/Ñ/°Ó8Õ9ð	:àˆrA   c                 ó‚   •— | j                   r!d| j                  d   j                  «       g}|S t        t        | �  «       S ©Nr   )r$   r»   r_   Úsuperr¨   rÂ   )r<   rÁ   Ú	__class__s     €r!   rÂ   zTopDictIndexCompiler.getOffsetså  s;   ø€ Ø�;Š;Ø˜$Ÿ*™* Q™-×5Ñ5Ó7Ð8ˆGØˆNäÔ-¨tÑ?ÓAÐArA   c                 ó~   •— | j                   r| j                  d   j                  «       }|S t        t        | �  «       S rß   )r$   r»   r_   rà   r¨   )r<   rÆ   rá   s     €r!   r_   z"TopDictIndexCompiler.getDataLengthì  s7   ø€ Ø�;Š;ØŸ™ A™×4Ñ4Ó6ˆJØÐäÔ-¨tÑBÓDÐDrA   c                 ó‚   •— | j                   r| j                  d   j                  |«       y t        t        | �  |«       y rß   )r$   r»   rb   rà   r¨   )r<   r=   rá   s     €r!   rb   zTopDictIndexCompiler.toFileó  s0   ø€ Ø�;Š;Ø�J‰J�q‰M× Ñ  Õ&äÔ&¨Ñ4°TÕ:rA   )
r—   r˜   r™   rš   rº   ra   rÂ   r_   rb   Ú__classcell__©rá   s   @r!   r¨   r¨   Ö  s&   ø„ Ù9òòôBôE÷;ð ;rA   r¨   c                   ó(   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zy)ÚFDArrayIndexCompilerz®Helper class for writing the
    `Font DICT INDEX <https://docs.microsoft.com/en-us/typography/opentype/spec/cff2#10-font-dict-index-font-dicts-and-fdselect>`_
    to binary.c                 óZ   — g }|D ]#  }|j                  |j                  || «      «       Œ% |S r   r×   rØ   s        r!   rº   zFDArrayIndexCompiler.getItemsÿ  rÚ   rA   c                 ól   — g }| j                   D ]"  }|j                  |j                  |«      «       Œ$ |S r   rÜ   )r<   r7   rf   r„   s       r!   ra   z FDArrayIndexCompiler.getChildren  s6   € ØˆØŸ
™
ò 	;ˆHØ�O‰O˜H×0Ñ0°Ó9Õ:ð	;àˆrA   c                 óþ  — | j                  «       }| j                  r t        |t        | j                  «      «       nt        |t        | j                  «      «       t        |d   «      }t        ||«       | }t        j                  }|D ]0  } |d|«      |d  }t        |«      | k(  sJ ‚|j                  |«       Œ2 | j                  D ]1  }t        |d«      r|j                  |«       Œ!|j                  |«       Œ3 y )Nr¥   rÈ   rb   )rÂ   r$   rÌ   rC   r»   rÍ   rª   rÎ   r-   r^   r«   rL   rb   )r<   r=   rÁ   r.   r^   rÏ   rÐ   r°   s           r!   rb   zFDArrayIndexCompiler.toFile  sÚ   € Ø—/‘/Ó#ˆØ�;Š;Ü˜œc $§*¡*›oÕ.ä˜œc $§*¡*›oÔ.Ü˜g b™kÓ*ˆÜ�4˜Ô!Ø�(ˆÜ�{‰{ˆØò 	"ˆFÙ˜T 6Ó*¨7¨8Ð4ˆIÜ�y“> g XÒ-Ð-Ð-Ø�J‰J�yÕ!ð	"ð —J‘Jò 	!ˆDÜ�t˜XÔ&Ø—‘˜DÕ!à—
‘
˜4Õ ñ		!rA   c                 ó6   — || j                   j                  d<   y )Nr|   ©r¼   ÚrawDict©r<   r®   r±   s      r!   r¤   zFDArrayIndexCompiler.setPos  ó   € Ø),ˆ�‰×Ñ˜IÒ&rA   N)r—   r˜   r™   rš   rº   ra   rb   r¤   r›   rA   r!   rç   rç   ú  s   „ ñòòò!ó(-rA   rç   c                   ó   — e Zd ZdZd„ Zy)ÚGlobalSubrsCompilerz§Helper class for writing the `global subroutine INDEX <https://docs.microsoft.com/en-us/typography/opentype/spec/cff2#9-local-and-global-subr-indexes>`_
    to binary.c                 ó„   — g }|D ]8  }|j                  | j                  «       |j                  |j                  «       Œ: |S r   ©rh   r$   r`   Úbytecode©r<   r»   r7   rÙ   Úcss        r!   rº   zGlobalSubrsCompiler.getItems'  ó=   € ØˆØò 	$ˆBØ�J‰J�t—{‘{Ô#Ø�J‰J�r—{‘{Õ#ð	$ð ˆ
rA   N)r—   r˜   r™   rš   rº   r›   rA   r!   rñ   rñ   #  s   „ ñórA   rñ   c                   ó   — e Zd ZdZd„ Zy)ÚSubrsCompilerz¦Helper class for writing the `local subroutine INDEX <https://docs.microsoft.com/en-us/typography/opentype/spec/cff2#9-local-and-global-subr-indexes>`_
    to binary.c                 óh   — || j                   j                  z
  }|| j                   j                  d<   y ©NÚSubrs)r¼   r®   rí   )r<   r®   r±   rÏ   s       r!   r¤   zSubrsCompiler.setPos3  s(   € Ø�t—{‘{—‘Ñ&ˆØ'-ˆ�‰×Ñ˜GÒ$rA   N)r—   r˜   r™   rš   r¤   r›   rA   r!   rù   rù   /  s   „ ñó.rA   rù   c                   ó   — e Zd ZdZd„ Zd„ Zy)ÚCharStringsCompilerz¡Helper class for writing the `CharStrings INDEX <https://docs.microsoft.com/en-us/typography/opentype/spec/cff2#9-local-and-global-subr-indexes>`_
    to binary.c                 ó„   — g }|D ]8  }|j                  | j                  «       |j                  |j                  «       Œ: |S r   ró   rõ   s        r!   rº   zCharStringsCompiler.getItems<  r÷   rA   c                 ó6   — || j                   j                  d<   y ©NÚCharStringsrì   rî   s      r!   r¤   zCharStringsCompiler.setPosC  s   € Ø-0ˆ�‰×Ñ˜MÒ*rA   N)r—   r˜   r™   rš   rº   r¤   r›   rA   r!   rþ   rþ   8  s   „ ñòó1rA   rþ   c                   óH   — e Zd ZdZeZdd„Zd„ Zd„ Zd„ Z	d„ Z
d„ Zdd	„Zd
„ Zy)r2   z§This class represents what the CFF spec calls an INDEX (an array of
    variable-sized objects). `Index` items can be addressed and set using
    Python list indexing.Nc                 ó  — g | _         g x| _        }| j                  j                  }|€y || _        t
        j                  t        d||j                  «       «       || _        |rt        |«      }nt        |«      }|dk(  ry d g|z  | _         t        |«      }t
        j                  t        d||«       |dk  s
J d|z  «       ‚dd|z
  z  }t        |dz   «      D ]J  }|j                  |«      }	||	z   }	t        j                  d|	«      \  }
|j!                  t#        |
«      «       ŒL |j                  «       dz
  | _        |j'                  | j$                  |d	   z   «       t
        j                  t        d
||j                  «       «       y )Núloading %s at %sr   z    index count: %s offSize: %srW   zoffSize too large: %só    r   ú>Lr¥   ú    end of %s at %s)r»   rÁ   rá   r—   Ú_isCFF2r¦   r§   r©   r=   Ú
readCard32Ú
readCard16Ú	readCard8Úranger*   r-   r(   r`   r   Ú
offsetBaser/   )r<   r=   r$   rÁ   rS   r­   r.   ÚpadrO   ÚchunkrÏ   s              r!   r    zIndex.__init__N  sX  € ØˆŒ
Ø!#Ð#ˆŒ�wØ�~‰~×&Ñ&ˆØˆ<ØØˆŒÜ�‰”Ð)¨4°·±³Ô=ØˆŒ	ÙÜ˜tÓ$‰Eä˜tÓ$ˆEØ�AŠ:ØØ�V˜e‘^ˆŒ
Ü˜D“/ˆÜ�‰”Ð8¸%ÀÔIØ˜!Š|Ð>Ð4°wÑ>Ó>ˆ|Ø�q˜7‘{Ñ#ˆÜ˜5 1™9Ó%ò 	(ˆEØ—I‘I˜gÓ&ˆEØ˜%‘KˆEÜŸ™ d¨EÓ2‰IˆVØ�N‰Nœ3˜v›;Õ'ð		(ð
 Ÿ)™)›+¨™/ˆŒØ�	‰	�$—/‘/ G¨B¡KÑ/Ô0Ü�‰”Ð,¨d°D·I±I³KÕ@rA   c                 ó,   — t        | j                  «      S r   )rC   r»   rD   s    r!   rE   zIndex.__len__k  s   € Ü�4—:‘:‹ÐrA   c                 ój  — | j                   |   }|�|S | j                  |   | j                  z   }| j                  |dz      | j                  |   z
  }| j                  }|j	                  |«       |j                  |«      }t        |«      |k(  sJ ‚| j                  ||||«      }|| j                   |<   |S ©Nr   )r»   rÁ   r  r=   r/   r*   rC   ÚproduceItem)r<   rO   r°   rÏ   Úsizer=   rž   s          r!   rT   zIndex.__getitem__n  s¯   € Ø�z‰z˜%Ñ ˆØÐØˆKØ—‘˜eÑ$ t§¡Ñ6ˆØ�|‰|˜E A™IÑ&¨¯©°eÑ)<Ñ<ˆØ�y‰yˆØ�	‰	�&ÔØ�y‰y˜‹ˆÜ�4‹y˜DÒ Ð Ð Ø×Ñ  t¨T°6Ó:ˆØ ˆ�
‰
�5ÑØˆrA   c                 ó"   — || j                   |<   y r   ©r»   )r<   rO   r°   s      r!   Ú__setitem__zIndex.__setitem__|  s   € Ø ˆ�
‰
�5ÒrA   c                 ó   — |S r   r›   )r<   rO   rž   r=   rÏ   s        r!   r  zIndex.produceItem  s   € ØˆrA   c                 ó:   — | j                   j                  |«       y)zAdd an item to an INDEX.N)r»   r`   )r<   r°   s     r!   r`   zIndex.append‚  s   € à�
‰
×Ñ˜$ÕrA   c                 ó,   — | j                  | |||¬«      S ©Nr#   ©ÚcompilerClass©r<   r7   r¼   r$   s       r!   r\   zIndex.getCompiler†  ó   € Ø×!Ñ! $¨°ÀÐ!ÓGÐGrA   c                 ó"   — | j                   dd…= y)zEmpty the INDEX.Nr  rD   s    r!   ÚclearzIndex.clear‰  s   € à�J‰J’q‰MrA   ©NNr   )r—   r˜   r™   rš   r·   r  r    rE   rT   r  r  r`   r\   r"  r›   rA   r!   r2   r2   G  s8   „ ñð "€MóAò:òò!òò óHórA   r2   c                   ó|   ‡ — e Zd ZdZeZej                  Zej                  Z		 	 	 	 	 	 dˆ fd„	Z
d„ Zd„ Zd„ Zd„ Zˆ xZS )r:   ay  This index contains all the global subroutines in the font. A global
    subroutine is a set of ``CharString`` data which is accessible to any
    glyph in the font, and are used to store repeated instructions - for
    example, components may be encoded as global subroutines, but so could
    hinting instructions.

    Remember that when interpreting a ``callgsubr`` instruction (or indeed
    a ``callsubr`` instruction) that you will need to add the "subroutine
    number bias" to number given:

    .. code:: python

            tt = ttLib.TTFont("Almendra-Bold.otf")
            u = tt["CFF "].cff[0].CharStrings["udieresis"]
            u.decompile()

            u.toXML(XMLWriter(sys.stdout))
            # <some stuff>
            # -64 callgsubr <-- Subroutine which implements the dieresis mark
            # <other stuff>

            tt["CFF "].cff[0].GlobalSubrs[-64] # <-- WRONG
            # <T2CharString (bytecode) at 103451d10>

            tt["CFF "].cff[0].GlobalSubrs[-64 + 107] # <-- RIGHT
            # <T2CharString (source) at 103451390>

    ("The bias applied depends on the number of subrs (gsubrs). If the number of
    subrs (gsubrs) is less than 1240, the bias is 107. Otherwise if it is less
    than 33900, it is 1131; otherwise it is 32768.",
    `Subroutine Operators <https://docs.microsoft.com/en-us/typography/opentype/otspec180/cff2charstr#section4.4>`)
    c                 ór   •— t         t        | �  ||¬«       || _        || _        |r|| _        |r|| _        y y r  )rà   r:   r    ÚglobalSubrsÚprivateÚfdSelectrƒ   )r<   r=   r&  r'  r(  rƒ   r$   rá   s          €r!   r    zGlobalSubrsIndex.__init__´  sB   ø€ ô 	Ô Ñ.¨t¸FÐ.ÔCØ&ˆÔØˆŒÙØ$ˆDŒMÙØ"ˆD�Lð rA   c                 ó,  — | j                   �| j                   }n^t        | d«      rP| j                  �Dt        | d«      r| j                  �| j                  |   }nd}| j                  |   j                  }nd }| j                  ||| j                  ¬«      S )Nrƒ   r(  r   ©r'  r&  )r'  rL   rƒ   r(  ry   Ú	subrClassr&  )r<   rO   rž   r=   rÏ   r'  ÚfdIndexs          r!   r  zGlobalSubrsIndex.produceItemÅ  s‚   € Ø�<‰<Ð#Ø—l‘l‰GÜ�T˜9Ô%¨$¯,©,Ð*BÜ�t˜ZÔ(¨T¯]©]Ð-FØŸ-™-¨Ñ.‘à�Ø—l‘l 7Ñ+×3Ñ3‰GàˆGØ�~‰~˜d¨GÀ×AQÑAQˆ~ÓRÐRrA   c                 óv  — |j                  d«       |j                  «        t        t        | «      «      D ]�  }| |   }|j	                  «       r|j                  d|d¬«       n|j                  d|¬«       |j                  «        |j                  |«       |j                  d«       |j                  «        Œƒ y)a  Write the subroutines index into XML representation onto the given
        :class:`fontTools.misc.xmlWriter.XMLWriter`.

        .. code:: python

                writer = xmlWriter.XMLWriter(sys.stdout)
                tt["CFF "].cff[0].GlobalSubrs.toXML(writer)

        zDThe 'index' attribute is only for humans; it is ignored when parsed.Ú
CharStringr   )rO   Úraw©rO   N)Úcommentrp   r  rC   ÚneedsDecompilationrq   rr   rs   )r<   rt   Úir†   s       r!   rr   zGlobalSubrsIndex.toXMLÒ  sª   € ð 	×ÑØUô	
ð 	×ÑÔÜ”s˜4“yÓ!ò 		 ˆAØ˜‘7ˆDØ×&Ñ&Ô(Ø×"Ñ" <°q¸aÐ"Õ@à×"Ñ" <°qÐ"Ô9Ø×ÑÔØ�J‰J�yÔ!Ø×Ñ˜\Ô*Ø×ÑÕñ		 rA   c                 óx   — |dk7  ry | j                  «       }|j                  |||«       | j                  |«       y )Nr.  )r+  r{   r`   )r<   rS   r€   r�   r†   s        r!   r{   zGlobalSubrsIndex.fromXMLë  s5   € Ø�<ÒØØ�~‰~ÓˆØ�‰�T˜5 'Ô*Ø�‰�DÕrA   c                 óJ   — d }t        | d«      r| j                  |   }| |   |fS )Nr(  )rL   r(  )r<   rO   Úsels      r!   ÚgetItemAndSelectorz#GlobalSubrsIndex.getItemAndSelectorò  s.   € ØˆÜ�4˜Ô$Ø—-‘- Ñ&ˆCØ�E‰{˜CÐÐrA   ©NNNNNN)r—   r˜   r™   rš   rñ   r  r   r~   r+  ÚcharStringClassr    r  rr   r{   r7  rä   rå   s   @r!   r:   r:   Ž  sT   ø„ ñðB (€MØ×*Ñ*€IØ#×0Ñ0€Oð ØØØØØõ#ò"Sò ò2ö rA   r:   c                   ó   — e Zd ZdZeZy)Ú
SubrsIndexz¹This index contains a glyph's local subroutines. A local subroutine is a
    private set of ``CharString`` data which is accessible only to the glyph to
    which the index is attached.N)r—   r˜   r™   rš   rù   r  r›   rA   r!   r;  r;  ù  s   „ ñ$ð "�MrA   r;  c                   ó4   ‡ — e Zd ZdZeZdˆ fd„	Zd„ Zd„ Zˆ xZ	S )r4   a‡  This index represents the array of ``TopDict`` structures in the font
    (again, usually only one entry is present). Hence the following calls are
    equivalent:

    .. code:: python

            tt["CFF "].cff[0]
            # <fontTools.cffLib.TopDict object at 0x102ed6e50>
            tt["CFF "].cff.topDictIndex[0]
            # <fontTools.cffLib.TopDict object at 0x102ed6e50>

    c                 óØ  •— || _         |�Ë|rÉ|| _        g | _        | j                  j                  }t
        j                  t        d||j                  «       «       || _        d}d g|z  | _        d|g| _	        |j                  «       | _
        |j                  | j                  |z   «       t
        j                  t        d||j                  «       «       y t        t        | �;  ||¬«       y )Nr  r   r   r  r#   )r?   r	  r»   rá   r—   r¦   r§   r©   r=   rÁ   r  r/   rà   r4   r    )r<   r=   r?   ÚtopSizer$   rS   r­   rá   s          €r!   r    zTopDictIndex.__init__  s¼   ø€ Ø!2ˆÔØÐ¡Ø!ˆDŒLØˆDŒJØ—>‘>×*Ñ*ˆDÜ�G‰G”EÐ-¨t°T·Y±Y³[ÔAØˆDŒIØˆEØ˜ %™ˆDŒJØ˜w˜<ˆDŒLØ"Ÿi™i›kˆDŒOà�I‰I�d—o‘o¨Ñ/Ô0Ü�G‰G”EÐ0°$¸¿	¹	»ÕDä”, Ñ.¨t¸FÐ.ÕCrA   c                 óš   — t        | j                  ||| j                  | j                  | j                  ¬«      }|j                  |«       |S r  )rz   r7   r;   r?   r	  r@   )r<   rO   rž   r=   rÏ   Útops         r!   r  zTopDictIndex.produceItem#  sE   € ÜØ�L‰LØØØ×ÑØ×"Ñ"Ø—<‘<ô
ˆð 	�‰�dÔØˆ
rA   c                 óæ   — t        t        | «      «      D ]Z  }|j                  d|¬«       |j                  «        | |   j	                  |«       |j                  d«       |j                  «        Œ\ y ©NÚFontDictr0  ©r  rC   rq   rp   rr   rs   ©r<   rt   r3  s      r!   rr   zTopDictIndex.toXML/  óc   € Ü”s˜4“yÓ!ò 	 ˆAØ×Ñ˜z°ÐÔ3Ø×ÑÔØ�‰G�M‰M˜)Ô$Ø×Ñ˜ZÔ(Ø×ÑÕñ	 rA   )NNr   N)
r—   r˜   r™   rš   r¨   r  r    r  rr   rä   rå   s   @r!   r4   r4     s   ø„ ñð )€MõDò$
ö rA   r4   c                   ó"   — e Zd ZeZd„ Zd„ Zd„ Zy)ÚFDArrayIndexc                 óæ   — t        t        | «      «      D ]Z  }|j                  d|¬«       |j                  «        | |   j	                  |«       |j                  d«       |j                  «        Œ\ y rB  rD  rE  s      r!   rr   zFDArrayIndex.toXML;  rF  rA   c                 óš   — t        | j                  ||| j                  | j                  | j                  ¬«      }|j                  |«       |S ©N)r$   r}   )rC  r7   r;   r	  r}   r@   )r<   rO   rž   r=   rÏ   r„   s         r!   r  zFDArrayIndex.produceItemC  sE   € ÜØ�L‰LØØØ×ÑØ—<‘<Ø—;‘;ô
ˆð 	×Ñ˜4Ô ØˆrA   c                 ó¨   — |dk7  ry t        «       }|D ],  }t        |t        «      rŒ|\  }}}|j                  |||«       Œ. | j	                  |«       y )NrC  )rC  rM   rN   r{   r`   )r<   rS   r€   r�   r„   r‚   s         r!   r{   zFDArrayIndex.fromXMLO  s\   € Ø�:ÒØÜ“:ˆØò 	3ˆGÜ˜'¤3Ô'ØØ#*Ñ ˆD�%˜Ø×Ñ˜T 5¨'Õ2ð		3ð
 	�‰�HÕrA   N)r—   r˜   r™   rç   r  rr   r  r{   r›   rA   r!   rH  rH  8  s   „ Ø(€Mò ò
ó	rA   rH  c                   ó8   — e Zd Zd	d„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	y)
ÚVarStoreDataNc                 óL   — || _         d | _        || _        t        «       | _        y r   )r=   rž   Ú
otVarStorer   rv   )r<   r=   rP  s      r!   r    zVarStoreData.__init__\  s    € ØˆŒ	ØˆŒ	Ø$ˆŒÜ“Hˆ�	rA   c                 óŽ  — | j                   r¸t        | j                   «      }|dk(  r | j                   j                  «       | _        n | j                   j                  |«      | _        i }t	        | j                  |«      }t        j                  «       | _        | j                  j                  || j                  «       d | _        | S ©Niÿÿ  )
r=   r  r*   rž   r   Úotrx   rP  r@   rv   )r<   ÚlengthÚglobalStateÚreaders       r!   r@   zVarStoreData.decompileb  sŠ   € Ø�9Š9ä §	¡	Ó*ˆFà˜ŠØ ŸI™IŸN™NÓ,�•	à ŸI™IŸN™N¨6Ó2�”	ØˆKÜ" 4§9¡9¨kÓ:ˆFÜ Ÿk™k›mˆDŒOØ�O‰O×%Ñ% f¨d¯i©iÔ8ØˆDŒIØˆrA   c                 óŽ   — t        «       }| j                  j                  || j                  «       |j	                  «       | _        y r   )r   rP  rh   rv   Ú
getAllDatarž   )r<   rd   s     r!   rh   zVarStoreData.compiler  s3   € Ü“ˆØ�‰×Ñ ¨¯	©	Ô2ð ×%Ñ%Ó'ˆ�	rA   c                 óP   — | j                   j                  || j                  «       y r   )rP  rr   rv   )r<   rt   rS   s      r!   ÚwriteXMLzVarStoreData.writeXMLy  s   € Ø�‰×Ñ˜i¨¯©Õ3rA   c                 óÂ   — t        j                  «       | _        |D ]A  }t        |t        «      r/|\  }}}| j                  j                  |||| j                  «       ŒBŒC y r   )rS  rx   rP  rM   Útupler{   rv   )r<   rS   r€   r�   r¼   r‚   s         r!   ÚxmlReadzVarStoreData.xmlRead|  sX   € ÜŸ+™+›-ˆŒØò 	ˆGÜ˜'¤5Ô)Ø'.Ñ$��e˜WØ—‘×'Ñ'¨¨e°W¸d¿i¹iÕHàð	ð rA   c                 ó,   — t        | j                  «      S r   ©rC   rž   rD   s    r!   rE   zVarStoreData.__len__†  ó   € Ü�4—9‘9‹~ÐrA   c                 óX   — |€d}| j                   j                  |   }|j                  }|S rß   )rP  ÚVarDataÚVarRegionCount)r<   ÚvsIndexÚvarDataÚ
numRegionss       r!   ÚgetNumRegionszVarStoreData.getNumRegions‰  s1   € Øˆ?ØˆGØ—/‘/×)Ñ)¨'Ñ2ˆØ×+Ñ+ˆ
ØÐrA   r#  )
r—   r˜   r™   r    r@   rh   rZ  r]  rE   rg  r›   rA   r!   rN  rN  [  s%   „ óòò (ò4òòórA   rN  c                   ó,   — e Zd Zdd„Zd„ Zd„ Zd„ Zd„ Zy)ÚFDSelectNc                 ó  — |�ryt        |«      | _        | j                  dk(  r2ddlm}  |d|j                  |«      «      j	                  «       | _        y | j                  dk(  r€d g|z  }t        |«      }d }d }t        |«      D ]2  }	t        |«      }
|�t        ||
«      D ]  }|||<   Œ	 |
}t        |«      }Œ4 |�!t        |«      }
t        ||
«      D ]  }|||<   Œ	 || _        y | j                  dk(  r€d g|z  }t        |«      }d }d }t        |«      D ]2  }	t        |«      }
|�t        ||
«      D ]  }|||<   Œ	 |
}t        |«      }Œ4 |�!t        |«      }
t        ||
«      D ]  }|||<   Œ	 || _        y J d|z  «       ‚|| _        g | _        y )Nr   )Úarrayr   r   rW   zunsupported FDSelect format: %s)	r  Úformatrk  r*   ÚtolistÚgidArrayr  r  r
  )r<   r=   Ú	numGlyphsrl  rk  rn  ÚnRangesÚfdÚprevr3  ÚfirstÚglyphIDs               r!   r    zFDSelect.__init__’  sÌ  € Úä# D›/ˆDŒKØ�{‰{˜aÒÝ'á % c¨4¯9©9°YÓ+?Ó @× GÑ GÓ I�•Ø—‘ Ò!Ø ˜6 IÑ-�Ü$ TÓ*�Ø�Ø�Ü˜w›ò )�AÜ& tÓ,�EØÐ'Ü',¨T°5Ó'9ò 3˜GØ02˜H WÒ-ð3à �DÜ" 4›‘Bð)ð Ð#Ü& tÓ,�EÜ#(¨¨uÓ#5ò /˜Ø,.˜ Ò)ð/à (�•Ø—‘ Ò!Ø ˜6 IÑ-�Ü$ TÓ*�Ø�Ø�Ü˜w›ò *�AÜ& tÓ,�EØÐ'Ü',¨T°5Ó'9ò 3˜GØ02˜H WÒ-ð3à �DÜ# DÓ)‘Bð*ð Ð#Ü& tÓ,�EÜ#(¨¨uÓ#5ò /˜Ø,.˜ Ò)ð/à (�•àHÐ?À&ÑHÓH�uð !ˆDŒKØˆD�MrA   c                 ó,   — t        | j                  «      S r   )rC   rn  rD   s    r!   rE   zFDSelect.__len__Ä  s   € Ü�4—=‘=Ó!Ð!rA   c                 ó    — | j                   |   S r   ©rn  ©r<   rO   s     r!   rT   zFDSelect.__getitem__Ç  s   € Ø�}‰}˜UÑ#Ð#rA   c                 ó"   — || j                   |<   y r   rw  )r<   rO   ÚfdSelectValues      r!   r  zFDSelect.__setitem__Ê  s   € Ø,ˆ�‰�eÒrA   c                 ó:   — | j                   j                  |«       y r   )rn  r`   )r<   rz  s     r!   r`   zFDSelect.appendÍ  s   € Ø�‰×Ñ˜]Õ+rA   )NNN)r—   r˜   r™   r    rE   rT   r  r`   r›   rA   r!   ri  ri  ‘  s   „ ó0òd"ò$ò-ó,rA   ri  c                   óV   — e Zd ZdZ	 	 dd„Zd„ Zd„ Zd„ ZeZd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zy)r  a  The ``CharStrings`` in the font represent the instructions for drawing
    each glyph. This object presents a dictionary interface to the font's
    CharStrings, indexed by glyph name:

    .. code:: python

            tt["CFF "].cff[0].CharStrings["a"]
            # <T2CharString (bytecode) at 103451e90>

    See :class:`fontTools.misc.psCharStrings.T1CharString` and
    :class:`fontTools.misc.psCharStrings.T2CharString` for how to decompile,
    compile and interpret the glyph drawing instructions in the returned objects.

    Nc	                 ó  — || _         || _        |�Ht        ||||||¬«      | _        i x| _        }	t        t        |«      «      D ]
  }
|
|	||
   <   Œ d| _        y i | _        d| _        || _        |�|| _	        |�|| _
        y y )Nr#   r   r   )r&  ÚvarStorer;  ÚcharStringsIndexÚcharStringsr  rC   ÚcharStringsAreIndexedr'  r(  rƒ   )r<   r=   rX   r&  r'  r(  rƒ   r$   r~  r€  r3  s              r!   r    zCharStrings.__init__á  s¨   € ð 'ˆÔØ ˆŒØÐÜ$.Ø�k 7¨H°gÀfô%ˆDÔ!ð .0Ð/ˆDÔ˜{Üœ3˜w›<Ó(ò ,�Ø*+�˜G A™JÒ'ð,ð *+ˆDÕ&à!ˆDÔà)*ˆDÔ&Ø"ˆDŒLØÐ#Ø (�”ØÐ"Ø&�•ð #rA   c                 óH   — t        | j                  j                  «       «      S r   )r1   r€  rG   rD   s    r!   rG   zCharStrings.keys  s   € Ü�D×$Ñ$×)Ñ)Ó+Ó,Ð,rA   c                 óx   — | j                   r| j                  S t        | j                  j	                  «       «      S r   )r�  r  r1   r€  rI   rD   s    r!   rI   zCharStrings.values  s1   € Ø×%Ò%Ø×(Ñ(Ð(ä˜×(Ñ(×/Ñ/Ó1Ó2Ð2rA   c                 ó   — || j                   v S r   )r€  )r<   rS   s     r!   Úhas_keyzCharStrings.has_key  s   € Ø�t×'Ñ'Ð'Ð'rA   c                 ó,   — t        | j                  «      S r   )rC   r€  rD   s    r!   rE   zCharStrings.__len__  s   € Ü�4×#Ñ#Ó$Ð$rA   c                 óZ   — | j                   |   }| j                  r| j                  |   }|S r   )r€  r�  r  )r<   rS   Ú
charStrings      r!   rT   zCharStrings.__getitem__  s1   € Ø×%Ñ% dÑ+ˆ
Ø×%Ò%Ø×.Ñ.¨zÑ:ˆJØÐrA   c                 óx   — | j                   r| j                  |   }|| j                  |<   y || j                  |<   y r   )r�  r€  r  )r<   rS   rˆ  rO   s       r!   r  zCharStrings.__setitem__  s;   € Ø×%Ò%Ø×$Ñ$ TÑ*ˆEØ+5ˆD×!Ñ! %Ò(à%/ˆD×Ñ˜TÒ"rA   c                 óþ   — | j                   r*| j                  |   }| j                  j                  |«      S t	        | d«      r)t	        | d«      r| j                  |   j
                  }nd}nd }| j                  |   |fS )Nrƒ   r(  r   )r�  r€  r  r7  rL   ÚfdSelectIndex)r<   rS   rO   r6  s       r!   r7  zCharStrings.getItemAndSelector   s|   € Ø×%Ò%Ø×$Ñ$ TÑ*ˆEØ×(Ñ(×;Ñ;¸EÓBÐBä�t˜YÔ'Ü˜4 Ô,Ø×*Ñ*¨4Ñ0×>Ñ>‘Cà‘Cà�Ø×#Ñ# DÑ)¨3Ð.Ð.rA   c                 óˆ  — t        | j                  «       «      }|D ]¤  }| j                  |«      \  }}|j                  «       rdg}ng }|€|j	                  dd|fg|z   «       n|j	                  dd|fd|fg|z   «       |j                  «        |j                  |«       |j                  d«       |j                  «        Œ¦ y )N)r/  r   r.  rS   r‹  )ÚsortedrG   r7  r2  rq   rp   rr   rs   )r<   rt   ÚnamesrS   ÚcharStrr‹  r/  s          r!   rr   zCharStrings.toXML.  sË   € Ü�t—y‘y“{Ó#ˆØò 	 ˆDØ%)×%<Ñ%<¸TÓ%BÑ"ˆG�]Ø×)Ñ)Ô+Ø!�l‘à�ØÐ$Ø×"Ñ" <°6¸4°.Ð1AÀCÑ1GÕHà×"Ñ"Ø Ø˜d�^ o°}Ð%EÐFÈÑLôð ×ÑÔØ�M‰M˜)Ô$Ø×Ñ˜\Ô*Ø×ÑÕñ!	 rA   c                 óŽ  — |D ]¯  }t        |t        «      rŒ|\  }}}|dk7  rŒ d}t        | d«      r)	 t        |d   «      }| j
                  |   j                  }n| j                  }|d   }t        j                  } ||| j                  ¬«      }	|	j                  |||«       |dk\  r||	_        |	| |<   Œ± y # t        $ r d}Y Œƒw xY w)Nr.  r¥   rƒ   r‹  r   rS   r*  )rM   rN   rL   r   rP   rƒ   ry   r'  r   r~   r&  r{   r‹  )
r<   rS   r€   r�   r‚   ÚfdIDr'  Ú	glyphNamer9  rˆ  s
             r!   r{   zCharStrings.fromXMLB  sÝ   € Øò 	)ˆGÜ˜'¤3Ô'ØØ#*Ñ ˆD�%˜Ø�|Ò#ØØˆDÜ�t˜YÔ'ðÜ# E¨/Ñ$:Ó;�Dð Ÿ,™, tÑ,×4Ñ4‘àŸ,™,�à˜f™ˆIÜ+×8Ñ8ˆOÙ(°Àd×FVÑFVÔWˆJØ×Ñ˜t U¨GÔ4Ø�qŠyØ+/�
Ô(Ø(ˆD�ŠOñ-	)øô  ò Ø’Dðús   ²B6Â6CÃCr#  )r—   r˜   r™   rš   r    rG   rI   r…  Ú__contains__rE   rT   r  r7  rr   r{   r›   rA   r!   r  r  Ñ  sI   „ ñð. Øó'òB-ò3ò(ð €Lò%òò0ò/ò ó()rA   r  c                 ó6   — t        | j                  d«      «      S r  )r   r*   )r=   s    r!   r  r  \  s   € Ü�4—9‘9˜Q“<Ó Ð rA   c                 óT   — t        j                  d| j                  d«      «      \  }|S )Nr%   r   ©r-   r(   r*   ©r=   rk   s     r!   r  r  `  ó!   € Ü�}‰}˜T 4§9¡9¨Q£<Ó0�H€UØ€LrA   c                 óT   — t        j                  d| j                  d«      «      \  }|S )Nr  rW   r–  r—  s     r!   r
  r
  e  r˜  rA   c                 ó8   — | j                  t        |«      «       y r   )r«   r   r—  s     r!   rÎ   rÎ   j  s   € Ø‡J�JŒw�u‹~ÕrA   c                 óN   — | j                  t        j                  d|«      «       y ©Nr%   ©r«   r-   r^   r—  s     r!   rÍ   rÍ   n  ó   € Ø‡J�JŒv�{‰{˜4 Ó'Õ(rA   c                 óN   — | j                  t        j                  d|«      «       y ©Nr  r�  r—  s     r!   rÌ   rÌ   r  rž  rA   c                 ó   — t        | «      S r   )r   rj   s    r!   Ú	packCard8r¢  v  s   € Ü�5‹>ÐrA   c                 ó.   — t        j                  d| «      S rœ  ©r-   r^   rj   s    r!   Ú
packCard16r¥  z  ó   € Ü�;‰;�t˜UÓ#Ð#rA   c                 ó.   — t        j                  d| «      S r   r¤  rj   s    r!   Ú
packCard32r¨  ~  r¦  rA   c                 ó2   — i }| D ]  \  }}}}}||f||<   Œ |S r   r›   ©r¢   ÚdÚoprS   ÚargÚdefaultÚconvs          r!   ÚbuildOperatorDictr°  ‚  s3   € Ø
€AØ(-ò Ñ$ˆˆD�#�w Ø�s�ˆˆ"Šðà€HrA   c                 ó¤   — i }| D ]H  \  }}}}}t        |t        «      rt        |d   «      t        |d   «      z   }nt        |«      }||f||<   ŒJ |S ©Nr   r   )rM   r\  r   rª  s          r!   ÚbuildOpcodeDictr³  ‰  sb   € Ø
€AØ(-ò Ñ$ˆˆD�#�w Ü�bœ%Ô Ü˜˜A™“¤'¨"¨Q©%£.Ñ0‰Bä˜“ˆBØ�s�)ˆˆ$Šðð €HrA   c                 óF   — g }| D ]  \  }}}}}|j                  |«       Œ |S r   )r`   )r¢   Úlr¬  rS   r­  r®  r¯  s          r!   Ú
buildOrderr¶  ”  s1   € Ø
€AØ(-ò Ñ$ˆˆD�#�w Ø	�‰��ðà€HrA   c                 ó4   — i }| D ]  \  }}}}}|€Œ|||<   Œ |S r   r›   rª  s          r!   ÚbuildDefaultsr¸  ›  s7   € Ø
€AØ(-ò Ñ$ˆˆD�#�w ØÑØˆAˆdŠGðð €HrA   c                 ó.   — i }| D ]  \  }}}}}|||<   Œ |S r   r›   rª  s          r!   ÚbuildConvertersrº  £  s/   € Ø
€AØ(-ò Ñ$ˆˆD�#�w Øˆˆ$Šðà€HrA   c                   ó*   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚSimpleConverterc                 óê   — t        |d«      s| j                  ||«      S |j                  }|j                  «       }	 | j                  ||«      |j	                  |«       S # |j	                  |«       w xY w)Nr=   )rL   Ú_readr=   r©   r/   )r<   r¼   rk   r=   r®   s        r!   r*   zSimpleConverter.read«  s[   € Ü�v˜vÔ&Ø—:‘:˜f eÓ,Ð,Ø�{‰{ˆØ�i‰i‹kˆð	Ø—:‘:˜f eÓ,à�I‰I�c�NøˆD�I‰I�c�Nús   ¼A ÁA2c                 ó   — |S r   r›   ©r<   r¼   rk   s      r!   r¾  zSimpleConverter._readµ  r¿   rA   c                 ó   — |S r   r›   rÀ  s      r!   r«   zSimpleConverter.write¸  r¿   rA   c                 óJ   — |j                  ||¬«       |j                  «        y )Nrj   )ro   rp   ©r<   rt   rS   rk   s       r!   ÚxmlWritezSimpleConverter.xmlWrite»  s!   € Ø×Ñ˜D¨ÐÔ.Ø×ÑÕrA   c                 ó   — |d   S ©Nrk   r›   ©r<   rS   r€   r�   r¼   s        r!   r]  zSimpleConverter.xmlRead¿  s   € Ø�W‰~ÐrA   N)r—   r˜   r™   r*   r¾  r«   rÄ  r]  r›   rA   r!   r¼  r¼  ª  s   „ òòòòórA   r¼  c                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)ÚASCIIConverterc                 ó   — t        |d¬«      S ©NÚasciirÊ   r   rÀ  s      r!   r¾  zASCIIConverter._readÄ  s   € Ü�U WÔ-Ð-rA   c                 ó   — t        |d¬«      S rË  ©r
   rÀ  s      r!   r«   zASCIIConverter.writeÇ  s   € Ü�u wÔ/Ð/rA   c                 ó`   — |j                  |t        |d¬«      ¬«       |j                  «        y )NrÌ  rÊ   rj   ©ro   r   rp   rÃ  s       r!   rÄ  zASCIIConverter.xmlWriteÊ  s(   € Ø×Ñ˜D¬¨e¸gÔ(FÐÔGØ×ÑÕrA   c                 ó"   — t        |d   d¬«      S )Nrk   rÌ  rÊ   rÎ  rÇ  s        r!   r]  zASCIIConverter.xmlReadÎ  s   € Ü�u˜W‘~°Ô:Ð:rA   N©r—   r˜   r™   r¾  r«   rÄ  r]  r›   rA   r!   rÉ  rÉ  Ã  s   „ ò.ò0òó;rA   rÉ  c                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)ÚLatin1Converterc                 ó   — t        |d¬«      S ©NrÉ   rÊ   r   rÀ  s      r!   r¾  zLatin1Converter._readÓ  s   € Ü�U XÔ.Ð.rA   c                 ó   — t        |d¬«      S rÖ  rÎ  rÀ  s      r!   r«   zLatin1Converter.writeÖ  s   € Ü�u xÔ0Ð0rA   c                 óš   — t        |d¬«      }|dv rt        j                  dd|«      }|j                  ||¬«       |j	                  «        y )NrÉ   rÊ   )ÚNoticeÚ	Copyrightz	[\r\n]\s+ú rj   )r   ÚreÚsubro   rp   rÃ  s       r!   rÄ  zLatin1Converter.xmlWriteÙ  sH   € Ü�e hÔ/ˆØÐ*Ñ*Ü—F‘F˜<¨¨eÓ4ˆEØ×Ñ˜D¨ÐÔ.Ø×ÑÕrA   c                 ó"   — t        |d   d¬«      S )Nrk   rÉ   rÊ   rÎ  rÇ  s        r!   r]  zLatin1Converter.xmlReadà  s   € Ü�u˜W‘~°Ô;Ð;rA   NrÒ  r›   rA   r!   rÔ  rÔ  Ò  s   „ ò/ò1òó<rA   rÔ  c                 óD   — 	 t        | «      }|S #  t        | «      }Y |S xY wr   )r   Úfloat)r    rk   s     r!   ÚparseNumrá  ä  s,   € ðÜ�A“ˆð €LøðÜ�a“‰Ø€Lús   ‚ �c                 óî   — g }| D ]U  }t        |t        «      rŒ|\  }}}|d   j                  «       }|D �cg c]  }t        |«      ‘Œ }}|j	                  |«       ŒW t        |«      dk(  r|d   }|S c c}w )Nrk   r   r   )rM   rN   ÚsplitÚevalr`   rC   )r    Ú	valueListr‚   rS   r€   r�   Ú	blendListÚvals           r!   ÚparseBlendListrè  ì  sˆ   € Ø€IØò $ˆÜ�gœsÔ#ØØ&Ñˆˆe�WØ˜'‘N×(Ñ(Ó*ˆ	Ø*3Ö4 3”T˜#•YÐ4ˆ	Ð4Ø×Ñ˜Õ#ð$ô ˆ9ƒ~˜ÒØ˜a‘Lˆ	ØÐùò	 5s   ¶A2c                   ó   — e Zd Zd„ Zd„ Zy)ÚNumberConverterc                 óØ  — t        |t        «      r²|j                  |«       |j                  «        |j	                  «        dj                  |D �cg c]  }t        |«      ‘Œ c}«      }|j                  t        |¬«       |j                  «        |j                  «        |j                  |«       |j                  «        y |j                  ||¬«       |j                  «        y c c}w )NrÛ  rj   ©rM   r1   rq   rp   ÚindentÚjoinrN   ro   ÚkBlendDictOpNameÚdedentrs   )r<   rt   rS   rk   rç  Ú
blendValues         r!   rÄ  zNumberConverter.xmlWriteû  s¹   € Ü�eœTÔ"Ø×Ñ˜tÔ$Ø×ÑÔØ×ÑÔØŸ™°uÖ"=°¤3 s¥8Ò"=Ó>ˆJØ×ÑÔ 0¸
ÐÔCØ×ÑÔØ×ÑÔØ×Ñ˜TÔ"Ø×ÑÕà×Ñ ¨EÐÔ2Ø×ÑÕùò #>s   ÁC'c                 ód   — |j                  dd «      }|€t        |«      }|S t        |d   «      }|S rÆ  )Úgetrè  rá  )r<   rS   r€   r�   r¼   ÚvalueStringrk   s          r!   r]  zNumberConverter.xmlRead
  s>   € Ø—i‘i ¨Ó.ˆØÐÜ" 7Ó+ˆEð ˆô ˜U 7™^Ó,ˆEØˆrA   N©r—   r˜   r™   rÄ  r]  r›   rA   r!   rê  rê  ú  s   „ ò órA   rê  c                   ó   — e Zd Zd„ Zd„ Zy)ÚArrayConverterc           	      óJ  — |rÌt        |d   t        «      r¹|j                  |«       |j                  «        |j	                  «        |D ]Q  }dj                  |D �cg c]  }t        |«      ‘Œ c}«      }|j                  t        |¬«       |j                  «        ŒS |j                  «        |j                  |«       |j                  «        y dj                  |D �cg c]  }t        |«      ‘Œ c}«      }|j                  ||¬«       |j                  «        y c c}w c c}w )Nr   rÛ  rj   rì  )r<   rt   rS   rk   rå  rç  rñ  s          r!   rÄ  zArrayConverter.xmlWrite  só   € Ù”Z  a¡¬$Ô/Ø×Ñ˜tÔ$Ø×ÑÔØ×ÑÔØ"ò $�	Ø ŸX™X¸9Ö&E°C¤s¨3¥xÒ&EÓF�
Ø×#Ñ#Ô$4¸JÐ#ÔGØ×!Ñ!Õ#ð$ð ×ÑÔØ×Ñ˜TÔ"Ø×ÑÕà—H‘H°%Ö8¨3œc #�hÒ8Ó9ˆEØ×Ñ ¨EÐÔ2Ø×ÑÕùò 'Fùò 9s   ÁD
ÃD c                 ó¢   — |j                  dd «      }|€t        |«      }|S |j                  «       }|D �cg c]  }t        |«      ‘Œ }}|S c c}w rÆ  )ró  rè  rã  rá  )	r<   rS   r€   r�   r¼   rô  rå  rI   rk   s	            r!   r]  zArrayConverter.xmlRead%  s\   € Ø—i‘i ¨Ó.ˆØÐÜ& wÓ/ˆIð Ðð !×&Ñ&Ó(ˆFØ6<Ö=¨Uœ %�Ð=ˆIÐ=ØÐùò >s   ¶ANrõ  r›   rA   r!   r÷  r÷    s   „ ò ó"rA   r÷  c                   ó   — e Zd Zd„ Zd„ Zy)ÚTableConverterc                 óª   — |j                  |«       |j                  «        |j                  |«       |j                  |«       |j                  «        y r   )rq   rp   rr   rs   rÃ  s       r!   rÄ  zTableConverter.xmlWrite0  sB   € Ø×Ñ˜4Ô Ø×ÑÔØ�‰�IÔØ×Ñ˜ÔØ×ÑÕrA   c                 ó’   —  | j                  «       «       }|D ],  }t        |t        «      rŒ|\  }}}|j                  |||«       Œ. |S r   )ÚgetClassrM   rN   r{   )r<   rS   r€   r�   r¼   Úobr‚   s          r!   r]  zTableConverter.xmlRead7  sQ   € ØˆT�]‰]‹_ÓˆØò 	-ˆGÜ˜'¤3Ô'ØØ#*Ñ ˆD�%˜Ø�J‰J�t˜U GÕ,ð		-ð
 ˆ	rA   Nrõ  r›   rA   r!   rû  rû  /  s   „ òórA   rû  c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)ÚPrivateDictConverterc                 ó   — t         S r   )ÚPrivateDictrD   s    r!   rþ  zPrivateDictConverter.getClassB  s   € ÜÐrA   c                 ó6  — |\  }}|j                   }|j                  }	 |j                  }t	        |j
                  ||||¬«      }|j                  |«       |j                  |«      }	t        |	«      |k(  sJ ‚|j                  |	«       |S # t        $ r d }Y Œlw xY wrK  )
r=   r	  r}   ÚAttributeErrorr  r7   r/   r*   rC   r@   )
r<   r¼   rk   r  rÏ   r=   r$   r}   Úprivrž   s
             r!   r¾  zPrivateDictConverter._readE  s•   € Ø‰ˆˆfØ�{‰{ˆØ—‘ˆð	Ø—]‘]ˆFô ˜6Ÿ>™>¨4°ÀÈvÔVˆØ�	‰	�&ÔØ�y‰y˜‹ˆÜ�4‹y˜DÒ Ð Ð Ø�‰�tÔØˆøô ò 	ØŠFð	ús   ŸB
 Â
BÂBc                  ó   — y)N)r   r   r›   rÀ  s      r!   r«   zPrivateDictConverter.writeT  s   € ØrA   N©r—   r˜   r™   rþ  r¾  r«   r›   rA   r!   r  r  A  s   „ òòórA   r  c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)ÚSubrsConverterc                 ó   — t         S r   )r;  rD   s    r!   rþ  zSubrsConverter.getClassY  s   € ÜÐrA   c                 óˆ   — |j                   }|j                  }|j                  |j                  |z   «       t	        ||¬«      S r  )r=   r	  r/   rÏ   r;  )r<   r¼   rk   r=   r$   s        r!   r¾  zSubrsConverter._read\  s6   € Ø�{‰{ˆØ—‘ˆØ�	‰	�&—-‘- %Ñ'Ô(Ü˜$ vÔ.Ð.rA   c                  ó   — yrß   r›   rÀ  s      r!   r«   zSubrsConverter.writeb  ó   € ØrA   Nr  r›   rA   r!   r
  r
  X  s   „ òò/órA   r
  c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)ÚCharStringsConverterc           
      óV  — |j                   }|j                  }|j                  }t        |dd «      }|j                  }t        |d«      r*|j                  }t        |d«      r|j                  }	nd }	d }
nd\  }	}|j                  }
|j                  |«       t        ||||
|	|||¬«      }|S )Nrx   r|   ri  r#  )r$   r~  )r=   r	  rX   Úgetattrr;   rL   r|   ri  ry   r/   r  )r<   r¼   rk   r=   r$   rX   r~  r&  rƒ   r(  r'  r€  s               r!   r¾  zCharStringsConverter._readg  s¯   € Ø�{‰{ˆØ—‘ˆØ—.‘.ˆÜ˜6 :¨tÓ4ˆØ×(Ñ(ˆÜ�6˜9Ô%Ø—n‘nˆGÜ�v˜zÔ*Ø!Ÿ?™?‘à�Ø‰Gà *ÑˆH�gØ—n‘nˆGØ�	‰	�%ÔÜ!ØØØØØØØØô	
ˆð ÐrA   c                  ó   — yrß   r›   rÀ  s      r!   r«   zCharStringsConverter.write„  r  rA   c                 ó  — t        |d«      r*|j                  }t        |d«      r|j                  }nd }d }n|j                  d d }}}t	        d d |j
                  |||t        |dd «      ¬«      }|j                  |||«       |S )Nr|   ri  rx   )r~  )rL   r|   ri  ry   r  r;   r  r{   )	r<   rS   r€   r�   r¼   rƒ   r(  r'  r€  s	            r!   r]  zCharStringsConverter.xmlRead‡  s�   € Ü�6˜9Ô%ð —n‘nˆGÜ�v˜zÔ*Ø!Ÿ?™?‘à�Ø‰Gð
 *0¯©¸¸t˜w�XˆGÜ!ØØØ×ÑØØØÜ˜V Z°Ó6ô
ˆð 	×Ñ˜D %¨Ô1ØÐrA   N©r—   r˜   r™   r¾  r«   r]  r›   rA   r!   r  r  f  s   „ òò:órA   r  c                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)ÚCharsetConverterc                 óz  — t        |d«      }|dkD  �rB|j                  }|j                  }|j                  |«       t        j	                  t
        d|«       t        |«      }|dk(  rt        |||j                  |«      }n*|dk(  s|dk(  rt        |||j                  ||«      }nt        ‚t        |«      |k(  sJ ‚t        j	                  t
        d|j                  «       «       i }g }	|D ]f  }
|
|v rJ||
   }|
dz   t        |«      z   |v r|dz  }|
dz   t        |«      z   |v rŒ|dz   ||
<   |
dz   t        |«      z   }
d||
<   |	j                  |
«       Œh |	}n=|sd|j                  vr
|dk(  sJ ‚d }n#|dk(  rt         }n|dk(  rt"        }n|dk(  rt$        }r't        |«      |j                  k7  r|d |j                   }|S )	NÚROSr   zloading charset at %sr   r   z    charset end at %sú#r  )rL   ro  r=   r/   r¦   r§   r  ÚparseCharset0r7   ÚparseCharsetÚNotImplementedErrorrC   r©   rN   r`   rí   ÚcffISOAdobeStringsÚcffIExpertStringsÚcffExpertSubsetStrings)r<   r¼   rk   ÚisCIDro  r=   rl  rX   ÚallNamesÚ
newCharsetr’  Úns               r!   r¾  zCharsetConverter._read¤  sÌ  € Ü˜ Ó&ˆØ�1‹9Ø×(Ñ(ˆIØ—;‘;ˆDØ�I‰I�eÔÜ�G‰G”EÐ2°EÔ:Ü˜t“_ˆFØ˜Š{Ü'¨	°4¸¿¹ÈÓO‘Ø˜1’ ¨!¢Ü& y°$¸¿¹ÈÈvÓV‘ä)Ð)Ü�w“< 9Ò,Ð,Ð,Ü�G‰G”EÐ2°D·I±I³KÔ@àˆHØˆJØ$ò 	-�	Ø Ñ(à  Ñ+�AØ$ s™?¬S°«VÑ3¸Ñ@Ø˜Q™˜ð % s™?¬S°«VÑ3¸Ò@à*+¨a©%�H˜YÑ'Ø )¨C¡´#°a³&Ñ 8�IØ&'�˜Ñ#Ø×!Ñ! )Õ,ð	-ð !‰Gá˜¨V¯^©^Ñ;ð  ’zÐ!�zØ‘Ø˜!’Ü,‘Ø˜!’Ü+‘Ø˜!’Ü0�Ùœ˜G›¨×(8Ñ(8Ò8ØÐ0 × 0Ñ 0Ð1ˆGØˆrA   c                  ó   — yrß   r›   rÀ  s      r!   r«   zCharsetConverter.writeÒ  r  rA   c                 óF   — |j                  d«       |j                  «        y )Nz8charset is dumped separately as the 'GlyphOrder' element)r1  rp   rÃ  s       r!   rÄ  zCharsetConverter.xmlWriteÕ  s   € ð 	×ÑÐTÔUØ×ÑÕrA   c                  ó   — y r   r›   rÇ  s        r!   r]  zCharsetConverter.xmlReadÜ  ó   € ØrA   NrÒ  r›   rA   r!   r  r  £  s   „ ò,ò\òórA   r  c                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)ÚCharsetCompilerc                 óà   — |d   dk(  sJ ‚t        |j                  d«      }t        |||«      }t        |||«      }t	        |«      t	        |«      k  r|| _        || _        y || _        || _        y )Nr   ú.notdefr  )rL   ÚdictObjÚpackCharset0ÚpackCharsetrC   rž   r¼   )r<   r7   rX   r¼   r!  Údata0rž   s          r!   r    zCharsetCompiler.__init__á  sp   € Ø�q‰z˜YÒ&Ð&Ð&Ü˜Ÿ™¨Ó.ˆÜ˜W e¨WÓ5ˆÜ˜7 E¨7Ó3ˆÜˆt‹9”s˜5“zÒ!ØˆDŒIð ˆ�ð ˆDŒIØˆ�rA   c                 ó6   — || j                   j                  d<   y )NrX   rì   rî   s      r!   r¤   zCharsetCompiler.setPosì  rï   rA   c                 ó,   — t        | j                  «      S r   r_  rD   s    r!   r_   zCharsetCompiler.getDataLengthï  r`  rA   c                 ó:   — |j                  | j                  «       y r   ©r«   rž   ©r<   r=   s     r!   rb   zCharsetCompiler.toFileò  ó   € Ø�
‰
�4—9‘9ÕrA   N©r—   r˜   r™   r    r¤   r_   rb   r›   rA   r!   r*  r*  à  s   „ ò	ò-òórA   r*  c                 óÚ   — d }t         t        dft        t        dft        t
        dfg}t        | «      }|D ]2  \  }}}|� |S ||kD  rŒ|}t        |«      D ]  }| |   ||   k7  sŒd } Œ2 Œ4 |S )Nr   r   r   )ÚcffISOAdobeStringCountr  ÚcffExpertStringCountr  ÚcffExpertSubsetStringCountr   rC   r  )rX   ÚpredefinedCharSetValÚpredefinedCharSetsÚlcsÚcntÚpcsÚcsvr3  s           r!   ÚgetStdCharSetrB  ö  s¨   € àÐä	Ô!3°QÐ7Ü	Ô0°!Ð4Ü	#Ô%;¸QÐ?ðÐô
 ˆg‹,€CØ+ò 	‰ˆˆS�#ØÐ+Øð  Ðð �Š9ØØ"ÐÜ�s“ò 	ˆAØ�q‰z˜S ™VÓ#Ø'+Ð$Ùñ	ð	ð  ÐrA   c                 ó   — t        | dd  «      S )Nr   )r   ©rS   r7   s     r!   ÚgetCIDfromNamerE    s   € Üˆt�A�Bˆx‹=ÐrA   c                 ó$   — |j                  | «      S r   )ÚgetSIDrD  s     r!   ÚgetSIDfromNamerH    s   € Ø�>‰>˜$ÓÐrA   c           	      ó¨   — d}t        |«      g}|rt        }nt        }| dd  D ]#  }|j                  t	         |||«      «      «       Œ% t        |«      S r²  )r¢  rE  rH  r`   r¥  r	   )rX   r!  r7   Úfmtrž   Ú	getNameIDrS   s          r!   r.  r.    sW   € Ø
€CÜ�c‹NÐ€DÙÜ"‰	ä"ˆ	à˜˜�ò :ˆØ�‰”J™y¨¨wÓ7Ó8Õ9ð:ä�T‹?ÐrA   c                 ó¤  — d}g }d }d}|rt         }nt        }| dd  D ];  } |||«      }	|€|	}n)|dz   |	k7  r!||z
  }
|
dkD  rd}|j                  ||
f«       |	}|	}Œ= |r||z
  }
|
dkD  rd}|j                  ||
f«       t        |«      g}|dk(  rt        }nt        }|D ](  \  }}
|j                  t	        |«       ||
«      z   «       Œ* t        |«      S )Nr   r   éÿ   r   )rE  rH  r`   r¢  r¥  r	   )rX   r!  r7   rJ  Úrangesrs  ÚendrK  rS   ÚSIDÚnLeftrž   Ú	nLeftFuncs                r!   r/  r/  !  s  € Ø
€CØ€FØ€EØ
€CÙÜ"‰	ä"ˆ	à˜˜�ò 
ˆÙ˜˜gÓ&ˆØˆ=Ø‰EØ�1‰W˜Š^Ø˜%‘KˆEØ�sŠ{Ø�Ø�M‰M˜5 %˜.Ô)ØˆEØ‰ð
ñ Ø�e‘ˆØ�3Š;ØˆCØ�‰�u˜e�nÔ%ä�c‹NÐ€DØ
ˆa‚xÜ‰	äˆ	Øò :‰ˆˆuØ�‰”J˜uÓ%©	°%Ó(8Ñ8Õ9ð:ä�T‹?ÐrA   c                 ó  — dg}|rLt        | dz
  «      D ]9  }t        |«      }|j                  dt        |«      j	                  d«      z   «       Œ; |S t        | dz
  «      D ]!  }t        |«      }|j                  ||   «       Œ# |S ©Nr,  r   ÚcidrV   )r  r  r`   rN   Úzfill)ro  r=   r7   r!  rX   r3  ÚCIDrP  s           r!   r  r  F  sŽ   € Øˆk€GÙÜ�y 1‘}Ó%ò 	6ˆAÜ˜TÓ"ˆCØ�N‰N˜5¤3 s£8§>¡>°!Ó#4Ñ4Õ5ð	6ð €Nô �y 1‘}Ó%ò 	)ˆAÜ˜TÓ"ˆCØ�N‰N˜7 3™<Õ(ð	)ð €NrA   c                 ób  — dg}d}|dk(  rt         }nt        }|| k  r’t        |«      } ||«      }	|rDt        |||	z   dz   «      D ].  }
|j                  dt	        |
«      j                  d«      z   «       Œ0 n+t        |||	z   dz   «      D ]  }|j                  ||   «       Œ ||	z   dz   }|| k  rŒ’|S rT  )r  r  r  r`   rN   rV  )ro  r=   r7   r!  rJ  rX   r­   rR  rs  rQ  rW  rP  s               r!   r  r  S  sÊ   € Øˆk€GØ€EØ
ˆa‚xÜ‰	äˆ	Ø
�)Ò
Ü˜4Ó ˆÙ˜$“ˆÙÜ˜U E¨E¡M°AÑ$5Ó6ò :�Ø—‘˜u¤s¨3£x§~¡~°aÓ'8Ñ8Õ9ñ:ô ˜U E¨E¡M°AÑ$5Ó6ò -�Ø—‘˜w s™|Õ,ð-à˜‘ Ñ!ˆð �)Ó
ð €NrA   c                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)ÚEncodingCompilerc                 ó<  — t        |t        «      rJ ‚t        |j                  j                  ||j
                  «      }t        |j                  j                  ||j
                  «      }t        |«      t        |«      k  r|| _        || _	        y || _        || _	        y r   )
rM   rN   ÚpackEncoding0r-  rX   r7   ÚpackEncoding1rC   rž   r¼   )r<   r7   rË   r¼   r0  Údata1s         r!   r    zEncodingCompiler.__init__h  sz   € Ü˜h¬Ô,Ð,Ð,Ü˜fŸn™n×4Ñ4°hÀÇÁÓOˆÜ˜fŸn™n×4Ñ4°hÀÇÁÓOˆÜˆu‹:œ˜E›
Ò"ØˆDŒIð ˆ�ð ˆDŒIØˆ�rA   c                 ó6   — || j                   j                  d<   y )NÚEncodingrì   rî   s      r!   r¤   zEncodingCompiler.setPosr  ó   € Ø*-ˆ�‰×Ñ˜JÒ'rA   c                 ó,   — t        | j                  «      S r   r_  rD   s    r!   r_   zEncodingCompiler.getDataLengthu  r`  rA   c                 ó:   — |j                  | j                  «       y r   r4  r5  s     r!   rb   zEncodingCompiler.toFilex  r6  rA   Nr7  r›   rA   r!   rZ  rZ  g  s   „ òò.òórA   rZ  c                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)ÚEncodingConverterc                 ó€  — |dk(  ry|dk(  ry|dkD  sJ ‚|j                   }|j                  |«       t        j                  t        d|«       t	        |«      }|dz  }|rt        d«      ‚|dz  }|dk(  r$t        |j                  |||j                  «      }|S |dk(  r"t        |j                  |||j                  «      }S )	Nr   ÚStandardEncodingr   ÚExpertEncodingzloading Encoding at %sé€   z*Encoding supplements are not yet supportedé   )
r=   r/   r¦   r§   r  r  ÚparseEncoding0rX   r7   ÚparseEncoding1)r<   r¼   rk   r=   rJ  ÚhaveSupplementrË   s          r!   r¾  zEncodingConverter._read}  sÆ   € Ø�AŠ:Ø%Ø�aŠZØ#à˜1’9Ð�9Ø—;‘;ˆDØ�I‰I�eÔÜ�G‰G”EÐ3°UÔ;Ü˜D“/ˆCØ  4™ZˆNÙÜ)Ð*VÓWÐWØ˜‘*ˆCØ�aŠxÜ)Ø—N‘N D¨.¸&¿.¹.ó�ð ˆOð	 ˜’Ü)Ø—N‘N D¨.¸&¿.¹.ó�ð ˆOrA   c                 ó   — |dk(  ry|dk(  ryy)Nrg  r   rh  r   r›   rÀ  s      r!   r«   zEncodingConverter.write–  s   € ØÐ&Ò&ØØÐ&Ò&ØØrA   c                 óz  — |dv r$|j                  ||¬«       |j                  «        y |j                  |«       |j                  «        t        t	        |«      «      D ]:  }||   }|dk7  sŒ|j                  dt        |«      |¬«       |j                  «        Œ< |j                  |«       |j                  «        y )N)rg  rh  rn   r,  Úmap)ÚcoderS   )ro   rp   rq   r  rC   Úhexrs   )r<   rt   rS   rk   rq  r’  s         r!   rÄ  zEncodingConverter.xmlWrite�  s±   € ØÐ:Ñ:Ø×Ñ ¨5ÐÔ1Ø×ÑÔØØ×Ñ˜4Ô Ø×ÑÔÜœ#˜e›*Ó%ò 	$ˆDØ˜d™ˆIØ˜IÓ%Ø×#Ñ# E´°D³	À	Ð#ÔJØ×!Ñ!Õ#ð		$ð
 	×Ñ˜ÔØ×ÑÕrA   c                 ó�   — d|v r|d   S dgdz  }|D ]1  }t        |t        «      rŒ|\  }}}t        |d   «      }|d   }|||<   Œ3 |S )NrS   r,  r´   rq  )rM   rN   r   )	r<   rS   r€   r�   r¼   rË   r‚   rq  r’  s	            r!   r]  zEncodingConverter.xmlRead¬  sn   € Ø�U‰?Ø˜‘=Ð Ø�; Ñ$ˆØò 	'ˆGÜ˜'¤3Ô'ØØ#*Ñ ˆD�%˜Ü˜E &™MÓ*ˆDØ˜f™ˆIØ&ˆH�TŠNð	'ð ˆrA   NrÒ  r›   rA   r!   re  re  |  s   „ òò2òórA   re  c                 ó‚   — t        |«      }dgdz  }t        d|dz   «      D ]  }t        |«      }|dk7  sŒ| |   ||<   Œ |S )Nr,  r´   r   r   ©r  r  )rX   r=   rm  r7   ÚnCodesrË   rt  rq  s           r!   rk  rk  º  sV   € Ü�t‹_€FØˆ{˜SÑ €HÜ˜˜F Q™JÓ'ò .ˆÜ˜‹ˆØ�1‹9Ø$ WÑ-ˆH�TŠNð.ð €OrA   c                 óÊ   — t        |«      }dgdz  }d}t        |«      D ]A  }t        |«      }t        |«      }	t        |||	z   dz   «      D ]  }| |   ||<   |dz   }Œ |dz   }ŒC |S )Nr,  r´   r   ru  )
rX   r=   rm  r7   rp  rË   rt  r3  rq  rQ  s
             r!   rl  rl  Ä  s‰   € Ü˜‹o€GØˆ{˜SÑ €HØ€GÜ�7‹^ò ˆÜ˜‹ˆÜ˜$“ˆÜ˜W g°¡o¸Ñ&9Ó:ò 	ˆGØ$ WÑ-ˆH�T‰NØ˜!‘8‰Dð	ð ˜A‘+‰ðð €OrA   c                 ó”  — d}i }t        t        |«      «      D ]  }||   }|dk7  sŒ|||<   Œ g }| dd  D ]$  }|j                  |«      }|j                  |«       Œ& |r|d   €|j	                  «        |r|d   €Œt        |«      t        t        |«      «      g}|D ]   }|€d}|j                  t        |«      «       Œ" t        |«      S )Nr   r,  r   r¥   ©r  rC   ró  r`   Úpopr¢  r	   )	rX   rË   r7   rJ  Úmrq  rS   Úcodesrž   s	            r!   r\  r\  Ò  sæ   € Ø
€CØ
€AÜ”c˜(“mÓ$ò ˆØ˜‰~ˆØ�9ÓØˆAˆdŠGðð €EØ˜˜�ò ˆØ�u‰u�T‹{ˆØ�‰�TÕðñ �E˜"‘IÐ%Ø�	‰	Œñ �E˜"‘IÑ%ô �c‹NœI¤c¨%£jÓ1Ð2€DØò %ˆØˆ<ØˆDØ�‰”I˜d“OÕ$ð%ô �T‹?ÐrA   c                 ó:  — d}i }t        t        |«      «      D ]  }||   }|dk7  sŒ|||<   Œ g }d }d}	| dd  D ]=  }|j                  |d«      }|€|}n"|	dz   |k7  r|	|z
  }
|j                  ||
f«       |}|}	Œ? |	|z
  }
|j                  ||
f«       |r)|d   d   dk(  r|j	                  «        |r|d   d   dk(  rŒt        |«      t        t        |«      «      g}|D ]2  \  }}
|dk(  rd}|j                  t        |«      t        |
«      z   «       Œ4 t        |«      S )Nr   r,  r   r¥   ry  )rX   rË   r7   rJ  r{  rq  rS   rN  rs  rO  rQ  rž   s               r!   r]  r]  é  sV  € Ø
€CØ
€AÜ”c˜(“mÓ$ò ˆØ˜‰~ˆØ�9ÓØˆAˆdŠGðð €FØ€EØ
€CØ˜˜�ò ˆØ�u‰u�T˜2‹ˆØˆ=Ø‰EØ�1‰W˜Š_Ø˜%‘KˆEØ�M‰M˜5 %˜.Ô)ØˆEØ‰ðð �%‰K€EØ
‡M�M�5˜%�.Ô!ñ �V˜B‘Z ‘] bÒ(Ø�
‰
Œñ �V˜B‘Z ‘] bÓ(ô �c‹NœI¤c¨&£kÓ2Ð3€DØò 9‰ˆˆuØ�BŠ;ØˆEØ�‰”I˜eÓ$¤y°Ó'7Ñ7Õ8ð9ô �T‹?ÐrA   c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)ÚFDArrayConverterc                 ó   — 	 |j                   }|j                  }|j                  }|j	                  |«       t        ||¬«      }||_        |j                  |_        |j                  |_        |S # t        $ r d }Y Œnw xY wr  )	rx   r  r=   r	  r/   rH  r}   r7   r;   )r<   r¼   rk   r}   r=   r$   rƒ   s          r!   r¾  zFDArrayConverter._read  sw   € ð	Ø—_‘_ˆFð �{‰{ˆØ—‘ˆØ�	‰	�%ÔÜ˜t¨FÔ3ˆØˆŒØ Ÿ.™.ˆŒØ$×0Ñ0ˆÔØˆøô ò 	ØŠFð	ús   ‚A/ Á/A=Á<A=c                  ó   — yrß   r›   rÀ  s      r!   r«   zFDArrayConverter.write  r  rA   c                 ó|   — t        «       }|D ],  }t        |t        «      rŒ|\  }}}|j                  |||«       Œ. |S r   )rH  rM   rN   r{   )r<   rS   r€   r�   r¼   rƒ   r‚   s          r!   r]  zFDArrayConverter.xmlRead  sH   € Ü“.ˆØò 	2ˆGÜ˜'¤3Ô'ØØ#*Ñ ˆD�%˜Ø�O‰O˜D %¨Õ1ð		2ð
 ˆrA   Nr  r›   rA   r!   r  r    s   „ òòórA   r  c                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)ÚFDSelectConverterc                 ól   — |j                   }|j                  |«       t        ||j                  «      }|S r   )r=   r/   ri  ro  )r<   r¼   rk   r=   r(  s        r!   r¾  zFDSelectConverter._read(  s.   € Ø�{‰{ˆØ�	‰	�%ÔÜ˜D &×"2Ñ"2Ó3ˆØˆrA   c                  ó   — yrß   r›   rÀ  s      r!   r«   zFDSelectConverter.write.  r  rA   c                 ób   — |j                  |d|j                  fg«       |j                  «        y ©Nrl  )ro   rl  rp   rÃ  s       r!   rÄ  zFDSelectConverter.xmlWrite3  s*   € Ø×Ñ˜D H¨e¯l©lÐ#;Ð"<Ô=Ø×ÑÕrA   c                 óD   — t        |d   «      }d }d }t        |||«      }|S rˆ  )r   ri  )	r<   rS   r€   r�   r¼   rJ  r=   ro  r(  s	            r!   r]  zFDSelectConverter.xmlRead7  s-   € Ü�u˜X‘Ó'ˆØˆØˆ	Ü˜D )¨SÓ1ˆØˆrA   NrÒ  r›   rA   r!   r„  r„  '  s   „ òòò
órA   r„  c                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)ÚVarStoreConverterc                 óv   — |j                   }|j                  |«       t        |«      }|j                  «        |S r   )r=   r/   rN  r@   )r<   r¼   rk   r=   r~  s        r!   r¾  zVarStoreConverter._read@  s2   € Ø�{‰{ˆØ�	‰	�%ÔÜ Ó%ˆØ×ÑÔØˆrA   c                  ó   — yrß   r›   rÀ  s      r!   r«   zVarStoreConverter.writeG  r  rA   c                 ó(   — |j                  ||«       y r   )rZ  rÃ  s       r!   rÄ  zVarStoreConverter.xmlWriteJ  s   € Ø�‰�y $Õ'rA   c                 óB   — t        «       }|j                  ||||«       |S r   )rN  r]  )r<   rS   r€   r�   r¼   r~  s         r!   r]  zVarStoreConverter.xmlReadM  s"   € Ü“>ˆØ×Ñ˜˜u g¨vÔ6ØˆrA   NrÒ  r›   rA   r!   r‹  r‹  ?  s   „ òòò(órA   r‹  c                 óv   — d}t        |«      g}| D ]  }|j                  t        |«      «       Œ t        |«      S rß   )r¢  r`   r	   )ÚfdSelectArrayrJ  rž   rO   s       r!   ÚpackFDSelect0r’  S  s=   € Ø
€CÜ�c‹NÐ€DØò &ˆØ�‰”I˜eÓ$Õ%ð&ä�T‹?ÐrA   c                 ó¸  — d}g }t        | «      }d}t        |«      D ]"  }| |   }||k7  sŒ|j                  ||g«       |}Œ$ dz   }t        |«      g}|j                  t	        t        |«      «      «       |D ]<  }	|j                  t	        |	d   «      «       |j                  t        |	d   «      «       Œ> |j                  t	        |«      «       t        |«      S )Nr   r¥   r   r   )rC   r  r`   r¢  r¥  r	   ©
r‘  rJ  ÚfdRangesÚlenArrayÚlastFDIndexr3  r,  ÚsentinelGIDrž   ÚfdRanges
             r!   ÚpackFDSelect3rš  [  s×   € Ø
€CØ€HÜ�=Ó!€HØ€KÜ�8‹_ò "ˆØ Ñ"ˆØ˜'Ó!Ø�O‰O˜Q ˜LÔ)Ø!‰Kð	"ð
 �a‘%€Kä�c‹NÐ€DØ‡K�K”
œ3˜x›=Ó)Ô*Øò +ˆØ�‰”J˜w q™zÓ*Ô+Ø�‰”I˜g a™jÓ)Õ*ð+ð 	‡K�K”
˜;Ó'Ô(Ü�T‹?ÐrA   c                 ó¸  — d}g }t        | «      }d}t        |«      D ]"  }| |   }||k7  sŒ|j                  ||g«       |}Œ$ dz   }t        |«      g}|j                  t	        t        |«      «      «       |D ]<  }	|j                  t	        |	d   «      «       |j                  t        |	d   «      «       Œ> |j                  t	        |«      «       t        |«      S )NrW   r¥   r   r   )rC   r  r`   r¢  r¨  r¥  r	   r”  s
             r!   ÚpackFDSelect4rœ  p  s×   € Ø
€CØ€HÜ�=Ó!€HØ€KÜ�8‹_ò "ˆØ Ñ"ˆØ˜'Ó!Ø�O‰O˜Q ˜LÔ)Ø!‰Kð	"ð
 �a‘%€Kä�c‹NÐ€DØ‡K�K”
œ3˜x›=Ó)Ô*Øò ,ˆØ�‰”J˜w q™zÓ*Ô+Ø�‰”J˜w q™zÓ*Õ+ð,ð 	‡K�K”
˜;Ó'Ô(Ü�T‹?ÐrA   c                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)ÚFDSelectCompilerc                 ó’  — |j                   }|j                  }|dk(  rt        |«      | _        || _        y |dk(  rt	        |«      | _        || _        y |dk(  rt        |«      | _        || _        y t        |«      }t	        |«      }t        |«      t        |«      k  r|| _        d|_         || _        y || _        d|_         || _        y )Nr   r   rW   )rl  rn  r’  rž   rš  rœ  rC   r¼   )r<   r(  r¼   rJ  r‘  r0  Údata3s          r!   r    zFDSelectCompiler.__init__†  sÂ   € Ø�o‰oˆØ ×)Ñ)ˆØ�!Š8Ü% mÓ4ˆDŒIð  ˆ�ð �AŠXÜ% mÓ4ˆDŒIð ˆ�ð �AŠXÜ% mÓ4ˆDŒIð ˆ�ô " -Ó0ˆEÜ! -Ó0ˆEÜ�5‹zœC ›JÒ&Ø!�”	Ø"#�”ð
 ˆ�ð "�”	Ø"#�”àˆ�rA   c                 ó6   — || j                   j                  d<   y )Nri  rì   rî   s      r!   r¤   zFDSelectCompiler.setPosœ  ra  rA   c                 ó,   — t        | j                  «      S r   r_  rD   s    r!   r_   zFDSelectCompiler.getDataLengthŸ  r`  rA   c                 ó:   — |j                  | j                  «       y r   r4  r5  s     r!   rb   zFDSelectCompiler.toFile¢  r6  rA   Nr7  r›   rA   r!   rž  rž  …  s   „ òò,.òórA   rž  c                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)ÚVarStoreCompilerc                 óÖ   — || _         |j                  s|j                  «        t        dt	        |j                  «      «      }t        |«      |j                  g}t        |«      | _        y rR  )r¼   rž   rh   ÚminrC   r¥  r	   )r<   ÚvarStoreDatar¼   ÚvarStoreDataLenrž   s        r!   r    zVarStoreCompiler.__init__§  sU   € ØˆŒØ× Ò Ø× Ñ Ô"Ü˜f¤c¨,×*;Ñ*;Ó&<Ó=ˆÜ˜?Ó+¨\×->Ñ->Ð?ˆÜ˜d“Oˆ�	rA   c                 ó6   — || j                   j                  d<   y )Nrx   rì   rî   s      r!   r¤   zVarStoreCompiler.setPos¯  ra  rA   c                 ó,   — t        | j                  «      S r   r_  rD   s    r!   r_   zVarStoreCompiler.getDataLength²  r`  rA   c                 ó:   — |j                  | j                  «       y r   r4  r5  s     r!   rb   zVarStoreCompiler.toFileµ  r6  rA   Nr7  r›   rA   r!   r¥  r¥  ¦  s   „ ò$ò.òórA   r¥  c                   ó   — e Zd Zd„ Zd„ Zy)ÚROSConverterc                 óŠ   — |\  }}}|j                  |dt        |«      fdt        |«      fd|fg«       |j                  «        y ©NÚRegistryÚOrderÚ
SupplementrÐ  )r<   rt   rS   rk   ÚregistryÚorderÚ
supplements          r!   rÄ  zROSConverter.xmlWriteº  sR   € Ø&+Ñ#ˆ�%˜Ø×ÑØàœU 8›_Ð-Øœ% ›,Ð'Ø˜zÐ*ðô	
ð 	×ÑÕrA   c                 ó0   — |d   |d   t        |d   «      fS r°  )r   rÇ  s        r!   r]  zROSConverter.xmlReadÆ  s"   € Ø�jÑ! 5¨¡>´8¸EÀ,Ñ<OÓ3PÐQÐQrA   Nrõ  r›   rA   r!   r®  r®  ¹  s   „ ò
óRrA   r®  )é   ÚmaxstackÚnumberNN)é   é   r  )rP  rP  rº  ))r»  é   ÚSyntheticBaserº  NN)r   ÚversionrP  NNrÙ  rP  )r»  r   rÚ  r   ÚFullName)r»  é&   ÚFontNamer   Ú
FamilyName)rW   ÚWeightrP  NN))r»  r   ÚisFixedPitchrº  r   N))r»  r   ÚItalicAnglerº  r   N))r»  r   ÚUnderlinePositionrº  iœÿÿÿN))r»  rW   ÚUnderlineThicknessrº  é2   N))r»  rV   Ú	PaintTyperº  r   N))r»  é   ÚCharstringTyperº  r   N)r»  é   Ú
FontMatrixrk  )çü©ñÒMbP?r   r   rÏ  r   r   )é   ÚUniqueIDrº  NNrV   ÚFontBBox)r   r   r   r   ))r»  é   ÚStrokeWidthrº  r   N)é   ÚXUIDrk  NN))r»  é   Ú
PostScriptrP  NN))r»  é   ÚBaseFontNamerP  NN))r»  é   ÚBaseFontBlendÚdeltaNN))r»  é   ÚCIDFontVersionrº  r   N))r»  é    ÚCIDFontRevisionrº  r   N))r»  é!   ÚCIDFontTyperº  r   N))r»  é"   ÚCIDCountrº  i"  Né   rX   rº  ))r»  é#   ÚUIDBaserº  NNé   r`  é   ry   )rº  rº  )r»  é%   )r»  é$   r|   é   é   rx   ÚblendrÛ  )rÙ  Úvsindexrº  NNræ  )rË  Ú
BlueValuesrÝ  NN)rÍ  Ú
OtherBluesrÝ  NN)rÓ  ÚFamilyBluesrÝ  NN)é	   ÚFamilyOtherBluesrÝ  NN))r»  rô  Ú	BlueScalerº  g}?5^ºI¤?N))r»  é
   Ú	BlueShiftrº  rÍ  N))r»  é   ÚBlueFuzzrº  r   N)r÷  ÚStdHWrº  NN)rù  ÚStdVWrº  NN))r»  r»  Ú	StemSnapHrÝ  NN))r»  rÐ  Ú	StemSnapVrÝ  NN))r»  rÕ  Ú	ForceBoldrº  r   N))r»  ræ  ÚForceBoldThresholdrº  NN))r»  ré  ÚlenIVrº  NN))r»  rí  ÚLanguageGrouprº  r   N))r»  rê  ÚExpansionFactorrº  g¸…ëQ¸®?N))r»  é   ÚinitialRandomSeedrº  r   N)r½  ÚdefaultWidthXrº  r   N)r×  ÚnominalWidthXrº  r   Nr  rü   c                 óØ   — t        t        | «      «      D ]S  }| |   \  }}}}}|�Œ|dv rt        «       }n*|dk(  rt        «       }n|dk(  rt	        «       }n
|dk(  rd }nJ ‚|||||f| |<   ŒU y )N)rÝ  rk  rº  rP  ræ  )r  rC   r÷  rê  rÉ  )r¢   r3  r¬  rS   r­  r®  r¯  s          r!   ÚaddConvertersr	  =  sŒ   € Ü”3�u“:Óò 0ˆØ',¨Q¡xÑ$ˆˆD�#�w ØÐØØÐ$Ñ$Ü!Ó#‰DØ�HŠ_Ü"Ó$‰DØ�EŠ\Ü!Ó#‰DØ�KÒØ‰Dà�5Ø�t˜S '¨4Ð/ˆˆaŠñ0rA   c                   ó   — e Zd Z ee«      Zy)ÚTopDictDecompilerN)r—   r˜   r™   r°  ÚtopDictOperatorsÚ	operatorsr›   rA   r!   r  r  S  s   „ Ù!Ð"2Ó3�IrA   r  c                   ó   — e Zd Z ee«      Zy)ÚPrivateDictDecompilerN)r—   r˜   r™   r°  ÚprivateDictOperatorsr  r›   rA   r!   r  r  W  s   „ Ù!Ð"6Ó7�IrA   r  c                   óN   — e Zd ZdZdd„Zd„ Zd„ Zd„ Zd„ Zd„ Z	d	„ Z
d
„ Zd„ Zd„ Zy)ÚDictCompilerr   Nc                 ó~  — |rt        |t        «      sJ ‚|€t        |d«      r|j                  }|€J ‚|| _        || _        || _        || _        i }|j                  D ]W  }t        ||d «      }|€Œ|j                  |   }|j                  ||«      }||j                  j                  |«      k(  rŒS|||<   ŒY || _        y r¹   )rM   r6   rL   r$   r-  r7   r¼   rµ  r  Ú
convertersr«   Údefaultsró  rí   )	r<   r-  r7   r¼   r$   rí   rS   rk   r¯  s	            r!   r    zDictCompiler.__init__^  sÐ   € ÙÜ˜g¤~Ô6Ð6Ð6Øˆ>œg f¨hÔ7Ø—]‘]ˆFØÐ%Ð%Ð%ØˆŒØˆŒØˆŒØˆŒØˆØ—M‘Mò 	"ˆDÜ˜G T¨4Ó0ˆEØˆ}ØØ×%Ñ% dÑ+ˆDØ—J‘J˜w¨Ó.ˆEØ˜×(Ñ(×,Ñ,¨TÓ2Ò2ØØ!ˆG�DŠMð	"ð ˆ�rA   c                  ó   — y r   r›   rî   s      r!   r¤   zDictCompiler.setPost  r(  rA   c                 ó6   — t        | j                  d«      «      S )Nr_   )rC   rh   rD   s    r!   r_   zDictCompiler.getDataLengthw  s   € Ü�4—<‘< Ó0Ó1Ð1rA   c                 ój  — t         j                  t        d| j                  j                  |«       | j                  }g }| j
                  j                  D ]Ð  }|j                  |«      }|€Œ| j                  |   \  }}t        |t        «      rat        |«      }t        |«      |k(  sJ d«       ‚t        |«      D ]2  }	||	   }
||	   }t        | d|
z   «      }|j                   ||«      «       Œ4 n&t        | d|z   «      }|j                   ||«      «       |j                  |«       ŒÒ t        |«      }|S )Nz-- compiling %s for %szvalue doesn't match arg typeÚarg_)r¦   r§   rá   r—   rí   r-  rµ  ró  ÚopcodesrM   r\  rC   r  r  r`   r	   )r<   Úreasonrí   rž   rS   rk   r¬  ÚargTyperµ  r3  r­  ÚvÚ
arghandlers                r!   rh   zDictCompiler.compilez  s  € Ü�‰”Ð/°·±×1HÑ1HÈ&ÔQØ—,‘,ˆØˆØ—L‘L×&Ñ&ò 	ˆDØ—K‘K Ó%ˆEØˆ}ØØŸ,™, tÑ,‰KˆB�Ü˜'¤5Ô)Ü˜“L�Ü˜5“z Q’ÐFÐ(FÓF�Ü˜q›ò /�AØ! !™*�CØ˜a™�AÜ!(¨¨v¸©|Ó!<�JØ—K‘K¡
¨1£Õ.ñ	/ô % T¨6°GÑ+;Ó<�
Ø—‘™J uÓ-Ô.Ø�K‰K˜�Oð!	ô" ˜‹ˆØˆrA   c                 óH   — | j                  d«      }|j                  |«       y )Nrb   )rh   r«   )r<   r=   rž   s      r!   rb   zDictCompiler.toFile’  s   € Ø�|‰|˜HÓ%ˆØ�
‰
�4ÕrA   c                 ó   — t        |t        «      r]|D �cg c]  }t        |«      ‘Œ }}|j                  t        d«      «       |j                  t	        t
        «      «       t        |«      }|S t        |«      }|S c c}w r  )rM   r1   ÚencodeNumberr`   r   ÚblendOpr	   )r<   Únumrç  rž   Údatums        r!   Ú
arg_numberzDictCompiler.arg_number–  sk   € Ü�cœ4Ô Ø14Ö5¨#”L Õ%Ð5ˆDÐ5Ø�K‰Kœ Q›Ô(Ø�K‰Kœ¤Ó(Ô)Ü˜d“OˆEð ˆô ! Ó%ˆEØˆùò 6s   •A;c                 ó^   — t        j                  | j                  j                  |«      «      S r   )r   ÚencodeIntCFFr7   rG  )r<   r    s     r!   Úarg_SIDzDictCompiler.arg_SID   s"   € Ü×)Ñ)¨$¯,©,×*=Ñ*=¸aÓ*@ÓAÐArA   c                 ój   — g }|D ]"  }|j                  | j                  |«      «       Œ$ t        |«      S r   )r`   r%  r	   )r<   rk   rž   r#  s       r!   Ú	arg_arrayzDictCompiler.arg_array£  s5   € ØˆØò 	.ˆCØ�K‰K˜Ÿ™¨Ó,Õ-ð	.ä˜‹ÐrA   c                 ó  — |sy|d   }t        |t        «      r| j                  |«      }t        |«      S g }d}|D ]  }|j                  ||z
  «       |}Œ g }|D ]  }|j                  t	        |«      «       Œ t        |«      S )NrA   r   )rM   r1   Úarg_delta_blendr`   r!  r	   )r<   rk   Úval0rž   rÙ   Úlastr  r#  s           r!   Ú	arg_deltazDictCompiler.arg_delta©  s˜   € ÙØØ�Q‰xˆÜ�dœDÔ!Ø×'Ñ'¨Ó.ˆDô ˜‹Ðð ˆCØˆDØò �Ø—
‘
˜1˜t™8Ô$Ø‘ðð ˆDØò /�Ø—‘œL¨Ó-Õ.ð/ä˜‹ÐrA   c                 óŽ  — t        |d   «      }t        |«      }||z  dz   }|| j                  kD  rht        | j                  dz
  |z  «      }g }	 t        t        |«      |«      }|dk(  r	 |S |d| }| j	                  |«      }	|j                  |	«       ||d }ŒJdg|z  }
dg|z  }d}d}||k  r(||   d   }||z
  |
|<   |}||   dd ||<   |dz  }||k  rŒ(|
}|D ]  }|j                  |«       Œ |D �cg c]  }t        |«      ‘Œ }}|j                  t        |«      «       |j                  t        t        «      «       |S c c}w )aM  A delta list with blend lists has to be *all* blend lists.

        The value is a list is arranged as follows::

                [
                        [V0, d0..dn]
                        [V1, d0..dn]
                        ...
                        [Vm, d0..dn]
                ]

        ``V`` is the absolute coordinate value from the default font, and ``d0-dn``
        are the delta values from the *n* regions. Each ``V`` is an absolute
        coordinate from the default font.

        We want to return a list::

                [
                        [v0, v1..vm]
                        [d0..dn]
                        ...
                        [d0..dn]
                        numBlends
                        blendOp
                ]

        where each ``v`` is relative to the previous default font value.
        r   r   N)
rC   ÚmaxBlendStackr   r§  r,  rÝ   r!  r`   r   r"  )r<   rk   Ú
numMastersÚ	numBlendsÚnumStackÚnumBlendValuesrÙ   ÚnumValÚvalListÚout1Ú	firstListÚ	deltaListr3  ÚprevValÚdefaultValueÚrelValueListræ  rç  s                     r!   r,  zDictCompiler.arg_delta_blendº  sŽ  € ô: ˜˜q™“]ˆ
Ü˜“Jˆ	Ø 
Ñ*¨aÑ/ˆØ�d×(Ñ(Ò(ô ! $×"4Ñ"4°qÑ"8¸JÑ!FÓGˆNØˆCØÜœS ›Z¨Ó8�Ø˜Q’;Øð6 ˆ
ð5    &˜/�Ø×+Ñ+¨GÓ4�Ø—
‘
˜4Ô Ø˜f˜g˜�ð ð ˜˜i™ˆIØ˜ Ñ*ˆIØˆAØˆGØ�i’-ð
  % Q™x¨™{�Ø+¨gÑ5�	˜!‘Ø&�Ø$ Q™x¨¨˜|�	˜!‘Ø�Q‘�ð �i“-ð %ˆLØ&ò /�	Ø×#Ñ# IÕ.ð/à0<Ö=¨”< Õ$Ð=ˆCÐ=Ø�J‰J”| IÓ.Ô/Ø�J‰J”wœwÓ'Ô(Øˆ
ùò >s   Ã4Er   )r—   r˜   r™   r1  r    r¤   r_   rh   rb   r%  r(  r*  r/  r,  r›   rA   r!   r  r  [  s;   „ Ø€Móò,ò2òò0òòBòòó"DrA   r  c                 óv   — t        | t        «      rt        j                  | «      S t        j                  | «      S r   )rM   rà  r   ÚencodeFloatr'  )r#  s    r!   r!  r!  	  s.   € Ü�#”uÔÜ×(Ñ(¨Ó-Ð-ä×)Ñ)¨#Ó.Ð.rA   c                   ó"   — e Zd Z ee«      Zd„ Zy)ÚTopDictCompilerc                 ó  — | j                   }g }| j                  j                  �€t        | j                  d«      r�| j                  j                  rzt        | j                  d«      rd }nt        | j                  j                  «      }|€1|j                  t        || j                  j                  | «      «       n|| j                  d<   t        | j                  d«      r¢| j                  j                  rŒ| j                  j                  }t        |t        «      sf|j                  t        ||| «      «       nIt        | j                  d«      r3| j                  j                  }t        || «      }|j                  |«       t        | j                  d«      r�| j                  j                  }t!        |«      dk(  rO| j                  j"                  }	| j                  j                  D ]   }
|j                  |	|
   j$                  «       Œ" t'        || «      }|j                  |«       t        | j                  d«      rgg }| j                  j"                  }	| j                  j                  D ]  }
|j                  |	|
   «       Œ t)        ||| |¬«      }|j                  |«       t        | j                  d	«      rW| j                  j*                  j-                  || «      }|j                  |«       |j/                  |j1                  |«      «       t        | j                  d
«      rW| j                  j2                  j-                  || «      }|j                  |«       |j/                  |j1                  |«      «       |S )NrX   r  r`  rx   ri  r   r  r#   r|   ry   )r$   r-  r?   rL   rX   rB  r`   r*  rí   r`  rM   rN   rZ  rx   r¥  ri  rC   r  r‹  rž  rþ   r|   r\   rÝ   ra   ry   )r<   r7   r$   rf   ÚcharsetCoderË   r¨  ÚvarStoreCompr(  r€  rS   ÚfdSelectCompr»   ÚcharStringsCompÚfdArrayIndexCompÚprivComps                   r!   ra   zTopDictCompiler.getChildren	  s§  € Ø—‘ˆØˆØ�<‰<×)Ñ)Ñ1Ü�t—|‘| YÔ/°D·L±L×4HÒ4HÜ˜4Ÿ<™<¨Ô/Ø"&‘Kä"/°·±×0DÑ0DÓ"E�KØÐ&Ø—O‘OÜ'¨°·±×1EÑ1EÀtÓLõð /:�D—L‘L Ñ+Ü�t—|‘| ZÔ0°T·\±\×5JÒ5JØŸ<™<×0Ñ0�Ü! (¬CÔ0Ø—O‘OÔ$4°W¸hÈÓ$MÕNä�t—|‘| ZÔ0Ø#Ÿ|™|×4Ñ4�Ü/°¸dÓC�Ø—‘ Ô-Ü�4—<‘< Ô,ð
 —|‘|×,Ñ,ˆHä�8‹} Ò!Ø"Ÿl™l×6Ñ6�Ø ŸL™L×0Ñ0ò E�DØ—O‘O K°Ñ$5×$CÑ$CÕDðEä+¨H°dÓ;ˆLØ�O‰O˜LÔ)Ü�4—<‘< Ô/ØˆEØŸ,™,×2Ñ2ˆKØŸ™×,Ñ,ò 0�Ø—‘˜[¨Ñ.Õ/ð0ä1°%¸À$ÈvÔVˆOØ�O‰O˜OÔ,Ü�4—<‘< Ô+ð  $Ÿ|™|×3Ñ3×?Ñ?ÀÈÓNÐØ�O‰OÐ,Ô-Ø�O‰OÐ,×8Ñ8¸ÓAÔBÜ�4—<‘< Ô+Ø—|‘|×+Ñ+×7Ñ7¸ÀÓFˆHØ�O‰O˜HÔ%Ø�O‰O˜H×0Ñ0°Ó9Ô:ØˆrA   N)r—   r˜   r™   r³  r  r  ra   r›   rA   r!   rA  rA  	  s   „ ÙÐ.Ó/€Gó7rA   rA  c                   ó6   ‡ — e Zd Z ee«      Zdˆ fd„	Zd„ Zˆ xZS )ÚFontDictCompilerc                 ó(  •— t         t        | �  ||||¬«       g }| j                  }t	        t        |j                  «      t        |j                  «      z
  «      D ]‚  }||j                  v r|j                  |«       Œ#|j                  j                  |«      }|�!|j                  |   }|j                  ||«      }t        ||d «      |k7  sŒr|j                  |«       Œ„ |r1t        j                  ddj!                  t	        |«      «      z   «       y y )Nr#   z:Some CFF FDArray/FontDict keys were ignored upon compile: rÛ  )rà   rJ  r    r-  r�  Úsetr  rµ  rí   r`   r  ró  r*   r  r¦   Úwarningrî  )
r<   r-  r7   r¼   r$   ÚignoredNamesrS   r®  r¯  rá   s
            €r!   r    zFontDictCompiler.__init__H	  s  ø€ ÜÔ Ñ.¨w¸ÀÐPVÐ.ÔWð ˆØ—,‘,ˆÜœ3˜w×1Ñ1Ó2´S¸¿¹Ó5GÑGÓHò 	.ˆDØ�w—‘Ñ&ð
 ×#Ñ# DÕ)ð "×*Ñ*×.Ñ.¨tÓ4�ØÐ&Ø"×-Ñ-¨dÑ3�DØ"Ÿi™i¨°Ó9�GÜ˜7 D¨$Ó/°7Ó:Ø ×'Ñ'¨Õ-ð#	.ñ$ Ü�K‰KØLØ—(‘(œ6 ,Ó/Ó0ñ1õð rA   c                 óä   — g }t        | j                  d«      rW| j                  j                  j                  || «      }|j	                  |«       |j                  |j                  |«      «       |S ©Nry   )rL   r-  ry   r\   r`   rÝ   ra   )r<   r7   rf   rH  s       r!   ra   zFontDictCompiler.getChildreni	  sY   € ØˆÜ�4—<‘< Ô+Ø—|‘|×+Ñ+×7Ñ7¸ÀÓFˆHØ�O‰O˜HÔ%Ø�O‰O˜H×0Ñ0°Ó9Ô:ØˆrA   r   )	r—   r˜   r™   r³  r  r  r    ra   rä   rå   s   @r!   rJ  rJ  E	  s   ø„ ÙÐ.Ó/€GõöBrA   rJ  c                   ó,   — e Zd ZeZ ee«      Zd„ Zd„ Z	y)ÚPrivateDictCompilerc                 óR   — ||z
  }||f| j                   j                  d<   || _        y rP  )r¼   rí   r®   )r<   r®   r±   r  s       r!   r¤   zPrivateDictCompiler.setPosv	  s*   € Ø˜‰|ˆØ)-¨s¨ˆ�‰×Ñ˜IÑ&Øˆ�rA   c                 ó    — g }t        | j                  d«      r5|j                  | j                  j                  j	                  || «      «       |S rû   )rL   r-  r`   rü   r\   )r<   r7   rf   s      r!   ra   zPrivateDictCompiler.getChildren{	  s=   € ØˆÜ�4—<‘< Ô)Ø�O‰O˜DŸL™L×.Ñ.×:Ñ:¸7ÀDÓIÔJØˆrA   N)
r—   r˜   r™   ÚmaxStackLimitr1  r³  r  r  r¤   ra   r›   rA   r!   rR  rR  r	  s   „ Ø!€MÙÐ2Ó3€Gòó
rA   rR  c                   ó:   — e Zd Zd	d„Zd„ Zd„ Zd
d„Zd„ Zd„ Zd„ Z	y)ÚBaseDictNc                 óÚ   — |d u |d u k(  sJ ‚i | _         g | _        || _        |€y || _        || _        |�8t
        j                  t        d| j                  j                  |«       || _	        y y )Nr  )
rí   Ú	skipNamesr7   r	  r=   r¦   r§   rá   r—   rÏ   )r<   r7   r=   rÏ   r$   s        r!   r    zBaseDict.__init__ƒ	  sr   € Ø˜$� D¨D LÒ1Ð1Ð1ØˆŒØˆŒØˆŒØˆ<ØØˆŒØˆŒ	ØÐÜ�G‰G”EÐ-¨t¯~©~×/FÑ/FÈÔOØ ˆD�Kð rA   c                 ó  — t         j                  t        d| j                  j                  t	        |«      «       | j                  | j                  | «      }|j                  |«       |j                  «       | _	        | j                  «        y )Nz    length %s is %d)r¦   r§   rá   r—   rC   ÚdecompilerClassr7   r@   ÚgetDictrí   ÚpostDecompile)r<   rž   Údecs      r!   r@   zBaseDict.decompile�	  s^   € Ü�‰”Ð,¨d¯n©n×.EÑ.EÄsÈ4ÃyÔQØ×"Ñ" 4§<¡<°Ó6ˆØ�‰�dÔØ—{‘{“}ˆŒØ×ÑÕrA   c                  ó   — y r   r›   rD   s    r!   r]  zBaseDict.postDecompile—	  r(  rA   c                 ó,   — | j                  | |||¬«      S r  r  r  s       r!   r\   zBaseDict.getCompilerš	  r   rA   c                 ó(  — |d d |dd  cxk(  rdk(  rt        |«      ‚ | j                  j                  |d «      }|€| j                  j                  |«      }|€t        |«      ‚| j                  |   }|j                  | |«      }t        | ||«       |S )Nr   éþÿÿÿÚ__)r  rí   ró  r  r  r*   Úsetattr)r<   rS   rk   r¯  s       r!   Ú__getattr__zBaseDict.__getattr__�	  s�   € Ø��ˆ8�t˜B˜C�yÔ( DÒ(ô
 ! Ó&Ð&ð )ð —‘× Ñ   tÓ,ˆØˆ=Ø—M‘M×%Ñ% dÓ+ˆEØˆ=Ü  Ó&Ð&Ø�‰˜tÑ$ˆØ—	‘	˜$ Ó&ˆÜ��d˜EÔ"ØˆrA   c                 ó†  — | j                   D ]H  }|| j                  v rŒt        | |d «      }|€|dk7  rŒ'| j                  |   }|j	                  |||«       ŒJ t        | j                  «      t        | j                   «      z
  }|r=|j                  ddj                  t        |«      «      z  «       |j                  «        y y )NrX   zsome keys were ignored: %srÛ  )rµ  rY  r  r  rÄ  rL  rí   r1  rî  r�  rp   )r<   rt   rS   rk   r¯  rN  s         r!   rr   zBaseDict.toXML®	  s¸   € Ø—J‘Jò 	2ˆDØ�t—~‘~Ñ%ØÜ˜D $¨Ó-ˆEð ˆ} ¨Ò!2ØØ—?‘? 4Ñ(ˆDØ�M‰M˜) T¨5Õ1ð!	2ô" ˜4Ÿ<™<Ó(¬3¨t¯z©z«?Ñ:ˆÙØ×ÑØ,¨s¯x©x¼¸|Ó8LÓ/MÑMôð ×ÑÕð	 rA   c                 ód   — | j                   |   }|j                  |||| «      }t        | ||«       y r   )r  r]  rd  )r<   rS   r€   r�   r¯  rk   s         r!   r{   zBaseDict.fromXMLÇ	  s0   € Ø�‰˜tÑ$ˆØ—‘˜T 5¨'°4Ó8ˆÜ��d˜EÕ"rA   )NNNNr   )
r—   r˜   r™   r    r@   r]  r\   re  rr   r{   r›   rA   r!   rW  rW  ‚	  s&   „ ó!òòóHòò" ó2#rA   rW  c                   ó†   ‡ — e Zd ZdZ ee«      Z ee«      Ze	Z
 ee«      ZeZ	 	 	 	 	 	 dˆ fd„	Zd„ Zd„ Zd„ Zd„ Zd„ Zˆ xZS )	rz   ad  The ``TopDict`` represents the top-level dictionary holding font
    information. CFF2 tables contain a restricted set of top-level entries
    as described `here <https://docs.microsoft.com/en-us/typography/opentype/spec/cff2#7-top-dict-data>`_,
    but CFF tables may contain a wider range of information. This information
    can be accessed through attributes or through the dictionary returned
    through the ``rawDict`` property:

    .. code:: python

            font = tt["CFF "].cff[0]
            font.FamilyName
            # 'Linux Libertine O'
            font.rawDict["FamilyName"]
            # 'Linux Libertine O'

    More information is available in the CFF file's private dictionary, accessed
    via the ``Private`` property:

    .. code:: python

            tt["CFF "].cff[0].Private.BlueValues
            # [-15, 0, 515, 515, 666, 666]

    c                 ó  •— t         t        | �  ||||¬«       || _        || _        |r5t        t        «      | _         |«       | _        t        t        «      | _
        y t        t        «      | _        t        t        «      | _
        y r  )rà   rz   r    r?   r;   r¸  ÚtopDictOperators2r  rX   r¶  rµ  r  )r<   r7   r=   rÏ   r;   r?   r$   rá   s          €r!   r    zTopDict.__init__í	  sn   ø€ ô 	Œg�tÑ% g¨t°VÀFÐ%ÔKØ!2ˆÔØ&ˆÔÙÜ)Ô*;Ó<ˆDŒMÙ,Ó.ˆDŒLÜ#Ô$5Ó6ˆD�Jä)Ô*:Ó;ˆDŒMÜ#Ô$4Ó5ˆD�JrA   c                 ó   — | j                   S )z.Returns a list of glyph names in the CFF font.)rX   rD   s    r!   r9   zTopDict.getGlyphOrder
  ó   € à�|‰|ÐrA   c                 óø   — | j                   j                  d«      }|€y | j                  j                  |«       | j                  rt        | j                  «      | _        y t        | j                  «      | _        y r  )rí   ró  r=   r/   r	  r
  ro  r  )r<   rÏ   s     r!   r]  zTopDict.postDecompile
  sU   € Ø—‘×!Ñ! -Ó0ˆØˆ>Øà�	‰	�‰�vÔØ�<Š<Ü'¨¯	©	Ó2ˆD�Nä'¨¯	©	Ó2ˆD�NrA   c                 óÒ   — t        | d«      r| j                  «        t        | d«      rdg| _        t        | d«      rt        | d«      s	g d¢| _        t        j	                  | |«       y )Nr  r  r`  )rß  rá  rã  rå  )rL   ÚdecompileAllCharStringsrY  rW  rr   )r<   rt   s     r!   rr   zTopDict.toXML
  sW   € Ü�4˜Ô'Ø×(Ñ(Ô*Ü�4˜ÔØ(˜\ˆDŒNÜ�t˜UÔ#¬7°4¸Ô+GòˆDŒNô 	�‰�t˜YÕ'rA   c                 ó´   — t        | j                  j                  «       «      D ]  \  }}	 |j                  «        Œ y #  t        j                  d|«       ‚ xY w)NzError in charstring %s)Ú	enumerater  rI   r@   r¦   Úerror)r<   r3  rˆ  s      r!   ro  zTopDict.decompileAllCharStrings 
  sS   € ä& t×'7Ñ'7×'>Ñ'>Ó'@ÓAò 	‰MˆAˆzðØ×$Ñ$Õ&ñ	øðÜ—	‘	Ð2°AÔ6Øús	   «>¾Ac                 ó
  — d }| j                   j                  «       D ]1  }|j                  | j                   «      }|€Œ!|�t        ||«      }Œ0|}Œ3 |€| j                  d   d d  | _        y t        t        |«      «      | _        y )NrÒ  )r  rI   Ú
calcBoundsr   r  rÒ  r1   r   )r<   ÚfontBBoxrˆ  Úboundss       r!   rZ   zTopDict.recalcFontBBox)
  s†   € ØˆØ×*Ñ*×1Ñ1Ó3ò 	&ˆJØ×*Ñ*¨4×+;Ñ+;Ó<ˆFØÑ!ØÐ'Ü(¨°6Ó:‘Hà%‘Hð	&ð ÐØ ŸM™M¨*Ñ5±aÐ8ˆD�Mä ¤¨Ó!2Ó3ˆD�MrA   r8  )r—   r˜   r™   rš   r¸  r  r  rº  r  rA  r  r¶  rµ  r  r[  r    r9   r]  rr   ro  rZ   rä   rå   s   @r!   rz   rz   Í	  sg   ø„ ññ2 Ð-Ó.€HÙ Ð!1Ó2€JØ#€MÙÐ'Ó(€EØ'€Oð ØØØØØõ6ò(ò	3ò(ò ö4rA   rz   c                   ó\   ‡ — e Zd Zi Z ee«      ZeZg d¢Z	dgZ
eZ	 	 	 	 	 	 dˆ fd„	Zd„ Zˆ xZS )rC  )rÂ  rÎ  rÄ  ry   ry   c                 ód   •— t         t        | �  ||||¬«       || _        | j	                  |«       y r  )rà   rC  r    r}   ÚsetCFF2)r<   r7   r=   rÏ   r;   r$   r}   rá   s          €r!   r    zFontDict.__init__\
  s0   ø€ ô 	Œh˜Ñ& w°°fÀVÐ&ÔLØˆŒØ�‰�VÕrA   c                 ój   — |r| j                   | _        d| _        y | j                  | _        d| _        y )NTF)Ú	orderCFF2rµ  r	  ÚorderCFFrŸ   s     r!   ry  zFontDict.setCFF2i
  s)   € áØŸ™ˆDŒJØˆD�LàŸ™ˆDŒJØ ˆD�LrA   r8  )r—   r˜   r™   r  rº  r  r  rJ  r  r|  r{  r  r[  r    ry  rä   rå   s   @r!   rC  rC  9
  sI   ø„ ð8 €HÙ Ð!1Ó2€JØ$€MÚ>€HØ�€IØ'€Oð ØØØØØõö!rA   rC  c                   óp   ‡ — e Zd Z ee«      Z ee«      Z ee«      Z	e
ZeZdˆ fd„	Zed„ «       Zdd„Zˆ xZS )r  c                 ó   •— t         t        | �  ||||¬«       || _        |r>t	        t
        «      | _        t        t
        «      | _        d x| _	        | _
        d| _        y t	        t        «      | _        t        t        «      | _        d| _        y )Nr#   TF)rà   r  r    r}   r¸  ÚprivateDictOperators2r  r¶  rµ  r  r  r	  r  )r<   r7   r=   rÏ   r$   r}   rá   s         €r!   r    zPrivateDict.__init__z
  sy   ø€ ÜŒk˜4Ñ)¨'°4¸ÈÐ)ÔOØˆŒÙÜ)Ô*?Ó@ˆDŒMÜ#Ô$9Ó:ˆDŒJð 7;Ð:ˆDÔ Ô!3ØˆD�Lä)Ô*>Ó?ˆDŒMÜ#Ô$8Ó9ˆDŒJØ ˆD�LrA   c                 ó   — | j                   S r   )r	  rD   s    r!   Úin_cff2zPrivateDict.in_cff2‰
  rl  rA   c                 óv   — |€t        | d«      r| j                  }nd}| j                  j                  |«      }|S )Nrð  r   )rL   rð  r}   rg  )r<   Úvirf  s      r!   rg  zPrivateDict.getNumRegions�
  s9   € àˆ:Ü�t˜YÔ'Ø—\‘\‘à�Ø—[‘[×.Ñ.¨rÓ2ˆ
ØÐrA   )NNNNNr   )r—   r˜   r™   r¸  r  r  rº  r  r¶  rµ  r  r[  rR  r  r    Úpropertyr�  rg  rä   rå   s   @r!   r  r  s
  sL   ø„ ÙÐ1Ó2€HÙ Ð!5Ó6€JÙÐ+Ó,€EØ+€OØ'€Mõ!ð ñó ð÷rA   r  c                   ó<   — e Zd ZdZd
d„Zd„ Zd„ Zd„ Zd„ Zd„ Z	d	„ Z
y)r6   zSID -> string mapping.Nc                 ó~   — |€
g }|| _        y t        |d¬«      D �cg c]  }t        |d¬«      ‘Œ }}|| _        y c c}w )NFr#   rÉ   rÊ   )r2   r   r7   )r<   r=   r7   r    s       r!   r    zIndexedStrings.__init__›
  sF   € Øˆ<ØˆGð ˆ�ô =BÀ$ÈuÔ<UÖV°q”u˜Q¨Ö2ÐVˆGÐVØˆ�ùò Ws   œ:c                 ó    — t        | d | d¬«      S )NFr#   )rÒ   rD   s    r!   r\   zIndexedStrings.getCompiler¢
  s   € Ü% d¨D°$¸uÔEÐErA   c                 ó,   — t        | j                  «      S r   )rC   r7   rD   s    r!   rE   zIndexedStrings.__len__¥
  s   € Ü�4—<‘<Ó Ð rA   c                 óR   — |t         k  r	t        |   S | j                  |t         z
     S r   )ÚcffStandardStringCountÚcffStandardStringsr7   )r<   rP  s     r!   rT   zIndexedStrings.__getitem__¨
  s+   € ØÔ'Ò'Ü% cÑ*Ð*à—<‘< Ô&<Ñ <Ñ=Ð=rA   c                 óH  — t        | d«      s| j                  «        t        |d¬«      }|t        v rt        |   }|S || j                  v r| j                  |   }|S t        | j                  «      t        z   }| j                  j                  |«       || j                  |<   |S )NÚstringMappingrÉ   rÊ   )	rL   ÚbuildStringMappingr   ÚcffStandardStringMappingr�  rC   r7   rŠ  r`   )r<   r    rP  s      r!   rG  zIndexedStrings.getSID®
  s¢   € Ü�t˜_Ô-Ø×#Ñ#Ô%Ü�!˜hÔ'ˆØÔ(Ñ(Ü*¨1Ñ-ˆCð ˆ
ð �$×$Ñ$Ñ$Ø×$Ñ$ QÑ'ˆCð
 ˆ
ô �d—l‘lÓ#Ô&<Ñ<ˆCØ�L‰L×Ñ Ô"Ø$'ˆD×Ñ˜qÑ!Øˆ
rA   c                 ó   — | j                   S r   rÔ   rD   s    r!   Ú
getStringszIndexedStrings.getStrings¼
  s   € Ø�|‰|ÐrA   c                 óž   — i | _         t        t        | j                  «      «      D ]%  }|t        z   | j                   | j                  |   <   Œ' y r   )r�  r  rC   r7   rŠ  rx  s     r!   rŽ  z!IndexedStrings.buildStringMapping¿
  sH   € ØˆÔÜœ3˜tŸ|™|Ó,Ó-ò 	UˆEØ6;Ô>TÑ6TˆD×Ñ˜tŸ|™|¨EÑ2Ò3ñ	UrA   r   )r—   r˜   r™   rš   r    r\   rE   rT   rG  r‘  rŽ  r›   rA   r!   r6   r6   ˜
  s*   „ Ù óòFò!ò>òòóUrA   r6   (‡  r,  ÚspaceÚexclamÚquotedblÚ
numbersignÚdollarÚpercentÚ	ampersandÚ
quoterightÚ	parenleftÚ
parenrightÚasteriskÚplusÚcommaÚhyphenÚperiodÚslashÚzeroÚoneÚtwoÚthreeÚfourÚfiveÚsixÚsevenÚeightÚnineÚcolonÚ	semicolonÚlessÚequalÚgreaterÚquestionÚatÚAr   ÚCÚDÚEÚFÚGÚHÚIÚJÚKÚLÚMÚNÚOÚPÚQÚRÚSÚTÚUÚVÚWÚXÚYÚZÚbracketleftÚ	backslashÚbracketrightÚasciicircumÚ
underscoreÚ	quoteleftÚaÚbÚcr«  ÚeÚfÚgÚhr3  ÚjÚkrµ  r{  r$  ÚoÚpÚqÚrr    ÚtÚur  ÚwÚxÚyÚzÚ	braceleftÚbarÚ
bracerightÚ
asciitildeÚ
exclamdownÚcentÚsterlingÚfractionÚyenÚflorinÚsectionÚcurrencyÚquotesingleÚquotedblleftÚguillemotleftÚguilsinglleftÚguilsinglrightÚfiÚflÚendashÚdaggerÚ	daggerdblÚperiodcenteredÚ	paragraphÚbulletÚquotesinglbaseÚquotedblbaseÚquotedblrightÚguillemotrightÚellipsisÚperthousandÚquestiondownÚgraveÚacuteÚ
circumflexÚtildeÚmacronÚbreveÚ	dotaccentÚdieresisÚringÚcedillaÚhungarumlautÚogonekÚcaronÚemdashÚAEÚordfeminineÚLslashÚOslashÚOEÚordmasculineÚaeÚdotlessiÚlslashÚoslashÚoeÚ
germandblsÚonesuperiorÚ
logicalnotÚmuÚ	trademarkÚEthÚonehalfÚ	plusminusÚThornÚ
onequarterÚdivideÚ	brokenbarÚdegreeÚthornÚthreequartersÚtwosuperiorÚ
registeredÚminusÚethÚmultiplyÚthreesuperiorÚ	copyrightÚAacuteÚAcircumflexÚ	AdieresisÚAgraveÚAringÚAtildeÚCcedillaÚEacuteÚEcircumflexÚ	EdieresisÚEgraveÚIacuteÚIcircumflexÚ	IdieresisÚIgraveÚNtildeÚOacuteÚOcircumflexÚ	OdieresisÚOgraveÚOtildeÚScaronÚUacuteÚUcircumflexÚ	UdieresisÚUgraveÚYacuteÚ	YdieresisÚZcaronÚaacuteÚacircumflexÚ	adieresisÚagraveÚaringÚatildeÚccedillaÚeacuteÚecircumflexÚ	edieresisÚegraveÚiacuteÚicircumflexÚ	idieresisÚigraveÚntildeÚoacuteÚocircumflexÚ	odieresisÚograveÚotildeÚscaronÚuacuteÚucircumflexÚ	udieresisÚugraveÚyacuteÚ	ydieresisÚzcaronÚexclamsmallÚHungarumlautsmallÚdollaroldstyleÚdollarsuperiorÚampersandsmallÚ
AcutesmallÚparenleftsuperiorÚparenrightsuperiorÚtwodotenleaderÚonedotenleaderÚzerooldstyleÚoneoldstyleÚtwooldstyleÚthreeoldstyleÚfouroldstyleÚfiveoldstyleÚsixoldstyleÚsevenoldstyleÚeightoldstyleÚnineoldstyleÚcommasuperiorÚthreequartersemdashÚperiodsuperiorÚquestionsmallÚ	asuperiorÚ	bsuperiorÚcentsuperiorÚ	dsuperiorÚ	esuperiorÚ	isuperiorÚ	lsuperiorÚ	msuperiorÚ	nsuperiorÚ	osuperiorÚ	rsuperiorÚ	ssuperiorÚ	tsuperiorÚffÚffiÚfflÚparenleftinferiorÚparenrightinferiorÚCircumflexsmallÚhyphensuperiorÚ
GravesmallÚAsmallÚBsmallÚCsmallÚDsmallÚEsmallÚFsmallÚGsmallÚHsmallÚIsmallÚJsmallÚKsmallÚLsmallÚMsmallÚNsmallÚOsmallÚPsmallÚQsmallÚRsmallÚSsmallÚTsmallÚUsmallÚVsmallÚWsmallÚXsmallÚYsmallÚZsmallÚcolonmonetaryÚ	onefittedÚrupiahÚ
TildesmallÚexclamdownsmallÚcentoldstyleÚLslashsmallÚScaronsmallÚZcaronsmallÚDieresissmallÚ
BrevesmallÚ
CaronsmallÚDotaccentsmallÚMacronsmallÚ
figuredashÚhypheninferiorÚOgoneksmallÚ	RingsmallÚCedillasmallÚquestiondownsmallÚ	oneeighthÚthreeeighthsÚfiveeighthsÚseveneighthsÚonethirdÚ	twothirdsÚzerosuperiorÚfoursuperiorÚfivesuperiorÚsixsuperiorÚsevensuperiorÚeightsuperiorÚninesuperiorÚzeroinferiorÚoneinferiorÚtwoinferiorÚthreeinferiorÚfourinferiorÚfiveinferiorÚsixinferiorÚseveninferiorÚeightinferiorÚnineinferiorÚcentinferiorÚdollarinferiorÚperiodinferiorÚcommainferiorÚAgravesmallÚAacutesmallÚAcircumflexsmallÚAtildesmallÚAdieresissmallÚ
AringsmallÚAEsmallÚCcedillasmallÚEgravesmallÚEacutesmallÚEcircumflexsmallÚEdieresissmallÚIgravesmallÚIacutesmallÚIcircumflexsmallÚIdieresissmallÚEthsmallÚNtildesmallÚOgravesmallÚOacutesmallÚOcircumflexsmallÚOtildesmallÚOdieresissmallÚOEsmallÚOslashsmallÚUgravesmallÚUacutesmallÚUcircumflexsmallÚUdieresissmallÚYacutesmallÚ
ThornsmallÚYdieresissmallz001.000z001.001z001.002z001.003ÚBlackÚBoldÚBookÚLightÚMediumÚRegularÚRomanÚSemiboldi‡  )år,  r“  r”  r•  r–  r—  r˜  r™  rš  r›  rœ  r�  rž  rŸ  r   r¡  r¢  r£  r¤  r¥  r¦  r§  r¨  r©  rª  r«  r¬  r­  r®  r¯  r°  r±  r²  r³  r´  r   rµ  r¶  r·  r¸  r¹  rº  r»  r¼  r½  r¾  r¿  rÀ  rÁ  rÂ  rÃ  rÄ  rÅ  rÆ  rÇ  rÈ  rÉ  rÊ  rË  rÌ  rÍ  rÎ  rÏ  rÐ  rÑ  rÒ  rÓ  rÔ  rÕ  r«  rÖ  r×  rØ  rÙ  r3  rÚ  rÛ  rµ  r{  r$  rÜ  rÝ  rÞ  rß  r    rà  rá  r  râ  rã  rä  rå  ræ  rç  rè  ré  rê  rë  rì  rí  rî  rï  rð  rñ  rò  ró  rô  rõ  rö  r÷  rø  rù  rú  rû  rü  rý  rþ  rÿ  r   r  r  r  r  r  r  r  r  r	  r
  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r!  r"  r#  r$  r%  r&  r'  r(  r)  r*  r+  r,  r-  r.  r/  r0  r1  r2  r3  r4  r5  r6  r7  r8  r9  r:  r;  r<  r=  r>  r?  r@  rA  rB  rC  rD  rE  rF  rG  rH  rI  rJ  rK  rL  rM  rN  rO  rP  rQ  rR  rS  rT  rU  rV  rW  rX  rY  rZ  r[  r\  r]  r^  r_  r`  ra  rb  rc  rd  re  rf  rg  rh  ri  rj  rk  rl  rm  rn  éå   )¦r,  r“  ro  rp  rq  rr  rs  rt  ru  rv  rw  rx  rŸ  r   r¡  rí  ry  rz  r{  r|  r}  r~  r  r€  r�  r‚  r­  r®  rƒ  r„  r…  r†  r‡  rˆ  r‰  rŠ  r‹  rŒ  r�  rŽ  r�  r�  r‘  r’  r“  r”  r÷  rø  r•  r–  r—  r˜  r™  rš  r›  rœ  r�  rž  rŸ  r   r¡  r¢  r£  r¤  r¥  r¦  r§  r¨  r©  rª  r«  r¬  r­  r®  r¯  r°  r±  r²  r³  r´  rµ  r¶  r·  r¸  r¹  rº  r»  r¼  r½  r¾  r¿  rÀ  rÁ  rÂ  rÃ  rÄ  rÅ  rÆ  rÇ  rÈ  r(  r%  r-  rÉ  rÊ  rË  rÌ  rÍ  rÎ  rÏ  rÐ  r   r.  r3  rÑ  rÒ  rÓ  rÔ  rÕ  rÖ  r×  rØ  rÙ  rÚ  rÛ  rÜ  rÝ  rÞ  rß  rà  rá  râ  rã  rä  rå  ræ  rç  rè  ré  rê  rë  rì  rí  rî  rï  rð  rñ  rò  ró  rô  rõ  rö  r÷  rø  rù  rú  rû  rü  rý  rþ  rÿ  r   r  r  r  r  é¦   )Wr,  r“  rq  rr  ru  rv  rw  rx  rŸ  r   r¡  rí  ry  rz  r{  r|  r}  r~  r  r€  r�  r‚  r­  r®  rƒ  r„  r…  r‡  rˆ  r‰  rŠ  r‹  rŒ  r�  rŽ  r�  r�  r‘  r’  r“  r”  r÷  rø  r•  r–  r—  r˜  rš  r¶  r·  r¸  r»  rÄ  rÅ  r(  r%  r-  rÊ  rË  rÌ  rÍ  rÎ  rÏ  rÐ  r   r.  r3  rÑ  rÒ  rÓ  rÔ  rÕ  rÖ  r×  rØ  rÙ  rÚ  rÛ  rÜ  rÝ  rÞ  rß  rà  rá  râ  rã  rä  éW   )…rš   ÚfontTools.miscr   r   ÚfontTools.misc.arrayToolsr   r   ÚfontTools.misc.textToolsr   r   r	   r
   r   r   ÚfontTools.ttLibr   ÚfontTools.ttLib.tables.otBaser   r   ÚfontTools.ttLib.tablesr   rS  Úior   r-   ÚloggingrÜ  r§   Ú	getLoggerr—   r¦   r)   rU  Úobjectr   r[   rª   r·   rÒ   r¨   rç   rñ   rù   rþ   r2   r:   r;  r4   rH  rN  ri  r  r  r  r
  rÎ   rÍ   rÌ   r¢  r¥  r¨  r°  r³  r¶  r¸  rº  r¼  rÉ  rÔ  rá  rè  rê  r÷  rû  r  r
  r  r  r*  rB  rE  rH  r.  r/  r  r  rZ  re  rk  rl  r\  r]  r  r„  r‹  r’  rš  rœ  rž  r¥  r®  r  rj  rï  r"  r  r  r	  ÚDictDecompilerr  r  r  r!  rA  rJ  rR  rW  rz   rC  r  r6   r‹  rŠ  rC   r�  r  Ú_ir  r9  r  r:  r   r;  r›   rA   r!   ú<module>r     så  ðñõ #Ý (ß 8÷÷ õ #Ý 7Ý 7Ý 1Ý Û Û Û 	ð 	�‰˜Ñ€Ø€g×Ñ˜Ó!€ð€ð €ôT(�ô T(ôn/&�ô /&òd	ôI%�Fô I%ôX˜]ô ô
!;˜=ô !;ôH&-˜=ô &-ôR	˜-ô 	ô.Ð'ô .ô1Ð-ô 1ôDˆFô DôNh �uô h ôV"Ð!ô "ô4 �5ô 4 ôn �5ô  ôF3�6ô 3ôl=,ˆvô =,ô@H)�&ô H)òV!òò
ò
ò)ò)òò$ò$òòòòòô�fô ô2;�_ô ;ô<�oô <ò$òô�oô ô2�_ô ô8�_ô ô$˜>ô ô.�^ô ô:˜>ô :ôz:�ô :ôz�fô ò, ò,ò ò
ò"òJ
òô(�vô ô*;˜ô ;ò|òòò.ôD�~ô ô8˜ô ô0˜ô ò(òò*ô*�vô ôB�vô ô&R�?ô Rð"&à*ð&ð ˆuÐ.°±l³nÐEð&ð 6ð	&ð
 &ð&ð ˆ�%˜™Ó0Ð1ð&ð ˆk˜5 $©Ó(9Ð:ð&ð ˆ
�E˜4¡Ó!2Ð3ð&ð ˆz˜5 $©Ó(9Ð:ð&ð ˆ�e˜T¡?Ó#4Ð5ð&ð %ð&ð 1ð&ð 0ð&ð 9ð&ð 8ð&ð  .ð!&ð" 3ð#&ð$ ˆl˜GÒ%?ÀÐFð%&ð& +ð'&ð( ˆ
�Gš\¨4Ð0ð)&ð* 0ð+&ð, &ð-&ð. 0ð/&ð0 2ð1&ð2 5ð3&ð4 4ð5&ð6 5ð7&ð8 1ð9&ð: 1ð;&ð< ˆ�H˜dÑ$4Ó$6Ð7ð=&ð> 0ð?&ð@ ˆ�X˜qÑ"3Ó"5Ð6ðA&ðB ˆÐ(¨$Ñ0DÓ0FÐGðC&ðD ˆz˜8 TÑ+<Ó+>Ð?ðE&ðF ˆy˜( DÑ*:Ó*<Ð=ðG&ðH ˆ˜ $Ñ(<Ó(>Ð?ðI&ðJ ˆ�X˜tÑ%6Ó%8Ð9ðK&Ð ðT +Øˆl˜GÒ%?ÀÐFØˆz˜8 TÑ+<Ó+>Ð?Øˆy˜( DÑ*:Ó*<Ð=Øˆ˜ $Ñ(<Ó(>Ð?Øˆ�X˜tÑ%6Ó%8Ð9ðÐ ð Ð Ø
€ð *àØØØØðð +Ø*Ø+Ø0Ø4Ø.Ø-Ø'Ø'Ø0Ø0Ø.Ø:Ø-Ø2Ø7Ø6Ø,Ø,Øˆ�(˜D¡.Ó"2Ð3ð;Ð ðD *àØØØØðð +Ø*Ø+Ø0Ø4Ø.Ø-Ø'Ø'Ø0Ø0Ø2Ø7Øˆ�(˜D¡.Ó"2Ð3ð/Ð ò60ñ$ Ð"Ô #Ù ÐÔ ô4˜×4Ñ4ô 4ô8˜M×8Ñ8ô 8ôc�6ô còL/ô:�lô :ôz*�|ô *ôZ˜,ô ô H#ˆvô H#ôVi4ˆhô i4ôX7!ˆxô 7!ôt"�(ô "ôJ*U�Vô *Uò`HÐ ðT Ð Ù
ÐÓÐ"8Ò8Ð 8Ð8àÐ Ù
Ð&Ó
'ò :€BØ79ÐÐ/°Ñ3Ò4ð:òfÐ ðP Ð Ù
ÐÓÐ"8Ò8Ð 8Ð8ògÐ ðR Ð Ù
ÐÓÐ!5Ò5Ð 5Ð5òXÐ ðt  Ð Ù
Ð!Ó"Ð&@Ò@Ð @Ñ@rA   