From 49c9392412ccf31cf948310acda057b96eb6afc6 Mon Sep 17 00:00:00 2001 From: Garret Rieger Date: Fri, 24 Sep 2021 09:28:10 -0700 Subject: [PATCH] [subset] During LigatureSubstFormat1 subsetting always place Coverage last. In Windows 7 on Chrome if the coverage table comes before any of the LigatureSet or Ligature subtables the font won't load. This changes the packing order to always place the Coverage table last. Virtual links are used to ensure the repacker maintains the desired ordering. Coincidentally fontTools also does the same thing (https://github.com/fonttools/fonttools/blob/a3f988fbf621142d7d9b3e68a69725b88f358869/Lib/fontTools/ttLib/tables/otTables.py#L1137) to reduce overflows during packing. --- src/hb-ot-layout-gsub-table.hh | 48 ++++++++++++++---- ...gular-new.default.retain-all-codepoint.ttf | Bin 222756 -> 222756 bytes ...hints-retain-gids.retain-all-codepoint.ttf | Bin 191632 -> 191632 bytes ...ar-new.drop-hints.retain-all-codepoint.ttf | Bin 191584 -> 191584 bytes ...-Regular-new.gids.retain-all-codepoint.ttf | Bin 222756 -> 222756 bytes ...r-new.glyph-names.retain-all-codepoint.ttf | Bin 229748 -> 229748 bytes ...l-layout-features.retain-all-codepoint.ttf | Bin 223452 -> 223452 bytes ...w.layout-features.retain-all-codepoint.ttf | Bin 220948 -> 220948 bytes ...ular-new.name-ids.retain-all-codepoint.ttf | Bin 222496 -> 222496 bytes ...ew.name-languages.retain-all-codepoint.ttf | Bin 222756 -> 222756 bytes ...r-new.name-legacy.retain-all-codepoint.ttf | Bin 222756 -> 222756 bytes ...ne-unicode-ranges.retain-all-codepoint.ttf | Bin 222756 -> 222756 bytes ...ew.notdef-outline.retain-all-codepoint.ttf | Bin 223352 -> 223352 bytes ...r-new.retain-gids.retain-all-codepoint.ttf | Bin 222804 -> 222804 bytes ...gular.glyph-names.retain-all-codepoint.ttf | Bin 281092 -> 281092 bytes ...ackItalic.default.retain-all-codepoint.ttf | Bin 120236 -> 120236 bytes ...talic.glyph-names.retain-all-codepoint.ttf | Bin 132480 -> 132480 bytes ...ic.notdef-outline.retain-all-codepoint.ttf | Bin 120236 -> 120236 bytes ...r-Regular.default.retain-all-codepoint.ttf | Bin 49248 -> 49248 bytes ...egular.drop-hints.retain-all-codepoint.ttf | Bin 29468 -> 29468 bytes ...Regular.keep-gdef.retain-all-codepoint.ttf | Bin 49248 -> 49248 bytes ...-test-retain-gids.retain-all-codepoint.otf | Bin 4064 -> 4064 bytes ...font1.layout-test.retain-all-codepoint.otf | Bin 4064 -> 4064 bytes ...-test-retain-gids.retain-all-codepoint.otf | Bin 4008 -> 4008 bytes ...ve_f1.layout-test.retain-all-codepoint.otf | Bin 4008 -> 4008 bytes ...default.627,644,623,62D,644,627,645,2E.ttf | Bin 11372 -> 11372 bytes ...taliqUrdu-Bold.default.627,644,62D,628.ttf | Bin 17640 -> 17732 bytes .../NotoNastaliqUrdu-Bold.default.627,644.ttf | Bin 3512 -> 3512 bytes ...old.default.633,645,627,621,20,644,627.ttf | Bin 12360 -> 12360 bytes ...oNastaliqUrdu-Bold.default.63A,64A,631.ttf | Bin 19340 -> 19432 bytes ...in-gids.627,644,623,62D,644,627,645,2E.ttf | Bin 18208 -> 18208 bytes ...qUrdu-Bold.retain-gids.627,644,62D,628.ttf | Bin 23704 -> 23792 bytes ...oNastaliqUrdu-Bold.retain-gids.627,644.ttf | Bin 9160 -> 9160 bytes ...retain-gids.633,645,627,621,20,644,627.ttf | Bin 18164 -> 18164 bytes ...taliqUrdu-Bold.retain-gids.63A,64A,631.ttf | Bin 25392 -> 25484 bytes ...os-Italic.default.retain-all-codepoint.ttf | Bin 412764 -> 412764 bytes ...talic.glyph-names.retain-all-codepoint.ttf | Bin 437592 -> 437592 bytes ...ic.notdef-outline.retain-all-codepoint.ttf | Bin 412764 -> 412764 bytes ...talic.retain-gids.retain-all-codepoint.ttf | Bin 415140 -> 415140 bytes ...h-Regular.default.retain-all-codepoint.ttf | Bin 1038580 -> 1038580 bytes ...gular.glyph-names.retain-all-codepoint.ttf | Bin 1091356 -> 1091356 bytes ...ar.notdef-outline.retain-all-codepoint.ttf | Bin 1038828 -> 1038828 bytes ...gular.retain-gids.retain-all-codepoint.ttf | Bin 1053656 -> 1053656 bytes .../Fraunces.default.26,66,69,124,125.ttf | Bin 15856 -> 15856 bytes 44 files changed, 39 insertions(+), 9 deletions(-) diff --git a/src/hb-ot-layout-gsub-table.hh b/src/hb-ot-layout-gsub-table.hh index 0dcc98cc0..710c5fbbb 100644 --- a/src/hb-ot-layout-gsub-table.hh +++ b/src/hb-ot-layout-gsub-table.hh @@ -861,13 +861,15 @@ struct Ligature return_trace (true); } - bool subset (hb_subset_context_t *c) const + bool subset (hb_subset_context_t *c, unsigned coverage_idx) const { TRACE_SUBSET (this); const hb_set_t &glyphset = *c->plan->glyphset_gsub (); const hb_map_t &glyph_map = *c->plan->glyph_map; if (!intersects (&glyphset) || !glyphset.has (ligGlyph)) return_trace (false); + // Ensure Coverage table is always packed after this. + c->serializer->add_virtual_link (coverage_idx); auto it = + hb_iter (component) @@ -968,16 +970,21 @@ struct LigatureSet return_trace (true); } - bool subset (hb_subset_context_t *c) const + bool subset (hb_subset_context_t *c, unsigned coverage_idx) const { TRACE_SUBSET (this); auto *out = c->serializer->start_embed (*this); if (unlikely (!c->serializer->extend_min (out))) return_trace (false); + hb_iter (ligature) - | hb_filter (subset_offset_array (c, out->ligature, this)) + | hb_filter (subset_offset_array (c, out->ligature, this, coverage_idx)) | hb_drain ; + + if (bool (out->ligature)) + // Ensure Coverage table is always packed after this. + c->serializer->add_virtual_link (coverage_idx); + return_trace (bool (out->ligature)); } @@ -1092,15 +1099,38 @@ struct LigatureSubstFormat1 if (unlikely (!c->serializer->extend_min (out))) return_trace (false); out->format = format; - hb_sorted_vector_t new_coverage; - + hb_zip (this+coverage, ligatureSet) + // Due to a bug in some older versions of windows 7 the Coverage table must be + // packed after the LigatureSet and Ligature tables, so serialize Coverage first + // which places it last in the packed order. + hb_set_t new_coverage; + + hb_zip (this+coverage, hb_iter (ligatureSet) | hb_map (hb_add (this))) | hb_filter (glyphset, hb_first) - | hb_filter (subset_offset_array (c, out->ligatureSet, this), hb_second) + | hb_filter ([&] (const LigatureSet& _) { + return _.intersects (&glyphset); + }, hb_second) | hb_map (hb_first) - | hb_map (glyph_map) - | hb_sink (new_coverage) + | hb_sink (new_coverage); + + if (!c->serializer->push () + ->serialize (c->serializer, + + new_coverage.iter () | hb_map_retains_sorting (glyph_map))) + { + c->serializer->pop_discard (); + return_trace (false); + } + + unsigned coverage_idx = c->serializer->pop_pack (); + c->serializer->add_link (out->coverage, coverage_idx); + + + hb_zip (this+coverage, ligatureSet) + | hb_filter (new_coverage, hb_first) + | hb_map (hb_second) + // to ensure that the repacker always orders the coverage table after the LigatureSet + // and LigatureSubtable's they will be linked to the Coverage table via a virtual link + // the coverage table object idx is passed down to facilitate this. + | hb_apply (subset_offset_array (c, out->ligatureSet, this, coverage_idx)) ; - out->coverage.serialize_serialize (c->serializer, new_coverage.iter ()); + return_trace (bool (new_coverage)); } diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.default.retain-all-codepoint.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.default.retain-all-codepoint.ttf index 87dc6c4c1304f4716fa1014611773651630fb98e..f80bdd4867eec80544fdef2f3259c30a7c6cdc6c 100644 GIT binary patch delta 110 zcmZ2-hIh#s-U$XQF?}wr8%=naSo&Uevut)@^5kMQV_;<9m^_2WkeQL;|KwvlmfSH6 zEDSabY79~ge3Qj^136ik`j{p#O=6ldIfZvJyB`A+gAN1NWHvr`Rwib1X3J(TzIHD@ OMj&R|?#0J^D;xl1EgH)J delta 116 zcmZ2-hIh#s-U$XQ(fY1g8%=naSSBv-wA$>#*Vy5lBe9YIw0e2!A#sB~S diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints-retain-gids.retain-all-codepoint.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints-retain-gids.retain-all-codepoint.ttf index db714f3caac4c96b7a73d6e6036cc49b894f4d2d..37ea7b87603765ec38b02cafda9b96421b30fe19 100644 GIT binary patch delta 106 zcmV-w0G0oc*$a@_3y?4bT)0H4u{6v91e^fI5wipW5eNk~00969lOPH)0|5a4lTHdb z3tRvM06YLD02%-elb#Au2?PR<0+9lf0+o~O3X=y;00ICk01A_i3r7V4133dbgVGC! M(hC8%(hCB<-~px_cK`qY delta 112 zcmbPmlY0UX8L&i0y7q50Im5^@Z{HF3%`8lU9NZiXj0}80%*gP6vJ{u$zY&lG%E48@GG&Rqpny N+>G0=ax?9I003C;9B%*s diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints.retain-all-codepoint.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints.retain-all-codepoint.ttf index 790f1e1e9ba543d7efb64f6490cd5721c12ad6ab..7e548912afb05cc66187ff2e57b5ddcf642138db 100644 GIT binary patch delta 106 zcmV-w0G0pX*bCs;3y?4bT#iJAu{6v91Si12|FZ-F4G0A`00969lN<^$0|5a4lS&FX z3tRvM06YLD02%-elbQ-q2?PR;0+0fd0+f^J3X=y;00ICk01A_e3r7V412+RXgU$5hLgn)8P%;wCNlbg8Rn=f*= OU*u-oevzB0{{a9kE*qNw diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.gids.retain-all-codepoint.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.gids.retain-all-codepoint.ttf index 87dc6c4c1304f4716fa1014611773651630fb98e..f80bdd4867eec80544fdef2f3259c30a7c6cdc6c 100644 GIT binary patch delta 110 zcmZ2-hIh#s-U$XQF?}wr8%=naSo&Uevut)@^5kMQV_;<9m^_2WkeQL;|KwvlmfSH6 zEDSabY79~ge3Qj^136ik`j{p#O=6ldIfZvJyB`A+gAN1NWHvr`Rwib1X3J(TzIHD@ OMj&R|?#0J^D;xl1EgH)J delta 116 zcmZ2-hIh#s-U$XQ(fY1g8%=naSSBv-wA$>#*Vy5lBe9YIw0e2!A#sB~S diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.glyph-names.retain-all-codepoint.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.glyph-names.retain-all-codepoint.ttf index b5051b374ed07fc9e61884ca41f86ed0a314b01f..d27fcd42504c27e3680d2199bc87a60d492aa5b5 100644 GIT binary patch delta 110 zcmey;#P_9%Z-N0!OrJ~ZMw2&;EK2eB)i$dzd2+FuF)%W4Os?QDWM*XeKY1CCC3g%1 z3xf@V8iN!A-{fyRft)N%eM}RWCNWK!?7};l-H(BZL5G2B@-tp{Rwib1X3J(RzIH7> OMj&R|uEodfRSW>C+8crZ delta 116 zcmey;#P_9%Z-N0!w7zTBMw2&;EUL11V>YWWd2(@cFfcOk0Wl-P|H(x>hLczFn2GZ- zurPQq7%`|ZNCCxJnEIF|Fim2bGWiux;AD5+3H)3PObjLrLO?ktW^-oC$@h5On|1lx Qb@>>9m}$E%AG3Qg0G_@YegFUf diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.keep-all-layout-features.retain-all-codepoint.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.keep-all-layout-features.retain-all-codepoint.ttf index b5a343909683401cae9437660cbd066f544218a1..0d79f43bf4f58c25c7fcb24816dd5e5137dbb0bc 100644 GIT binary patch delta 138 zcmca}k@wC;-U$XQhgb`gH=6J;vGl!vae1=~QzJjC83Q8&$K(rwhRlo%|0n+wv=kQs zi2yMRvkn6@qYl#wAe)gPezKoXDR&G53xf@V8iN!A-{f0Dft)N%{Y(>?CNoW)tRcLV m-H(BZL5G2B@*QD!RwiZ(W~*iek#+?UMj&R|t{}p^CjvE^nLrbd2l4hBXBJ|Jdf_&@oSpy6ajAv1A= zSUgaig;|GznNf#n#biIBQgJ>876uOnBL+1FDUcjfKhs2}$xKrxpA!n4tS!8VpNoNs j!Gu8wD96NX!E818im-dLvPiqK2qO?PZC4gy-WdV_3)vsB diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.layout-features.retain-all-codepoint.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.layout-features.retain-all-codepoint.ttf index c82bb7f20d711386cbf4c64c4cb665a0e10d418b..686180c1c1f61eea836a6b4c38cf2fcc0a00ae71 100644 GIT binary patch delta 63 zcmbQTk9W#G-U$XQnyYpGY&79vV)?$)K5DWH(^*zC21W*s$ui9Ptc*a`|H*~fn$5+` R?ZwQDK+Lqgn3;KDGys^$6G{L8 delta 63 zcmbQTk9W#G-U$XQ8Y+6x8%=naSbiP1nKRji=`1$~10w?;5Hm9TpDf0#Ke;Gdqq&&5 Ry_lI1h?%w*GczxY1^{CP5=H<3 diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.name-ids.retain-all-codepoint.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.name-ids.retain-all-codepoint.ttf index 9165d445981ffe9cc6ba89a86d549671778cbe78..c09fca40dd8cf671401c951c231489ef06a7c991 100644 GIT binary patch delta 110 zcmZ2*ig&>&-U$XQF?}wr8%=naSoVIurL@_F$(57UjDeAXWAYSkLuN*X|C0}KTXM%R zurSy#s4++}@J$xt3FKs9>SLO~G>K`-B> delta 116 zcmZ2*ig&>&-U$XQ(fY1g8%=naSPpEx5wY2Y$(56vgMpEO4~Q8V{!i}XHk^Ev+f1B~ zfrY_?!H7YPK?*3&!qmq!foT%cl*w#7fs>PYCh&7HFfo`g2m$4on9Z3jC;#GcZ}#ME Q_vB>+Vy5k$yv*0b0jgFTG5`Po diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.name-languages.retain-all-codepoint.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.name-languages.retain-all-codepoint.ttf index 87dc6c4c1304f4716fa1014611773651630fb98e..f80bdd4867eec80544fdef2f3259c30a7c6cdc6c 100644 GIT binary patch delta 110 zcmZ2-hIh#s-U$XQF?}wr8%=naSo&Uevut)@^5kMQV_;<9m^_2WkeQL;|KwvlmfSH6 zEDSabY79~ge3Qj^136ik`j{p#O=6ldIfZvJyB`A+gAN1NWHvr`Rwib1X3J(TzIHD@ OMj&R|?#0J^D;xl1EgH)J delta 116 zcmZ2-hIh#s-U$XQ(fY1g8%=naSSBv-wA$>#*Vy5lBe9YIw0e2!A#sB~S diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.name-legacy.retain-all-codepoint.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.name-legacy.retain-all-codepoint.ttf index 87dc6c4c1304f4716fa1014611773651630fb98e..f80bdd4867eec80544fdef2f3259c30a7c6cdc6c 100644 GIT binary patch delta 110 zcmZ2-hIh#s-U$XQF?}wr8%=naSo&Uevut)@^5kMQV_;<9m^_2WkeQL;|KwvlmfSH6 zEDSabY79~ge3Qj^136ik`j{p#O=6ldIfZvJyB`A+gAN1NWHvr`Rwib1X3J(TzIHD@ OMj&R|?#0J^D;xl1EgH)J delta 116 zcmZ2-hIh#s-U$XQ(fY1g8%=naSSBv-wA$>#*Vy5lBe9YIw0e2!A#sB~S diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.no-prune-unicode-ranges.retain-all-codepoint.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.no-prune-unicode-ranges.retain-all-codepoint.ttf index 87dc6c4c1304f4716fa1014611773651630fb98e..f80bdd4867eec80544fdef2f3259c30a7c6cdc6c 100644 GIT binary patch delta 110 zcmZ2-hIh#s-U$XQF?}wr8%=naSo&Uevut)@^5kMQV_;<9m^_2WkeQL;|KwvlmfSH6 zEDSabY79~ge3Qj^136ik`j{p#O=6ldIfZvJyB`A+gAN1NWHvr`Rwib1X3J(TzIHD@ OMj&R|?#0J^D;xl1EgH)J delta 116 zcmZ2-hIh#s-U$XQ(fY1g8%=naSSBv-wA$>#*Vy5lBe9YIw0e2!A#sB~S diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.notdef-outline.retain-all-codepoint.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.notdef-outline.retain-all-codepoint.ttf index 73069c5633bbfb698ff17c6406cb1baf28da94fc..cac5bbd569859335ec76528d3222046d2f499d9d 100644 GIT binary patch delta 110 zcmexyf%nG+-U$XQF?}wr8%=naSS*f4&e-h2Vd`U=z%+?z%49Cyz{%;n6Zp9pm>5hLgn)8P%;wCNlmGF$H~aFn Q`|>dYG1GQmK4$GG0J<3(wEzGB diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.retain-gids.retain-all-codepoint.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.retain-gids.retain-all-codepoint.ttf index 864af4c1058a7550510dcd89b6e547afa660c1e5..441646ad1410f59feb45092eb1506198b9e002b5 100644 GIT binary patch delta 110 zcmca|hWE-D-U$XQF*{sVZ8YIwV%b04`^9D#CSNXAGX_Qmj>&U)44D}j{!c!|W62%E zz`|g|pvEA@z&BZnH;|Kssh?>g(`2TplQVcHv->eHG3YRGP3GcrXJulxWVUYh<7@Zh OV+3NR?S6dBY!Lw73L9Dg delta 116 zcmca|hWE-D-U$XQ(UGqG8%=naSPq4H$!&IF^5x>@U|?k617b#o|C6Wj7*0ORVVd`g^$TXR0>SR9Nz{%OX6Zp9pm>5hLgn)8P%$Cg7lbQJ3n*;gU Q1Nj(%m}z?;A2V|V0ENC8R{#J2 diff --git a/test/subset/data/expected/glyph_names/Ubuntu-Regular.glyph-names.retain-all-codepoint.ttf b/test/subset/data/expected/glyph_names/Ubuntu-Regular.glyph-names.retain-all-codepoint.ttf index e067ff18b0934eb4987b94cbe46ca5447b023c5f..d45c856117e3e2860d6f8c16cd7c3957f0d4e94b 100644 GIT binary patch delta 178 zcmZpfBG@uTaDoDhBKHlRjVdXOEITflXKe0aEEi)nV_;<9n9L`k&&mj7c}}*G2uoo* z#bChlg83UW3zHvX45J*w5{5JokL3k|k1kItf3uckD%<4m5+=?4^6mZdj6lo;#LV0K I<{9 delta 178 zcmZpfBG@uTaDoDh`ob%#HmamBvaDWar?a_-v0RLsgMpEO4~Q8VJSTHV=uftl2u)!~ zV=!QqVbNl?U}|EVz!=1EgJBkk$0~#1qsx=ZpByD`y7{|A3R`o(e0#qtIG4u9* Id6rTw02Hn)JOBUy diff --git a/test/subset/data/expected/layout.duplicate_features/AlegreyaSans-BlackItalic.default.retain-all-codepoint.ttf b/test/subset/data/expected/layout.duplicate_features/AlegreyaSans-BlackItalic.default.retain-all-codepoint.ttf index f36005982e429fd31d1ca5512cdc788ac29084ad..cdd6bc7ba838143b82d25bad1980fb09aca6ec08 100644 GIT binary patch delta 240 zcmZ3pntjb`_6Z6s{tv^#H>$)ivUp~3b8K#5{BO)yGr7f7pV4RX7E@hDxyg@AwHZH6 z<}=e|JTckAOr3GTG8T!7GsL4d(!@*|6OUPcC1mKiKhS!Gxi zSv59iSmrXB$}uo8h%j(5Ffy<(eqvx^OaQSMz5+#4fGj44P{sftp8?3`0AfF&hz%ySLAThbeX0s?G11HN>mRl^3S)Q`I WWckVRmz9l`tJ%(WyPYj#-V6W_vNtsV delta 240 zcmZ3pntjb`_6Z6swpr=-HmbxhvgCz7|FyY=@xL)+#^e@LeMXDPTTFEsxh6j{)n>dm zna@m2Gj+zE$q8nvjA@(O%p94d1sGTvf`HJ0K@LbVGO)7DV0p?a!>Y)tG5Lx` z`{qo`941>X1||j>1|gs{6GJFt0FY*3{KUY-m;hoid!1Fr#C$S delta 240 zcmZqZ=4j~Vn4rL7o0WcVqlyh9i>j+Y*X9()|Hh0NlT%Ff87(GHG1X<{ntaGqoAKV{ zccz+*TP91GsWbLWb}&$)ivUp~3b8K#5{BO)yGr7f7pV4RX7E@hDxyg@AwHZH6 z<}=e|JTckAOr3GTG8T!7GsL4d(!@*|6OUPcC1mKiKhS!Gxi zSv59iSmrXB$}uo8h%j(5Ffy<(eqvx^OaQSMz5+#4fGj44P{sftp8?3`0AfF&hz%ySLAThbeX0s?G11HN>mRl^3S)Q`I WWckVRmz9l`tJ%(WyPYj#-V6W_vNtsV delta 240 zcmZ3pntjb`_6Z6swpr=-HmbxhvgCz7|FyY=@xL)+#^e@LeMXDPTTFEsxh6j{)n>dm zna@m2Gj+zE$q8nvjA@(O%p94d1sGTvf`HJ0K@LbVGO)7DV0p?a!>Y)tG5Lx` z`{qo`941>X1||j>1|gs{6GJFt0FY*3{KUY-m;hoid6CJ5HK4b3t+JDU^7|xvNIKZ%6H&M-(l|${!LIx2*5ls;d4UVGH5N?S6FTJK-=Qi7#C^7X(>ZVp8HQlM7nfHMRuv55kf}B5$T3uwyA1-B?wRRE2f+XiK@}x d)w(!?0dY4NwPodQLKIAwH5r^G>&U#=`2zrXOb7q~ diff --git a/test/subset/data/expected/layout.gdef-attachlist/IndicTestJalandhar-Regular.drop-hints.retain-all-codepoint.ttf b/test/subset/data/expected/layout.gdef-attachlist/IndicTestJalandhar-Regular.drop-hints.retain-all-codepoint.ttf index 1216387b15ac08a781e5a5faebfe60434800a008..2306381eaac5dda0c87c7c21d6d2b598a53efeb4 100644 GIT binary patch delta 415 zcmY+APbh04w57}NZMg+MUo3;Nh?eHDGqC= z9Y_)HWd~7|(~6Vi>* z;}QoNtfw#fpjUdLdn(fvmFSp?qOA64 zFU|yuTc>TXcHCDzu0sn<@|C2N7M3{w3*4qrxmi%b`IX9HIy!A|j%p!6Cvw3POSi41~Zzd{7V$ zO+pP;yrza|Xov=frii8nr-lNFXzEiWBjV%2z2|)Qa?UAMsaU1FPdYM{-!B3_l4_2f zb#0BZMko3qQ=YbHg(Bo888tlN1|{UMfhC01ZHq(eGRH_ew8&)CqYVMLVF8KGfB{6* zvUPY+0tC`7svA0F5yLztpom$AkmwUgBBg#>_tgEK-0p1iuY@x&JZNp#FUX=upd|1* zAN<8<5aus_<0?P%1K;sAU-Bs*^8x2L!)Z=%l$UvqCppMt>}G{c+`*s^dZib7qzc{A zRXd$iiHcNE@9pDeZW!?k17Sqq!Xn}r(kiw%oBz`lR9Ef2(=Dc+hzHJQA|vp^-%y@x xD6e}+{d9>xZl>T;3$~CeE%J#9PC_U2LWlvQV)BZoz$fnYX?n*DX`9N)!Z*xDOY#5! diff --git a/test/subset/data/expected/layout.gdef-attachlist/IndicTestJalandhar-Regular.keep-gdef.retain-all-codepoint.ttf b/test/subset/data/expected/layout.gdef-attachlist/IndicTestJalandhar-Regular.keep-gdef.retain-all-codepoint.ttf index 217c539c869237691c8c1fc5844401bd721d5f15..ab0c1d1c66ece1372db4679fa0238baf3a99126e 100644 GIT binary patch delta 460 zcmY*VPbk9y7=7QjpZptUMQKah*tFkDTPCtuXa}VzAxTS;9Bg)wmWvgq6=}a6mV?uZ zQpE26CJ5HK4b3t+JDU^7|xvNIKZ%6H&M-(l|${!LIx2*5ls;d4UVGH5N?S6FTJK-=Qi7#C^7X(>ZVp8HQlM7nfHMRuv55kf}B5$T3uwyA1-B?wRRE2f+XiK@}x d)w(!?0dY4NwPodQLKIAwH5r^G>&U#=`2zrXOb7q~ diff --git a/test/subset/data/expected/layout.gpos5/gpos5_font1.layout-test-retain-gids.retain-all-codepoint.otf b/test/subset/data/expected/layout.gpos5/gpos5_font1.layout-test-retain-gids.retain-all-codepoint.otf index ca8eeba4497ad2fbbdce8a482d2fe7ca14a54bb4..32ffff92b4e0274679794969856168a30dbc8237 100644 GIT binary patch delta 48 zcmaDL|3H3%BeTbgsEIB=nG=njCp$2viwZF?GH?Jf3xf~?6N5aE#mFGHc@Lus9{^GT B3TglV delta 48 zcmaDL|3H3%BeT_ul!-1snQM*pCp$2vi*hh9GVlR0BZC|evoHuTFfqt)-ovQE2LMs= B3TglV diff --git a/test/subset/data/expected/layout.gpos5/gpos5_font1.layout-test.retain-all-codepoint.otf b/test/subset/data/expected/layout.gpos5/gpos5_font1.layout-test.retain-all-codepoint.otf index ca8eeba4497ad2fbbdce8a482d2fe7ca14a54bb4..32ffff92b4e0274679794969856168a30dbc8237 100644 GIT binary patch delta 48 zcmaDL|3H3%BeTbgsEIB=nG=njCp$2viwZF?GH?Jf3xf~?6N5aE#mFGHc@Lus9{^GT B3TglV delta 48 zcmaDL|3H3%BeT_ul!-1snQM*pCp$2vi*hh9GVlR0BZC|evoHuTFfqt)-ovQE2LMs= B3TglV diff --git a/test/subset/data/expected/layout.gsub5/gsub_context3_successive_f1.layout-test-retain-gids.retain-all-codepoint.otf b/test/subset/data/expected/layout.gsub5/gsub_context3_successive_f1.layout-test-retain-gids.retain-all-codepoint.otf index fd60657952e2d5109ec64162e3f8d509ce1444d4..a012ff1f4cde869d610b34e53e2223c7ac15300d 100644 GIT binary patch delta 56 zcmZ1>ze0Y3A@ie`zc!k%FtSv3DAY{0VZ6xbG?|Y{Q&fn7k%0q8UaEJg;W J%|1*qya3w0495Tf delta 56 zcmZ1>ze0Y3A@hV+b{kDt7+I=xze0Y3A@ie`zc!k%FtSv3DAY{0VZ6xbG?|Y{Q&fn7k%0q8UaEJg;W J%|1*qya3w0495Tf delta 56 zcmZ1>ze0Y3A@hV+b{kDt7+I=xY!he-hd DnZXP+ delta 50 zcmaD8@g`z|0ZZ|RT=$J8I*crPEie7poWl5-OPGU!k%14085xX$m<32OZO-ChQUCzK CSPe4( diff --git a/test/subset/data/expected/layout.notonastaliqurdu/NotoNastaliqUrdu-Bold.default.627,644,62D,628.ttf b/test/subset/data/expected/layout.notonastaliqurdu/NotoNastaliqUrdu-Bold.default.627,644,62D,628.ttf index 9e452cf045ae9bce607652954a8c8b44540a4483..bf2ff01fa0fad07b2b271736c214049d51f02189 100644 GIT binary patch delta 652 zcmY*WQAm?f7(L&2|BdNn{`(hUP5*2(opTM7LAosV5E9{on2cp2CL$sdIzkL$f$YJ= z2kC-Dh!3)dF=SMZ5Tnt<@L@#w;DZkaArTTHA|pa1`ZuZA%Yl3Dx##=tIs4BkH%ALC zRUZ!CPXg{8;L_Nejw_@reff5}HcVFcvkiS#AJId)UUyu#U3*wNb8+b0q9gBk=Xm9a zIU)|T_Ek%3^V)>gs|7V(WBY-9%YNH#Q+L#LHLiA7f36PMlGbSDYDKFhX5KVMO?&8r z0)SuvnWmsB1?7{ntc)ow;z*>#fT-dOhv}GRYp4b*Xn=|-OkfPd7(fI)rh2J1J`pJ; zA?F(>O+h7~_$7NrEn-XLMNVX8)bp@nT#Sf8(IlI#Z0MDN5rq;ca$4rbjeNL)1^|D g%N?WSe??=aRCu+ludI_zzJ3!K=eD)DZ@7kmKNIVfhX4Qo delta 633 zcmY*WPe{{Y7=E7b`y8tc{cQ^y&dnIJ%_*`(%&iqtAraxhI#|e9p8jLsb0M)mna}O5=Xls0s^tJlz-ja98JLMg&pR5nnS&zhBX;;6i%N20$I_I5_ zoL8J}&RR#=QFJUha*hc{#@I0O#(g7Uglo2IhN?@|JvR5@UTeV`u-vk^tFpKT1%R-c zaU6!)RbN$34XKzc%e+j0FQ&weH76n<>snGR9Ir&^ZlTYQiUJhNgU6kkL8QCe@WQ*=-y6pKW zN}?!M#24`i-RMFL?Px^^elerxnofHr#hA#7Q86Mi|FM@ux87+w={YOnqC-SPSOgB# zf@N;$p706JHaEG!HLkL--u#AuRfcIEL-qZ{8kP24ReqCp4I2YT`@YZzX1!gggNsJ+jQH&h$B)X^j VXK%&gYBPvVooKnY@T29X`wzWZlEwf4 diff --git a/test/subset/data/expected/layout.notonastaliqurdu/NotoNastaliqUrdu-Bold.default.627,644.ttf b/test/subset/data/expected/layout.notonastaliqurdu/NotoNastaliqUrdu-Bold.default.627,644.ttf index 1b1065f1829d36a60477dc9bb963e14d5cde2730..1c0f0e932c74724975c3f4dce5457a2afbbcc6cf 100644 GIT binary patch delta 48 zcmdlXy+e9}A@dI3+Z#=M8JRC?Ic#oW+{+>?#K6eF0mLi}d<;xL%*epFIfN~R9RO1c B3V;9r delta 48 xcmdlXy+e9}A@g3}OB+pm8JUl31#NC&+{+@&!NADC2gDGP1;}RF9Kx2u4ggZK3V;9r diff --git a/test/subset/data/expected/layout.notonastaliqurdu/NotoNastaliqUrdu-Bold.default.633,645,627,621,20,644,627.ttf b/test/subset/data/expected/layout.notonastaliqurdu/NotoNastaliqUrdu-Bold.default.633,645,627,621,20,644,627.ttf index 8063d172e8de6cc9ac3a21cb80f08c791c1eb4af..9424060c49471bba7ba30ef56a6ab916cf5f4cc4 100644 GIT binary patch delta 48 zcmX?+a3W!XA@iY)zc-rbGBO(;`KF|m zDaEf;%SZB#yduZtklZad$_7i`60~^CC*}=v%#`xCgsY+Fq zUr^33R0hk(%HsO(r4uESx?>DO0zlA%bP*V&f=Bu)C8Yt$!w>j8@8cD0nfd6DCdh&m z>R>_F@|@2iV!p3Si&ORzXP(ScSp!Hs&@SwP%!wW~d>i``|Ntb?`w zH#M+w@y^w(mN3vU6(~=+f4j6!Sy~bMuIuV5EmMZll%m-`$`qv$8m2+vbvx8B4N*S@ zsF!?acj+d1sgayiC!+4lY7@Dsp6pajrs7v5;TL}55c~KcvhItcI7R_^xKnuD4MHn4_OEF*)o=Ibn`5yK>2A&L==Ut|}t$hISi1mc*& zYrMpBgfWDE1kei~?%@tfTh54LvAu?C(jwdN@RIkmrx~M3+}0BQn=;0VX^UjT3ms`y L^OD6ARvGXcrCgsp delta 663 zcmY*WQAm?f7(L&;SDR)gBC3b)z{hvackg%3Rxfq+Qg<+? z{qvUuaIPNkSRbprB%aTdxW~fu+V`Tfu(7bZu)uxb?st1n#*DE3Q(xC-^@JYRpXfLA zQXQ@t*MO_d)#S2V4lSuIYZF>r%XTg~hnx?b$L%qDy}c}dDgWw; z(Y)#7b-CHuzAVeuam36FX1v2=2ml0|s;mc|4~M(Xcke~<&W4zj>r_?NtyEB%^KlD ze1N~@-SU3%?W5QDWnRrKUdoH*eDO`=JKJPyY=ted1=OMjA(X*{4<0rst-wVi&fc(2 z_L4ngt^ZB0vs&35s4y_Lfnkh9ONB%d;;N?CIujiEGF zrqNP1sSBu_f>cCaIz^h&WLwRee7Zz8(76MzTqooF^x%#t5X;% z(|EYfgB2`d0dttaCrn@z2@GQpeds|KUMVJ12`QfJICk2w(%s*X4};ECMW~QJ&bN=X H1Y3+>#S)!J diff --git a/test/subset/data/expected/layout.notonastaliqurdu/NotoNastaliqUrdu-Bold.retain-gids.627,644,623,62D,644,627,645,2E.ttf b/test/subset/data/expected/layout.notonastaliqurdu/NotoNastaliqUrdu-Bold.retain-gids.627,644,623,62D,644,627,645,2E.ttf index 55117ca6c60fbe0fec48f6530303e9c8d8d5b92f..658093782406f9fa31ded365d90c2dcb77116fce 100644 GIT binary patch delta 52 zcmZ3`$GD)6ae@KM#g^Y%8%=Z=S>9*ndTdT%TrVsv#K6eF0mLlKXBe1(n2~{Tvzq8H FLjb}34u}8% delta 52 zcmZ3`$GD)6ae@KM*}ebXZZy$hWcl_z_0Z-N#`VI&91M&Md_c^|d~~rjEFI0#2OO)Gb*|~hv#|U=Y4se#5Ps8Y0=es ze<#ulc<%xB%vVu-+%{r!*(@F1?R#qY(!8>%B$YX3T=B~l zd0$?Zr{!VUD?4Pp<*Vg`C2vv8pUoNbf_czvH@$AFw~e)wTP(&ULtJ0fM|CBHAORp4 zK)M)AQcXIPlG3E);#HpIqr8>n*btr4f|aaDp%W&=@D!7XU=+g`(AmYSp65I(rNvp# zGo43rOHL8>O&ItIKi~zvD@wk{#wk9|$9RYjivHe5Ef=|gGj_(lv#QwWeW-4*EK9Q_ zORy#M!4D7IaH0zi78V`;9(9-vuzuFZ{LJ&8YGM~e%zs}T`JHn<;A}L zrn*BpTBi)9X!VaX#c773G$oY44RxBH&;*5Pgob|KB_G|PThvXRA{4l;y2(jhDG#<2b%|@&QLw1d5l3EJ< bkbl(b{97sJn$?OI!C4(?>btF4Fm>e@l31Vh delta 637 zcmY*WUr5to6g}trKF4$;x8GJ+Kip!hkR`H0OmynBAt7O5FBTydBZi0=$RHI0>A@!% zei9O~{tzM|Qt5;GAU#QtE|3r@5DAfx2nq3FiS*kdtcQEx-h0lymwR^SIX=%+*y;FH z>jEN|fzz#TB0;L;Q^&+ioCCEF(*ACLi$CZWzBS)m>1yd+(|$bUZTH5!WnQOe+cW0r z@kBhQj6>tA@!ps+Qbxbg;a+e*bho-ITv^wWtGqZ}Y;%kh%@tPLgSKv4Nx?8~LIEJ` zR-A=P9jY}osrpon%*t7rkSD~V=;Q%M0}NmaVF*wz%P*G5g(P~>g*ZCUj<$kZI$3vL zZmUiGv+iC&QuV4Xov2UPl~dUiWLB@&-!7b#FXR*XNTzgC!wpA^jLCXgEicG&J<)L8 z{4Tb|ruZyAi42+%MGY!ZfieU{T6?2)=9m}}!(vDbisXOYE23FWo?eWeH}|>A9d2=h>whP6fwP?Eq%LYaXTIhuzGRx?9R0JG{p@286TG9ZHJ&kh z*~K_J*v_`xRgAKRm8@VH13J~{>tq$f3^7O_ORTn&HUe4f;Rn9Sj}S7G$CW%TTOZ5~ z5jem;cCmvkY+xO$SjH0GVF9x;V`*0Mm}3X@bdfJ6SFB<_#aqjg2|UANj9~=B7{cI@ cDHbQkJMuT@@i8kXKj=);z|7T4&rb^AH)Z0RQvd(} diff --git a/test/subset/data/expected/layout.notonastaliqurdu/NotoNastaliqUrdu-Bold.retain-gids.627,644.ttf b/test/subset/data/expected/layout.notonastaliqurdu/NotoNastaliqUrdu-Bold.retain-gids.627,644.ttf index 7408cba8b9c33cd9c702a80183d423cfc8f52958..cb2e429c4cab2795e166f49f37fcfa44d1b6906a 100644 GIT binary patch delta 50 zcmX@%e!_i%0ZU$B-_eaGI*cs+GVVJzr!eki5f)-#WZ(c|7UnYyOhC-Yz_{6jZHg=a Dk;V-H delta 50 zcmX@%e!_i%0ZWlc*T0P>I*css)BN2wr!eki5$0fEWZ(m0M&>g>k_AXIZ8l+>A`1YJ CWDNlT diff --git a/test/subset/data/expected/layout.notonastaliqurdu/NotoNastaliqUrdu-Bold.retain-gids.633,645,627,621,20,644,627.ttf b/test/subset/data/expected/layout.notonastaliqurdu/NotoNastaliqUrdu-Bold.retain-gids.633,645,627,621,20,644,627.ttf index 6b26726fef74a79f413bdf14d46e422786d31b57..be237a782ef5cc6c113d7cbd70adc5b93f60bf83 100644 GIT binary patch delta 52 zcmey;%lM_2ae@I0`+O1YjV3ybEPv+vZQGo}s4OTf#K6eF0mLlKXBe1(n2~{T^DLn# F69A+e4RHVf delta 52 zcmey;%lM_2ae@I0^9}KL8%=Z=Sy*)44K}ARDhmp8FfcOk0Wl-<86e35B$+nP5{fbb E0EpBKaR2}S diff --git a/test/subset/data/expected/layout.notonastaliqurdu/NotoNastaliqUrdu-Bold.retain-gids.63A,64A,631.ttf b/test/subset/data/expected/layout.notonastaliqurdu/NotoNastaliqUrdu-Bold.retain-gids.63A,64A,631.ttf index 118fec7e91f8a7261917b0ae475b019d8669c3b5..d69ba9996665f10010c321cca564d03a5e79dbfe 100644 GIT binary patch delta 663 zcmY*WQAkr^7(L(r-_2<u2*uDC6jDp)8W9m;F-(S-NDL9FA;Sz*BEn>Z z_(%9465_)cA*Oqf5#qxzu&en{A=HCJ3=xqbLqsCFTU7LN;Nv^zd>`k`tx)tGjnx%D zo7nsWTuuR1D{n4VlT`4%w0oh84m?9uvc97mdR&j{)u(1FcD0n&s(CbBv#J^OqZ(JA zt3kCwIaEF?N#%tSRsxD!IZ>V|zfrC@)6O~PfYax+mu;3^EvuEY^0NF&9+o>wcS?gL zspD@QC3d4IU6{3P6^vR(Ek_7L0zj~VED<=Q`mAI~Q&P87$1^<6+j%idumJ7T2sts0 z8aNQaeRQJ>?Px`drBakMJ>+p|MvOH*urx?+$tA4bkd1HfRi5HYBI3PU*u(Gf4&KIZ zi!JY+V|H%ijQwB-EF*l)x70ZnXESVyO|WtJ(TE1P;X*BR)+y$jFR87pg5-p0LuU<`3f@Ud3(=_?VnFgt!!qg*TzB6hc^-_pB zDM*3ecgaH+=p3D;8nNd)t-8rYwWO0qa_%dV@DqpF$1c*sb){kmN62Ci+xUjB(6ND4 zq_BiV%;Pox0LItzxRyu5OwcsJ3YL*X0<(yjxlZCG#xRN}7(_o`H#KW{%&~P$VFKfb z;wgqPfIjphgiZtzz)f7^mNk=Zh>erFaQWLRxse-TX2K2r#Vq%4!FZf2TG;)MEM#uq LFO2wO8Uua-tL3Zy delta 664 zcmY*WT}YE*6n@V8zAiN}1O5E=y(0N#A{MelES8x+YZuXln1w-ziG&OZ6A`pk(1mm{ zV(bkOi4h?*M8a@Hh=hcg*tQ}>WPu0`2?_B+b}@$ZZ4uSQc{qo2p6C4eKGNI@`5gtL z54>x@rDfpcz?;TO64gdDKHo>lrbp(Y={JYWcC)Txt)jC$Q09?`G9g#xtelWzvR&3o zW-J>)!)x>yPD8h+?Q#1%`-Fa=FX=x0hJK=Sw=`V(P}|dD+LU%jb8A(at;Ao#iap1B zk1Z4q<@@rca>tK2Y>u247=i#m$hE8rMdHGt*bpHxESx;W!@Qqs>^|m^8EMd%IOkfOS^kKAOG+; delta 192 zcmcaJL-NiH$q5E5J69gz*l5zg$ik&iF>&(_#!12=3_J|Xj8+UQ7{nMDfh=t%aVCY$ zA)@V!lb?!BmtYWJU}Z^S4q&ol)M1cfU}9ioiDZdoV3>SBN^Z|9b01Y#y2W(HywAZFdpEzcIH3jnUvFnRz0 diff --git a/test/subset/data/expected/layout.tinos/Tinos-Italic.glyph-names.retain-all-codepoint.ttf b/test/subset/data/expected/layout.tinos/Tinos-Italic.glyph-names.retain-all-codepoint.ttf index 4a632a1c825d00d41627dadaf6358bdbafabc58c..e7b13f27afdc60667ba6540569e3b69a705bd361 100644 GIT binary patch delta 196 zcmca{OX|igsR;%w_ueeB-e{7*$TE4Q)%?vf7$*sHF-~G&W;9@!$G|iBf~fT7NYNZd zPDY@RHj_A$!sH`jGx%7u7+6^%nBAC67?l_VCeM&moxECtYx81p9ac^z21b@hmRJUc z$>(H3%oyh|NHR`h>|m^8EMd%IOkfOS^kKAOG+rG_U(2!O_5lD_6gZv$ delta 192 zcmca{OX|igsR;%wJ69gz*l3c#$Z}8bJL~2djFW^#7tIF*6Xe05R+K*K%yReE@o9HzNQ5 diff --git a/test/subset/data/expected/layout.tinos/Tinos-Italic.notdef-outline.retain-all-codepoint.ttf b/test/subset/data/expected/layout.tinos/Tinos-Italic.notdef-outline.retain-all-codepoint.ttf index d28d567eb026989f587b468ad0447ac721843ad6..5e7157d495ef18e620526b8baa334ef5210e1f1f 100644 GIT binary patch delta 196 zcmcaJL-NiH$q5E5_ueeB-e}Um$g+Rd9_`IL7$*sHF-~G&W;9@!$G|iBgQ)c8O3@rf zPDY@RHj_A$!sI7nGx%7u7+6^%nBAC67?l_VChw3`oqSq?Yx7}o9ac^z21b@hmRJUc z$?s%B%oyh|NHR`h>|m^8EMd%IOkfOS^kKAOG+; delta 192 zcmcaJL-NiH$q5E5J69gz*l5zg$ik&iF>&(_#!12=3_J|Xj8+UQ7{nMDfh=t%aVCY$ zA)@V!lb?!BmtYWJU}Z^S4q&ol)M1cfU}9ioiDZdoV3>SBN^Z|9b01Y#y2W(HywAZFdpEzcIH3jnUvFnRz0 diff --git a/test/subset/data/expected/layout.tinos/Tinos-Italic.retain-gids.retain-all-codepoint.ttf b/test/subset/data/expected/layout.tinos/Tinos-Italic.retain-gids.retain-all-codepoint.ttf index 78e92adb7cc64b4b6541aae7904fc2fdbfe2077d..401187caa8e54638f2dd081300fe08356a364f29 100644 GIT binary patch delta 195 zcmZ3oT5`#1$q5E5Kl{WDHkvdrvS@imb#C6lcu1IwaS{VFqXEM_2A;_ZV$z#eismqK zG6IEknIxH%CX0yA<73TYU}cG5c4IPORALaABrQ4ltAyC*pW-^KoJVwl0u r$I!yy#9*=cj%+I9DK+FQftlJ&s*^Dm0%EHU}Z^S4q&ol)M1cfU}9io>0;?)VAy;>JeqZ~s%)?sg9U>m;{nEP zjB6MdG0tG@V{BopV$5KSV+>(*V$@)iV`O6Z!SIgZ3BxUh3k=5?_AqQ>C}2pNEF`bL gdA)23W3!`tyQ4fK5HkTWGZ3=?G3$0mdA4LT05mEt-2eap diff --git a/test/subset/data/expected/math/STIXTwoMath-Regular.default.retain-all-codepoint.ttf b/test/subset/data/expected/math/STIXTwoMath-Regular.default.retain-all-codepoint.ttf index ee5d11c2b9ba578d50ccbd9cdcd259148664ca9c..3c2434dd3fac0164528d6afe85adb4e1fc58e63b 100644 GIT binary patch delta 197 zcmWm5F$e)+7zW_?`~TxO4ugeEGD?!cAj(3L!C*2OWH4APl!dZMS*&EVTvx2Rk=3H4 zY(y#DXz&@H@v)7(ZRBT3B^nIgjC6;T<@?z)*Yr}eR7Zp=RGDuy`+di8?kGhm1FI6l&2A)#G8s%a$Y3^@l%!0G*&u`U++eYug~7^v z3(0iK=r#PNrzdc%z_Au(CGV%EjyWJ@(|Q)&ExptRD#%io+Ek+onN*-0rAa4&FW&HR z#}y|WvBwT;tT4wILkwV}gC+!otVK@)XUQ1W&`o1y|jR%IKI9odELoveW{YY@o5nzdBfC&XDihFXoa eA|{w*2JF0BqFb$E{lyRSTRE!$ delta 203 zcmWm5KL`O~7{~G7^SV{iLm%$*(bb}0L%A}AoDHbK$mBGRd7PC1_)Oov%agf0nbVw-xyMIa-6G|k|JL0hJ$)7oq^Lm^Dw07uWhqSw3X#AE zFWhm%8Alwj!x}5hF+m?4v|*!$G6aMyNgI$&*+SCY1d`-l)Sif_+;qf15aKExv#M4Y iINI3JhzTZ{!aU5&e9X@ROl3h9V*e-1B6~-Rb{9W?%s9ya diff --git a/test/subset/data/expected/math/STIXTwoMath-Regular.notdef-outline.retain-all-codepoint.ttf b/test/subset/data/expected/math/STIXTwoMath-Regular.notdef-outline.retain-all-codepoint.ttf index 4c10ec7d6d67794ef81679a314ef8cfccd0664a5..db3f9a10d4d1c1b905a6bdc5af7928790c79dcad 100644 GIT binary patch delta 197 zcmWm5F$e)+7zW_?`~TxO4ugf1l1Y-mU=U>?$zU*<3^EwZl!dZMSRx7gg95oQ3DitY9DT-5=0_4OOZ#;3w z1xFmP!v;$%FvS>s^w35Vb(E1;H+P8q0zy_~3y^KuK}da!fzWFZNWz#8&5}cit9Xqp fb7Gmq1d~i-4(4P!b1^qFn1^}U|M>Qn=}(+~tpYiF delta 199 zcmWm5KL`O~7{~G7^StNJ9Y-nZ%D|*dhMO5lGMEfX-5|rwH<*;9Op4iLu<{NT>zNEz zW{bLP%IGnCrf=U!HzM6w)r|5pKR>uW8Ks&z)H{k29n?{z0rjXwb#kdnB`Q#w7+<{c z!~-{6aK;gPY_Y)-Qv~qgp^q*YtlG*0)JTot=&R|F{#X;vTGCwPKw!S}YaQ6lS!gdp dn*<9b3=tD?kq}8?3QMF!TKu2PDYUbd>kl|mIFJj~6rt<+Ke0V`iF;s5{u delta 202 zcmWN`Eerv17zg0r`~J_@IqoLdZWGj#gv&RLfEk5NvI&MNNH)PH*_bHV2sYz_BFm!P zMA0Nc^oA!rk6q!hD=hL_<6B&x+##t$%kj5V)64LXp*Gd2L>{@6qb#M#AjS_Lyb$1y z8?HEGj}2CsV}cO|=%9%z7_2I)3#gvz!}jxrO@1peW>c4QkphAF$?s)g7N?Fib1V`p bl+Z*-ghfO|MNH@-E)0FG=4N1GU}fL}l1vOd eKv58n5eS(W7=R=LP)3EpXz~UY@y(&Evn>Ep_YU&_ delta 60 zcmexR{h@k-BJ=S*yEm$AWn@08xMcGkMtx>(4hBXBJ|JdfV45tzD$C6PWHB&sF{m&Y OP2RvFzB!b2wgmu5g%3CY