rapier-markdown-kit 1.2.10 → 1.2.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -21,13 +21,13 @@
21
21
  }
22
22
  ],
23
23
  "generator": "tools/compile-hyphens.mjs",
24
- "generatorSha256": "b5758c3ceac76ac39a8ba0bf2f45bc88854e4779d4f443a9c0957694305571dd",
24
+ "generatorSha256": "26b3321fd19f114ca9abdf5380c8f7b34e6ce9ffe5c519946d006690e71e3a2b",
25
25
  "policy": "Complete pinned data in a static prefix trie, with original MIT Rapier traversal and matcher; en and en-US ASCII words. Other regional English, non-ASCII words and other languages use the native offline hyphenator.",
26
26
  "files": [
27
27
  {
28
28
  "output": "patterns.js",
29
- "outputBytes": 46360,
30
- "outputSha256": "e0360f1552704657d79a670f1e2e0b263f6eea42e209866b521cd8ec2aff387d"
29
+ "outputBytes": 32776,
30
+ "outputSha256": "c92bcc1b9ca62aaffd4b46190c25e15386e3218b33bb07aaefe325159aa97b7e"
31
31
  }
32
32
  ]
33
33
  }
@@ -14,12 +14,13 @@ and exceptions described in the upstream file. No hyphenation implementation
14
14
  from that repository or Justice is included. */
15
15
  // Generated by tools/compile-hyphens.mjs; edit the pinned inputs only by reviewed intake.
16
16
  // Original Rapier traversal is MIT licensed. Pattern data keep the notice above.
17
- const starts = "€›²ËàðćĠıŃŕůųƂƙƫDŽǝǰDZȉȠȶɌɒɡɬɽʆʒʖʛʠʭʯʳʷʼʽʿ˂ˇˊː˔˙ˠ˦˪ˬˮ˯˷˾̢̧̙̙̲̲̺̻͈͔̆̇̈̐̔ͥͩͭͮ̚͞ͱͳͽͿͿ΋΋΋ΓΓΓΘΘΙΣΣΦΧΪβββδπσύϔϢϣϧϧϵϵϺϺЀЊЊЋЗЗЗЙЫЫЯЯпппхххѕѕћўѠѩѩѩѫѶѹ҃ҋҕҚҡҢҩҪҬҵҾӊӔӞӟӬӹԃԉԎԒԓԖԟԟԟԩԭԭԵԻԻԻԾԾՂՂՄՋՋՓՓՓ՝ՠգհմյչփփֈ։֊֐֐ׇׇֹֹֻּֽ֭֭֭֒֠֠׉׊׍גדוכס׫׳׺؁؊؊؊؋؋ؕ؜جضػؼمٔٝٝ٠٠١١٤٧٪٫٬ٱٱٹٹٹڀڀڂڂڄڈډڍڍڍژڙڜڟګڬگگڿڿۀۅۈۈۗۜۜ۟ۥ۱۲۲۸܃܅܅ܐܐܐܚܚܚܛܞܬܻܻܳܳܵܵ݇݇ݎݔݥݦݯݱݽݽށނރޅޕޗޗޘޡާްްް޲޳޸޾߆ߋߐߑߙߚߢߢߤ߰߷ࠃࠈࠐࠐࠝࠤࠩ࠯࠲࠷࠸࠹ࡄࡄࡄࡏࡏࡏ࡙ࡢࡢࡦࡦࡦࡲࡵࡹࡼࢄࢍࢍ࢐ࢠࢣࢧࢩࢻࢽࣂࣄ࣓࣓ࣹࣙࣜ࣠ࣥࣴࣽअऋओखखङचततभभऽऽऽूॏ॒ॖग़ग़ॣ३४४ॵংঋঋ঍঒ততদদষষষি৐৔৕৕ৣৣ২৫৯৺৺৾ਁਂਉ਌਒ਘਛਝਟਤਤਤ਱ਸ਼ਾੁ੆੔੝੣੤੤੥੦ੱ੹આઍઍઍગગગઞટદદન઩બબમલલલષષ઺઼ીુૃૄૅ૆૆ૉૉૌૌૐ૑૑૑૕૘૝ૢ૧૫૲૴૴૶૶ૺ૽૽૽଀ଁଃ଄ଅଆଇଈଌ଎଒ଓଔକଖଙଛଜଝଢଣତଥନବଭମଯ଱ଳଳ଴଴ଶହ଺଻଻଼ଽାିୀୁୂୄ୆େୈ୍୏୑୓୕୚୛ଡ଼ଢ଼୞ୟୢ୧୫୯୲୴୶୷୸୹୻୼୽஁ஂஃ஄ஆஉ஋஌ஐஓக஘ஙசஞஞட஡஢஢ண஥஥ந஬஭ழழவஶஸஹ஺஻஻஻஽ாீுூ௃௄ெை௉ௌ்௎ௐ௑௒௘௙௚௛௜௞௟௠௢௥௥௥௥௧௩௩௩௩௩௩௩௪௫௭௮௯௲௳௵௷௹௹௺௾ఃఅఉఋఌఐఔఘచతథదనరవస఺఼ాుు౅ెెే౑౒౓ౕౙ౛ౡౢ౥౥౥౧౩౩౫౬౰౱౱౲౳౴౶౷౸౼ಂ಄ಋಏಐ಑ಔಘಘಘಚಛಜಜಝಟಡಣದನ಩಩ಪಪಬಭಭಭಮಯಯರಱಲಳಶಹ಺಻಻಼ಾಾೀೃ೅ೇೇ೉ೋ೎೏೏೐೐೑೓೓ೕ೘೜ೠೢ೥೧೨೩೪೫೫೬೭೮೮೴೴೸೹೺೻೼೽೽೽೽೾೿ഀഁംഃആഋഋഋ഍എഏഏഏഒഗഘങഛഞടഠഡതതദദനബബഭരറററളഹാാീുൃൃൄ൅െെൈൈ്ൎ൑൒൓൓൓ൔൖ൘൘൙൙൚൛൝൞ൢ൦൨൩൪൫൬൮൰൴൸ർൽൿ඀ංඃ඄඄඄඄අඇඊඊඌඎඏඑඑඑඑඒඒඒඓඓඔ඗කඛඛගඝඝඟඡඥඥඦටඨඪතනපපම඾වශශශෂෂෂෂසෆෆ෇෈෉්෋෎ාැිු෕෕෕ෙේේේේේෛෛෛෛෞෟ෡෢෣෣෣෤෤෥෥෧෩෭෰෱෱෱෱෱ෲෲෳ෶෷෷෸෹෹෺෻෻෽෽෾෿฀ขฃฅซฎฒตทธธบปผฝมรวศสหหหอฮิึืุุูู฻฻฼฼฽฾฾฿฿ใไๅๆ็๋๋ํ๏๏๐๐๐๑๒๕๖๙๚๛๜๢๪๪๴๶๺๻๼๾ກກ຃ຉຊຌຍຏຏຑຒຓບຢຢລ຦ຨສຫຫຫຬຬຬອຯຯະັັຳຶືຸູູົຼຽ຾຿ໃໄ໅໏໏໗໗໙ໝໞ໡໢໣໤໧໪໬໳໴໵໷໻໼ༀ༁༁༂༄༆་་༌༐༑༒༒༓༓༓༔༔༗༙༝༡༢༢༣༤༤༧༧༧༨༨༪༫༫༬༭༯༰༳༴༴༶༹༹༷༺༻༼༾༾༿གགྷགྷགྷཊཋཌཏཔཕབབྷམཙཛཛྷཛྷཞརརལཥསཧཧཧཨཨཀྵཪཫ཭཮཮ཱཱཱིུྲྀཷཹཹཹཹ྄ཱེོྀྃ྅ྉྉྊྋྋྌྍྏྏྐྒྔྔྕ྘྘ྙྚྚྚྚྜྜྷྠྡྷྡྷྤྥྦྷྪྪྪྪྪྫྮྮྰྱྱྶྸྺྺྻྼྼ྽྽྾྾྾྿྿࿀࿁࿂࿄࿅࿆࿇࿇࿍࿐࿕࿖࿗࿘࿙࿛࿜࿝࿠࿡࿢࿣࿣࿩࿪࿫࿫࿬࿭࿮࿯࿯࿰࿱࿲࿳࿷࿹࿻࿻࿼࿽࿾࿿ခဂငဆဈညဎတထဒဓပပဖမမမယလဝဝသအအအဢဥဦဧဪါီုုူေံ့းးျြွဿ၁၅၇၇၉၎၏ၑၑၒၓၔၕၙၚၜၜၜၝၞၠၢၢၢၣၤၥၩၩၪၬၭၯၯၳၶၶၼၽၽၾၿႀႀႂႄႈႉႊႋႌႌႎႏ႐႓႔ႚ႟႟႟႟ႢႤႦႧႧႧႩႩႩႬႭႮႮႱႲႲႳႴႵႶႹႻႼჀჁჅ჆჈჉჊჊Ⴭ჎჏჏ბვვზთილნსტშცძჳჵჷჷჺ჻ჾᄁᄃᄃᄄᄄᄅᄆᄇᄈᄊᄋᄋᄋᄌᄌᄌᄌᄍᄍᄍᄍᄍᄎᄏᄏᄐᄑᄑᄑᄓᄓᄗᄗᄘᄙᄙᄚᄚᄚᄛᄛᄜᄝᄝᄞᄞᄞᄠᄡᄣᄤᄥᄦᄩᄬᄭᄰᄱᄲᄲᄴᄴᄵᄶᄷᄹᄺᄻᄼᄿᅀᅅᅇᅌᅏᅑᅒᅒᅓᅔᅔᅙᅚᅠᅣᅦᅩᅩᅩᅭᅱᅲᅲᅳᅶᅷᅷᅹᅺᆀᆁᆃᆆᆇᆈᆊᆊᆋᆍᆎᆎᆒᆓᆕᆖᆙᆜᆠᆡᆣᆣᆤᆦᆨᆨᆨᆨᆨᆩᆫᆮᆯᆱᆱᆲᆲᆳᆵᆷᆷᆸᆼᆽᆾᆾᇀᇀᇂᇂᇂᇃᇄᇅᇇᇇᇊᇌᇌᇍᇒᇕᇖᇚᇝᇠᇡᇤᇤᇧᇨᇪᇫᇲᇳᇴᇵᇹᇹᇹᇹᇻᇻᇽሄህለሉሉላላሌሌልልሎሏሐሐሑሒሗሙማሜሞሞሟሠሡሦሪራራሬሬርሯሯሯሯሯሰሳሴሴሶሷሺሿቁቃቅቆቇቈቋቍ቎቎቎ቐቑቖ቗቙ቚቚቛቝ቞቞በቢቤብብቦቦቪቯተቱቱቲታቶቸቻቼችቿኀኀኁኁኃኅኆኇኈ኉኉ኊኌኌ኎ኒኔንንኖኗኘኘኚኛኝኝኝኞኟኡኦኩኪካኮኯኰ኱ኲኲኳኳኵ኶኷ኹኹኺኻኽኾ኿ዀዅ዇዇ወወወዉዊዌዎዎዎዏዏዏዏዏዐዑዓዔዖ዗ዘዙዙዚዚዜዞዟዠዣዤዦዧየያዬይይዮዯደደዱዳዶዹዺዻዼዽዾዿጀጁጂጂጃጅገጉጋጌጎጏጒጓጞጟጢጣጣጧጧጧጪጬጰጴጵጷጹጻጼጽጿፀፄፅፊፌፎፏፐፒፒፓፔፕፕፗፙ፜፞፞፞፞።፦፧፮፯፰፲፳፴፶፹፺፺፻፾ᎁᎁᎁᎄᎆᎇᎊᎌᎏ᎐᎒᎓᎔᎔᎖᎖᎘᎛᎜᎝᎟᎟ᎠᎠᎡᎡᎤᎤᎥᎦᎧᎫᎬᎰᎳᎳᎳᎳᎴᎴᎶᎸᎸᎺᎽᎾᏆᏈᏈᏉᏌᏒᏒᏕᏕᏕᏕᏕᏖᏙᏜᏞᏟᏠᏣᏤᏦᏨᏭᏮᏯᏯᏰᏲᏲᏳᏵ᏶᏶᏷ᏸᏹᏺᏻ᐀ᐁᐂᐌᐏᐕᐖᐖᐗᐘᐘᐘᐙᐚᐛᐜᐜᐝᐝᐝᐞᐞᐞᐟᐟᐢᐥᐨᐪᐬᐮᐯᐱᐱᐲᐵᐺᐻᐽᑀᑀᑁᑂᑄᑅᑇᑉᑉᑊᑌᑎᑏᑐᑓᑓᑘᑙᑝᑟᑣᑤᑥᑧᑨᑨᑫᑮᑲᑵᑶᑺᑻᑻᑻᑽᒁᒁᒂᒂᒂᒃᒆᒇᒋᒌᒏᒑᒒᒖᒚᒚᒜᒜᒠᒤᒧᒧᒨᒩᒫᒬᒭᒯᒱᒱᒲᒴᒷᒷᒸᒼᓀᓁᓁᓃᓄᓆᓈᓉᓊᓍᓑᓓᓕᓗᓙᓜᓞᓞᓟᓣᓣᓤᓤᓨᓪᓬᓭᓮᓮᓲᓳᓴᓵᓵᓵᓷᓺᓻᔂᔅᔆᔆᔈᔉᔊᔋᔍᔎᔏᔕᔗᔗᔗᔘᔘᔙᔙᔜᔜᔡᔣᔤᔧᔧᔨᔨᔬᔯᔲᔵᔷᔺᔻᔻᔼᔼᔾᕀᕂᕃᕃᕆᕊᕑᕓᕗᕙᕚᕛᕜᕜᕜᕞᕢᕦᕦᕦᕧᕩᕪᕬᕯᕰᕲᕲᕳᕳᕳᕳᕴᕵᕶᕷᕷᕸᕹᕻᕽᕾᕿᖀᖁᖂᖇᖇᖊᖋᖍᖎᖑᖕᖗᖛᖜᖠᖢᖤᖤᖨᖩᖭᖮᖮᖯᖯᖰᖰᖰᖷᖷᖺᖻᗂᗃᗈᗋᗌᗍᗍᗎᗏᗏᗏᗑᗑᗒᗒᗓᗓᗔᗔᗔᗔᗖᗗᗘᗘᗚᗛᗜᗜᗝᗞᗤᗦᗨᗫᗰᗲᗴᗵᗵᗵᗶᗹᗹᗹᗼᗾᗿᗿᘁᘅᘆᘋᘋᘌᘒᘔᘕᘕᘕᘕᘕᘗᘚᘝᘝᘢᘢᘤᘧᘧᘪᘫᘬᘭᘮᘯᘱᘵᘷᘷᘽᘾᘾᘿᙁᙂᙆᙇᙇᙇᙇᙈᙉᙉᙊᙋᙌᙏᙒᙔᙔᙕᙗᙘᙝᙠᙤᙫ᙭᙮᙮᙮ᙯᙯᙰᙰᙱᙲᙲᙲᙲᙲᙲᙳᙴᙹᙹᙹᙹᙺᙺᙺᙺᙽᙽᙽᙽᙾ ᚄᚄᚄᚆᚇᚈᚈᚊᚋᚋᚋᚋᚋᚎᚒᚓᚔᚔᚕᚘᚙᚙᚙᚚ᚛᚜᚝᚞᚟ᚠᚢᚣᚤᚥᚦᚩᚫᚫᚫᚬᚯᚰᚰᚱᚳᚴᚵᚵᚶᚷᚻᚼᚾᚾᚾᚾᚿᚿᚿᛀᛂᛂᛃᛅᛉᛊᛊᛊᛋᛍᛓᛔᛕᛖᛘᛙᛜᛜᛟᛠᛢᛤᛥᛥᛦᛨᛩ᛫ᛮᛳᛳᛸᛸᛸᛸᛸᛸᛸ᛺᛼᛿ᜀᜁᜂᜃᜄᜅᜅᜅᜅᜉᜋᜑᜓ᜕᜗᜙᜙᜚᜚᜛ᜟᜢᜢᜣᜦᜩᜪᜪᜬᜬᜰᜱ᜴᜶᜷᜷᜹᜺᜻᜻᜼᜽᜾᜿ᝁᝂᝅᝆᝆᝇᝇᝇᝈᝉᝋᝋᝌᝍᝍᝎᝏᝏᝐᝐᝑᝒᝓᝓᝓ᝔᝔᝕᝖᝖᝖᝖᝗᝗᝙᝚᝚᝚᝚᝛᝝᝝᝞ᝠᝡᝡᝡᝡᝡᝡᝢᝣᝥᝥᝦᝧᝧᝧᝧᝨᝨᝨᝩᝪᝫᝬᝬᝬ᝭᝭᝭᝭᝭ᝯᝯ᝱᝱ᝲᝳᝳ᝴᝵᝵᝵᝵᝵᝸᝸᝸᝺᝻᝼᝽᝽᝽᝽᝽᝾᝾᝿᝿᝿᝿កខខខខខគគគឃឃឃងឆឆឈឈឈឈញដដដដដឋឌឍតតថទធនបបផពភភមយររវឝឞឞសសហឡអអអឣឤឤឤឥឦឧឨឩឩឩឪឫឬឯឯឯឯឱឲឳ឴឴឴឴឵ិិិីីឹឺឺឺឺុុុុូួើើៀេែែែែៃៃៃៃោៅំះៈ៉់៌៎៏័៑្្៓។។៕៖៖៖៖ៗៗៗ៘៚៚៛៛ៜ៝៟៟០១២៣៤៥៥៦៦៧៨៨៩៫៬៬៭៮៯៰៱៲៳៴៴៵៷៸៺៺៻៼៽៾៿᠀᠀᠀᠀᠀᠀᠁᠂᠃᠄᠅᠅᠅᠆᠆᠇᠈᠉᠊᠊᠋᠍᠎᠎᠏᠏᠏᠏᠐᠑᠑᠑᠒᠓᠓᠔᠕᠕᠕᠕᠕᠕᠖᠖᠖᠖᠗᠘᠘᠘᠙᠙᠙᠙᠚᠛᠛᠛᠛᠜᠜᠝᠝᠝᠝᠝᠝᠟᠟ᠠᠠᠡᠢᠣᠣᠤᠤᠤᠤᠤᠥᠦᠨᠩᠪᠪᠪᠫᠬᠬᠭᠮᠯᠰᠲᠳᠴᠵᠵᠶᠶᠶᠷᠷᠸᠸᠸᠹᠹᠻᠼᠼᠼᠽᠽᠽᠾᠿᡀᡁᡁᡂᡃᡃᡄᡄᡅᡅᡆᡊᡊᡊᡊᡊᡊᡊᡊᡊᡋᡌᡍᡍᡎᡎᡐᡐᡑᡒᡓᡔᡔᡕᡗᡗᡘᡙᡙᡚᡚᡚᡚᡛᡝᡞᡞᡟᡟᡠᡡᡡᡡᡣᡤᡤᡥᡥᡥᡥᡥᡦᡦᡧᡧᡧᡧᡧᡨᡨᡩᡩᡩᡩᡩᡩᡩᡩᡪᡪᡫᡬᡭᡭᡮᡮᡯᡰᡱᡳᡴᡴᡷᡸᡸᡸᡸᡸᡸ᡹᡺᡺᡻᡻᡻᡼᡼᡽᡾᡾᡾᡾᡾᡿ᢀᢀᢁᢁᢂᢃᢃᢃᢃᢄᢇᢈᢈᢉᢉᢉᢉᢉᢉᢉᢉᢊᢊᢋᢌᢌᢌᢍᢍᢍᢎᢏᢐᢑᢒᢒᢓᢓᢓᢓᢓᢓᢓᢓᢓᢓᢓᢔᢔᢔᢕᢖᢖᢖᢗᢗᢘᢘᢘᢙᢚᢛᢛᢜᢝᢝᢟᢟᢡᢡᢢᢢᢣᢤᢤᢤᢥᢦᢦᢧᢨᢨᢨᢩᢪ᢫᢫᢫᢫᢫᢫᢬᢬᢬᢬᢭᢮᢮᢯ᢰᢰᢱᢱᢱᢱᢲᢲᢳᢵᢵᢵᢶᢷᢷᢸᢹᢹᢹᢻᢼᢾᢾᢾᢾᣁᣂᣂᣃᣄᣆᣆᣇᣇᣈᣉᣉᣉᣊᣊᣋᣋᣌᣌᣌᣌᣌᣌᣌᣍᣍᣎᣎᣎᣎᣏᣐᣐᣑᣒᣓᣕᣖᣘᣘᣘᣘᣘᣙᣙᣙᣙᣙᣚᣛᣛᣛᣜᣝᣞᣞᣞᣞᣞᣞᣟᣡᣢᣤᣥᣥᣥᣥᣥᣥᣦᣦᣧᣨᣨᣨᣨᣨᣨᣩᣪᣪᣪᣫᣫᣬᣬᣬᣬᣬᣭᣯᣰᣰᣱᣱᣱᣱᣱᣲᣳᣴ᣶᣷᣷᣷᣹᣹᣺᣻᣼᣼᣽᣽᣿᣿᣿᣿᣿᣿ᤁᤂᤃᤅᤅᤅᤆᤆᤆᤆᤆᤇᤈᤈᤈᤈᤈᤈᤉᤊᤋᤌᤍᤏᤐᤐᤑᤑᤓᤓᤓᤕᤘᤙᤙᤚᤚᤚᤚᤚᤚᤚᤛᤛᤛᤛᤜᤜᤞᤞ᤟᤟ᤠᤠᤠᤢᤢᤢᤢᤣᤣᤤᤥᤥᤦᤧᤧᤧᤩᤪᤪᤪᤪᤪᤫᤫ᤭᤭᤭᤭᤭᤮᤯ᤰᤰᤰᤰᤰᤱᤲᤲᤳᤴᤴᤵᤵᤶᤷᤷᤷᤸᤸ᤹᤹᤺᤼᤼᤼᤽᤾᤾᤾᤾᤾᤿᥀᥁᥂᥃᥃᥄᥄᥄᥅᥇᥇᥈᥈᥈᥈᥉᥊᥋᥋᥌᥌᥌᥎᥎᥎᥎᥏᥏ᥐᥑᥑᥓᥓᥔᥕᥖᥖᥘᥙᥛᥜᥝᥝᥞᥞᥞᥞᥞᥞᥟᥟᥟᥟᥟᥟᥟᥡᥡᥡᥡᥡᥡᥡᥢᥣᥣᥥᥥᥦᥧᥧᥧᥧᥧᥨᥨᥨᥨᥨᥨᥨᥨᥨᥨᥨᥩᥩᥩᥩᥩᥪᥪᥪᥪᥪᥫᥬᥬᥭᥭ᥮᥮᥮᥯᥯᥯᥯ᥰᥲᥳᥴᥴ᥵᥵᥶᥷᥷᥸᥸᥸᥸᥸᥹᥹᥹᥹᥹᥹᥹᥺᥺᥺᥻᥻᥼᥾ᦀᦀᦁᦁᦂᦂᦃᦃᦄᦅᦆᦈᦈᦈᦈᦉᦋᦌᦌᦍᦍᦍᦍᦎᦎᦎᦎᦎᦎᦎᦎᦏᦐᦐᦐᦐᦑᦒᦒᦓᦓᦓᦓᦔᦔᦕᦖᦖᦗᦗᦚᦛᦛᦜᦝᦟᦟᦠᦠᦡᦡᦢᦢᦣᦤᦥᦦᦧᦫᦫ᦭᦭᦮᦯ᦱᦲᦲᦲᦲᦳᦶᦶᦶᦶᦶᦶᦷᦸᦸᦸᦸᦹᦺᦻᦻᦻᦼᦽᦿᦿᧀᧀᧁᧂᧂᧂᧃᧃᧄᧄᧅᧆᧇᧈᧉ᧊᧋᧌᧎᧏᧑᧒᧒᧓᧓᧔᧕᧕᧖᧗᧗᧘᧙᧙᧙᧛᧝᧝᧝᧞᧞᧞᧟᧟᧟᧠᧠᧢᧤᧥᧥᧥᧥᧥᧥᧥᧥᧥᧦᧦᧦᧦᧦᧦᧦᧧᧧᧨᧩᧩᧪᧪᧫᧫᧬᧭᧭᧭᧭᧭᧮᧯᧯᧯᧯᧰᧰᧰᧰᧳᧵᧵᧷᧷᧷᧸᧹᧹᧺᧺᧺᧺᧺᧺᧺᧻᧼᧽᧾᧾᧿ᨀᨁᨂᨂᨄᨅᨅᨆᨆᨆᨇᨇᨇᨇᨈᨈᨈᨈᨈᨈᨈᨈᨈᨉᨉᨋᨋᨋᨋᨋᨌᨌᨏᨏᨐᨑᨒᨒᨒᨒᨒᨒᨒᨒᨓᨓᨓᨓᨓᨓᨔᨔᨕᨕᨖᨖᨖᨘᨘᨗᨙᨙᨙᨙᨚᨚᨛᨛᨛ᨜᨝᨝᨝᨝᨟᨟᨟ᨠᨠᨢᨢᨢᨣᨤᨥᨦᨦᨧᨧᨧᨨᨨᨨᨩᨪᨪᨪᨪᨫᨫᨬᨬᨬᨬᨬᨬᨬᨭᨮᨰᨱᨳᨴᨴᨵᨶᨶᨶᨸᨹᨺᨻᨼᨼᨽᨽᨽᨽᨽᨿᨿᨿᩁᩁᩁᩂᩂᩃᩄᩅᩅᩆᩆᩆᩇᩇᩇᩇᩇᩈᩈᩉᩊᩊᩊᩊᩊᩋᩋᩌᩍᩍᩎᩎᩏᩐᩐᩐᩑᩑᩑᩑᩑᩑᩑᩑᩒᩔᩕᩕᩖᩖᩗᩘᩘᩙᩚᩚᩚᩛᩛᩜᩝᩝᩝᩞᩞᩞ᩟᩠᩠᩠᩠᩠᩠ᩡᩢᩢᩤᩤᩤᩦᩦᩦᩦᩦᩦᩨᩨᩨᩨᩨᩨᩩᩪᩪᩪᩪᩪᩪᩫᩬᩬᩬᩬᩬᩭᩮᩮᩰᩰᩲᩲᩲᩲᩲᩲᩲᩲᩲᩲᩲᩲᩲᩳᩳᩳᩳᩴ᩵᩶᩶᩷᩷᩷᩸᩹᩹᩹᩹᩹᩺᩺᩺᩺᩺᩺᩺᩻᩻᩼᩼᩼᩼᩼᩼᩼᩽᩽᩽᩾᩾᩾᩾᩿᪀᪁᪁᪂᪃᪄᪄᪄᪄᪅᪆᪆᪆᪈᪉᪉᪊᪋᪌᪌᪍᪍᪎᪎᪎᪎᪎᪎᪎᪑᪑᪑᪑᪑᪒᪒᪒᪒᪒᪒᪓᪔᪔᪔᪔᪔᪔᪔᪔᪕᪕᪕᪕᪕᪖᪘᪘᪘᪘᪙᪙᪙᪙᪙᪚᪚᪛᪛᪜᪜᪝᪞᪞᪞᪞᪞᪞᪞᪟᪡᪡᪡᪡᪢᪣᪣᪤᪤᪤᪥ᪧ᪨᪨᪨᪩᪪᪪᪪᪫᪫᪫᪫᪫᪭᪮᪯᪯᪵᪵᪶᪶᪶᪶᪷᪸᪺᪽᪽᪽᪱᪱᪲᪲᪳᪳᪴᪴᪴᪻᪻᪻᪾᪾ᪿᫀ᫃᫃᫃᫄᫄᫊᫊᫁᫁᫅᫅᫅᫅᫅᫆᫈᫈᫈᫈᫈᫈᫉᫉᫉᫋᫋᫋᫋ᫌᫌᫍᫎ᫏᫐᫐᫐᫐᫑᫒᫓᫓᫓᫔᫕᫗᫗᫗᫘᫙᫙᫚᫚᫚᫛᫛᫜᫜᫜᫝᫞᫞᫞᫞᫟᫟᫟᫟᫟᫠᫠᫡᫡᫢᫢᫢᫢᫢᫢᫣᫣᫤᫤᫥᫦᫦᫧᫧᫧᫧᫨᫨᫩᫩᫩᫪᫪᫫᫬᫬᫬᫬᫬᫭᫭᫮᫮᫮᫮᫯᫰᫱᫱᫱᫱᫱᫱᫱᫱᫱᫱᫱᫲᫳᫴᫵᫵᫵᫶᫶᫷᫸᫹᫺᫺᫻᫼᫼᫼᫽᫽᫾᫾᫿᫿᫿ᬀᬁᬂᬂᬃᬄᬄᬄᬅᬅᬅᬅᬅᬆᬆᬆᬆᬇᬇᬇᬈᬉᬊᬊᬋᬋᬋᬋᬋᬋᬋᬋᬌᬌᬎᬏᬏᬏᬐᬐᬐᬑᬑᬑᬑᬒᬒᬓᬓᬔᬔᬔᬕᬕᬗᬘᬙᬙᬜᬝᬞᬟᬡᬢᬢᬣᬣᬣᬣᬣᬥᬥᬥᬦᬦᬦᬪᬪᬫᬬᬬᬬᬬᬭᬮᬮᬮᬯᬰᬰᬱᬲᬳᬳ᬴ᬶᬷᬷᬺᬼᬼᬼᬽᬾᬿᬿᭀᭀᭁᭁᭃᭃᭃ᭄᭄ᭅᭆᭆᭇᭉᭉᭋᭌ᭏᭓᭔᭕᭖᭗᭗᭘᭘᭙᭛᭛᭜᭜᭝᭝᭝᭝᭞᭟᭠᭠᭠᭡᭢᭣᭤᭤᭤᭤᭤᭥᭦᭦᭧᭨᭩᭩᭪᭪᭪᭪᭪᭪᭬᭫᭭᭮᭮᭮᭮᭯᭯᭱᭳᭳᭳᭴᭴᭴᭵᭵᭶᭶᭶᭶᭷᭷᭷᭷᭷᭸᭸᭸᭹᭹᭹᭺᭺᭺᭺᭺᭼᭼᭼᭼᭼᭽᭽᭽᭽᭾᭾᭿᭿᭿ᮀᮂᮂᮂᮂᮂᮂᮂᮂᮂᮃᮃᮃᮄᮄᮄᮄᮄᮄᮅᮅᮆᮇᮇᮇᮈᮈᮉᮊᮊᮋᮋᮋᮌᮍᮍᮎᮎᮏᮐᮐᮐᮑᮑᮒᮓᮔᮗᮗᮗᮘᮙᮛᮜᮞᮞᮞᮞᮞᮞᮠᮠᮡᮡᮢᮣᮣᮣᮣᮤᮤᮤᮤᮥᮥᮦᮦᮧᮧᮩᮩ᮪᮫ᮬᮬᮭᮭᮭᮭᮭᮭᮮᮮᮮᮯᮯᮯᮯᮯ᮰᮱᮱᮲᮳᮳᮳᮴᮴᮶᮶᮷᮸᮹ᮺᮻᮼᮼᮼᮽᮽᮾᮾᮿᮿᯁᯁᯃᯄᯄᯄᯄᯄᯄᯄᯅᯅᯅᯅᯅᯆᯇᯇᯈᯈᯉᯉᯊᯋᯌᯌᯍᯍᯍᯎᯎᯎᯐᯐᯐᯐᯑᯒᯒᯓᯓᯔᯔᯖᯘᯘᯙᯚᯛᯛᯛᯛᯜᯜᯜᯜᯜᯝᯝᯝᯞᯟᯠᯡᯡᯣᯣᯤᯥ᯦᯦᯦ᯧᯧᯧᯨᯨᯨᯩᯩᯩᯩᯩᯩᯪᯫᯭᯮᯯᯯᯰᯰᯱ᯲᯲᯲᯲᯲᯲᯲᯲᯲᯳᯴᯵᯶᯷᯷᯷᯸᯸᯸᯹᯺᯻᯻᯽᯽᯽᯽᯾᯾᯾᯾᯿᯿᯿᯿᯿ᰀᰀᰀᰁᰁᰅᰆᰆᰆᰆᰆᰇᰇᰇᰊᰊᰊᰋᰋᰌᰎᰎᰏᰑᰒᰔᰔᰗᰗᰗᰗᰘᰘᰙᰙᰚᰚᰚᰝᰞᰞᰟᰟᰠᰠᰡᰡᰢᰢᰢᰢᰤᰤᰥᰥᰦᰧᰧᰧᰫᰬᰭᰮᰯᰱᰲᰳᰳᰵᰵᰵᰵᰶ᰷᰷᰸᰸᰻᰼᰾᰾᰾᰿᰿᰿᱀᱁᱂᱃᱃᱄᱄᱄᱅᱆᱇᱇᱇᱉᱉᱉᱊᱋᱋᱋᱋᱋᱋᱋᱌᱌᱌᱌᱌᱌ᱍᱍᱍᱎᱎᱏ᱐᱐᱑᱑᱒᱒᱒᱒᱔᱕᱘᱘᱘᱘᱘᱘᱙᱙᱙᱙᱙᱙ᱚᱛᱝᱞᱟᱠᱡᱢᱢᱥᱦᱦᱦᱧᱨᱫᱬᱭᱭᱮᱮᱯᱯᱯᱯᱰᱱᱱᱲᱲᱲᱳᱳᱵᱶᱷᱷᱷᱷᱷᱸᱹᱹᱺᱼᱼ᱾᱿᱿᱿ᲁᲁᲂᲃᲄᲅᲅᲅᲅᲆᲇᲇᲈᲉᲊᲊ᲋᲌᲍᲍᲍᲍᲏᲏᲏ᲐᲐᲐᲐᲐᲐᲑᲒᲒᲒᲓᲓᲓᲔᲕᲗᲘᲙᲙᲛᲜᲝᲝᲝᲞᲞᲞᲞᲠᲡᲢᲢᲢᲢᲢᲢᲣᲤᲦᲧᲨᲩᲪᲫᲭᲮᲯᲯᲯᲯᲯᲰᲰᲰᲰᲰᲰᲰᲱᲱᲲᲲᲴᲴᲵᲷᲷᲷᲸᲸᲹᲺᲺᲺ᲻᲼᲼᲼᲼ᲽᲾᲾᲾᲾᲾᲿ᳁᳂᳃᳅᳅᳆᳆᳆᳆᳇᳈᳈᳈᳉᳉᳊᳊᳊᳋᳌᳌᳌᳌᳌᳌᳌᳌᳌᳌᳌᳌᳌᳌᳍᳍᳎᳏᳏᳔᳔᳔᳕᳕᳖᳗᳗᳗᳘᳙᳙᳙᳜᳜᳜᳝᳞᳞᳟᳐᳑᳒᳚᳚᳛᳠᳠᳡᳡᳡᳡᳢᳢᳢᳢᳢᳢᳣᳤᳦᳦᳦᳦᳦᳦᳧᳧᳧᳨᳨ᳩᳩᳩᳪᳪ᳭ᳮᳮᳯᳯᳰᳰᳰᳰᳰᳰᳱᳱᳲᳲᳳ᳴ᳵᳵᳶ᳷᳷᳷᳷᳸᳸᳸᳹᳹ᳺ᳻᳻᳻᳻᳻᳼᳽᳽᳾᳾᳿ᴀᴁᴂᴂᴂᴂᴂᴃᴃᴄᴄᴅᴆᴆᴆᴆᴇᴈᴉᴊᴊᴊᴊᴊᴊᴊᴊᴊᴊᴊᴋᴌᴍᴎᴏᴏᴏᴐᴐᴑᴓᴓᴔᴔᴔᴔᴕᴕᴕᴕᴖᴖᴖᴖᴖᴖᴖᴖᴗᴘᴘᴙᴙᴜᴝᴞᴞᴞᴞᴟᴟᴠᴠᴡᴢᴢᴤᴥᴥᴦᴧᴨᴨᴨᴨᴩᴪᴪᴪᴫᴬᴬᴭᴮᴮᴮᴮᴮᴰᴰᴰᴰᴲᴲᴲᴳᴴᴴᴴᴵᴵᴶᴶᴷᴷᴷᴸᴸᴹᴹᴺᴻᴼᴼᴼᴽᴾᴾᴿᵀᵁᵂᵃᵃᵄᵅᵅᵅᵇᵉᵉᵊᵌᵌᵎᵏᵏᵏᵏᵐᵐᵐᵑᵑᵑᵒᵓᵔᵔᵖᵙᵛᵛᵜᵝᵞᵞᵞᵞᵞᵟᵠᵠᵠᵡᵢᵣᵤᵤᵤᵥᵦᵦᵧᵧᵨᵩᵪᵫᵫᵬᵭᵮᵯᵯᵯᵯᵯᵰᵱᵱᵱᵲᵳᵳᵴᵴᵵᵶᵷᵸᵸᵸᵸᵸᵹᵹᵹᵻᵻᵻᵼᵽᵽᵽᵾᵿᵿᵿᵿᶀᶄᶅᶅᶅᶇᶈᶉᶉᶋᶌᶌᶎᶎᶏᶒᶓᶔᶔᶕᶖᶗᶗᶘᶙᶙᶙᶙᶙᶙᶙᶙᶚᶚᶛᶛᶜᶜᶝᶝᶞᶞᶞᶞᶞᶞᶟᶟᶟᶟᶠᶠᶠᶠᶡᶢᶣᶤᶤᶤᶤᶥᶥᶥᶥᶧᶧᶧᶧᶩᶪᶪᶪᶫᶫᶮᶯᶯᶰᶱᶱᶲᶳᶶᶶᶶᶷᶸᶹᶻᶾᶿᶿᶿᶿ᷐᷎᷎᷎᷎᷎᷺᷺᷺᷺᷺᷂᷂᷂᷊᷊᷊᷊᷊᷏᷹᷽᷿᷿᷷᷀᷀᷁᷁᷁᷃᷄᷄᷄᷄᷅᷅᷅᷆᷆᷆᷇᷇᷇᷇᷇᷈᷉᷋᷋᷋᷑᷑᷒᷒᷒᷒ᷓᷓᷔᷕᷖᷖᷖᷖᷗᷘᷙᷛᷜᷜᷝᷝᷝᷝᷝᷞᷟᷠᷠᷠᷠᷠᷡᷡᷡᷢᷤᷤᷥᷥᷦᷧᷨᷨᷨᷨᷩᷩᷩᷪᷫᷫᷬᷭᷭᷭᷭᷭᷮᷮᷮᷮᷮᷯᷰᷱᷲᷲᷲᷲᷲᷲᷳᷳᷳᷴᷴ᷵᷵᷵᷵᷵᷵᷵᷻᷻᷻᷾᷾᷾᷾᷶᷼᷼᷼᷍᷍᷍ḀḁḂḂḃḃḃḄḅḅḊḋḌḍḎḎḐḑḑḒḒḖḖḖḘḘḘḘḘḘḘḘḘḙḙḙḙḙḙḚḛḜḜḜḜḜḜḝḝḝḝḞḞḟḟḟḟḟḠḠḢḣḤḤḥḥḥḥḥḦḧḨḨḨḨḨḨḩḪḫḭḭḭḭḮḮḮḮḮḮḯḰḱḱḲḲḳḳḳḳḴḵḶḷḷḸḸḹḹḹḹḹḹḹḹḺḺḺḺḻḻḼḼḼḽḽḾḿḿḿḿṀṁṁṂṂṂṂṂṂṃṄṅṅṆṇṇṈṈṉṊṋṋṌṌṍṍṍṎṎṎṎṏṏṐṑṒṓṔṔṔṕṕṖṖṖṖṘṘṙṙṙṚṚṚṛṜṜṝṝṝṞṞṞṞṞṟṠṠṡṢṣṤṥṥṥṦṦṧṨṨṩṩṪṪṫṫṬṭṮṮṮṯṰṰṱṲṲṲṲṲṲṲṸṹṹṺṻṼṽṾṿṿṿṿṿṿẀẀẁẂẂẃẄẅẅẆẆẆẆẇẇẉẉẉẉẉẉẉẉẉẉẉẉẉẉẉẊẊẊẊẊẊẊẋẋẋẋẋẋẋẋẌẌẍẍẍẍẍẍẍẎẎẎẎẎẎẎẏẏẏẏẏẏẏẏẏẏẏẏẏẏẏẏẏẏẏẐẑẑẑẒẒẒẒẒẒẒẒẒẓẔẔẖẖẗẘẙẙẙẙẙẙẙẚẚẛẛẛẛẛẜẜẜẜẜẜẜẝẝẝẝẞẞẟẟẠẠẠạạẢẢẢẢẢẢẢẢẢẢẢảẤấấấẦẦẦẦẦẦẦẦẦẦầầầầầầầẨẨẨẨẨẨẨẨẨẨẨẨẨẨẨẨẩẩẫẫẬậậẮẮẮẮẮẮắắắắắắắẰằằằằẲẲẲẲẳẵẵẵẵẵẵẵẶẸẸẸẹẹẹẹẹẹẹẹẹẺẺẺẺẺẺẻẻẻẼẼẼẽẽẽẾếỀỀỀỀỀỀỀỀềềỂỂỂểểểểểỄỄỄễễễễễỆệệỈỈỈỉỉỊỊỊỊịỌỌỌỌỌỌọọỎỏỐỐỐỐỐỐỐỐỐỐỐỐốỒỒồỔổỖỗỗỗỗỗỗỘỘỘỘỘỘộộộộộộộộộộộộỚỚỜỜỜỜỜỜờờờờờờờờỞỞỞỞỞởỠỡỡỡỡỡỢỢợợợợợợỤỤỤụụụụụỦỦỦỦỦỦủủủủỨỨỨỨỨỨỨỨỨứỪừừừừừỬửỮỮỮỮỮỮỮỮỮữữữữữữữữỰỰỰỰỰựựựựựựựựựựựựỳỳỳỳỵỶỶỷỸỹỹỹỹỺỺỻỻỻỻỻỻỻỻỼỼỼỼỽỽỽỿỿỿỿỿỿἀἀἀἀἀἀἀἀἀἀἀἀἀἀἀἁἁἂἂἂἂἃἃἃἃἃἃἃἄἄἅἆἆἆἇἇἇἇἇἇἇἇἇἇἇἈἈἈἈἈἈἉἉἊἊἊἊἊἊἊἊἊἊἋἌἌἌἌἍἍἎἎἎἎἒἓἓἓἓἓἓἓἓἓἔἔἔἔἕἕἕἕἕ἖἗἗἗἗ἘἘἘἘἘἘἘἘἘἘἙἙἚἛἛἛἛἛἛἜἜἜἜἜἜἝἝἝἝἝἝ἞἟἟ἠἠἠἠἠἠἠἠἠἠἠἠἠἠἠἠἠἠἡἡἡἡἡἡἢἢἢἢἢἢἢἣἣἣἣἤἤἤἤἥἦἦἧἧἨἪἫἫἬἬἭἮἮἮἮἮἮἮἮἮἯἯἯἯἰἰἱἱἱἱἱἱἲἲἲἲἳἳἳἳἳἴἴἴἴἴἴἴἵἵἵἵἵἵἶἶἷἷἸἸἸἹἺἻἻἻἼἼἼἼἽἽἾἾἾἿἿἿὀὀὁὂὃὃὄὄὄὄ὇ὈὈὈὈὈὈὈὉὉὉὉὊὋὍὍὍὍ὎὎὎὏ὑὑὒὓὓὓὓὓὔὔὔὔὕὕὕὕὕὖὗὗ὘὘Ὑ὚὚Ὓ὜ὝὝὝὝὝὝὝὝὝὝ὞ὟὠὡὡὡὡὡὢὢὢὣὣὤὥὥὥὥὥὥὥὥὥὥὧὧὧὧὧὨὩὪὪὬὭὮὯὯὰὰάὲὲὲέέὴὴὴὶὶίὸὸὸὸὸόόὺύὼὼὼὼὼώώ὾὾὾὿ᾀᾀᾀᾀᾀᾁᾁᾁᾂᾂᾂᾂᾃᾃᾃᾄᾅᾆᾆᾇᾈᾈᾈᾈᾈᾈᾉᾊᾊᾊᾊᾊᾋᾋᾋᾋᾋᾋᾋᾋᾋᾋᾋᾌᾌᾍᾍᾎᾎᾏᾏᾏᾏᾐᾐᾒᾒᾓᾓᾔᾔᾔᾕᾕᾖᾖᾖᾖᾖᾖᾗᾗᾗᾗᾗᾗᾗᾗᾗᾗᾗᾘᾘᾙᾙᾙᾙᾚᾛᾝᾝᾝᾝᾞᾞᾞᾞᾞᾞᾞᾟᾟᾠᾠᾠᾠᾠᾡᾡᾡᾢᾢᾢᾢᾢᾣᾣᾤᾥᾥᾦᾧᾧᾨᾩᾩᾩᾩᾪᾪᾪᾪᾪᾪᾪᾫᾫᾬᾭᾮᾮᾮᾯᾯᾯᾯᾰᾰᾱᾲᾲᾲᾳᾳᾳᾳᾳᾳᾴ᾵᾵ᾶᾷᾸᾸᾸᾹᾺᾺᾺΆΆΆ᾽ι᾿᾿᾿᾿῀῀῁ῂῂῂῃῃῃῃῄῄῄ῅῅῅ῆῈΈῊῊῊῊῊΉΉῌῌῌῌῌῌῌῌ῍῍῎῏῏῏῏῏῏῏῏ῑῑῒῒῒῒῒΐΐΐ῔῔῕῕ῖῖῖῖῗῗῗῘῘῘῘῘῙῙῚΊΊ῜῜῝῝῝῝῞῟ῠῠῠῡῢῢΰΰῤῥῦῨῩῪῬῬῬῬ῭῭῭΅΅΅΅`````῰῰῰῰῰ῲῲῲῲῲῳῴ῵ῶῶῷῷῷῷῸῸῸῸῸΌΌῺΏΏΏΏῼῼῼῼ῿῿                                             ​​‌‌‌‌‌‌‌‌‍‍‍‍‍‍‍‍‍‍‎‎‎‎‎‎‎‎‎‎‎‐‐‑‑‑‑‒–—――‖‖‗‘‘’‚‛‛‛‛‛‛‛“““””””„†††††‡‡‡‡‡‡••••‣‣‣․………‧\u2028\u2028\u2029‪‪‫‬‭‮    ‰‰‱‱′′′′′″‴‴‴‵‵‵‵‵‵‵‵‶‶‶‸‸‹‹‹›※‼‼‼‼‽‾‿‿‿‿⁀⁀⁀⁀⁀⁁⁁⁁⁁⁁⁁⁁⁁⁂⁃⁃⁃⁃⁄⁄⁄⁄⁅⁆⁇⁈⁈⁉⁊⁊⁋⁋⁌⁌⁌⁌⁌⁌⁌⁌⁍⁎⁏⁐⁒⁓⁓⁓⁓⁔⁔⁔⁔⁕⁖⁖⁖⁖⁖⁗⁘⁙⁙⁙⁙⁙⁙⁙⁚⁛⁜ ⁠⁠⁡⁢⁣⁣⁥⁦⁦⁦⁦⁧⁨⁩⁩⁰⁰⁰⁰ⁱⁱⁱⁱⁱ⁲⁳⁴⁴⁴⁴⁴⁴⁴⁵⁵⁶⁶⁶⁷⁸⁸⁹⁹⁹⁺⁺⁻⁻⁻⁻⁻⁼⁽⁾⁾⁾ⁿⁿⁿⁿ₀₀₀₀₀₀₀₀₀₀₁₂₃₃₃₃₄₄₄₅₅₅₆₇₇₇₇₈₈₉₊₊₊₋₋₋₌₍₍₎₎₎₎₎₎₎₎₎₎₎₎₎₎₎₎₎₏₏ₐₐₑₒₒₒₒₒₓₔₔₔₔₔₔₔₔₔₔₔₕₕₕₖₖₖₗₗₗₗₗₗₗₗₗₘₘₙₚₚₛₛₛₛₛₛₛₛₛₛₛₜ₝₝₝₞₞₞₞₞₞₞₞₞₞₞₞₟₟₟₟₠₡₡₢₢₢₢₢₢₢₣₤₤₥₦₦₦₦₧₧₧₨₨₨₨₨₨₩₩₩₩₩₩₩₩₩₩₩₩₪₪₫₫₫₫₫₫₫€€₭₭₭₭₮₯₯₯₯₯₯₯₯₰₰₰₰₰₱₱₱₱₱₱₲₲₲₳₴₴₴₴₴₴₴₴₴₴₴₴₴₵₶₶₶₶₶₶₶₶₶₶₶₶₶₶₶₶₷₷₷₷₷₷₷₷₸₸₹₹₹₹₹₺₻₻₻₼₽₽₽₽₽₽₽₽₽₾₾₾₾₿₿₿₿⃀⃁⃁⃂⃂⃂⃃⃃⃄⃄⃄⃄⃄⃅⃅⃅⃅⃆⃇⃇⃈⃈⃈⃈⃉⃉⃊⃊⃊⃊⃋⃋⃌⃍⃍⃍⃍⃍⃍⃍⃍⃍⃍⃍⃍⃎⃏⃒⃒⃒⃓⃓⃓⃓⃓⃙⃙⃙⃚⃚⃚⃚⃚⃚⃚⃚⃐⃐⃐⃐⃔⃔⃔⃔⃕⃕⃖⃖⃖⃖⃖⃖⃖⃗⃗⃗⃗⃛⃛⃛⃛⃜⃜⃜⃜⃝⃞⃞⃞⃞⃞⃞⃟⃠⃠⃡⃢⃣⃣⃣⃣⃣⃤⃤⃤⃤⃤⃥⃦⃦⃦⃦⃦⃦⃦⃦⃦⃪⃪⃫⃫⃫⃫⃫⃫⃨⃨⃨⃨⃨⃨⃨⃨⃨⃨⃨⃨⃬⃭⃭⃭⃭⃭⃭⃭⃭⃭⃭⃭⃮⃮⃮⃮⃮⃮⃮⃮⃯⃧⃩⃩⃩⃩⃩⃩⃰⃰⃰⃰⃰⃰⃱⃲⃲⃲⃲⃳⃳⃴⃵⃵⃷⃷⃷⃷⃷⃸⃸⃸⃹⃹⃺⃻⃻⃼⃼⃼⃼⃼⃼⃼⃼⃽⃾⃾⃾⃾⃾⃿⃿⃿⃿⃿⃿⃿⃿⃿⃿⃿℀℀℀℀℀℀℁℁℁℁ℂℂℂℂ℃℃℃℄℄℄℅℆℆℆℆℆ℇ℈℈℈℈℈℈℈℈℈℉ℋℋℋℋℋℌℌℍℎℎℎℏℏℐℐℐℐℐℒℒℒℒℒℓℓℓℓℓℓℓℓℓℓℓℓ℔℔℔℔℔℔℔ℕℕℕℕℕℕ№№℗℗℘℘℘℘ℙℙℚℚℚℜℜℝℝ℟℟℟℟℟℟℟℠℠℠℠℡℡℡℡℡™™™℣ℤℤℤ℥℥℥℥Ω℧℧℧ℨℨℨℨℨℨℨ℩℩℩℩℩℩KKKÅÅÅÅÅÅÅÅℬℬℬℬℬℬℬℭℭℭℭ℮℮℮ℯℯℯℰℰℱℱℱℱℱℲℲℲℲℲℲℲℲℳℳℳℴℴℴℴℴℵℵℵℵℵℶℶℶℶℶℶℶℶℷℸℸℸℸℸℸℹℹℹℹℹℹℹℹℹℹ℺℻℻℻℻℻ℼℽℽℽℽℾℾℾℾℿℿℿ⅀⅀⅀⅀⅀⅀⅀⅁⅂⅂⅂⅂⅃⅃⅃⅃⅃⅄⅄⅄⅄ⅅⅅⅆⅆⅆⅆⅇⅇⅇⅇⅈ⅊⅊⅊⅊⅊⅋⅋⅋⅋⅋⅋⅋⅋⅋⅋⅋⅋⅋⅋⅋⅋⅋⅋⅋⅋⅋⅋⅋⅋⅋⅋⅋⅋⅌⅌⅌⅌⅍⅍⅍⅍⅍⅍ⅎⅎⅎⅎⅎⅎⅎⅎ", labels = ".abcdefghijklmnopqrstuvwxyzabcdefghijklmnoprstuvwybcdefghijklmnopqrstuvwxyzabdefhijklmnoprstuvwyacehiklnoqrstuyzabcdefghijklmnoprstuvwyabcdefghijklmnopqrstuvwxyabdefhilmnoprstuyabdeghilmnoprstuwyabefhiklmnoprstuwyabcdefghijklmnopqrstuvwxyzaeouabefhiklmnorstwabcdefghijklmnoprstuvwyabcefhiklmnoprstuwabcdefghijklmnopqrstuvwyzabcdefghijklmnopqrstuvwxyabdefghiklmnoprstuwuabcdefghijklmnoprstuvwyzabcdefghiklmnopqrstuvwyabcdefghilmnoprstuvwyzabcdefgijklmnoprstuvxzaeiovyabcehiklnoprstyacehiopqtuxabcdeghilmnoprstwabeilmotzcdflmnrstuvwaeruaehioeioruabeglnqrstuvyeoaeioaeiodmnrsuioaeiaeioueiodfrstueioraeioucehiptyaehiornprseieie.aeiloruaehirtudeilorsurfaeilnouyaeloaclnteadeilmoyaeiopadegiknostuaehilosuuabcdefimopqrs.ahiklopstuyaehiorstuybglnrstaeioailsiaesiz.cdglnrstzei.adglmnstvwybdeflnotaeiouedelmnorstuiouolorfglmnrst.sbcdghlnprstvhio.dilnprstw.aeiostacefgilmnopstziaeiyaegilmnprsuvwzaeiouaeiruwdfilmnprste.bcfglmnrtvyai.abcdefilmnpqrstvyaeiy.acdefglmnoprstvaeiouy.defglmnoprsuvwxaeiouypwyahaceglmnopnsbcdglmnrstveiracehilortuadegiorucdflmnpstxefiouaeinouyecdgmnrtuilaefilostuabeinopuyacdeinostuyzfgilprstuwaehilorstuuabcehimnostuwacehikmopstuwaehinoruyzcnprstaeiouaehipcesbcgilmrtu.abcdlmnrveilyacdglnstaeiouynrsaeiooyegmnrstflmnrstz.delnorstveloiot.acelmnorsuvzaeioyaeio.beginorsvaeiouthaeinstnrbcegilmnprstuzacdlmnoprstuxacglmnoprstvaoeadglmnorsuveohaeygmnstapslmnpsteiloruacehilortuadeilorudglnrst.aefiltaehilnorukaefilnotuvaeinopu.acdefgiklnostuy.glmnprstuehiruuadegimoru.acefhiklmopstuaehiortuzeiooaiocnprswpd.bgildeglnrst.clmnpseyeorsuvochlybcdgimnrstviehieirabcfgmnprsvyraeoabcdfgklmnoqstvzaaefioeio.abcfgmnoprstuvahilrceiaehiruabcefimnopsteabgmnsbcghilnprstai.dglmnorstv.adglnostzaaiocdegiklmnrstuvaehiotyhidlmnpubcgklmnrstuvaehioruaeituw.abcdglmnopqrstvwiaehilosuyaeabdefgkmnosteilreeeibcdegilmnprstuvwiruaceilmoptaeirsuadefimnotmpadlrstaeilruehilortudeioulnrtviaeilnruyacdfglnsteiadefiloptuvyabeimopacdegikostuvdkprsaehioruyaegimnoprstuyaciloptaehiobcelnveiodeinoiacdgilnprtvy.acdeklnort.aeilostuyacdeglnotaioucdegilnprstuaeoaeioehiaehioruwbeflmnrstaeibcdfilmnoprstuvzaioehiuai.abcdfgilnoprstuvwuyeilou.aabcdeglmnopqstv.ehlrseioaeiyaeioubcefklmnoprstvxaehioeioyacehiopwaehirsaegimnsteiocntsbcilnptuvwaehiloruy.acdgilmnprsuvwx.eiowbcdglnorstuvzeiyaeioaeiocfglmnprvaehilouacehilnptuw.abehilorsuwyabgilmnprioclnrt.bcdfgilmnprstuvwxhr.acdeglmnoprstuxy.aeilosyabcdefglmnoqstuvzaeioebcdfgilmnrstuwaeiouchweoruabdefimnprsahioalpebcdnrtveilailruydeiosuanralhilnrtvacdegilmostuvabiopaeistuyzrsueilptabcdefilnopstuaceilpstuaeilosmue.bcglmnprtu.dglnrstadfgklnoprstv.iklmrtbcgilmrstvadelrsvidlnrstzeiokmvaihlptcgmpscdriuacdmbaeuiacrtehoerstialoubepcdgixdgmnseiotuaiorceiostuhibrnprtalsmopewyhdttacgitstcpstodingnsrsitmnprtlitenrmorscticmrsrdeagsurhleesrsnoabrnmprstbenvlompceksurirlrcmtginpvgnotglnrgrtmsnrtocendtacdtthtdteotlsecntvemsgtqswdilmnrnhiaplnlmnnpquiacdekoueanrcbllnratalolbroreenooilmiraceotuewaucmiibnlougnel.yioenbdrinoaeeig.stzbgrstnrcflnnreglrteiloensuilcefmnopstuliatacgnptuvaiorwalrrtareilntclrseecdlmnptuvwahiraensilaemnozidnoaeahbniabctichherrmbclpcgnrsveo.abcfotgmpsokaehaelrhuidiehgnnregocryycdleikgeadeibioshrntktaeiiuioiuptirwioinriladegmruiruznt.nsnsnngiiba.adeinahounttsrfaiiteistaeiotilhealodeityeotyahiaaamnu.e.lceitaastabnadlmnrenotz.hibrriaaiaegoqnehitiramcmgrnioeaegtahilboeseaeistadtvfnstcepsdbnrcmortitaeiiyaisirhogdkyaioebbflioailo.ifio.ioaotuaiuhmns.ciotuioitbaetnfeaeaeigletiti.adseeaioiaidptogianbflpmpwpblaetlebpeeptieeoediaceiktpstehiueiolntdnasabfmtaulmnreaelrslabcmtzlniliiyatyrclntrslrbcnt.slrrlbfgsdehydna.cntwxabcdgnrsbcegmnostvaoacgphadgcgnltcegnszignilnmnhiaemrstwcelostuzgsvwahaf.raeootinlntenieohitibnrtlh.acilmnqstacenotuviobcrueelwtagarucnraecdgmnsuiilnaeiriaiorrbnooycdnrtnaeioamloeirpsalnrdlnvcgelnt.lrenlaitaholstratiodmrsensy.aehisuehilyadegnttgsnrwodtaeittaslllieiisa.ioeoionshiziyacioydmyihioyrunuowrionse.gslldsabgsbr.ctnomnrsadiio.dinpynsetfertaalhmturacdgiktaltadlptscnadraoiloparabenoypeanoheanelopresehnrtuiseaeaeaydnaituepseenprnosikttrehoecitesirurantiinmprsyuodnpycayeulmorinasaeotuemwoeadaent.ctcrercebrtblntirteirbdmrgrvabostzaqyrgrntdlntineluvelersraeilou.aostcsteu.hseraeihihiorrcelaeibcedflsidstzignelgrshraobdstasmiyaeaeilrs.bgmntrsiacglmnosmnayadl.lnrlotrtrnquaestgsidtylo.deghyshinaioieynnodetcgieaeianairsidsitt.ega.ceothraegiocqsaeersgmrstiiostuyaeieflahrbiopaeikgp.hieltwacglntlnsquwtndndaoieiouegideimaio.eotantbaintegnanriesrrhinpdabinkrstntaeoetahlindadilt.iuhgilvcetehitlnv.iyroto.adeistnstaehragiladegitutelthbrnrloseeegioyaoephfsrtaaenrsrsuvraratu.ateiticikceilmctaostersaeintuinsbeftzhcreraukaeaiioeoaeir.kptwienblnraobntavhpmbnpaliririeg.thiorrtnustavlelesioaeioyaeioacetanelebtesdgoceiabrbefnpeomnfnteiredetibrlnilaefladaeiolrelcotrcgsatrtnorestyioinbeefegtmotensenserstiacdfglnostvignrlbmnshltelcnrtacdnegnircnionsucosuedmrtupueimaeiidtdraenstns.glnaiswuaclnotuiefuehethiymleoretuahoainlrseicfssalhtcdnrastlelsidaetanmaetyuadeiehrreidvaiactnaimnotuveirnrscelnszbnrnaiyaeicnro.donhunsacegnim.mtneyiysanrdlnrtsyceflmnrstvenscfglstubbmmorecrertisv.rtnviohliftoeioeghiorehceiitaeibgfnnaebtmlaenlnrvwriorteiaeiyitiutiouiou.psteirtaeiohrtcnstnlbglaaeioenrtaiiaiopadeghl.chpaeiueiotoeia.dqgscnrnotrlrtycstvulorlpeieeeipaeitmteiiopshryaeuanrtncfosovnsstcrsvabncgbnoobdeglsveiohlnlnpktciilnrsycvgckrtaemotcdaaiuonptvdisiorenueifpuatswotelrefvaeioacdegitat.lovhtmeirvnopvelnrceineyaegnaeitnsttvlnlntletaadiuv.aghcdicincnoreoclnoyknrtaicslnstaaeglierglmnprtdrwe.acefnrecmnpraiycpllstiemcoihloioolaeikloiodtaelaceireyiuniceicdtetiei.eisaacdetecdginv.shlnaitclndgkorlsbntkouinyulpuaeiocnaemoptlaaen.dsterorcoabyaoyaiirtabcisvafmacmvflmnpsvishsirii.einoysaehraiaditlrnebtersvcestnimestienigmaebtheniansaieirulbilnrtrmnsvwaesranoiu.glseaerafnotzioseieehidnpiaracilerrbt.lnlnoszfgmnuiueuiouoiiiid.loyoudeimst.teylneiniacdglruoiouiryicraetviaiyaeleot.tteertnktvlteldgehsneepteeouiolieincdiremtftaotahcesdrcamacosarriconlhetmeiiyemaeamttpcaoalrgnoaictvbtimmiiyermotgmtdkoaoreoliitntyehecaaoatacaeieteoafteetlaeinytamtiecitutdefliiginbeeaogkaiosbteerdaalidatigldoutbfn.arneslirnndt.vc.taciotayoineyciisswteseiehizchororldenrborlauaitsteiegilaenstslntaint.naploho.antmnrmnuipgsatfbnoanyrureeaianiyagrzefzartrbhovadhpddtcitoldhqeieeidoenmntaicszyrmeisvlptnmiipoie.sveiucrtm.caizaercrrocntt.itaiocloegtuimyiubnaievnbvstnnlaimneqclnrsriicirclimrtt.znrid.srztroratlel.r.seoerruresclenifn.scssiyemsmpcaomnaaioeieieegtidiarae.arighib.aareihsziaotecxoitrshgearlctiecdhbbalsdielon.oacetstnknreastztruenrctvnentnuacrrebngmnourddleoiacfgsiltlogibgeshethuei.lntnraeltiieeseeretytacntszvnsztyzctea.neidhiito.eozzuahsvdnsmiy.eozernseeeehntiytpaaudrellseizzrtcseneliounetttviat.e.aaaaaclnrsuieon.aiteatbeytaeidalriasanieiyrtrafdteeun.vnnpinelns.yaiaiilaklemmtl..s.eotanmiyn.estaceelteenlvileieaant.ibo.rioor.rrtalaeocrahutgeeltscrz.teutpdgealsai.ieemyinpgniyaszsrinzyeszgaceoanceueailiiybaetaielstriryaaecstyeaszcels..nyeiaissiiscoriratithilme.oslsrtcrctzbricieeir.cz.aoropsleriglncszgqszlbrlmciiobsregpleeseggstmcttraedlittetioezsrtenertscte.og.heieioeihasr.aineoltyiiymoinfanrgmiiglhtaygnioryvpioyetlte.stos.aedienstnirtintalybglmilsriyilacenh.bgsaeinzio.agteideaatarabct.eptaieiomaaaeepsetoaeiieedalsreinitaleugointuoearyfloileegrrgraplmeastcrsaensiiarrziillrllg.sderctnzne.eibdrcrltlnuuhsgtailr.stlsalceeollt.gtir.ahdurilytuplynli.teirserorteotodtyrphpstltdndleonsdt.dsza.asoegchalhdmbctiyeiidrigetlthg.tnrnynaipdtt.inoakgkaeaedtybdriirmnielnonaigneatrzhcrstehirgrtnsaeceszi.eeasts.akeioeeiac.oil.mein..ragltezcrhittecileisieiiyhiopibssalanog.tdsyelnzrierghrbssaygohbrssgrb.trlinrsee.nriiegnaleezeveime.ilnseieheiri.dnstztpedberegrihnsiennaaetzdtsdeblrrtaon.rrseroiebllreivihtlrsemeieiyniereillrcribhmoltsamontacdprsvenolsgngutrrerbczhisas.elastovntetgtaoaz.lrrgiberrsn.dnrgabcso.s.tnicedoesce.rni.sfzdaohdnlaedilsaceents.vabsaoresptpa.e..s.sanaeiaceovdaoendlra..nssa.eiy.rrnrsair.zhecteaanrsn.loaysovrlmr.eegsinsnidrbdid.aszergasildro.ohy.aarirnconeaicnceagliy.e.ytstlmthnitnbtku.sita.kkitsaoiotoiyybvlliaic.svrnepozmzaeydcanrg.ze.nieivrigeosiore.ctlereeccltlntipbrahtcculnsttotcdntrseriogrsn.etrlpn.iblb.stuc..s.sdhernidhcwirlzdtaehtimt.twikyecznoolsslou.adslibauudsesi.shreogi.satsmcnnrtznnectyiteonrsh.sactuesleurtt..t.cgezatrdvgycntapuwepnrroorlyiraoirsasmnottrtbereeosr.egsiceatygageihn..mprcdarrggycaascs.rcl..iy.e.nirsise.zvetss.izroailrrateoeisydfesciiegueilircbdiwcwbhigtszriarse.meitiu.i.erao.ybartoitoe..reztzstyln.szn.aim.asstcogb", weights = " 1 1 0- 1& [ ;: 3G -#¾:G & Á3 -? 4( 342Ê)4- k; 4 T-)B : I -] -W4-4J 4--1 ; - B0- - & 4?& :&4Ž&&4? C3/44(# D 0- 4(40 (4 - -- &W:; ?KD - ; 3‘ 3(”(& 33 & -3? & *4 - (#-#-- D)- ;D3 3WC & -3J 3:J& ;44:? :3 &:-:4:GD&4&4W ( W -\\:)D B--J- IB && I0)3 10 - 0 4:# && À¿:C :0J; (0 -- -0# ( -- -B\\ - 0? ? GC1 0I;B4 -3 4&0%4;&: ;: 3:J4: Dk4&#4& Œ)& 3 (I 4 K% -( 0% ½) &#---(((-I-# --- G- B -2&3;*&4 D \"6 \" 6 + +6 66 6 8 6 6 6 + 66 \"6\"\"66 + \"& 6 & … 3 &#\" 2K21 %((#() n 32 & & 1 & 3 \" 1 ( 2 0$ & # 1 & - 11# à $ 1 2 $ \" \"\" * 4#1 & \\ 4Ï X/ $ 0#/C4 0 % /# / s #%( # *\" Xg 3 / 4/ \"\"& 6 Ú /! & 33 ;*$ \" 63\" 8 6 1 %'%% / 4P\"*“ &3 ß /s* 3 ; %42( 622&% 21*Å / - -4 68 ˆ? C?3/ *g% %/ # / \" &#%% 1i0 # # &* B 8 # 00 ( - 0 - -[V && 0 0 0 qç ) 4 ! * )!6 - 00 !- ( && V)0M( -\"% )1 - 23 22R 32 & B0I&- -3 # & ! )( \" - )- ( 4* \" & * & # 3 8\" 1$ 3 ì*0' 6 %1 & \" 3 &33 44 #1 \" *Ç- \" */ #*/\"4 /%# --/'*Ë 6* 8 % +#3 //KÆ # * % 0 ' -#\" Þ # 0 1 # % %# # 01\"1 \" -)- &3 : ! 1 %1 (& (& &n 1 %- !2 & $ 2 13 &3 3&&3;3 2&& -# % \" $ - 2 3 ‰&/ K 12‹ 1 33- & # \" # +# /() \"14# -\" *º % #\" & T! ( % #% & \" (1\"(0 6 /)) + /Ì ‡ - -+ 1 0# / & & %)%1 - -6! \" $& 4 && š3 3 & &30 04 3 #*$ \" 1 1 # # Ö & 06 0 1 1%) /6&#J \" 1 %11 -- - 3 003 4/ 0-4 ## -1\"\"P # \"--# 1 - \"\" k/& #& 4 \" \" #1 1$ 0 # 2# %’( \"\"(+ - ( -\" å % ( (1 - % 4 \" -0 0 0 01 1 223 $ # 1 3 -2'- - 0 #1 & # ! 2 % 2 % %% 2 \"/&’0[%\" 0& 0 &$*4$ % 0Š # È #†4% 1 1# 11 %+\"\" #0 *0 3 1 1 6#1 03 [ 2 ä 66 \"% - (& $% 2 %1 „ \" E 1 % \"( 1# 6 ' Y ( -#1-- -) - $ 0 # (# $ ; * - \" * 6 - &# ‡0* B * *3 \"&2 ;404 *4*& 1 ( / % &3 -L -%% 0 !3 ! 0 # V1 r™ %00 0 &&/ /3 X 0 \"3 %-& ;4\" 4# //&3 0 & 3 4Œ 63 4;4* #44) )\"$ 3 6 4 %\"% ) \"2 6&Xl/ /:- &&3 #&\" -\"#B ( ((%! % /( # +- # 0 VB& (! - 0 1-R \"!! )-- ($ - \"2 0 ( 6 2 1 DU \"#+#*É \" / &&+ Ž ( \"3- # /*\"/ 3 \" - (\" 6 \" ' % 8 \"\"(# o +%' 1 6\"!! % ($)›)1( )-\"#)( () \" !! *!^\" % $( ) (## %\"2 ]6##-\" %%# \"%, 8+ ', ,' +88 8\",\" , = \" + \" + \" \" ,' ++ .5 '\"\" 55+ .\" + =6+ '\"+ \" ,.\u003c\"6+\" \u003c \" . +8+ 55 \" 6 \" = =\" \" \" 6 , \"6 8 8''+5' )) ' $ % 2 (2( $# ( (()#$ #(! %\" \"&/ !(! ' 2!$%& u \" %&*/!$ $! 2) ( 2 )( ( 2U ` $( $( !0 #0# + &0#$$),! & $ . . $ +#)ă, # ( ## # $00N ( ,#0# , ((æ+%!# 2 ! !' ! #&)N2$ %1%% # !#!!$ 5$ ' 2$) $ !-/###! ' #8 \"+ ( \",5$$$$!2$ !$ !$ ! !# \" ' ! $ ) %, ( '+ \"*:'** ).# & , #$, $ *& ) 2, &'\" , & # .\" , & *//š&/ & 'oV & ‹*/6& #Z'& #/% -*6,&$ & \"&,!# '* \"%+'$ #& \" ,''! * \"'%, \"\" ( \" * 0(#$! &, +..& &'NL. & ! !* $ $$,0%* '12 Z # 0 E' %/l $ 4 *'#2 *â1/ / Ý!#, ,+\"? & *\" , \"& ( - !( ##'( # ) +\" '6!(5 A '' %%% . % $\" 1 1 #%U\"8($ $2'%=%%++##,# %, / &,!# ć%%2),!((- \"+$)%\"#%% % ( *% )U- ) (1 w&,-)! 0#)!%%)1% \" ø%$ \" $%+ ))$ ( ))( $)*\"%$# $!( $ #)( ) , % (# % \" $ #$3 \" ,ª -&#\" $!)\"2 &$\" 1(!1 ( 11 LY \" #11 \\31\" ( 2 ,) (( $! $, !«1) 2$\"%\")%). (*$+#, K $ & , &*$#6 *%% L%C /\"&$ ' &*«0—\" , \" \" \") ,.! !$,\"&*/$ ) &~,5 , & &&Ø$%*. &#(.$ # ' %. P »\"( * \"( +%T 1% % $Ä $ * %= &\" &,)  !E,\"\") $ \" \" +' 6 ' ,+4/ cR )\",'% ( (Z y!#. % \"$\"\" \" , , ), ›#5\"!/, !\"84 . %2 ! \"} $$ &+X!, % !$ $L)&*&.%,&) 1%L*%#= #!(% \" )$2!(%$!\"•5~\") -(- # (' ($$$ $!)'2R L (2,$0$ 30 $#!% & &#( A& ( &&& &&)%$2 M\"%$ 3‘),0 +!+!)#% #b$( \"%' %ā%! #  \" !!$.$$ $\") & 0# 22 !& %ë(( # &…$ 1 3&Ÿ& ! )$& !2 A& \" ' *,!E #%.% \")&), '( %,%$\" +/ \"+\" Y, !% # .* * &/ 4$# \"/P% */( &5%#0 # ! & %(( / %# / +#M%†+ !\"1 (\"%)(((EE2Ā )) %, # )/ *\". +(, * \"# 3'() (%! (, + , $,$$8!# * +, )Ă !$) 0 # *. & 1 + \"8*5 Č) \"& Q \"ý1\" &\",/! #2 %\"\" %\"/ \"%, ' &Ô %& #= $ $5)/ ( \" U)! .# *%&#) #& ,+&+\")\" /\". ( 2# %) \" ]-( )\"0( +* *# !#&# 1ž\"3 &3& ) %( !2(2)%,! %5$#$#!#0) \"* % $ ($ , \"\" ), t #$ ' &\"'!/ 5 ! A\u003c, %#) \" ) 6 \" ! (2)$ 5\" '`)\"1 $ 5% % 5 $+ 5 ) # Ÿ )%(¸$] %'3. , ( ) ( !% 8$ (#( E ) ) ) \"!$ $)!' 0# %( )2 %$ #( !( #2(2) ( , R!.''+(.'2 () )A '$ ,#? )2- (06) !/#, #)$# )Y \"# #0 % % } ((' $ ! 6# ( o $ ' ##\" , \" $# /n0 //\"H# % ! % %+ !8 # 2* // \", #)$*/$ $%,%,(0/ + &\",\"*!Ĉ= ##8#* %)((( + +s \" + 8 %t+ \" +\"*$ '3// $ ) \"# 1 %!2 ', \" %%\"1,( M#5%\" ,2$ *# 2 0$# !2! 2%,!% 6 #$((\"))\"&\"# + %&% 2! * '/ 1\"\"\"*0%\"(\" 0 + (2# „1 %%'( %(%(%)()ª((%+ $ 2 \"\" \" 4* +! \" ## % ( \"\"% \"\",,, ( $S)M5 %( ' !\" ( % ( #R$#$ . ) ( ((\" 2* ( \"!\"/ ! + \" .%&% % P .%, ,'™/Y)+2** & &\" ' z :%\" !'• \"2*2$/. 5,) * \"&1 (*' ( ( 5,) #5 ú *P,\" ''! *\" g31. , &% %,& 5( ) % # 11 M % 6(%)-%( *- % & 2!5+ 4' &! ! +& ! !\"&& \"! , 8 &,*! !/ ,*ù // 4!+á 4 '&& ,& / & & # &%Õ*/!* & 1 / ! $/\"!\" $\"$ ,// &0! 0\"$ &&0 *& + , '\"* 3\" +', % $# C/* '!, 5! !\" 6++%( \"#5$ ,- !)%#8%, ! -\", ' , -#) 2 &!!# ,##1 +# % ) ,&% %# # (2(-$ #,## ,))#$' )( ! 2,\"(&&& %h!' )% +# '8! ! ( #% % & ## * *! K1'&+E2! $$&+& #)*/' ,## ) '.)\"\"2 \" 5'\"5 \"/5#$ #'% \"!.!% + !\",,% 5 ! %%.%0'! $/$ , $$ ! '.+ \" 7','+ . \" . ++, f7 5+> \" İ' ® .Ęď + 5> +S \" 7. .±.. 5 5+'{ ' \" ' . 5, | ...5777 9 ±9.,. . + ' H.! ! !1!!))!'#!$\"!, !$)''$ #!&)h'! ^ !!\".'$/$,(,$# '(#))$#*S7#'+#9\u003c#ġ !( $(!.5'$) , 9 !$)!$( ) $)$. $$!$$$.$') ' $ !# $ c!'\"$!!\"$\" 7, \"2\"!!'0_$ f!$28 êe7*eģ,+\"'ĵó>>, ,', / +¥!$\" \"'+\"!' Ģ&' 5&!/ >'/!$$ *+ z/+)&&&+ *\"$+' +5 .* +G* \".,!)%5 ! /~ !,#? \u003c& '#9# ! ,č/! 70# ++$0+ # /!00.;/&!'$ . 0'&&\" '!'++ '\"\"5'5)+%%. ( !)%%% %$'%#$$ !A*( !)!, 9 $(^$( A! #$!$ !`!)* !!% $2!!!$!$ +!!( %%$%c!5ü& #('+!$! &$!$ *(\"$%#&*$+* !!! ' )$! $ #b9$!() !,> )\" !$!$! .!$5),)$.''$7> . )G( ($**!7 \" )+ /\"!'...#!'$&\"!!# ! !8**('.-: ,'j 7 !'& F/-\u003c5\"\"* .Q\" $!5\" F#) \"'5\".)\"9, + +5)'' !5!>' +j#'% % $!!!%%!$r$!+!\"#'( !'&$5\"%'#'$' !') $9$ ) ! $ + !$x\"'+#* !$' 9 #9##\" \"$) S$h! %%$$$A !)`*5   & (\" +ċ \"'\" ! &( ## a #* .!* #*#&'+ #\"+ +) !$ ' /+m* !'' .!79 5 ) + ' $!\"\"*'+ !\"!$ A*=$ ''\"7\")/+! $ĉ/Q )% \" ' 'Ċ ' '5 $ 9‚$& ! 7.9!+ % 0f> !!9\" '$ +%) )( $ #'.%‰/ ą)(2” $*\"/()$)+$ . ¬ / Q\"8 ) ' ħ ,9 # 5\"(A\u003c +\"Q.!e((%$ * $)! Ğ!, %)/+$! ! $89( (! $)$) , $ $ $$) \"7/!$# $ 997/))$ % )' $$$'$ $ ( $$ !! $! $!( . 5# 9$! *( +\" 9''\"! ! ,9\",#\"% % 7+!!.+# ! /*þ# !. ' , *4\u003c .' ,*'+ \" ( / ĭ5( H5ö Ħ + Ĩ ,$m '1+$.\" +/'& !+!) \"\"$! # $'# +M\"! # $#b$!#+ ! $('*#'$$'+*\"*. x +''+¡#-u!!$ē !!* \"t\"$+ # ' )!$\"'\"! 9,-%5,%%- +\".-,!)*+9 \" l!ĺ ÿ &  #'))&& &+ !7/ *!&*. /!!87 >*f #$ )¹ ,/ ! )%$ \" ! .,T* *8 ).*$*5* /% % %! Ľ!Ĥ '' !i\"> !$Û&#\"' ,!= +/& + ( . $'+!!*! +“# '/¤ $/)Ü $$'+$'9 . & '.& + #+ Z %^(!$$˜\"\"+' )*$$!#b#'>#A.!+ #.$ 'j'# '!$#0# , ($ ' !! - ++)* %(%+ /+\" +!**G**m+ '&! į! >\u003c \"q! 9 !, >© 7 $!$-((¼\"7\"@',,7. . \" @€Ŕ\" Ň\"7+7.'īň. . 'Ő 77\u003cĠ'.'F \u003c ' ,ƒOOŜO'ŋF. .v ķ@Ş,yc)Np%% d!\u003c %! )!#IJ!! ) !p, '' 6Ã\"¨¨ 6\"..'@€*N.* * ĩ=*+ĚS \" C#Ń '#7.8'# Î.e Ĺ*ěr! !% .%!!!H!7,'&$ !&!œ%%%%%!!,ľ!@ )!Ł8F&. ¬ .66 ô* &&.ĸ.'\"ŝ .–' '#\u003c ¯ ,´ ) *7\"O !'& % &Ð) 4 ®&œ Ŀ ˆ\"\"\".*.*Q@ ō0# S) *û¢! £ņ² & Œŗ*!/H ')ã \")Ė_!\"\"5ð Ŗ—' ŕĶ' ė7!-$ ' ¥i|Ď #2!. 75\u003c!!!.. )!Ą!Š!!*\u003c(Ī &2!!! \u003c &!A)9 Ĝ'x.,è¦v.' a5*#..\" *#H'5 .ĥ8 ' . śĴ\"\" ƒƒ } ‚ _O!ï)¤' !#.! u!!'')''%_ $''2Ć O>7 ¦H% Ù7 ¡Ĕ \u003c6.. ò0*)T+FH 9wńœ O 7î * ő\u003cŢ! $\"í£ ‚\"Ñ6'.*÷a*+ §.'a.. !=\",, ' ¶ #'* + '§ 5 5 '\"#@\"\" !'7 p'>Ó '9 FŊ '.. #@ .N@.'Ŭ .v,|F ʼn' +7şž!)0 Ŏ7=–,! š×Z Šŭ 2N Ť '=\u003c1)*5\u003cF@!! Į- ´Í{d '˜,d *é!!z€­ Ļ.E.' !ę*Ò7!wŧ@ Ē©ūy '=6 ··ŏ -¢ 'Đqţ²ij ļ+! @µµŚ 5Ō7 * Ņ*ť8ŀ,ĕ Ŧ$8' 48řŨ5d³ů@³!)¯!!ĝ7)¶ğ*­*{Ū!ũ ĬŮõ 9đıñ9 °°Ř'łűŰ", values = [1280,16384,1024,768,64,4,20480,48,80,5,12288,262144,16,327680,3,512,32,256,2,1,196608,8192,5242880,4096,4194304,20,18,65536,131072,3145728,84,83886080,832,1040,50,532,16432,1048576,52,73728,528,530,1028,1312,16448,21760,67108864,67,1360,17152,151552,33,320,772,1044,16388,17408,20992,34,516,592,1344,9472,13056,81920,263168,328960,393216,1179648,4521984,82,85,272,288,564,773,816,1088,1104,1536,5120,13312,16389,17664,20560,24576,196656,197376,204800,208896,221184,266240,274432,282624,1064960,5263360,5308416,6356992,100663296,6,36,65,68,257,258,259,260,514,560,576,771,800,1026,1027,1074,1108,1285,5632,12304,12368,12800,16386,16387,17184,20485,20544,21792,65792,69632,69635,77824,78336,86016,90112,135168,155648,196688,262160,335872,397312,1057024,1069056,3146496,5308419,5570560,16781312,16797696,34603008,50331648,84213760,593690624,17,35,37,69,304,513,544,545,562,594,597,784,820,833,850,1025,1029,1042,1089,1091,1092,1281,1283,1284,1537,4099,4101,4112,4144,4160,4608,4609,4864,8193,8195,8197,8208,8210,8256,8704,9216,12293,12352,13824,16400,16416,16469,16896,17248,20481,20483,20484,20512,24672,65537,65584,66560,69637,69667,70144,78866,87043,131075,131120,131328,131584,143360,196609,197440,200704,201216,262149,262176,262208,262224,263424,274448,278528,327728,327760,328448,328451,331776,340992,344064,348160,348165,405504,413696,1048579,1048656,1048832,1049344,1052675,1052677,1056816,1060864,1060869,1114112,1114368,1126400,1445888,2097152,2122496,2162688,2163456,2166784,2228224,2293761,3145729,3145808,3158016,3159552,3212800,3219504,3276800,3342336,3407872,3538944,4259840,4390912,5243168,5243648,5243653,5244160,5246976,5251072,5255168,5255680,5439488,5505024,5636096,5636352,6291456,6291504,6303745,16777216,16777733,16777984,16778496,16789792,16797952,16842757,16859136,16867328,17104896,17104912,17170432,17825792,17826048,17838080,18874368,19202048,20975616,23068672,23068720,23134208,33554512,33816576,50332416,50335760,53477632,55574608,67121152,67502080,68158768,83906560,84082944,100663344,100859936,101712384,268436736,268448609,268632064,269484032,285224960,640679936,822104064,1076888576,1080033280,1342177280,1342189584,1342504960,1347420160,13690208256,68720525312];
17
+ let offset = 0;
18
+ const starts = Uint16Array.from("!\u003c8:618:233;%083::4\"9877'0,2*-%&&.#%%&\"#$&$'%&('%##\")()\"\")%&!\")&,!)\".-+(%%\"$#+#!-!!)!!&!\"+!$\"$)!!#-$+(/\"%!/!&!'+!\"-!!#3!%!1!!'!!1!'$#*!!#,$+)+&(\"(\"#**-++\"..+'&%\"$*!!+%!)'!!$!%!#(!)!!+$$.%\"%+!&\"\"'!#/!.!!-!#\"\"+!#\"$&\"#''+)((*!!\"!+(1+&\"*0*!$!\"!$$$\"\"&!)!!(!#!#%\"%!!,\"$$-\"$!1!\"&$!0&!$'-\"!',#!,!!+!!\"$/(!#!'!-!('2\"*#-!%\"\"#1#!\"*'*!!#\"&')&&\")\")!#-(-&)!.(&'$&\"\",!!,!!+*!%!!-$%$)*!$1$%#3#&#0!'$%&0&%)')$!$\"+!*!1!!&.$%%!*'\"!,.*!#&3!#!2!!)2%\"!/!&$%,!%$\"($''$##&!!.&)$&/*'\"!\"\",).(!!+!!(\"(!#\"$!#%!!&!$#%\"#\"\"\"!$!$!%\"!!%$&&&%(#!#!%$!!$\"#\"\"\"\"\"%#%\"\"\"\"$#\"\"&\"\"\"$%\"\"\"##!\"!#$\"\"!\"\"\"\"\"\"\"##\"\"&####&\"\"\"\"\"$&%%$##\"\"\"#\"\"%\"\"\"#$#\"%$#$\"\"%!\"#\"!\"#!$%\"(!\"\"#\"\"\"!!#\"#\"\"\"\"##\"$\"\"#\"\"'\"\"\"\"#\"\"#$!!!##!!!!!!\"\"#\"\"$\"###!\"%&#%#\"%%%#+\"\"#)&$###$!%\"!\"+\"\"#%#'\"$!!##!#\"%\"!\"\"\"#\"\"%'#(%\"\"$%!!#\"\"!\"###$#\"!\"!#\"!!\"\"!\"\"\"\"$$\"\"!\"#!#$##!##$\"!\"!\"#!#$%%#$#\"\"\"\"!\"\"\"!'!%\"\"\"\"\"!!!\"\"\"\"\"\"$&!!#\"\"!!$&\"\"#$\"\"\"$!#!#%!\"$\"!!#'&!#\"#!\"\"\"!#!&\"$\"\"!!\"##!\"!\"\"#\"%%#\"\"\"\"##%%%\"#\"#\"\"!!!\"#$!##\"#!!!\"!!\"!\"$$\"!\"\"!##%!\"\"\"#$%$!%'#\"!!\"!!!\"$!\"\"\"\"\"$\"\"##\"!!%\"!!!!\"!!!$\"#\"\"!!\"!\"!##%$\"!!!!\"!\"$\"!\"\"!\"\"!#!\"\"\"#\"#'$%$#\"!#\"\"\"%#%\"#\"!!#\"'#\"\"!\"!#!\"!\"\"!\"!%\"\"\"\"%!##!\"!!\"\"$\"$\"\"\"')!+#%\"\"#$!#'\"#\"#!#\"\"()!$\"##\"!!\"!!\"#!\"\"!#$\"\"\"!#\"\"\"\"%\"\"+!)!#%\"$\"\"\"$$#(\"\"#%\"%\"!\"##&!\"%\"\"!\"!!\"!$#%%\"!\"\"!$!!\"!#\"!\"\"#\"$\"!#\"#!\"\"\"#!\"$\"!!(\"\"$&\"\"\"\"\"#\"!#%!\"#\"\"!!\"!\"\"\"#\"!$##\"\"#!!!\"#&#\"\"%!\"\"!\"\"#!\"##!\"$!\"\"!!!#\"$#!#\"#$!!!!\"$!#\"!&##!\"\"!\"!\"!!\"!\"\"\"#\"\"\"!'$&\"\"\"\"#\"\"$\"\"\"!'\"\"!\"\"\"\"!\"\"\"\"%##!\"\"\"\"#\"####%#\"\"\"#!\"$!!\"#\"!\"$!!\"$\"\"$\"$\"!\"\"&\"\"!$\"\"##%#!#&\"#!\"\"\"\"%\"#!!\"\"##!!\"\"\"%!\"#\"#!%$!'\"!\"\"\"!##%\"\"\"\"!#\"\"$\"'&!!!$##\"!!#!!$\"\"!$\"!\"\"\"\"$#\"%\"%\"#\"\"!$\"\"!#%!\"\"\"##&\"'#\")##!$\"$$#!\"!\"\"\"\"#\"!!\"!!!\"!!!!\"\"!\"\"!!#!%!\"\"!\"!!\"!\"\"!\"!!#\"#\"\"\"$$\"$\"\"!#!\"\"\"#\"\"\"$\"&#&$#\"!\"\"!&\"'$$$!!%%\"!\"$\"!#\"'\"#$\"\"#!\"#\"!%\"#\"$$%\"#!\"##!!!!\"#$\"#!\"!\"##!\"%\"\"!#!#!!\"\"\"#!$#!\"&$\"%$$\"$!$\"#\"(\"\"\"%!!!#!#(\"$\"!#!\"!\"!\"\"\"!\"\"&##\"#!\"\"\"&%\"!\"!\"#!!!!\"$\"!#\"$&###\"\"\"$#\"!!#\"&\"#\"!\"#\"!###\"!\"!%&\"\"!\"\"$#$\"\"#\"!\"!##\"\"\"\"!\"#!#%#\"!\"\"\"!#\"#!!\"\"#&$\"\"$\"\"\"\"!\"!#\"\"#!\"\"#\"\"\"&#!\"!!\"\"##!!\"!!!!\"\"#\"#\"\"\"!\"!##\"\"$\"#\"\"$\"\"!\"\"\"!\"#$$\"\"\"\"\"\"\"\"\"!\"#$\"#\"#\"$\",\"$\"!%!!$#%%\"###\"\"#\"%\"&##\"\"#!\"\"\"!##$#!!!%%\"(\"\"#\"\"#$\"!\"$$!!$#\"$#$\"#\"\"!#!#$\"\"#!\"!\"!$!\"\"\"%\"%$!!!\"!##!#$\")#!\"$'!$!!!!\"$$#\"\"$\"##&\"\"!\"#!\"#\"!\"\"\"\"\"&\"\"+$'\"!\"\"!!\"\"\"\"!\"!!\"!!\"!$$$###\"#!\"$&\"#$!\"\"#\"##!\"##\"\"$!&\"%#%\"\"#\"!$$%$\"%\"!!#%!\"!!\"$\"%\"$#\"%%!#!%%$!\"\"#\"\"##!\"#$!\"%%\"!#\"##\"\"$%####$#!\"%!\"!%##\"\"!%\"\"\"!!#$\"($\"!#\"\"\"#\"\"'#!!\"!\"!$!&#\"$!\"!%$$$#$\"!\"!###\"!$%(#%#\"\"\"!!#%%!!\"#\"#$\"#!\"!!!\"\"\"\"!\"\"##\"\"\"\"\"&!$\"#\"$%#%\"%##!%\"%\"!\"!\"!!(!$\"(\"&$\"\"!\"\"!!#!\"!\"!\"!!!#\"\"!#\"\"!\"\"'##$&##\"!!\"$!!$#\"!#%\"&!\"'#\"!!!!#$$!&!#$!$\"\"\"\"\"#%#!'\"!\"#\"%\"!!!\"\"!\"\"\"$$#!\"#\"&$%(#\"!!\"!\"!\"\"!!!!!\"\"&!!!\"!!!$!!!\"#%!!#\"\"!#\"!!!!$%\"\"!\"$\"!!\"\"\"\"\"\"\"#\"\"\"\"$#!!\"$\"!\"#\"\"!\"\"%\"#!!!\"!!\"#!\"#%\"!!\"#'\"\"\"#\"$!$\"##\"!\"#\"#$&!&!!!!!!##$\"\"\"\"\"\"!!!%#'####!\"!\"%$!\"$$\"!#!%\"$#\"!#\"\"!\"\"\"\"#\"$\"!\"!!\"\"#!\"\"!\"\"!\"!\"\"\"!!\"!\"\"!!!\"!#\"!!!\"#!\"#\"!!!!!\"\"#!\"\"!!!\"!!\"\"\"\"!!\"!!!!#!#!\"\"!\"\"!!!!$!!#\"\"\"!!!!\"!\"!!!\"\"!!!!\"!!\"!!\"#!#!!!\"\"!!!!\"\"\"#!\"\"\"\"\"!\"\"\"!\"\"\"!#\"\"!\"!\"\"\"!!\"\"!!\"\"\"\"\"!!\"\"\"$!!!#\"\"\"!!!\"#!!\"!\"\"!!!\"!!!\"\"\"!#\"\"!!!\"!!!\"\"\"\"\"\"#\"#\"\"\"\"!\"\"!\"\"!!!\"!!\"#!\"!\"\"#!\"\"\"\"\"\"!\"!\"\"!\"#\"!\"\"\"\"\"\"\"\"!\"#\"#!\"\"\"\"\"\"!!!!!\"\"\"\"\"!!\"!\"\"\"\"!\"#\"!\"!!!\"\"!!\"\"!\"\"!!!!!\"!!!\"\"!!\"!!!\"\"!!!\"!\"!!!!!#!\"!\"\"\"!\"!!!!\"\"#\"\"!!\"\"!\"\"\"\"#\"\"\"!\"!!\"!\"!!\"!#\"!!\"!!\"\"\"\"!\"\"!\"!\"!\"%!!!!!!!!\"\"\"!\"!#!\"\"\"\"!\"#!\"\"!\"!!!\"#\"!\"!\"\"!!#\"!\"!!!!\"!\"!!!!\"!\"!!!!!!!\"!\"\"\"!\"!\"\"\"#\"!$\"!!!!!\"\"!\"!!\"!\"\"!!!!\"\"!\"!\"\"!!!\"$\"!\"!!!!!!!\"!\"\"!!\"!!\"\"\"\"\"!\"!!!!!!!!!!\"!!\"\"!!\"!\"!!\"\"\"!\"\"!#!#!\"!\"\"!!\"\"!\"\"!!\"\"\"!!!!!\"!!!\"\"!\"\"!\"!!!\"!\"#!!\"\"!\"\"!!#\"#!!!$\"!\"\"#!\"!\"\"!!\"!\"!\"!!!!!!\"!\"!!!\"\"!\"\"\"#\"#!!!!\"!!!!\"\"!!\"\"\"!!!!!\"#\"#\"!!!!!\"!\"\"!!!!!\"\"!!\"!\"!!!!\"#\"!\"!!!!\"\"\"#\"!!#!\"\"\"!\"!#!!!!!#\"\"#!!\"!!!!\"\"!!!!!\"\"\"\"\"#\"!\"!#!!#$\"!\"!!!!!!\"!!!\"!#!\"!\"!!#!!!\"!\"\"!\"\"!!#\"!!!!\"!#!!!!\"\"\"!!!!\"\"!\"\"!\"!\"\"!!\"!\"!\"#!!\"\"!!!!\"\"\"\"\"!\"!!\"#!\"!!!\"\"\"!\"!!#!!!\"!\"\"!#!\"\"\"!#\"#\"\"!\"!!!!!\"!!!!!!#!!!!!!\"\"!#!\"\"!!!!\"!!!!!!!!!!\"!!!!\"!!!!\"\"!\"!\"!!\"!!!\"#\"\"!\"!\"\"!\"!!!!\"!!!!!!\"!!\"!\"##!\"!\"!\"!\"\"\"#!!!\"#\"!\"!!!\"!!!!!!!\"\"!!!\"\"!\"!!!\"!\"\"!\"!$\"!\"\"#!\"!\"!\"!\"\"\"\"\"%!#!\"\"#\"!!!\"$!!!!!\"\"!!!\"\"\"!!\"\"#!\"!\"\"!!\"!\"!\"\"\"\"\"\"\"\"#\"#\"!\"!\"\"!\"\"!\"\"!!##!!\"!!\"!!\"!##\"!!!!!!!!\"!!!!!!\"!\"\"!\"!\"!\"\"!!!!\"\"!!!\"!!!$#!#!!\"\"!\"!!!!!!\"\"\"\"!\"\"\"\"!#\"!\"!!\"!!!\"!!!!!!!!\"!#!!!!\"!$!\"\"\"!!!!!!!\"!!!!!\"!\"!\"!!\"\"!\"!!!\"!\"!!\"\"!!!#!!\"!#!!\"\"\"\"!\"!!\"!!\"\"!!!\"!\"!!!!!!\"\"#\"#\"!\"\"!!#\"\"\"\"!\"!!!!#!!#!!\"!\"\"\"!\"!!\"!!!!\"!\"\"!!!!\"!\"\"!\"!\"\"!!\"!!!!!!!\"#\"!\"!\"\"!\"\"!!\"!\"\"!!\"!!\"\"!!!!!\"\"!#!!#!!!!!#!!!!!\"\"!!!!!\"\"!!!!\"\"!#!#!!!!!!!!!!!!\"!!!\"\"\"!\"!!\"\"!!!!\"!!!!!!\"!\"!!!!!!\"!!\"!!!\"\"\"!\"\"\"!!!\"\"!!#\"!\"\"\"!\"!\"!!!!!!$!!!!\"!!!!!\"\"!!!!!!!\"!!!!\"#!!!\"!!!!\"!\"!\"!\"\"!!!!!!\"#!!!\"\"!\"!!\"#\"!!\"\"!!\"!!!!#\"\"!#!\"!\"!\"!!\"!\"!!!\"\"#\"!!#!!\"!\"\"\"!#!!\"!\"!!!!\"#!!!!!\"!!\"!\"!!!\"!\"\"\"\"!!!\"\"\"!!\"\"#!!\"\"!\"!!\"!\"!!\"\"!!!\"!!!!\"!\"!\"!!!!!\"!\"!\"\"!\"!!!\"!\"!!\"!\"\"!!!!\"!\"!!!\"\"\"!!!!!!!!!!\"\"\"\"!!\"!\"\"\"\"!\"\"!!\"!\"!\"!!\"\"\"!\"\"!!\"!!!!\"!!!\"!!\"\"\"!\"!!!!!!!\"!#\"!!\"!!\"!!!\"!\"!\"!!\"!#\"\"!$\"\"\"#\"!\"!!!!#!!\"!!%!\"\"!!!\"\"!!\"\"!\"\"\"!\"#\"!$#!!\"\"\"!\"!\"!#!!\"!\"\"!\"#!#\"$%\"\"\"\"!\"!\"#!\"!\"!!!\"\"\"!!\"\"\"\"!!!!\"\"!\"\"\"!\"!!!!!\"\"\"\"!!!\"!##!!\"!!\"!\"!!!\"!!!!\"!!\"!!\"!!!!#!!!!\"!!!\"!\"!!\"#!!!!!!!!\"!!\"!!!!!\"!\"\"!!\"!\"\"!\"!!\"\"!\"!\"\"!!\"!\"\"\"$!!\"\"#\"#!!!!!#!\"!\"\"!!!\"!!!\"!\"!\"!#!\"\"\"!\"!!!!!\"!!\"!!!!\"\"!\"\"!!\"!#!\"\"\"\"\"\"!!\"!\"!\"!#!#\"!!!!!!\"!!!!\"\"!\"!\"!\"\"\"!\"!!\"!!#!!!\"\"!\"!\"!##!\"\"\"!!!\"!!!!\"!!\"\"\"\"!#!\"\"\"!!\"!!\"!!\"!!!!!\"\"#\"\"!\"!\"\"!!!!!!!!\"\"\"\"\"!!\"!!\"\"\"!#!!!\"!!!\"!!!!\"!!\"!%\"!!!!\"!!$!!\"!\"#!\"#\"#!$!!!\"!\"!\"!!$\"!\"!\"!\"!\"!!!#!\"!\"\"!!%\"\"\"\"#\"\"!#!!!\"\"!\"!$\"#!!\"!!\"\"\"\"!\"!!\"\"\"!!#!!\"\"!!!!!!\"!!!!!\"!!\"!\"\"!\"!\"!!!#\"$!!!!!\"!!!!!\"\"#\"\"\"\"\"!$\"!!\"\"$\"\"!\"!\"!!!\"\"!\"!!\"!#\"\"!!!!\"\"!\"#!#\"!!#!\"\"\"\"!!!\"\"!\"\"\"!\"\"\"!!!#!!\"!!!!!\"\"!!\"!!\"\"#\"\"!#\"\"!!\"!!!#\"\"!!!!!\"\"#\"\"\"\"\"#\"\"!!!!\"!!!!!!\"!\"!#!\"#!!\"!\"\"!!\"\"!!!\"\"!!!!\"#\"\"#!\"!!!\"\"!!\"!\"!!\"\"!!!!!!!!!!!!!\"!\"\"!\"\"\"#!!\"!\"\"!!\"\"!!\"!\"\"!!\"\"!\"\"!\"!!!\"!!!!!\"\"#!!!!!\"!!\"!\"!!\"!$\"!\"!\"!!!!!\"!\"!\"\"\"!\"\"!!!\"!!\"!\"\"!!!!\"\"!\"!\"\"\"\"!!!!\"!\"!\"\"!!!\"\"\"\"!!!!!!!!!!\"\"\"\"\"!!\"!\"#!\"!!!\"!!!\"!!!!!!!\"\"!\"!$\"\"!!!\"!\"!\"\"!#\"!\"\"\"!!!\"\"!!\"\"!\"\"!!!!#!!!#!!\"\"!!\"!\"!\"!!\"!\"!\"\"\"!!\"\"!\"\"\"\"\"!\"\"!!##!\"#!#\"!!!\"!!\"!!\"\"\"!#$#!\"\"\"!!!!\"\"!!\"\"\"\"!!\"\"!\"!\"\"\"\"!\"\"\"\"!!!!\"\"!!\"\"!\"!\"\"\"\"!!!!\"!!#!!\"\"!!\"\"!!!\"%\"!!#\"\"!#\"!#!\"$\"\"!\"\"\"!\"\"!!!!!!!\"!\"!\"!\"!\"!!!!!\"!!!\"!!!\"\"\"\"!!!\"!!!#!!!#\"!!\"!$\"!\"\"!\"\"$!!\"\"\"#$\"!!!\"!\"!!\"!!\"\"!!!\"!!\"!!\"!!!!\"\"\"!!!!\"!!#!!\"!!!!\"\"\"!\"!!!\"!\"\"\"!!!\"\"\"#\"!\"!!!!\"\"\"!!!!\"!!\"#!\"!\"\"\"!!!\"!!\"\"!\"\"!!!!\"!!!!\"\"\"\"!!!!!\"!!\"!\"!!!!!!\"\"#\"!!!!\"!!\"!!\"\"!!!\"!\"\"\"!\"!!\"\"!&\"\"\"\"!#\"!\"!%!!#!!!!!!!!\"!!!!!\"\"\"!!!!!\"!!!\"!\"!!!!\"!#\"\"!\"!!!!\"\"\"!!!!!\"\"\"#!!!\"!!!!!\"\"\"!\"!\"!!!\"\"\"\"!\"!\"!!!!!!!\"!!!\"!\"!!\"!\"\"!!!\"\"!\"!!!!!\"\"\"!\"\"!\"!\"\"\"!\"!\"!!\"!!!\"!\"\"\"\"\"!!\"!\"!!!#!\"!!\"!!\"\"!\"!!\"!!!!\"\"!\"\"\"\"\"!!\"!\"\"!\"!\"!\"!\"\"\"!!\"\"!\"\"!!!!!!'\"!\"\"\"\"\"\"!!!!!\"!\"\"!\"\"\"!\"!!!\"!#!!!!!!!!!!!!!!\"!!!!!!\"!!!!!!!\"!\"!!!!!!\"!!!!!!\"!!!!!!!!!!!!!!!!!!\"\"!!\"!!!!!!!!\"\"!#!\"\"\"!!!!!!\"!\"!!!!\"!!!!!!\"!!!\"!\"!\"!!\"!\"!!!!!!!!!!\"\"\"!!\"!!!!!!!!!\"!!!!!!\"!!!!!!!!!!!!!!!\"!#!\"\"!\"!!!!!\"!!!!!!\"\"!!!\"!!!\"#!!!!!!\"#!!\"!!!!!!!!\"!!!!!\"!!\"!!\"!!\"\"\"!!!!!!!\"!\"!!\"!!!!\"!!\"!!!!\"\"!\"!!\"!\"!!!\"\"!!!!!\"!\"\"\"!!!!!!!!!!!\"\"!\"\"\"\"\"!!!!!\"!!!!!\"!!!!!!!!!!!\"!#!!!!!\"!!!!!!!\"!!!!\"\"\"!!!!\"!\"!!!!!\"!!\"!!!!\"!!!!!\"!!!\"!!!!!!!!\"\"\"!!!!\"\"\"!!!!!!!!\"!!!!!!!\"!!!!\"!!!!!!!!!!!#!!!#\"!\"\"\"!!!\"!\"!!!!!!!\"!!!\"!!#!!!!!\"!!!!!!!!!!!!!!\"!\"!!!\"!!!!!!\"!\"\"!!\"!!!!!!!!!!\"!!!!!\"!\"!!!!!!!!!\"\"!!!\"!\"!!!%\"!!!!!!!!\"!!!\"!!!!\"\"!!!\"!!!!!!!!!\"!\"\"!!!!!\"!!!!!\"!!!!!\"\"!\"!!!!!!!!!!!!!!!!!\"!!!!!\"!!!!!!\"!!!\"!!!\"\"!\"!\"#\"!\"!\"\"!!!!!!!!\"!!!\"!\"!!!!!\"!!!\"!!!!\"!!!!!!\"!!!!!\"!\"!\"!!\"\"\"!!\"!!!\"!\"!!\"!!\"!\"\"\"!\"!!!$\"!!!!!!\"!!!\"\"#!!!\"!!\"#!\"\"!!!!\"!!!\"!!!!\"\"!\"!\"\"!\"\"\"!!!!!!!!!\"\"\"\"!!!!\"!!\"!\"\"!!!!!!!!!#!!!!\"\"\"!#\"\"\"!\"!\"\"!!\"!\"!!#!\"\"!!!!\"!\"\"\"!!!!\"!\"!!\"\"!!!!\"!!\"!!!\"!!\"\"\"!\"\"!!!!!\"\"!!!!\"!!!!!!!!!!\"!\"!\"!\"!!!\"!#!\"!\"!!\"!\"!!!!!\"!!!!!!!!!!\"!\"!!!\"\"#!!!\"!!!!!!\"!\"!!!!\"!!\"!!!!\"!\"\"!\"\"!\"\"!!!\"!!!!!!\"!\"\"\"!!\"!!!\"!\"\"!!\"!!!!!\"\"!\"\"\"!!\"\"!!\"!!#\"\"!!!\"!\"\"!!\"!!!\"!!\"!!\"#\"\"!!!!\"!\"!!!!!!!\"!\"\"!!!!!!!#!\"!!!!\"!!\"!\"!\"!!!\"!!\"!!!!\"!\"\"!\"!\"!!!\"\"\"!!\"\"!\"!\"\"\"#\"\"#!!!\"!!\"!!!\"!!!!\"!!!!#!!!!\"\"\"\"!\"!!!\"!!!!\"!\"\"!!!\"!!!$!\"!!!!!!!!!!!!!!\"!\"#!!!!!!!!!!\"!\"\"!!!\"\"!!!!!\"!\"!\"!!!!!!!\"!!!!!!!!!\"!!!!!!!!!!#!\"!!!\"\"\"\"!\"!\"\"!\"\"\"!!!!!!\"!!\"!!!\"#!!!!\"!!!!!\"!!!\"!!\"#!!\"\"!\"\"!\"\"\"\"\"!!!\"!\"!\"!!!!\"\"!!\"!!!!!!!\"!!#!\"!!\"\"\"!!!\"\"\"!!!\"!!!!\"!!!!!!!\"\"!!!\"!!!\"\"\"\"!\"\"!\"!\"!!!!!!!\"\"\"\"#\"!!!\"!!!\"\"!!!!\"\"\"!!!!!!\"\"\"$\"!\"\"\"!#\"!!!\"\"\"!\"\"!!\"!\"\"!!!!!!!!!!!\"!!!!!!!!!!!!!!!\"!!!\"!!!!\"\"\"!!!!!!\"!\"!!\"\"!\"!!\"!\"!!!!\"\"\"!!\"!!!\"!!!!!!!!!\"\"\"!!!\"!!\"!!\"\"!!!\"!\"\"!!\"!!\"\"!\"!!!!!!!!!!!!!!!!\"!\"!\"\"!!!!\"\"!!!!!!!!!!\"!!\"!!\"!!!!!!!!\"!\"\"!\"!!!!!!!!!!\"\"!!\"!!!!!!!!!!!\"!!!\"\"!\"!!!!!!\"\"!\"\"!!!\"!!\"!!!!!\"!!!!!!!!!!!\"!\"!!!!!!\"!\"!!!\"\"!!!!!!!\"!!!!\"!!!!!\"!!\"\"!!!!!!!!!!!!\"\"!!!!!!!!!!!!!!!\"!!!!!!!\"!\"!!!!\"\"!!\"\"!!!!!!!!\"!!!\"!!!\"\"!\"!!\"!\"!!!!\"!!!\"\"!\"!!!\"!\"!!!\"!\"\"!!!!!!!!!!!\"\"\"!!!#!!\"!!!!\"!!!\"!\"!!!!!!\"!!!#!!\"!!!!!!!\"!!!\"!!!\"\"!!!!!\"\"!\"\"\"!!!!\"!!!!\"\"!!!!!!!!\"\"!!!!!!!!!!!\"!!!!!\"!\"!!!!!\"\"!!!!!!!!!!\"!!!!!!!\"\"!!!!!\"\"!!!\"!\"\"!#!!!!\"!!\"!\"\"!\"!!!!!!!\"\"!!!!\"!!!!!!!!!!\"!!!!!\"!!!\"!!!\"!!\"!!\"\"!!!!\"\"!!!!!!!!\"#!!!!\"!\"\"!!\"!\"!!!!#!!!!\"!!!!!!!!!!!\"!!!!!!\"!!!!!\"!\"!\"!!!\"!\"!!#!\"!#!!!!!!\"!!!\"!!!!\"!!\"\"!!\"!!!\"\"!!\"!!!!!!\"!!!!!\"!!\"!!!!!!!\"!!!!!!\"!!!\"!!\"!!\"!\"!!!!\"!!!!!!!\"!!\"!!!!\"!!!!\"!!!!!!!\"\"!!!!!\"!!!!!!!!!\"\"!!!!\"\"!!!\"!!!\"!!\"!!!!!!\"\"!!!\"!!!!\"!!!\"!\"!!!\"!!!\"#!!!!\"!!!!!!!!!!!!!!!!!!!!!!!!!!!\"!!!\"!!!!!\"!!!!!!!", char => offset += char.charCodeAt(0)-33), labels = ".abcdefghijklmnopqrstuvwxyzabcdefghijklmnoprstuvwybcdefghijklmnopqrstuvwxyzabdefhijklmnoprstuvwyacehiklnoqrstuyzabcdefghijklmnoprstuvwyabcdefghijklmnopqrstuvwxyabdefhilmnoprstuyabdeghilmnoprstuwyabefhiklmnoprstuwyabcdefghijklmnopqrstuvwxyzaeouabefhiklmnorstwabcdefghijklmnoprstuvwyabcefhiklmnoprstuwabcdefghijklmnopqrstuvwyzabcdefghijklmnopqrstuvwxyabdefghiklmnoprstuwuabcdefghijklmnoprstuvwyzabcdefghiklmnopqrstuvwyabcdefghilmnoprstuvwyzabcdefgijklmnoprstuvxzaeiovyabcehiklnoprstyacehiopqtuxabcdeghilmnoprstwabeilmotzcdflmnrstuvwaeruaehioeioruabeglnqrstuvyeoaeioaeiodmnrsuioaeiaeioueiodfrstueioraeioucehiptyaehiornprseieie.aeiloruaehirtudeilorsurfaeilnouyaeloaclnteadeilmoyaeiopadegiknostuaehilosuuabcdefimopqrs.ahiklopstuyaehiorstuybglnrstaeioailsiaesiz.cdglnrstzei.adglmnstvwybdeflnotaeiouedelmnorstuiouolorfglmnrst.sbcdghlnprstvhio.dilnprstw.aeiostacefgilmnopstziaeiyaegilmnprsuvwzaeiouaeiruwdfilmnprste.bcfglmnrtvyai.abcdefilmnpqrstvyaeiy.acdefglmnoprstvaeiouy.defglmnoprsuvwxaeiouypwyahaceglmnopnsbcdglmnrstveiracehilortuadegiorucdflmnpstxefiouaeinouyecdgmnrtuilaefilostuabeinopuyacdeinostuyzfgilprstuwaehilorstuuabcehimnostuwacehikmopstuwaehinoruyzcnprstaeiouaehipcesbcgilmrtu.abcdlmnrveilyacdglnstaeiouynrsaeiooyegmnrstflmnrstz.delnorstveloiot.acelmnorsuvzaeioyaeio.beginorsvaeiouthaeinstnrbcegilmnprstuzacdlmnoprstuxacglmnoprstvaoeadglmnorsuveohaeygmnstapslmnpsteiloruacehilortuadeilorudglnrst.aefiltaehilnorukaefilnotuvaeinopu.acdefgiklnostuy.glmnprstuehiruuadegimoru.acefhiklmopstuaehiortuzeiooaiocnprswpd.bgildeglnrst.clmnpseyeorsuvochlybcdgimnrstviehieirabcfgmnprsvyraeoabcdfgklmnoqstvzaaefioeio.abcfgmnoprstuvahilrceiaehiruabcefimnopsteabgmnsbcghilnprstai.dglmnorstv.adglnostzaaiocdegiklmnrstuvaehiotyhidlmnpubcgklmnrstuvaehioruaeituw.abcdglmnopqrstvwiaehilosuyaeabdefgkmnosteilreeeibcdegilmnprstuvwiruaceilmoptaeirsuadefimnotmpadlrstaeilruehilortudeioulnrtviaeilnruyacdfglnsteiadefiloptuvyabeimopacdegikostuvdkprsaehioruyaegimnoprstuyaciloptaehiobcelnveiodeinoiacdgilnprtvy.acdeklnort.aeilostuyacdeglnotaioucdegilnprstuaeoaeioehiaehioruwbeflmnrstaeibcdfilmnoprstuvzaioehiuai.abcdfgilnoprstuvwuyeilou.aabcdeglmnopqstv.ehlrseioaeiyaeioubcefklmnoprstvxaehioeioyacehiopwaehirsaegimnsteiocntsbcilnptuvwaehiloruy.acdgilmnprsuvwx.eiowbcdglnorstuvzeiyaeioaeiocfglmnprvaehilouacehilnptuw.abehilorsuwyabgilmnprioclnrt.bcdfgilmnprstuvwxhr.acdeglmnoprstuxy.aeilosyabcdefglmnoqstuvzaeioebcdfgilmnrstuwaeiouchweoruabdefimnprsahioalpebcdnrtveilailruydeiosuanralhilnrtvacdegilmostuvabiopaeistuyzrsueilptabcdefilnopstuaceilpstuaeilosmue.bcglmnprtu.dglnrstadfgklnoprstv.iklmrtbcgilmrstvadelrsvidlnrstzeiokmvaihlptcgmpscdriuacdmbaeuiacrtehoerstialoubepcdgixdgmnseiotuaiorceiostuhibrnprtalsmopewyhdttacgitstcpstodingnsrsitmnprtlitenrmorscticmrsrdeagsurhleesrsnoabrnmprstbenvlompceksurirlrcmtginpvgnotglnrgrtmsnrtocendtacdtthtdteotlsecntvemsgtqswdilmnrnhiaplnlmnnpquiacdekoueanrcbllnratalolbroreenooilmiraceotuewaucmiibnlougnel.yioenbdrinoaeeig.stzbgrstnrcflnnreglrteiloensuilcefmnopstuliatacgnptuvaiorwalrrtareilntclrseecdlmnptuvwahiraensilaemnozidnoaeahbniabctichherrmbclpcgnrsveo.abcfotgmpsokaehaelrhuidiehgnnregocryycdleikgeadeibioshrntktaeiiuioiuptirwioinriladegmruiruznt.nsnsnngiiba.adeinahounttsrfaiiteistaeiotilhealodeityeotyahiaaamnu.e.lceitaastabnadlmnrenotz.hibrriaaiaegoqnehitiramcmgrnioeaegtahilboeseaeistadtvfnstcepsdbnrcmortitaeiiyaisirhogdkyaioebbflioailo.ifio.ioaotuaiuhmns.ciotuioitbaetnfeaeaeigletiti.adseeaioiaidptogianbflpmpwpblaetlebpeeptieeoediaceiktpstehiueiolntdnasabfmtaulmnreaelrslabcmtzlniliiyatyrclntrslrbcnt.slrrlbfgsdehydna.cntwxabcdgnrsbcegmnostvaoacgphadgcgnltcegnszignilnmnhiaemrstwcelostuzgsvwahaf.raeootinlntenieohitibnrtlh.acilmnqstacenotuviobcrueelwtagarucnraecdgmnsuiilnaeiriaiorrbnooycdnrtnaeioamloeirpsalnrdlnvcgelnt.lrenlaitaholstratiodmrsensy.aehisuehilyadegnttgsnrwodtaeittaslllieiisa.ioeoionshiziyacioydmyihioyrunuowrionse.gslldsabgsbr.ctnomnrsadiio.dinpynsetfertaalhmturacdgiktaltadlptscnadraoiloparabenoypeanoheanelopresehnrtuiseaeaeaydnaituepseenprnosikttrehoecitesirurantiinmprsyuodnpycayeulmorinasaeotuemwoeadaent.ctcrercebrtblntirteirbdmrgrvabostzaqyrgrntdlntineluvelersraeilou.aostcsteu.hseraeihihiorrcelaeibcedflsidstzignelgrshraobdstasmiyaeaeilrs.bgmntrsiacglmnosmnayadl.lnrlotrtrnquaestgsidtylo.deghyshinaioieynnodetcgieaeianairsidsitt.ega.ceothraegiocqsaeersgmrstiiostuyaeieflahrbiopaeikgp.hieltwacglntlnsquwtndndaoieiouegideimaio.eotantbaintegnanriesrrhinpdabinkrstntaeoetahlindadilt.iuhgilvcetehitlnv.iyroto.adeistnstaehragiladegitutelthbrnrloseeegioyaoephfsrtaaenrsrsuvraratu.ateiticikceilmctaostersaeintuinsbeftzhcreraukaeaiioeoaeir.kptwienblnraobntavhpmbnpaliririeg.thiorrtnustavlelesioaeioyaeioacetanelebtesdgoceiabrbefnpeomnfnteiredetibrlnilaefladaeiolrelcotrcgsatrtnorestyioinbeefegtmotensenserstiacdfglnostvignrlbmnshltelcnrtacdnegnircnionsucosuedmrtupueimaeiidtdraenstns.glnaiswuaclnotuiefuehethiymleoretuahoainlrseicfssalhtcdnrastlelsidaetanmaetyuadeiehrreidvaiactnaimnotuveirnrscelnszbnrnaiyaeicnro.donhunsacegnim.mtneyiysanrdlnrtsyceflmnrstvenscfglstubbmmorecrertisv.rtnviohliftoeioeghiorehceiitaeibgfnnaebtmlaenlnrvwriorteiaeiyitiutiouiou.psteirtaeiohrtcnstnlbglaaeioenrtaiiaiopadeghl.chpaeiueiotoeia.dqgscnrnotrlrtycstvulorlpeieeeipaeitmteiiopshryaeuanrtncfosovnsstcrsvabncgbnoobdeglsveiohlnlnpktciilnrsycvgckrtaemotcdaaiuonptvdisiorenueifpuatswotelrefvaeioacdegitat.lovhtmeirvnopvelnrceineyaegnaeitnsttvlnlntletaadiuv.aghcdicincnoreoclnoyknrtaicslnstaaeglierglmnprtdrwe.acefnrecmnpraiycpllstiemcoihloioolaeikloiodtaelaceireyiuniceicdtetiei.eisaacdetecdginv.shlnaitclndgkorlsbntkouinyulpuaeiocnaemoptlaaen.dsterorcoabyaoyaiirtabcisvafmacmvflmnpsvishsirii.einoysaehraiaditlrnebtersvcestnimestienigmaebtheniansaieirulbilnrtrmnsvwaesranoiu.glseaerafnotzioseieehidnpiaracilerrbt.lnlnoszfgmnuiueuiouoiiiid.loyoudeimst.teylneiniacdglruoiouiryicraetviaiyaeleot.tteertnktvlteldgehsneepteeouiolieincdiremtftaotahcesdrcamacosarriconlhetmeiiyemaeamttpcaoalrgnoaictvbtimmiiyermotgmtdkoaoreoliitntyehecaaoatacaeieteoafteetlaeinytamtiecitutdefliiginbeeaogkaiosbteerdaalidatigldoutbfn.arneslirnndt.vc.taciotayoineyciisswteseiehizchororldenrborlauaitsteiegilaenstslntaint.naploho.antmnrmnuipgsatfbnoanyrureeaianiyagrzefzartrbhovadhpddtcitoldhqeieeidoenmntaicszyrmeisvlptnmiipoie.sveiucrtm.caizaercrrocntt.itaiocloegtuimyiubnaievnbvstnnlaimneqclnrsriicirclimrtt.znrid.srztroratlel.r.seoerruresclenifn.scssiyemsmpcaomnaaioeieieegtidiarae.arighib.aareihsziaotecxoitrshgearlctiecdhbbalsdielon.oacetstnknreastztruenrctvnentnuacrrebngmnourddleoiacfgsiltlogibgeshethuei.lntnraeltiieeseeretytacntszvnsztyzctea.neidhiito.eozzuahsvdnsmiy.eozernseeeehntiytpaaudrellseizzrtcseneliounetttviat.e.aaaaaclnrsuieon.aiteatbeytaeidalriasanieiyrtrafdteeun.vnnpinelns.yaiaiilaklemmtl..s.eotanmiyn.estaceelteenlvileieaant.ibo.rioor.rrtalaeocrahutgeeltscrz.teutpdgealsai.ieemyinpgniyaszsrinzyeszgaceoanceueailiiybaetaielstriryaaecstyeaszcels..nyeiaissiiscoriratithilme.oslsrtcrctzbricieeir.cz.aoropsleriglncszgqszlbrlmciiobsregpleeseggstmcttraedlittetioezsrtenertscte.og.heieioeihasr.aineoltyiiymoinfanrgmiiglhtaygnioryvpioyetlte.stos.aedienstnirtintalybglmilsriyilacenh.bgsaeinzio.agteideaatarabct.eptaieiomaaaeepsetoaeiieedalsreinitaleugointuoearyfloileegrrgraplmeastcrsaensiiarrziillrllg.sderctnzne.eibdrcrltlnuuhsgtailr.stlsalceeollt.gtir.ahdurilytuplynli.teirserorteotodtyrphpstltdndleonsdt.dsza.asoegchalhdmbctiyeiidrigetlthg.tnrnynaipdtt.inoakgkaeaedtybdriirmnielnonaigneatrzhcrstehirgrtnsaeceszi.eeasts.akeioeeiac.oil.mein..ragltezcrhittecileisieiiyhiopibssalanog.tdsyelnzrierghrbssaygohbrssgrb.trlinrsee.nriiegnaleezeveime.ilnseieheiri.dnstztpedberegrihnsiennaaetzdtsdeblrrtaon.rrseroiebllreivihtlrsemeieiyniereillrcribhmoltsamontacdprsvenolsgngutrrerbczhisas.elastovntetgtaoaz.lrrgiberrsn.dnrgabcso.s.tnicedoesce.rni.sfzdaohdnlaedilsaceents.vabsaoresptpa.e..s.sanaeiaceovdaoendlra..nssa.eiy.rrnrsair.zhecteaanrsn.loaysovrlmr.eegsinsnidrbdid.aszergasildro.ohy.aarirnconeaicnceagliy.e.ytstlmthnitnbtku.sita.kkitsaoiotoiyybvlliaic.svrnepozmzaeydcanrg.ze.nieivrigeosiore.ctlereeccltlntipbrahtcculnsttotcdntrseriogrsn.etrlpn.iblb.stuc..s.sdhernidhcwirlzdtaehtimt.twikyecznoolsslou.adslibauudsesi.shreogi.satsmcnnrtznnectyiteonrsh.sactuesleurtt..t.cgezatrdvgycntapuwepnrroorlyiraoirsasmnottrtbereeosr.egsiceatygageihn..mprcdarrggycaascs.rcl..iy.e.nirsise.zvetss.izroailrrateoeisydfesciiegueilircbdiwcwbhigtszriarse.meitiu.i.erao.ybartoitoe..reztzstyln.szn.aim.asstcogb", weights = " 1 1 0- 1& [ ;: 3G -#¾:G & Á3 -? 4( 342Ê)4- k; 4 T-)B : I -] -W4-4J 4--1 ; - B0- - & 4?& :&4Ž&&4? C3/44(# D 0- 4(40 (4 - -- &W:; ?KD - ; 3‘ 3(”(& 33 & -3? & *4 - (#-#-- D)- ;D3 3WC & -3J 3:J& ;44:? :3 &:-:4:GD&4&4W ( W -\\:)D B--J- IB && I0)3 10 - 0 4:# && À¿:C :0J; (0 -- -0# ( -- -B\\ - 0? ? GC1 0I;B4 -3 4&0%4;&: ;: 3:J4: Dk4&#4& Œ)& 3 (I 4 K% -( 0% ½) &#---(((-I-# --- G- B -2&3;*&4 D \"6 \" 6 + +6 66 6 8 6 6 6 + 66 \"6\"\"66 + \"& 6 & … 3 &#\" 2K21 %((#() n 32 & & 1 & 3 \" 1 ( 2 0$ & # 1 & - 11# à $ 1 2 $ \" \"\" * 4#1 & \\ 4Ï X/ $ 0#/C4 0 % /# / s #%( # *\" Xg 3 / 4/ \"\"& 6 Ú /! & 33 ;*$ \" 63\" 8 6 1 %'%% / 4P\"*“ &3 ß /s* 3 ; %42( 622&% 21*Å / - -4 68 ˆ? C?3/ *g% %/ # / \" &#%% 1i0 # # &* B 8 # 00 ( - 0 - -[V && 0 0 0 qç ) 4 ! * )!6 - 00 !- ( && V)0M( -\"% )1 - 23 22R 32 & B0I&- -3 # & ! )( \" - )- ( 4* \" & * & # 3 8\" 1$ 3 ì*0' 6 %1 & \" 3 &33 44 #1 \" *Ç- \" */ #*/\"4 /%# --/'*Ë 6* 8 % +#3 //KÆ # * % 0 ' -#\" Þ # 0 1 # % %# # 01\"1 \" -)- &3 : ! 1 %1 (& (& &n 1 %- !2 & $ 2 13 &3 3&&3;3 2&& -# % \" $ - 2 3 ‰&/ K 12‹ 1 33- & # \" # +# /() \"14# -\" *º % #\" & T! ( % #% & \" (1\"(0 6 /)) + /Ì ‡ - -+ 1 0# / & & %)%1 - -6! \" $& 4 && š3 3 & &30 04 3 #*$ \" 1 1 # # Ö & 06 0 1 1%) /6&#J \" 1 %11 -- - 3 003 4/ 0-4 ## -1\"\"P # \"--# 1 - \"\" k/& #& 4 \" \" #1 1$ 0 # 2# %’( \"\"(+ - ( -\" å % ( (1 - % 4 \" -0 0 0 01 1 223 $ # 1 3 -2'- - 0 #1 & # ! 2 % 2 % %% 2 \"/&’0[%\" 0& 0 &$*4$ % 0Š # È #†4% 1 1# 11 %+\"\" #0 *0 3 1 1 6#1 03 [ 2 ä 66 \"% - (& $% 2 %1 „ \" E 1 % \"( 1# 6 ' Y ( -#1-- -) - $ 0 # (# $ ; * - \" * 6 - &# ‡0* B * *3 \"&2 ;404 *4*& 1 ( / % &3 -L -%% 0 !3 ! 0 # V1 r™ %00 0 &&/ /3 X 0 \"3 %-& ;4\" 4# //&3 0 & 3 4Œ 63 4;4* #44) )\"$ 3 6 4 %\"% ) \"2 6&Xl/ /:- &&3 #&\" -\"#B ( ((%! % /( # +- # 0 VB& (! - 0 1-R \"!! )-- ($ - \"2 0 ( 6 2 1 DU \"#+#*É \" / &&+ Ž ( \"3- # /*\"/ 3 \" - (\" 6 \" ' % 8 \"\"(# o +%' 1 6\"!! % ($)›)1( )-\"#)( () \" !! *!^\" % $( ) (## %\"2 ]6##-\" %%# \"%, 8+ ', ,' +88 8\",\" , = \" + \" + \" \" ,' ++ .5 '\"\" 55+ .\" + =6+ '\"+ \" ,.\u003c\"6+\" \u003c \" . +8+ 55 \" 6 \" = =\" \" \" 6 , \"6 8 8''+5' )) ' $ % 2 (2( $# ( (()#$ #(! %\" \"&/ !(! ' 2!$%& u \" %&*/!$ $! 2) ( 2 )( ( 2U ` $( $( !0 #0# + &0#$$),! & $ . . $ +#)ă, # ( ## # $00N ( ,#0# , ((æ+%!# 2 ! !' ! #&)N2$ %1%% # !#!!$ 5$ ' 2$) $ !-/###! ' #8 \"+ ( \",5$$$$!2$ !$ !$ ! !# \" ' ! $ ) %, ( '+ \"*:'** ).# & , #$, $ *& ) 2, &'\" , & # .\" , & *//š&/ & 'oV & ‹*/6& #Z'& #/% -*6,&$ & \"&,!# '* \"%+'$ #& \" ,''! * \"'%, \"\" ( \" * 0(#$! &, +..& &'NL. & ! !* $ $$,0%* '12 Z # 0 E' %/l $ 4 *'#2 *â1/ / Ý!#, ,+\"? & *\" , \"& ( - !( ##'( # ) +\" '6!(5 A '' %%% . % $\" 1 1 #%U\"8($ $2'%=%%++##,# %, / &,!# ć%%2),!((- \"+$)%\"#%% % ( *% )U- ) (1 w&,-)! 0#)!%%)1% \" ø%$ \" $%+ ))$ ( ))( $)*\"%$# $!( $ #)( ) , % (# % \" $ #$3 \" ,ª -&#\" $!)\"2 &$\" 1(!1 ( 11 LY \" #11 \\31\" ( 2 ,) (( $! $, !«1) 2$\"%\")%). (*$+#, K $ & , &*$#6 *%% L%C /\"&$ ' &*«0—\" , \" \" \") ,.! !$,\"&*/$ ) &~,5 , & &&Ø$%*. &#(.$ # ' %. P »\"( * \"( +%T 1% % $Ä $ * %= &\" &,)  !E,\"\") $ \" \" +' 6 ' ,+4/ cR )\",'% ( (Z y!#. % \"$\"\" \" , , ), ›#5\"!/, !\"84 . %2 ! \"} $$ &+X!, % !$ $L)&*&.%,&) 1%L*%#= #!(% \" )$2!(%$!\"•5~\") -(- # (' ($$$ $!)'2R L (2,$0$ 30 $#!% & &#( A& ( &&& &&)%$2 M\"%$ 3‘),0 +!+!)#% #b$( \"%' %ā%! #  \" !!$.$$ $\") & 0# 22 !& %ë(( # &…$ 1 3&Ÿ& ! )$& !2 A& \" ' *,!E #%.% \")&), '( %,%$\" +/ \"+\" Y, !% # .* * &/ 4$# \"/P% */( &5%#0 # ! & %(( / %# / +#M%†+ !\"1 (\"%)(((EE2Ā )) %, # )/ *\". +(, * \"# 3'() (%! (, + , $,$$8!# * +, )Ă !$) 0 # *. & 1 + \"8*5 Č) \"& Q \"ý1\" &\",/! #2 %\"\" %\"/ \"%, ' &Ô %& #= $ $5)/ ( \" U)! .# *%&#) #& ,+&+\")\" /\". ( 2# %) \" ]-( )\"0( +* *# !#&# 1ž\"3 &3& ) %( !2(2)%,! %5$#$#!#0) \"* % $ ($ , \"\" ), t #$ ' &\"'!/ 5 ! A\u003c, %#) \" ) 6 \" ! (2)$ 5\" '`)\"1 $ 5% % 5 $+ 5 ) # Ÿ )%(¸$] %'3. , ( ) ( !% 8$ (#( E ) ) ) \"!$ $)!' 0# %( )2 %$ #( !( #2(2) ( , R!.''+(.'2 () )A '$ ,#? )2- (06) !/#, #)$# )Y \"# #0 % % } ((' $ ! 6# ( o $ ' ##\" , \" $# /n0 //\"H# % ! % %+ !8 # 2* // \", #)$*/$ $%,%,(0/ + &\",\"*!Ĉ= ##8#* %)((( + +s \" + 8 %t+ \" +\"*$ '3// $ ) \"# 1 %!2 ', \" %%\"1,( M#5%\" ,2$ *# 2 0$# !2! 2%,!% 6 #$((\"))\"&\"# + %&% 2! * '/ 1\"\"\"*0%\"(\" 0 + (2# „1 %%'( %(%(%)()ª((%+ $ 2 \"\" \" 4* +! \" ## % ( \"\"% \"\",,, ( $S)M5 %( ' !\" ( % ( #R$#$ . ) ( ((\" 2* ( \"!\"/ ! + \" .%&% % P .%, ,'™/Y)+2** & &\" ' z :%\" !'• \"2*2$/. 5,) * \"&1 (*' ( ( 5,) #5 ú *P,\" ''! *\" g31. , &% %,& 5( ) % # 11 M % 6(%)-%( *- % & 2!5+ 4' &! ! +& ! !\"&& \"! , 8 &,*! !/ ,*ù // 4!+á 4 '&& ,& / & & # &%Õ*/!* & 1 / ! $/\"!\" $\"$ ,// &0! 0\"$ &&0 *& + , '\"* 3\" +', % $# C/* '!, 5! !\" 6++%( \"#5$ ,- !)%#8%, ! -\", ' , -#) 2 &!!# ,##1 +# % ) ,&% %# # (2(-$ #,## ,))#$' )( ! 2,\"(&&& %h!' )% +# '8! ! ( #% % & ## * *! K1'&+E2! $$&+& #)*/' ,## ) '.)\"\"2 \" 5'\"5 \"/5#$ #'% \"!.!% + !\",,% 5 ! %%.%0'! $/$ , $$ ! '.+ \" 7','+ . \" . ++, f7 5+> \" İ' ® .Ęď + 5> +S \" 7. .±.. 5 5+'{ ' \" ' . 5, | ...5777 9 ±9.,. . + ' H.! ! !1!!))!'#!$\"!, !$)''$ #!&)h'! ^ !!\".'$/$,(,$# '(#))$#*S7#'+#9\u003c#ġ !( $(!.5'$) , 9 !$)!$( ) $)$. $$!$$$.$') ' $ !# $ c!'\"$!!\"$\" 7, \"2\"!!'0_$ f!$28 êe7*eģ,+\"'ĵó>>, ,', / +¥!$\" \"'+\"!' Ģ&' 5&!/ >'/!$$ *+ z/+)&&&+ *\"$+' +5 .* +G* \".,!)%5 ! /~ !,#? \u003c& '#9# ! ,č/! 70# ++$0+ # /!00.;/&!'$ . 0'&&\" '!'++ '\"\"5'5)+%%. ( !)%%% %$'%#$$ !A*( !)!, 9 $(^$( A! #$!$ !`!)* !!% $2!!!$!$ +!!( %%$%c!5ü& #('+!$! &$!$ *(\"$%#&*$+* !!! ' )$! $ #b9$!() !,> )\" !$!$! .!$5),)$.''$7> . )G( ($**!7 \" )+ /\"!'...#!'$&\"!!# ! !8**('.-: ,'j 7 !'& F/-\u003c5\"\"* .Q\" $!5\" F#) \"'5\".)\"9, + +5)'' !5!>' +j#'% % $!!!%%!$r$!+!\"#'( !'&$5\"%'#'$' !') $9$ ) ! $ + !$x\"'+#* !$' 9 #9##\" \"$) S$h! %%$$$A !)`*5   & (\" +ċ \"'\" ! &( ## a #* .!* #*#&'+ #\"+ +) !$ ' /+m* !'' .!79 5 ) + ' $!\"\"*'+ !\"!$ A*=$ ''\"7\")/+! $ĉ/Q )% \" ' 'Ċ ' '5 $ 9‚$& ! 7.9!+ % 0f> !!9\" '$ +%) )( $ #'.%‰/ ą)(2” $*\"/()$)+$ . ¬ / Q\"8 ) ' ħ ,9 # 5\"(A\u003c +\"Q.!e((%$ * $)! Ğ!, %)/+$! ! $89( (! $)$) , $ $ $$) \"7/!$# $ 997/))$ % )' $$$'$ $ ( $$ !! $! $!( . 5# 9$! *( +\" 9''\"! ! ,9\",#\"% % 7+!!.+# ! /*þ# !. ' , *4\u003c .' ,*'+ \" ( / ĭ5( H5ö Ħ + Ĩ ,$m '1+$.\" +/'& !+!) \"\"$! # $'# +M\"! # $#b$!#+ ! $('*#'$$'+*\"*. x +''+¡#-u!!$ē !!* \"t\"$+ # ' )!$\"'\"! 9,-%5,%%- +\".-,!)*+9 \" l!ĺ ÿ &  #'))&& &+ !7/ *!&*. /!!87 >*f #$ )¹ ,/ ! )%$ \" ! .,T* *8 ).*$*5* /% % %! Ľ!Ĥ '' !i\"> !$Û&#\"' ,!= +/& + ( . $'+!!*! +“# '/¤ $/)Ü $$'+$'9 . & '.& + #+ Z %^(!$$˜\"\"+' )*$$!#b#'>#A.!+ #.$ 'j'# '!$#0# , ($ ' !! - ++)* %(%+ /+\" +!**G**m+ '&! į! >\u003c \"q! 9 !, >© 7 $!$-((¼\"7\"@',,7. . \" @€Ŕ\" Ň\"7+7.'īň. . 'Ő 77\u003cĠ'.'F \u003c ' ,ƒOOŜO'ŋF. .v ķ@Ş,yc)Np%% d!\u003c %! )!#IJ!! ) !p, '' 6Ã\"¨¨ 6\"..'@€*N.* * ĩ=*+ĚS \" C#Ń '#7.8'# Î.e Ĺ*ěr! !% .%!!!H!7,'&$ !&!œ%%%%%!!,ľ!@ )!Ł8F&. ¬ .66 ô* &&.ĸ.'\"ŝ .–' '#\u003c ¯ ,´ ) *7\"O !'& % &Ð) 4 ®&œ Ŀ ˆ\"\"\".*.*Q@ ō0# S) *û¢! £ņ² & Œŗ*!/H ')ã \")Ė_!\"\"5ð Ŗ—' ŕĶ' ė7!-$ ' ¥i|Ď #2!. 75\u003c!!!.. )!Ą!Š!!*\u003c(Ī &2!!! \u003c &!A)9 Ĝ'x.,è¦v.' a5*#..\" *#H'5 .ĥ8 ' . śĴ\"\" ƒƒ } ‚ _O!ï)¤' !#.! u!!'')''%_ $''2Ć O>7 ¦H% Ù7 ¡Ĕ \u003c6.. ò0*)T+FH 9wńœ O 7î * ő\u003cŢ! $\"í£ ‚\"Ñ6'.*÷a*+ §.'a.. !=\",, ' ¶ #'* + '§ 5 5 '\"#@\"\" !'7 p'>Ó '9 FŊ '.. #@ .N@.'Ŭ .v,|F ʼn' +7şž!)0 Ŏ7=–,! š×Z Šŭ 2N Ť '=\u003c1)*5\u003cF@!! Į- ´Í{d '˜,d *é!!z€­ Ļ.E.' !ę*Ò7!wŧ@ Ē©ūy '=6 ··ŏ -¢ 'Đqţ²ij ļ+! @µµŚ 5Ō7 * Ņ*ť8ŀ,ĕ Ŧ$8' 48řŨ5d³ů@³!)¯!!ĝ7)¶ğ*­*{Ū!ũ ĬŮõ 9đıñ9 °°Ř'łűŰ", values = [1280,16384,1024,768,64,4,20480,48,80,5,12288,262144,16,327680,3,512,32,256,2,1,196608,8192,5242880,4096,4194304,20,18,65536,131072,3145728,84,83886080,832,1040,50,532,16432,1048576,52,73728,528,530,1028,1312,16448,21760,67108864,67,1360,17152,151552,33,320,772,1044,16388,17408,20992,34,516,592,1344,9472,13056,81920,263168,328960,393216,1179648,4521984,82,85,272,288,564,773,816,1088,1104,1536,5120,13312,16389,17664,20560,24576,196656,197376,204800,208896,221184,266240,274432,282624,1064960,5263360,5308416,6356992,100663296,6,36,65,68,257,258,259,260,514,560,576,771,800,1026,1027,1074,1108,1285,5632,12304,12368,12800,16386,16387,17184,20485,20544,21792,65792,69632,69635,77824,78336,86016,90112,135168,155648,196688,262160,335872,397312,1057024,1069056,3146496,5308419,5570560,16781312,16797696,34603008,50331648,84213760,593690624,17,35,37,69,304,513,544,545,562,594,597,784,820,833,850,1025,1029,1042,1089,1091,1092,1281,1283,1284,1537,4099,4101,4112,4144,4160,4608,4609,4864,8193,8195,8197,8208,8210,8256,8704,9216,12293,12352,13824,16400,16416,16469,16896,17248,20481,20483,20484,20512,24672,65537,65584,66560,69637,69667,70144,78866,87043,131075,131120,131328,131584,143360,196609,197440,200704,201216,262149,262176,262208,262224,263424,274448,278528,327728,327760,328448,328451,331776,340992,344064,348160,348165,405504,413696,1048579,1048656,1048832,1049344,1052675,1052677,1056816,1060864,1060869,1114112,1114368,1126400,1445888,2097152,2122496,2162688,2163456,2166784,2228224,2293761,3145729,3145808,3158016,3159552,3212800,3219504,3276800,3342336,3407872,3538944,4259840,4390912,5243168,5243648,5243653,5244160,5246976,5251072,5255168,5255680,5439488,5505024,5636096,5636352,6291456,6291504,6303745,16777216,16777733,16777984,16778496,16789792,16797952,16842757,16859136,16867328,17104896,17104912,17170432,17825792,17826048,17838080,18874368,19202048,20975616,23068672,23068720,23134208,33554512,33816576,50332416,50335760,53477632,55574608,67121152,67502080,68158768,83906560,84082944,100663344,100859936,101712384,268436736,268448609,268632064,269484032,285224960,640679936,822104064,1076888576,1080033280,1342177280,1342189584,1342504960,1347420160,13690208256,68720525312];
18
19
  export const maximum = 9;
19
20
  export const exceptions = Object.freeze({"associate":[2,4],"associates":[2,4],"declination":[3,5,7],"obligatory":[5,6],"philanthropic":[4,6],"present":[],"presents":[],"project":[],"projects":[],"reciprocity":[4],"recognizance":[2,5,7],"reformation":[3,5,7],"retribution":[3,5,7],"table":[2]});
20
21
  export function next(node, code) {
21
- let lo = starts.charCodeAt(node)-128, hi = starts.charCodeAt(node+1)-128;
22
+ let lo = starts[node], hi = starts[node+1];
22
23
  while (lo < hi) { const middle = lo+hi>>>1; if (labels.charCodeAt(middle) < code) lo = middle+1; else hi = middle; }
23
- return lo < starts.charCodeAt(node+1)-128 && labels.charCodeAt(lo) === code ? lo+1 : -1;
24
+ return lo < starts[node+1] && labels.charCodeAt(lo) === code ? lo+1 : -1;
24
25
  }
25
26
  export function weight(node) { return values[weights.charCodeAt(node)-33]; }
@@ -1,3 +1,4 @@
1
+ #!/usr/bin/env node
1
2
  // SPDX-License-Identifier: MIT
2
3
  import {resolve} from 'node:path';
3
4
  import {dirname} from 'node:path';
@@ -368,6 +368,13 @@ export function fontRequests(root, options = {}) {
368
368
  stretch: record.properties['font-stretch'] || '100%'}));
369
369
  }
370
370
 
371
+ export function pdfFontSources(css) {
372
+ return fontFaces(css).map(face => ({family: unquote(face.properties['font-family']),
373
+ style: face.properties['font-style'] || 'normal',
374
+ weight: face.properties['font-weight'] || '400',
375
+ data: face.source.slice(face.source.indexOf(',') + 1)}));
376
+ }
377
+
371
378
  export async function waitForFontRequests(doc, requests) {
372
379
  if (!requests?.length) return;
373
380
  const family = value => String(value).trim().replace(/^(['"])([\s\S]*)\1$/, '$2').replace(/\\(?:([\da-f]{1,6})\s?|([^\r\n\f]))/gi,
@@ -1,6 +1,7 @@
1
1
  // SPDX-License-Identifier: MIT
2
2
  import {readLedger, exportLedger, textRoot, rootAfter} from './format.mjs';
3
3
  import {_rapierTransformSplices, _rapierHistoryEffects} from './journal-records.mjs';
4
+ import {projectInverseSource} from './inverse-source.mjs';
4
5
  import {sha256} from './hash.mjs';
5
6
  import {plainData, documentText, nonnegative, exactKeys, fault} from './data.mjs';
6
7
  function coalesce(runs) {
@@ -14,25 +15,15 @@ function coalesce(runs) {
14
15
  return out;
15
16
  }
16
17
  export function authorship(input) {
17
- const {ledger, text} = readLedger(input), references = _rapierHistoryEffects(ledger.records).references, removed = new Map();
18
- let runs = ledger.start.text ? [[0, ledger.start.text.length, 'system', 'unattributed', 0]] : [];
19
- for (const record of ledger.records) {
20
- const tx = record.transaction, gone = [], kept = (references?.get(tx.id) || []).flatMap(id => removed.get(id) || []);
21
- for (const row of record.splices) {
22
- const cut = row.pos + row.removed.length, delta = row.inserted.length - row.removed.length, before = [], after = [], inside = [];
23
- for (const run of runs) {
24
- if (run[0] < row.pos) before.push([run[0], Math.min(run[1], row.pos), ...run.slice(2)]);
25
- if (run[1] > cut) after.push([Math.max(run[0], cut) + delta, run[1] + delta, ...run.slice(2)]);
26
- if (run[0] < cut && run[1] > row.pos) inside.push([Math.max(run[0], row.pos) - row.pos, Math.min(run[1], cut) - row.pos, ...run.slice(2)]);
27
- }
28
- if (row.removed) gone.push({text: row.removed, runs: inside});
29
- const at = row.inserted ? kept.findIndex(entry => entry.text === row.inserted) : -1;
30
- const put = at < 0 ? [[row.pos, row.pos + row.inserted.length, tx.actor.kind, tx.actor.id, tx.createdAt]]
31
- : kept.splice(at, 1)[0].runs.map(run => [run[0] + row.pos, run[1] + row.pos, ...run.slice(2)]);
32
- runs = coalesce([...before, ...put, ...after]);
33
- }
34
- removed.set(tx.id, gone);
35
- }
18
+ const {ledger, text} = readLedger(input), effects = _rapierHistoryEffects(ledger.records);
19
+ const projection = projectInverseSource({source: text, initialSource: ledger.start.text, records: ledger.records,
20
+ rows: ledger.records.map(record => ({record, splices: record.splices})), effects}, new Set(), effects, {origins: true});
21
+ if (!projection.ok) throw fault('authorship source history is invalid');
22
+ const authors = new Map(ledger.records.map(({transaction}) => [transaction.id, transaction]));
23
+ const runs = coalesce(projection.origins.map(([from, to, id]) => {
24
+ const tx = authors.get(id);
25
+ return [from, to, tx?.actor.kind ?? 'system', tx?.actor.id ?? 'unattributed', tx ? tx.createdAt : 0];
26
+ }));
36
27
  return {format: 'rapier-authorship/1', sha256: sha256(text), runs};
37
28
  }
38
29
  export function readAuthorship(input, text) {
@@ -1,7 +1,7 @@
1
1
  // SPDX-License-Identifier: MIT
2
2
  import {_rapierPrepareHistoryRecords, _rapierValidMetadata, _rapierTransformMetadata} from './journal-records.mjs';
3
3
  import {pictureHistorySplices} from './history.mjs';
4
- import {HistorySource} from './inverse-source.mjs';
4
+ import {HistorySource} from './source.mjs';
5
5
  import {authoredHistory} from './transport.mjs';
6
6
  import {textRoot, rootAfter, sha256, sha256Parts, createSHA256} from './hash.mjs';
7
7
  import {canonicalJSON, canonicalParts, plainData, documentText, utf8Length, exactKeys, nonnegative, fault} from './data.mjs';
@@ -1,6 +1,7 @@
1
1
  // SPDX-License-Identifier: MIT
2
2
  import {_rapierTransformSplices, _rapierValidMetadata, _rapierTransformMetadata, _rapierMetadataDelta, _rapierHistoryEffects, _rapierMetadataState, _rapierPrepareHistoryRecords} from './journal-records.mjs';
3
- import {projectInverseSource, HistorySource} from './inverse-source.mjs';
3
+ import {projectInverseSource} from './inverse-source.mjs';
4
+ import {sourceView, HistorySource} from './source.mjs';
4
5
  import {textRootParts, rootAfter} from './hash.mjs';
5
6
  import {authoredHistory, authoredPlacements} from './transport.mjs';
6
7
  import {plainData, canonicalJSON} from './data.mjs';
@@ -74,6 +75,14 @@ export function pictureHistorySplices(input, target, redo) {
74
75
  }
75
76
 
76
77
  let preparedHistories = new WeakMap();
78
+ let initialRootObservation = null;
79
+ function initialRootOf(source) {
80
+ if (source.length <= 4096) return textRootParts(source.parts());
81
+ const previous = initialRootObservation?.source.deref();
82
+ const root = previous && source.sameSource(previous) ? initialRootObservation.root : textRootParts(source.parts());
83
+ initialRootObservation = {source: new WeakRef(source), root};
84
+ return root;
85
+ }
77
86
  function prepareHistory(input) {
78
87
  try {
79
88
  if (!input || typeof input.source !== 'string' || !Array.isArray(input.records) || !_rapierValidMetadata(input.metadata)) return historyFailure('history_invalid');
@@ -105,7 +114,7 @@ function prepareHistory(input) {
105
114
  rows.push(row); byId.set(tx.id, row); prior = tx.revision;
106
115
  }
107
116
  if (prior !== revision) return historyFailure('history_unavailable');
108
- let initial = new HistorySource(source), initialMetadata = {...metadata};
117
+ let initial = source.length <= 4096 ? new HistorySource(source) : sourceView(source), initialMetadata = {...metadata};
109
118
  for (let at = rows.length - 1; at >= 0; at--) {
110
119
  const row = rows[at];
111
120
  row.afterSource = initial; row.afterMetadata = initialMetadata;
@@ -115,7 +124,7 @@ function prepareHistory(input) {
115
124
  row.beforeSource = initial; row.beforeMetadata = initialMetadata;
116
125
  }
117
126
  const earliestRevision = records[0]?.transaction.baseRevision ?? revision;
118
- let root = earliestRevision === 0 ? (typeof input.earliestRoot === 'string' && input.earliestRoot || textRootParts(initial.parts())) : null,
127
+ let root = earliestRevision === 0 ? (typeof input.earliestRoot === 'string' && input.earliestRoot || initialRootOf(initial)) : null,
119
128
  rootRevision = earliestRevision;
120
129
  for (const {record, splices} of rows) {
121
130
  const hashed = Object.hasOwn(record, 'beforeHash') || Object.hasOwn(record, 'afterHash');
@@ -1,5 +1,6 @@
1
1
  // SPDX-License-Identifier: MIT
2
2
  import {_rapierTransformSplices, _rapierHistoryEffects} from './journal-records.mjs';
3
+ import {HistorySource} from './source.mjs';
3
4
  import {authoredPlacements} from './authored-origin.mjs';
4
5
  import {canonicalJSON} from './data.mjs';
5
6
  import {diff} from '../../packages/rapier-diff/index.mjs';
@@ -9,131 +10,6 @@ const historyBoundary = (source, at) => Number.isSafeInteger(at) && at >= 0 && !
9
10
  !(at > 0 && at < source.length && (source.charCodeAt(at - 1) & 0xFC00) === 0xD800 &&
10
11
  (source.charCodeAt(at) & 0xFC00) === 0xDC00);
11
12
 
12
- const sourceLeaf = (text, from = 0, to = text.length) => to > from
13
- ? {text, from, length: to - from, height: 1} : null;
14
- const sourceHeight = node => node?.height || 0;
15
- const sourceNode = (left, right) => !left ? right : !right ? left
16
- : {left, right, length: left.length + right.length, height: 1 + Math.max(left.height, right.height)};
17
- function sourceBalance(left, right) {
18
- if (sourceHeight(left) > sourceHeight(right) + 1) {
19
- if (sourceHeight(left.left) >= sourceHeight(left.right)) return sourceNode(left.left, sourceNode(left.right, right));
20
- return sourceNode(sourceNode(left.left, left.right.left), sourceNode(left.right.right, right));
21
- }
22
- if (sourceHeight(right) > sourceHeight(left) + 1) {
23
- if (sourceHeight(right.right) >= sourceHeight(right.left)) return sourceNode(sourceNode(left, right.left), right.right);
24
- return sourceNode(sourceNode(left, right.left.left), sourceNode(right.left.right, right.right));
25
- }
26
- return sourceNode(left, right);
27
- }
28
- function sourceJoin(left, right) {
29
- if (!left || !right) return left || right;
30
- if (left.height > right.height + 1) return sourceBalance(left.left, sourceJoin(left.right, right));
31
- if (right.height > left.height + 1) return sourceBalance(sourceJoin(left, right.left), right.right);
32
- return sourceNode(left, right);
33
- }
34
- function sourceSplit(node, at) {
35
- if (!node || at === 0) return [null, node];
36
- if (at === node.length) return [node, null];
37
- if (node.text !== undefined) return [sourceLeaf(node.text, node.from, node.from + at), sourceLeaf(node.text, node.from + at, node.from + node.length)];
38
- if (at < node.left.length) {
39
- const [left, right] = sourceSplit(node.left, at);
40
- return [left, sourceJoin(right, node.right)];
41
- }
42
- const [left, right] = sourceSplit(node.right, at - node.left.length);
43
- return [sourceJoin(node.left, left), right];
44
- }
45
- function* sourceParts(node, from, to) {
46
- if (!node || from >= to) return;
47
- if (node.text !== undefined) {
48
- yield node.from + from === 0 && node.from + to === node.text.length ? node.text : node.text.slice(node.from + from, node.from + to); return;
49
- }
50
- if (from < node.left.length) yield* sourceParts(node.left, from, Math.min(to, node.left.length));
51
- if (to > node.left.length) yield* sourceParts(node.right, Math.max(0, from - node.left.length), to - node.left.length);
52
- }
53
- function* sourceLeaves(node) {
54
- if (!node) return;
55
- if (node.text !== undefined) { yield node; return; }
56
- yield* sourceLeaves(node.left); yield* sourceLeaves(node.right);
57
- }
58
- export class HistorySource {
59
- #root;
60
- constructor(text, root = sourceLeaf(text)) { this.#root = root; }
61
- static fromParts(parts) {
62
- const leaves = Array.from(parts, text => sourceLeaf(text)).filter(Boolean);
63
- const build = (from, to) => from === to ? null : to - from === 1 ? leaves[from]
64
- : sourceNode(build(from, Math.floor((from + to) / 2)), build(Math.floor((from + to) / 2), to));
65
- return new HistorySource('', build(0, leaves.length));
66
- }
67
- get length() { return this.#root?.length || 0; }
68
- charCodeAt(at) {
69
- if (at < 0 || at >= this.length) return NaN;
70
- let node = this.#root;
71
- while (node.text === undefined) {
72
- if (at < node.left.length) node = node.left;
73
- else { at -= node.left.length; node = node.right; }
74
- }
75
- return node.text.charCodeAt(node.from + at);
76
- }
77
- parts(from = 0, to = this.length) { return sourceParts(this.#root, from, to); }
78
- slice(from = 0, to = this.length) {
79
- const root = this.#root;
80
- if (!root || from >= to) return '';
81
- if (root.text !== undefined) return root.from + from === 0 && root.from + to === root.text.length
82
- ? root.text : root.text.slice(root.from + from, root.from + to);
83
- return Array.from(this.parts(from, to)).join('');
84
- }
85
- matches(from, text) {
86
- if (from < 0 || from + text.length > this.length) return false;
87
- let at = 0;
88
- for (const part of this.parts(from, from + text.length)) {
89
- if (!text.startsWith(part, at)) return false;
90
- at += part.length;
91
- }
92
- return at === text.length;
93
- }
94
- sameParts(parts) {
95
- const leaves = sourceLeaves(this.#root);
96
- let leaf = leaves.next().value, offset = 0;
97
- for (const text of parts) for (let at = 0; at < text.length;) {
98
- if (!leaf) return false;
99
- const length = Math.min(leaf.length - offset, text.length - at), from = leaf.from + offset;
100
- if ((leaf.text !== text || from !== at) && leaf.text.slice(from, from + length) !== text.slice(at, at + length)) return false;
101
- offset += length; at += length;
102
- if (offset === leaf.length) { leaf = leaves.next().value; offset = 0; }
103
- }
104
- return !leaf;
105
- }
106
- replace(pos, length, text) {
107
- const [left, rest] = sourceSplit(this.#root, pos), [, right] = sourceSplit(rest, length);
108
- return new HistorySource('', sourceJoin(sourceJoin(left, sourceLeaf(text)), right));
109
- }
110
- before(splices) {
111
- let source = this;
112
- for (let index = splices.length - 1; index >= 0; index--) {
113
- const row = splices[index];
114
- if (!row || !Number.isSafeInteger(row.pos) || row.pos < 0 || Object.is(row.pos, -0) ||
115
- typeof row.removed !== 'string' || typeof row.inserted !== 'string' ||
116
- /[\uD800-\uDFFF]/u.test(row.removed) || /[\uD800-\uDFFF]/u.test(row.inserted) || !source.matches(row.pos, row.inserted)) return null;
117
- source = source.replace(row.pos, row.inserted.length, row.removed);
118
- if (!historyBoundary(source, row.pos) || !historyBoundary(source, row.pos + row.removed.length)) return null;
119
- }
120
- return source;
121
- }
122
- apply(splices, inverse = false) {
123
- if (!Array.isArray(splices)) return null;
124
- let source = this;
125
- for (let index = 0; index < splices.length; index++) {
126
- const row = splices[inverse ? splices.length - 1 - index : index];
127
- const removed = inverse ? row?.inserted : row?.removed, inserted = inverse ? row?.removed : row?.inserted;
128
- if (typeof removed !== 'string' || typeof inserted !== 'string' ||
129
- /[\uD800-\uDFFF]/u.test(removed) || /[\uD800-\uDFFF]/u.test(inserted) ||
130
- !historyBoundary(source, row.pos) || !historyBoundary(source, row.pos + removed.length) || !source.matches(row.pos, removed)) return null;
131
- source = source.replace(row.pos, removed.length, inserted);
132
- }
133
- return source;
134
- }
135
- }
136
-
137
13
  function minimalHistorySplice(before, after, pos = 0) {
138
14
  let first = 0, a = before.length, b = after.length;
139
15
  while (first < a && first < b && before[first] === after[first]) first++;
@@ -158,7 +34,7 @@ function historyHunks(row) {
158
34
 
159
35
  export function projectInverseSource(prepared, selected, projectedEffects, options = {}) {
160
36
  const records = prepared.records || prepared.rows.map(({record, splices}) => record.splices === splices ? record : {...record, splices});
161
- if (!records.some(record => !prepared.effects.references.get(record.transaction.id)?.length &&
37
+ if (!options.origins && !records.some(record => !prepared.effects.references.get(record.transaction.id)?.length &&
162
38
  prepared.effects.active.has(record.transaction.id) !== projectedEffects.active.has(record.transaction.id)))
163
39
  return {ok: true, splices: [], after: prepared.source, superseded: [], overlaps: []};
164
40
  try {
@@ -417,6 +293,13 @@ export function projectInverseSource(prepared, selected, projectedEffects, optio
417
293
  }
418
294
  }
419
295
  if (!new HistorySource(prepared.source).sameParts(texts(pieces))) throw Error('head');
296
+ if (options.origins) {
297
+ let at = 0;
298
+ return {ok: true, origins: pieces.filter(piece => piece.text).map(piece => {
299
+ const from = at; at += piece.text.length;
300
+ return [from, at, byId.get(piece.owner)?.actId ?? null];
301
+ })};
302
+ }
420
303
  const origins = new Map();
421
304
  let offset = 0;
422
305
  for (const piece of pieces) if (piece.text) { origins.set(piece, offset); offset += piece.text.length; }
@@ -1,5 +1,6 @@
1
1
  // SPDX-License-Identifier: MIT
2
2
  import {fields, scalar, plainPrototype} from './data.mjs';
3
+ import {transformText} from './source.mjs';
3
4
 
4
5
  const _RAPIER_TRANSACTION_ACTOR_LIMIT = 160;
5
6
  const _RAPIER_TRANSACTION_OPERATION_LIMIT = 96;
@@ -8,23 +9,7 @@ const _RAPIER_TRANSACTION_REQUEST_LIMIT = 160;
8
9
  function _rapierTransformSplices(text, splices, inverse = false) {
9
10
  try {
10
11
  if (!Array.isArray(splices)) return null;
11
- let value = String(text == null ? '' : text);
12
- const whole = text => typeof text === 'string' && !/[\uD800-\uDFFF]/u.test(text);
13
- const splitsPair = at => at > 0 && at < value.length &&
14
- (value.charCodeAt(at - 1) & 0xFC00) === 0xD800 &&
15
- (value.charCodeAt(at) & 0xFC00) === 0xDC00;
16
- const rows = inverse ? splices.slice().reverse() : splices;
17
- for (const row of rows) {
18
- if (!row || !Number.isSafeInteger(row.pos) || row.pos < 0 || Object.is(row.pos, -0)) return null;
19
- const pos = row.pos;
20
- const removed = inverse ? row.inserted : row.removed;
21
- const inserted = inverse ? row.removed : row.inserted;
22
- if (!whole(removed) || !whole(inserted) || pos > value.length ||
23
- pos + removed.length > value.length || splitsPair(pos) || splitsPair(pos + removed.length) ||
24
- value.slice(pos, pos + removed.length) !== removed) return null;
25
- value = value.slice(0, pos) + inserted + value.slice(pos + removed.length);
26
- }
27
- return value;
12
+ return transformText(String(text == null ? '' : text), splices, inverse);
28
13
  } catch (_) { return null; }
29
14
  }
30
15