From f155768808c8e146a0d1bee0ea59578bffba8a3c Mon Sep 17 00:00:00 2001 From: Jake Jackson Date: Tue, 15 Sep 2026 08:45:44 +1000 Subject: [PATCH] Apply a nested lookup only to a glyph the subtable it names covers (#102) A contextual or chaining lookup matches a sequence of glyphs on its own Coverages, then names other lookups to run at positions within that match. The glyph handed to one of those is whatever the context matched at that position; the subtables of the lookup it names each carry a Coverage of their own, and nothing compared the two. A missing Coverage index reads as null, which is 0, so the handler applied whatever the subtable holds for the first glyph it covers, then reported having applied - so the loop broke and the subtable of the same lookup that does cover the glyph was never reached. The test goes in _applyGSUBsubtable() and _applyGPOSsubtable(), the one seam both callers pass through, so the invariant every handler below rests on is stated where they all come past it. The top-level loops keep their own copy as a fast path: a glyph no subtable covers then costs no seek(), which is what #83 was about. _applyGSUBsubtableSpecial() gets the same test on the glyph it is indexed by, which is the consonant after the Halant. DejaVu Sans is shipped and was drawing every combining mark it has no capital form of - macron, overline, hook above, comma above - as a capital grave, through a chained context that presents forty-four marks to a substitution covering twelve. Noto Sans Gurmukhi is the shape the issue was reported from: the udatta and anudatta were positioned by the bindi's value record. Of 104 fonts, 23 carry a nested lookup subtable a context can hand a glyph it does not cover. Test font: NotoSansGurmukhi-NestedCoverage-Subset, 5 glyphs of Noto Sans Gurmukhi 2.005 (OFL 1.1). Co-Authored-By: Claude Opus 5 (1M context) --- src/Otl.php | 37 ++- tests/Mpdf/NestedLookupCoverageTest.php | 192 +++++++++++++++ .../NestedLookupCoverageSnapshotTest.php | 223 ++++++++++++++++++ ...otoSansGurmukhi-NestedCoverage-Subset.json | 100 ++++++++ ...NotoSansGurmukhi-NestedCoverage-Subset.txt | 17 ++ .../data/snapshots/nested-lookup-coverage.pdf | Bin 0 -> 61577 bytes ...NotoSansGurmukhi-NestedCoverage-Subset.ttf | Bin 0 -> 3000 bytes 7 files changed, 564 insertions(+), 5 deletions(-) create mode 100644 tests/Mpdf/NestedLookupCoverageTest.php create mode 100644 tests/Snapshots/NestedLookupCoverageSnapshotTest.php create mode 100644 tests/data/fontcache/NotoSansGurmukhi-NestedCoverage-Subset.json create mode 100644 tests/data/otldump/NotoSansGurmukhi-NestedCoverage-Subset.txt create mode 100644 tests/data/snapshots/nested-lookup-coverage.pdf create mode 100644 tests/data/ttf/NotoSansGurmukhi-NestedCoverage-Subset.ttf diff --git a/src/Otl.php b/src/Otl.php index 0237092b0..166144c99 100644 --- a/src/Otl.php +++ b/src/Otl.php @@ -1624,6 +1624,11 @@ private function _getIndicFeatureMask($usetag) function _applyGSUBsubtableSpecial($lookupID, $subtable, $ptr, $currGlyph, $currGID, $nextGlyph, $nextGID, $subtable_offset, $Type, $LuCoverage) { + // The same guard the other two entry points make, on the glyph this one is indexed by: the + // lookup is on the consonant after the Halant, not on the glyph the cursor is on + if (!isset($LuCoverage[$nextGID])) { + return 0; + } // Special case for Indic // Check to substitute Halant-Consonant in PREF, BLWF or PSTF @@ -1702,12 +1707,25 @@ function _applyGSUBsubtableSpecial($lookupID, $subtable, $ptr, $currGlyph, $curr * Lookup type 7, Extension, never arrives here: _getGSUBtables() resolves it at font-build time * into the type and offset it points at. * + * A subtable applies only to a glyph in its own Coverage, and the structures below index that + * Coverage by the glyph with no check of their own. A glyph arriving from a matched context has + * been tested against the context's Coverages and not against this subtable's, so the test belongs + * here rather than only at the callers. + * + * The loops that apply a lookup from the top of the list keep their own copy of it. That is not + * redundant: theirs stands ahead of the call, and on a run through Arabic turns away 88,700 of + * 90,000 glyphs - leaning on this guard alone measured 15% slower end to end. + * * @see https://learn.microsoft.com/en-us/typography/opentype/spec/gsub * * @return int Glyphs to advance by, 0 if the subtable did not apply */ function _applyGSUBsubtable($lookupID, $subtable, $ptr, $currGlyph, $currGID, $subtable_offset, $Type, $Flag, $MarkFilteringSet, $LuCoverage, $level, $currentTag, $is_old_spec, $tagInt) { + if (!isset($LuCoverage[$currGID])) { + return 0; + } + $ignore = $this->getGCOMignoreSet($Flag, $MarkFilteringSet); $this->reader->seek($subtable_offset); @@ -3019,12 +3037,19 @@ private function _getXAdvancePos($pos) * Lookup type 9, Extension, never arrives here: _getGPOStables() resolves it at font-build time * into the type and offset it points at. * + * The Coverage test is the same one _applyGSUBsubtable makes, and is there for the same reason - + * read it there. + * * @see https://learn.microsoft.com/en-us/typography/opentype/spec/gpos * * @return int Glyphs to advance by, 0 if the subtable did not apply */ private function _applyGPOSsubtable($lookupID, $subtable, $ptr, $currGlyph, $currGID, $subtable_offset, $Type, $Flag, $MarkFilteringSet, $LuCoverage, $tag, $level, $is_old_spec) { + if (!isset($LuCoverage[$currGID])) { + return 0; + } + // RIGHT_TO_LEFT. Only cursive attachment reads it. $dir = ($Flag & 0x0001) == 1 ? 'RTL' : 'LTR'; @@ -3165,7 +3190,7 @@ private function _applyGPOSpairAdjustmentFormat1($lookupID, $subtable, $ptr, $cu $PairSetOffset[] = $subtable_offset + $this->reader->readUInt16(); } for ($p = 0; $p < $PairSetCount; $p++) { - if (isset($LuCoverage[$currGID]) && $LuCoverage[$currGID] == $p) { + if ($LuCoverage[$currGID] == $p) { $this->reader->seek($PairSetOffset[$p]); //PairSet table $PairValueCount = $this->reader->readUInt16(); @@ -4129,8 +4154,9 @@ private function _applyGSUBlookupRecords($SubstCount, $InputGlyphCount, $matched $lucurrGID = $this->OTLdata[$luptr]['uni']; foreach ($this->GSUBLookups[$lu]['Subtables'] as $luc => $lusubtable_offset) { - $shift = $this->_applyGSUBsubtable($lu, $luc, $luptr, $lucurrGlyph, $lucurrGID, $lusubtable_offset, $luType, $luFlag, $luMarkFilteringSet, $this->GSLuCoverage[$lu][$luc], 1, $currentTag, $is_old_spec, $tagInt); - if ($shift) { + $applied = $this->_applyGSUBsubtable($lu, $luc, $luptr, $lucurrGlyph, $lucurrGID, $lusubtable_offset, $luType, $luFlag, $luMarkFilteringSet, $this->GSLuCoverage[$lu][$luc], 1, $currentTag, $is_old_spec, $tagInt); + if ($applied) { + $shift = $applied; break; } } @@ -4189,8 +4215,9 @@ private function _applyGPOSlookupRecords($PosCount, $InputGlyphCount, $matched, $lucurrGID = $this->OTLdata[$luptr]['uni']; foreach ($this->GPOSLookups[$lu]['Subtables'] as $luc => $lusubtable_offset) { - $shift = $this->_applyGPOSsubtable($lu, $luc, $luptr, $lucurrGlyph, $lucurrGID, $lusubtable_offset, $luType, $luFlag, $luMarkFilteringSet, $this->LuCoverage[$lu][$luc], $tag, 1, $is_old_spec); - if ($shift) { + $applied = $this->_applyGPOSsubtable($lu, $luc, $luptr, $lucurrGlyph, $lucurrGID, $lusubtable_offset, $luType, $luFlag, $luMarkFilteringSet, $this->LuCoverage[$lu][$luc], $tag, 1, $is_old_spec); + if ($applied) { + $shift = $applied; break; } } diff --git a/tests/Mpdf/NestedLookupCoverageTest.php b/tests/Mpdf/NestedLookupCoverageTest.php new file mode 100644 index 000000000..8d94df07e --- /dev/null +++ b/tests/Mpdf/NestedLookupCoverageTest.php @@ -0,0 +1,192 @@ + 'utf-8']); + $mpdf->WriteHTML('

' . $html . '

'); + + return array_values(unpack('N*', mb_convert_encoding($mpdf->drawnText[0], 'UTF-32BE', 'UTF-8'))); + } + + /** + * The mark the nested subtable does cover is still substituted, which is what the rule is for. The + * capital form has no codepoint of its own and is mapped into the Private Use Area as the subset + * is built, so it is read as "not the character written" rather than named. + */ + public function testAMarkTheNestedSubtableCoversIsStillSubstituted() + { + $drawn = $this->drawn([self::CAPITAL_A, self::GRAVE]); + + $this->assertCount(2, $drawn); + $this->assertSame(self::CAPITAL_A, $drawn[0]); + $this->assertNotSame(self::GRAVE, $drawn[1], 'the capital form of the grave was not substituted'); + } + + /** + * A mark it does not cover is left as itself. It was being given the record at Coverage Index 0 - + * the capital grave - so a macron written over a capital A was drawn as a grave accent. + */ + public function testAMarkTheNestedSubtableDoesNotCoverIsLeftAlone() + { + $this->assertSame([self::CAPITAL_A, self::MACRON], $this->drawn([self::CAPITAL_A, self::MACRON])); + } + + /** + * With a lowercase letter in front of it the context does not match at all, so even the mark the + * nested subtable does cover stays as written. + */ + public function testAMarkAfterALowercaseLetterIsLeftAlone() + { + $this->assertSame([self::SMALL_A, self::GRAVE], $this->drawn([self::SMALL_A, self::GRAVE])); + } + + /** + * The positioning half, and the shape GravityPDF/mpdf#102 was reported from. + * + * NotoSansGurmukhi-NestedCoverage-Subset is 5 glyphs of Noto Sans Gurmukhi 2.005 (OFL 1.1) whose + * `dist` chained context names a single adjustment at a Devanagari stress sign. That lookup has + * two subtables - the first covers the bindi and a conjunct, the second the two stress signs - and + * the bindi's value record was what the stress signs were positioned by. + * + * @return array the adjustment the mark of a two-character run was given + */ + private function markPosition($mark) + { + $mpdf = new PositionRecordingMpdf([ + 'mode' => 'utf-8', + 'fontDir' => [__DIR__ . '/../data/ttf'], + 'fontdata' => ['gurmukhinested' => [ + 'R' => 'NotoSansGurmukhi-NestedCoverage-Subset.ttf', + 'useOTL' => 0xFF, + ]], + 'default_font' => 'gurmukhinested', + ]); + $mpdf->WriteHTML('

' . self::KA . $mark . '

'); + + return $mpdf->drawnPositions[0][1]; + } + + /** + * The udatta is raised above the letter by its own record in the second subtable, where the first + * subtable's record left it on the baseline and 150 units to the left. + */ + public function testAMarkIsPositionedByTheSubtableThatCoversIt() + { + $this->assertSame( + ['BaseWidth' => 622, 'XPlacement' => 602, 'YPlacement' => 275, 'XAdvanceL' => 602, 'XAdvanceR' => 602], + $this->markPosition(self::UDATTA) + ); + } + + /** + * The anudatta is the same the other way: its own record drops it below the letter, where the + * first subtable's put it on the baseline. + */ + public function testTheSecondMarkOfTheSameSubtableIsPositionedByItToo() + { + $this->assertSame( + ['BaseWidth' => 622, 'XPlacement' => 255, 'YPlacement' => -355, 'XAdvanceL' => 255, 'XAdvanceR' => 255], + $this->markPosition(self::ANUDATTA) + ); + } + + /** + * The bindi is the glyph the first subtable does cover, and the one whose record the other two + * were being given. It is positioned exactly as it was, so the guard turns away the glyphs the + * subtable does not cover without turning away the one it does. + */ + public function testTheGlyphTheFirstSubtableCoversIsPositionedAsItWas() + { + $this->assertSame( + ['BaseWidth' => 622, 'XPlacement' => 603, 'YPlacement' => 0, 'XAdvanceL' => 603, 'XAdvanceR' => 603], + $this->markPosition(self::BINDI) + ); + } + + /** + * Reading a Coverage at a glyph it does not hold is a warning per glyph per subtable under E_ALL, + * and the value it yields is an offset, so what follows it can be a deprecation as well. Asserted + * beside the positions, since an install running at production's error_reporting sees none of it - + * only a mark in the wrong place. + */ + public function testANestedLookupReadsNoCoverageItHasNot() + { + $raised = []; + + set_error_handler(function ($number, $message, $file, $line) use (&$raised) { + // Filtered to the shaper so a notice raised elsewhere in the render cannot fail this + if (false !== strpos($file, 'Otl.php')) { + $raised[] = sprintf('%s in %s:%d', $message, basename($file), $line); + } + + return true; + }); + + try { + foreach ([self::UDATTA, self::ANUDATTA, self::BINDI] as $mark) { + $this->markPosition($mark); + } + } finally { + restore_error_handler(); + } + + $this->assertSame([], $raised); + } + +} diff --git a/tests/Snapshots/NestedLookupCoverageSnapshotTest.php b/tests/Snapshots/NestedLookupCoverageSnapshotTest.php new file mode 100644 index 000000000..8fe19424a --- /dev/null +++ b/tests/Snapshots/NestedLookupCoverageSnapshotTest.php @@ -0,0 +1,223 @@ + 0x0300, + 'acute' => 0x0301, + 'circumflex' => 0x0302, + 'tilde' => 0x0303, + 'dieresis' => 0x0308, + ]; + + /** + * Marks it has no capital form of. Every one of these was drawn as the capital grave, because the + * subtable holds that at Coverage Index 0 and a missing index reads as 0. + */ + const UNCOVERED = [ + 'macron' => 0x0304, + 'overline' => 0x0305, + 'hook above' => 0x0309, + 'comma above' => 0x0313, + 'double overline' => 0x033F, + ]; + + /** U+0A15 GURMUKHI LETTER KA */ + const KA = 'ਕ'; + + /** U+0A02 GURMUKHI SIGN BINDI, the glyph the nested subtable does cover */ + const BINDI = 'ਂ'; + + /** U+0951 DEVANAGARI STRESS SIGN UDATTA, drawn above the letter */ + const UDATTA = '॑'; + + /** U+0952 DEVANAGARI STRESS SIGN ANUDATTA, drawn below it */ + const ANUDATTA = '॒'; + + /** + * @return string A unique identifier / name for the snapshot + */ + public function getId() + { + return 'nested-lookup-coverage'; + } + + /** + * Generate a PDF document by initializing the Mpdf object on $this->mpdf and + * loading it with content + * + * @return void + * @internal Don't call any $this->mpdf->Output*() method + */ + public function generatePdf() + { + $this->mpdf = $this->createMpdf($this->config()); + $this->mpdf->WriteHTML($this->style() . $this->markSamples() . $this->gurmukhiSamples()); + } + + /** + * DejaVu Sans is shipped and needs no registering. The Gurmukhi subset is 5 glyphs of Noto Sans + * Gurmukhi 2.005 (OFL 1.1) - the KA, the bindi, the two stress signs and the conjunct that keeps + * the nested lookup's first subtable at the two entries that make it index its Coverage. + */ + private function config() + { + return [ + 'mode' => 'utf-8', + 'fontDir' => [__DIR__ . '/../data/ttf'], + 'fontdata' => [ + 'gurmukhinested' => [ + 'R' => 'NotoSansGurmukhi-NestedCoverage-Subset.ttf', + 'useOTL' => 0xFF, + ], + ], + ]; + } + + private function style() + { + ob_start(); + ?> + + +

mPDF

+ Combining marks after a capital' + . '

DejaVu Sans has a capital form of some combining marks and not of others.' + . ' The lowercase column is the mark as written; the capital column is the form drawn over a' + . ' capital letter. Read down the second table: each mark should be its own, not the grave of' + . ' the first row above.

'; + + foreach (['a capital form' => self::COVERED, 'no capital form' => self::UNCOVERED] as $heading => $marks) { + $html .= '

Marks with ' . $heading . '

'; + foreach ($marks as $label => $mark) { + $html .= '' + . '' + . ''; + } + $html .= '
' . $label . ' U+' . sprintf('%04X', $mark) . '' . sprintf('A&#x%04X;', $mark) . '' . sprintf('a&#x%04X;', $mark) . '
'; + } + + return $html; + } + + private function gurmukhiSamples() + { + return '

Gurmukhi stress signs

' + . '

The udatta sits above the letter and the anudatta below it. Both were given' + . ' the bindi\'s adjustment instead - on the baseline, and to the left of where the bindi' + . ' itself is drawn.

' + . '' + . $this->gurmukhiRow('udatta U+0951 - above', self::UDATTA) + . $this->gurmukhiRow('anudatta U+0952 - below', self::ANUDATTA) + . $this->gurmukhiRow('bindi U+0A02 - the record they were given', self::BINDI) + . '
'; + } + + private function gurmukhiRow($label, $mark) + { + return '' . $label . '' + . '' . self::KA . $mark . '' + . '' . self::KA . ''; + } + + /** + * The font comes from the paragraph's own inline style rather than from the stylesheet, so the + * sample stands on its own and the run is the first thing drawn. + * + * @return string[] the glyphs the sample was drawn with, left to right + */ + private function glyphsOf($text) + { + $mpdf = new TextRecordingMpdf($this->config()); + $mpdf->WriteHTML('

' . $text . '

'); + + return preg_split('//u', $mpdf->drawnText[0], -1, PREG_SPLIT_NO_EMPTY); + } + + /** + * The document only shows anything if the marks the nested substitution does not cover are drawn + * as themselves rather than as the capital grave. The capital forms have no codepoints of their + * own - they are mapped into the Private Use Area as the subset is built - so the samples are + * compared with each other rather than named. + */ + public function testTheMarksWithNoCapitalFormAreNotDrawnAsTheGrave() + { + $grave = $this->glyphsOf('À'); + + foreach (self::UNCOVERED as $label => $mark) { + $sample = $this->glyphsOf(sprintf('A&#x%04X;', $mark)); + $written = $this->glyphsOf(sprintf('a&#x%04X;', $mark)); + + $this->assertNotSame($grave[1], $sample[1], $label . ' is drawn as the capital grave'); + $this->assertSame($written[1], $sample[1], $label . ' over a capital is not the mark written'); + } + } + + /** + * The marks that do have a capital form still get it, which is what tells the guard apart from + * turning the rule off. Each is drawn as something other than the character written, and each as + * something other than the others. + */ + public function testTheMarksWithACapitalFormStillGetIt() + { + $drawn = []; + foreach (self::COVERED as $label => $mark) { + $sample = $this->glyphsOf(sprintf('A&#x%04X;', $mark)); + $written = $this->glyphsOf(sprintf('a&#x%04X;', $mark)); + + $this->assertNotSame($written[1], $sample[1], $label . ' was not given its capital form'); + $drawn[] = $sample[1]; + } + + $this->assertSame($drawn, array_unique($drawn), 'two capital forms are drawn as the same glyph'); + } +} diff --git a/tests/data/fontcache/NotoSansGurmukhi-NestedCoverage-Subset.json b/tests/data/fontcache/NotoSansGurmukhi-NestedCoverage-Subset.json new file mode 100644 index 000000000..969fd3591 --- /dev/null +++ b/tests/data/fontcache/NotoSansGurmukhi-NestedCoverage-Subset.json @@ -0,0 +1,100 @@ +{ + "_": "Generated by composer fontcache:update. See tests/Mpdf/Fonts/ParserGoldenMaster.php.", + "fullName": "NotoSansGurmukhi-Regular", + "mtx": { + "GSUBScriptLang": [], + "GSUBFeatures": [], + "GSUBLookups": [], + "GPOSScriptLang": { + "gur2": "DFLT " + }, + "GPOSFeatures": { + "gur2": { + "DFLT": { + "abvm": [ + 0 + ], + "dist": [ + 1 + ] + } + } + }, + "GPOSLookups": [ + { + "Type": 4, + "Flag": 0, + "SubtableCount": 1, + "Subtables": [ + 74 + ], + "MarkFilteringSet": "" + }, + { + "Type": 8, + "Flag": 0, + "SubtableCount": 2, + "Subtables": [ + 162, + 186 + ], + "MarkFilteringSet": "" + }, + { + "Type": 1, + "Flag": 0, + "SubtableCount": 2, + "Subtables": [ + 230, + 250 + ], + "MarkFilteringSet": "" + } + ], + "MarkGlyphSets": [], + "rtlPUAstr": "", + "haskernGPOS": false, + "hassmallcapsGSUB": false + }, + "cache": { + "GDEFdata.json": { + "GlyphClassBases": " 00A15", + "GlyphClassMarks": " 00951| 00952| 00A02| 0E000", + "GlyphClassLigatures": "", + "GlyphClassComponents": "", + "MarkGlyphSets": [], + "MarkAttachmentType": [] + }, + "GPOS.dat": "270 bytes, sha256 141fe74bac6028f61694f29b20070b0c62950a8ad4392743aa464aaacff0f0b6", + "GPOSdata.json": [ + [ + { + "2562": 0, + "57344": 1, + "2385": 2, + "2386": 3 + } + ], + [ + { + "2385": 0 + }, + { + "2386": 0 + } + ], + [ + { + "2562": 0, + "57344": 1 + }, + { + "2385": 0, + "2386": 1 + } + ] + ], + "GSUB.dat": "26 bytes, sha256 aa7ce2b45ba3a2c52647924a58315c984a0acb7958ba1d7b9aaab161ec333b84", + "GSUBdata.json": [] + } +} diff --git a/tests/data/otldump/NotoSansGurmukhi-NestedCoverage-Subset.txt b/tests/data/otldump/NotoSansGurmukhi-NestedCoverage-Subset.txt new file mode 100644 index 000000000..eff8c7183 --- /dev/null +++ b/tests/data/otldump/NotoSansGurmukhi-NestedCoverage-Subset.txt @@ -0,0 +1,17 @@ +

GDEF table

+

Glyph classes

+

Glyph class 1

+
Base glyph (single character, spacing glyph)
+
+

Glyph class 3

+
Mark glyph (non-spacing combining glyph)
+
◌॑ ◌॒ ◌ਂ ◌
+

GSUB Tables

+

GSUB Scripts & Languages

+
+
No entries in GSUB table.
+
+

GPOS Tables

+

GPOS Scripts & Languages

+
gur2
DFLT: abvm dist
+ diff --git a/tests/data/snapshots/nested-lookup-coverage.pdf b/tests/data/snapshots/nested-lookup-coverage.pdf new file mode 100644 index 0000000000000000000000000000000000000000..5e266e21f917b7c81a5ede318ba23d076033fbcb GIT binary patch literal 61577 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ⅈ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 aqWNe1t83@*#~fs#V_~6(A|@7=75QJy0_8yf literal 0 HcmV?d00001 diff --git a/tests/data/ttf/NotoSansGurmukhi-NestedCoverage-Subset.ttf b/tests/data/ttf/NotoSansGurmukhi-NestedCoverage-Subset.ttf new file mode 100644 index 0000000000000000000000000000000000000000..8fb35febbe2f234d7213ac48dcc3d5faf251348a GIT binary patch literal 3000 zcmbVOU2Kz87=F)b`*ka$W3aY!Bc<(rI;ZTfYlkq@ZFNQV2M&>lPQR_AEv#MB9|wdB zBw~!w#0xHr{~;=g-k7M-7-NVrUZ@x96&FG+rD?CF1vuk&o68x$XpaV`A6z%vf;pWvq7)33p=V!I9J(h5L!t?1Q{{ zdZwrUV&TyWk?kq0AD`JXyywzK7g``MVI7~(>iLadh`o^ijP*oHFXl0?16~{En$+Tv z1N+~6ayzi=FuqSO=*gA~dKCK5p;#IWXU?`8>&LNfOJ_@m9i3NgSR)>4T3njf#X<2W z)>zWItbRC8Eux1=Uc@?()3XaNB|rTP$!#HWJe^-EmQD}r%|x|lA)m_^7V>HBxs#Ch zV(lbJvxwu0{0e|hqGCg^p*`3ToE0xuUKG*F*Yc}tv4~8PFcR`R<3rmh*J?D>5gmv{ z`n{e;?SwZN^!fsu9(jOZfjK!h@9pPX! z=xOybg43yKt)UKvWK5sWFMZ+{N3+)znjIR5-`ltI(Pn48OS4yo=tN7#@ddGI0Zlg{@oraZjGaqMI#b?Ir3x_(wgI*Q4&#P$;gc%-Gc|?6~S^2{0 zn%FwD!%-7=YC*q0s5uw9C)V#+vuTsB$x|m=Iz_Vc-gY_O8fXoTi_kstOhZ@0;BY+Z zZEJAVZ>--G4EZsQZ;o$h_q*zQYCP^p=dP`e(Z0S>$Ix^bTVw2(uN$Xr$9Tg>qY=+r z3Hkc@^CT)$#-ef7c%S+Ap_Y{?Q8<-IU{i_v+ezv?MouZqYUxLxoMgod$&0 zq8-#Mc3QMXy&`GRPKt|D7F|PK;+#d-Qd~-lcF~9&v*u5-RY0+y%$X3;N zQ_S9G@o%Gm{b7?vLF(*BEn1Mv{sG5K)ay1L{Q@3vLcGBObuW zfhsD^GElP6JOup=-F}1L8PcK09ukn>sPzD1NrATrjRKjW+?R8h;gK zHO6MT8KtTppsK~+{RURq>_r@0gN(|Et5}VsidMz?@7^;iV;xzSfUQ#!KC&v$L*Q}s zIIbnUDdf*Pbw8>!56_b-3a;@H?1d>|OWutfzAKtLAzierM_^S{9s;x(I)6urLz{C< z0fqZx0hn33k-LB>1K8^$x3uRBR_sfbefRaQF?(j2`0a+5mE2Z(Ck3n04L#KJ57yaL zHCRC?!oG|+d9S#~%{q@MeLev*pbkK1S=E}WXKE~Bo`-ktL^IDaXwIns9qw}0oxv_l zV4hZ$=Q^z*PuzrXCuFPprVn}ZFi+pD{8ppU=?TP_QJp_$?cg%j97g~W_B%|w6M#7JF|$HPjdAfr3 zXU&W%aPt~eukHc-Q&W$?t>NI`Neq4kxGvOhD+!?V<6bduLqpv?(AMXk$dWsmDVA{i zSa%d7!?p(hyG|>80a{QUHNnbHBcSb|?C_*nx{SIWqe%?`En&PZbNHT7U(Q!R8(%5F zsR1PsSxCj$1sPj&v{E6OIjjf0@jBm>C=Bq~vx(t{O&wO!IB0yrGhU9bjw!LB@~Yx- ztfmJSc@bx|9$;DzXU+F6-^2WEBe|SPm)Om6vXmAqx2wCF{Yv~dAo(eT%$LHAKA^t< Db}Hp7 literal 0 HcmV?d00001