§
    |ØjW€  ã                   óè  — d dl mZmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZmZmZmZ d dlmZ d dlmZ d dlmZmZ d d	lZej        Zeej        _        d
„ Z G d„ de¦  «        Zedœd„Zeej        _        d„ Z e ej!        _"        d„ Z#e#ej        _$         G d„ de¦  «        Z%dd e&¦   «         fddœd„Z'e'ej        _(        dddœd„Z)e)ej        _*        d„ Z+d„ Z,d„ Z-e-ej.        _/        e-ej0        _/        e-ej1        _/        e-ej2        _/        d„ Z3d„ Z4e4ej.        _5        e4ej0        _5        e4ej6        _5        e4ej1        _5        e4ej2        _5         G d „ d!e¦  «        Z7 G d"„ d#e8¦  «        Z9d,d%„Z:e:ej        _;        d&„ Z<d'Z=d(Z>d-d)„Z?e?ej        _@        d-d*„ZAeBd+k    rXd d	lCZC eDeCjE        ¦  «        d$k    r eCjF         eA¦   «         ¦  «         d d	lGZG eCjF         eGjH        ¦   «         jI        ¦  «         d	S d	S ).é    )ÚnoRoundÚotRound©Ú	bit_count)ÚotTables)ÚsupportScalar)ÚbuildVarRegionListÚbuildVarStoreÚbuildVarRegionÚbuildVarData)Úpartial)Údefaultdict)ÚheappushÚheappopNc                 ód   — t          t          |                      ¦   «         d„ ¬¦  «        ¦  «        S )Nc                 ó   — | d         S ©Nr   © )Úkvs    úŽ/Users/tedpeters/Documents/Projects/Claude Projects/Misc Tools/notename-sheets/.venv/lib/python3.11/site-packages/fontTools/varLib/varStore.pyú<lambda>z!_getLocationKey.<locals>.<lambda>   s
   € °B°q´E€ ó    ©Úkey)ÚtupleÚsortedÚitems)Úlocs    r   Ú_getLocationKeyr      s)   € Ý•˜Ÿ	š	™œÐ)9Ð)9Ð:Ñ:Ô:Ñ;Ô;Ð;r   c                   ó`   — e Zd Zd„ Zd„ Zd„ Zdd„Zdd„Zedœd	„Z	edœd
„Z
edœd„Zedœd„ZdS )ÚOnlineVarStoreBuilderc                 óÔ   — || _         i | _        t          g |¦  «        | _        t	          | j        g ¦  «        | _        d | _        d | _        d | _        i | _	        i | _
        d | _        d S ©N)Ú	_axisTagsÚ
_regionMapr	   Ú_regionListr
   Ú_storeÚ_dataÚ_modelÚ	_supportsÚ_varDataIndicesÚ_varDataCachesÚ_cache)ÚselfÚaxisTagss     r   Ú__init__zOnlineVarStoreBuilder.__init__   sf   € Ø!ˆŒØˆŒÝ-¨b°(Ñ;Ô;ˆÔÝ# DÔ$4°bÑ9Ô9ˆŒØˆŒ
ØˆŒØˆŒØ!ˆÔØ ˆÔØˆŒˆˆr   c                 óH   — |                       |j        ¦  «         || _        d S r#   )ÚsetSupportsÚsupportsr)   )r.   Úmodels     r   ÚsetModelzOnlineVarStoreBuilder.setModel%   s#   € Ø×Ò˜œÑ(Ô(Ð(ØˆŒˆˆr   c                 ó�   — d | _         t          |¦  «        | _        | j        r| j        d         s| j        d= d | _        d | _        d S r   )r)   Úlistr*   r-   r(   )r.   r3   s     r   r2   z!OnlineVarStoreBuilder.setSupports)   sJ   € ØˆŒÝ˜h™œˆŒØŒ>ð 	" $¤.°Ô"3ð 	"Ø”˜qÐ!ØˆŒØˆŒ
ˆ
ˆ
r   Tc                 ó  — t          | j        j        ¦  «        | j        _        t          | j        j        ¦  «        | j        _        | j        j        D ]1}t          |j        ¦  «        |_        | 	                    |¬¦  «         Œ2| j        S )N©Úoptimize)
Úlenr&   ÚRegionÚRegionCountr'   ÚVarDataÚVarDataCountÚItemÚ	ItemCountÚcalculateNumShorts)r.   r:   Údatas      r   ÚfinishzOnlineVarStoreBuilder.finish1   sw   € Ý'*¨4Ô+;Ô+BÑ'CÔ'CˆÔÔ$Ý#& t¤{Ô':Ñ#;Ô#;ˆŒÔ Ø”KÔ'ð 	7ð 	7ˆDÝ  ¤™^œ^ˆDŒNØ×#Ò#¨XÐ#Ñ6Ô6Ð6Ð6ØŒ{Ðr   é   c                 ó`  — | j         }| j        }| j        }g }|D ]…}t          |¦  «        }|                     |¦  «        }|€Ht          || j        ¦  «        }	t          |j        ¦  «        x}||<   |j         	                    |	¦  «         | 	                    |¦  «         Œ†t          |¦  «        }| j                             |¦  «        }
|
�R|
| _        | j        j        |
         | _        | j        |         | _        t          | j        j        ¦  «        |z   dk    rd }
|
€�t'          |g d¬¦  «        | _        t          | j        j        ¦  «        | _        | j        j         	                    | j        ¦  «         | j        | j        |<   || j        vr
i | j        |<   | j        |         | _        d S d S )Néÿÿ  Fr9   )r%   r&   r*   r   Úgetr   r$   r;   r<   Úappendr   r+   Ú_outerr'   r>   r(   r,   r-   r@   r   )r.   Ú	num_itemsÚ	regionMapÚ
regionListÚregionsÚregionIndicesÚregionr   ÚidxÚ	varRegionÚ
varDataIdxs              r   Ú_add_VarDataz"OnlineVarStoreBuilder._add_VarData9   sª  € Ø”Oˆ	ØÔ%ˆ
à”.ˆØˆØð 	&ð 	&ˆFÝ! &Ñ)Ô)ˆCØ—-’- Ñ$Ô$ˆCØˆ{Ý*¨6°4´>ÑBÔB�	Ý'*¨:Ô+<Ñ'=Ô'=Ð=��i ‘nØÔ!×(Ò(¨Ñ3Ô3Ð3Ø× Ò  Ñ%Ô%Ð%Ð%õ �MÑ"Ô"ˆØÔ)×-Ò-¨cÑ2Ô2ˆ
ØÐ!Ø$ˆDŒKØœÔ,¨ZÔ8ˆDŒJØÔ-¨cÔ2ˆDŒKÝ�4”:”?Ñ#Ô# iÑ/°&Ò8Ð8à!�
àÐÝ% m°RÀ%ÐHÑHÔHˆDŒJÝ˜dœkÔ1Ñ2Ô2ˆDŒKØŒKÔ×&Ò& t¤zÑ2Ô2Ð2Ø(,¬ˆDÔ  Ñ%Ø˜$Ô-Ð-Ð-Ø+-�Ô# CÑ(ØÔ-¨cÔ2ˆDŒKˆKˆKð Ðr   ©Úroundc                ó    — | j                              ||¬¦  «        }|                     d¦  «        }||                      |t          ¬¦  «        fS )NrU   r   )r)   Ú	getDeltasÚpopÚstoreDeltasr   )r.   Úmaster_valuesrV   ÚdeltasÚbases        r   ÚstoreMastersz"OnlineVarStoreBuilder.storeMasters\   sI   € Ø”×&Ò& }¸EÐ&ÑBÔBˆØ�zŠz˜!‰}Œ}ˆØ�T×%Ò% fµGÐ%Ñ<Ô<Ð<Ð<r   c                óx   ‡ ‡— ˆˆ fd„|D ¦   «         }d„ |D ¦   «         }|‰                       |t          ¬¦  «        fS )Nc                 óH   •— g | ]}‰j                              |‰¬ ¦  «        ‘ŒS )rU   )r)   rX   )Ú.0r[   rV   r.   s     €€r   ú
<listcomp>z:OnlineVarStoreBuilder.storeMastersMany.<locals>.<listcomp>b   s>   ø€ ð 
ð 
ð 
àð ŒK×!Ò! -°uÐ!Ñ=Ô=ð
ð 
ð 
r   c                 ó8   — g | ]}|                      d ¦  «        ‘ŒS ©r   )rY   ©ra   r\   s     r   rb   z:OnlineVarStoreBuilder.storeMastersMany.<locals>.<listcomp>f   s"   € Ð=Ð=Ð= v�V—Z’Z ‘]”]Ð=Ð=Ð=r   rU   )ÚstoreDeltasManyr   )r.   Úmaster_values_listrV   Údeltas_listÚ	base_lists   ` `  r   ÚstoreMastersManyz&OnlineVarStoreBuilder.storeMastersManya   sd   øø€ ð
ð 
ð 
ð 
ð 
à!3ð
ñ 
ô 
ˆð >Ð=°Ð=Ñ=Ô=ˆ	Ø˜$×.Ò.¨{Å'Ð.ÑJÔJÐJÐJr   c                ó�  ‡— ˆfd„|D ¦   «         }t          |¦  «        t          | j        ¦  «        dz   k    rt          |dd …         ¦  «        }n6t          |¦  «        t          | j        ¦  «        k    sJ ‚t          |¦  «        }| j        s|                      ¦   «          | j                             |¦  «        }|�|S t          | j        j        ¦  «        }|dk    r0|                      ¦   «          |                      |t          ¬¦  «        S | j         
                    |t          ¬¦  «         | j        dz  |z   }|| j        |<   |S )Nc                 ó&   •— g | ]} ‰|¦  «        ‘ŒS r   r   ©ra   ÚdrV   s     €r   rb   z5OnlineVarStoreBuilder.storeDeltas.<locals>.<listcomp>j   s!   ø€ Ð+Ð+Ð+˜q�%�%˜‘(”(Ð+Ð+Ð+r   rE   rG   rU   é   )r;   r*   r   r(   rT   r-   rH   r@   rZ   r   ÚaddItemrJ   )r.   r\   rV   ÚvarIdxÚinners     `  r   rZ   z!OnlineVarStoreBuilder.storeDeltasi   s;  ø€ Ø+Ð+Ð+Ð+ FÐ+Ñ+Ô+ˆÝˆv‰;Œ;�#˜dœnÑ-Ô-°Ñ1Ò1Ð1Ý˜6 ! " "œ:Ñ&Ô&ˆFˆFå�v‘;”;¥# d¤nÑ"5Ô"5Ò5Ð5Ð5Ð5Ý˜6‘]”]ˆFàŒzð 	 Ø×ÒÑÔÐà”—’ Ñ(Ô(ˆØÐØˆMå�D”J”OÑ$Ô$ˆØ�FŠ?ˆ?à×ÒÑÔÐØ×#Ò# Fµ'Ð#Ñ:Ô:Ð:ØŒ
×Ò˜6­ÐÑ1Ô1Ð1à”+ Ñ# uÑ,ˆØ$ˆŒ�FÑØˆr   c                óŒ  ‡— ˆfd„|D ¦   «         }t          d„ |D ¦   «         ¦  «        }| j        s"|                      t          |¦  «        ¦  «         | j                             |¦  «        }|�|S t          | j        j        ¦  «        }|t          |¦  «        z   dk    r>|                      t          |¦  «        ¦  «         |                      |t          ¬¦  «        S t          |¦  «        D ]@\  }}| j         
                    |t          ¬¦  «         | j        dz  |z   |z   }|| j        |<   ŒA| j        dz  |z   }|| j        |<   |S )Nc                 ó,   •— g | ]}ˆfd „|D ¦   «         ‘ŒS )c                 ó&   •— g | ]} ‰|¦  «        ‘ŒS r   r   rm   s     €r   rb   zDOnlineVarStoreBuilder.storeDeltasMany.<locals>.<listcomp>.<listcomp>„   s!   ø€ Ð1Ð1Ð1 Q˜˜˜a™œÐ1Ð1Ð1r   r   )ra   r\   rV   s     €r   rb   z9OnlineVarStoreBuilder.storeDeltasMany.<locals>.<listcomp>„   s.   ø€ ÐLÐLÐL°fÐ1Ð1Ð1Ð1¨&Ð1Ñ1Ô1ÐLÐLÐLr   c              3   ó4   K  — | ]}t          |¦  «        V — Œd S r#   )r   re   s     r   ú	<genexpr>z8OnlineVarStoreBuilder.storeDeltasMany.<locals>.<genexpr>…   s(   è è € ÐDÐD¨f�E &™MœMÐDÐDÐDÐDÐDÐDr   rG   rU   ro   )r   r(   rT   r;   r-   rH   r@   rf   r   Ú	enumeraterp   rJ   )r.   rh   rV   rq   rr   Úir\   s     `    r   rf   z%OnlineVarStoreBuilder.storeDeltasManyƒ   sW  ø€ ØLÐLÐLÐLÀÐLÑLÔLˆÝÐDÐD¸ÐDÑDÔDÑDÔDˆàŒzð 	0Ø×Ò�c +Ñ.Ô.Ñ/Ô/Ð/à”—’ Ñ-Ô-ˆØÐØˆMå�D”J”OÑ$Ô$ˆØ•3�{Ñ#Ô#Ñ# fÒ,Ð,à×Ò�c +Ñ.Ô.Ñ/Ô/Ð/Ø×'Ò'¨½7Ð'ÑCÔCÐCÝ" ;Ñ/Ô/ð 	)ð 	)‰IˆAˆvØŒJ×Ò˜v­WÐÑ5Ô5Ð5à”k RÑ'¨5Ñ0°1Ñ4ˆFØ"(ˆDŒK˜ÑÐà”+ Ñ# uÑ,ˆØ#)ˆŒ�KÑ àˆr   N)T)rE   )Ú__name__Ú
__module__Ú__qualname__r0   r5   r2   rD   rT   rV   r^   rj   rZ   rf   r   r   r   r!   r!      sè   € € € € € ð
ð 
ð 
ðð ð ðð ð ðð ð ð ð!3ð !3ð !3ð !3ðF 49ð =ð =ð =ð =ð =ð
 =Bð Kð Kð Kð Kð Kð ,1ð ð ð ð ð ð4 5:ð ð ð ð ð ð ð r   r!   rU   c                ó:  ‡— ˆfd„|D ¦   «         }| j         }t          |¦  «        }|dz   |k    rt          |dd …         ¦  «        }n!||k    sJ ||f¦   «         ‚t          |¦  «        }| j                             |¦  «         t          | j        ¦  «        | _        d S )Nc                 ó&   •— g | ]} ‰|¦  «        ‘ŒS r   r   rm   s     €r   rb   z#VarData_addItem.<locals>.<listcomp>    s!   ø€ Ð'Ð'Ð'˜1ˆeˆe�A‰hŒhÐ'Ð'Ð'r   rE   )ÚVarRegionCountr;   r7   r@   rI   rA   )r.   r\   rV   ÚcountUsÚ	countThems     `  r   ÚVarData_addItemr‚   Ÿ   s§   ø€ Ø'Ð'Ð'Ð' Ð'Ñ'Ô'€FàÔ!€GÝ�F‘”€IØ��{�iÒÐÝ�f˜Q˜R˜R”jÑ!Ô!ˆˆà˜)Ò#Ð#Ð# g¨yÐ%9Ñ#Ô#Ð#Ý�f‘”ˆØ„I×Ò�VÑÔÐÝ˜œ‘^”^€D„N€N€Nr   c                 óD   ‡— ˆfd„t          | j        ¦  «        D ¦   «         S )Nc                 ól   •— i | ]0\  }}|j         d k    ¯‰|         j        |j        |j         |j        f“Œ1S rd   )Ú	PeakCoordÚaxisTagÚ
StartCoordÚEndCoord)ra   ry   ÚregÚ	fvar_axess      €r   ú
<dictcomp>z)VarRegion_get_support.<locals>.<dictcomp>±   sJ   ø€ ð ð ð áˆAˆsØŒ=˜AÒÐð 	�!ŒÔ˜sœ~¨s¬}¸c¼lÐKàÐÐr   )rx   ÚVarRegionAxis)r.   rŠ   s    `r   ÚVarRegion_get_supportr�   °   s9   ø€ ðð ð ð å Ô 2Ñ3Ô3ðñ ô ð r   c                 ó*   — t          | j        ¦  «        S r#   )Úboolr>   ©r.   s    r   ÚVarStore___bool__r‘   »   s   € Ý�”ÑÔÐr   c                   óV   — e Zd ZdZi fd„Zd„ Zd„ Zd„ Zd„ Ze	d„ ¦   «         Z
d„ Zd	„ Zd
S )ÚVarStoreInstancera  Evaluate a VarStore's deltas at a (mutable via setLocation) location.

    Region supports are cached for the lifetime of the instancer: after
    mutating the store's regions (or the fvar axes), construct a new
    instancer rather than reusing this one via setLocation.
    c                 ó´   — || _         |�|j        dk    sJ ‚|r|j        ng | _        |r|j        j        ng | _        i | _        |                      |¦  «         d S )NrE   )	rŠ   ÚFormatr>   Ú_varDataÚVarRegionListr<   Ú_regionsr*   ÚsetLocation)r.   ÚvarstorerŠ   Úlocations       r   r0   zVarStoreInstancer.__init__Ê   so   € Ø"ˆŒØÐ 8¤?°aÒ#7Ð#7Ð#7Ð7Ø,4Ð<˜Ô(Ð(¸"ˆŒØ9AÐI˜Ô.Ô5Ð5ÀrˆŒð
 ˆŒØ×Ò˜Ñ"Ô"Ð"Ð"Ð"r   c                 óV   — t          |¦  «        | _        |                      ¦   «          d S r#   )Údictr›   Ú_clearCaches)r.   r›   s     r   r™   zVarStoreInstancer.setLocationÖ   s'   € Ý˜X™œˆŒØ×ÒÑÔÐÐÐr   c                 ó   — i | _         d S r#   )Ú_scalarsr�   s    r   rž   zVarStoreInstancer._clearCachesÚ   s   € ØˆŒˆˆr   c                 óœ   — | j                              |¦  «        }|€/| j        |                              | j        ¦  «        }|| j         |<   |S r#   )r*   rH   r˜   Úget_supportrŠ   )r.   Ú	regionIdxÚsupports      r   Ú_getSupportzVarStoreInstancer._getSupportÝ   sI   € Ø”.×$Ò$ YÑ/Ô/ˆØˆ?Ø”m IÔ.×:Ò:¸4¼>ÑJÔJˆGØ(/ˆDŒN˜9Ñ%Øˆr   c                 ó¢   — | j                              |¦  «        }|€2t          | j        |                      |¦  «        ¦  «        }|| j         |<   |S r#   )r    rH   r   r›   r¥   )r.   r£   Úscalars      r   Ú
_getScalarzVarStoreInstancer._getScalarä   sL   € Ø”×"Ò" 9Ñ-Ô-ˆØˆ>Ý" 4¤=°$×2BÒ2BÀ9Ñ2MÔ2MÑNÔNˆFØ'-ˆDŒM˜)Ñ$Øˆr   c                 óL   — d}t          | |¦  «        D ]\  }}|sŒ|||z  z  }Œ|S )Nç        )Úzip)r\   ÚscalarsÚdeltarn   Úss        r   ÚinterpolateFromDeltasAndScalarsz1VarStoreInstancer.interpolateFromDeltasAndScalarsë   sC   € àˆÝ˜ Ñ(Ô(ð 	ð 	‰DˆAˆqØð ØØ�Q˜‘U‰NˆEˆEØˆr   c                 ó*  ‡ — |dz	  |dz  }}|t           k    rdS ‰ j        }|t          |¦  «        k    s|t          ||         j        ¦  «        k    rdS ˆ fd„||         j        D ¦   «         }||         j        |         }‰                      ||¦  «        S )Nro   rG   rª   c                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS r   ©r¨   ©ra   Úrir.   s     €r   rb   z1VarStoreInstancer.__getitem__.<locals>.<listcomp>ÿ   s%   ø€ ÐOÐOÐO¨2�4—?’? 2Ñ&Ô&ÐOÐOÐOr   )ÚNO_VARIATION_INDEXr–   r;   r@   ÚVarRegionIndexr¯   )r.   ÚvaridxÚmajorÚminorÚvarDatar¬   r\   s   `      r   Ú__getitem__zVarStoreInstancer.__getitem__ô   s¤   ø€ Ø ‘| V¨f¡_ˆuˆØÕ'Ò'Ð'Ø�3Ø”-ˆð
 •C˜‘L”LÒ Ð  E­S°¸´Ô1DÑ-EÔ-EÒ$EÐ$EØ�3ØOÐOÐOÐO°¸´Ô1NÐOÑOÔOˆØ˜”Ô$ UÔ+ˆØ×3Ò3°F¸GÑDÔDÐDr   c                 óp   ‡ — ‰ j         }ˆ fd„||         j        D ¦   «         }‰                      ||¦  «        S )Nc                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS r   r²   r³   s     €r   rb   z;VarStoreInstancer.interpolateFromDeltas.<locals>.<listcomp>  s%   ø€ ÐVÐVÐV¨2�4—?’? 2Ñ&Ô&ÐVÐVÐVr   )r–   r¶   r¯   )r.   ÚvarDataIndexr\   rº   r¬   s   `    r   ÚinterpolateFromDeltasz'VarStoreInstancer.interpolateFromDeltas  sA   ø€ Ø”-ˆØVÐVÐVÐV°¸Ô1FÔ1UÐVÑVÔVˆØ×3Ò3°F¸GÑDÔDÐDr   N)rz   r{   r|   Ú__doc__r0   r™   rž   r¥   r¨   Ústaticmethodr¯   r»   r¿   r   r   r   r“   r“   Â   s´   € € € € € ðð ð 68ð 
#ð 
#ð 
#ð 
#ðð ð ðð ð ðð ð ðð ð ð ðð ñ „\ððEð Eð EðEð Eð Eð Eð Er   r“   TFr>   )r>   c          	      óR  — t          t          ¦  «        }|D ]3}|t          k    rŒ|dz	  }|dz  }	||                              |	¦  «         Œ4~t	          | |¦  «        }
g }t          t          i}t          |
¦  «        D �]d\  }}|                     |¦  «        }|€Œt          |¦  «        }|                     |¦  «         |j	        }g }|dk    r_|r]t          t          |¦  «        ¦  «        D ]?}	|                     |	|v r||	         ndgt          ||	         ¦  «        z  ¦  «         |	||	<   Œ@nx|dk    r#t          |¦  «        t          ||z
  ¦  «        z   }nt          |¦  «        }|D ]=}	t          |¦  «        }|                     ||	         ¦  «         |dz  |z   ||dz  |	z   <   Œ>||_	        t          |j	        ¦  «        |_        |dk    r|                     |¬¦  «         �Œft          | ||¦  «         t          | |dz   t          |¦  «        ¦  «         |                      ¦   «          |S )Nro   rG   r   r>   r9   ÚCount)r   Úsetrµ   ÚaddÚgetattrrx   rH   r;   rI   r@   Úranger   rA   rB   ÚsetattrÚprune_regions)r.   ÚvarIdxesr:   ÚretainFirstMapÚadvIdxesr>   Úusedrq   r¸   r¹   rº   Ú
newVarDataÚ
varDataMaprC   Ú
usedMinorsÚnewMajorr   ÚnewItemsÚminorsÚnewMinors                       r   ÚVarStore_subset_varidxesrÕ     sb  € õ •sÑÔ€DØð ð ˆØÕ'Ò'Ð'ØØ˜"‘ˆØ˜‘ˆØˆUŒ�Š˜ÑÔÐÐØõ �d˜GÑ$Ô$€GØ€JÝ$Õ&8Ð9€JÝ  Ñ)Ô)ð 7ñ 7‰ˆˆtØ—X’X˜e‘_”_ˆ
ØÐØÝ�z‘?”?ˆØ×Ò˜$ÑÔÐà”	ˆØˆØ�AŠ:ˆ:˜.ˆ:Ý�s 5™zœzÑ*Ô*ð *ð *�Ø—’Ø$)¨ZÐ$7Ð$7�E˜%”L�L¸a¸SÅ3ÀuÈUÄ|ÑCTÔCTÑ=Tñô ð ð %*�
˜5Ñ!Ð!ð	*ð ˜ŠzˆzÝ Ñ)Ô)­F°:ÀÑ3HÑ,IÔ,IÑI��å 
Ñ+Ô+�Øð Pð P�Ý˜x™=œ=�Ø—’  e¤Ñ-Ô-Ð-Ø5=À±^ÀxÑ4O�
˜E R™K¨5Ñ0Ñ1Ð1àˆŒ	Ý˜TœY™œˆŒà�iÒÐØ×#Ò#¨XÐ#Ñ6Ô6Ð6ùåˆD�'˜:Ñ&Ô&Ð&ÝˆD�'˜GÑ#¥S¨¡_¤_Ñ5Ô5Ð5à×ÒÑÔÐàÐr   r—   )r>   r—   c                óÈ  ‡	— t          ¦   «         }t          | |¦  «        D ]}|                     |j        ¦  «         Œt          | |¦  «        }|j        }g }i Š	t          |¦  «        D ]/}t          |¦  «        ‰	|<   |                     ||         ¦  «         Œ0||_        t          |j        ¦  «        |_        t          | |¦  «        D ]}ˆ	fd„|j        D ¦   «         |_        ŒdS )zRemove unused VarRegions.c                 ó    •— g | ]
}‰|         ‘ŒS r   r   )ra   ry   rL   s     €r   rb   z*VarStore_prune_regions.<locals>.<listcomp>j  s   ø€ ÐIÐIÐI°˜y¨œ|ÐIÐIÐIr   N)	rÄ   rÆ   Úupdater¶   r<   r   r;   rI   r=   )
r.   r>   r—   ÚusedRegionsrC   rM   rN   Ú
newRegionsry   rL   s
            @r   ÚVarStore_prune_regionsrÛ   T  s  ø€ õ ‘%”%€KÝ˜˜gÑ&Ô&ð 0ð 0ˆØ×Ò˜4Ô.Ñ/Ô/Ð/Ð/å˜˜}Ñ-Ô-€JØÔ€GØ€JØ€IÝ�KÑ Ô ð &ð &ˆÝ˜:‘”ˆ	�!‰Ø×Ò˜' !œ*Ñ%Ô%Ð%Ð%Ø"€JÔÝ  Ô!2Ñ3Ô3€JÔå˜˜gÑ&Ô&ð Jð JˆØIÐIÐIÐI°TÔ5HÐIÑIÔIˆÔÐðJð Jr   c                 ó  — t          | ¦  «        t          j        k    r || ¦  «         dS t          | t          ¦  «        r| D ]}t          ||¦  «         ŒdS t          | d¦  «        rQt          | d¦  «        sA|                      ¦   «         D ]*}t          | |j	        d¦  «        }|�t          ||¦  «         Œ+dS t          | t          j
        ¦  «        r,| j                             ¦   «         D ]}t          ||¦  «         ŒdS dS )zqRecurse down from self, if type of an object is ot.Device,
    call func() on it.  Works on otData-style classes.ÚgetConvertersÚpostReadN)ÚtypeÚotÚDeviceÚ
isinstancer7   Ú_visitÚhasattrrÝ   rÆ   ÚnameÚValueRecordÚ__dict__Úvalues)r.   ÚfuncÚthatÚconvs       r   rã   rã   p  s4  € õ ˆD�z„z•R”YÒÐØˆˆT‰
Œ
ˆ
ˆ
ˆ
å	�D�$Ñ	Ô	ð Øð 	ð 	ˆDÝ�4˜ÑÔÐÐð	ð 	õ 
��Ñ	'Ô	'ð µ¸¸jÑ0IÔ0Ið Ø×&Ò&Ñ(Ô(ð 	#ð 	#ˆDÝ˜4 ¤¨DÑ1Ô1ˆDØÐÝ�t˜TÑ"Ô"Ð"øð	#ð 	#õ
 
�D�"œ.Ñ	)Ô	)ð Ø”M×(Ò(Ñ*Ô*ð 	ð 	ˆDÝ�4˜ÑÔÐÐðð ð	ð 	r   c                 ój   — | j         dk    r'|                     | j        dz  | j        z   ¦  «         dS dS )z6Add VarIdx in this Device table (if any) to the set s.é €  ro   N)ÚDeltaFormatrÅ   Ú	StartSizeÚEndSize)r.   r®   s     r   Ú_Device_recordVarIdxrñ   †  s>   € àÔ˜6Ò!Ð!Ø	�ŠˆtŒ~ Ñ# t¤|Ñ3Ñ4Ô4Ð4Ð4Ð4ð "Ð!r   c                 óR   — t          t          |¬¦  «        }t          | |¦  «         d S )N)r®   )r   rñ   rã   )r.   ÚvaridxesÚadders      r   ÚObject_collect_device_varidxesrõ   Œ  s+   € ÝÕ(¨HÐ5Ñ5Ô5€EÝ
ˆ4�ÑÔÐÐÐr   c                 óâ   — t          | ¦  «        |v rdS |                     t          | ¦  «        ¦  «         | j        dk    r.|| j        dz  | j        z            }|dz	  | _        |dz  | _        dS dS )z9Map VarIdx in this Device table (if any) through mapping.Nrí   ro   rG   )ÚidrÅ   rî   rï   rð   )r.   ÚmappingÚdonerq   s       r   Ú_Device_mapVarIdxrú   —  sx   € å	ˆ$�x„x�4ÐÐØˆØ‡H‚H�R�‰XŒXÑÔÐØÔ˜6Ò!Ð!Ø˜$œ.¨BÑ.°$´,Ñ>Ô?ˆØ 2™ˆŒØ ‘ˆŒˆˆð "Ð!r   c                 ól   — t          t          |t          ¦   «         ¬¦  «        }t          | |¦  «         d S )N)rø   rù   )r   rú   rÄ   rã   )r.   Úvaridxes_mapÚmappers      r   ÚObject_remap_device_varidxesrþ   ¢  s1   € ÝÕ&°Å3Á5Ä5ÐIÑIÔI€FÝ
ˆ4�ÑÔÐÐÐr   c                   óX   — e Zd Zd„ Zd„ Zd„ Zd„ Zed„ ¦   «         Zed„ ¦   «         Z	d„ Z
dS )	Ú	_Encodingc                 óÔ   — || _         t          |¦  «        | _        |                      |¦  «        | _        |                      | j        ¦  «        | _        t          ¦   «         | _        d S r#   )	Úcharsr   ÚwidthÚ_columnsÚcolumnsÚ_characteristic_overheadÚoverheadrÄ   r   )r.   r  s     r   r0   z_Encoding.__init__¯  sQ   € ØˆŒ
Ý˜uÑ%Ô%ˆŒ
Ø—}’} UÑ+Ô+ˆŒØ×5Ò5°d´lÑCÔCˆŒÝ‘U”UˆŒ
ˆ
ˆ
r   c                 ó:   — | j                              |¦  «         d S r#   )r   rÅ   )r.   Úrows     r   rI   z_Encoding.append¶  s   € ØŒ
�Š�sÑÔÐÐÐr   c                 ó:   — | j                              |¦  «         d S r#   )r   rØ   )r.   Úlsts     r   Úextendz_Encoding.extend¹  s   € ØŒ
×Ò˜#ÑÔÐÐÐr   c                 ó   — | j         | j        fS r#   )r  r  r�   s    r   Úwidth_sort_keyz_Encoding.width_sort_key¼  s   € ØŒz˜4œ:Ð%Ð%r   c                 ó4   — d}|t          | ¦  «        dz  z  }|S )zOReturns overhead in bytes of encoding this characteristic
        as a VarData.é
   é   r   )r  Úcs     r   r  z"_Encoding._characteristic_overhead¿  s%   € ð ˆØ	�Y�wÑÔ !Ñ#Ñ#ˆØˆr   c                 ó>   — d}d}| r| dz  r||z  }| dz  } |dz  }| °|S )Nr   rE   é   é   r   )r  Úcolsry   s      r   r  z_Encoding._columnsÇ  sL   € àˆØˆØð 	Ø�v‰~ð Ø˜‘	�Ø�a‰KˆEØ�!‰GˆAð	 ð 	ð
 ˆr   c                 ó:  — |j         | j         z  }t          |¦  «        }| j        |j        z  }t                               |¦  «        }| j        
 |j        z   |z
  || j        z
  t          | j        ¦  «        z  z
  ||j        z
  t          |j        ¦  «        z  z
  }|S r#   )	r  r   r  r   r  r  r  r;   r   )r.   Úother_encodingÚcombined_charsÚcombined_widthÚcombined_columnsÚcombined_overheadÚcombined_gains          r   Úgain_from_mergingz_Encoding.gain_from_mergingÒ  s«   € Ø'Ô-°´
Ñ:ˆÝ" >Ñ2Ô2ˆØœ<¨.Ô*@Ñ@ÐÝ%×>Ò>Ð?OÑPÔPÐàŒ]ˆNØÔ%ñ&àñ ð  ¤
Ñ*­c°$´*©o¬oÑ=ñ>ð  Ô 4Ñ4½¸NÔ<PÑ8QÔ8QÑQñ	Rð 	ð Ðr   N)rz   r{   r|   r0   rI   r  r  rÁ   r  r  r  r   r   r   r   r   ®  s•   € € € € € ðð ð ðð ð ðð ð ð&ð &ð &ð ðð ñ „\ðð ðð ñ „\ððð ð ð ð r   r   c                   ó0   — e Zd Zd„ Zd„ Zed„ ¦   «         ZdS )Ú_EncodingDictc                 ó.   — t          |¦  «        x}| |<   |S r#   )r   )r.   r  Úrs      r   Ú__missing__z_EncodingDict.__missing__â  s   € Ý# EÑ*Ô*Ð*ˆˆD�‰KØˆr   c                 óf   — |                       |¦  «        }| |                              |¦  «         d S r#   )Ú_row_characteristicsrI   )r.   r	  r  s      r   Úadd_rowz_EncodingDict.add_rowæ  s3   € Ø×)Ò)¨#Ñ.Ô.ˆØˆUŒ×Ò˜3ÑÔÐÐÐr   c                 óê   — d}d}d}| D ]8}|r||z  }d|cxk    rdk    s
n ||dz  z  }d|cxk    rdk    sn d	} n|d
z  }Œ9|r/d}d}| D ](}|r||dz  z  }d|cxk    rdk    s
n ||dz  z  }|d
z  }Œ)|S )z+Returns encoding characteristics for a row.Fr   rE   i€ÿÿÿé   r  i €ÿÿiÿ  Tr  é   é   r   )r	  Ú	longWordsr  ry   Úvs        r   r%  z"_EncodingDict._row_characteristicsê  s  € ð ˆ	àˆØˆØð 	ð 	ˆAØð Ø˜‘
�Ø˜AÐ$Ð$Ò$Ð$ Ò$Ð$Ð$Ð$Ø˜˜V™Ñ#�Ø˜aÐ(Ð(Ò(Ð( 5Ò(Ð(Ð(Ð(Ø �	Ø�Ø�!‰GˆAˆAàð 		àˆEØˆAØð ð �Øð (Ø˜Q ™ZÑ'�EØ !Ð,Ð,Ò,Ð, uÒ,Ð,Ð,Ð,Ø˜Q ™ZÑ'�EØ�a‘��àˆr   N)rz   r{   r|   r#  r&  rÁ   r%  r   r   r   r   r   á  sM   € € € € € ðð ð ð ð  ð  ð ðð ñ „\ðð ð r   r   rE   c           
      ót	  — t          | j        j        ¦  «        }dg|z  }i }t          ¦   «         }t	          | j        ¦  «        D ]ç\  }}|j        }	t	          |j        ¦  «        D ]Æ\  }
}t          |¦  «        }|dk    r't          |	|¦  «        D ]\  }}||xx         |z  cc<   Œn9t          |	|¦  «        D ](\  }}||xx         t          ||z  ¦  «        |z  z  cc<   Œ)t          |¦  «        }|rt          |¦  «        sd||dz  |
z   <   Œ¦|                     |¦  «         |||dz  |
z   <   ŒÇŒèt          |                     ¦   «         t           j        ¬¦  «        }~g }t	          |¦  «        D ]_\  }}t%          |dz   t          |¦  «        ¦  «        D ]9}||         }|                     |¦  «        }|dk    rt)          || ||f¦  «         Œ:Œ`|�r(t+          |¦  «        \  }}}||         �||         €Œ'||         ||         }}d\  ||<   ||<   |j        |j        z  }t!          |¦  «        }|                     |j        ¦  «         |                     |j        ¦  «         t	          |¦  «        D ]o\  }}|€Œ|j        |k    r |                     |j        ¦  «         d||<   Œ3|                     |¦  «        }|dk    r!t)          || |t          |¦  «        f¦  «         Œp|                     |¦  «         |�°(d„ |D ¦   «         }i }|                     t           j        ¬¦  «         g | _        |D ]Ç}t          |j        ¦  «        }|r¯t          | j        ¦  «        }t7          j        ¦   «         }| j                             |¦  «         t%          |¦  «        |_        t          |j        ¦  «        |_        |dd…         |dd…         c|_        }t	          |j        ¦  «        D ]\  }
}|dz  |
z   ||<   Œ|°¯ŒÈt:          t:          i}|                     ¦   «         D ]\  }}|�||         nt:          ||<   Œt          | j        j        ¦  «        | j        _        t          | j        ¦  «        | _        | j        D ]/}t          |j        ¦  «        |_         | !                    ¦   «          Œ0|  "                    ¦   «          |S )	z@Optimize storage. Returns mapping from old VarIdxes to new ones.r   rE   Nro   r   )NNc                 ó   — g | ]}|®|‘ŒS r#   r   )ra   Úencodings     r   rb   z%VarStore_optimize.<locals>.<listcomp>¢  s   € ÐGÐGÐG˜h°(Ð2F�Ð2FÐ2FÐ2Fr   rG   )#r;   r—   r<   r   rx   r>   r¶   r@   r7   r«   rV   r   Úanyr&  r   rè   r   r  rÇ   r  r   r   r  r  r   rI   Úsortrà   r   rµ   r=   r?   rA   r:   rÉ   )r.   Úuse_NO_VARIATION_INDEXÚquantizationÚnÚzeroesÚfront_mappingÚ	encodingsr¸   rC   rO   r¹   Úitemr	  r£   r,  ÚtodoÚheapry   r/  Újr  Úcombining_gainÚ_r  Úcombined_encodingÚkÚencÚback_mappingr   Ú
varidx_maps                                 r   ÚVarStore_optimizerC  	  s@  € õX 	ˆDÔÔ%Ñ&Ô&€AØˆS�1‰W€Fà€Må‘”€Iõ ! ¤Ñ.Ô.ð 7ð 7‰ˆˆtØÔ+ˆå$ T¤YÑ/Ô/ð 	7ð 	7‰KˆE�4Ý�v‘,”,ˆCà˜qÒ Ð Ý$'¨°tÑ$<Ô$<ð (ð (‘L�I˜qØ˜	�N�N”N aÑ'�N�N‘N�Nð(õ %(¨°tÑ$<Ô$<ð ð ‘L�I˜qØ˜	�N�N”NÝ˜a ,Ñ.Ñ/Ô/°,Ñ>ñ�N�N‘N�Nõ ˜‘*”*ˆCà%ð ­c°#©h¬hð Ø7;�˜u¨™{¨eÑ3Ñ4Øà×Ò˜cÑ"Ô"Ð"Ø36ˆM˜5 B™;¨%Ñ/Ñ0Ð0ð'	7õ, �)×"Ò"Ñ$Ô$­)Ô*BÐCÑCÔC€DØð €DÝ  ‘”ð 8ð 8‰ˆˆ8Ý�q˜1‘u�c $™iœiÑ(Ô(ð 	8ð 	8ˆAØ! !œWˆNØ%×7Ò7¸ÑGÔGˆNØ Ò!Ð!Ý˜  °°AÐ6Ñ7Ô7Ð7øð		8ð ñ 'Ý˜$‘-”-‰ˆˆ1ˆaØ�Œ7ˆ?˜d 1œg˜oØà#'¨¤7¨D°¬G�.ˆØ%ÑˆˆQ‰��a‘ð (Ô-°´Ñ>ˆÝ% nÑ5Ô5ÐØ× Ò  ¤Ñ0Ô0Ð0Ø× Ò  Ô!5Ñ6Ô6Ð6å ‘o”oð 	@ð 	@‰FˆAˆsØˆ{Øð Œy˜NÒ*Ð*Ø!×(Ò(¨¬Ñ3Ô3Ð3Ø��Q‘Øà.×@Ò@ÀÑEÔEˆNØ Ò!Ð!Ý˜  °µC¸±I´IÐ>Ñ?Ô?Ð?øà�ŠÐ%Ñ&Ô&Ð&ð; ñ 'ð> HÐG¨$ÐGÑGÔG€Ið €LØ‡N‚N•yÔ/€NÑ0Ô0Ð0Ø€D„LØð ;ð ;ˆÝ�x”~Ñ&Ô&ˆàð 	;Ý˜œÑ%Ô%ˆEÝ”:‘<”<ˆDØŒL×Ò Ñ%Ô%Ð%Ý"'¨¡(¤(ˆDÔÝ"% dÔ&9Ñ":Ô":ˆDÔð  % W f Wœ~¨u°V°W°W¬~ÐˆDŒI�uå(¨¬Ñ3Ô3ð ;ð ;‘��tØ&+¨r¡k°UÑ%:�˜TÑ"Ð"ð ð 	;øõ %Õ&8Ð9€JØ×#Ò#Ñ%Ô%ð Qð Q‰ˆˆ1Ø+,¨=˜ Qœ˜Õ>Pˆ
�1‰ˆõ &)¨Ô);Ô)BÑ%CÔ%C€DÔÔ"Ý˜DœLÑ)Ô)€DÔØ”ð ð ˆÝ˜TœY™œˆŒØ�Š‰Œˆˆð 	×ÒÑÔÐàÐr   c                 óf   — | |k    rdS | |k    s|| k    rdS | |k     r| |z
  ||z
  z  S || z
  ||z
  z  S )zIPer-axis support-scalar factor at coordinate v (supportScalar semantics).ç      ð?rª   r   )r,  ÚstartÚpeakÚends       r   Ú
_tentValuerI  Í  sU   € àˆD‚y€yØˆsØˆE‚z€z�S˜A’X�XØˆsØˆ4‚x€xØ�E‘	˜d U™lÑ+Ð+Ø�!‰G˜˜d™
Ñ#Ð#r   é @  g      ?c                 ó¸  ‡‡‡ ‡!‡"— ˆˆfd„}|t           k    rg }nÙ|dz	  }|dz  }| j        |         }	| j        j        }
|	j        |         }g }t          |	j        |¦  «        D ]‘\  }}|sŒ|
|         }g }t          |j        ¦  «        D ]S\  }}|j	        }|j
        }|j        }|dk    s||k    s||k    rŒ-|dk     r|dk    rŒ:|                     ||||f¦  «         ŒT|                     ||f¦  «         Œ’i Š |� ||¦  «        \  Š"Š!‰"‰!h‰ |<   |D ]ë\  }}|D ]ã\  }}}}|‰ vr ||¦  «        \  Š"Š!‰"‰!h‰ |<    ||¦  «        \  Š"Š!‰ |                              ˆ!ˆ"fd„|||fD ¦   «         ¦  «         ||k    r?‰ |                              t          t!          |t"          z
  ‰"¦  «        ‰!¦  «        ¦  «         ||k    r?‰ |                              t          t!          |t"          z   ‰"¦  «        ‰!¦  «        ¦  «         ŒäŒìd}‰                      ¦   «         D ]!}|t'          |¦  «        z  }|t(          k    r nŒ"|t(          k    rút+          ‰ ¦  «        }d„ t          |¦  «        D ¦   «         }dx}}t-          j        ˆ fd	„|D ¦   «         Ž D ]•}d
}|D ]D\  }}d}|D ]0\  }}}}|t1          |||                  |||¦  «        z  }|dk    r nŒ1|r|||z  z  }ŒE|�!|t3          |||                  dz  ¦  «        z  }|€|x}}Œut          ||¦  «        }t!          ||¦  «        }Œ–t3          |¦  «        t3          |¦  «        fS d
x}}|D ]Æ\  }}dx}}|D ]�\  }}}} ||¦  «        \  Š"Š!|t1          t          t!          |‰"¦  «        ‰!¦  «        |||¦  «        z  }|t          t1          ‰"|||¦  «        t1          ‰!|||¦  «        ¦  «        z  }|dk    r nŒ‚|dk    rŒ”|t          ||z  ||z  ¦  «        z  }|t!          ||z  ||z  ¦  «        z  }ŒÇ|�8 ||¦  «        \  Š"Š!|t3          ‰"dz  ¦  «        z  }|t3          ‰!dz  ¦  «        z  }t3          |¦  «        t3          |¦  «        fS )u<  Conservatively bound the value this VarStore produces for varIdx.

    Returns (minV, maxV) in F2Dot14 delta units, guaranteed to cover the
    truly reachable range as the input axes vary over their extents:
    [-1, +1] per axis, or the [min, max] interval from axisLimits (a dict of
    axis tag to a (min, default, max, ...) sequence) for axes listed there.
    If identityAxisIndex is not None, that axis's own identity contribution
    (its coordinate, in F2Dot14 units) is added to the bound.

    Before the final OpenType rounding, the produced value is piecewise
    multilinear in the axis coordinates (each region's scalar is a product
    of independent per-axis tents), so over the box its exact extremes are
    attained at vertices of the grid formed by each axis's tent
    breakpoints. One-sided tents (start == peak or peak == end) are
    discontinuous at their peak, so the grid also includes the adjacent
    F2Dot14 coordinate on the open side. When that grid is small enough
    (real fonts) it is enumerated and the result is exact; otherwise the
    result falls back to a per-region interval bound, which ignores
    correlations between regions and may be wider than the true range â€”
    never narrower. Callers use this to cull provably-unreachable
    variation data, so conservativeness is a soundness requirement, not a
    nicety. The fallback costs O(regions Ã— axes); the cap on the exact
    path keeps crafted fonts from hanging the instancer.

    Raw extrema are rounded only after summing the identity and delta terms,
    matching avar2 processing.
    c                 óZ   •— ‰|          j         }|‰v r‰|         }|d         |d         fS dS )Nr   r  )g      ð¿rE  )r†   )ÚaxisIdxÚtagÚlimitsÚ
axisLimitsÚfvarAxess      €€r   ÚaxisIntervalz*VarStore_getExtremes.<locals>.axisIntervalý  s<   ø€ Ø�wÔÔ'ˆØ�*ÐÐØ ”_ˆFØ˜!”9˜f QœiÐ'Ð'Øˆzr   ro   rG   r   Nc              3   óT   •K  — | ]"}t          t          |‰¦  «        ‰¦  «        V — Œ#d S r#   )ÚminÚmax)ra   r,  ÚhiÚlos     €€r   rw   z'VarStore_getExtremes.<locals>.<genexpr>+  s5   øè è € Ð!RÐ!R¸!¥#¥c¨!¨R¡j¤j°"Ñ"5Ô"5Ð!RÐ!RÐ!RÐ!RÐ!RÐ!Rr   rE   c                 ó   — i | ]\  }}||“Œ	S r   r   )ra   r4  ry   s      r   r‹   z(VarStore_getExtremes.<locals>.<dictcomp>:  s   € Ð;Ð;Ð;™D˜A˜q�1�aÐ;Ð;Ð;r   c              3   óB   •K  — | ]}t          ‰|         ¦  «        V — Œd S r#   )r   )ra   ry   Úbreakpointss     €r   rw   z'VarStore_getExtremes.<locals>.<genexpr><  s/   øè è € Ð)VÐ)VÀQ­&°¸Q´Ñ*@Ô*@Ð)VÐ)VÐ)VÐ)VÐ)VÐ)Vr   rª   rE  rJ  )rµ   r>   r—   r<   r@   r«   r¶   rx   rŒ   r‡   r…   rˆ   rI   rØ   rÅ   rT  rU  Ú_F2DOT14_UNITrè   r;   Ú_GET_EXTREMES_MAX_GRIDr   Ú	itertoolsÚproductrI  r   )#r.   rq   rQ  rP  ÚidentityAxisIndexrR  ÚactiveRegionsr¸   r¹   rº   rN   r\   ÚregionIndexr­   rP   Útentsry   Ú
regionAxisrF  rG  rH  ÚgridSizeÚpointsÚaxisIndicesÚaxisPosÚminVÚmaxVÚvertexr,  r§   Ú	scalarMinÚ	scalarMaxrZ  rV  rW  s#     ``                            @@@r   ÚVarStore_getExtremesrm  à  s®  øøøøø€ ð:ð ð ð ð ð ð Õ#Ò#Ð#Øˆˆà˜"‘ˆØ˜‘ˆØ”,˜uÔ%ˆØÔ$Ô+ˆØ”˜eÔ$ˆð ˆÝ"% gÔ&<¸fÑ"EÔ"Eð 	1ð 	1ÑˆK˜Øð ØØ˜[Ô)ˆFØˆEÝ!*¨6Ô+?Ñ!@Ô!@ð 	4ð 	4‘��:Ø"Ô-�Ø!Ô+�Ø Ô)�à˜1’9�9 ¨¢ °°s²
°
ØØ˜1’9�9  q¢ ØØ—’˜a ¨¨cÐ2Ñ3Ô3Ð3Ð3Ø× Ò  %¨ Ñ0Ô0Ð0Ð0ð €KØÐ$Ø�Ð/Ñ0Ô0‰ˆˆBØ*,¨b¨ˆÐ%Ñ&Ø%ð 
Kð 
K‰ˆˆuØ#(ð 		Kð 		KÑˆAˆu�d˜CØ˜Ð#Ð#Ø%˜ a™œ‘��BØ"$ b �˜A‘Ø!�\ !‘_”_‰FˆB�Ø˜ŒN×!Ò!Ð!RÐ!RÐ!RÐ!RÐ!RÀÀtÈSÐ?QÐ!RÑ!RÔ!RÑRÔRÐRØ˜Š}ˆ}Ø˜A”×"Ò"¥3¥s¨4µ-Ñ+?ÀÑ'DÔ'DÀbÑ#IÔ#IÑJÔJÐJØ�sŠ{ˆ{Ø˜A”×"Ò"¥3¥s¨4µ-Ñ+?ÀÑ'DÔ'DÀbÑ#IÔ#IÑJÔJÐJøð		Kð €HØ×$Ò$Ñ&Ô&ð ð ˆØ•C˜‘K”KÑˆØÕ,Ò,Ð,ØˆEð -ð Õ)Ò)Ð)õ ˜[Ñ)Ô)ˆØ;Ð;¥I¨kÑ$:Ô$:Ð;Ñ;Ô;ˆØÐˆˆtÝÔ'Ð)VÐ)VÐ)VÐ)VÈ+Ð)VÑ)VÔ)VÐWð 	$ð 	$ˆFØˆAØ -ð (ð (‘��uØ�Ø+0ð ð Ñ'�A�u˜d CØ�j¨°¸´
Ô);¸UÀDÈ#ÑNÔNÑN�FØ ’{�{Ø˜ð #àð (Ø˜ ™Ñ'�AøØ Ð,Ø•W˜V GÐ,=Ô$>Ô?À%ÑGÑHÔHÑH�Øˆ|Ø���t�tå˜4 ‘|”|�Ý˜4 ‘|”|��Ý�t‰}Œ}�g d™mœmÐ+Ð+ð
 Ð€Dˆ4Ø%ð :ð :‰ˆˆuØ #Ð#ˆ	�IØ#(ð 
	ð 
	ÑˆAˆu�d˜CØ!�\ !‘_”_‰FˆB�ð �¥C­¨D°"©¬°rÑ$:Ô$:¸EÀ4ÈÑMÔMÑMˆIØ�Ý˜2˜u d¨CÑ0Ô0Ý˜2˜u d¨CÑ0Ô0ñô ñ ˆIð ˜AŠ~ˆ~Ø�ð à˜Š>ˆ>ØØ•�E˜IÑ% u¨yÑ'8Ñ9Ô9Ñ9ˆØ•�E˜IÑ% u¨yÑ'8Ñ9Ô9Ñ9ˆˆàÐ$Ø�Ð/Ñ0Ô0‰ˆˆBØ•˜˜U™
Ñ#Ô#Ñ#ˆØ•˜˜U™
Ñ#Ô#Ñ#ˆå�4‰=Œ=�' $™-œ-Ð'Ð'r   c                 óV  — ddl m} ddlm} ddlm} ddlm}  |dt          j	        ¬¦  «        }| 
                    dt          d	¬
¦  «         | 
                    d¦  «         | 
                    dd¬¦  «         |                     | ¦  «        } |d¬¦  «         |j        }|j        }|j        }	 ||¦  «        }
|
d         }|j        j        } |¦   «         }|                     ||
¦  «         t'          |                     ¦   «         ¦  «        }t+          d|z  ¦  «         |                     |¬¦  «        } |¦   «         }|                     ||
¦  «         t'          |                     ¦   «         ¦  «        }t+          d|z  ¦  «         |	��|j                             |¦  «         d|
v r |
d         j                             |¦  «         d|
v r |
d         j                             |¦  «         d|
v r |
d         j                             |¦  «         |
                     |	¦  «         dS dS )z&Optimize a font's GDEF variation storer   )ÚArgumentParser)ÚconfigLogger)ÚTTFont)ÚOTTableWriterzvarLib.varStore)ÚprogÚdescriptionz--quantizationrE   )rß   ÚdefaultÚfontfileÚoutfileú?)ÚnargsÚINFO)ÚlevelÚGDEFzBefore: %7d bytes)r3  zAfter:  %7d bytesNÚGPOSÚMATHÚJSTF)Úargparsero  Ú	fontToolsrp  ÚfontTools.ttLibrq  ÚfontTools.ttLib.tables.otBaserr  ÚmainrÀ   Úadd_argumentÚintÚ
parse_argsr3  rv  rw  ÚtableÚVarStoreÚcompiler;   Ú
getAllDataÚprintr:   Úremap_device_varidxesÚsave)Úargsro  rp  rq  rr  ÚparserÚoptionsr3  rv  rw  ÚfontÚgdefÚstoreÚwriterÚsizerB  s                   r   r„  r„  p  s^  € à'Ð'Ð'Ð'Ð'Ð'Ø&Ð&Ð&Ð&Ð&Ð&Ø&Ð&Ð&Ð&Ð&Ð&Ø;Ð;Ð;Ð;Ð;Ð;àˆ^Ð!2ÅÄÐMÑMÔM€FØ
×ÒÐ(­s¸AÐÑ>Ô>Ð>Ø
×Ò˜
Ñ#Ô#Ð#Ø
×Ò˜	¨ÐÑ-Ô-Ð-Ø×Ò Ñ%Ô%€Gð €L�vÐÑÔÐàÔ'€LØÔ€HØŒo€Gàˆ6�(ÑÔ€DØ�Œ<€DØŒJÔ€Eàˆ]‰_Œ_€FØ	‡M‚M�&˜$ÑÔÐÝˆv× Ò Ñ"Ô"Ñ#Ô#€DÝ	Ð
 Ñ
$Ñ%Ô%Ð%à—’¨\�Ñ:Ô:€Jàˆ]‰_Œ_€FØ	‡M‚M�&˜$ÑÔÐÝˆv× Ò Ñ"Ô"Ñ#Ô#€DÝ	Ð
 Ñ
$Ñ%Ô%Ð%àÐØŒ
×(Ò(¨Ñ4Ô4Ð4Ø�Tˆ>ˆ>Ø�ŒLÔ×4Ò4°ZÑ@Ô@Ð@Ø�Tˆ>ˆ>Ø�ŒLÔ×4Ò4°ZÑ@Ô@Ð@Ø�Tˆ>ˆ>Ø�ŒLÔ×4Ò4°ZÑ@Ô@Ð@à�	Š	�'ÑÔÐÐÐð Ðr   Ú__main__)TrE   r#   )JÚfontTools.misc.roundToolsr   r   ÚfontTools.misc.intToolsr   ÚfontTools.ttLib.tablesr   rà   ÚfontTools.varLib.modelsr   ÚfontTools.varLib.builderr	   r
   r   r   Ú	functoolsr   Úcollectionsr   Úheapqr   r   r]  rµ   r‰  r   Úobjectr!   rV   r‚   r>   rp   r�   Ú	VarRegionr¢   r‘   Ú__bool__r“   rÄ   rÕ   Úsubset_varidxesrÛ   rÉ   rã   rñ   rõ   r|  Úcollect_device_varidxesr}  r~  r  rú   rþ   r�  ÚBASEr   r�   r   rC  r:   rI  r\  r[  rm  ÚgetExtremesr„  rz   Úsysr;   ÚargvÚexitÚdoctestÚtestmodÚfailedr   r   r   ú<module>r­     s/  ðØ 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø -Ð -Ð -Ð -Ð -Ð -Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1ðð ð ð ð ð ð ð ð ð ð ð ð Ð Ð Ð Ð Ð Ø #Ð #Ð #Ð #Ð #Ð #Ø #Ð #Ð #Ð #Ð #Ð #Ð #Ð #Ø Ð Ð Ð àÔ*Ð Ø!3€„Ô ð<ð <ð <ðDð Dð Dð Dð D˜Fñ Dô Dð DðN ,1ð $ð $ð $ð $ð $ð %€„
Ô ðð ð ð 1€„Ô ðð ð ð )€„Ô ðDEð DEð DEð DEð DE˜ñ DEô DEð DEðb ØØˆS‰UŒUð>ð ð>ð >ð >ð >ð >ðB 7€„Ô ð -6À_ð Jð Jð Jð Jð Jð2 3€„Ô ðð ð ð,5ð 5ð 5ðð ð ð
 #A€„Ô Ø"@€„Ô Ø"@€„Ô Ø"@€„Ô ð'ð 'ð 'ðð ð ð
 !=€„Ô Ø <€„Ô Ø <€„Ô Ø <€„Ô Ø <€„Ô ð0ð 0ð 0ð 0ð 0�ñ 0ô 0ð 0ðf%ð %ð %ð %ð %�Dñ %ô %ð %ðP~ð ~ð ~ð ~ðB )€„Ô ð$ð $ð $ð !Ð Ø€ðJ(ð J(ð J(ð J(ðZ /€„Ô ð-ð -ð -ð -ð` ˆzÒÐØ€J€J€Jà
€sˆ3Œ8�}„}�qÒÐØˆŒ��‘”ÑÔÐØ€N€N€Nà€C„Hˆ_ˆWŒ_ÑÔÔ%Ñ&Ô&Ð&Ð&Ð&ð Ðr   